<!--
Tutorial: https://9elements.com/blog/css-border-radius/
Demo: https://9elements.github.io/fancy-border-radius/full-control.html#13.6.25.10-78.90.90.90-.
Author: @supremebeing09 https://twitter.com/supremebeing09
-->
<div class="generator" id="box">
<div class="generator__shape generator__shape--8v" id="shape"></div>
<span class="generator__handle generator__handle--8v generator__handle--second" id="leftBottom"></span>
<span class="generator__handle generator__handle--8v generator__handle--third" id="topRight"></span>
<span class="generator__handle generator__handle--8v generator__handle--fourth" id="rightBottom"></span>
<span class="generator__handle generator__handle--8v generator__handle--fourth" id="bottomRight"></span>
<span class="generator__handle generator__handle--8v" id="left"></span>
<span class="generator__handle generator__handle--8v" id="top"></span>
<span class="generator__handle generator__handle--8v generator__handle--third" id="right"></span>
<span class="generator__handle generator__handle--8v generator__handle--second" id="bottom"></span>
</div>
<div class="output">
<div class="output__label">border-radius:</div>
<div class="input-group">
<span type="text" class="output__code" id="code">
10% 10% 10% 10% / 10% 10% 10% 10%
</span>
<button class="output__button" id="copy">copy</button>
</div>
</div>
<div class="advanced">
<div class="advanced__switch">
<input class="advanced__check" type="checkbox" id="enable-advanced">
<label class="advanced__trigger" for="enable-advanced">Custom size:
<span></span>
</label>
</div>
<div class="advanced__settings" id="dimension-input">
<div class="input-group">
<label for="width">Width:</label>
<input id="width" type="number" min="5" max="2000" value="300" />
</div>
<div class="input-group">
<label for="height">Height:</label>
<input id="height" type="number" min="5" max="2000" value="300" />
</div>
</div>
</div>
</div>
<div id="clipboard_copied"></div>
<div class="tutorials">
<a href="#" target="_blank">
<svg t="1696988571607" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4422" width="200" height="200">
<path d="M924.8 576.64v-115.2c12.8-13.44 13.44-26.88 12.8-34.56-3.2-30.08-36.48-42.24-47.36-46.72-79.36-30.08-226.56-89.6-307.84-122.88-49.28-24.32-65.28-19.84-113.28-0.64-12.8 5.12-224.64 83.84-306.56 117.76-44.8 18.56-51.2 46.08-51.2 61.44 0 25.6 17.92 48.64 50.56 62.08L259.84 537.6v257.28l8.32 8.32c3.84 3.84 91.52 92.16 252.16 92.16 150.4 0 236.16-88.96 240-92.8l7.68-8.32V540.16l36.48-15.36-1.28 52.48-29.44 49.28 88.96 84.48 98.56-85.76-36.48-48.64zM710.4 771.2c-22.4 18.56-88.96 67.2-190.08 67.2-111.36 0-179.84-48.64-202.88-67.2V561.28l144.64 58.88h0.64c46.08 17.28 81.28 16 125.44-3.2l122.24-51.84v206.08z m154.24-138.24l-17.92-16.64 13.44-22.4 2.56-102.4c4.48-14.08-0.64-25.6-8.32-32-7.68-7.04-21.76-11.52-36.48-2.56L565.12 563.84c-30.08 13.44-49.92 14.08-81.92 2.56l-298.88-121.6c-7.68-3.2-12.16-6.4-14.08-8.96 1.92-1.92 6.4-5.12 14.72-8.96 81.92-33.92 302.72-116.48 305.28-117.12h0.64c38.4-15.36 38.4-15.36 67.2-0.64l1.92 0.64c80.64 32.64 226.56 92.16 307.2 122.88v163.2l16 21.12-18.56 16z" p-id="4423"></path>
</svg>
</a>
</div>
@layer reset, base,forms, dmeo;
@layer demo {
@import "https://fonts.googleapis.com/css?family=M+PLUS+Rounded+1c:400,800|Ubuntu+Mono";
.container {
min-height: calc(100vh - 2rem);
padding-top: 2rem;
display: flex;
flex-direction: column;
align-items: stretch;
justify-content: space-evenly;
overflow: hidden;
position: relative;
}
.container::before,
.container::after {
content: "";
width: 70vmax;
height: 70vmax;
position: absolute;
background: rgba(255, 255, 255, 0.07);
left: -20vmin;
top: -20vmin;
animation: morph 15s linear infinite alternate, spin 20s linear infinite;
z-index: 1;
will-change: border-radius, transform;
transform-origin: 55% 55%;
pointer-events: none;
}
.container::after {
width: 70vmin;
height: 70vmin;
left: auto;
right: -10vmin;
top: auto;
bottom: 0;
animation: morph 10s linear infinite alternate,
spin 26s linear infinite reverse;
transform-origin: 20% 20%;
}
.generator {
width: 60vmin;
height: 60vmin;
border: 2px dashed rgba(255, 255, 255, 0.4);
position: relative;
z-index: 3;
margin-left: auto;
margin-right: auto;
}
@media screen and (min-width: 31.875rem) {
.generator {
width: 50vmin;
height: 50vmin;
}
}
.generator__shape {
width: 100%;
height: 100%;
background: #f09;
background-image: linear-gradient(45deg, #3023ae 0%, #f09 100%);
border-radius: 30% 70% 70% 30% / 30% 30% 70% 70%;
box-shadow: -10vmin 10vmin 0 rgba(255, 255, 255, 0.07);
}
.generator__shape--8v {
border-radius: 10%;
background-image: linear-gradient(
-225deg,
#fff 0%,
rgba(255, 255, 255, 0) 40%,
rgba(0, 255, 255, 0) 60%,
cyan 100%
),
linear-gradient(45deg, #3023ae 0%, #f09 100%);
}
.generator__handle {
display: block;
position: absolute;
cursor: pointer;
width: 2.5rem;
height: 2.5rem;
}
.generator__handle:before {
content: "";
position: absolute;
width: 1rem;
height: 1rem;
left: 0.75rem;
top: 0.75rem;
background: #fff;
border: 2px solid #002;
transition: box-shadow 0.2s ease-out;
will-change: box-shadow;
}
.generator__handle--second:before {
background: #3023ae;
border: 2px solid #fff;
}
.generator__handle--third:before {
background: #f09;
border: 2px solid #fff;
}
.generator__handle--fourth:before {
background: #0ff;
}
.generator__handle--8v.active:before,
.generator__handle--8v:hover:before {
box-shadow: 0 0 0 4px #fff;
border: 2px solid #002;
}
.generator__handle:not(.generator__handle--8v).active:before,
.generator__handle:not(.generator__handle--8v):hover:before {
background: #0ff;
box-shadow: 0 0 0 4px #fff;
border: 2px solid #002;
}
.generator #top {
top: -1.25rem;
left: 30%;
transform: translateX(-50%);
}
.generator #top.generator__handle--8v {
left: 10%;
}
.generator #bottom {
bottom: -1.25rem;
left: 30%;
transform: translateX(-50%);
}
.generator #bottom.generator__handle--8v {
left: 10%;
}
.generator #left {
left: -1.25rem;
top: 30%;
transform: translateY(-50%);
}
.generator #left.generator__handle--8v {
top: 10%;
}
.generator #right {
right: -1.25rem;
top: 30%;
transform: translateY(-50%);
}
.generator #right.generator__handle--8v {
top: 10%;
}
.generator #topRight {
top: -1.25rem;
left: 90%;
transform: translateX(-50%);
}
.generator #bottomRight {
bottom: -1.25rem;
left: 90%;
transform: translateX(-50%);
}
.generator #leftBottom {
left: -1.25rem;
top: 90%;
transform: translateY(-50%);
}
.generator #rightBottom {
right: -1.25rem;
top: 90%;
transform: translateY(-50%);
}
.output {
width: 90%;
text-align: left;
margin-top: 1.5em;
font-size: 1.125rem;
line-height: 1.5;
margin-left: auto;
margin-right: auto;
}
.output__label {
flex: 0 0 auto;
margin-bottom: 0.5em;
margin-right: 1em;
color: rgba(255, 255, 255, 0.9);
}
.output__code {
display: block;
font-family: "Ubuntu Mono", monospace;
flex-grow: 1;
color: #002;
background: #ccc;
padding: 0.5em 0.625em;
border-radius: 2px;
margin-bottom: 0.5em;
}
.output__button {
display: block;
border-radius: 2px;
background: #f09;
border: none;
color: rgba(255, 255, 255, 0.9);
padding: 0.5em 1em;
font-weight: bold;
width: 100%;
transition: background 0.3s ease-out;
will-change: background;
cursor: pointer;
}
.output__button:hover {
background: #3023ae;
}
@media screen and (min-width: 30.875rem) {
.output {
font-size: 1.25rem;
}
.output__code {
border-radius: 2px 0 0 2px;
flex-grow: 1;
margin-bottom: 0;
}
.output__button {
flex-shrink: 1;
border-radius: 0 2px 2px 0;
width: auto;
text-transform: uppercase;
letter-spacing: 0.1em;
}
}
@media screen and (min-width: 43rem) {
.output {
display: flex;
justify-content: stretch;
align-items: baseline;
max-width: 39rem;
}
}
.advanced {
width: 90%;
max-width: 39rem;
text-align: left;
margin: 0.5em auto;
position: relative;
z-index: 5;
display: flex;
justify-content: space-between;
align-items: center;
color: rgba(255, 255, 255, 0.9);
}
@media screen and (min-width: 560px) {
.advanced {
font-size: 1.25rem;
}
}
.advanced__switch {
padding: 0.5em 0;
flex-shrink: 0;
margin-bottom: 0.5em;
}
.advanced__settings {
display: none;
}
.advanced__settings.visible {
display: flex;
justify-content: space-between;
flex-direction: column;
}
@media screen and (min-width: 31.25rem) {
.advanced__settings.visible {
flex-direction: row;
}
}
.advanced__check {
visibility: hidden;
width: 0;
height: 0;
display: block;
border: none;
}
.advanced .input-group {
align-items: center;
margin-left: 1em;
margin-bottom: 0.5em;
justify-content: space-between;
display: flex;
}
.advanced .input-group label {
display: block;
margin-right: 0.5em;
}
.advanced .input-group input[type="number"] {
width: 4.5rem;
}
.advanced__check:checked + .advanced__trigger span:after {
background: #f09;
left: 1.15em;
border-radius: 37% 63% 55% 45% / 25% 50% 50% 75%;
}
.advanced__trigger {
display: block;
line-height: 1;
cursor: pointer;
}
.advanced__trigger span {
display: inline-block;
width: 2em;
height: 1em;
border-radius: 0.5em;
background: rgba(255, 255, 255, 0.8);
vertical-align: bottom;
position: relative;
}
@media screen and (min-width: 43rem) {
.advanced__trigger span {
margin-left: 2rem;
}
}
.advanced__trigger span:after {
content: "";
position: absolute;
width: 0.7em;
height: 0.7em;
border-radius: 50% 56% 29% 70% / 50% 73% 38% 50%;
background: #002;
position: absolute;
left: 0.15em;
top: 0.15em;
transition: left 0.3s ease-out, background 0.3s ease-out,
border-radius 0.4s ease-in-out;
}
.input-group input {
border-radius: 2px;
border: none;
background: #fff;
font-family: "Ubuntu Mono", monospace;
color: #002;
padding: 0.5em 0.625em;
}
@media screen and (min-width: 30.85rem) {
.input-group {
display: flex;
align-items: stretch;
flex-grow: 1;
margin-bottom: 0;
}
}
.company-link {
z-index: 200;
width: 14em;
position: relative;
display: flex;
flex-direction: column;
padding: 0.5em 1em 0.75em;
margin: 2em auto;
margin-bottom: 1rem;
background: rgba(255, 255, 255, 0.15);
border: 1px solid #f09;
color: #fff;
font-size: 1rem;
text-align: center;
text-decoration: none;
}
.company-link:hover {
background: rgba(255, 255, 255, 0.3);
}
.company-link__label {
margin-bottom: 0.5em;
}
@media screen and (min-width: 62rem) and (orientation: landscape) {
.company-link {
margin: 0;
position: absolute;
top: 7%;
right: 1rem;
}
}
@media screen and (min-width: 82rem) and (orientation: landscape) {
.company-link {
left: 75%;
}
}
.generator {
margin-top: 20px;
}
}
@layer reset {
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
}
@layer base {
body {
width: 100vw;
min-height: 100vh;
font-family: "Exo", "Bungee Shade", cursive, Arial, sans-serif;
background: hsl(185.03deg 29.72% 30.91%);
color-scheme: dark only;
color: #fff;
display: grid;
place-content: center;
padding: 1rem;
gap: 2rem;
&::before {
--line: hsl(0 0% 95% / 0.15);
--size: 60px;
content: "";
height: 100vh;
width: 100vw;
position: fixed;
background: linear-gradient(
90deg,
var(--line) 1px,
transparent 1px var(--size)
)
50% 50% / var(--size) var(--size),
linear-gradient(var(--line) 1px, transparent 1px var(--size)) 50% 50% /
var(--size) var(--size);
mask: linear-gradient(-15deg, transparent 30%, white);
top: 0;
transform-style: flat;
pointer-events: none;
z-index: -1;
}
}
.tutorials {
position: fixed;
bottom: 1rem;
right: 1rem;
z-index: 9999;
width: 64px;
aspect-ratio: 1;
border-radius: 50%;
background: #3f517e;
padding: 0.5rem;
display: grid;
place-content: center;
transition: all 0.28s linear;
&:hover {
background: #4161b2;
}
& svg {
display: block;
width: 100%;
height: 100%;
filter: invert(1);
}
}
@media (prefers-reduced-motion: reduce) {
*,
::before,
::after {
animation-delay: -1ms !important;
animation-duration: 1ms !important;
animation-iteration-count: 1 !important;
background-attachment: initial !important;
scroll-behavior: auto !important;
transition-duration: 0s !important;
transition-delay: 0s !important;
}
}
button {
overflow: visible;
}
button,
select {
text-transform: none;
}
button,
html input[type="button"],
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button;
cursor: pointer;
}
button[disabled],
html input[disabled] {
cursor: default;
}
button::-moz-focus-inner,
input::-moz-focus-inner {
border: 0;
padding: 0;
}
input {
line-height: normal;
}
input[type="checkbox"],
input[type="radio"] {
box-sizing: border-box;
padding: 0;
}
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
height: auto;
}
input[type="search"] {
-webkit-appearance: textfield;
box-sizing: content-box;
}
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
@keyframes morph {
0% {
border-radius: 40% 60% 60% 40% / 70% 30% 70% 30%;
}
100% {
border-radius: 40% 60%;
}
}
@keyframes spin {
to {
transform: rotate(1turn);
}
}
}
!(function (t) {
var e = {};
function n(o) {
if (e[o]) return e[o].exports;
var i = (e[o] = { i: o, l: !1, exports: {} });
return t[o].call(i.exports, i, i.exports, n), (i.l = !0), i.exports;
}
(n.m = t),
(n.c = e),
(n.d = function (t, e, o) {
n.o(t, e) || Object.defineProperty(t, e, { enumerable: !0, get: o });
}),
(n.r = function (t) {
"undefined" != typeof Symbol &&
Symbol.toStringTag &&
Object.defineProperty(t, Symbol.toStringTag, { value: "Module" }),
Object.defineProperty(t, "__esModule", { value: !0 });
}),
(n.t = function (t, e) {
if ((1 & e && (t = n(t)), 8 & e)) return t;
if (4 & e && "object" == typeof t && t && t.__esModule) return t;
var o = Object.create(null);
if (
(n.r(o),
Object.defineProperty(o, "default", { enumerable: !0, value: t }),
2 & e && "string" != typeof t)
)
for (var i in t)
n.d(
o,
i,
function (e) {
return t[e];
}.bind(null, i)
);
return o;
}),
(n.n = function (t) {
var e =
t && t.__esModule
? function () {
return t.default;
}
: function () {
return t;
};
return n.d(e, "a", e), e;
}),
(n.o = function (t, e) {
return Object.prototype.hasOwnProperty.call(t, e);
}),
(n.p = "http://localhost:8080/dist/"),
n((n.s = 11));
})([
function (t, e) {
var n;
n = (function () {
return this;
})();
try {
n = n || new Function("return this")();
} catch (t) {
"object" == typeof window && (n = window);
}
t.exports = n;
},
function (t, e, n) {
t.exports = n(7);
},
function (t, e, n) {
var o = n(3);
"string" == typeof o && (o = [[t.i, o, ""]]);
var i = { hmr: !0, transform: void 0, insertInto: void 0 };
n(5)(o, i);
o.locals && (t.exports = o.locals);
},
function (t, e, n) {
(t.exports = n(4)(!1)).push([
t.i,
'html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@keyframes morph{0%{border-radius:40% 60% 60% 40% / 70% 30% 70% 30%}100%{border-radius:40% 60%}}@keyframes spin{to{transform:rotate(1turn)}}*,*:before,*:after{box-sizing:border-box}html,body{background:#002;color:white;font-family:\'M PLUS Rounded 1c\', sans-serif;overflow-x:hidden}.alert{position:fixed;left:50%;top:30%;transform:translate(-50%, 0);color:#002;font-size:1.5rem;pointer-events:none;z-index:100;padding:1em;background:rgba(255,255,255,0.8);border-radius:0.5em;white-space:nowrap}.footer{background:rgba(255,255,255,0.15);min-height:2rem;text-align:center;color:rgba(255,255,255,0.6);font-size:0.875rem;line-height:1.2rem;padding:0.4rem 0}.footer__heart{padding:0 0.125em;color:#3023AE}.footer a{text-decoration:none;color:rgba(255,255,255,0.8)}.footer a:hover{text-decoration:underline}.header{margin:0 0 1rem;text-align:center;position:relative;z-index:10}.header__links{margin:0.5em auto 0;padding-top:0.25em;max-width:26.75rem;border-top:1px solid rgba(255,255,255,0.5)}.header__links a{font-size:0.75rem;color:#f09;text-decoration:none;padding:0 0.5rem;opacity:0.8;transition:opacity 0.3s ease-out;white-space:nowrap}.header__links a svg{width:1.35em;height:1.35em;display:inline-block;fill:#fff;vertical-align:-0.3em;margin-top:-0.125rem}.header__links a:hover{opacity:1}@media screen and (min-width: 33rem){.header__links{margin-top:1em;padding-top:0.5em}.header__links a{font-size:0.875rem}}h1{text-transform:uppercase;font-size:1.5rem;color:rgba(255,255,255,0.8);line-height:1;margin:0 0 0.125em;letter-spacing:0.01em;text-align:center}@media screen and (min-height: 36.25rem) and (min-width: 25rem){h1{font-size:2rem}}.container{min-height:calc(100vh - 2rem);padding-top:2rem;display:flex;flex-direction:column;align-items:stretch;justify-content:space-evenly;overflow:hidden;position:relative}.container::before,.container::after{content:"";width:70vmax;height:70vmax;position:absolute;background:rgba(255,255,255,0.07);left:-20vmin;top:-20vmin;animation:morph 15s linear infinite alternate, spin 20s linear infinite;z-index:1;will-change:border-radius, transform;transform-origin:55% 55%;pointer-events:none}.container::after{width:70vmin;height:70vmin;left:auto;right:-10vmin;top:auto;bottom:0;animation:morph 10s linear infinite alternate, spin 26s linear infinite reverse;transform-origin:20% 20%}.generator{width:60vmin;height:60vmin;border:2px dashed rgba(255,255,255,0.4);position:relative;z-index:3;margin-left:auto;margin-right:auto}@media screen and (min-width: 31.875rem){.generator{width:50vmin;height:50vmin}}.generator__shape{width:100%;height:100%;background:#f09;background-image:linear-gradient(45deg, #3023AE 0%, #f09 100%);border-radius:30% 70% 70% 30% / 30% 30% 70% 70%;box-shadow:-10vmin 10vmin 0 rgba(255,255,255,0.07)}.generator__shape--8v{border-radius:10%;background-image:linear-gradient(-225deg, #fff 0%, rgba(255,255,255,0) 40%, rgba(0,255,255,0) 60%, cyan 100%),linear-gradient(45deg, #3023AE 0%, #f09 100%)}.generator__handle{display:block;position:absolute;cursor:pointer;width:2.5rem;height:2.5rem}.generator__handle:before{content:"";position:absolute;width:1rem;height:1rem;left:.75rem;top:.75rem;background:#fff;border:2px solid #002;transition:box-shadow 0.2s ease-out;will-change:box-shadow}.generator__handle--second:before{background:#3023AE;border:2px solid #fff}.generator__handle--third:before{background:#f09;border:2px solid #fff}.generator__handle--fourth:before{background:#0ff}.generator__handle--8v.active:before,.generator__handle--8v:hover:before{box-shadow:0 0 0 4px #FFF;border:2px solid #002}.generator__handle:not(.generator__handle--8v).active:before,.generator__handle:not(.generator__handle--8v):hover:before{background:#0ff;box-shadow:0 0 0 4px #FFF;border:2px solid #002}.generator #top{top:-1.25rem;left:30%;transform:translateX(-50%)}.generator #top.generator__handle--8v{left:10%}.generator #bottom{bottom:-1.25rem;left:30%;transform:translateX(-50%)}.generator #bottom.generator__handle--8v{left:10%}.generator #left{left:-1.25rem;top:30%;transform:translateY(-50%)}.generator #left.generator__handle--8v{top:10%}.generator #right{right:-1.25rem;top:30%;transform:translateY(-50%)}.generator #right.generator__handle--8v{top:10%}.generator #topRight{top:-1.25rem;left:90%;transform:translateX(-50%)}.generator #bottomRight{bottom:-1.25rem;left:90%;transform:translateX(-50%)}.generator #leftBottom{left:-1.25rem;top:90%;transform:translateY(-50%)}.generator #rightBottom{right:-1.25rem;top:90%;transform:translateY(-50%)}.output{width:90%;text-align:left;margin-top:1.5em;font-size:1.125rem;line-height:1.5;margin-left:auto;margin-right:auto}.output__label{flex:0 0 auto;margin-bottom:0.5em;margin-right:1em;color:rgba(255,255,255,0.9)}.output__code{display:block;font-family:\'Ubuntu Mono\', monospace;flex-grow:1;color:#002;background:#ccc;padding:0.5em 0.625em;border-radius:2px;margin-bottom:0.5em}.output__button{display:block;border-radius:2px;background:#f09;border:none;color:rgba(255,255,255,0.9);padding:0.5em 1em;font-weight:bold;width:100%;transition:background 0.3s ease-out;will-change:background;cursor:pointer}.output__button:hover{background:#3023AE}@media screen and (min-width: 30.875rem){.output{font-size:1.25rem}.output__code{border-radius:2px 0 0 2px;flex-grow:1;margin-bottom:0}.output__button{flex-shrink:1;border-radius:0 2px 2px 0;width:auto;text-transform:uppercase;letter-spacing:0.1em}}@media screen and (min-width: 43rem){.output{display:flex;justify-content:stretch;align-items:baseline;max-width:39rem}}.advanced{width:90%;max-width:39rem;text-align:left;margin:0.5em auto;position:relative;z-index:5;display:flex;justify-content:space-between;align-items:center;color:rgba(255,255,255,0.9)}@media screen and (min-width: 560px){.advanced{font-size:1.25rem}}.advanced__switch{padding:0.5em 0;flex-shrink:0;margin-bottom:0.5em}.advanced__settings{display:none}.advanced__settings.visible{display:flex;justify-content:space-between;flex-direction:column}@media screen and (min-width: 31.25rem){.advanced__settings.visible{flex-direction:row}}.advanced__check{visibility:hidden;width:0;height:0;display:block;border:none}.advanced .input-group{align-items:center;margin-left:1em;margin-bottom:0.5em;justify-content:space-between;display:flex}.advanced .input-group label{display:block;margin-right:0.5em}.advanced .input-group input[type="number"]{width:4.5rem}.advanced__check:checked+.advanced__trigger span:after{background:#f09;left:1.15em;border-radius:37% 63% 55% 45% / 25% 50% 50% 75%}.advanced__trigger{display:block;line-height:1;cursor:pointer}.advanced__trigger span{display:inline-block;width:2em;height:1em;border-radius:0.5em;background:rgba(255,255,255,0.8);vertical-align:bottom;position:relative}@media screen and (min-width: 43rem){.advanced__trigger span{margin-left:2rem}}.advanced__trigger span:after{content:"";position:absolute;width:0.7em;height:0.7em;border-radius:50% 56% 29% 70% / 50% 73% 38% 50%;background:#002;position:absolute;left:0.15em;top:0.15em;transition:left 0.3s ease-out, background 0.3s ease-out, border-radius 0.4s ease-in-out}.input-group input{border-radius:2px;border:none;background:#fff;font-family:\'Ubuntu Mono\', monospace;color:#002;padding:0.5em 0.625em}@media screen and (min-width: 30.85rem){.input-group{display:flex;align-items:stretch;flex-grow:1;margin-bottom:0}}.company-link{z-index:200;width:14em;position:relative;display:flex;flex-direction:column;padding:0.5em 1em 0.75em;margin:2em auto;margin-bottom:1rem;background:rgba(255,255,255,0.15);border:1px solid #f09;color:#fff;font-size:1rem;text-align:center;text-decoration:none}.company-link:hover{background:rgba(255,255,255,0.3)}.company-link__label{margin-bottom:0.5em}@media screen and (min-width: 62rem) and (orientation: landscape){.company-link{margin:0;position:absolute;top:7%;right:1rem}}@media screen and (min-width: 82rem) and (orientation: landscape){.company-link{left:75%}}\n',
""
]);
},
function (t, e) {
t.exports = function (t) {
var e = [];
return (
(e.toString = function () {
return this.map(function (e) {
var n = (function (t, e) {
var n = t[1] || "",
o = t[3];
if (!o) return n;
if (e && "function" == typeof btoa) {
var i =
((a = o),
"/*# sourceMappingURL=data:application/json;charset=utf-8;base64," +
btoa(unescape(encodeURIComponent(JSON.stringify(a)))) +
" */"),
r = o.sources.map(function (t) {
return "/*# sourceURL=" + o.sourceRoot + t + " */";
});
return [n].concat(r).concat([i]).join("\n");
}
var a;
return [n].join("\n");
})(e, t);
return e[2] ? "@media " + e[2] + "{" + n + "}" : n;
}).join("");
}),
(e.i = function (t, n) {
"string" == typeof t && (t = [[null, t, ""]]);
for (var o = {}, i = 0; i < this.length; i++) {
var r = this[i][0];
"number" == typeof r && (o[r] = !0);
}
for (i = 0; i < t.length; i++) {
var a = t[i];
("number" == typeof a[0] && o[a[0]]) ||
(n && !a[2]
? (a[2] = n)
: n && (a[2] = "(" + a[2] + ") and (" + n + ")"),
e.push(a));
}
}),
e
);
};
},
function (t, e, n) {
var o,
i,
r = {},
a =
((o = function () {
return window && document && document.all && !window.atob;
}),
function () {
return void 0 === i && (i = o.apply(this, arguments)), i;
}),
s = function (t, e) {
return e ? e.querySelector(t) : document.querySelector(t);
},
c = (function (t) {
var e = {};
return function (t, n) {
if ("function" == typeof t) return t();
if (void 0 === e[t]) {
var o = s.call(this, t, n);
if (
window.HTMLIFrameElement &&
o instanceof window.HTMLIFrameElement
)
try {
o = o.contentDocument.head;
} catch (t) {
o = null;
}
e[t] = o;
}
return e[t];
};
})(),
u = null,
l = 0,
d = [],
f = n(6);
function h(t, e) {
for (var n = 0; n < t.length; n++) {
var o = t[n],
i = r[o.id];
if (i) {
i.refs++;
for (var a = 0; a < i.parts.length; a++) i.parts[a](o.parts[a]);
for (; a < o.parts.length; a++) i.parts.push(y(o.parts[a], e));
} else {
var s = [];
for (a = 0; a < o.parts.length; a++) s.push(y(o.parts[a], e));
r[o.id] = { id: o.id, refs: 1, parts: s };
}
}
}
function p(t, e) {
for (var n = [], o = {}, i = 0; i < t.length; i++) {
var r = t[i],
a = e.base ? r[0] + e.base : r[0],
s = { css: r[1], media: r[2], sourceMap: r[3] };
o[a] ? o[a].parts.push(s) : n.push((o[a] = { id: a, parts: [s] }));
}
return n;
}
function m(t, e) {
var n = c(t.insertInto);
if (!n)
throw new Error(
"Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid."
);
var o = d[d.length - 1];
if ("top" === t.insertAt)
o
? o.nextSibling
? n.insertBefore(e, o.nextSibling)
: n.appendChild(e)
: n.insertBefore(e, n.firstChild),
d.push(e);
else if ("bottom" === t.insertAt) n.appendChild(e);
else {
if ("object" != typeof t.insertAt || !t.insertAt.before)
throw new Error(
"[Style Loader]\n\n Invalid value for parameter 'insertAt' ('options.insertAt') found.\n Must be 'top', 'bottom', or Object.\n (https://github.com/webpack-contrib/style-loader#insertat)\n"
);
var i = c(t.insertAt.before, n);
n.insertBefore(e, i);
}
}
function g(t) {
if (null === t.parentNode) return !1;
t.parentNode.removeChild(t);
var e = d.indexOf(t);
e >= 0 && d.splice(e, 1);
}
function b(t) {
var e = document.createElement("style");
if (
(void 0 === t.attrs.type && (t.attrs.type = "text/css"),
void 0 === t.attrs.nonce)
) {
var o = (function () {
0;
return n.nc;
})();
o && (t.attrs.nonce = o);
}
return v(e, t.attrs), m(t, e), e;
}
function v(t, e) {
Object.keys(e).forEach(function (n) {
t.setAttribute(n, e[n]);
});
}
function y(t, e) {
var n, o, i, r;
if (e.transform && t.css) {
if (
!(r =
"function" == typeof e.transform
? e.transform(t.css)
: e.transform.default(t.css))
)
return function () {};
t.css = r;
}
if (e.singleton) {
var a = l++;
(n = u || (u = b(e))),
(o = _.bind(null, n, a, !1)),
(i = _.bind(null, n, a, !0));
} else
t.sourceMap &&
"function" == typeof URL &&
"function" == typeof URL.createObjectURL &&
"function" == typeof URL.revokeObjectURL &&
"function" == typeof Blob &&
"function" == typeof btoa
? ((n = (function (t) {
var e = document.createElement("link");
return (
void 0 === t.attrs.type && (t.attrs.type = "text/css"),
(t.attrs.rel = "stylesheet"),
v(e, t.attrs),
m(t, e),
e
);
})(e)),
(o = E.bind(null, n, e)),
(i = function () {
g(n), n.href && URL.revokeObjectURL(n.href);
}))
: ((n = b(e)),
(o = k.bind(null, n)),
(i = function () {
g(n);
}));
return (
o(t),
function (e) {
if (e) {
if (
e.css === t.css &&
e.media === t.media &&
e.sourceMap === t.sourceMap
)
return;
o((t = e));
} else i();
}
);
}
t.exports = function (t, e) {
if ("undefined" != typeof DEBUG && DEBUG && "object" != typeof document)
throw new Error(
"The style-loader cannot be used in a non-browser environment"
);
((e = e || {}).attrs = "object" == typeof e.attrs ? e.attrs : {}),
e.singleton || "boolean" == typeof e.singleton || (e.singleton = a()),
e.insertInto || (e.insertInto = "head"),
e.insertAt || (e.insertAt = "bottom");
var n = p(t, e);
return (
h(n, e),
function (t) {
for (var o = [], i = 0; i < n.length; i++) {
var a = n[i];
(s = r[a.id]).refs--, o.push(s);
}
t && h(p(t, e), e);
for (i = 0; i < o.length; i++) {
var s;
if (0 === (s = o[i]).refs) {
for (var c = 0; c < s.parts.length; c++) s.parts[c]();
delete r[s.id];
}
}
}
);
};
var w,
x =
((w = []),
function (t, e) {
return (w[t] = e), w.filter(Boolean).join("\n");
});
function _(t, e, n, o) {
var i = n ? "" : o.css;
if (t.styleSheet) t.styleSheet.cssText = x(e, i);
else {
var r = document.createTextNode(i),
a = t.childNodes;
a[e] && t.removeChild(a[e]),
a.length ? t.insertBefore(r, a[e]) : t.appendChild(r);
}
}
function k(t, e) {
var n = e.css,
o = e.media;
if ((o && t.setAttribute("media", o), t.styleSheet))
t.styleSheet.cssText = n;
else {
for (; t.firstChild; ) t.removeChild(t.firstChild);
t.appendChild(document.createTextNode(n));
}
}
function E(t, e, n) {
var o = n.css,
i = n.sourceMap,
r = void 0 === e.convertToAbsoluteUrls && i;
(e.convertToAbsoluteUrls || r) && (o = f(o)),
i &&
(o +=
"\n/*# sourceMappingURL=data:application/json;base64," +
btoa(unescape(encodeURIComponent(JSON.stringify(i)))) +
" */");
var a = new Blob([o], { type: "text/css" }),
s = t.href;
(t.href = URL.createObjectURL(a)), s && URL.revokeObjectURL(s);
}
},
function (t, e) {
t.exports = function (t) {
var e = "undefined" != typeof window && window.location;
if (!e) throw new Error("fixUrls requires window.location");
if (!t || "string" != typeof t) return t;
var n = e.protocol + "//" + e.host,
o = n + e.pathname.replace(/\/[^\/]*$/, "/");
return t.replace(
/url\s*\(((?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)\)/gi,
function (t, e) {
var i,
r = e
.trim()
.replace(/^"(.*)"$/, function (t, e) {
return e;
})
.replace(/^'(.*)'$/, function (t, e) {
return e;
});
return /^(#|data:|http:\/\/|https:\/\/|file:\/\/\/|\s*$)/i.test(r)
? t
: ((i =
0 === r.indexOf("//")
? r
: 0 === r.indexOf("/")
? n + r
: o + r.replace(/^\.\//, "")),
"url(" + JSON.stringify(i) + ")");
}
);
};
},
function (t, e, n) {
(function (t, n) {
!(function () {
"use strict";
function e(t) {
var e = this.constructor;
return this.then(
function (n) {
return e.resolve(t()).then(function () {
return n;
});
},
function (n) {
return e.resolve(t()).then(function () {
return e.reject(n);
});
}
);
}
function o(t) {
return !(!t || void 0 === t.length);
}
function i() {}
function r(t) {
if (!(this instanceof r))
throw new TypeError("Promises must be constructed via new");
if ("function" != typeof t) throw new TypeError("not a function");
(this._state = 0),
(this._handled = !1),
(this._value = void 0),
(this._deferreds = []),
l(t, this);
}
function a(t, e) {
for (; 3 === t._state; ) t = t._value;
0 !== t._state
? ((t._handled = !0),
r._immediateFn(function () {
var n = 1 === t._state ? e.onFulfilled : e.onRejected;
if (null !== n) {
var o;
try {
o = n(t._value);
} catch (t) {
return void c(e.promise, t);
}
s(e.promise, o);
} else (1 === t._state ? s : c)(e.promise, t._value);
}))
: t._deferreds.push(e);
}
function s(t, e) {
try {
if (e === t)
throw new TypeError("A promise cannot be resolved with itself.");
if (e && ("object" == typeof e || "function" == typeof e)) {
var n = e.then;
if (e instanceof r)
return (t._state = 3), (t._value = e), void u(t);
if ("function" == typeof n)
return void l(
(function (t, e) {
return function () {
t.apply(e, arguments);
};
})(n, e),
t
);
}
(t._state = 1), (t._value = e), u(t);
} catch (e) {
c(t, e);
}
}
function c(t, e) {
(t._state = 2), (t._value = e), u(t);
}
function u(t) {
2 === t._state &&
0 === t._deferreds.length &&
r._immediateFn(function () {
t._handled || r._unhandledRejectionFn(t._value);
});
for (var e = 0, n = t._deferreds.length; n > e; e++)
a(t, t._deferreds[e]);
t._deferreds = null;
}
function l(t, e) {
var n = !1;
try {
t(
function (t) {
n || ((n = !0), s(e, t));
},
function (t) {
n || ((n = !0), c(e, t));
}
);
} catch (t) {
if (n) return;
(n = !0), c(e, t);
}
}
var d = setTimeout;
(r.prototype.catch = function (t) {
return this.then(null, t);
}),
(r.prototype.then = function (t, e) {
var n = new this.constructor(i);
return (
a(
this,
new (function (t, e, n) {
(this.onFulfilled = "function" == typeof t ? t : null),
(this.onRejected = "function" == typeof e ? e : null),
(this.promise = n);
})(t, e, n)
),
n
);
}),
(r.prototype.finally = e),
(r.all = function (t) {
return new r(function (e, n) {
function i(t, o) {
try {
if (o && ("object" == typeof o || "function" == typeof o)) {
var s = o.then;
if ("function" == typeof s)
return void s.call(
o,
function (e) {
i(t, e);
},
n
);
}
(r[t] = o), 0 == --a && e(r);
} catch (t) {
n(t);
}
}
if (!o(t))
return n(new TypeError("Promise.all accepts an array"));
var r = Array.prototype.slice.call(t);
if (0 === r.length) return e([]);
for (var a = r.length, s = 0; r.length > s; s++) i(s, r[s]);
});
}),
(r.resolve = function (t) {
return t && "object" == typeof t && t.constructor === r
? t
: new r(function (e) {
e(t);
});
}),
(r.reject = function (t) {
return new r(function (e, n) {
n(t);
});
}),
(r.race = function (t) {
return new r(function (e, n) {
if (!o(t))
return n(new TypeError("Promise.race accepts an array"));
for (var i = 0, a = t.length; a > i; i++)
r.resolve(t[i]).then(e, n);
});
}),
(r._immediateFn =
("function" == typeof t &&
function (e) {
t(e);
}) ||
function (t) {
d(t, 0);
}),
(r._unhandledRejectionFn = function (t) {
void 0 !== console &&
console &&
console.warn("Possible Unhandled Promise Rejection:", t);
});
var f = (function () {
if ("undefined" != typeof self) return self;
if ("undefined" != typeof window) return window;
if (void 0 !== n) return n;
throw Error("unable to locate global object");
})();
"Promise" in f
? f.Promise.prototype.finally || (f.Promise.prototype.finally = e)
: (f.Promise = r);
})(),
(function (t) {
"use strict";
function e(t, e, n, o) {
return new (n || (n = Promise))(function (i, r) {
function a(t) {
try {
c(o.next(t));
} catch (t) {
r(t);
}
}
function s(t) {
try {
c(o.throw(t));
} catch (t) {
r(t);
}
}
function c(t) {
t.done
? i(t.value)
: new n(function (e) {
e(t.value);
}).then(a, s);
}
c((o = o.apply(t, e || [])).next());
});
}
function n(t, e) {
var n,
o,
i,
r,
a = {
label: 0,
sent: function () {
if (1 & i[0]) throw i[1];
return i[1];
},
trys: [],
ops: []
};
return (
(r = { next: s(0), throw: s(1), return: s(2) }),
"function" == typeof Symbol &&
(r[Symbol.iterator] = function () {
return this;
}),
r
);
function s(r) {
return function (s) {
return (function (r) {
if (n) throw new TypeError("Generator is already executing.");
for (; a; )
try {
if (
((n = 1),
o &&
(i =
2 & r[0]
? o.return
: r[0]
? o.throw || ((i = o.return) && i.call(o), 0)
: o.next) &&
!(i = i.call(o, r[1])).done)
)
return i;
switch (((o = 0), i && (r = [2 & r[0], i.value]), r[0])) {
case 0:
case 1:
i = r;
break;
case 4:
return a.label++, { value: r[1], done: !1 };
case 5:
a.label++, (o = r[1]), (r = [0]);
continue;
case 7:
(r = a.ops.pop()), a.trys.pop();
continue;
default:
if (
!(i = (i = a.trys).length > 0 && i[i.length - 1]) &&
(6 === r[0] || 2 === r[0])
) {
a = 0;
continue;
}
if (
3 === r[0] &&
(!i || (r[1] > i[0] && r[1] < i[3]))
) {
a.label = r[1];
break;
}
if (6 === r[0] && a.label < i[1]) {
(a.label = i[1]), (i = r);
break;
}
if (i && a.label < i[2]) {
(a.label = i[2]), a.ops.push(r);
break;
}
i[2] && a.ops.pop(), a.trys.pop();
continue;
}
r = e.call(t, a);
} catch (t) {
(r = [6, t]), (o = 0);
} finally {
n = i = 0;
}
if (5 & r[0]) throw r[1];
return { value: r[0] ? r[1] : void 0, done: !0 };
})([r, s]);
};
}
}
var o = ["text/plain", "text/html"],
i = function () {
(console.warn || console.log).call(arguments);
}.bind(console, "[clipboard-polyfill]"),
r = !0,
a = (function () {
function t() {
this.m = {};
}
return (
(t.prototype.setData = function (t, e) {
r &&
-1 === o.indexOf(t) &&
i(
"Unknown data type: " + t,
"Call clipboard.suppressWarnings() to suppress this warning."
),
(this.m[t] = e);
}),
(t.prototype.getData = function (t) {
return this.m[t];
}),
(t.prototype.forEach = function (t) {
for (var e in this.m) t(this.m[e], e);
}),
t
);
})(),
s = function (t) {},
c = !0,
u = function () {
(console.warn || console.log).apply(console, arguments);
}.bind("[clipboard-polyfill]"),
l = "text/plain";
function d(t) {
s = t;
}
function f() {
(c = !1), (r = !1);
}
function h(t) {
return e(this, void 0, void 0, function () {
var e;
return n(this, function (n) {
if (
(c &&
!t.getData(l) &&
u(
"clipboard.write() was called without a `text/plain` data type. On some platforms, this may result in an empty clipboard. Call clipboard.suppressWarnings() to suppress this warning."
),
I())
) {
if (
(function (t) {
var e = t.getData(l);
if (void 0 !== e)
return window.clipboardData.setData("Text", e);
throw new Error("No `text/plain` value was specified.");
})(t)
)
return [2];
throw new Error(
"Copying failed, possibly because the user rejected it."
);
}
if (x(t)) return s("regular execCopy worked"), [2];
if (navigator.userAgent.indexOf("Edge") > -1)
return s('UA "Edge" => assuming success'), [2];
if (_(document.body, t))
return s("copyUsingTempSelection worked"), [2];
if (
(function (t) {
var e = document.createElement("div");
e.setAttribute(
"style",
"-webkit-user-select: text !important"
),
(e.textContent = "temporary element"),
document.body.appendChild(e);
var n = _(e, t);
return document.body.removeChild(e), n;
})(t)
)
return s("copyUsingTempElem worked"), [2];
if (
void 0 !== (e = t.getData(l)) &&
(function (t) {
s("copyTextUsingDOM");
var e = document.createElement("div");
e.setAttribute(
"style",
"-webkit-user-select: text !important"
);
var n = e;
e.attachShadow &&
(s("Using shadow DOM."),
(n = e.attachShadow({ mode: "open" })));
var o = document.createElement("span");
(o.innerText = t),
n.appendChild(o),
document.body.appendChild(e),
k(o);
var i = document.execCommand("copy");
return E(), document.body.removeChild(e), i;
})(e)
)
return s("copyTextUsingDOM worked"), [2];
throw new Error("Copy command failed.");
});
});
}
function p(t) {
return e(this, void 0, void 0, function () {
return n(this, function (e) {
return navigator.clipboard && navigator.clipboard.writeText
? (s("Using `navigator.clipboard.writeText()`."),
[2, navigator.clipboard.writeText(t)])
: [2, h(T(t))];
});
});
}
function m() {
return e(this, void 0, void 0, function () {
var t;
return n(this, function (e) {
switch (e.label) {
case 0:
return (t = T), [4, g()];
case 1:
return [2, t.apply(void 0, [e.sent()])];
}
});
});
}
function g() {
return e(this, void 0, void 0, function () {
return n(this, function (t) {
if (navigator.clipboard && navigator.clipboard.readText)
return (
s("Using `navigator.clipboard.readText()`."),
[2, navigator.clipboard.readText()]
);
if (I()) return s("Reading text using IE strategy."), [2, R()];
throw new Error("Read is not supported in your browser.");
});
});
}
var b = !1;
function v() {
b ||
(c &&
u(
'The deprecated default object of `clipboard-polyfill` was called. Please switch to `import * as clipboard from "clipboard-polyfill"` and see https://github.com/lgarron/clipboard-polyfill/issues/101 for more info.'
),
(b = !0));
}
var y = {
DT: a,
setDebugLog: function (t) {
return v(), d(t);
},
suppressWarnings: function () {
return v(), f();
},
write: function (t) {
return e(this, void 0, void 0, function () {
return n(this, function (e) {
return v(), [2, h(t)];
});
});
},
writeText: function (t) {
return e(this, void 0, void 0, function () {
return n(this, function (e) {
return v(), [2, p(t)];
});
});
},
read: function () {
return e(this, void 0, void 0, function () {
return n(this, function (t) {
return v(), [2, m()];
});
});
},
readText: function () {
return e(this, void 0, void 0, function () {
return n(this, function (t) {
return v(), [2, g()];
});
});
}
},
w = function () {
this.success = !1;
};
function x(t) {
var e = new w(),
n = function (t, e, n) {
s("listener called"),
(t.success = !0),
e.forEach(function (e, o) {
var i = n.clipboardData;
i.setData(o, e),
o === l &&
i.getData(o) !== e &&
(s("setting text/plain failed"), (t.success = !1));
}),
n.preventDefault();
}.bind(this, e, t);
document.addEventListener("copy", n);
try {
document.execCommand("copy");
} finally {
document.removeEventListener("copy", n);
}
return e.success;
}
function _(t, e) {
k(t);
var n = x(e);
return E(), n;
}
function k(t) {
var e = document.getSelection();
if (e) {
var n = document.createRange();
n.selectNodeContents(t), e.removeAllRanges(), e.addRange(n);
}
}
function E() {
var t = document.getSelection();
t && t.removeAllRanges();
}
function T(t) {
var e = new a();
return e.setData(l, t), e;
}
function I() {
return (
"undefined" == typeof ClipboardEvent &&
void 0 !== window.clipboardData &&
void 0 !== window.clipboardData.setData
);
}
function R() {
return e(this, void 0, void 0, function () {
var t;
return n(this, function (e) {
if ("" === (t = window.clipboardData.getData("Text")))
throw new Error(
"Empty clipboard or could not read plain text from clipboard"
);
return [2, t];
});
});
}
(t.DT = a),
(t.default = y),
(t.read = m),
(t.readText = g),
(t.setDebugLog = d),
(t.suppressWarnings = f),
(t.write = h),
(t.writeText = p),
Object.defineProperty(t, "__esModule", { value: !0 });
})(e);
}.call(this, n(8).setImmediate, n(0)));
},
function (t, e, n) {
(function (t) {
var o =
(void 0 !== t && t) || ("undefined" != typeof self && self) || window,
i = Function.prototype.apply;
function r(t, e) {
(this._id = t), (this._clearFn = e);
}
(e.setTimeout = function () {
return new r(i.call(setTimeout, o, arguments), clearTimeout);
}),
(e.setInterval = function () {
return new r(i.call(setInterval, o, arguments), clearInterval);
}),
(e.clearTimeout = e.clearInterval = function (t) {
t && t.close();
}),
(r.prototype.unref = r.prototype.ref = function () {}),
(r.prototype.close = function () {
this._clearFn.call(o, this._id);
}),
(e.enroll = function (t, e) {
clearTimeout(t._idleTimeoutId), (t._idleTimeout = e);
}),
(e.unenroll = function (t) {
clearTimeout(t._idleTimeoutId), (t._idleTimeout = -1);
}),
(e._unrefActive = e.active = function (t) {
clearTimeout(t._idleTimeoutId);
var e = t._idleTimeout;
e >= 0 &&
(t._idleTimeoutId = setTimeout(function () {
t._onTimeout && t._onTimeout();
}, e));
}),
n(9),
(e.setImmediate =
("undefined" != typeof self && self.setImmediate) ||
(void 0 !== t && t.setImmediate) ||
(this && this.setImmediate)),
(e.clearImmediate =
("undefined" != typeof self && self.clearImmediate) ||
(void 0 !== t && t.clearImmediate) ||
(this && this.clearImmediate));
}.call(this, n(0)));
},
function (t, e, n) {
(function (t, e) {
!(function (t, n) {
"use strict";
if (!t.setImmediate) {
var o,
i,
r,
a,
s,
c = 1,
u = {},
l = !1,
d = t.document,
f = Object.getPrototypeOf && Object.getPrototypeOf(t);
(f = f && f.setTimeout ? f : t),
"[object process]" === {}.toString.call(t.process)
? (o = function (t) {
e.nextTick(function () {
p(t);
});
})
: !(function () {
if (t.postMessage && !t.importScripts) {
var e = !0,
n = t.onmessage;
return (
(t.onmessage = function () {
e = !1;
}),
t.postMessage("", "*"),
(t.onmessage = n),
e
);
}
})()
? t.MessageChannel
? (((r = new MessageChannel()).port1.onmessage = function (t) {
p(t.data);
}),
(o = function (t) {
r.port2.postMessage(t);
}))
: d && "onreadystatechange" in d.createElement("script")
? ((i = d.documentElement),
(o = function (t) {
var e = d.createElement("script");
(e.onreadystatechange = function () {
p(t),
(e.onreadystatechange = null),
i.removeChild(e),
(e = null);
}),
i.appendChild(e);
}))
: (o = function (t) {
setTimeout(p, 0, t);
})
: ((a = "setImmediate$" + Math.random() + "$"),
(s = function (e) {
e.source === t &&
"string" == typeof e.data &&
0 === e.data.indexOf(a) &&
p(+e.data.slice(a.length));
}),
t.addEventListener
? t.addEventListener("message", s, !1)
: t.attachEvent("onmessage", s),
(o = function (e) {
t.postMessage(a + e, "*");
})),
(f.setImmediate = function (t) {
"function" != typeof t && (t = new Function("" + t));
for (
var e = new Array(arguments.length - 1), n = 0;
n < e.length;
n++
)
e[n] = arguments[n + 1];
var i = { callback: t, args: e };
return (u[c] = i), o(c), c++;
}),
(f.clearImmediate = h);
}
function h(t) {
delete u[t];
}
function p(t) {
if (l) setTimeout(p, 0, t);
else {
var e = u[t];
if (e) {
l = !0;
try {
!(function (t) {
var e = t.callback,
n = t.args;
switch (n.length) {
case 0:
e();
break;
case 1:
e(n[0]);
break;
case 2:
e(n[0], n[1]);
break;
case 3:
e(n[0], n[1], n[2]);
break;
default:
e.apply(void 0, n);
}
})(e);
} finally {
h(t), (l = !1);
}
}
}
}
})("undefined" == typeof self ? (void 0 === t ? this : t) : self);
}.call(this, n(0), n(10)));
},
function (t, e) {
var n,
o,
i = (t.exports = {});
function r() {
throw new Error("setTimeout has not been defined");
}
function a() {
throw new Error("clearTimeout has not been defined");
}
function s(t) {
if (n === setTimeout) return setTimeout(t, 0);
if ((n === r || !n) && setTimeout)
return (n = setTimeout), setTimeout(t, 0);
try {
return n(t, 0);
} catch (e) {
try {
return n.call(null, t, 0);
} catch (e) {
return n.call(this, t, 0);
}
}
}
!(function () {
try {
n = "function" == typeof setTimeout ? setTimeout : r;
} catch (t) {
n = r;
}
try {
o = "function" == typeof clearTimeout ? clearTimeout : a;
} catch (t) {
o = a;
}
})();
var c,
u = [],
l = !1,
d = -1;
function f() {
l &&
c &&
((l = !1), c.length ? (u = c.concat(u)) : (d = -1), u.length && h());
}
function h() {
if (!l) {
var t = s(f);
l = !0;
for (var e = u.length; e; ) {
for (c = u, u = []; ++d < e; ) c && c[d].run();
(d = -1), (e = u.length);
}
(c = null),
(l = !1),
(function (t) {
if (o === clearTimeout) return clearTimeout(t);
if ((o === a || !o) && clearTimeout)
return (o = clearTimeout), clearTimeout(t);
try {
o(t);
} catch (e) {
try {
return o.call(null, t);
} catch (e) {
return o.call(this, t);
}
}
})(t);
}
}
function p(t, e) {
(this.fun = t), (this.array = e);
}
function m() {}
(i.nextTick = function (t) {
var e = new Array(arguments.length - 1);
if (arguments.length > 1)
for (var n = 1; n < arguments.length; n++) e[n - 1] = arguments[n];
u.push(new p(t, e)), 1 !== u.length || l || s(h);
}),
(p.prototype.run = function () {
this.fun.apply(null, this.array);
}),
(i.title = "browser"),
(i.browser = !0),
(i.env = {}),
(i.argv = []),
(i.version = ""),
(i.versions = {}),
(i.on = m),
(i.addListener = m),
(i.once = m),
(i.off = m),
(i.removeListener = m),
(i.removeAllListeners = m),
(i.emit = m),
(i.prependListener = m),
(i.prependOnceListener = m),
(i.listeners = function (t) {
return [];
}),
(i.binding = function (t) {
throw new Error("process.binding is not supported");
}),
(i.cwd = function () {
return "/";
}),
(i.chdir = function (t) {
throw new Error("process.chdir is not supported");
}),
(i.umask = function () {
return 0;
});
},
function (t, e, n) {
"use strict";
n.r(e);
n(2);
var o = n(1),
i = n.n(o);
function r(t, e) {
if (!(t instanceof e))
throw new TypeError("Cannot call a class as a function");
}
function a(t, e) {
for (var n = 0; n < e.length; n++) {
var o = e[n];
(o.enumerable = o.enumerable || !1),
(o.configurable = !0),
"value" in o && (o.writable = !0),
Object.defineProperty(t, o.key, o);
}
}
var s = (function () {
function t() {
var e = this,
n =
arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
o = n.shapeElemId,
i = void 0 === o ? "shape" : o,
a = n.generatorElemId,
s = void 0 === a ? "code" : a,
c = n.copyCodeId,
u = void 0 === c ? "copy" : c,
l = n.copiedCodeId,
d = void 0 === l ? "clipboard_copied" : l,
f = n.boxContainerId,
h = void 0 === f ? "box" : f,
p = n.widthInputId,
m = void 0 === p ? "width" : p,
g = n.heightInputId,
b = void 0 === g ? "height" : g,
v = n.enableAdvancedId,
y = void 0 === v ? "enable-advanced" : v,
w = n.initState,
x = void 0 === w ? null : w,
_ = n.moveableElems;
r(this, t),
(this.generatorElem = document.getElementById(s)),
(this.shapeElem = document.getElementById(i)),
(this.copiedCode = document.getElementById(d)),
(this.boxContainer = document.getElementById(h)),
(this.widthInput = document.getElementById(m)),
(this.heightInput = document.getElementById(b)),
(this.widthInput.onchange = function () {
e.updateState(e.widthInput.value, "width");
}),
(this.heightInput.onchange = function () {
e.updateState(e.heightInput.value, "height");
}),
(this.enableAdvanced = document.getElementById(y)),
(this.enableAdvanced.onclick = this.enableAdvancedOnClick.bind(this)),
this.initState(x),
this.initAdvanced(),
(this.handles = this.initHandles(_)),
(document.getElementById(u).onclick = this.setClipboard.bind(this));
}
var e, n, o;
return (
(e = t),
(o = [
{
key: "loadUrlParams",
value: function (t) {
var e,
n = /#(\d\d?|100)\.(\d\d?|100)\.(\d\d?|100)\.(\d\d?|100)-(?:(\d\d?|100)\.(\d\d?|100)\.(\d\d?|100)\.(\d\d?|100))?-(\d*).(\d*)/gm,
o = [
"left",
"top",
"right",
"bottom",
"leftBottom",
"topRight",
"rightBottom",
"bottomRight",
"height",
"width"
],
i = {};
if (!n.test(t)) return null;
for (n.lastIndex = 0; null !== (e = n.exec(t)); )
e.forEach(function (t, e) {
0 != e && (i[o[e - 1]] = t);
});
return i;
}
}
]),
(n = [
{
key: "initHandles",
value: function (t) {
throw new Error("You have to implement the method initHandles!");
}
},
{
key: "updateBorderRadius",
value: function () {
throw new Error(
"You have to implement the method updateBorderRadius!"
);
}
},
{
key: "initState",
value: function (t) {
throw new Error("You have to implement the method initState!");
}
},
{
key: "initAdvanced",
value: function () {
"" !== this.state.width &&
"" !== this.state.height &&
((this.enableAdvanced.checked = !0),
document
.getElementById("dimension-input")
.classList.add("visible"));
}
},
{
key: "enableAdvancedOnClick",
value: function (t) {
this.enableAdvanced.checked
? (document
.getElementById("dimension-input")
.classList.add("visible"),
(this.state.width = this.boxContainer.offsetWidth),
(this.state.height = this.boxContainer.offsetHeight),
this.updateUI())
: (document
.getElementById("dimension-input")
.classList.remove("visible"),
this.updateState("", "width"),
this.updateState("", "height"),
(this.boxContainer.style.height = ""),
(this.boxContainer.style.width = ""));
}
},
{
key: "setClipboard",
value: function () {
var t = this;
i.a.writeText(this.generatorElem.innerHTML).then(
function () {
t.copiedCode.innerHTML =
'<div class="alert">Copied to clipboard 👍</div>';
},
function () {
t.copiedCode.innerHTML =
'<div class="alert">💔 Not Supported</div>';
}
),
setTimeout(function () {
t.copiedCode.innerHTML = "";
}, 2e3);
}
},
{
key: "setUrlHash",
value: function (t) {
window.history && "pushState" in window.history
? history.pushState(null, null, "#" + t)
: (window.location.hash = t);
}
},
{
key: "updateState",
value: function (t, e) {
(this.state[e] = t), this.updateUI();
}
},
{
key: "updateUI",
value: function () {
this.updateBorderRadius(), this.updateBox();
}
},
{
key: "updateBox",
value: function () {
if (this.enableAdvanced.checked) {
var t = "" == this.state.height ? "" : this.state.height + "px",
e = "" == this.state.width ? "" : this.state.width + "px";
(this.boxContainer.style.height = t),
(this.boxContainer.style.width = e),
(this.heightInput.value = this.state.height),
(this.widthInput.value = this.state.width);
}
}
},
{
key: "saveUrlParams",
value: function () {
throw new Error(
"You have to implement the method saveUrlParams!"
);
}
}
]) && a(e.prototype, n),
o && a(e, o),
t
);
})();
function c(t, e) {
if (!(t instanceof e))
throw new TypeError("Cannot call a class as a function");
}
function u(t, e) {
for (var n = 0; n < e.length; n++) {
var o = e[n];
(o.enumerable = o.enumerable || !1),
(o.configurable = !0),
"value" in o && (o.writable = !0),
Object.defineProperty(t, o.key, o);
}
}
var l = (function () {
function t(e, n) {
var o =
arguments.length > 2 && void 0 !== arguments[2]
? arguments[2]
: "x",
i =
arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : 30,
r =
arguments.length > 4 && void 0 !== arguments[4]
? arguments[4]
: function () {};
c(this, t),
(this.axis = o),
(this.pos = i),
(this.elem = e),
(this.onChange = n),
(this.onDragEnd = r),
(this.elem.onmousedown = this.dragMouseDown.bind(this)),
(this.elem.ontouchstart = this.dragMouseDown.bind(this)),
this.setInitPos(i),
this.onChange(this.pos, this.elem.id);
}
var e, n, o;
return (
(e = t),
(n = [
{
key: "dragMouseDown",
value: function (t) {
(t = t || window.event).preventDefault(),
(this.currentSpan = t.target),
this.currentSpan.classList.add("active"),
(document.onmouseup = this.closeDragElement.bind(this)),
(document.ontouchend = this.closeDragElement.bind(this)),
(document.onmousemove = this.elementDrag.bind(this)),
(document.ontouchmove = this.elementDrag.bind(this));
}
},
{
key: "elementDrag",
value: function (t) {
if (
((t = t || window.event),
"undefined" != typeof TouchEvent && t instanceof TouchEvent)
) {
var e = t.changedTouches[0];
this.setPos(e.clientX, e.clientY);
} else this.setPos(t.clientX, t.clientY);
}
},
{
key: "setInitPos",
value: function (t) {
"x" == this.axis
? (this.elem.style.left = t + "%")
: (this.elem.style.top = t + "%");
}
},
{
key: "setPos",
value: function (t, e) {
var n = this.elem.parentNode.getBoundingClientRect();
"x" == this.axis
? ((this.pos = this.valBetween(
((100 * (t - 5 - n.left).toFixed(0)) / n.width).toFixed(0),
0,
100
)),
(this.elem.style.left = this.pos + "%"))
: ((this.pos = this.valBetween(
((100 * (e - 5 - n.top).toFixed(0)) / n.height).toFixed(0),
0,
100
)),
(this.elem.style.top = this.pos + "%")),
this.onChange(this.pos, this.elem.id);
}
},
{
key: "closeDragElement",
value: function () {
this.currentSpan.classList.remove("active"),
this.onDragEnd(),
(document.onmouseup = null),
(document.onmousemove = null),
(document.ontouchend = null),
(document.ontouchmove = null);
}
},
{
key: "valBetween",
value: function (t, e, n) {
return Math.min(n, Math.max(e, t));
}
}
]) && u(e.prototype, n),
o && u(e, o),
t
);
})();
function d(t) {
return (d =
"function" == typeof Symbol && "symbol" == typeof Symbol.iterator
? function (t) {
return typeof t;
}
: function (t) {
return t &&
"function" == typeof Symbol &&
t.constructor === Symbol &&
t !== Symbol.prototype
? "symbol"
: typeof t;
})(t);
}
function f(t, e) {
if (!(t instanceof e))
throw new TypeError("Cannot call a class as a function");
}
function h(t, e) {
for (var n = 0; n < e.length; n++) {
var o = e[n];
(o.enumerable = o.enumerable || !1),
(o.configurable = !0),
"value" in o && (o.writable = !0),
Object.defineProperty(t, o.key, o);
}
}
function p(t, e) {
return !e || ("object" !== d(e) && "function" != typeof e)
? (function (t) {
if (void 0 === t)
throw new ReferenceError(
"this hasn't been initialised - super() hasn't been called"
);
return t;
})(t)
: e;
}
function m() {
if ("undefined" == typeof Reflect || !Reflect.construct) return !1;
if (Reflect.construct.sham) return !1;
if ("function" == typeof Proxy) return !0;
try {
return (
Date.prototype.toString.call(
Reflect.construct(Date, [], function () {})
),
!0
);
} catch (t) {
return !1;
}
}
function g(t) {
return (g = Object.setPrototypeOf
? Object.getPrototypeOf
: function (t) {
return t.__proto__ || Object.getPrototypeOf(t);
})(t);
}
function b(t, e) {
return (b =
Object.setPrototypeOf ||
function (t, e) {
return (t.__proto__ = e), t;
})(t, e);
}
var v = (function (t) {
!(function (t, e) {
if ("function" != typeof e && null !== e)
throw new TypeError(
"Super expression must either be null or a function"
);
(t.prototype = Object.create(e && e.prototype, {
constructor: { value: t, writable: !0, configurable: !0 }
})),
e && b(t, e);
})(a, t);
var e,
n,
o,
i,
r =
((e = a),
function () {
var t,
n = g(e);
if (m()) {
var o = g(this).constructor;
t = Reflect.construct(n, arguments, o);
} else t = n.apply(this, arguments);
return p(this, t);
});
function a() {
return f(this, a), r.apply(this, arguments);
}
return (
(n = a),
(o = [
{
key: "initState",
value: function (t) {
this.state =
null == t
? {
left: 10,
right: 10,
top: 10,
bottom: 10,
leftBottom: 90,
rightBottom: 90,
topRight: 90,
bottomRight: 90,
width: "",
height: "",
advancedMode: !1
}
: t;
}
},
{
key: "initHandles",
value: function (t) {
return {
left: new l(
t.left,
this.updateState.bind(this),
"y",
this.state.left,
this.saveUrlParams.bind(this)
),
right: new l(
t.right,
this.updateState.bind(this),
"y",
this.state.right,
this.saveUrlParams.bind(this)
),
top: new l(
t.top,
this.updateState.bind(this),
"x",
this.state.top,
this.saveUrlParams.bind(this)
),
bottom: new l(
t.bottom,
this.updateState.bind(this),
"x",
this.state.bottom,
this.saveUrlParams.bind(this)
),
leftBottom: new l(
t.leftBottom,
this.updateState.bind(this),
"y",
this.state.leftBottom,
this.saveUrlParams.bind(this)
),
rightBottom: new l(
t.rightBottom,
this.updateState.bind(this),
"y",
this.state.rightBottom,
this.saveUrlParams.bind(this)
),
topRight: new l(
t.topRight,
this.updateState.bind(this),
"x",
this.state.topRight,
this.saveUrlParams.bind(this)
),
bottomRight: new l(
t.bottomRight,
this.updateState.bind(this),
"x",
this.state.bottomRight,
this.saveUrlParams.bind(this)
)
};
}
},
{
key: "updateBorderRadius",
value: function () {
var t = this.state.top + "% ";
(t += 100 - this.state.topRight + "% "),
(t += 100 - this.state.bottomRight + "% "),
(t += this.state.bottom + "% / "),
(t += this.state.left + "% "),
(t += this.state.right + "% "),
(t += 100 - this.state.rightBottom + "% "),
(t += 100 - this.state.leftBottom + "% "),
(this.shapeElem.style["border-radius"] = t),
(this.generatorElem.innerHTML = t);
}
},
{
key: "saveUrlParams",
value: function () {
var t = this.state,
e = t.left,
n = t.top,
o = t.right,
i = t.bottom,
r = t.width,
a = t.height,
s = t.leftBottom,
c = t.topRight,
u = t.rightBottom,
l = t.bottomRight,
d = ""
.concat(e, ".")
.concat(n, ".")
.concat(o, ".")
.concat(i, "-")
.concat(s, ".")
.concat(c, ".")
.concat(u, ".")
.concat(l, "-")
.concat(a, ".")
.concat(r);
this.setUrlHash(d);
}
}
]) && h(n.prototype, o),
i && h(n, i),
a
);
})(s),
y = {
left: document.getElementById("left"),
right: document.getElementById("right"),
bottom: document.getElementById("bottom"),
top: document.getElementById("top"),
leftBottom: document.getElementById("leftBottom"),
rightBottom: document.getElementById("rightBottom"),
bottomRight: document.getElementById("bottomRight"),
topRight: document.getElementById("topRight")
},
w = v.loadUrlParams(window.location.href);
new v({ moveableElems: y, initState: w });
}
]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2xpcGJvYXJkLXBvbHlmaWxsL2J1aWxkL2NsaXBib2FyZC1wb2x5ZmlsbC5wcm9taXNlLmpzIiwid2VicGFjazovLy8uL3NyYy9zY3NzL21haW4uc2Nzcz83YWIwIiwid2VicGFjazovLy8uL3NyYy9zY3NzL21haW4uc2NzcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvbGliL3VybHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NsaXBib2FyZC1wb2x5ZmlsbC9kaXN0L2NsaXBib2FyZC1wb2x5ZmlsbC5wcm9taXNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy90aW1lcnMtYnJvd3NlcmlmeS9tYWluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zZXRpbW1lZGlhdGUvc2V0SW1tZWRpYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2pzL2FkanVzdGFibGVfYm94LmpzIiwid2VicGFjazovLy8uL3NyYy9qcy9tb3ZhYmxlLmpzIiwid2VicGFjazovLy8uL3NyYy9qcy9mdWxsX2NvbnRyb2xfYm94LmpzIiwid2VicGFjazovLy8uL3NyYy9pbmRleDh2LmpzIl0sIm5hbWVzIjpbImluc3RhbGxlZE1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJleHBvcnRzIiwibW9kdWxlIiwiaSIsImwiLCJtb2R1bGVzIiwiY2FsbCIsIm0iLCJjIiwiZCIsIm5hbWUiLCJnZXR0ZXIiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidmFsdWUiLCJ0IiwibW9kZSIsIl9fZXNNb2R1bGUiLCJucyIsImNyZWF0ZSIsImtleSIsImJpbmQiLCJuIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwiZyIsInRoaXMiLCJGdW5jdGlvbiIsImUiLCJ3aW5kb3ciLCJjb250ZW50Iiwib3B0aW9ucyIsInRyYW5zZm9ybSIsInVuZGVmaW5lZCIsImxvY2FscyIsInB1c2giLCJ1c2VTb3VyY2VNYXAiLCJsaXN0IiwidG9TdHJpbmciLCJtYXAiLCJpdGVtIiwiY3NzTWFwcGluZyIsImJ0b2EiLCJzb3VyY2VNYXBwaW5nIiwic291cmNlTWFwIiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJKU09OIiwic3RyaW5naWZ5Iiwic291cmNlVVJMcyIsInNvdXJjZXMiLCJzb3VyY2UiLCJzb3VyY2VSb290IiwiY29uY2F0Iiwiam9pbiIsImNzc1dpdGhNYXBwaW5nVG9TdHJpbmciLCJtZWRpYVF1ZXJ5IiwiYWxyZWFkeUltcG9ydGVkTW9kdWxlcyIsImxlbmd0aCIsImlkIiwiZm4iLCJtZW1vIiwic3R5bGVzSW5Eb20iLCJpc09sZElFIiwiZG9jdW1lbnQiLCJhbGwiLCJhdG9iIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJnZXRUYXJnZXQiLCJ0YXJnZXQiLCJwYXJlbnQiLCJxdWVyeVNlbGVjdG9yIiwiZ2V0RWxlbWVudCIsInN0eWxlVGFyZ2V0IiwiSFRNTElGcmFtZUVsZW1lbnQiLCJjb250ZW50RG9jdW1lbnQiLCJoZWFkIiwic2luZ2xldG9uIiwic2luZ2xldG9uQ291bnRlciIsInN0eWxlc0luc2VydGVkQXRUb3AiLCJmaXhVcmxzIiwiYWRkU3R5bGVzVG9Eb20iLCJzdHlsZXMiLCJkb21TdHlsZSIsInJlZnMiLCJqIiwicGFydHMiLCJhZGRTdHlsZSIsImxpc3RUb1N0eWxlcyIsIm5ld1N0eWxlcyIsImJhc2UiLCJwYXJ0IiwiY3NzIiwibWVkaWEiLCJpbnNlcnRTdHlsZUVsZW1lbnQiLCJzdHlsZSIsImluc2VydEludG8iLCJFcnJvciIsImxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wIiwiaW5zZXJ0QXQiLCJuZXh0U2libGluZyIsImluc2VydEJlZm9yZSIsImFwcGVuZENoaWxkIiwiZmlyc3RDaGlsZCIsImJlZm9yZSIsInJlbW92ZVN0eWxlRWxlbWVudCIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsImlkeCIsImluZGV4T2YiLCJzcGxpY2UiLCJjcmVhdGVTdHlsZUVsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiYXR0cnMiLCJ0eXBlIiwibm9uY2UiLCJnZXROb25jZSIsImFkZEF0dHJzIiwiZWwiLCJrZXlzIiwiZm9yRWFjaCIsInNldEF0dHJpYnV0ZSIsIm9iaiIsInVwZGF0ZSIsInJlbW92ZSIsInJlc3VsdCIsImRlZmF1bHQiLCJzdHlsZUluZGV4IiwiYXBwbHlUb1NpbmdsZXRvblRhZyIsIlVSTCIsImNyZWF0ZU9iamVjdFVSTCIsInJldm9rZU9iamVjdFVSTCIsIkJsb2IiLCJsaW5rIiwicmVsIiwiY3JlYXRlTGlua0VsZW1lbnQiLCJ1cGRhdGVMaW5rIiwiaHJlZiIsImFwcGx5VG9UYWciLCJuZXdPYmoiLCJERUJVRyIsIm5ld0xpc3QiLCJtYXlSZW1vdmUiLCJ0ZXh0U3RvcmUiLCJyZXBsYWNlVGV4dCIsImluZGV4IiwicmVwbGFjZW1lbnQiLCJmaWx0ZXIiLCJCb29sZWFuIiwic3R5bGVTaGVldCIsImNzc1RleHQiLCJjc3NOb2RlIiwiY3JlYXRlVGV4dE5vZGUiLCJjaGlsZE5vZGVzIiwiYXV0b0ZpeFVybHMiLCJjb252ZXJ0VG9BYnNvbHV0ZVVybHMiLCJibG9iIiwib2xkU3JjIiwibG9jYXRpb24iLCJiYXNlVXJsIiwicHJvdG9jb2wiLCJob3N0IiwiY3VycmVudERpciIsInBhdGhuYW1lIiwicmVwbGFjZSIsImZ1bGxNYXRjaCIsIm9yaWdVcmwiLCJuZXdVcmwiLCJ1bnF1b3RlZE9yaWdVcmwiLCJ0cmltIiwiJDEiLCJ0ZXN0IiwiY29uc3RydWN0b3IiLCJ0aGVuIiwicmVzb2x2ZSIsInJlamVjdCIsIlR5cGVFcnJvciIsIl9zdGF0ZSIsIl9oYW5kbGVkIiwiX3ZhbHVlIiwiX2RlZmVycmVkcyIsIl9pbW1lZGlhdGVGbiIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsImEiLCJwcm9taXNlIiwidSIsIl91bmhhbmRsZWRSZWplY3Rpb25GbiIsImYiLCJzZXRUaW1lb3V0IiwiY2F0Y2giLCJmaW5hbGx5IiwiQXJyYXkiLCJzbGljZSIsInJhY2UiLCJzZXRJbW1lZGlhdGUiLCJjb25zb2xlIiwid2FybiIsInNlbGYiLCJnbG9iYWwiLCJQcm9taXNlIiwibmV4dCIsInRocm93IiwiZG9uZSIsImxhYmVsIiwic2VudCIsInRyeXMiLCJvcHMiLCJyZXR1cm4iLCJpdGVyYXRvciIsInBvcCIsImxvZyIsInNldERhdGEiLCJnZXREYXRhIiwiY2xpcGJvYXJkRGF0YSIsIngiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJfIiwiYm9keSIsInRleHRDb250ZW50IiwiYXR0YWNoU2hhZG93IiwiaW5uZXJUZXh0IiwiVCIsImV4ZWNDb21tYW5kIiwiRSIsImgiLCJjbGlwYm9hcmQiLCJ3cml0ZVRleHQiLCJEIiwidiIsInkiLCJyZWFkVGV4dCIsIkMiLCJ3IiwiYiIsIkRUIiwic2V0RGVidWdMb2ciLCJzdXBwcmVzc1dhcm5pbmdzIiwid3JpdGUiLCJyZWFkIiwic3VjY2VzcyIsInByZXZlbnREZWZhdWx0IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJnZXRTZWxlY3Rpb24iLCJjcmVhdGVSYW5nZSIsInNlbGVjdE5vZGVDb250ZW50cyIsInJlbW92ZUFsbFJhbmdlcyIsImFkZFJhbmdlIiwiQ2xpcGJvYXJkRXZlbnQiLCJUaW1lb3V0IiwiY2xlYXJGbiIsIl9pZCIsIl9jbGVhckZuIiwic2NvcGUiLCJjbGVhclRpbWVvdXQiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJ0aW1lb3V0IiwiY2xvc2UiLCJ1bnJlZiIsInJlZiIsImVucm9sbCIsIm1zZWNzIiwiX2lkbGVUaW1lb3V0SWQiLCJfaWRsZVRpbWVvdXQiLCJ1bmVucm9sbCIsIl91bnJlZkFjdGl2ZSIsImFjdGl2ZSIsIl9vblRpbWVvdXQiLCJjbGVhckltbWVkaWF0ZSIsInJlZ2lzdGVySW1tZWRpYXRlIiwiaHRtbCIsImNoYW5uZWwiLCJtZXNzYWdlUHJlZml4Iiwib25HbG9iYWxNZXNzYWdlIiwibmV4dEhhbmRsZSIsInRhc2tzQnlIYW5kbGUiLCJjdXJyZW50bHlSdW5uaW5nQVRhc2siLCJkb2MiLCJhdHRhY2hUbyIsImdldFByb3RvdHlwZU9mIiwicHJvY2VzcyIsImhhbmRsZSIsIm5leHRUaWNrIiwicnVuSWZQcmVzZW50IiwicG9zdE1lc3NhZ2UiLCJpbXBvcnRTY3JpcHRzIiwicG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cyIsIm9sZE9uTWVzc2FnZSIsIm9ubWVzc2FnZSIsImNhblVzZVBvc3RNZXNzYWdlIiwiTWVzc2FnZUNoYW5uZWwiLCJwb3J0MSIsImV2ZW50IiwiZGF0YSIsInBvcnQyIiwiZG9jdW1lbnRFbGVtZW50Iiwic2NyaXB0Iiwib25yZWFkeXN0YXRlY2hhbmdlIiwiTWF0aCIsInJhbmRvbSIsImF0dGFjaEV2ZW50IiwiY2FsbGJhY2siLCJhcmdzIiwidGFzayIsInJ1biIsImNhY2hlZFNldFRpbWVvdXQiLCJjYWNoZWRDbGVhclRpbWVvdXQiLCJkZWZhdWx0U2V0VGltb3V0IiwiZGVmYXVsdENsZWFyVGltZW91dCIsInJ1blRpbWVvdXQiLCJmdW4iLCJjdXJyZW50UXVldWUiLCJxdWV1ZSIsImRyYWluaW5nIiwicXVldWVJbmRleCIsImNsZWFuVXBOZXh0VGljayIsImRyYWluUXVldWUiLCJsZW4iLCJtYXJrZXIiLCJydW5DbGVhclRpbWVvdXQiLCJJdGVtIiwiYXJyYXkiLCJub29wIiwidGl0bGUiLCJicm93c2VyIiwiZW52IiwiYXJndiIsInZlcnNpb24iLCJ2ZXJzaW9ucyIsIm9uIiwiYWRkTGlzdGVuZXIiLCJvbmNlIiwib2ZmIiwicmVtb3ZlTGlzdGVuZXIiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJlbWl0IiwicHJlcGVuZExpc3RlbmVyIiwicHJlcGVuZE9uY2VMaXN0ZW5lciIsImxpc3RlbmVycyIsImJpbmRpbmciLCJjd2QiLCJjaGRpciIsImRpciIsInVtYXNrIiwiQWRqdXN0YWJsZUJveCIsInNoYXBlRWxlbUlkIiwiZ2VuZXJhdG9yRWxlbUlkIiwiY29weUNvZGVJZCIsImNvcGllZENvZGVJZCIsImJveENvbnRhaW5lcklkIiwid2lkdGhJbnB1dElkIiwiaGVpZ2h0SW5wdXRJZCIsImVuYWJsZUFkdmFuY2VkSWQiLCJpbml0U3RhdGUiLCJtb3ZlYWJsZUVsZW1zIiwiZ2VuZXJhdG9yRWxlbSIsImdldEVsZW1lbnRCeUlkIiwic2hhcGVFbGVtIiwiY29waWVkQ29kZSIsImJveENvbnRhaW5lciIsIndpZHRoSW5wdXQiLCJoZWlnaHRJbnB1dCIsIm9uY2hhbmdlIiwidXBkYXRlU3RhdGUiLCJlbmFibGVBZHZhbmNlZCIsIm9uY2xpY2siLCJlbmFibGVBZHZhbmNlZE9uQ2xpY2siLCJpbml0QWR2YW5jZWQiLCJoYW5kbGVzIiwiaW5pdEhhbmRsZXMiLCJzZXRDbGlwYm9hcmQiLCJ1cmwiLCJyZWdleCIsInBhcmFtc1RvQXR0cmlidXRlIiwiYXR0cmlidXRlcyIsImxhc3RJbmRleCIsImV4ZWMiLCJtYXRjaCIsImdyb3VwSW5kZXgiLCJzdGF0ZSIsIndpZHRoIiwiaGVpZ2h0IiwiY2hlY2tlZCIsImNsYXNzTGlzdCIsImFkZCIsIm9mZnNldFdpZHRoIiwib2Zmc2V0SGVpZ2h0IiwidXBkYXRlVUkiLCJpbm5lckhUTUwiLCJoYXNoIiwiaGlzdG9yeSIsInB1c2hTdGF0ZSIsInZhbCIsInVwZGF0ZUJvcmRlclJhZGl1cyIsInVwZGF0ZUJveCIsInN0eWxlSGVpZ2h0Iiwic3R5bGVXaWR0aCIsIk1vdmFibGUiLCJlbGVtIiwib25DaGFuZ2UiLCJheGlzIiwiaW5pdFBvc2l0aW9uIiwib25EcmFnRW5kIiwicG9zIiwib25tb3VzZWRvd24iLCJkcmFnTW91c2VEb3duIiwib250b3VjaHN0YXJ0Iiwic2V0SW5pdFBvcyIsImN1cnJlbnRTcGFuIiwib25tb3VzZXVwIiwiY2xvc2VEcmFnRWxlbWVudCIsIm9udG91Y2hlbmQiLCJvbm1vdXNlbW92ZSIsImVsZW1lbnREcmFnIiwib250b3VjaG1vdmUiLCJUb3VjaEV2ZW50IiwidG91Y2hvYmoiLCJjaGFuZ2VkVG91Y2hlcyIsInNldFBvcyIsImNsaWVudFgiLCJjbGllbnRZIiwibGVmdCIsInRvcCIsIl9wb3NYIiwiX3Bvc1kiLCJib3hSZWN0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwidmFsQmV0d2VlbiIsInRvRml4ZWQiLCJtaW4iLCJtYXgiLCJGdWxsQ29udHJvbEJveCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdEJvdHRvbSIsInJpZ2h0Qm90dG9tIiwidG9wUmlnaHQiLCJib3R0b21SaWdodCIsImFkdmFuY2VkTW9kZSIsInNhdmVVcmxQYXJhbXMiLCJicmQiLCJzZXRVcmxIYXNoIiwibW92YWJsZXMiLCJwYXJhbXMiLCJsb2FkVXJsUGFyYW1zIl0sIm1hcHBpbmdzIjoiYUFDRSxJQUFJQSxFQUFtQixHQUd2QixTQUFTQyxFQUFvQkMsR0FHNUIsR0FBR0YsRUFBaUJFLEdBQ25CLE9BQU9GLEVBQWlCRSxHQUFVQyxRQUduQyxJQUFJQyxFQUFTSixFQUFpQkUsR0FBWSxDQUN6Q0csRUFBR0gsRUFDSEksR0FBRyxFQUNISCxRQUFTLElBVVYsT0FOQUksRUFBUUwsR0FBVU0sS0FBS0osRUFBT0QsUUFBU0MsRUFBUUEsRUFBT0QsUUFBU0YsR0FHL0RHLEVBQU9FLEdBQUksRUFHSkYsRUFBT0QsUUFLZkYsRUFBb0JRLEVBQUlGLEVBR3hCTixFQUFvQlMsRUFBSVYsRUFHeEJDLEVBQW9CVSxFQUFJLFNBQVNSLEVBQVNTLEVBQU1DLEdBQzNDWixFQUFvQmEsRUFBRVgsRUFBU1MsSUFDbENHLE9BQU9DLGVBQWViLEVBQVNTLEVBQU0sQ0FBRUssWUFBWSxFQUFNQyxJQUFLTCxLQUtoRVosRUFBb0JrQixFQUFJLFNBQVNoQixHQUNYLG9CQUFYaUIsUUFBMEJBLE9BQU9DLGFBQzFDTixPQUFPQyxlQUFlYixFQUFTaUIsT0FBT0MsWUFBYSxDQUFFQyxNQUFPLFdBRTdEUCxPQUFPQyxlQUFlYixFQUFTLGFBQWMsQ0FBRW1CLE9BQU8sS0FRdkRyQixFQUFvQnNCLEVBQUksU0FBU0QsRUFBT0UsR0FFdkMsR0FEVSxFQUFQQSxJQUFVRixFQUFRckIsRUFBb0JxQixJQUMvQixFQUFQRSxFQUFVLE9BQU9GLEVBQ3BCLEdBQVcsRUFBUEUsR0FBOEIsaUJBQVZGLEdBQXNCQSxHQUFTQSxFQUFNRyxXQUFZLE9BQU9ILEVBQ2hGLElBQUlJLEVBQUtYLE9BQU9ZLE9BQU8sTUFHdkIsR0FGQTFCLEVBQW9Ca0IsRUFBRU8sR0FDdEJYLE9BQU9DLGVBQWVVLEVBQUksVUFBVyxDQUFFVCxZQUFZLEVBQU1LLE1BQU9BLElBQ3RELEVBQVBFLEdBQTRCLGlCQUFURixFQUFtQixJQUFJLElBQUlNLEtBQU9OLEVBQU9yQixFQUFvQlUsRUFBRWUsRUFBSUUsRUFBSyxTQUFTQSxHQUFPLE9BQU9OLEVBQU1NLElBQVFDLEtBQUssS0FBTUQsSUFDOUksT0FBT0YsR0FJUnpCLEVBQW9CNkIsRUFBSSxTQUFTMUIsR0FDaEMsSUFBSVMsRUFBU1QsR0FBVUEsRUFBT3FCLFdBQzdCLFdBQXdCLE9BQU9yQixFQUFnQixTQUMvQyxXQUE4QixPQUFPQSxHQUV0QyxPQURBSCxFQUFvQlUsRUFBRUUsRUFBUSxJQUFLQSxHQUM1QkEsR0FJUlosRUFBb0JhLEVBQUksU0FBU2lCLEVBQVFDLEdBQVksT0FBT2pCLE9BQU9rQixVQUFVQyxlQUFlMUIsS0FBS3VCLEVBQVFDLElBR3pHL0IsRUFBb0JrQyxFQUFJLDhCQUlqQmxDLEVBQW9CQSxFQUFvQm1DLEVBQUksSSxnQkNsRnJELElBQUlDLEVBR0pBLEVBQUksV0FDSCxPQUFPQyxLQURKLEdBSUosSUFFQ0QsRUFBSUEsR0FBSyxJQUFJRSxTQUFTLGNBQWIsR0FDUixNQUFPQyxHQUVjLGlCQUFYQyxTQUFxQkosRUFBSUksUUFPckNyQyxFQUFPRCxRQUFVa0MsRyxnQkNuQmpCakMsRUFBT0QsUUFBVSxFQUFRLEksZ0JDQ3pCLElBQUl1QyxFQUFVLEVBQVEsR0FFQSxpQkFBWkEsSUFBc0JBLEVBQVUsQ0FBQyxDQUFDdEMsRUFBT0MsRUFBSXFDLEVBQVMsTUFPaEUsSUFBSUMsRUFBVSxDQUFDLEtBQU0sRUFFckIsZUFQSUMsRUFRSixnQkFBcUJDLEdBRVIsRUFBUSxFQUFSLENBQTZESCxFQUFTQyxHQUVoRkQsRUFBUUksU0FBUTFDLEVBQU9ELFFBQVV1QyxFQUFRSSxTLGlCQ2pCbEMxQyxFQUFPRCxRQUFVLEVBQVEsRUFBUixFQUF5RCxJQUs1RTRDLEtBQUssQ0FBQzNDLEVBQU9DLEVBQUksNmpUQUFvbFQsTSxjQ0E3bVRELEVBQU9ELFFBQVUsU0FBUzZDLEdBQ3pCLElBQUlDLEVBQU8sR0F3Q1gsT0FyQ0FBLEVBQUtDLFNBQVcsV0FDZixPQUFPWixLQUFLYSxLQUFJLFNBQVVDLEdBQ3pCLElBQUlWLEVBc0NQLFNBQWdDVSxFQUFNSixHQUNyQyxJQUFJTixFQUFVVSxFQUFLLElBQU0sR0FDckJDLEVBQWFELEVBQUssR0FDdEIsSUFBS0MsRUFDSixPQUFPWCxFQUdSLEdBQUlNLEdBQWdDLG1CQUFUTSxLQUFxQixDQUMvQyxJQUFJQyxHQVlhQyxFQVphSCxFQWlCeEIsbUVBSE1DLEtBQUtHLFNBQVNDLG1CQUFtQkMsS0FBS0MsVUFBVUosTUFHdEMsT0FoQmxCSyxFQUFhUixFQUFXUyxRQUFRWCxLQUFJLFNBQVVZLEdBQ2pELE1BQU8saUJBQW1CVixFQUFXVyxXQUFhRCxFQUFTLFNBRzVELE1BQU8sQ0FBQ3JCLEdBQVN1QixPQUFPSixHQUFZSSxPQUFPLENBQUNWLElBQWdCVyxLQUFLLE1BT25FLElBQW1CVixFQUpsQixNQUFPLENBQUNkLEdBQVN3QixLQUFLLE1BdEROQyxDQUF1QmYsRUFBTUosR0FDM0MsT0FBR0ksRUFBSyxHQUNBLFVBQVlBLEVBQUssR0FBSyxJQUFNVixFQUFVLElBRXRDQSxLQUVOd0IsS0FBSyxLQUlUakIsRUFBSzVDLEVBQUksU0FBU0UsRUFBUzZELEdBQ0osaUJBQVo3RCxJQUNUQSxFQUFVLENBQUMsQ0FBQyxLQUFNQSxFQUFTLE1BRTVCLElBREEsSUFBSThELEVBQXlCLEdBQ3JCaEUsRUFBSSxFQUFHQSxFQUFJaUMsS0FBS2dDLE9BQVFqRSxJQUFLLENBQ3BDLElBQUlrRSxFQUFLakMsS0FBS2pDLEdBQUcsR0FDQSxpQkFBUGtFLElBQ1RGLEVBQXVCRSxJQUFNLEdBRS9CLElBQUlsRSxFQUFJLEVBQUdBLEVBQUlFLEVBQVErRCxPQUFRakUsSUFBSyxDQUNuQyxJQUFJK0MsRUFBTzdDLEVBQVFGLEdBS0csaUJBQVorQyxFQUFLLElBQW9CaUIsRUFBdUJqQixFQUFLLE1BQzNEZ0IsSUFBZWhCLEVBQUssR0FDdEJBLEVBQUssR0FBS2dCLEVBQ0RBLElBQ1RoQixFQUFLLEdBQUssSUFBTUEsRUFBSyxHQUFLLFVBQVlnQixFQUFhLEtBRXBEbkIsRUFBS0YsS0FBS0ssTUFJTkgsSSxnQkN6Q1IsSUFFd0J1QixFQUNuQkMsRUFIREMsRUFBYyxHQVdkQyxHQVRvQkgsRUFTRixXQU1yQixPQUFPL0IsUUFBVW1DLFVBQVlBLFNBQVNDLE1BQVFwQyxPQUFPcUMsTUFaOUMsV0FFTixZQURvQixJQUFUTCxJQUFzQkEsRUFBT0QsRUFBR08sTUFBTXpDLEtBQU0wQyxZQUNoRFAsSUFhTFEsRUFBWSxTQUFVQyxFQUFRQyxHQUNoQyxPQUFJQSxFQUNLQSxFQUFPQyxjQUFjRixHQUV2Qk4sU0FBU1EsY0FBY0YsSUFHNUJHLEVBQWEsU0FBV2IsR0FDM0IsSUFBSUMsRUFBTyxHQUVYLE9BQU8sU0FBU1MsRUFBUUMsR0FNVCxHQUFzQixtQkFBWEQsRUFDSCxPQUFPQSxJQUVmLFFBQTRCLElBQWpCVCxFQUFLUyxHQUF5QixDQUN0RCxJQUFJSSxFQUFjTCxFQUFVekUsS0FBSzhCLEtBQU00QyxFQUFRQyxHQUUvQyxHQUFJMUMsT0FBTzhDLG1CQUFxQkQsYUFBdUI3QyxPQUFPOEMsa0JBQzdELElBR0NELEVBQWNBLEVBQVlFLGdCQUFnQkMsS0FDekMsTUFBTWpELEdBQ1A4QyxFQUFjLEtBR2hCYixFQUFLUyxHQUFVSSxFQUVoQixPQUFPYixFQUFLUyxJQTFCRyxHQThCYlEsRUFBWSxLQUNaQyxFQUFtQixFQUNuQkMsRUFBc0IsR0FFdEJDLEVBQVUsRUFBUSxHQXFEdEIsU0FBU0MsRUFBZ0JDLEVBQVFwRCxHQUNoQyxJQUFLLElBQUl0QyxFQUFJLEVBQUdBLEVBQUkwRixFQUFPekIsT0FBUWpFLElBQUssQ0FDdkMsSUFBSStDLEVBQU8yQyxFQUFPMUYsR0FDZDJGLEVBQVd0QixFQUFZdEIsRUFBS21CLElBRWhDLEdBQUd5QixFQUFVLENBQ1pBLEVBQVNDLE9BRVQsSUFBSSxJQUFJQyxFQUFJLEVBQUdBLEVBQUlGLEVBQVNHLE1BQU03QixPQUFRNEIsSUFDekNGLEVBQVNHLE1BQU1ELEdBQUc5QyxFQUFLK0MsTUFBTUQsSUFHOUIsS0FBTUEsRUFBSTlDLEVBQUsrQyxNQUFNN0IsT0FBUTRCLElBQzVCRixFQUFTRyxNQUFNcEQsS0FBS3FELEVBQVNoRCxFQUFLK0MsTUFBTUQsR0FBSXZELFFBRXZDLENBQ04sSUFBSXdELEVBQVEsR0FFWixJQUFRRCxFQUFJLEVBQUdBLEVBQUk5QyxFQUFLK0MsTUFBTTdCLE9BQVE0QixJQUNyQ0MsRUFBTXBELEtBQUtxRCxFQUFTaEQsRUFBSytDLE1BQU1ELEdBQUl2RCxJQUdwQytCLEVBQVl0QixFQUFLbUIsSUFBTSxDQUFDQSxHQUFJbkIsRUFBS21CLEdBQUkwQixLQUFNLEVBQUdFLE1BQU9BLEtBS3hELFNBQVNFLEVBQWNwRCxFQUFNTixHQUk1QixJQUhBLElBQUlvRCxFQUFTLEdBQ1RPLEVBQVksR0FFUGpHLEVBQUksRUFBR0EsRUFBSTRDLEVBQUtxQixPQUFRakUsSUFBSyxDQUNyQyxJQUFJK0MsRUFBT0gsRUFBSzVDLEdBQ1prRSxFQUFLNUIsRUFBUTRELEtBQU9uRCxFQUFLLEdBQUtULEVBQVE0RCxLQUFPbkQsRUFBSyxHQUlsRG9ELEVBQU8sQ0FBQ0MsSUFIRnJELEVBQUssR0FHT3NELE1BRlZ0RCxFQUFLLEdBRW1CSSxVQURwQkosRUFBSyxJQUdqQmtELEVBQVUvQixHQUNUK0IsRUFBVS9CLEdBQUk0QixNQUFNcEQsS0FBS3lELEdBRFhULEVBQU9oRCxLQUFLdUQsRUFBVS9CLEdBQU0sQ0FBQ0EsR0FBSUEsRUFBSTRCLE1BQU8sQ0FBQ0ssS0FJakUsT0FBT1QsRUFHUixTQUFTWSxFQUFvQmhFLEVBQVNpRSxHQUNyQyxJQUFJMUIsRUFBU0csRUFBVzFDLEVBQVFrRSxZQUVoQyxJQUFLM0IsRUFDSixNQUFNLElBQUk0QixNQUFNLCtHQUdqQixJQUFJQyxFQUFnQ25CLEVBQW9CQSxFQUFvQnRCLE9BQVMsR0FFckYsR0FBeUIsUUFBckIzQixFQUFRcUUsU0FDTkQsRUFFTUEsRUFBOEJFLFlBQ3hDL0IsRUFBT2dDLGFBQWFOLEVBQU9HLEVBQThCRSxhQUV6RC9CLEVBQU9pQyxZQUFZUCxHQUpuQjFCLEVBQU9nQyxhQUFhTixFQUFPMUIsRUFBT2tDLFlBTW5DeEIsRUFBb0I3QyxLQUFLNkQsUUFDbkIsR0FBeUIsV0FBckJqRSxFQUFRcUUsU0FDbEI5QixFQUFPaUMsWUFBWVAsT0FDYixJQUFnQyxpQkFBckJqRSxFQUFRcUUsV0FBeUJyRSxFQUFRcUUsU0FBU0ssT0FJbkUsTUFBTSxJQUFJUCxNQUFNLDhMQUhoQixJQUFJRyxFQUFjNUIsRUFBVzFDLEVBQVFxRSxTQUFTSyxPQUFRbkMsR0FDdERBLEVBQU9nQyxhQUFhTixFQUFPSyxJQU03QixTQUFTSyxFQUFvQlYsR0FDNUIsR0FBeUIsT0FBckJBLEVBQU1XLFdBQXFCLE9BQU8sRUFDdENYLEVBQU1XLFdBQVdDLFlBQVlaLEdBRTdCLElBQUlhLEVBQU03QixFQUFvQjhCLFFBQVFkLEdBQ25DYSxHQUFPLEdBQ1Q3QixFQUFvQitCLE9BQU9GLEVBQUssR0FJbEMsU0FBU0csRUFBb0JqRixHQUM1QixJQUFJaUUsRUFBUWhDLFNBQVNpRCxjQUFjLFNBTW5DLFFBSjBCaEYsSUFBdkJGLEVBQVFtRixNQUFNQyxPQUNoQnBGLEVBQVFtRixNQUFNQyxLQUFPLGlCQUdLbEYsSUFBeEJGLEVBQVFtRixNQUFNRSxNQUFxQixDQUNyQyxJQUFJQSxFQWdDTixXQUNLLEVBSUosT0FBTyxLQXJDTUMsR0FDUkQsSUFDSHJGLEVBQVFtRixNQUFNRSxNQUFRQSxHQU94QixPQUhBRSxFQUFTdEIsRUFBT2pFLEVBQVFtRixPQUN4Qm5CLEVBQW1CaEUsRUFBU2lFLEdBRXJCQSxFQWlCUixTQUFTc0IsRUFBVUMsRUFBSUwsR0FDdEIvRyxPQUFPcUgsS0FBS04sR0FBT08sU0FBUSxTQUFVekcsR0FDcEN1RyxFQUFHRyxhQUFhMUcsRUFBS2tHLEVBQU1sRyxPQVk3QixTQUFTd0UsRUFBVW1DLEVBQUs1RixHQUN2QixJQUFJaUUsRUFBTzRCLEVBQVFDLEVBQVFDLEVBRzNCLEdBQUkvRixFQUFRQyxXQUFhMkYsRUFBSTlCLElBQUssQ0FLOUIsS0FKQWlDLEVBQXNDLG1CQUF0Qi9GLEVBQVFDLFVBQ3hCRCxFQUFRQyxVQUFVMkYsRUFBSTlCLEtBQ3RCOUQsRUFBUUMsVUFBVStGLFFBQVFKLEVBQUk5QixNQVM3QixPQUFPLGFBSlA4QixFQUFJOUIsSUFBTWlDLEVBVWYsR0FBSS9GLEVBQVErQyxVQUFXLENBQ3RCLElBQUlrRCxFQUFhakQsSUFFakJpQixFQUFRbEIsSUFBY0EsRUFBWWtDLEVBQW1CakYsSUFFckQ2RixFQUFTSyxFQUFvQmhILEtBQUssS0FBTStFLEVBQU9nQyxHQUFZLEdBQzNESCxFQUFTSSxFQUFvQmhILEtBQUssS0FBTStFLEVBQU9nQyxHQUFZLFFBRzNETCxFQUFJL0UsV0FDVyxtQkFBUnNGLEtBQ3dCLG1CQUF4QkEsSUFBSUMsaUJBQ29CLG1CQUF4QkQsSUFBSUUsaUJBQ0ssbUJBQVRDLE1BQ1MsbUJBQVQzRixNQUVQc0QsRUFsRUYsU0FBNEJqRSxHQUMzQixJQUFJdUcsRUFBT3RFLFNBQVNpRCxjQUFjLFFBVWxDLFlBUjBCaEYsSUFBdkJGLEVBQVFtRixNQUFNQyxPQUNoQnBGLEVBQVFtRixNQUFNQyxLQUFPLFlBRXRCcEYsRUFBUW1GLE1BQU1xQixJQUFNLGFBRXBCakIsRUFBU2dCLEVBQU12RyxFQUFRbUYsT0FDdkJuQixFQUFtQmhFLEVBQVN1RyxHQUVyQkEsRUF1REVFLENBQWtCekcsR0FDMUI2RixFQUFTYSxFQUFXeEgsS0FBSyxLQUFNK0UsRUFBT2pFLEdBQ3RDOEYsRUFBUyxXQUNSbkIsRUFBbUJWLEdBRWhCQSxFQUFNMEMsTUFBTVIsSUFBSUUsZ0JBQWdCcEMsRUFBTTBDLFNBRzFDMUMsRUFBUWdCLEVBQW1CakYsR0FDM0I2RixFQUFTZSxFQUFXMUgsS0FBSyxLQUFNK0UsR0FDL0I2QixFQUFTLFdBQ1JuQixFQUFtQlYsS0FNckIsT0FGQTRCLEVBQU9ELEdBRUEsU0FBc0JpQixHQUM1QixHQUFJQSxFQUFRLENBQ1gsR0FDQ0EsRUFBTy9DLE1BQVE4QixFQUFJOUIsS0FDbkIrQyxFQUFPOUMsUUFBVTZCLEVBQUk3QixPQUNyQjhDLEVBQU9oRyxZQUFjK0UsRUFBSS9FLFVBRXpCLE9BR0RnRixFQUFPRCxFQUFNaUIsUUFFYmYsS0ExUEhySSxFQUFPRCxRQUFVLFNBQVM4QyxFQUFNTixHQUMvQixHQUFxQixvQkFBVjhHLE9BQXlCQSxPQUNYLGlCQUFiN0UsU0FBdUIsTUFBTSxJQUFJa0MsTUFBTSxpRUFHbkRuRSxFQUFVQSxHQUFXLElBRWJtRixNQUFpQyxpQkFBbEJuRixFQUFRbUYsTUFBcUJuRixFQUFRbUYsTUFBUSxHQUkvRG5GLEVBQVErQyxXQUEwQyxrQkFBdEIvQyxFQUFRK0MsWUFBeUIvQyxFQUFRK0MsVUFBWWYsS0FHMUVoQyxFQUFRa0UsYUFBWWxFLEVBQVFrRSxXQUFhLFFBR2hEbEUsRUFBUXFFLFdBQVVyRSxFQUFRcUUsU0FBVyxVQUUxQyxJQUFJakIsRUFBU00sRUFBYXBELEVBQU1OLEdBSWhDLE9BRkFtRCxFQUFlQyxFQUFRcEQsR0FFaEIsU0FBaUIrRyxHQUd2QixJQUZBLElBQUlDLEVBQVksR0FFUHRKLEVBQUksRUFBR0EsRUFBSTBGLEVBQU96QixPQUFRakUsSUFBSyxDQUN2QyxJQUFJK0MsRUFBTzJDLEVBQU8xRixJQUNkMkYsRUFBV3RCLEVBQVl0QixFQUFLbUIsS0FFdkIwQixPQUNUMEQsRUFBVTVHLEtBQUtpRCxHQUdiMEQsR0FFRjVELEVBRGdCTyxFQUFhcUQsRUFBUy9HLEdBQ1pBLEdBRzNCLElBQVN0QyxFQUFJLEVBQUdBLEVBQUlzSixFQUFVckYsT0FBUWpFLElBQUssQ0FDMUMsSUFBSTJGLEVBRUosR0FBcUIsS0FGakJBLEVBQVcyRCxFQUFVdEosSUFFYjRGLEtBQVksQ0FDdkIsSUFBSyxJQUFJQyxFQUFJLEVBQUdBLEVBQUlGLEVBQVNHLE1BQU03QixPQUFRNEIsSUFBS0YsRUFBU0csTUFBTUQsWUFFeER4QixFQUFZc0IsRUFBU3pCLFFBa05oQyxJQUNLcUYsRUFEREMsR0FDQ0QsRUFBWSxHQUVULFNBQVVFLEVBQU9DLEdBR3ZCLE9BRkFILEVBQVVFLEdBQVNDLEVBRVpILEVBQVVJLE9BQU9DLFNBQVMvRixLQUFLLFFBSXhDLFNBQVMyRSxFQUFxQmpDLEVBQU9rRCxFQUFPckIsRUFBUUYsR0FDbkQsSUFBSTlCLEVBQU1nQyxFQUFTLEdBQUtGLEVBQUk5QixJQUU1QixHQUFJRyxFQUFNc0QsV0FDVHRELEVBQU1zRCxXQUFXQyxRQUFVTixFQUFZQyxFQUFPckQsT0FDeEMsQ0FDTixJQUFJMkQsRUFBVXhGLFNBQVN5RixlQUFlNUQsR0FDbEM2RCxFQUFhMUQsRUFBTTBELFdBRW5CQSxFQUFXUixJQUFRbEQsRUFBTVksWUFBWThDLEVBQVdSLElBRWhEUSxFQUFXaEcsT0FDZHNDLEVBQU1NLGFBQWFrRCxFQUFTRSxFQUFXUixJQUV2Q2xELEVBQU1PLFlBQVlpRCxJQUtyQixTQUFTYixFQUFZM0MsRUFBTzJCLEdBQzNCLElBQUk5QixFQUFNOEIsRUFBSTlCLElBQ1ZDLEVBQVE2QixFQUFJN0IsTUFNaEIsR0FKR0EsR0FDRkUsRUFBTTBCLGFBQWEsUUFBUzVCLEdBRzFCRSxFQUFNc0QsV0FDUnRELEVBQU1zRCxXQUFXQyxRQUFVMUQsTUFDckIsQ0FDTixLQUFNRyxFQUFNUSxZQUNYUixFQUFNWSxZQUFZWixFQUFNUSxZQUd6QlIsRUFBTU8sWUFBWXZDLFNBQVN5RixlQUFlNUQsS0FJNUMsU0FBUzRDLEVBQVlILEVBQU12RyxFQUFTNEYsR0FDbkMsSUFBSTlCLEVBQU04QixFQUFJOUIsSUFDVmpELEVBQVkrRSxFQUFJL0UsVUFRaEIrRyxPQUFnRDFILElBQWxDRixFQUFRNkgsdUJBQXVDaEgsR0FFN0RiLEVBQVE2SCx1QkFBeUJELEtBQ3BDOUQsRUFBTVosRUFBUVksSUFHWGpELElBRUhpRCxHQUFPLHVEQUF5RG5ELEtBQUtHLFNBQVNDLG1CQUFtQkMsS0FBS0MsVUFBVUosTUFBZ0IsT0FHakksSUFBSWlILEVBQU8sSUFBSXhCLEtBQUssQ0FBQ3hDLEdBQU0sQ0FBRXNCLEtBQU0sYUFFL0IyQyxFQUFTeEIsRUFBS0ksS0FFbEJKLEVBQUtJLEtBQU9SLElBQUlDLGdCQUFnQjBCLEdBRTdCQyxHQUFRNUIsSUFBSUUsZ0JBQWdCMEIsSyxjQ2hZaEN0SyxFQUFPRCxRQUFVLFNBQVVzRyxHQUV6QixJQUFJa0UsRUFBNkIsb0JBQVhsSSxRQUEwQkEsT0FBT2tJLFNBRXZELElBQUtBLEVBQ0gsTUFBTSxJQUFJN0QsTUFBTSxvQ0FJbkIsSUFBS0wsR0FBc0IsaUJBQVJBLEVBQ2pCLE9BQU9BLEVBR1IsSUFBSW1FLEVBQVVELEVBQVNFLFNBQVcsS0FBT0YsRUFBU0csS0FDOUNDLEVBQWFILEVBQVVELEVBQVNLLFNBQVNDLFFBQVEsWUFBYSxLQTJEbkUsT0EvQmV4RSxFQUFJd0UsUUFBUSx1REFBdUQsU0FBU0MsRUFBV0MsR0FFckcsSUFXSUMsRUFYQUMsRUFBa0JGLEVBQ3BCRyxPQUNBTCxRQUFRLFlBQVksU0FBU25LLEVBQUd5SyxHQUFLLE9BQU9BLEtBQzVDTixRQUFRLFlBQVksU0FBU25LLEVBQUd5SyxHQUFLLE9BQU9BLEtBRzlDLE1BQUksb0RBQW9EQyxLQUFLSCxHQUNwREgsR0FRUkUsRUFGcUMsSUFBbENDLEVBQWdCM0QsUUFBUSxNQUVsQjJELEVBQ2tDLElBQWpDQSxFQUFnQjNELFFBQVEsS0FFekJrRCxFQUFVUyxFQUdWTixFQUFhTSxFQUFnQkosUUFBUSxRQUFTLElBSWpELE9BQVN0SCxLQUFLQyxVQUFVd0gsR0FBVSxVLGlCQ25GM0MsZUFBK0gsV0FBVyxhQUFhLFNBQVM3SixFQUFFQSxHQUFHLElBQUlpQixFQUFFRixLQUFLbUosWUFBWSxPQUFPbkosS0FBS29KLE1BQUssU0FBUzVKLEdBQUcsT0FBT1UsRUFBRW1KLFFBQVFwSyxLQUFLbUssTUFBSyxXQUFXLE9BQU81SixRQUFLLFNBQVNBLEdBQUcsT0FBT1UsRUFBRW1KLFFBQVFwSyxLQUFLbUssTUFBSyxXQUFXLE9BQU9sSixFQUFFb0osT0FBTzlKLFNBQU8sU0FBU1UsRUFBRWpCLEdBQUcsU0FBU0EsUUFBRyxJQUFTQSxFQUFFK0MsUUFBUSxTQUFTeEMsS0FBSyxTQUFTWCxFQUFFSSxHQUFHLEtBQUtlLGdCQUFnQm5CLEdBQUcsTUFBTSxJQUFJMEssVUFBVSx3Q0FBd0MsR0FBRyxtQkFBbUJ0SyxFQUFFLE1BQU0sSUFBSXNLLFVBQVUsa0JBQWtCdkosS0FBS3dKLE9BQU8sRUFBRXhKLEtBQUt5SixVQUFTLEVBQUd6SixLQUFLMEosWUFBTyxFQUFPMUosS0FBSzJKLFdBQVcsR0FBR3ZMLEVBQUVhLEVBQUVlLE1BQU0sU0FBU3hCLEVBQUVTLEVBQUVpQixHQUFHLEtBQUssSUFBSWpCLEVBQUV1SyxRQUFRdkssRUFBRUEsRUFBRXlLLE9BQU8sSUFBSXpLLEVBQUV1SyxRQUFRdkssRUFBRXdLLFVBQVMsRUFBRzVLLEVBQUUrSyxjQUFhLFdBQVcsSUFBSXBLLEVBQUUsSUFBSVAsRUFBRXVLLE9BQU90SixFQUFFMkosWUFBWTNKLEVBQUU0SixXQUFXLEdBQUcsT0FBT3RLLEVBQUUsQ0FBQyxJQUFJWCxFQUFFLElBQUlBLEVBQUVXLEVBQUVQLEVBQUV5SyxRQUFRLE1BQU16SyxHQUFHLFlBQVk4SyxFQUFFN0osRUFBRThKLFFBQVEvSyxHQUFHbEIsRUFBRW1DLEVBQUU4SixRQUFRbkwsUUFBUSxJQUFJSSxFQUFFdUssT0FBT3pMLEVBQUVnTSxHQUFHN0osRUFBRThKLFFBQVEvSyxFQUFFeUssWUFBV3pLLEVBQUUwSyxXQUFXbEosS0FBS1AsR0FBRyxTQUFTbkMsRUFBRWtCLEVBQUVpQixHQUFHLElBQUksR0FBR0EsSUFBSWpCLEVBQUUsTUFBTSxJQUFJc0ssVUFBVSw2Q0FBNkMsR0FBR3JKLElBQUksaUJBQWlCQSxHQUFHLG1CQUFtQkEsR0FBRyxDQUFDLElBQUlWLEVBQUVVLEVBQUVrSixLQUFLLEdBQUdsSixhQUFhckIsRUFBRSxPQUFPSSxFQUFFdUssT0FBTyxFQUFFdkssRUFBRXlLLE9BQU94SixPQUFPK0osRUFBRWhMLEdBQUcsR0FBRyxtQkFBbUJPLEVBQUUsWUFBWXBCLEVBQUUsU0FBU2EsRUFBRWlCLEdBQUcsT0FBTyxXQUFXakIsRUFBRXdELE1BQU12QyxFQUFFd0MsWUFBMUMsQ0FBdURsRCxFQUFFVSxHQUFHakIsR0FBR0EsRUFBRXVLLE9BQU8sRUFBRXZLLEVBQUV5SyxPQUFPeEosRUFBRStKLEVBQUVoTCxHQUFHLE1BQU1pQixHQUFHNkosRUFBRTlLLEVBQUVpQixJQUFJLFNBQVM2SixFQUFFOUssRUFBRWlCLEdBQUdqQixFQUFFdUssT0FBTyxFQUFFdkssRUFBRXlLLE9BQU94SixFQUFFK0osRUFBRWhMLEdBQUcsU0FBU2dMLEVBQUVoTCxHQUFHLElBQUlBLEVBQUV1SyxRQUFRLElBQUl2SyxFQUFFMEssV0FBVzNILFFBQVFuRCxFQUFFK0ssY0FBYSxXQUFXM0ssRUFBRXdLLFVBQVU1SyxFQUFFcUwsc0JBQXNCakwsRUFBRXlLLFdBQVUsSUFBSSxJQUFJeEosRUFBRSxFQUFFVixFQUFFUCxFQUFFMEssV0FBVzNILE9BQU94QyxFQUFFVSxFQUFFQSxJQUFJMUIsRUFBRVMsRUFBRUEsRUFBRTBLLFdBQVd6SixJQUFJakIsRUFBRTBLLFdBQVcsS0FBSyxTQUFTdkwsRUFBRWEsRUFBRWlCLEdBQUcsSUFBSVYsR0FBRSxFQUFHLElBQUlQLEdBQUUsU0FBU0EsR0FBR08sSUFBSUEsR0FBRSxFQUFHekIsRUFBRW1DLEVBQUVqQixPQUFLLFNBQVNBLEdBQUdPLElBQUlBLEdBQUUsRUFBR3VLLEVBQUU3SixFQUFFakIsT0FBTSxNQUFNQSxHQUFHLEdBQUdPLEVBQUUsT0FBT0EsR0FBRSxFQUFHdUssRUFBRTdKLEVBQUVqQixJQUFJLElBQUlrTCxFQUFFQyxXQUFXdkwsRUFBRWMsVUFBVTBLLE1BQU0sU0FBU3BMLEdBQUcsT0FBT2UsS0FBS29KLEtBQUssS0FBS25LLElBQUlKLEVBQUVjLFVBQVV5SixLQUFLLFNBQVNuSyxFQUFFaUIsR0FBRyxJQUFJckIsRUFBRSxJQUFJbUIsS0FBS21KLFlBQVkzSixHQUFHLE9BQU9oQixFQUFFd0IsS0FBSyxJQUFJLFNBQVNmLEVBQUVpQixFQUFFVixHQUFHUSxLQUFLNkosWUFBWSxtQkFBbUI1SyxFQUFFQSxFQUFFLEtBQUtlLEtBQUs4SixXQUFXLG1CQUFtQjVKLEVBQUVBLEVBQUUsS0FBS0YsS0FBS2dLLFFBQVF4SyxFQUExSCxDQUE2SFAsRUFBRWlCLEVBQUVyQixJQUFJQSxHQUFHQSxFQUFFYyxVQUFVMkssUUFBUXJMLEVBQUVKLEVBQUUwRCxJQUFJLFNBQVN0RCxHQUFHLE9BQU8sSUFBSUosR0FBRSxTQUFTVyxFQUFFWCxHQUFHLFNBQVNMLEVBQUVTLEVBQUVpQixHQUFHLElBQUksR0FBR0EsSUFBSSxpQkFBaUJBLEdBQUcsbUJBQW1CQSxHQUFHLENBQUMsSUFBSStKLEVBQUUvSixFQUFFa0osS0FBSyxHQUFHLG1CQUFtQmEsRUFBRSxZQUFZQSxFQUFFL0wsS0FBS2dDLEdBQUUsU0FBU0EsR0FBRzFCLEVBQUVTLEVBQUVpQixLQUFJckIsR0FBR2QsRUFBRWtCLEdBQUdpQixFQUFFLEtBQUs2SixHQUFHdkssRUFBRXpCLEdBQUcsTUFBTWtCLEdBQUdKLEVBQUVJLElBQUksSUFBSWlCLEVBQUVqQixHQUFHLE9BQU9KLEVBQUUsSUFBSTBLLFVBQVUsaUNBQWlDLElBQUl4TCxFQUFFd00sTUFBTTVLLFVBQVU2SyxNQUFNdE0sS0FBS2UsR0FBRyxHQUFHLElBQUlsQixFQUFFaUUsT0FBTyxPQUFPeEMsRUFBRSxJQUFJLElBQUksSUFBSXVLLEVBQUVoTSxFQUFFaUUsT0FBT2lJLEVBQUUsRUFBRWxNLEVBQUVpRSxPQUFPaUksRUFBRUEsSUFBSXpMLEVBQUV5TCxFQUFFbE0sRUFBRWtNLFFBQU9wTCxFQUFFd0ssUUFBUSxTQUFTcEssR0FBRyxPQUFPQSxHQUFHLGlCQUFpQkEsR0FBR0EsRUFBRWtLLGNBQWN0SyxFQUFFSSxFQUFFLElBQUlKLEdBQUUsU0FBU3FCLEdBQUdBLEVBQUVqQixPQUFNSixFQUFFeUssT0FBTyxTQUFTckssR0FBRyxPQUFPLElBQUlKLEdBQUUsU0FBU3FCLEVBQUVWLEdBQUdBLEVBQUVQLE9BQU1KLEVBQUU0TCxLQUFLLFNBQVN4TCxHQUFHLE9BQU8sSUFBSUosR0FBRSxTQUFTVyxFQUFFaEIsR0FBRyxJQUFJMEIsRUFBRWpCLEdBQUcsT0FBT1QsRUFBRSxJQUFJK0ssVUFBVSxrQ0FBa0MsSUFBSSxJQUFJeEwsRUFBRSxFQUFFZ00sRUFBRTlLLEVBQUUrQyxPQUFPK0gsRUFBRWhNLEVBQUVBLElBQUljLEVBQUV3SyxRQUFRcEssRUFBRWxCLElBQUlxTCxLQUFLNUosRUFBRWhCLE9BQU1LLEVBQUUrSyxhQUFhLG1CQUFtQmMsR0FBYyxTQUFTekwsR0FBR3lMLEVBQWF6TCxLQUFLLFNBQVNBLEdBQUdrTCxFQUFFbEwsRUFBRSxJQUFJSixFQUFFcUwsc0JBQXNCLFNBQVNqTCxRQUFHLElBQVMwTCxTQUFTQSxTQUFTQSxRQUFRQyxLQUFLLHdDQUF3QzNMLElBQUksSUFBSWEsRUFBRSxXQUFXLEdBQUcsb0JBQW9CK0ssS0FBSyxPQUFPQSxLQUFLLEdBQUcsb0JBQW9CMUssT0FBTyxPQUFPQSxPQUFPLFFBQUcsSUFBb0IySyxFQUFPLE9BQU9BLEVBQU8sTUFBTXRHLE1BQU0sa0NBQXZKLEdBQTRMLFlBQVkxRSxFQUFFQSxFQUFFaUwsUUFBUXBMLFVBQVUySyxVQUFVeEssRUFBRWlMLFFBQVFwTCxVQUFVMkssUUFBUXJMLEdBQUdhLEVBQUVpTCxRQUFRbE0sRUFBNWtHcUIsR0FBNHZHLFNBQVNqQixHQUFHLGFBQWEsU0FBU2lCLEVBQUVqQixFQUFFaUIsRUFBRVYsRUFBRVgsR0FBRyxPQUFPLElBQUlXLElBQUlBLEVBQUV1TCxXQUFVLFNBQVN2TSxFQUFFVCxHQUFHLFNBQVNnTSxFQUFFOUssR0FBRyxJQUFJYixFQUFFUyxFQUFFbU0sS0FBSy9MLElBQUksTUFBTUEsR0FBR2xCLEVBQUVrQixJQUFJLFNBQVNnTCxFQUFFaEwsR0FBRyxJQUFJYixFQUFFUyxFQUFFb00sTUFBTWhNLElBQUksTUFBTUEsR0FBR2xCLEVBQUVrQixJQUFJLFNBQVNiLEVBQUVhLEdBQUdBLEVBQUVpTSxLQUFLMU0sRUFBRVMsRUFBRUQsT0FBTyxJQUFJUSxHQUFFLFNBQVNVLEdBQUdBLEVBQUVqQixFQUFFRCxVQUFTb0ssS0FBS1csRUFBRUUsR0FBRzdMLEdBQUdTLEVBQUVBLEVBQUU0RCxNQUFNeEQsRUFBRWlCLEdBQUcsS0FBSzhLLFdBQVUsU0FBU3hMLEVBQUVQLEVBQUVpQixHQUFHLElBQUlWLEVBQUVYLEVBQUVMLEVBQUVULEVBQUVnTSxFQUFFLENBQUNvQixNQUFNLEVBQUVDLEtBQUssV0FBVyxHQUFHLEVBQUU1TSxFQUFFLEdBQUcsTUFBTUEsRUFBRSxHQUFHLE9BQU9BLEVBQUUsSUFBSTZNLEtBQUssR0FBR0MsSUFBSSxJQUFJLE9BQU92TixFQUFFLENBQUNpTixLQUFLZixFQUFFLEdBQUdnQixNQUFNaEIsRUFBRSxHQUFHc0IsT0FBT3RCLEVBQUUsSUFBSSxtQkFBbUJuTCxTQUFTZixFQUFFZSxPQUFPME0sVUFBVSxXQUFXLE9BQU94TCxPQUFPakMsRUFBRSxTQUFTa00sRUFBRWxNLEdBQUcsT0FBTyxTQUFTa00sR0FBRyxPQUFPLFNBQVNsTSxHQUFHLEdBQUd5QixFQUFFLE1BQU0sSUFBSStKLFVBQVUsbUNBQW1DLEtBQUtRLEdBQUcsSUFBSSxHQUFHdkssRUFBRSxFQUFFWCxJQUFJTCxFQUFFLEVBQUVULEVBQUUsR0FBR2MsRUFBRTBNLE9BQU94TixFQUFFLEdBQUdjLEVBQUVvTSxTQUFTek0sRUFBRUssRUFBRTBNLFNBQVMvTSxFQUFFTixLQUFLVyxHQUFHLEdBQUdBLEVBQUVtTSxTQUFTeE0sRUFBRUEsRUFBRU4sS0FBS1csRUFBRWQsRUFBRSxLQUFLbU4sS0FBSyxPQUFPMU0sRUFBRSxPQUFPSyxFQUFFLEVBQUVMLElBQUlULEVBQUUsQ0FBQyxFQUFFQSxFQUFFLEdBQUdTLEVBQUVRLFFBQVFqQixFQUFFLElBQUksS0FBSyxFQUFFLEtBQUssRUFBRVMsRUFBRVQsRUFBRSxNQUFNLEtBQUssRUFBRSxPQUFPZ00sRUFBRW9CLFFBQVEsQ0FBQ25NLE1BQU1qQixFQUFFLEdBQUdtTixNQUFLLEdBQUksS0FBSyxFQUFFbkIsRUFBRW9CLFFBQVF0TSxFQUFFZCxFQUFFLEdBQUdBLEVBQUUsQ0FBQyxHQUFHLFNBQVMsS0FBSyxFQUFFQSxFQUFFZ00sRUFBRXVCLElBQUlHLE1BQU0xQixFQUFFc0IsS0FBS0ksTUFBTSxTQUFTLFFBQVEsS0FBS2pOLEdBQUdBLEVBQUV1TCxFQUFFc0IsTUFBTXJKLE9BQU8sR0FBR3hELEVBQUVBLEVBQUV3RCxPQUFPLE1BQU0sSUFBSWpFLEVBQUUsSUFBSSxJQUFJQSxFQUFFLElBQUksQ0FBQ2dNLEVBQUUsRUFBRSxTQUFTLEdBQUcsSUFBSWhNLEVBQUUsTUFBTVMsR0FBR1QsRUFBRSxHQUFHUyxFQUFFLElBQUlULEVBQUUsR0FBR1MsRUFBRSxJQUFJLENBQUN1TCxFQUFFb0IsTUFBTXBOLEVBQUUsR0FBRyxNQUFNLEdBQUcsSUFBSUEsRUFBRSxJQUFJZ00sRUFBRW9CLE1BQU0zTSxFQUFFLEdBQUcsQ0FBQ3VMLEVBQUVvQixNQUFNM00sRUFBRSxHQUFHQSxFQUFFVCxFQUFFLE1BQU0sR0FBR1MsR0FBR3VMLEVBQUVvQixNQUFNM00sRUFBRSxHQUFHLENBQUN1TCxFQUFFb0IsTUFBTTNNLEVBQUUsR0FBR3VMLEVBQUV1QixJQUFJN0ssS0FBSzFDLEdBQUcsTUFBTVMsRUFBRSxJQUFJdUwsRUFBRXVCLElBQUlHLE1BQU0xQixFQUFFc0IsS0FBS0ksTUFBTSxTQUFTMU4sRUFBRW1DLEVBQUVoQyxLQUFLZSxFQUFFOEssR0FBRyxNQUFNOUssR0FBR2xCLEVBQUUsQ0FBQyxFQUFFa0IsR0FBR0osRUFBRSxFQUFFLFFBQVFXLEVBQUVoQixFQUFFLEVBQUUsR0FBRyxFQUFFVCxFQUFFLEdBQUcsTUFBTUEsRUFBRSxHQUFHLE1BQU0sQ0FBQ2lCLE1BQU1qQixFQUFFLEdBQUdBLEVBQUUsUUFBRyxFQUFPbU4sTUFBSyxHQUFqeEIsQ0FBc3hCLENBQUNuTixFQUFFa00sTUFBTSxJQUFJcEwsRUFBRSxDQUFDLGFBQWEsYUFBaUJMLEVBQUUsWUFBWW1NLFFBQVFDLE1BQU1ELFFBQVFlLEtBQUt4TixLQUFLd0UsWUFBWW5ELEtBQUtvTCxRQUFRLHdCQUF3QjVNLEdBQUUsRUFBT2dNLEVBQUUsV0FBVyxTQUFTOUssSUFBSWUsS0FBSzdCLEVBQUUsR0FBRyxPQUFPYyxFQUFFVSxVQUFVZ00sUUFBUSxTQUFTMU0sRUFBRWlCLEdBQUduQyxJQUFJLElBQUljLEVBQUV1RyxRQUFRbkcsSUFBSVQsRUFBRSxzQkFBc0JTLEVBQUUsK0RBQStEZSxLQUFLN0IsRUFBRWMsR0FBR2lCLEdBQUdqQixFQUFFVSxVQUFVaU0sUUFBUSxTQUFTM00sR0FBRyxPQUFPZSxLQUFLN0IsRUFBRWMsSUFBSUEsRUFBRVUsVUFBVW9HLFFBQVEsU0FBUzlHLEdBQUcsSUFBSSxJQUFJaUIsS0FBS0YsS0FBSzdCLEVBQUVjLEVBQUVlLEtBQUs3QixFQUFFK0IsR0FBR0EsSUFBSWpCLEVBQTdULEdBQWtVZ0wsRUFBRSxTQUFTaEwsS0FBS2IsR0FBRSxFQUFPK0wsRUFBRSxZQUFZUSxRQUFRQyxNQUFNRCxRQUFRZSxLQUFLakosTUFBTWtJLFFBQVFqSSxZQUFZbkQsS0FBSyx3QkFBd0JPLEVBQUUsYUFBYSxTQUFTOUIsRUFBRWlCLEdBQUdnTCxFQUFFaEwsRUFBRSxTQUFTWixJQUFJRCxHQUFFLEVBQUdMLEdBQUUsRUFBRyxTQUFTOEIsRUFBRVosR0FBRyxPQUFPaUIsRUFBRUYsVUFBSyxPQUFPLEdBQU8sV0FBVyxJQUFJRSxFQUFFLE9BQU9WLEVBQUVRLE1BQUssU0FBU1IsR0FBRyxHQUFHcEIsSUFBSWEsRUFBRTJNLFFBQVE5TCxJQUFJcUssRUFBRSx3TEFBd0x2RyxJQUFJLENBQUMsR0FBRyxTQUFTM0UsR0FBRyxJQUFJaUIsRUFBRWpCLEVBQUUyTSxRQUFROUwsR0FBRyxRQUFHLElBQVNJLEVBQUUsT0FBT0MsT0FBTzBMLGNBQWNGLFFBQVEsT0FBT3pMLEdBQUcsTUFBTSxJQUFJc0UsTUFBTSx3Q0FBM0csQ0FBb0p2RixHQUFHLE1BQU0sQ0FBQyxHQUFHLE1BQU0sSUFBSXVGLE1BQU0sMERBQTBELEdBQUdzSCxFQUFFN00sR0FBRyxPQUFPZ0wsRUFBRSwyQkFBMkIsQ0FBQyxHQUFHLEdBQUc4QixVQUFVQyxVQUFVNUcsUUFBUSxTQUFTLEVBQUUsT0FBTzZFLEVBQUUsaUNBQWlDLENBQUMsR0FBRyxHQUFHZ0MsRUFBRTNKLFNBQVM0SixLQUFLak4sR0FBRyxPQUFPZ0wsRUFBRSxpQ0FBaUMsQ0FBQyxHQUFHLEdBQUcsU0FBU2hMLEdBQUcsSUFBSWlCLEVBQUVvQyxTQUFTaUQsY0FBYyxPQUFPckYsRUFBRThGLGFBQWEsUUFBUSx3Q0FBd0M5RixFQUFFaU0sWUFBWSxvQkFBb0I3SixTQUFTNEosS0FBS3JILFlBQVkzRSxHQUFHLElBQUlWLEVBQUV5TSxFQUFFL0wsRUFBRWpCLEdBQUcsT0FBT3FELFNBQVM0SixLQUFLaEgsWUFBWWhGLEdBQUdWLEVBQS9OLENBQWtPUCxHQUFHLE9BQU9nTCxFQUFFLDRCQUE0QixDQUFDLEdBQUcsUUFBRyxLQUFVL0osRUFBRWpCLEVBQUUyTSxRQUFROUwsS0FBSyxTQUFTYixHQUFHZ0wsRUFBRSxvQkFBb0IsSUFBSS9KLEVBQUVvQyxTQUFTaUQsY0FBYyxPQUFPckYsRUFBRThGLGFBQWEsUUFBUSx3Q0FBd0MsSUFBSXhHLEVBQUVVLEVBQUVBLEVBQUVrTSxlQUFlbkMsRUFBRSxxQkFBcUJ6SyxFQUFFVSxFQUFFa00sYUFBYSxDQUFDbE4sS0FBSyxVQUFVLElBQUlMLEVBQUV5RCxTQUFTaUQsY0FBYyxRQUFRMUcsRUFBRXdOLFVBQVVwTixFQUFFTyxFQUFFcUYsWUFBWWhHLEdBQUd5RCxTQUFTNEosS0FBS3JILFlBQVkzRSxHQUFHb00sRUFBRXpOLEdBQUcsSUFBSUwsRUFBRThELFNBQVNpSyxZQUFZLFFBQVEsT0FBT0MsSUFBSWxLLFNBQVM0SixLQUFLaEgsWUFBWWhGLEdBQUcxQixFQUF2WSxDQUEwWTBCLEdBQUcsT0FBTytKLEVBQUUsMkJBQTJCLENBQUMsR0FBRyxNQUFNLElBQUl6RixNQUFNLDhCQUE0QixTQUFTaUksRUFBRXhOLEdBQUcsT0FBT2lCLEVBQUVGLFVBQUssT0FBTyxHQUFPLFdBQVcsT0FBT1IsRUFBRVEsTUFBSyxTQUFTRSxHQUFHLE9BQU82TCxVQUFVVyxXQUFXWCxVQUFVVyxVQUFVQyxXQUFXMUMsRUFBRSw0Q0FBNEMsQ0FBQyxFQUFFOEIsVUFBVVcsVUFBVUMsVUFBVTFOLEtBQUssQ0FBQyxFQUFFWSxFQUFFK00sRUFBRTNOLFdBQVMsU0FBUzROLElBQUksT0FBTzNNLEVBQUVGLFVBQUssT0FBTyxHQUFPLFdBQVcsSUFBSWYsRUFBRSxPQUFPTyxFQUFFUSxNQUFLLFNBQVNFLEdBQUcsT0FBT0EsRUFBRWlMLE9BQU8sS0FBSyxFQUFFLE9BQU9sTSxFQUFFMk4sRUFBRSxDQUFDLEVBQUVFLEtBQUssS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFN04sRUFBRXdELFdBQU0sRUFBTyxDQUFDdkMsRUFBRWtMLGlCQUFlLFNBQVMwQixJQUFJLE9BQU81TSxFQUFFRixVQUFLLE9BQU8sR0FBTyxXQUFXLE9BQU9SLEVBQUVRLE1BQUssU0FBU2YsR0FBRyxHQUFHOE0sVUFBVVcsV0FBV1gsVUFBVVcsVUFBVUssU0FBUyxPQUFPOUMsRUFBRSwyQ0FBMkMsQ0FBQyxFQUFFOEIsVUFBVVcsVUFBVUssWUFBWSxHQUFHbkosSUFBSSxPQUFPcUcsRUFBRSxtQ0FBbUMsQ0FBQyxFQUFFK0MsS0FBSyxNQUFNLElBQUl4SSxNQUFNLGdEQUE4QyxJQUFJckcsR0FBRSxFQUFHLFNBQVM4TyxJQUFJOU8sSUFBSUMsR0FBRytMLEVBQUUsd05BQXdOaE0sR0FBRSxHQUFJLElBQUkrTyxFQUFFLENBQUNDLEdBQUdwRCxFQUFFcUQsWUFBWSxTQUFTbk8sR0FBRyxPQUFPZ08sSUFBSWpQLEVBQUVpQixJQUFJb08saUJBQWlCLFdBQVcsT0FBT0osSUFBSTVPLEtBQUtpUCxNQUFNLFNBQVNyTyxHQUFHLE9BQU9pQixFQUFFRixVQUFLLE9BQU8sR0FBTyxXQUFXLE9BQU9SLEVBQUVRLE1BQUssU0FBU0UsR0FBRyxPQUFPK00sSUFBSSxDQUFDLEVBQUVwTixFQUFFWixXQUFTME4sVUFBVSxTQUFTMU4sR0FBRyxPQUFPaUIsRUFBRUYsVUFBSyxPQUFPLEdBQU8sV0FBVyxPQUFPUixFQUFFUSxNQUFLLFNBQVNFLEdBQUcsT0FBTytNLElBQUksQ0FBQyxFQUFFUixFQUFFeE4sV0FBU3NPLEtBQUssV0FBVyxPQUFPck4sRUFBRUYsVUFBSyxPQUFPLEdBQU8sV0FBVyxPQUFPUixFQUFFUSxNQUFLLFNBQVNmLEdBQUcsT0FBT2dPLElBQUksQ0FBQyxFQUFFSixZQUFVRSxTQUFTLFdBQVcsT0FBTzdNLEVBQUVGLFVBQUssT0FBTyxHQUFPLFdBQVcsT0FBT1IsRUFBRVEsTUFBSyxTQUFTZixHQUFHLE9BQU9nTyxJQUFJLENBQUMsRUFBRUgsYUFBVy9NLEVBQUUsV0FBV0MsS0FBS3dOLFNBQVEsR0FBSSxTQUFTMUIsRUFBRTdNLEdBQUcsSUFBSWlCLEVBQUUsSUFBSUgsRUFBRVAsRUFBRSxTQUFTUCxFQUFFaUIsRUFBRVYsR0FBR3lLLEVBQUUsbUJBQW1CaEwsRUFBRXVPLFNBQVEsRUFBR3ROLEVBQUU2RixTQUFRLFNBQVM3RixFQUFFckIsR0FBRyxJQUFJTCxFQUFFZ0IsRUFBRXFNLGNBQWNyTixFQUFFbU4sUUFBUTlNLEVBQUVxQixHQUFHckIsSUFBSWlCLEdBQUd0QixFQUFFb04sUUFBUS9NLEtBQUtxQixJQUFJK0osRUFBRSw2QkFBNkJoTCxFQUFFdU8sU0FBUSxNQUFNaE8sRUFBRWlPLGtCQUFrQmxPLEtBQUtTLEtBQUtFLEVBQUVqQixHQUFHcUQsU0FBU29MLGlCQUFpQixPQUFPbE8sR0FBRyxJQUFJOEMsU0FBU2lLLFlBQVksUUFBUSxRQUFRakssU0FBU3FMLG9CQUFvQixPQUFPbk8sR0FBRyxPQUFPVSxFQUFFc04sUUFBUSxTQUFTdkIsRUFBRWhOLEVBQUVpQixHQUFHb00sRUFBRXJOLEdBQUcsSUFBSU8sRUFBRXNNLEVBQUU1TCxHQUFHLE9BQU9zTSxJQUFJaE4sRUFBRSxTQUFTOE0sRUFBRXJOLEdBQUcsSUFBSWlCLEVBQUVvQyxTQUFTc0wsZUFBZSxHQUFHMU4sRUFBRSxDQUFDLElBQUlWLEVBQUU4QyxTQUFTdUwsY0FBY3JPLEVBQUVzTyxtQkFBbUI3TyxHQUFHaUIsRUFBRTZOLGtCQUFrQjdOLEVBQUU4TixTQUFTeE8sSUFBSSxTQUFTZ04sSUFBSSxJQUFJdk4sRUFBRXFELFNBQVNzTCxlQUFlM08sR0FBR0EsRUFBRThPLGtCQUFrQixTQUFTbkIsRUFBRTNOLEdBQUcsSUFBSWlCLEVBQUUsSUFBSTZKLEVBQUUsT0FBTzdKLEVBQUV5TCxRQUFRN0wsRUFBRWIsR0FBR2lCLEVBQUUsU0FBUzBELElBQUksTUFBTSxvQkFBb0JxSyxxQkFBZ0IsSUFBUzlOLE9BQU8wTCxvQkFBZSxJQUFTMUwsT0FBTzBMLGNBQWNGLFFBQVEsU0FBU3FCLElBQUksT0FBTzlNLEVBQUVGLFVBQUssT0FBTyxHQUFPLFdBQVcsSUFBSWYsRUFBRSxPQUFPTyxFQUFFUSxNQUFLLFNBQVNFLEdBQUcsR0FBRyxNQUFNakIsRUFBRWtCLE9BQU8wTCxjQUFjRCxRQUFRLFNBQVMsTUFBTSxJQUFJcEgsTUFBTSwrREFBK0QsTUFBTSxDQUFDLEVBQUV2RixTQUFPQSxFQUFFa08sR0FBR3BELEVBQUU5SyxFQUFFb0gsUUFBUTZHLEVBQUVqTyxFQUFFc08sS0FBS1YsRUFBRTVOLEVBQUU4TixTQUFTRCxFQUFFN04sRUFBRW1PLFlBQVlwUCxFQUFFaUIsRUFBRW9PLGlCQUFpQmhQLEVBQUVZLEVBQUVxTyxNQUFNek4sRUFBRVosRUFBRTBOLFVBQVVGLEVBQUVoTyxPQUFPQyxlQUFlTyxFQUFFLGFBQWEsQ0FBQ0QsT0FBTSxJQUF6dE1rQixDQUFFckMsSyxvRENBenRHLGlDQUM2QixvQkFBVGdOLE1BQXdCQSxNQUNoQzFLLE9BQ1JzQyxFQUFReEMsU0FBU04sVUFBVThDLE1BaUIvQixTQUFTeUwsRUFBUWpNLEVBQUlrTSxHQUNuQm5PLEtBQUtvTyxJQUFNbk0sRUFDWGpDLEtBQUtxTyxTQUFXRixFQWZsQnRRLEVBQVF1TSxXQUFhLFdBQ25CLE9BQU8sSUFBSThELEVBQVF6TCxFQUFNdkUsS0FBS2tNLFdBQVlrRSxFQUFPNUwsV0FBWTZMLGVBRS9EMVEsRUFBUTJRLFlBQWMsV0FDcEIsT0FBTyxJQUFJTixFQUFRekwsRUFBTXZFLEtBQUtzUSxZQUFhRixFQUFPNUwsV0FBWStMLGdCQUVoRTVRLEVBQVEwUSxhQUNSMVEsRUFBUTRRLGNBQWdCLFNBQVNDLEdBQzNCQSxHQUNGQSxFQUFRQyxTQVFaVCxFQUFRdk8sVUFBVWlQLE1BQVFWLEVBQVF2TyxVQUFVa1AsSUFBTSxhQUNsRFgsRUFBUXZPLFVBQVVnUCxNQUFRLFdBQ3hCM08sS0FBS3FPLFNBQVNuUSxLQUFLb1EsRUFBT3RPLEtBQUtvTyxNQUlqQ3ZRLEVBQVFpUixPQUFTLFNBQVNoTyxFQUFNaU8sR0FDOUJSLGFBQWF6TixFQUFLa08sZ0JBQ2xCbE8sRUFBS21PLGFBQWVGLEdBR3RCbFIsRUFBUXFSLFNBQVcsU0FBU3BPLEdBQzFCeU4sYUFBYXpOLEVBQUtrTyxnQkFDbEJsTyxFQUFLbU8sY0FBZ0IsR0FHdkJwUixFQUFRc1IsYUFBZXRSLEVBQVF1UixPQUFTLFNBQVN0TyxHQUMvQ3lOLGFBQWF6TixFQUFLa08sZ0JBRWxCLElBQUlELEVBQVFqTyxFQUFLbU8sYUFDYkYsR0FBUyxJQUNYak8sRUFBS2tPLGVBQWlCNUUsWUFBVyxXQUMzQnRKLEVBQUt1TyxZQUNQdk8sRUFBS3VPLGVBQ05OLEtBS1AsRUFBUSxHQUlSbFIsRUFBUTZNLGFBQWdDLG9CQUFURyxNQUF3QkEsS0FBS0gsbUJBQ2xCLElBQVhJLEdBQTBCQSxFQUFPSixjQUN4QzFLLE1BQVFBLEtBQUswSyxhQUNyQzdNLEVBQVF5UixlQUFrQyxvQkFBVHpFLE1BQXdCQSxLQUFLeUUscUJBQ2xCLElBQVh4RSxHQUEwQkEsRUFBT3dFLGdCQUN4Q3RQLE1BQVFBLEtBQUtzUCxpQixrQ0M5RHZDLDZCQUNJLGFBRUEsSUFBSXhFLEVBQU9KLGFBQVgsQ0FJQSxJQUlJNkUsRUE2SElDLEVBWkFDLEVBckJBQyxFQUNBQyxFQWpHSkMsRUFBYSxFQUNiQyxFQUFnQixHQUNoQkMsR0FBd0IsRUFDeEJDLEVBQU1qRixFQUFPeEksU0FvSmIwTixFQUFXdlIsT0FBT3dSLGdCQUFrQnhSLE9BQU93UixlQUFlbkYsR0FDOURrRixFQUFXQSxHQUFZQSxFQUFTNUYsV0FBYTRGLEVBQVdsRixFQUdmLHFCQUFyQyxHQUFHbEssU0FBUzFDLEtBQUs0TSxFQUFPb0YsU0FwRnhCWCxFQUFvQixTQUFTWSxHQUN6QkQsRUFBUUUsVUFBUyxXQUFjQyxFQUFhRixRQUlwRCxXQUdJLEdBQUlyRixFQUFPd0YsY0FBZ0J4RixFQUFPeUYsY0FBZSxDQUM3QyxJQUFJQyxHQUE0QixFQUM1QkMsRUFBZTNGLEVBQU80RixVQU0xQixPQUxBNUYsRUFBTzRGLFVBQVksV0FDZkYsR0FBNEIsR0FFaEMxRixFQUFPd0YsWUFBWSxHQUFJLEtBQ3ZCeEYsRUFBTzRGLFVBQVlELEVBQ1pELEdBd0VKRyxHQUlBN0YsRUFBTzhGLGlCQTlDVm5CLEVBQVUsSUFBSW1CLGdCQUNWQyxNQUFNSCxVQUFZLFNBQVNJLEdBRS9CVCxFQURhUyxFQUFNQyxPQUl2QnhCLEVBQW9CLFNBQVNZLEdBQ3pCVixFQUFRdUIsTUFBTVYsWUFBWUgsS0EyQ3ZCSixHQUFPLHVCQUF3QkEsRUFBSXhLLGNBQWMsV0F0Q3BEaUssRUFBT08sRUFBSWtCLGdCQUNmMUIsRUFBb0IsU0FBU1ksR0FHekIsSUFBSWUsRUFBU25CLEVBQUl4SyxjQUFjLFVBQy9CMkwsRUFBT0MsbUJBQXFCLFdBQ3hCZCxFQUFhRixHQUNiZSxFQUFPQyxtQkFBcUIsS0FDNUIzQixFQUFLdEssWUFBWWdNLEdBQ2pCQSxFQUFTLE1BRWIxQixFQUFLM0ssWUFBWXFNLEtBS3JCM0IsRUFBb0IsU0FBU1ksR0FDekIvRixXQUFXaUcsRUFBYyxFQUFHRixLQWxENUJULEVBQWdCLGdCQUFrQjBCLEtBQUtDLFNBQVcsSUFDbEQxQixFQUFrQixTQUFTbUIsR0FDdkJBLEVBQU1yUCxTQUFXcUosR0FDSyxpQkFBZmdHLEVBQU1DLE1BQ3lCLElBQXRDRCxFQUFNQyxLQUFLM0wsUUFBUXNLLElBQ25CVyxHQUFjUyxFQUFNQyxLQUFLdkcsTUFBTWtGLEVBQWMxTixVQUlqRDhJLEVBQU80QyxpQkFDUDVDLEVBQU80QyxpQkFBaUIsVUFBV2lDLEdBQWlCLEdBRXBEN0UsRUFBT3dHLFlBQVksWUFBYTNCLEdBR3BDSixFQUFvQixTQUFTWSxHQUN6QnJGLEVBQU93RixZQUFZWixFQUFnQlMsRUFBUSxPQWdFbkRILEVBQVN0RixhQTFLVCxTQUFzQjZHLEdBRUksbUJBQWJBLElBQ1RBLEVBQVcsSUFBSXRSLFNBQVMsR0FBS3NSLElBSS9CLElBREEsSUFBSUMsRUFBTyxJQUFJakgsTUFBTTdILFVBQVVWLE9BQVMsR0FDL0JqRSxFQUFJLEVBQUdBLEVBQUl5VCxFQUFLeFAsT0FBUWpFLElBQzdCeVQsRUFBS3pULEdBQUsyRSxVQUFVM0UsRUFBSSxHQUc1QixJQUFJMFQsRUFBTyxDQUFFRixTQUFVQSxFQUFVQyxLQUFNQSxHQUd2QyxPQUZBM0IsRUFBY0QsR0FBYzZCLEVBQzVCbEMsRUFBa0JLLEdBQ1hBLEtBNkpUSSxFQUFTVixlQUFpQkEsRUExSjFCLFNBQVNBLEVBQWVhLFVBQ2JOLEVBQWNNLEdBeUJ6QixTQUFTRSxFQUFhRixHQUdsQixHQUFJTCxFQUdBMUYsV0FBV2lHLEVBQWMsRUFBR0YsT0FDekIsQ0FDSCxJQUFJc0IsRUFBTzVCLEVBQWNNLEdBQ3pCLEdBQUlzQixFQUFNLENBQ04zQixHQUF3QixFQUN4QixLQWpDWixTQUFhMkIsR0FDVCxJQUFJRixFQUFXRSxFQUFLRixTQUNoQkMsRUFBT0MsRUFBS0QsS0FDaEIsT0FBUUEsRUFBS3hQLFFBQ2IsS0FBSyxFQUNEdVAsSUFDQSxNQUNKLEtBQUssRUFDREEsRUFBU0MsRUFBSyxJQUNkLE1BQ0osS0FBSyxFQUNERCxFQUFTQyxFQUFLLEdBQUlBLEVBQUssSUFDdkIsTUFDSixLQUFLLEVBQ0RELEVBQVNDLEVBQUssR0FBSUEsRUFBSyxHQUFJQSxFQUFLLElBQ2hDLE1BQ0osUUFDSUQsRUFBUzlPLFdBbkRyQixFQW1Ec0MrTyxJQWlCbEJFLENBQUlELEdBQ04sUUFDRW5DLEVBQWVhLEdBQ2ZMLEdBQXdCLE1BdkU1QyxDQXlMa0Isb0JBQVRqRixVQUF5QyxJQUFYQyxFQUF5QjlLLEtBQU84SyxFQUFTRCxRLHFDQ3hMaEYsSUFPSThHLEVBQ0FDLEVBUkExQixFQUFVcFMsRUFBT0QsUUFBVSxHQVUvQixTQUFTZ1UsSUFDTCxNQUFNLElBQUlyTixNQUFNLG1DQUVwQixTQUFTc04sSUFDTCxNQUFNLElBQUl0TixNQUFNLHFDQXNCcEIsU0FBU3VOLEVBQVdDLEdBQ2hCLEdBQUlMLElBQXFCdkgsV0FFckIsT0FBT0EsV0FBVzRILEVBQUssR0FHM0IsSUFBS0wsSUFBcUJFLElBQXFCRixJQUFxQnZILFdBRWhFLE9BREF1SCxFQUFtQnZILFdBQ1pBLFdBQVc0SCxFQUFLLEdBRTNCLElBRUksT0FBT0wsRUFBaUJLLEVBQUssR0FDL0IsTUFBTTlSLEdBQ0osSUFFSSxPQUFPeVIsRUFBaUJ6VCxLQUFLLEtBQU04VCxFQUFLLEdBQzFDLE1BQU05UixHQUVKLE9BQU95UixFQUFpQnpULEtBQUs4QixLQUFNZ1MsRUFBSyxNQXZDbkQsV0FDRyxJQUVRTCxFQURzQixtQkFBZnZILFdBQ1lBLFdBRUF5SCxFQUV6QixNQUFPM1IsR0FDTHlSLEVBQW1CRSxFQUV2QixJQUVRRCxFQUR3QixtQkFBakJyRCxhQUNjQSxhQUVBdUQsRUFFM0IsTUFBTzVSLEdBQ0wwUixFQUFxQkUsR0FqQjdCLEdBd0VBLElBRUlHLEVBRkFDLEVBQVEsR0FDUkMsR0FBVyxFQUVYQyxHQUFjLEVBRWxCLFNBQVNDLElBQ0FGLEdBQWFGLElBR2xCRSxHQUFXLEVBQ1BGLEVBQWFqUSxPQUNia1EsRUFBUUQsRUFBYXRRLE9BQU91USxHQUU1QkUsR0FBYyxFQUVkRixFQUFNbFEsUUFDTnNRLEtBSVIsU0FBU0EsSUFDTCxJQUFJSCxFQUFKLENBR0EsSUFBSXpELEVBQVVxRCxFQUFXTSxHQUN6QkYsR0FBVyxFQUdYLElBREEsSUFBSUksRUFBTUwsRUFBTWxRLE9BQ1Z1USxHQUFLLENBR1AsSUFGQU4sRUFBZUMsRUFDZkEsRUFBUSxLQUNDRSxFQUFhRyxHQUNkTixHQUNBQSxFQUFhRyxHQUFZVixNQUdqQ1UsR0FBYyxFQUNkRyxFQUFNTCxFQUFNbFEsT0FFaEJpUSxFQUFlLEtBQ2ZFLEdBQVcsRUFuRWYsU0FBeUJLLEdBQ3JCLEdBQUlaLElBQXVCckQsYUFFdkIsT0FBT0EsYUFBYWlFLEdBR3hCLElBQUtaLElBQXVCRSxJQUF3QkYsSUFBdUJyRCxhQUV2RSxPQURBcUQsRUFBcUJyRCxhQUNkQSxhQUFhaUUsR0FFeEIsSUFFV1osRUFBbUJZLEdBQzVCLE1BQU90UyxHQUNMLElBRUksT0FBTzBSLEVBQW1CMVQsS0FBSyxLQUFNc1UsR0FDdkMsTUFBT3RTLEdBR0wsT0FBTzBSLEVBQW1CMVQsS0FBSzhCLEtBQU13UyxLQWdEN0NDLENBQWdCL0QsSUFpQnBCLFNBQVNnRSxFQUFLVixFQUFLVyxHQUNmM1MsS0FBS2dTLElBQU1BLEVBQ1hoUyxLQUFLMlMsTUFBUUEsRUFZakIsU0FBU0MsS0E1QlQxQyxFQUFRRSxTQUFXLFNBQVU0QixHQUN6QixJQUFJUixFQUFPLElBQUlqSCxNQUFNN0gsVUFBVVYsT0FBUyxHQUN4QyxHQUFJVSxVQUFVVixPQUFTLEVBQ25CLElBQUssSUFBSWpFLEVBQUksRUFBR0EsRUFBSTJFLFVBQVVWLE9BQVFqRSxJQUNsQ3lULEVBQUt6VCxFQUFJLEdBQUsyRSxVQUFVM0UsR0FHaENtVSxFQUFNelIsS0FBSyxJQUFJaVMsRUFBS1YsRUFBS1IsSUFDSixJQUFqQlUsRUFBTWxRLFFBQWlCbVEsR0FDdkJKLEVBQVdPLElBU25CSSxFQUFLL1MsVUFBVStSLElBQU0sV0FDakIxUixLQUFLZ1MsSUFBSXZQLE1BQU0sS0FBTXpDLEtBQUsyUyxRQUU5QnpDLEVBQVEyQyxNQUFRLFVBQ2hCM0MsRUFBUTRDLFNBQVUsRUFDbEI1QyxFQUFRNkMsSUFBTSxHQUNkN0MsRUFBUThDLEtBQU8sR0FDZjlDLEVBQVErQyxRQUFVLEdBQ2xCL0MsRUFBUWdELFNBQVcsR0FJbkJoRCxFQUFRaUQsR0FBS1AsRUFDYjFDLEVBQVFrRCxZQUFjUixFQUN0QjFDLEVBQVFtRCxLQUFPVCxFQUNmMUMsRUFBUW9ELElBQU1WLEVBQ2QxQyxFQUFRcUQsZUFBaUJYLEVBQ3pCMUMsRUFBUXNELG1CQUFxQlosRUFDN0IxQyxFQUFRdUQsS0FBT2IsRUFDZjFDLEVBQVF3RCxnQkFBa0JkLEVBQzFCMUMsRUFBUXlELG9CQUFzQmYsRUFFOUIxQyxFQUFRMEQsVUFBWSxTQUFVdFYsR0FBUSxNQUFPLElBRTdDNFIsRUFBUTJELFFBQVUsU0FBVXZWLEdBQ3hCLE1BQU0sSUFBSWtHLE1BQU0scUNBR3BCMEwsRUFBUTRELElBQU0sV0FBYyxNQUFPLEtBQ25DNUQsRUFBUTZELE1BQVEsU0FBVUMsR0FDdEIsTUFBTSxJQUFJeFAsTUFBTSxtQ0FFcEIwTCxFQUFRK0QsTUFBUSxXQUFhLE9BQU8sSSxxVUN0TGZDLEUsV0FDbkIsYUFXUSxvRUFBSixHQUFJLElBVk5DLG1CQVVNLE1BVlEsUUFVUixNQVROQyx1QkFTTSxNQVRZLE9BU1osTUFSTkMsa0JBUU0sTUFSTyxPQVFQLE1BUE5DLG9CQU9NLE1BUFMsbUJBT1QsTUFOTkMsc0JBTU0sTUFOVyxNQU1YLE1BTE5DLG9CQUtNLE1BTFMsUUFLVCxNQUpOQyxxQkFJTSxNQUpVLFNBSVYsTUFITkMsd0JBR00sTUFIYSxrQkFHYixNQUZOQyxpQkFFTSxNQUZNLEtBRU4sRUFETkMsRUFDTSxFQUROQSxjQUNNLFVBQ041VSxLQUFLNlUsY0FBZ0J2UyxTQUFTd1MsZUFBZVYsR0FDN0NwVSxLQUFLK1UsVUFBWXpTLFNBQVN3UyxlQUFlWCxHQUN6Q25VLEtBQUtnVixXQUFhMVMsU0FBU3dTLGVBQWVSLEdBQzFDdFUsS0FBS2lWLGFBQWUzUyxTQUFTd1MsZUFBZVAsR0FDNUN2VSxLQUFLa1YsV0FBYTVTLFNBQVN3UyxlQUFlTixHQUMxQ3hVLEtBQUttVixZQUFjN1MsU0FBU3dTLGVBQWVMLEdBQzNDelUsS0FBS2tWLFdBQVdFLFNBQVcsV0FBUSxFQUFLQyxZQUFZLEVBQUtILFdBQVdsVyxNQUFPLFVBQzNFZ0IsS0FBS21WLFlBQVlDLFNBQVcsV0FBUSxFQUFLQyxZQUFZLEVBQUtGLFlBQVluVyxNQUFPLFdBQzdFZ0IsS0FBS3NWLGVBQWlCaFQsU0FBU3dTLGVBQWVKLEdBQzlDMVUsS0FBS3NWLGVBQWVDLFFBQVV2VixLQUFLd1Ysc0JBQXNCalcsS0FBS1MsTUFDOURBLEtBQUsyVSxVQUFVQSxHQUNmM1UsS0FBS3lWLGVBQ0x6VixLQUFLMFYsUUFBVTFWLEtBQUsyVixZQUFZZixHQUNoQ3RTLFNBQVN3UyxlQUFlVCxHQUFZa0IsUUFBVXZWLEtBQUs0VixhQUFhclcsS0FBS1MsTSw0REF3RWpENlYsR0FDcEIsSUFHSTFYLEVBSEUyWCxFQUFRLDRIQUNWQyxFQUFvQixDQUFDLE9BQVEsTUFBTyxRQUFTLFNBQVUsYUFBYyxXQUFZLGNBQWUsY0FBZSxTQUFVLFNBQ3pIQyxFQUFhLEdBRWpCLElBQUtGLEVBQU01TSxLQUFLMk0sR0FDZCxPQUFPLEtBR1QsSUFEQUMsRUFBTUcsVUFBWSxFQUNlLFFBQXpCOVgsRUFBSTJYLEVBQU1JLEtBQUtMLEtBQ3JCMVgsRUFBRTRILFNBQVEsU0FBQ29RLEVBQU9DLEdBQ0UsR0FBZEEsSUFDRkosRUFBV0QsRUFBa0JLLEVBQWEsSUFBTUQsTUFJdEQsT0FBT0gsTSxxQ0F0RklwQixHQUNYLE1BQU0sSUFBSXBRLE1BQU0sbUQsMkNBR2hCLE1BQU0sSUFBSUEsTUFBTSwwRCxnQ0FFUDZSLEdBQ1QsTUFBTSxJQUFJN1IsTUFBTSxpRCxxQ0FHUyxLQUFyQnhFLEtBQUtxVyxNQUFNQyxPQUFzQyxLQUF0QnRXLEtBQUtxVyxNQUFNRSxTQUN4Q3ZXLEtBQUtzVixlQUFla0IsU0FBVSxFQUM5QmxVLFNBQVN3UyxlQUFlLG1CQUFtQjJCLFVBQVVDLElBQUksYyw0Q0FHdEN4VyxHQUNqQkYsS0FBS3NWLGVBQWVrQixTQUN0QmxVLFNBQVN3UyxlQUFlLG1CQUFtQjJCLFVBQVVDLElBQUksV0FDekQxVyxLQUFLcVcsTUFBTUMsTUFBUXRXLEtBQUtpVixhQUFhMEIsWUFDckMzVyxLQUFLcVcsTUFBTUUsT0FBU3ZXLEtBQUtpVixhQUFhMkIsYUFDdEM1VyxLQUFLNlcsYUFFTHZVLFNBQVN3UyxlQUFlLG1CQUFtQjJCLFVBQVV0USxPQUFPLFdBQzVEbkcsS0FBS3FWLFlBQVksR0FBSSxTQUNyQnJWLEtBQUtxVixZQUFZLEdBQUksVUFDckJyVixLQUFLaVYsYUFBYTNRLE1BQU1pUyxPQUFTLEdBQ2pDdlcsS0FBS2lWLGFBQWEzUSxNQUFNZ1MsTUFBUSxNLHFDQUlwQixXQUNkNUosSUFBVUMsVUFBVTNNLEtBQUs2VSxjQUFjaUMsV0FBVzFOLE1BQUssV0FDckQsRUFBSzRMLFdBQVc4QixVQUFZLHFEQUMzQixXQUNELEVBQUs5QixXQUFXOEIsVUFBWSwrQ0FFOUIxTSxZQUFXLFdBQ1QsRUFBSzRLLFdBQVc4QixVQUFZLEtBRTFCLE8saUNBRU1DLEdBQ041VyxPQUFPNlcsU0FBVyxjQUFlN1csT0FBTzZXLFFBQzFDQSxRQUFRQyxVQUFVLEtBQU0sS0FBTSxJQUFNRixHQUVwQzVXLE9BQU9rSSxTQUFTME8sS0FBT0EsSSxrQ0FHZEcsRUFBSzVYLEdBQ2hCVSxLQUFLcVcsTUFBTS9XLEdBQU80WCxFQUNsQmxYLEtBQUs2VyxhLGlDQUdMN1csS0FBS21YLHFCQUNMblgsS0FBS29YLGMsa0NBR0wsR0FBS3BYLEtBQUtzVixlQUFla0IsUUFBekIsQ0FHQSxJQUFJYSxFQUFtQyxJQUFyQnJYLEtBQUtxVyxNQUFNRSxPQUFlLEdBQUt2VyxLQUFLcVcsTUFBTUUsT0FBUyxLQUNqRWUsRUFBaUMsSUFBcEJ0WCxLQUFLcVcsTUFBTUMsTUFBYyxHQUFLdFcsS0FBS3FXLE1BQU1DLE1BQVEsS0FDbEV0VyxLQUFLaVYsYUFBYTNRLE1BQU1pUyxPQUFTYyxFQUNqQ3JYLEtBQUtpVixhQUFhM1EsTUFBTWdTLE1BQVFnQixFQUNoQ3RYLEtBQUttVixZQUFZblcsTUFBUWdCLEtBQUtxVyxNQUFNRSxPQUNwQ3ZXLEtBQUtrVixXQUFXbFcsTUFBUWdCLEtBQUtxVyxNQUFNQyxTLHNDQUduQyxNQUFNLElBQUk5UixNQUFNLHdELHdTQ2pHQytTLEUsV0FDbkIsV0FBYUMsRUFBTUMsR0FBK0QsSUFBckRDLEVBQXFELHVEQUE5QyxJQUFLQyxFQUF5Qyx1REFBMUIsR0FBSUMsRUFBc0IsdURBQVYsYUFBVSxVQUNoRjVYLEtBQUswWCxLQUFPQSxFQUNaMVgsS0FBSzZYLElBQU1GLEVBQ1gzWCxLQUFLd1gsS0FBT0EsRUFFWnhYLEtBQUt5WCxTQUFXQSxFQUNoQnpYLEtBQUs0WCxVQUFZQSxFQUNqQjVYLEtBQUt3WCxLQUFLTSxZQUFjOVgsS0FBSytYLGNBQWN4WSxLQUFLUyxNQUNoREEsS0FBS3dYLEtBQUtRLGFBQWVoWSxLQUFLK1gsY0FBY3hZLEtBQUtTLE1BQ2pEQSxLQUFLaVksV0FBV04sR0FDaEIzWCxLQUFLeVgsU0FBU3pYLEtBQUs2WCxJQUFLN1gsS0FBS3dYLEtBQUt2VixJLDZEQUVyQi9CLElBQ2JBLEVBQUlBLEdBQUtDLE9BQU8yUSxPQUNkckQsaUJBQ0Z6TixLQUFLa1ksWUFBY2hZLEVBQUUwQyxPQUNyQjVDLEtBQUtrWSxZQUFZekIsVUFBVUMsSUFBSSxVQUUvQnBVLFNBQVM2VixVQUFZblksS0FBS29ZLGlCQUFpQjdZLEtBQUtTLE1BQ2hEc0MsU0FBUytWLFdBQWFyWSxLQUFLb1ksaUJBQWlCN1ksS0FBS1MsTUFFakRzQyxTQUFTZ1csWUFBY3RZLEtBQUt1WSxZQUFZaFosS0FBS1MsTUFDN0NzQyxTQUFTa1csWUFBY3hZLEtBQUt1WSxZQUFZaFosS0FBS1MsUSxrQ0FFbENFLEdBRVgsR0FEQUEsRUFBSUEsR0FBS0MsT0FBTzJRLE1BQ1Usb0JBQWYySCxZQUE4QnZZLGFBQWF1WSxXQUFZLENBQ2hFLElBQUlDLEVBQVd4WSxFQUFFeVksZUFBZSxHQUNoQzNZLEtBQUs0WSxPQUFPRixFQUFTRyxRQUFTSCxFQUFTSSxjQUV2QzlZLEtBQUs0WSxPQUFPMVksRUFBRTJZLFFBQVMzWSxFQUFFNFksVyxpQ0FHbEJqQixHQUNRLEtBQWI3WCxLQUFLMFgsS0FDUDFYLEtBQUt3WCxLQUFLbFQsTUFBTXlVLEtBQU9sQixFQUFNLElBRTdCN1gsS0FBS3dYLEtBQUtsVCxNQUFNMFUsSUFBTW5CLEVBQU0sTSw2QkFHeEJvQixFQUFPQyxHQUNiLElBQUlDLEVBQVVuWixLQUFLd1gsS0FBS3ZTLFdBQVdtVSx3QkFDbEIsS0FBYnBaLEtBQUswWCxNQUNQMVgsS0FBSzZYLElBQU03WCxLQUFLcVosWUFBdUQsS0FBMUNKLEVBQVEsRUFBSUUsRUFBTyxNQUFVRyxRQUFRLEdBQVdILEVBQU8sT0FBV0csUUFBUSxHQUFJLEVBQUcsS0FDOUd0WixLQUFLd1gsS0FBS2xULE1BQU15VSxLQUFPL1ksS0FBSzZYLElBQU0sTUFFbEM3WCxLQUFLNlgsSUFBTTdYLEtBQUtxWixZQUFzRCxLQUF6Q0gsRUFBUSxFQUFJQyxFQUFPLEtBQVNHLFFBQVEsR0FBV0gsRUFBTyxRQUFZRyxRQUFRLEdBQUksRUFBRyxLQUM5R3RaLEtBQUt3WCxLQUFLbFQsTUFBTTBVLElBQU1oWixLQUFLNlgsSUFBTSxLQUVuQzdYLEtBQUt5WCxTQUFTelgsS0FBSzZYLElBQUs3WCxLQUFLd1gsS0FBS3ZWLE0seUNBSWxDakMsS0FBS2tZLFlBQVl6QixVQUFVdFEsT0FBTyxVQUNsQ25HLEtBQUs0WCxZQUNMdFYsU0FBUzZWLFVBQVksS0FDckI3VixTQUFTZ1csWUFBYyxLQUN2QmhXLFNBQVMrVixXQUFhLEtBQ3RCL1YsU0FBU2tXLFlBQWMsTyxpQ0FHYjNMLEVBQUcwTSxFQUFLQyxHQUNsQixPQUFRcEksS0FBS21JLElBQUlDLEVBQUtwSSxLQUFLb0ksSUFBSUQsRUFBSzFNLFMsbXFDQzVEbkI0TSxFLDRmQUNScEQsR0FjVHJXLEtBQUtxVyxNQUFpQixNQUFUQSxFQWJNLENBQ2pCMEMsS0FBTSxHQUNOVyxNQUFPLEdBQ1BWLElBQUssR0FDTFcsT0FBUSxHQUNSQyxXQUFZLEdBQ1pDLFlBQWEsR0FDYkMsU0FBVSxHQUNWQyxZQUFhLEdBQ2J6RCxNQUFPLEdBQ1BDLE9BQVEsR0FDUnlELGNBQWMsR0FFNEIzRCxJLGtDQUdqQ3pCLEdBQ1gsTUFBTyxDQUNMbUUsS0FBTSxJQUFJeEIsRUFBUTNDLEVBQWNtRSxLQUFNL1ksS0FBS3FWLFlBQVk5VixLQUFLUyxNQUFPLElBQUtBLEtBQUtxVyxNQUFNMEMsS0FBTS9ZLEtBQUtpYSxjQUFjMWEsS0FBS1MsT0FDakgwWixNQUFPLElBQUluQyxFQUFRM0MsRUFBYzhFLE1BQU8xWixLQUFLcVYsWUFBWTlWLEtBQUtTLE1BQU8sSUFBS0EsS0FBS3FXLE1BQU1xRCxNQUFPMVosS0FBS2lhLGNBQWMxYSxLQUFLUyxPQUNwSGdaLElBQUssSUFBSXpCLEVBQVEzQyxFQUFjb0UsSUFBS2haLEtBQUtxVixZQUFZOVYsS0FBS1MsTUFBTyxJQUFLQSxLQUFLcVcsTUFBTTJDLElBQUtoWixLQUFLaWEsY0FBYzFhLEtBQUtTLE9BQzlHMlosT0FBUSxJQUFJcEMsRUFBUTNDLEVBQWMrRSxPQUFRM1osS0FBS3FWLFlBQVk5VixLQUFLUyxNQUFPLElBQUtBLEtBQUtxVyxNQUFNc0QsT0FBUTNaLEtBQUtpYSxjQUFjMWEsS0FBS1MsT0FDdkg0WixXQUFZLElBQUlyQyxFQUFRM0MsRUFBY2dGLFdBQVk1WixLQUFLcVYsWUFBWTlWLEtBQUtTLE1BQU8sSUFBS0EsS0FBS3FXLE1BQU11RCxXQUFZNVosS0FBS2lhLGNBQWMxYSxLQUFLUyxPQUNuSTZaLFlBQWEsSUFBSXRDLEVBQVEzQyxFQUFjaUYsWUFBYTdaLEtBQUtxVixZQUFZOVYsS0FBS1MsTUFBTyxJQUFLQSxLQUFLcVcsTUFBTXdELFlBQWE3WixLQUFLaWEsY0FBYzFhLEtBQUtTLE9BQ3RJOFosU0FBVSxJQUFJdkMsRUFBUTNDLEVBQWNrRixTQUFVOVosS0FBS3FWLFlBQVk5VixLQUFLUyxNQUFPLElBQUtBLEtBQUtxVyxNQUFNeUQsU0FBVTlaLEtBQUtpYSxjQUFjMWEsS0FBS1MsT0FDN0grWixZQUFhLElBQUl4QyxFQUFRM0MsRUFBY21GLFlBQWEvWixLQUFLcVYsWUFBWTlWLEtBQUtTLE1BQU8sSUFBS0EsS0FBS3FXLE1BQU0wRCxZQUFhL1osS0FBS2lhLGNBQWMxYSxLQUFLUyxVLDJDQUl4SSxJQUFJa2EsRUFBTWxhLEtBQUtxVyxNQUFNMkMsSUFBTSxLQUMzQmtCLEdBQVEsSUFBTWxhLEtBQUtxVyxNQUFNeUQsU0FBWSxLQUNyQ0ksR0FBUSxJQUFNbGEsS0FBS3FXLE1BQU0wRCxZQUFlLEtBQ3hDRyxHQUFPbGEsS0FBS3FXLE1BQU1zRCxPQUFTLE9BQzNCTyxHQUFPbGEsS0FBS3FXLE1BQU0wQyxLQUFPLEtBQ3pCbUIsR0FBT2xhLEtBQUtxVyxNQUFNcUQsTUFBUSxLQUMxQlEsR0FBUSxJQUFNbGEsS0FBS3FXLE1BQU13RCxZQUFlLEtBQ3hDSyxHQUFRLElBQU1sYSxLQUFLcVcsTUFBTXVELFdBQWMsS0FDdkM1WixLQUFLK1UsVUFBVXpRLE1BQU0saUJBQW1CNFYsRUFDeENsYSxLQUFLNlUsY0FBY2lDLFVBQVlvRCxJLHNDQUVoQixNQUNxRmxhLEtBQUtxVyxNQUFqRzBDLEVBRE8sRUFDUEEsS0FBTUMsRUFEQyxFQUNEQSxJQUFLVSxFQURKLEVBQ0lBLE1BQU9DLEVBRFgsRUFDV0EsT0FBUXJELEVBRG5CLEVBQ21CQSxNQUFPQyxFQUQxQixFQUMwQkEsT0FBUXFELEVBRGxDLEVBQ2tDQSxXQUFZRSxFQUQ5QyxFQUM4Q0EsU0FBVUQsRUFEeEQsRUFDd0RBLFlBQWFFLEVBRHJFLEVBQ3FFQSxZQUNoRmhELEVBQU8sR0FBSCxPQUFNZ0MsRUFBTixZQUFjQyxFQUFkLFlBQXFCVSxFQUFyQixZQUE4QkMsRUFBOUIsWUFBd0NDLEVBQXhDLFlBQXNERSxFQUF0RCxZQUFrRUQsRUFBbEUsWUFBaUZFLEVBQWpGLFlBQWdHeEQsRUFBaEcsWUFBMEdELEdBQ2xIdFcsS0FBS21hLFdBQVdwRCxRLDhCQTdDd0I3QyxHQ0F4Q2tHLEVBQVcsQ0FDYnJCLEtBQU16VyxTQUFTd1MsZUFBZSxRQUM5QjRFLE1BQU9wWCxTQUFTd1MsZUFBZSxTQUMvQjZFLE9BQVFyWCxTQUFTd1MsZUFBZSxVQUNoQ2tFLElBQUsxVyxTQUFTd1MsZUFBZSxPQUM3QjhFLFdBQVl0WCxTQUFTd1MsZUFBZSxjQUNwQytFLFlBQWF2WCxTQUFTd1MsZUFBZSxlQUNyQ2lGLFlBQWF6WCxTQUFTd1MsZUFBZSxlQUNyQ2dGLFNBQVV4WCxTQUFTd1MsZUFBZSxhQUVoQ3VGLEVBQVNaLEVBQWVhLGNBQWNuYSxPQUFPa0ksU0FBU3JCLE1BQzlDLElBQUl5UyxFQUFlLENBQUM3RSxjQUFld0YsRUFBVXpGLFVBQVcwRiIsImZpbGUiOiJtYWluOHYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9kaXN0L1wiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTEpO1xuIiwidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vZGlzdC9jbGlwYm9hcmQtcG9seWZpbGwucHJvbWlzZVwiKVxuIiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL21haW4uc2Nzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IHVuZGVmaW5lZDtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2FscztcblxuaWYobW9kdWxlLmhvdCkge1xuXHRtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vbWFpbi5zY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vbWFpbi5zY3NzXCIpO1xuXG5cdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cblx0XHR2YXIgbG9jYWxzID0gKGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHZhciBrZXksIGlkeCA9IDA7XG5cblx0XHRcdGZvcihrZXkgaW4gYSkge1xuXHRcdFx0XHRpZighYiB8fCBhW2tleV0gIT09IGJba2V5XSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRpZHgrKztcblx0XHRcdH1cblxuXHRcdFx0Zm9yKGtleSBpbiBiKSBpZHgtLTtcblxuXHRcdFx0cmV0dXJuIGlkeCA9PT0gMDtcblx0XHR9KGNvbnRlbnQubG9jYWxzLCBuZXdDb250ZW50LmxvY2FscykpO1xuXG5cdFx0aWYoIWxvY2FscykgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGluZyBDU1MgSE1SIGR1ZSB0byBjaGFuZ2VkIGNzcy1tb2R1bGVzIGxvY2Fscy4nKTtcblxuXHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0fSk7XG5cblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59IiwiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2xpYi9jc3MtYmFzZS5qc1wiKShmYWxzZSk7XG4vLyBpbXBvcnRzXG5cblxuLy8gbW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCJodG1se2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7LW1zLXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJX1ib2R5e21hcmdpbjowfWFydGljbGUsYXNpZGUsZGV0YWlscyxmaWdjYXB0aW9uLGZpZ3VyZSxmb290ZXIsaGVhZGVyLGhncm91cCxtYWluLG1lbnUsbmF2LHNlY3Rpb24sc3VtbWFyeXtkaXNwbGF5OmJsb2NrfWF1ZGlvLGNhbnZhcyxwcm9ncmVzcyx2aWRlb3tkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX1hdWRpbzpub3QoW2NvbnRyb2xzXSl7ZGlzcGxheTpub25lO2hlaWdodDowfVtoaWRkZW5dLHRlbXBsYXRle2Rpc3BsYXk6bm9uZX1he2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9YTphY3RpdmUsYTpob3ZlcntvdXRsaW5lOjB9YWJiclt0aXRsZV17Ym9yZGVyLWJvdHRvbToxcHggZG90dGVkfWIsc3Ryb25ne2ZvbnQtd2VpZ2h0OmJvbGR9ZGZue2ZvbnQtc3R5bGU6aXRhbGljfWgxe2ZvbnQtc2l6ZToyZW07bWFyZ2luOjAuNjdlbSAwfW1hcmt7YmFja2dyb3VuZDojZmYwO2NvbG9yOiMwMDB9c21hbGx7Zm9udC1zaXplOjgwJX1zdWIsc3Vwe2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MDtwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX1zdXB7dG9wOi0wLjVlbX1zdWJ7Ym90dG9tOi0wLjI1ZW19aW1ne2JvcmRlcjowfXN2Zzpub3QoOnJvb3Qpe292ZXJmbG93OmhpZGRlbn1maWd1cmV7bWFyZ2luOjFlbSA0MHB4fWhye2JveC1zaXppbmc6Y29udGVudC1ib3g7aGVpZ2h0OjB9cHJle292ZXJmbG93OmF1dG99Y29kZSxrYmQscHJlLHNhbXB7Zm9udC1mYW1pbHk6bW9ub3NwYWNlLCBtb25vc3BhY2U7Zm9udC1zaXplOjFlbX1idXR0b24saW5wdXQsb3B0Z3JvdXAsc2VsZWN0LHRleHRhcmVhe2NvbG9yOmluaGVyaXQ7Zm9udDppbmhlcml0O21hcmdpbjowfWJ1dHRvbntvdmVyZmxvdzp2aXNpYmxlfWJ1dHRvbixzZWxlY3R7dGV4dC10cmFuc2Zvcm06bm9uZX1idXR0b24saHRtbCBpbnB1dFt0eXBlPVxcXCJidXR0b25cXFwiXSxpbnB1dFt0eXBlPVxcXCJyZXNldFxcXCJdLGlucHV0W3R5cGU9XFxcInN1Ym1pdFxcXCJdey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Y3Vyc29yOnBvaW50ZXJ9YnV0dG9uW2Rpc2FibGVkXSxodG1sIGlucHV0W2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsaW5wdXQ6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjA7cGFkZGluZzowfWlucHV0e2xpbmUtaGVpZ2h0Om5vcm1hbH1pbnB1dFt0eXBlPVxcXCJjaGVja2JveFxcXCJdLGlucHV0W3R5cGU9XFxcInJhZGlvXFxcIl17Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MH1pbnB1dFt0eXBlPVxcXCJudW1iZXJcXFwiXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixpbnB1dFt0eXBlPVxcXCJudW1iZXJcXFwiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b31pbnB1dFt0eXBlPVxcXCJzZWFyY2hcXFwiXXstd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZpZWxkO2JveC1zaXppbmc6Y29udGVudC1ib3h9aW5wdXRbdHlwZT1cXFwic2VhcmNoXFxcIl06Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24saW5wdXRbdHlwZT1cXFwic2VhcmNoXFxcIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9ZmllbGRzZXR7Ym9yZGVyOjFweCBzb2xpZCAjYzBjMGMwO21hcmdpbjowIDJweDtwYWRkaW5nOjAuMzVlbSAwLjYyNWVtIDAuNzVlbX1sZWdlbmR7Ym9yZGVyOjA7cGFkZGluZzowfXRleHRhcmVhe292ZXJmbG93OmF1dG99b3B0Z3JvdXB7Zm9udC13ZWlnaHQ6Ym9sZH10YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH10ZCx0aHtwYWRkaW5nOjB9QGtleWZyYW1lcyBtb3JwaHswJXtib3JkZXItcmFkaXVzOjQwJSA2MCUgNjAlIDQwJSAvIDcwJSAzMCUgNzAlIDMwJX0xMDAle2JvcmRlci1yYWRpdXM6NDAlIDYwJX19QGtleWZyYW1lcyBzcGlue3Rve3RyYW5zZm9ybTpyb3RhdGUoMXR1cm4pfX0qLCo6YmVmb3JlLCo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94fWh0bWwsYm9keXtiYWNrZ3JvdW5kOiMwMDI7Y29sb3I6d2hpdGU7Zm9udC1mYW1pbHk6J00gUExVUyBSb3VuZGVkIDFjJywgc2Fucy1zZXJpZjtvdmVyZmxvdy14OmhpZGRlbn0uYWxlcnR7cG9zaXRpb246Zml4ZWQ7bGVmdDo1MCU7dG9wOjMwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIDApO2NvbG9yOiMwMDI7Zm9udC1zaXplOjEuNXJlbTtwb2ludGVyLWV2ZW50czpub25lO3otaW5kZXg6MTAwO3BhZGRpbmc6MWVtO2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwwLjgpO2JvcmRlci1yYWRpdXM6MC41ZW07d2hpdGUtc3BhY2U6bm93cmFwfS5mb290ZXJ7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpO21pbi1oZWlnaHQ6MnJlbTt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LDAuNik7Zm9udC1zaXplOjAuODc1cmVtO2xpbmUtaGVpZ2h0OjEuMnJlbTtwYWRkaW5nOjAuNHJlbSAwfS5mb290ZXJfX2hlYXJ0e3BhZGRpbmc6MCAwLjEyNWVtO2NvbG9yOiMzMDIzQUV9LmZvb3RlciBhe3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsMC44KX0uZm9vdGVyIGE6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0uaGVhZGVye21hcmdpbjowIDAgMXJlbTt0ZXh0LWFsaWduOmNlbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjEwfS5oZWFkZXJfX2xpbmtze21hcmdpbjowLjVlbSBhdXRvIDA7cGFkZGluZy10b3A6MC4yNWVtO21heC13aWR0aDoyNi43NXJlbTtib3JkZXItdG9wOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuNSl9LmhlYWRlcl9fbGlua3MgYXtmb250LXNpemU6MC43NXJlbTtjb2xvcjojZjA5O3RleHQtZGVjb3JhdGlvbjpub25lO3BhZGRpbmc6MCAwLjVyZW07b3BhY2l0eTowLjg7dHJhbnNpdGlvbjpvcGFjaXR5IDAuM3MgZWFzZS1vdXQ7d2hpdGUtc3BhY2U6bm93cmFwfS5oZWFkZXJfX2xpbmtzIGEgc3Zne3dpZHRoOjEuMzVlbTtoZWlnaHQ6MS4zNWVtO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZpbGw6I2ZmZjt2ZXJ0aWNhbC1hbGlnbjotMC4zZW07bWFyZ2luLXRvcDotMC4xMjVyZW19LmhlYWRlcl9fbGlua3MgYTpob3ZlcntvcGFjaXR5OjF9QG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMzNyZW0pey5oZWFkZXJfX2xpbmtze21hcmdpbi10b3A6MWVtO3BhZGRpbmctdG9wOjAuNWVtfS5oZWFkZXJfX2xpbmtzIGF7Zm9udC1zaXplOjAuODc1cmVtfX1oMXt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Zm9udC1zaXplOjEuNXJlbTtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LDAuOCk7bGluZS1oZWlnaHQ6MTttYXJnaW46MCAwIDAuMTI1ZW07bGV0dGVyLXNwYWNpbmc6MC4wMWVtO3RleHQtYWxpZ246Y2VudGVyfUBtZWRpYSBzY3JlZW4gYW5kIChtaW4taGVpZ2h0OiAzNi4yNXJlbSkgYW5kIChtaW4td2lkdGg6IDI1cmVtKXtoMXtmb250LXNpemU6MnJlbX19LmNvbnRhaW5lcnttaW4taGVpZ2h0OmNhbGMoMTAwdmggLSAycmVtKTtwYWRkaW5nLXRvcDoycmVtO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtZXZlbmx5O292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0uY29udGFpbmVyOjpiZWZvcmUsLmNvbnRhaW5lcjo6YWZ0ZXJ7Y29udGVudDpcXFwiXFxcIjt3aWR0aDo3MHZtYXg7aGVpZ2h0Ojcwdm1heDtwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsMC4wNyk7bGVmdDotMjB2bWluO3RvcDotMjB2bWluO2FuaW1hdGlvbjptb3JwaCAxNXMgbGluZWFyIGluZmluaXRlIGFsdGVybmF0ZSwgc3BpbiAyMHMgbGluZWFyIGluZmluaXRlO3otaW5kZXg6MTt3aWxsLWNoYW5nZTpib3JkZXItcmFkaXVzLCB0cmFuc2Zvcm07dHJhbnNmb3JtLW9yaWdpbjo1NSUgNTUlO3BvaW50ZXItZXZlbnRzOm5vbmV9LmNvbnRhaW5lcjo6YWZ0ZXJ7d2lkdGg6NzB2bWluO2hlaWdodDo3MHZtaW47bGVmdDphdXRvO3JpZ2h0Oi0xMHZtaW47dG9wOmF1dG87Ym90dG9tOjA7YW5pbWF0aW9uOm1vcnBoIDEwcyBsaW5lYXIgaW5maW5pdGUgYWx0ZXJuYXRlLCBzcGluIDI2cyBsaW5lYXIgaW5maW5pdGUgcmV2ZXJzZTt0cmFuc2Zvcm0tb3JpZ2luOjIwJSAyMCV9LmdlbmVyYXRvcnt3aWR0aDo2MHZtaW47aGVpZ2h0OjYwdm1pbjtib3JkZXI6MnB4IGRhc2hlZCByZ2JhKDI1NSwyNTUsMjU1LDAuNCk7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDozO21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OmF1dG99QG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMzEuODc1cmVtKXsuZ2VuZXJhdG9ye3dpZHRoOjUwdm1pbjtoZWlnaHQ6NTB2bWlufX0uZ2VuZXJhdG9yX19zaGFwZXt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQ6I2YwOTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCg0NWRlZywgIzMwMjNBRSAwJSwgI2YwOSAxMDAlKTtib3JkZXItcmFkaXVzOjMwJSA3MCUgNzAlIDMwJSAvIDMwJSAzMCUgNzAlIDcwJTtib3gtc2hhZG93Oi0xMHZtaW4gMTB2bWluIDAgcmdiYSgyNTUsMjU1LDI1NSwwLjA3KX0uZ2VuZXJhdG9yX19zaGFwZS0tOHZ7Ym9yZGVyLXJhZGl1czoxMCU7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoLTIyNWRlZywgI2ZmZiAwJSwgcmdiYSgyNTUsMjU1LDI1NSwwKSA0MCUsIHJnYmEoMCwyNTUsMjU1LDApIDYwJSwgY3lhbiAxMDAlKSxsaW5lYXItZ3JhZGllbnQoNDVkZWcsICMzMDIzQUUgMCUsICNmMDkgMTAwJSl9LmdlbmVyYXRvcl9faGFuZGxle2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7Y3Vyc29yOnBvaW50ZXI7d2lkdGg6Mi41cmVtO2hlaWdodDoyLjVyZW19LmdlbmVyYXRvcl9faGFuZGxlOmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFyZW07aGVpZ2h0OjFyZW07bGVmdDouNzVyZW07dG9wOi43NXJlbTtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjJweCBzb2xpZCAjMDAyO3RyYW5zaXRpb246Ym94LXNoYWRvdyAwLjJzIGVhc2Utb3V0O3dpbGwtY2hhbmdlOmJveC1zaGFkb3d9LmdlbmVyYXRvcl9faGFuZGxlLS1zZWNvbmQ6YmVmb3Jle2JhY2tncm91bmQ6IzMwMjNBRTtib3JkZXI6MnB4IHNvbGlkICNmZmZ9LmdlbmVyYXRvcl9faGFuZGxlLS10aGlyZDpiZWZvcmV7YmFja2dyb3VuZDojZjA5O2JvcmRlcjoycHggc29saWQgI2ZmZn0uZ2VuZXJhdG9yX19oYW5kbGUtLWZvdXJ0aDpiZWZvcmV7YmFja2dyb3VuZDojMGZmfS5nZW5lcmF0b3JfX2hhbmRsZS0tOHYuYWN0aXZlOmJlZm9yZSwuZ2VuZXJhdG9yX19oYW5kbGUtLTh2OmhvdmVyOmJlZm9yZXtib3gtc2hhZG93OjAgMCAwIDRweCAjRkZGO2JvcmRlcjoycHggc29saWQgIzAwMn0uZ2VuZXJhdG9yX19oYW5kbGU6bm90KC5nZW5lcmF0b3JfX2hhbmRsZS0tOHYpLmFjdGl2ZTpiZWZvcmUsLmdlbmVyYXRvcl9faGFuZGxlOm5vdCguZ2VuZXJhdG9yX19oYW5kbGUtLTh2KTpob3ZlcjpiZWZvcmV7YmFja2dyb3VuZDojMGZmO2JveC1zaGFkb3c6MCAwIDAgNHB4ICNGRkY7Ym9yZGVyOjJweCBzb2xpZCAjMDAyfS5nZW5lcmF0b3IgI3RvcHt0b3A6LTEuMjVyZW07bGVmdDozMCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSl9LmdlbmVyYXRvciAjdG9wLmdlbmVyYXRvcl9faGFuZGxlLS04dntsZWZ0OjEwJX0uZ2VuZXJhdG9yICNib3R0b217Ym90dG9tOi0xLjI1cmVtO2xlZnQ6MzAlO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpfS5nZW5lcmF0b3IgI2JvdHRvbS5nZW5lcmF0b3JfX2hhbmRsZS0tOHZ7bGVmdDoxMCV9LmdlbmVyYXRvciAjbGVmdHtsZWZ0Oi0xLjI1cmVtO3RvcDozMCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9LmdlbmVyYXRvciAjbGVmdC5nZW5lcmF0b3JfX2hhbmRsZS0tOHZ7dG9wOjEwJX0uZ2VuZXJhdG9yICNyaWdodHtyaWdodDotMS4yNXJlbTt0b3A6MzAlO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpfS5nZW5lcmF0b3IgI3JpZ2h0LmdlbmVyYXRvcl9faGFuZGxlLS04dnt0b3A6MTAlfS5nZW5lcmF0b3IgI3RvcFJpZ2h0e3RvcDotMS4yNXJlbTtsZWZ0OjkwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKX0uZ2VuZXJhdG9yICNib3R0b21SaWdodHtib3R0b206LTEuMjVyZW07bGVmdDo5MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSl9LmdlbmVyYXRvciAjbGVmdEJvdHRvbXtsZWZ0Oi0xLjI1cmVtO3RvcDo5MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9LmdlbmVyYXRvciAjcmlnaHRCb3R0b217cmlnaHQ6LTEuMjVyZW07dG9wOjkwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKX0ub3V0cHV0e3dpZHRoOjkwJTt0ZXh0LWFsaWduOmxlZnQ7bWFyZ2luLXRvcDoxLjVlbTtmb250LXNpemU6MS4xMjVyZW07bGluZS1oZWlnaHQ6MS41O21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OmF1dG99Lm91dHB1dF9fbGFiZWx7ZmxleDowIDAgYXV0bzttYXJnaW4tYm90dG9tOjAuNWVtO21hcmdpbi1yaWdodDoxZW07Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwwLjkpfS5vdXRwdXRfX2NvZGV7ZGlzcGxheTpibG9jaztmb250LWZhbWlseTonVWJ1bnR1IE1vbm8nLCBtb25vc3BhY2U7ZmxleC1ncm93OjE7Y29sb3I6IzAwMjtiYWNrZ3JvdW5kOiNjY2M7cGFkZGluZzowLjVlbSAwLjYyNWVtO2JvcmRlci1yYWRpdXM6MnB4O21hcmdpbi1ib3R0b206MC41ZW19Lm91dHB1dF9fYnV0dG9ue2Rpc3BsYXk6YmxvY2s7Ym9yZGVyLXJhZGl1czoycHg7YmFja2dyb3VuZDojZjA5O2JvcmRlcjpub25lO2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsMC45KTtwYWRkaW5nOjAuNWVtIDFlbTtmb250LXdlaWdodDpib2xkO3dpZHRoOjEwMCU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDAuM3MgZWFzZS1vdXQ7d2lsbC1jaGFuZ2U6YmFja2dyb3VuZDtjdXJzb3I6cG9pbnRlcn0ub3V0cHV0X19idXR0b246aG92ZXJ7YmFja2dyb3VuZDojMzAyM0FFfUBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDMwLjg3NXJlbSl7Lm91dHB1dHtmb250LXNpemU6MS4yNXJlbX0ub3V0cHV0X19jb2Rle2JvcmRlci1yYWRpdXM6MnB4IDAgMCAycHg7ZmxleC1ncm93OjE7bWFyZ2luLWJvdHRvbTowfS5vdXRwdXRfX2J1dHRvbntmbGV4LXNocmluazoxO2JvcmRlci1yYWRpdXM6MCAycHggMnB4IDA7d2lkdGg6YXV0bzt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6MC4xZW19fUBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQzcmVtKXsub3V0cHV0e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaDthbGlnbi1pdGVtczpiYXNlbGluZTttYXgtd2lkdGg6MzlyZW19fS5hZHZhbmNlZHt3aWR0aDo5MCU7bWF4LXdpZHRoOjM5cmVtO3RleHQtYWxpZ246bGVmdDttYXJnaW46MC41ZW0gYXV0bztwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LDAuOSl9QG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNTYwcHgpey5hZHZhbmNlZHtmb250LXNpemU6MS4yNXJlbX19LmFkdmFuY2VkX19zd2l0Y2h7cGFkZGluZzowLjVlbSAwO2ZsZXgtc2hyaW5rOjA7bWFyZ2luLWJvdHRvbTowLjVlbX0uYWR2YW5jZWRfX3NldHRpbmdze2Rpc3BsYXk6bm9uZX0uYWR2YW5jZWRfX3NldHRpbmdzLnZpc2libGV7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAzMS4yNXJlbSl7LmFkdmFuY2VkX19zZXR0aW5ncy52aXNpYmxle2ZsZXgtZGlyZWN0aW9uOnJvd319LmFkdmFuY2VkX19jaGVja3t2aXNpYmlsaXR5OmhpZGRlbjt3aWR0aDowO2hlaWdodDowO2Rpc3BsYXk6YmxvY2s7Ym9yZGVyOm5vbmV9LmFkdmFuY2VkIC5pbnB1dC1ncm91cHthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWxlZnQ6MWVtO21hcmdpbi1ib3R0b206MC41ZW07anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47ZGlzcGxheTpmbGV4fS5hZHZhbmNlZCAuaW5wdXQtZ3JvdXAgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tcmlnaHQ6MC41ZW19LmFkdmFuY2VkIC5pbnB1dC1ncm91cCBpbnB1dFt0eXBlPVxcXCJudW1iZXJcXFwiXXt3aWR0aDo0LjVyZW19LmFkdmFuY2VkX19jaGVjazpjaGVja2VkKy5hZHZhbmNlZF9fdHJpZ2dlciBzcGFuOmFmdGVye2JhY2tncm91bmQ6I2YwOTtsZWZ0OjEuMTVlbTtib3JkZXItcmFkaXVzOjM3JSA2MyUgNTUlIDQ1JSAvIDI1JSA1MCUgNTAlIDc1JX0uYWR2YW5jZWRfX3RyaWdnZXJ7ZGlzcGxheTpibG9jaztsaW5lLWhlaWdodDoxO2N1cnNvcjpwb2ludGVyfS5hZHZhbmNlZF9fdHJpZ2dlciBzcGFue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjJlbTtoZWlnaHQ6MWVtO2JvcmRlci1yYWRpdXM6MC41ZW07YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LDAuOCk7dmVydGljYWwtYWxpZ246Ym90dG9tO3Bvc2l0aW9uOnJlbGF0aXZlfUBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQzcmVtKXsuYWR2YW5jZWRfX3RyaWdnZXIgc3BhbnttYXJnaW4tbGVmdDoycmVtfX0uYWR2YW5jZWRfX3RyaWdnZXIgc3BhbjphZnRlcntjb250ZW50OlxcXCJcXFwiO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjAuN2VtO2hlaWdodDowLjdlbTtib3JkZXItcmFkaXVzOjUwJSA1NiUgMjklIDcwJSAvIDUwJSA3MyUgMzglIDUwJTtiYWNrZ3JvdW5kOiMwMDI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowLjE1ZW07dG9wOjAuMTVlbTt0cmFuc2l0aW9uOmxlZnQgMC4zcyBlYXNlLW91dCwgYmFja2dyb3VuZCAwLjNzIGVhc2Utb3V0LCBib3JkZXItcmFkaXVzIDAuNHMgZWFzZS1pbi1vdXR9LmlucHV0LWdyb3VwIGlucHV0e2JvcmRlci1yYWRpdXM6MnB4O2JvcmRlcjpub25lO2JhY2tncm91bmQ6I2ZmZjtmb250LWZhbWlseTonVWJ1bnR1IE1vbm8nLCBtb25vc3BhY2U7Y29sb3I6IzAwMjtwYWRkaW5nOjAuNWVtIDAuNjI1ZW19QG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMzAuODVyZW0pey5pbnB1dC1ncm91cHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6c3RyZXRjaDtmbGV4LWdyb3c6MTttYXJnaW4tYm90dG9tOjB9fS5jb21wYW55LWxpbmt7ei1pbmRleDoyMDA7d2lkdGg6MTRlbTtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6MC41ZW0gMWVtIDAuNzVlbTttYXJnaW46MmVtIGF1dG87bWFyZ2luLWJvdHRvbToxcmVtO2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwwLjE1KTtib3JkZXI6MXB4IHNvbGlkICNmMDk7Y29sb3I6I2ZmZjtmb250LXNpemU6MXJlbTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZX0uY29tcGFueS1saW5rOmhvdmVye2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwwLjMpfS5jb21wYW55LWxpbmtfX2xhYmVse21hcmdpbi1ib3R0b206MC41ZW19QG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjJyZW0pIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSl7LmNvbXBhbnktbGlua3ttYXJnaW46MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NyU7cmlnaHQ6MXJlbX19QG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogODJyZW0pIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSl7LmNvbXBhbnktbGlua3tsZWZ0Ojc1JX19XFxuXCIsIFwiXCJdKTtcblxuLy8gZXhwb3J0c1xuIiwiLypcblx0TUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcblx0QXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbi8vIGNzcyBiYXNlIGNvZGUsIGluamVjdGVkIGJ5IHRoZSBjc3MtbG9hZGVyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHVzZVNvdXJjZU1hcCkge1xuXHR2YXIgbGlzdCA9IFtdO1xuXG5cdC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcblx0bGlzdC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuXHRcdFx0dmFyIGNvbnRlbnQgPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0sIHVzZVNvdXJjZU1hcCk7XG5cdFx0XHRpZihpdGVtWzJdKSB7XG5cdFx0XHRcdHJldHVybiBcIkBtZWRpYSBcIiArIGl0ZW1bMl0gKyBcIntcIiArIGNvbnRlbnQgKyBcIn1cIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBjb250ZW50O1xuXHRcdFx0fVxuXHRcdH0pLmpvaW4oXCJcIik7XG5cdH07XG5cblx0Ly8gaW1wb3J0IGEgbGlzdCBvZiBtb2R1bGVzIGludG8gdGhlIGxpc3Rcblx0bGlzdC5pID0gZnVuY3Rpb24obW9kdWxlcywgbWVkaWFRdWVyeSkge1xuXHRcdGlmKHR5cGVvZiBtb2R1bGVzID09PSBcInN0cmluZ1wiKVxuXHRcdFx0bW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgXCJcIl1dO1xuXHRcdHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBpZCA9IHRoaXNbaV1bMF07XG5cdFx0XHRpZih0eXBlb2YgaWQgPT09IFwibnVtYmVyXCIpXG5cdFx0XHRcdGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcblx0XHR9XG5cdFx0Zm9yKGkgPSAwOyBpIDwgbW9kdWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGl0ZW0gPSBtb2R1bGVzW2ldO1xuXHRcdFx0Ly8gc2tpcCBhbHJlYWR5IGltcG9ydGVkIG1vZHVsZVxuXHRcdFx0Ly8gdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBub3QgMTAwJSBwZXJmZWN0IGZvciB3ZWlyZCBtZWRpYSBxdWVyeSBjb21iaW5hdGlvbnNcblx0XHRcdC8vICB3aGVuIGEgbW9kdWxlIGlzIGltcG9ydGVkIG11bHRpcGxlIHRpbWVzIHdpdGggZGlmZmVyZW50IG1lZGlhIHF1ZXJpZXMuXG5cdFx0XHQvLyAgSSBob3BlIHRoaXMgd2lsbCBuZXZlciBvY2N1ciAoSGV5IHRoaXMgd2F5IHdlIGhhdmUgc21hbGxlciBidW5kbGVzKVxuXHRcdFx0aWYodHlwZW9mIGl0ZW1bMF0gIT09IFwibnVtYmVyXCIgfHwgIWFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcblx0XHRcdFx0aWYobWVkaWFRdWVyeSAmJiAhaXRlbVsyXSkge1xuXHRcdFx0XHRcdGl0ZW1bMl0gPSBtZWRpYVF1ZXJ5O1xuXHRcdFx0XHR9IGVsc2UgaWYobWVkaWFRdWVyeSkge1xuXHRcdFx0XHRcdGl0ZW1bMl0gPSBcIihcIiArIGl0ZW1bMl0gKyBcIikgYW5kIChcIiArIG1lZGlhUXVlcnkgKyBcIilcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRsaXN0LnB1c2goaXRlbSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRyZXR1cm4gbGlzdDtcbn07XG5cbmZ1bmN0aW9uIGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSwgdXNlU291cmNlTWFwKSB7XG5cdHZhciBjb250ZW50ID0gaXRlbVsxXSB8fCAnJztcblx0dmFyIGNzc01hcHBpbmcgPSBpdGVtWzNdO1xuXHRpZiAoIWNzc01hcHBpbmcpIHtcblx0XHRyZXR1cm4gY29udGVudDtcblx0fVxuXG5cdGlmICh1c2VTb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgPT09ICdmdW5jdGlvbicpIHtcblx0XHR2YXIgc291cmNlTWFwcGluZyA9IHRvQ29tbWVudChjc3NNYXBwaW5nKTtcblx0XHR2YXIgc291cmNlVVJMcyA9IGNzc01hcHBpbmcuc291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuXHRcdFx0cmV0dXJuICcvKiMgc291cmNlVVJMPScgKyBjc3NNYXBwaW5nLnNvdXJjZVJvb3QgKyBzb3VyY2UgKyAnICovJ1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIFtjb250ZW50XS5jb25jYXQoc291cmNlVVJMcykuY29uY2F0KFtzb3VyY2VNYXBwaW5nXSkuam9pbignXFxuJyk7XG5cdH1cblxuXHRyZXR1cm4gW2NvbnRlbnRdLmpvaW4oJ1xcbicpO1xufVxuXG4vLyBBZGFwdGVkIGZyb20gY29udmVydC1zb3VyY2UtbWFwIChNSVQpXG5mdW5jdGlvbiB0b0NvbW1lbnQoc291cmNlTWFwKSB7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuXHR2YXIgYmFzZTY0ID0gYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKTtcblx0dmFyIGRhdGEgPSAnc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsJyArIGJhc2U2NDtcblxuXHRyZXR1cm4gJy8qIyAnICsgZGF0YSArICcgKi8nO1xufVxuIiwiLypcblx0TUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcblx0QXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cblxudmFyIHN0eWxlc0luRG9tID0ge307XG5cbnZhclx0bWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuXHR2YXIgbWVtbztcblxuXHRyZXR1cm4gZnVuY3Rpb24gKCkge1xuXHRcdGlmICh0eXBlb2YgbWVtbyA9PT0gXCJ1bmRlZmluZWRcIikgbWVtbyA9IGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0cmV0dXJuIG1lbW87XG5cdH07XG59O1xuXG52YXIgaXNPbGRJRSA9IG1lbW9pemUoZnVuY3Rpb24gKCkge1xuXHQvLyBUZXN0IGZvciBJRSA8PSA5IGFzIHByb3Bvc2VkIGJ5IEJyb3dzZXJoYWNrc1xuXHQvLyBAc2VlIGh0dHA6Ly9icm93c2VyaGFja3MuY29tLyNoYWNrLWU3MWQ4NjkyZjY1MzM0MTczZmVlNzE1YzIyMmNiODA1XG5cdC8vIFRlc3RzIGZvciBleGlzdGVuY2Ugb2Ygc3RhbmRhcmQgZ2xvYmFscyBpcyB0byBhbGxvdyBzdHlsZS1sb2FkZXJcblx0Ly8gdG8gb3BlcmF0ZSBjb3JyZWN0bHkgaW50byBub24tc3RhbmRhcmQgZW52aXJvbm1lbnRzXG5cdC8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2stY29udHJpYi9zdHlsZS1sb2FkZXIvaXNzdWVzLzE3N1xuXHRyZXR1cm4gd2luZG93ICYmIGRvY3VtZW50ICYmIGRvY3VtZW50LmFsbCAmJiAhd2luZG93LmF0b2I7XG59KTtcblxudmFyIGdldFRhcmdldCA9IGZ1bmN0aW9uICh0YXJnZXQsIHBhcmVudCkge1xuICBpZiAocGFyZW50KXtcbiAgICByZXR1cm4gcGFyZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTtcbiAgfVxuICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXQpO1xufTtcblxudmFyIGdldEVsZW1lbnQgPSAoZnVuY3Rpb24gKGZuKSB7XG5cdHZhciBtZW1vID0ge307XG5cblx0cmV0dXJuIGZ1bmN0aW9uKHRhcmdldCwgcGFyZW50KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgcGFzc2luZyBmdW5jdGlvbiBpbiBvcHRpb25zLCB0aGVuIHVzZSBpdCBmb3IgcmVzb2x2ZSBcImhlYWRcIiBlbGVtZW50LlxuICAgICAgICAgICAgICAgIC8vIFVzZWZ1bCBmb3IgU2hhZG93IFJvb3Qgc3R5bGUgaS5lXG4gICAgICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgICAgIC8vICAgaW5zZXJ0SW50bzogZnVuY3Rpb24gKCkgeyByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNmb29cIikuc2hhZG93Um9vdCB9XG4gICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVtb1t0YXJnZXRdID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR2YXIgc3R5bGVUYXJnZXQgPSBnZXRUYXJnZXQuY2FsbCh0aGlzLCB0YXJnZXQsIHBhcmVudCk7XG5cdFx0XHQvLyBTcGVjaWFsIGNhc2UgdG8gcmV0dXJuIGhlYWQgb2YgaWZyYW1lIGluc3RlYWQgb2YgaWZyYW1lIGl0c2VsZlxuXHRcdFx0aWYgKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCAmJiBzdHlsZVRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG5cdFx0XHRcdFx0Ly8gZHVlIHRvIGNyb3NzLW9yaWdpbiByZXN0cmljdGlvbnNcblx0XHRcdFx0XHRzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuXHRcdFx0XHR9IGNhdGNoKGUpIHtcblx0XHRcdFx0XHRzdHlsZVRhcmdldCA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG1lbW9bdGFyZ2V0XSA9IHN0eWxlVGFyZ2V0O1xuXHRcdH1cblx0XHRyZXR1cm4gbWVtb1t0YXJnZXRdXG5cdH07XG59KSgpO1xuXG52YXIgc2luZ2xldG9uID0gbnVsbDtcbnZhclx0c2luZ2xldG9uQ291bnRlciA9IDA7XG52YXJcdHN0eWxlc0luc2VydGVkQXRUb3AgPSBbXTtcblxudmFyXHRmaXhVcmxzID0gcmVxdWlyZShcIi4vdXJsc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihsaXN0LCBvcHRpb25zKSB7XG5cdGlmICh0eXBlb2YgREVCVUcgIT09IFwidW5kZWZpbmVkXCIgJiYgREVCVUcpIHtcblx0XHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgc3R5bGUtbG9hZGVyIGNhbm5vdCBiZSB1c2VkIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnRcIik7XG5cdH1cblxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRvcHRpb25zLmF0dHJzID0gdHlwZW9mIG9wdGlvbnMuYXR0cnMgPT09IFwib2JqZWN0XCIgPyBvcHRpb25zLmF0dHJzIDoge307XG5cblx0Ly8gRm9yY2Ugc2luZ2xlLXRhZyBzb2x1dGlvbiBvbiBJRTYtOSwgd2hpY2ggaGFzIGEgaGFyZCBsaW1pdCBvbiB0aGUgIyBvZiA8c3R5bGU+XG5cdC8vIHRhZ3MgaXQgd2lsbCBhbGxvdyBvbiBhIHBhZ2Vcblx0aWYgKCFvcHRpb25zLnNpbmdsZXRvbiAmJiB0eXBlb2Ygb3B0aW9ucy5zaW5nbGV0b24gIT09IFwiYm9vbGVhblwiKSBvcHRpb25zLnNpbmdsZXRvbiA9IGlzT2xkSUUoKTtcblxuXHQvLyBCeSBkZWZhdWx0LCBhZGQgPHN0eWxlPiB0YWdzIHRvIHRoZSA8aGVhZD4gZWxlbWVudFxuICAgICAgICBpZiAoIW9wdGlvbnMuaW5zZXJ0SW50bykgb3B0aW9ucy5pbnNlcnRJbnRvID0gXCJoZWFkXCI7XG5cblx0Ly8gQnkgZGVmYXVsdCwgYWRkIDxzdHlsZT4gdGFncyB0byB0aGUgYm90dG9tIG9mIHRoZSB0YXJnZXRcblx0aWYgKCFvcHRpb25zLmluc2VydEF0KSBvcHRpb25zLmluc2VydEF0ID0gXCJib3R0b21cIjtcblxuXHR2YXIgc3R5bGVzID0gbGlzdFRvU3R5bGVzKGxpc3QsIG9wdGlvbnMpO1xuXG5cdGFkZFN0eWxlc1RvRG9tKHN0eWxlcywgb3B0aW9ucyk7XG5cblx0cmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZSAobmV3TGlzdCkge1xuXHRcdHZhciBtYXlSZW1vdmUgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgaXRlbSA9IHN0eWxlc1tpXTtcblx0XHRcdHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdO1xuXG5cdFx0XHRkb21TdHlsZS5yZWZzLS07XG5cdFx0XHRtYXlSZW1vdmUucHVzaChkb21TdHlsZSk7XG5cdFx0fVxuXG5cdFx0aWYobmV3TGlzdCkge1xuXHRcdFx0dmFyIG5ld1N0eWxlcyA9IGxpc3RUb1N0eWxlcyhuZXdMaXN0LCBvcHRpb25zKTtcblx0XHRcdGFkZFN0eWxlc1RvRG9tKG5ld1N0eWxlcywgb3B0aW9ucyk7XG5cdFx0fVxuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtYXlSZW1vdmUubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBkb21TdHlsZSA9IG1heVJlbW92ZVtpXTtcblxuXHRcdFx0aWYoZG9tU3R5bGUucmVmcyA9PT0gMCkge1xuXHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSBkb21TdHlsZS5wYXJ0c1tqXSgpO1xuXG5cdFx0XHRcdGRlbGV0ZSBzdHlsZXNJbkRvbVtkb21TdHlsZS5pZF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufTtcblxuZnVuY3Rpb24gYWRkU3R5bGVzVG9Eb20gKHN0eWxlcywgb3B0aW9ucykge1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBpdGVtID0gc3R5bGVzW2ldO1xuXHRcdHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdO1xuXG5cdFx0aWYoZG9tU3R5bGUpIHtcblx0XHRcdGRvbVN0eWxlLnJlZnMrKztcblxuXHRcdFx0Zm9yKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGRvbVN0eWxlLnBhcnRzW2pdKGl0ZW0ucGFydHNbal0pO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IoOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRkb21TdHlsZS5wYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0sIG9wdGlvbnMpKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIHBhcnRzID0gW107XG5cblx0XHRcdGZvcih2YXIgaiA9IDA7IGogPCBpdGVtLnBhcnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdHBhcnRzLnB1c2goYWRkU3R5bGUoaXRlbS5wYXJ0c1tqXSwgb3B0aW9ucykpO1xuXHRcdFx0fVxuXG5cdFx0XHRzdHlsZXNJbkRvbVtpdGVtLmlkXSA9IHtpZDogaXRlbS5pZCwgcmVmczogMSwgcGFydHM6IHBhcnRzfTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gbGlzdFRvU3R5bGVzIChsaXN0LCBvcHRpb25zKSB7XG5cdHZhciBzdHlsZXMgPSBbXTtcblx0dmFyIG5ld1N0eWxlcyA9IHt9O1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBpdGVtID0gbGlzdFtpXTtcblx0XHR2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcblx0XHR2YXIgY3NzID0gaXRlbVsxXTtcblx0XHR2YXIgbWVkaWEgPSBpdGVtWzJdO1xuXHRcdHZhciBzb3VyY2VNYXAgPSBpdGVtWzNdO1xuXHRcdHZhciBwYXJ0ID0ge2NzczogY3NzLCBtZWRpYTogbWVkaWEsIHNvdXJjZU1hcDogc291cmNlTWFwfTtcblxuXHRcdGlmKCFuZXdTdHlsZXNbaWRdKSBzdHlsZXMucHVzaChuZXdTdHlsZXNbaWRdID0ge2lkOiBpZCwgcGFydHM6IFtwYXJ0XX0pO1xuXHRcdGVsc2UgbmV3U3R5bGVzW2lkXS5wYXJ0cy5wdXNoKHBhcnQpO1xuXHR9XG5cblx0cmV0dXJuIHN0eWxlcztcbn1cblxuZnVuY3Rpb24gaW5zZXJ0U3R5bGVFbGVtZW50IChvcHRpb25zLCBzdHlsZSkge1xuXHR2YXIgdGFyZ2V0ID0gZ2V0RWxlbWVudChvcHRpb25zLmluc2VydEludG8pXG5cblx0aWYgKCF0YXJnZXQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGEgc3R5bGUgdGFyZ2V0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGZvciB0aGUgJ2luc2VydEludG8nIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcblx0fVxuXG5cdHZhciBsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcCA9IHN0eWxlc0luc2VydGVkQXRUb3Bbc3R5bGVzSW5zZXJ0ZWRBdFRvcC5sZW5ndGggLSAxXTtcblxuXHRpZiAob3B0aW9ucy5pbnNlcnRBdCA9PT0gXCJ0b3BcIikge1xuXHRcdGlmICghbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3ApIHtcblx0XHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoc3R5bGUsIHRhcmdldC5maXJzdENoaWxkKTtcblx0XHR9IGVsc2UgaWYgKGxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wLm5leHRTaWJsaW5nKSB7XG5cdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcC5uZXh0U2libGluZyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cdFx0fVxuXHRcdHN0eWxlc0luc2VydGVkQXRUb3AucHVzaChzdHlsZSk7XG5cdH0gZWxzZSBpZiAob3B0aW9ucy5pbnNlcnRBdCA9PT0gXCJib3R0b21cIikge1xuXHRcdHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwib2JqZWN0XCIgJiYgb3B0aW9ucy5pbnNlcnRBdC5iZWZvcmUpIHtcblx0XHR2YXIgbmV4dFNpYmxpbmcgPSBnZXRFbGVtZW50KG9wdGlvbnMuaW5zZXJ0QXQuYmVmb3JlLCB0YXJnZXQpO1xuXHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoc3R5bGUsIG5leHRTaWJsaW5nKTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJbU3R5bGUgTG9hZGVyXVxcblxcbiBJbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgJ2luc2VydEF0JyAoJ29wdGlvbnMuaW5zZXJ0QXQnKSBmb3VuZC5cXG4gTXVzdCBiZSAndG9wJywgJ2JvdHRvbScsIG9yIE9iamVjdC5cXG4gKGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrLWNvbnRyaWIvc3R5bGUtbG9hZGVyI2luc2VydGF0KVxcblwiKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW1vdmVTdHlsZUVsZW1lbnQgKHN0eWxlKSB7XG5cdGlmIChzdHlsZS5wYXJlbnROb2RlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cdHN0eWxlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGUpO1xuXG5cdHZhciBpZHggPSBzdHlsZXNJbnNlcnRlZEF0VG9wLmluZGV4T2Yoc3R5bGUpO1xuXHRpZihpZHggPj0gMCkge1xuXHRcdHN0eWxlc0luc2VydGVkQXRUb3Auc3BsaWNlKGlkeCwgMSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlU3R5bGVFbGVtZW50IChvcHRpb25zKSB7XG5cdHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcblxuXHRpZihvcHRpb25zLmF0dHJzLnR5cGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdG9wdGlvbnMuYXR0cnMudHlwZSA9IFwidGV4dC9jc3NcIjtcblx0fVxuXG5cdGlmKG9wdGlvbnMuYXR0cnMubm9uY2UgPT09IHVuZGVmaW5lZCkge1xuXHRcdHZhciBub25jZSA9IGdldE5vbmNlKCk7XG5cdFx0aWYgKG5vbmNlKSB7XG5cdFx0XHRvcHRpb25zLmF0dHJzLm5vbmNlID0gbm9uY2U7XG5cdFx0fVxuXHR9XG5cblx0YWRkQXR0cnMoc3R5bGUsIG9wdGlvbnMuYXR0cnMpO1xuXHRpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucywgc3R5bGUpO1xuXG5cdHJldHVybiBzdHlsZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTGlua0VsZW1lbnQgKG9wdGlvbnMpIHtcblx0dmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcblxuXHRpZihvcHRpb25zLmF0dHJzLnR5cGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdG9wdGlvbnMuYXR0cnMudHlwZSA9IFwidGV4dC9jc3NcIjtcblx0fVxuXHRvcHRpb25zLmF0dHJzLnJlbCA9IFwic3R5bGVzaGVldFwiO1xuXG5cdGFkZEF0dHJzKGxpbmssIG9wdGlvbnMuYXR0cnMpO1xuXHRpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucywgbGluayk7XG5cblx0cmV0dXJuIGxpbms7XG59XG5cbmZ1bmN0aW9uIGFkZEF0dHJzIChlbCwgYXR0cnMpIHtcblx0T2JqZWN0LmtleXMoYXR0cnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuXHRcdGVsLnNldEF0dHJpYnV0ZShrZXksIGF0dHJzW2tleV0pO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gZ2V0Tm9uY2UoKSB7XG5cdGlmICh0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRyZXR1cm4gX193ZWJwYWNrX25vbmNlX187XG59XG5cbmZ1bmN0aW9uIGFkZFN0eWxlIChvYmosIG9wdGlvbnMpIHtcblx0dmFyIHN0eWxlLCB1cGRhdGUsIHJlbW92ZSwgcmVzdWx0O1xuXG5cdC8vIElmIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHdhcyBkZWZpbmVkLCBydW4gaXQgb24gdGhlIGNzc1xuXHRpZiAob3B0aW9ucy50cmFuc2Zvcm0gJiYgb2JqLmNzcykge1xuXHQgICAgcmVzdWx0ID0gdHlwZW9mIG9wdGlvbnMudHJhbnNmb3JtID09PSAnZnVuY3Rpb24nXG5cdFx0ID8gb3B0aW9ucy50cmFuc2Zvcm0ob2JqLmNzcykgXG5cdFx0IDogb3B0aW9ucy50cmFuc2Zvcm0uZGVmYXVsdChvYmouY3NzKTtcblxuXHQgICAgaWYgKHJlc3VsdCkge1xuXHQgICAgXHQvLyBJZiB0cmFuc2Zvcm0gcmV0dXJucyBhIHZhbHVlLCB1c2UgdGhhdCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBjc3MuXG5cdCAgICBcdC8vIFRoaXMgYWxsb3dzIHJ1bm5pbmcgcnVudGltZSB0cmFuc2Zvcm1hdGlvbnMgb24gdGhlIGNzcy5cblx0ICAgIFx0b2JqLmNzcyA9IHJlc3VsdDtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdC8vIElmIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24gcmV0dXJucyBhIGZhbHN5IHZhbHVlLCBkb24ndCBhZGQgdGhpcyBjc3MuXG5cdCAgICBcdC8vIFRoaXMgYWxsb3dzIGNvbmRpdGlvbmFsIGxvYWRpbmcgb2YgY3NzXG5cdCAgICBcdHJldHVybiBmdW5jdGlvbigpIHtcblx0ICAgIFx0XHQvLyBub29wXG5cdCAgICBcdH07XG5cdCAgICB9XG5cdH1cblxuXHRpZiAob3B0aW9ucy5zaW5nbGV0b24pIHtcblx0XHR2YXIgc3R5bGVJbmRleCA9IHNpbmdsZXRvbkNvdW50ZXIrKztcblxuXHRcdHN0eWxlID0gc2luZ2xldG9uIHx8IChzaW5nbGV0b24gPSBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucykpO1xuXG5cdFx0dXBkYXRlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCBmYWxzZSk7XG5cdFx0cmVtb3ZlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCB0cnVlKTtcblxuXHR9IGVsc2UgaWYgKFxuXHRcdG9iai5zb3VyY2VNYXAgJiZcblx0XHR0eXBlb2YgVVJMID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgVVJMLmNyZWF0ZU9iamVjdFVSTCA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIFVSTC5yZXZva2VPYmplY3RVUkwgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBCbG9iID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiXG5cdCkge1xuXHRcdHN0eWxlID0gY3JlYXRlTGlua0VsZW1lbnQob3B0aW9ucyk7XG5cdFx0dXBkYXRlID0gdXBkYXRlTGluay5iaW5kKG51bGwsIHN0eWxlLCBvcHRpb25zKTtcblx0XHRyZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpO1xuXG5cdFx0XHRpZihzdHlsZS5ocmVmKSBVUkwucmV2b2tlT2JqZWN0VVJMKHN0eWxlLmhyZWYpO1xuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0c3R5bGUgPSBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucyk7XG5cdFx0dXBkYXRlID0gYXBwbHlUb1RhZy5iaW5kKG51bGwsIHN0eWxlKTtcblx0XHRyZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpO1xuXHRcdH07XG5cdH1cblxuXHR1cGRhdGUob2JqKTtcblxuXHRyZXR1cm4gZnVuY3Rpb24gdXBkYXRlU3R5bGUgKG5ld09iaikge1xuXHRcdGlmIChuZXdPYmopIHtcblx0XHRcdGlmIChcblx0XHRcdFx0bmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJlxuXHRcdFx0XHRuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJlxuXHRcdFx0XHRuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR1cGRhdGUob2JqID0gbmV3T2JqKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVtb3ZlKCk7XG5cdFx0fVxuXHR9O1xufVxuXG52YXIgcmVwbGFjZVRleHQgPSAoZnVuY3Rpb24gKCkge1xuXHR2YXIgdGV4dFN0b3JlID0gW107XG5cblx0cmV0dXJuIGZ1bmN0aW9uIChpbmRleCwgcmVwbGFjZW1lbnQpIHtcblx0XHR0ZXh0U3RvcmVbaW5kZXhdID0gcmVwbGFjZW1lbnQ7XG5cblx0XHRyZXR1cm4gdGV4dFN0b3JlLmZpbHRlcihCb29sZWFuKS5qb2luKCdcXG4nKTtcblx0fTtcbn0pKCk7XG5cbmZ1bmN0aW9uIGFwcGx5VG9TaW5nbGV0b25UYWcgKHN0eWxlLCBpbmRleCwgcmVtb3ZlLCBvYmopIHtcblx0dmFyIGNzcyA9IHJlbW92ZSA/IFwiXCIgOiBvYmouY3NzO1xuXG5cdGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG5cdFx0c3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gcmVwbGFjZVRleHQoaW5kZXgsIGNzcyk7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIGNzc05vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpO1xuXHRcdHZhciBjaGlsZE5vZGVzID0gc3R5bGUuY2hpbGROb2RlcztcblxuXHRcdGlmIChjaGlsZE5vZGVzW2luZGV4XSkgc3R5bGUucmVtb3ZlQ2hpbGQoY2hpbGROb2Rlc1tpbmRleF0pO1xuXG5cdFx0aWYgKGNoaWxkTm9kZXMubGVuZ3RoKSB7XG5cdFx0XHRzdHlsZS5pbnNlcnRCZWZvcmUoY3NzTm9kZSwgY2hpbGROb2Rlc1tpbmRleF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdHlsZS5hcHBlbmRDaGlsZChjc3NOb2RlKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gYXBwbHlUb1RhZyAoc3R5bGUsIG9iaikge1xuXHR2YXIgY3NzID0gb2JqLmNzcztcblx0dmFyIG1lZGlhID0gb2JqLm1lZGlhO1xuXG5cdGlmKG1lZGlhKSB7XG5cdFx0c3R5bGUuc2V0QXR0cmlidXRlKFwibWVkaWFcIiwgbWVkaWEpXG5cdH1cblxuXHRpZihzdHlsZS5zdHlsZVNoZWV0KSB7XG5cdFx0c3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuXHR9IGVsc2Uge1xuXHRcdHdoaWxlKHN0eWxlLmZpcnN0Q2hpbGQpIHtcblx0XHRcdHN0eWxlLnJlbW92ZUNoaWxkKHN0eWxlLmZpcnN0Q2hpbGQpO1xuXHRcdH1cblxuXHRcdHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUxpbmsgKGxpbmssIG9wdGlvbnMsIG9iaikge1xuXHR2YXIgY3NzID0gb2JqLmNzcztcblx0dmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXA7XG5cblx0Lypcblx0XHRJZiBjb252ZXJ0VG9BYnNvbHV0ZVVybHMgaXNuJ3QgZGVmaW5lZCwgYnV0IHNvdXJjZW1hcHMgYXJlIGVuYWJsZWRcblx0XHRhbmQgdGhlcmUgaXMgbm8gcHVibGljUGF0aCBkZWZpbmVkIHRoZW4gbGV0cyB0dXJuIGNvbnZlcnRUb0Fic29sdXRlVXJsc1xuXHRcdG9uIGJ5IGRlZmF1bHQuICBPdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgY29udmVydFRvQWJzb2x1dGVVcmxzIG9wdGlvblxuXHRcdGRpcmVjdGx5XG5cdCovXG5cdHZhciBhdXRvRml4VXJscyA9IG9wdGlvbnMuY29udmVydFRvQWJzb2x1dGVVcmxzID09PSB1bmRlZmluZWQgJiYgc291cmNlTWFwO1xuXG5cdGlmIChvcHRpb25zLmNvbnZlcnRUb0Fic29sdXRlVXJscyB8fCBhdXRvRml4VXJscykge1xuXHRcdGNzcyA9IGZpeFVybHMoY3NzKTtcblx0fVxuXG5cdGlmIChzb3VyY2VNYXApIHtcblx0XHQvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yNjYwMzg3NVxuXHRcdGNzcyArPSBcIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIgKyBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpICsgXCIgKi9cIjtcblx0fVxuXG5cdHZhciBibG9iID0gbmV3IEJsb2IoW2Nzc10sIHsgdHlwZTogXCJ0ZXh0L2Nzc1wiIH0pO1xuXG5cdHZhciBvbGRTcmMgPSBsaW5rLmhyZWY7XG5cblx0bGluay5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblxuXHRpZihvbGRTcmMpIFVSTC5yZXZva2VPYmplY3RVUkwob2xkU3JjKTtcbn1cbiIsIlxuLyoqXG4gKiBXaGVuIHNvdXJjZSBtYXBzIGFyZSBlbmFibGVkLCBgc3R5bGUtbG9hZGVyYCB1c2VzIGEgbGluayBlbGVtZW50IHdpdGggYSBkYXRhLXVyaSB0b1xuICogZW1iZWQgdGhlIGNzcyBvbiB0aGUgcGFnZS4gVGhpcyBicmVha3MgYWxsIHJlbGF0aXZlIHVybHMgYmVjYXVzZSBub3cgdGhleSBhcmUgcmVsYXRpdmUgdG8gYVxuICogYnVuZGxlIGluc3RlYWQgb2YgdGhlIGN1cnJlbnQgcGFnZS5cbiAqXG4gKiBPbmUgc29sdXRpb24gaXMgdG8gb25seSB1c2UgZnVsbCB1cmxzLCBidXQgdGhhdCBtYXkgYmUgaW1wb3NzaWJsZS5cbiAqXG4gKiBJbnN0ZWFkLCB0aGlzIGZ1bmN0aW9uIFwiZml4ZXNcIiB0aGUgcmVsYXRpdmUgdXJscyB0byBiZSBhYnNvbHV0ZSBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgcGFnZSBsb2NhdGlvbi5cbiAqXG4gKiBBIHJ1ZGltZW50YXJ5IHRlc3Qgc3VpdGUgaXMgbG9jYXRlZCBhdCBgdGVzdC9maXhVcmxzLmpzYCBhbmQgY2FuIGJlIHJ1biB2aWEgdGhlIGBucG0gdGVzdGAgY29tbWFuZC5cbiAqXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY3NzKSB7XG4gIC8vIGdldCBjdXJyZW50IGxvY2F0aW9uXG4gIHZhciBsb2NhdGlvbiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LmxvY2F0aW9uO1xuXG4gIGlmICghbG9jYXRpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJmaXhVcmxzIHJlcXVpcmVzIHdpbmRvdy5sb2NhdGlvblwiKTtcbiAgfVxuXG5cdC8vIGJsYW5rIG9yIG51bGw/XG5cdGlmICghY3NzIHx8IHR5cGVvZiBjc3MgIT09IFwic3RyaW5nXCIpIHtcblx0ICByZXR1cm4gY3NzO1xuICB9XG5cbiAgdmFyIGJhc2VVcmwgPSBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIGxvY2F0aW9uLmhvc3Q7XG4gIHZhciBjdXJyZW50RGlyID0gYmFzZVVybCArIGxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL1xcL1teXFwvXSokLywgXCIvXCIpO1xuXG5cdC8vIGNvbnZlcnQgZWFjaCB1cmwoLi4uKVxuXHQvKlxuXHRUaGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBqdXN0IGEgd2F5IHRvIHJlY3Vyc2l2ZWx5IG1hdGNoIGJyYWNrZXRzIHdpdGhpblxuXHRhIHN0cmluZy5cblxuXHQgL3VybFxccypcXCggID0gTWF0Y2ggb24gdGhlIHdvcmQgXCJ1cmxcIiB3aXRoIGFueSB3aGl0ZXNwYWNlIGFmdGVyIGl0IGFuZCB0aGVuIGEgcGFyZW5zXG5cdCAgICggID0gU3RhcnQgYSBjYXB0dXJpbmcgZ3JvdXBcblx0ICAgICAoPzogID0gU3RhcnQgYSBub24tY2FwdHVyaW5nIGdyb3VwXG5cdCAgICAgICAgIFteKShdICA9IE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBwYXJlbnRoZXNlc1xuXHQgICAgICAgICB8ICA9IE9SXG5cdCAgICAgICAgIFxcKCAgPSBNYXRjaCBhIHN0YXJ0IHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICAoPzogID0gU3RhcnQgYW5vdGhlciBub24tY2FwdHVyaW5nIGdyb3Vwc1xuXHQgICAgICAgICAgICAgICAgIFteKShdKyAgPSBNYXRjaCBhbnl0aGluZyB0aGF0IGlzbid0IGEgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICAgICB8ICA9IE9SXG5cdCAgICAgICAgICAgICAgICAgXFwoICA9IE1hdGNoIGEgc3RhcnQgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICAgICAgICAgW14pKF0qICA9IE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgICAgIFxcKSAgPSBNYXRjaCBhIGVuZCBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgKSAgPSBFbmQgR3JvdXBcbiAgICAgICAgICAgICAgKlxcKSA9IE1hdGNoIGFueXRoaW5nIGFuZCB0aGVuIGEgY2xvc2UgcGFyZW5zXG4gICAgICAgICAgKSAgPSBDbG9zZSBub24tY2FwdHVyaW5nIGdyb3VwXG4gICAgICAgICAgKiAgPSBNYXRjaCBhbnl0aGluZ1xuICAgICAgICkgID0gQ2xvc2UgY2FwdHVyaW5nIGdyb3VwXG5cdCBcXCkgID0gTWF0Y2ggYSBjbG9zZSBwYXJlbnNcblxuXHQgL2dpICA9IEdldCBhbGwgbWF0Y2hlcywgbm90IHRoZSBmaXJzdC4gIEJlIGNhc2UgaW5zZW5zaXRpdmUuXG5cdCAqL1xuXHR2YXIgZml4ZWRDc3MgPSBjc3MucmVwbGFjZSgvdXJsXFxzKlxcKCgoPzpbXikoXXxcXCgoPzpbXikoXSt8XFwoW14pKF0qXFwpKSpcXCkpKilcXCkvZ2ksIGZ1bmN0aW9uKGZ1bGxNYXRjaCwgb3JpZ1VybCkge1xuXHRcdC8vIHN0cmlwIHF1b3RlcyAoaWYgdGhleSBleGlzdClcblx0XHR2YXIgdW5xdW90ZWRPcmlnVXJsID0gb3JpZ1VybFxuXHRcdFx0LnRyaW0oKVxuXHRcdFx0LnJlcGxhY2UoL15cIiguKilcIiQvLCBmdW5jdGlvbihvLCAkMSl7IHJldHVybiAkMTsgfSlcblx0XHRcdC5yZXBsYWNlKC9eJyguKiknJC8sIGZ1bmN0aW9uKG8sICQxKXsgcmV0dXJuICQxOyB9KTtcblxuXHRcdC8vIGFscmVhZHkgYSBmdWxsIHVybD8gbm8gY2hhbmdlXG5cdFx0aWYgKC9eKCN8ZGF0YTp8aHR0cDpcXC9cXC98aHR0cHM6XFwvXFwvfGZpbGU6XFwvXFwvXFwvfFxccyokKS9pLnRlc3QodW5xdW90ZWRPcmlnVXJsKSkge1xuXHRcdCAgcmV0dXJuIGZ1bGxNYXRjaDtcblx0XHR9XG5cblx0XHQvLyBjb252ZXJ0IHRoZSB1cmwgdG8gYSBmdWxsIHVybFxuXHRcdHZhciBuZXdVcmw7XG5cblx0XHRpZiAodW5xdW90ZWRPcmlnVXJsLmluZGV4T2YoXCIvL1wiKSA9PT0gMCkge1xuXHRcdCAgXHQvL1RPRE86IHNob3VsZCB3ZSBhZGQgcHJvdG9jb2w/XG5cdFx0XHRuZXdVcmwgPSB1bnF1b3RlZE9yaWdVcmw7XG5cdFx0fSBlbHNlIGlmICh1bnF1b3RlZE9yaWdVcmwuaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRcdC8vIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSBiYXNlIHVybFxuXHRcdFx0bmV3VXJsID0gYmFzZVVybCArIHVucXVvdGVkT3JpZ1VybDsgLy8gYWxyZWFkeSBzdGFydHMgd2l0aCAnLydcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gcGF0aCBzaG91bGQgYmUgcmVsYXRpdmUgdG8gY3VycmVudCBkaXJlY3Rvcnlcblx0XHRcdG5ld1VybCA9IGN1cnJlbnREaXIgKyB1bnF1b3RlZE9yaWdVcmwucmVwbGFjZSgvXlxcLlxcLy8sIFwiXCIpOyAvLyBTdHJpcCBsZWFkaW5nICcuLydcblx0XHR9XG5cblx0XHQvLyBzZW5kIGJhY2sgdGhlIGZpeGVkIHVybCguLi4pXG5cdFx0cmV0dXJuIFwidXJsKFwiICsgSlNPTi5zdHJpbmdpZnkobmV3VXJsKSArIFwiKVwiO1xuXHR9KTtcblxuXHQvLyBzZW5kIGJhY2sgdGhlIGZpeGVkIGNzc1xuXHRyZXR1cm4gZml4ZWRDc3M7XG59O1xuIiwiIWZ1bmN0aW9uKHQsZSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/ZSgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoZSk6ZSgpfSgwLGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gdCh0KXt2YXIgZT10aGlzLmNvbnN0cnVjdG9yO3JldHVybiB0aGlzLnRoZW4oZnVuY3Rpb24obil7cmV0dXJuIGUucmVzb2x2ZSh0KCkpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gbn0pfSxmdW5jdGlvbihuKXtyZXR1cm4gZS5yZXNvbHZlKHQoKSkudGhlbihmdW5jdGlvbigpe3JldHVybiBlLnJlamVjdChuKX0pfSl9ZnVuY3Rpb24gZSh0KXtyZXR1cm4hKCF0fHx2b2lkIDA9PT10Lmxlbmd0aCl9ZnVuY3Rpb24gbigpe31mdW5jdGlvbiByKHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHIpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQcm9taXNlcyBtdXN0IGJlIGNvbnN0cnVjdGVkIHZpYSBuZXdcIik7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwibm90IGEgZnVuY3Rpb25cIik7dGhpcy5fc3RhdGU9MCx0aGlzLl9oYW5kbGVkPSExLHRoaXMuX3ZhbHVlPXZvaWQgMCx0aGlzLl9kZWZlcnJlZHM9W10sYyh0LHRoaXMpfWZ1bmN0aW9uIG8odCxlKXtmb3IoOzM9PT10Ll9zdGF0ZTspdD10Ll92YWx1ZTswIT09dC5fc3RhdGU/KHQuX2hhbmRsZWQ9ITAsci5faW1tZWRpYXRlRm4oZnVuY3Rpb24oKXt2YXIgbj0xPT09dC5fc3RhdGU/ZS5vbkZ1bGZpbGxlZDplLm9uUmVqZWN0ZWQ7aWYobnVsbCE9PW4pe3ZhciByO3RyeXtyPW4odC5fdmFsdWUpfWNhdGNoKHQpe3JldHVybiB2b2lkIGEoZS5wcm9taXNlLHQpfWkoZS5wcm9taXNlLHIpfWVsc2UoMT09PXQuX3N0YXRlP2k6YSkoZS5wcm9taXNlLHQuX3ZhbHVlKX0pKTp0Ll9kZWZlcnJlZHMucHVzaChlKX1mdW5jdGlvbiBpKHQsZSl7dHJ5e2lmKGU9PT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJBIHByb21pc2UgY2Fubm90IGJlIHJlc29sdmVkIHdpdGggaXRzZWxmLlwiKTtpZihlJiYoXCJvYmplY3RcIj09dHlwZW9mIGV8fFwiZnVuY3Rpb25cIj09dHlwZW9mIGUpKXt2YXIgbj1lLnRoZW47aWYoZSBpbnN0YW5jZW9mIHIpcmV0dXJuIHQuX3N0YXRlPTMsdC5fdmFsdWU9ZSx2b2lkIHUodCk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgbilyZXR1cm4gdm9pZCBjKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dC5hcHBseShlLGFyZ3VtZW50cyl9fShuLGUpLHQpfXQuX3N0YXRlPTEsdC5fdmFsdWU9ZSx1KHQpfWNhdGNoKGUpe2EodCxlKX19ZnVuY3Rpb24gYSh0LGUpe3QuX3N0YXRlPTIsdC5fdmFsdWU9ZSx1KHQpfWZ1bmN0aW9uIHUodCl7Mj09PXQuX3N0YXRlJiYwPT09dC5fZGVmZXJyZWRzLmxlbmd0aCYmci5faW1tZWRpYXRlRm4oZnVuY3Rpb24oKXt0Ll9oYW5kbGVkfHxyLl91bmhhbmRsZWRSZWplY3Rpb25Gbih0Ll92YWx1ZSl9KTtmb3IodmFyIGU9MCxuPXQuX2RlZmVycmVkcy5sZW5ndGg7bj5lO2UrKylvKHQsdC5fZGVmZXJyZWRzW2VdKTt0Ll9kZWZlcnJlZHM9bnVsbH1mdW5jdGlvbiBjKHQsZSl7dmFyIG49ITE7dHJ5e3QoZnVuY3Rpb24odCl7bnx8KG49ITAsaShlLHQpKX0sZnVuY3Rpb24odCl7bnx8KG49ITAsYShlLHQpKX0pfWNhdGNoKHQpe2lmKG4pcmV0dXJuO249ITAsYShlLHQpfX12YXIgZj1zZXRUaW1lb3V0O3IucHJvdG90eXBlLmNhdGNoPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRoZW4obnVsbCx0KX0sci5wcm90b3R5cGUudGhlbj1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyB0aGlzLmNvbnN0cnVjdG9yKG4pO3JldHVybiBvKHRoaXMsbmV3IGZ1bmN0aW9uKHQsZSxuKXt0aGlzLm9uRnVsZmlsbGVkPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpudWxsLHRoaXMub25SZWplY3RlZD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6bnVsbCx0aGlzLnByb21pc2U9bn0odCxlLHIpKSxyfSxyLnByb3RvdHlwZS5maW5hbGx5PXQsci5hbGw9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyByKGZ1bmN0aW9uKG4scil7ZnVuY3Rpb24gbyh0LGUpe3RyeXtpZihlJiYoXCJvYmplY3RcIj09dHlwZW9mIGV8fFwiZnVuY3Rpb25cIj09dHlwZW9mIGUpKXt2YXIgdT1lLnRoZW47aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdSlyZXR1cm4gdm9pZCB1LmNhbGwoZSxmdW5jdGlvbihlKXtvKHQsZSl9LHIpfWlbdF09ZSwwPT0tLWEmJm4oaSl9Y2F0Y2godCl7cih0KX19aWYoIWUodCkpcmV0dXJuIHIobmV3IFR5cGVFcnJvcihcIlByb21pc2UuYWxsIGFjY2VwdHMgYW4gYXJyYXlcIikpO3ZhciBpPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpO2lmKDA9PT1pLmxlbmd0aClyZXR1cm4gbihbXSk7Zm9yKHZhciBhPWkubGVuZ3RoLHU9MDtpLmxlbmd0aD51O3UrKylvKHUsaVt1XSl9KX0sci5yZXNvbHZlPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZcIm9iamVjdFwiPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3Rvcj09PXI/dDpuZXcgcihmdW5jdGlvbihlKXtlKHQpfSl9LHIucmVqZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcihmdW5jdGlvbihlLG4pe24odCl9KX0sci5yYWNlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcihmdW5jdGlvbihuLG8pe2lmKCFlKHQpKXJldHVybiBvKG5ldyBUeXBlRXJyb3IoXCJQcm9taXNlLnJhY2UgYWNjZXB0cyBhbiBhcnJheVwiKSk7Zm9yKHZhciBpPTAsYT10Lmxlbmd0aDthPmk7aSsrKXIucmVzb2x2ZSh0W2ldKS50aGVuKG4sbyl9KX0sci5faW1tZWRpYXRlRm49XCJmdW5jdGlvblwiPT10eXBlb2Ygc2V0SW1tZWRpYXRlJiZmdW5jdGlvbih0KXtzZXRJbW1lZGlhdGUodCl9fHxmdW5jdGlvbih0KXtmKHQsMCl9LHIuX3VuaGFuZGxlZFJlamVjdGlvbkZuPWZ1bmN0aW9uKHQpe3ZvaWQgMCE9PWNvbnNvbGUmJmNvbnNvbGUmJmNvbnNvbGUud2FybihcIlBvc3NpYmxlIFVuaGFuZGxlZCBQcm9taXNlIFJlamVjdGlvbjpcIix0KX07dmFyIHM9ZnVuY3Rpb24oKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZilyZXR1cm4gc2VsZjtpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3c7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbClyZXR1cm4gZ2xvYmFsO3Rocm93IEVycm9yKFwidW5hYmxlIHRvIGxvY2F0ZSBnbG9iYWwgb2JqZWN0XCIpfSgpO1wiUHJvbWlzZVwiaW4gcz9zLlByb21pc2UucHJvdG90eXBlLmZpbmFsbHl8fChzLlByb21pc2UucHJvdG90eXBlLmZpbmFsbHk9dCk6cy5Qcm9taXNlPXJ9KSxmdW5jdGlvbih0LGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP2UoZXhwb3J0cyk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJleHBvcnRzXCJdLGUpOmUoKHQ9dHx8c2VsZikuY2xpcGJvYXJkPXt9KX0odGhpcyxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKHQsZSxuLHIpe3JldHVybiBuZXcobnx8KG49UHJvbWlzZSkpKGZ1bmN0aW9uKG8saSl7ZnVuY3Rpb24gYSh0KXt0cnl7YyhyLm5leHQodCkpfWNhdGNoKHQpe2kodCl9fWZ1bmN0aW9uIHUodCl7dHJ5e2Moci50aHJvdyh0KSl9Y2F0Y2godCl7aSh0KX19ZnVuY3Rpb24gYyh0KXt0LmRvbmU/byh0LnZhbHVlKTpuZXcgbihmdW5jdGlvbihlKXtlKHQudmFsdWUpfSkudGhlbihhLHUpfWMoKHI9ci5hcHBseSh0LGV8fFtdKSkubmV4dCgpKX0pfWZ1bmN0aW9uIG4odCxlKXt2YXIgbixyLG8saSxhPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJm9bMF0pdGhyb3cgb1sxXTtyZXR1cm4gb1sxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBpPXtuZXh0OnUoMCksdGhyb3c6dSgxKSxyZXR1cm46dSgyKX0sXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiYoaVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxpO2Z1bmN0aW9uIHUoaSl7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBmdW5jdGlvbihpKXtpZihuKXRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO2Zvcig7YTspdHJ5e2lmKG49MSxyJiYobz0yJmlbMF0/ci5yZXR1cm46aVswXT9yLnRocm93fHwoKG89ci5yZXR1cm4pJiZvLmNhbGwociksMCk6ci5uZXh0KSYmIShvPW8uY2FsbChyLGlbMV0pKS5kb25lKXJldHVybiBvO3N3aXRjaChyPTAsbyYmKGk9WzImaVswXSxvLnZhbHVlXSksaVswXSl7Y2FzZSAwOmNhc2UgMTpvPWk7YnJlYWs7Y2FzZSA0OnJldHVybiBhLmxhYmVsKysse3ZhbHVlOmlbMV0sZG9uZTohMX07Y2FzZSA1OmEubGFiZWwrKyxyPWlbMV0saT1bMF07Y29udGludWU7Y2FzZSA3Omk9YS5vcHMucG9wKCksYS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoIShvPShvPWEudHJ5cykubGVuZ3RoPjAmJm9bby5sZW5ndGgtMV0pJiYoNj09PWlbMF18fDI9PT1pWzBdKSl7YT0wO2NvbnRpbnVlfWlmKDM9PT1pWzBdJiYoIW98fGlbMV0+b1swXSYmaVsxXTxvWzNdKSl7YS5sYWJlbD1pWzFdO2JyZWFrfWlmKDY9PT1pWzBdJiZhLmxhYmVsPG9bMV0pe2EubGFiZWw9b1sxXSxvPWk7YnJlYWt9aWYobyYmYS5sYWJlbDxvWzJdKXthLmxhYmVsPW9bMl0sYS5vcHMucHVzaChpKTticmVha31vWzJdJiZhLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWV9aT1lLmNhbGwodCxhKX1jYXRjaCh0KXtpPVs2LHRdLHI9MH1maW5hbGx5e249bz0wfWlmKDUmaVswXSl0aHJvdyBpWzFdO3JldHVybnt2YWx1ZTppWzBdP2lbMV06dm9pZCAwLGRvbmU6ITB9fShbaSx1XSl9fX12YXIgcj1bXCJ0ZXh0L3BsYWluXCIsXCJ0ZXh0L2h0bWxcIl07dmFyIG89ZnVuY3Rpb24oKXsoY29uc29sZS53YXJufHxjb25zb2xlLmxvZykuY2FsbChhcmd1bWVudHMpfS5iaW5kKGNvbnNvbGUsXCJbY2xpcGJvYXJkLXBvbHlmaWxsXVwiKSxpPSEwO3ZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMubT17fX1yZXR1cm4gdC5wcm90b3R5cGUuc2V0RGF0YT1mdW5jdGlvbih0LGUpe2kmJi0xPT09ci5pbmRleE9mKHQpJiZvKFwiVW5rbm93biBkYXRhIHR5cGU6IFwiK3QsXCJDYWxsIGNsaXBib2FyZC5zdXBwcmVzc1dhcm5pbmdzKCkgdG8gc3VwcHJlc3MgdGhpcyB3YXJuaW5nLlwiKSx0aGlzLm1bdF09ZX0sdC5wcm90b3R5cGUuZ2V0RGF0YT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tW3RdfSx0LnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLm0pdCh0aGlzLm1bZV0sZSl9LHR9KCksdT1mdW5jdGlvbih0KXt9LGM9ITA7dmFyIGY9ZnVuY3Rpb24oKXsoY29uc29sZS53YXJufHxjb25zb2xlLmxvZykuYXBwbHkoY29uc29sZSxhcmd1bWVudHMpfS5iaW5kKFwiW2NsaXBib2FyZC1wb2x5ZmlsbF1cIikscz1cInRleHQvcGxhaW5cIjtmdW5jdGlvbiBsKHQpe3U9dH1mdW5jdGlvbiBkKCl7Yz0hMSxpPSExfWZ1bmN0aW9uIHAodCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIG4odGhpcyxmdW5jdGlvbihuKXtpZihjJiYhdC5nZXREYXRhKHMpJiZmKFwiY2xpcGJvYXJkLndyaXRlKCkgd2FzIGNhbGxlZCB3aXRob3V0IGEgYHRleHQvcGxhaW5gIGRhdGEgdHlwZS4gT24gc29tZSBwbGF0Zm9ybXMsIHRoaXMgbWF5IHJlc3VsdCBpbiBhbiBlbXB0eSBjbGlwYm9hcmQuIENhbGwgY2xpcGJvYXJkLnN1cHByZXNzV2FybmluZ3MoKSB0byBzdXBwcmVzcyB0aGlzIHdhcm5pbmcuXCIpLGooKSl7aWYoZnVuY3Rpb24odCl7dmFyIGU9dC5nZXREYXRhKHMpO2lmKHZvaWQgMCE9PWUpcmV0dXJuIHdpbmRvdy5jbGlwYm9hcmREYXRhLnNldERhdGEoXCJUZXh0XCIsZSk7dGhyb3cgbmV3IEVycm9yKFwiTm8gYHRleHQvcGxhaW5gIHZhbHVlIHdhcyBzcGVjaWZpZWQuXCIpfSh0KSlyZXR1cm5bMl07dGhyb3cgbmV3IEVycm9yKFwiQ29weWluZyBmYWlsZWQsIHBvc3NpYmx5IGJlY2F1c2UgdGhlIHVzZXIgcmVqZWN0ZWQgaXQuXCIpfWlmKHgodCkpcmV0dXJuIHUoXCJyZWd1bGFyIGV4ZWNDb3B5IHdvcmtlZFwiKSxbMl07aWYobmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKFwiRWRnZVwiKT4tMSlyZXR1cm4gdSgnVUEgXCJFZGdlXCIgPT4gYXNzdW1pbmcgc3VjY2VzcycpLFsyXTtpZihfKGRvY3VtZW50LmJvZHksdCkpcmV0dXJuIHUoXCJjb3B5VXNpbmdUZW1wU2VsZWN0aW9uIHdvcmtlZFwiKSxbMl07aWYoZnVuY3Rpb24odCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtlLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsXCItd2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0ICFpbXBvcnRhbnRcIiksZS50ZXh0Q29udGVudD1cInRlbXBvcmFyeSBlbGVtZW50XCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKTt2YXIgbj1fKGUsdCk7cmV0dXJuIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZSksbn0odCkpcmV0dXJuIHUoXCJjb3B5VXNpbmdUZW1wRWxlbSB3b3JrZWRcIiksWzJdO2lmKHZvaWQgMCE9PShlPXQuZ2V0RGF0YShzKSkmJmZ1bmN0aW9uKHQpe3UoXCJjb3B5VGV4dFVzaW5nRE9NXCIpO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7ZS5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLFwiLXdlYmtpdC11c2VyLXNlbGVjdDogdGV4dCAhaW1wb3J0YW50XCIpO3ZhciBuPWU7ZS5hdHRhY2hTaGFkb3cmJih1KFwiVXNpbmcgc2hhZG93IERPTS5cIiksbj1lLmF0dGFjaFNoYWRvdyh7bW9kZTpcIm9wZW5cIn0pKTt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtyLmlubmVyVGV4dD10LG4uYXBwZW5kQ2hpbGQociksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKSxUKHIpO3ZhciBvPWRvY3VtZW50LmV4ZWNDb21tYW5kKFwiY29weVwiKTtyZXR1cm4gRSgpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZSksb30oZSkpcmV0dXJuIHUoXCJjb3B5VGV4dFVzaW5nRE9NIHdvcmtlZFwiKSxbMl07dGhyb3cgbmV3IEVycm9yKFwiQ29weSBjb21tYW5kIGZhaWxlZC5cIil9KX0pfWZ1bmN0aW9uIGgodCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcyxmdW5jdGlvbihlKXtyZXR1cm4gbmF2aWdhdG9yLmNsaXBib2FyZCYmbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQ/KHUoXCJVc2luZyBgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoKWAuXCIpLFsyLG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHQpXSk6WzIscChEKHQpKV19KX0pfWZ1bmN0aW9uIHYoKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gbih0aGlzLGZ1bmN0aW9uKGUpe3N3aXRjaChlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHQ9RCxbNCx5KCldO2Nhc2UgMTpyZXR1cm5bMix0LmFwcGx5KHZvaWQgMCxbZS5zZW50KCldKV19fSl9KX1mdW5jdGlvbiB5KCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcyxmdW5jdGlvbih0KXtpZihuYXZpZ2F0b3IuY2xpcGJvYXJkJiZuYXZpZ2F0b3IuY2xpcGJvYXJkLnJlYWRUZXh0KXJldHVybiB1KFwiVXNpbmcgYG5hdmlnYXRvci5jbGlwYm9hcmQucmVhZFRleHQoKWAuXCIpLFsyLG5hdmlnYXRvci5jbGlwYm9hcmQucmVhZFRleHQoKV07aWYoaigpKXJldHVybiB1KFwiUmVhZGluZyB0ZXh0IHVzaW5nIElFIHN0cmF0ZWd5LlwiKSxbMixDKCldO3Rocm93IG5ldyBFcnJvcihcIlJlYWQgaXMgbm90IHN1cHBvcnRlZCBpbiB5b3VyIGJyb3dzZXIuXCIpfSl9KX12YXIgbT0hMTtmdW5jdGlvbiB3KCl7bXx8KGMmJmYoJ1RoZSBkZXByZWNhdGVkIGRlZmF1bHQgb2JqZWN0IG9mIGBjbGlwYm9hcmQtcG9seWZpbGxgIHdhcyBjYWxsZWQuIFBsZWFzZSBzd2l0Y2ggdG8gYGltcG9ydCAqIGFzIGNsaXBib2FyZCBmcm9tIFwiY2xpcGJvYXJkLXBvbHlmaWxsXCJgIGFuZCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2xnYXJyb24vY2xpcGJvYXJkLXBvbHlmaWxsL2lzc3Vlcy8xMDEgZm9yIG1vcmUgaW5mby4nKSxtPSEwKX12YXIgYj17RFQ6YSxzZXREZWJ1Z0xvZzpmdW5jdGlvbih0KXtyZXR1cm4gdygpLGwodCl9LHN1cHByZXNzV2FybmluZ3M6ZnVuY3Rpb24oKXtyZXR1cm4gdygpLGQoKX0sd3JpdGU6ZnVuY3Rpb24odCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcyxmdW5jdGlvbihlKXtyZXR1cm4gdygpLFsyLHAodCldfSl9KX0sd3JpdGVUZXh0OmZ1bmN0aW9uKHQpe3JldHVybiBlKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBuKHRoaXMsZnVuY3Rpb24oZSl7cmV0dXJuIHcoKSxbMixoKHQpXX0pfSl9LHJlYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLGZ1bmN0aW9uKHQpe3JldHVybiB3KCksWzIsdigpXX0pfSl9LHJlYWRUZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcyxmdW5jdGlvbih0KXtyZXR1cm4gdygpLFsyLHkoKV19KX0pfX0sZz1mdW5jdGlvbigpe3RoaXMuc3VjY2Vzcz0hMX07ZnVuY3Rpb24geCh0KXt2YXIgZT1uZXcgZyxuPWZ1bmN0aW9uKHQsZSxuKXt1KFwibGlzdGVuZXIgY2FsbGVkXCIpLHQuc3VjY2Vzcz0hMCxlLmZvckVhY2goZnVuY3Rpb24oZSxyKXt2YXIgbz1uLmNsaXBib2FyZERhdGE7by5zZXREYXRhKHIsZSkscj09PXMmJm8uZ2V0RGF0YShyKSE9PWUmJih1KFwic2V0dGluZyB0ZXh0L3BsYWluIGZhaWxlZFwiKSx0LnN1Y2Nlc3M9ITEpfSksbi5wcmV2ZW50RGVmYXVsdCgpfS5iaW5kKHRoaXMsZSx0KTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY29weVwiLG4pO3RyeXtkb2N1bWVudC5leGVjQ29tbWFuZChcImNvcHlcIil9ZmluYWxseXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY29weVwiLG4pfXJldHVybiBlLnN1Y2Nlc3N9ZnVuY3Rpb24gXyh0LGUpe1QodCk7dmFyIG49eChlKTtyZXR1cm4gRSgpLG59ZnVuY3Rpb24gVCh0KXt2YXIgZT1kb2N1bWVudC5nZXRTZWxlY3Rpb24oKTtpZihlKXt2YXIgbj1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO24uc2VsZWN0Tm9kZUNvbnRlbnRzKHQpLGUucmVtb3ZlQWxsUmFuZ2VzKCksZS5hZGRSYW5nZShuKX19ZnVuY3Rpb24gRSgpe3ZhciB0PWRvY3VtZW50LmdldFNlbGVjdGlvbigpO3QmJnQucmVtb3ZlQWxsUmFuZ2VzKCl9ZnVuY3Rpb24gRCh0KXt2YXIgZT1uZXcgYTtyZXR1cm4gZS5zZXREYXRhKHMsdCksZX1mdW5jdGlvbiBqKCl7cmV0dXJuXCJ1bmRlZmluZWRcIj09dHlwZW9mIENsaXBib2FyZEV2ZW50JiZ2b2lkIDAhPT13aW5kb3cuY2xpcGJvYXJkRGF0YSYmdm9pZCAwIT09d2luZG93LmNsaXBib2FyZERhdGEuc2V0RGF0YX1mdW5jdGlvbiBDKCl7cmV0dXJuIGUodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIG4odGhpcyxmdW5jdGlvbihlKXtpZihcIlwiPT09KHQ9d2luZG93LmNsaXBib2FyZERhdGEuZ2V0RGF0YShcIlRleHRcIikpKXRocm93IG5ldyBFcnJvcihcIkVtcHR5IGNsaXBib2FyZCBvciBjb3VsZCBub3QgcmVhZCBwbGFpbiB0ZXh0IGZyb20gY2xpcGJvYXJkXCIpO3JldHVyblsyLHRdfSl9KX10LkRUPWEsdC5kZWZhdWx0PWIsdC5yZWFkPXYsdC5yZWFkVGV4dD15LHQuc2V0RGVidWdMb2c9bCx0LnN1cHByZXNzV2FybmluZ3M9ZCx0LndyaXRlPXAsdC53cml0ZVRleHQ9aCxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2xpcGJvYXJkLXBvbHlmaWxsLnByb21pc2UuanMubWFwXG4iLCJ2YXIgc2NvcGUgPSAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWwpIHx8XG4gICAgICAgICAgICAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZikgfHxcbiAgICAgICAgICAgIHdpbmRvdztcbnZhciBhcHBseSA9IEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseTtcblxuLy8gRE9NIEFQSXMsIGZvciBjb21wbGV0ZW5lc3NcblxuZXhwb3J0cy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgVGltZW91dChhcHBseS5jYWxsKHNldFRpbWVvdXQsIHNjb3BlLCBhcmd1bWVudHMpLCBjbGVhclRpbWVvdXQpO1xufTtcbmV4cG9ydHMuc2V0SW50ZXJ2YWwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBUaW1lb3V0KGFwcGx5LmNhbGwoc2V0SW50ZXJ2YWwsIHNjb3BlLCBhcmd1bWVudHMpLCBjbGVhckludGVydmFsKTtcbn07XG5leHBvcnRzLmNsZWFyVGltZW91dCA9XG5leHBvcnRzLmNsZWFySW50ZXJ2YWwgPSBmdW5jdGlvbih0aW1lb3V0KSB7XG4gIGlmICh0aW1lb3V0KSB7XG4gICAgdGltZW91dC5jbG9zZSgpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBUaW1lb3V0KGlkLCBjbGVhckZuKSB7XG4gIHRoaXMuX2lkID0gaWQ7XG4gIHRoaXMuX2NsZWFyRm4gPSBjbGVhckZuO1xufVxuVGltZW91dC5wcm90b3R5cGUudW5yZWYgPSBUaW1lb3V0LnByb3RvdHlwZS5yZWYgPSBmdW5jdGlvbigpIHt9O1xuVGltZW91dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fY2xlYXJGbi5jYWxsKHNjb3BlLCB0aGlzLl9pZCk7XG59O1xuXG4vLyBEb2VzIG5vdCBzdGFydCB0aGUgdGltZSwganVzdCBzZXRzIHVwIHRoZSBtZW1iZXJzIG5lZWRlZC5cbmV4cG9ydHMuZW5yb2xsID0gZnVuY3Rpb24oaXRlbSwgbXNlY3MpIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuICBpdGVtLl9pZGxlVGltZW91dCA9IG1zZWNzO1xufTtcblxuZXhwb3J0cy51bmVucm9sbCA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuICBpdGVtLl9pZGxlVGltZW91dCA9IC0xO1xufTtcblxuZXhwb3J0cy5fdW5yZWZBY3RpdmUgPSBleHBvcnRzLmFjdGl2ZSA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuXG4gIHZhciBtc2VjcyA9IGl0ZW0uX2lkbGVUaW1lb3V0O1xuICBpZiAobXNlY3MgPj0gMCkge1xuICAgIGl0ZW0uX2lkbGVUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIG9uVGltZW91dCgpIHtcbiAgICAgIGlmIChpdGVtLl9vblRpbWVvdXQpXG4gICAgICAgIGl0ZW0uX29uVGltZW91dCgpO1xuICAgIH0sIG1zZWNzKTtcbiAgfVxufTtcblxuLy8gc2V0aW1tZWRpYXRlIGF0dGFjaGVzIGl0c2VsZiB0byB0aGUgZ2xvYmFsIG9iamVjdFxucmVxdWlyZShcInNldGltbWVkaWF0ZVwiKTtcbi8vIE9uIHNvbWUgZXhvdGljIGVudmlyb25tZW50cywgaXQncyBub3QgY2xlYXIgd2hpY2ggb2JqZWN0IGBzZXRpbW1lZGlhdGVgIHdhc1xuLy8gYWJsZSB0byBpbnN0YWxsIG9udG8uICBTZWFyY2ggZWFjaCBwb3NzaWJpbGl0eSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGVcbi8vIGBzZXRpbW1lZGlhdGVgIGxpYnJhcnkuXG5leHBvcnRzLnNldEltbWVkaWF0ZSA9ICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmLnNldEltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsLnNldEltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMgJiYgdGhpcy5zZXRJbW1lZGlhdGUpO1xuZXhwb3J0cy5jbGVhckltbWVkaWF0ZSA9ICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmLmNsZWFySW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbC5jbGVhckltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcyAmJiB0aGlzLmNsZWFySW1tZWRpYXRlKTtcbiIsIihmdW5jdGlvbiAoZ2xvYmFsLCB1bmRlZmluZWQpIHtcbiAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgIGlmIChnbG9iYWwuc2V0SW1tZWRpYXRlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbmV4dEhhbmRsZSA9IDE7IC8vIFNwZWMgc2F5cyBncmVhdGVyIHRoYW4gemVyb1xuICAgIHZhciB0YXNrc0J5SGFuZGxlID0ge307XG4gICAgdmFyIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IGZhbHNlO1xuICAgIHZhciBkb2MgPSBnbG9iYWwuZG9jdW1lbnQ7XG4gICAgdmFyIHJlZ2lzdGVySW1tZWRpYXRlO1xuXG4gICAgZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGNhbGxiYWNrKSB7XG4gICAgICAvLyBDYWxsYmFjayBjYW4gZWl0aGVyIGJlIGEgZnVuY3Rpb24gb3IgYSBzdHJpbmdcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjYWxsYmFjayA9IG5ldyBGdW5jdGlvbihcIlwiICsgY2FsbGJhY2spO1xuICAgICAgfVxuICAgICAgLy8gQ29weSBmdW5jdGlvbiBhcmd1bWVudHNcbiAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaSArIDFdO1xuICAgICAgfVxuICAgICAgLy8gU3RvcmUgYW5kIHJlZ2lzdGVyIHRoZSB0YXNrXG4gICAgICB2YXIgdGFzayA9IHsgY2FsbGJhY2s6IGNhbGxiYWNrLCBhcmdzOiBhcmdzIH07XG4gICAgICB0YXNrc0J5SGFuZGxlW25leHRIYW5kbGVdID0gdGFzaztcbiAgICAgIHJlZ2lzdGVySW1tZWRpYXRlKG5leHRIYW5kbGUpO1xuICAgICAgcmV0dXJuIG5leHRIYW5kbGUrKztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShoYW5kbGUpIHtcbiAgICAgICAgZGVsZXRlIHRhc2tzQnlIYW5kbGVbaGFuZGxlXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBydW4odGFzaykge1xuICAgICAgICB2YXIgY2FsbGJhY2sgPSB0YXNrLmNhbGxiYWNrO1xuICAgICAgICB2YXIgYXJncyA9IHRhc2suYXJncztcbiAgICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBydW5JZlByZXNlbnQoaGFuZGxlKSB7XG4gICAgICAgIC8vIEZyb20gdGhlIHNwZWM6IFwiV2FpdCB1bnRpbCBhbnkgaW52b2NhdGlvbnMgb2YgdGhpcyBhbGdvcml0aG0gc3RhcnRlZCBiZWZvcmUgdGhpcyBvbmUgaGF2ZSBjb21wbGV0ZWQuXCJcbiAgICAgICAgLy8gU28gaWYgd2UncmUgY3VycmVudGx5IHJ1bm5pbmcgYSB0YXNrLCB3ZSdsbCBuZWVkIHRvIGRlbGF5IHRoaXMgaW52b2NhdGlvbi5cbiAgICAgICAgaWYgKGN1cnJlbnRseVJ1bm5pbmdBVGFzaykge1xuICAgICAgICAgICAgLy8gRGVsYXkgYnkgZG9pbmcgYSBzZXRUaW1lb3V0LiBzZXRJbW1lZGlhdGUgd2FzIHRyaWVkIGluc3RlYWQsIGJ1dCBpbiBGaXJlZm94IDcgaXQgZ2VuZXJhdGVkIGFcbiAgICAgICAgICAgIC8vIFwidG9vIG11Y2ggcmVjdXJzaW9uXCIgZXJyb3IuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHJ1bklmUHJlc2VudCwgMCwgaGFuZGxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gdGFza3NCeUhhbmRsZVtoYW5kbGVdO1xuICAgICAgICAgICAgaWYgKHRhc2spIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bih0YXNrKTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhckltbWVkaWF0ZShoYW5kbGUpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsTmV4dFRpY2tJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkgeyBydW5JZlByZXNlbnQoaGFuZGxlKTsgfSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FuVXNlUG9zdE1lc3NhZ2UoKSB7XG4gICAgICAgIC8vIFRoZSB0ZXN0IGFnYWluc3QgYGltcG9ydFNjcmlwdHNgIHByZXZlbnRzIHRoaXMgaW1wbGVtZW50YXRpb24gZnJvbSBiZWluZyBpbnN0YWxsZWQgaW5zaWRlIGEgd2ViIHdvcmtlcixcbiAgICAgICAgLy8gd2hlcmUgYGdsb2JhbC5wb3N0TWVzc2FnZWAgbWVhbnMgc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50IGFuZCBjYW4ndCBiZSB1c2VkIGZvciB0aGlzIHB1cnBvc2UuXG4gICAgICAgIGlmIChnbG9iYWwucG9zdE1lc3NhZ2UgJiYgIWdsb2JhbC5pbXBvcnRTY3JpcHRzKSB7XG4gICAgICAgICAgICB2YXIgcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cyA9IHRydWU7XG4gICAgICAgICAgICB2YXIgb2xkT25NZXNzYWdlID0gZ2xvYmFsLm9ubWVzc2FnZTtcbiAgICAgICAgICAgIGdsb2JhbC5vbm1lc3NhZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzID0gZmFsc2U7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKFwiXCIsIFwiKlwiKTtcbiAgICAgICAgICAgIGdsb2JhbC5vbm1lc3NhZ2UgPSBvbGRPbk1lc3NhZ2U7XG4gICAgICAgICAgICByZXR1cm4gcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxQb3N0TWVzc2FnZUltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICAvLyBJbnN0YWxscyBhbiBldmVudCBoYW5kbGVyIG9uIGBnbG9iYWxgIGZvciB0aGUgYG1lc3NhZ2VgIGV2ZW50OiBzZWVcbiAgICAgICAgLy8gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9ET00vd2luZG93LnBvc3RNZXNzYWdlXG4gICAgICAgIC8vICogaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvY29tbXMuaHRtbCNjcm9zc0RvY3VtZW50TWVzc2FnZXNcblxuICAgICAgICB2YXIgbWVzc2FnZVByZWZpeCA9IFwic2V0SW1tZWRpYXRlJFwiICsgTWF0aC5yYW5kb20oKSArIFwiJFwiO1xuICAgICAgICB2YXIgb25HbG9iYWxNZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5zb3VyY2UgPT09IGdsb2JhbCAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBldmVudC5kYXRhID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgICAgZXZlbnQuZGF0YS5pbmRleE9mKG1lc3NhZ2VQcmVmaXgpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcnVuSWZQcmVzZW50KCtldmVudC5kYXRhLnNsaWNlKG1lc3NhZ2VQcmVmaXgubGVuZ3RoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgb25HbG9iYWxNZXNzYWdlLCBmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnbG9iYWwuYXR0YWNoRXZlbnQoXCJvbm1lc3NhZ2VcIiwgb25HbG9iYWxNZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBnbG9iYWwucG9zdE1lc3NhZ2UobWVzc2FnZVByZWZpeCArIGhhbmRsZSwgXCIqXCIpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxNZXNzYWdlQ2hhbm5lbEltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgICAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgaGFuZGxlID0gZXZlbnQuZGF0YTtcbiAgICAgICAgICAgIHJ1bklmUHJlc2VudChoYW5kbGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKGhhbmRsZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFJlYWR5U3RhdGVDaGFuZ2VJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgdmFyIGh0bWwgPSBkb2MuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgPHNjcmlwdD4gZWxlbWVudDsgaXRzIHJlYWR5c3RhdGVjaGFuZ2UgZXZlbnQgd2lsbCBiZSBmaXJlZCBhc3luY2hyb25vdXNseSBvbmNlIGl0IGlzIGluc2VydGVkXG4gICAgICAgICAgICAvLyBpbnRvIHRoZSBkb2N1bWVudC4gRG8gc28sIHRodXMgcXVldWluZyB1cCB0aGUgdGFzay4gUmVtZW1iZXIgdG8gY2xlYW4gdXAgb25jZSBpdCdzIGJlZW4gY2FsbGVkLlxuICAgICAgICAgICAgdmFyIHNjcmlwdCA9IGRvYy5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBydW5JZlByZXNlbnQoaGFuZGxlKTtcbiAgICAgICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICAgICAgc2NyaXB0ID0gbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBodG1sLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFNldFRpbWVvdXRJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQocnVuSWZQcmVzZW50LCAwLCBoYW5kbGUpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIElmIHN1cHBvcnRlZCwgd2Ugc2hvdWxkIGF0dGFjaCB0byB0aGUgcHJvdG90eXBlIG9mIGdsb2JhbCwgc2luY2UgdGhhdCBpcyB3aGVyZSBzZXRUaW1lb3V0IGV0IGFsLiBsaXZlLlxuICAgIHZhciBhdHRhY2hUbyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZ2xvYmFsKTtcbiAgICBhdHRhY2hUbyA9IGF0dGFjaFRvICYmIGF0dGFjaFRvLnNldFRpbWVvdXQgPyBhdHRhY2hUbyA6IGdsb2JhbDtcblxuICAgIC8vIERvbid0IGdldCBmb29sZWQgYnkgZS5nLiBicm93c2VyaWZ5IGVudmlyb25tZW50cy5cbiAgICBpZiAoe30udG9TdHJpbmcuY2FsbChnbG9iYWwucHJvY2VzcykgPT09IFwiW29iamVjdCBwcm9jZXNzXVwiKSB7XG4gICAgICAgIC8vIEZvciBOb2RlLmpzIGJlZm9yZSAwLjlcbiAgICAgICAgaW5zdGFsbE5leHRUaWNrSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoY2FuVXNlUG9zdE1lc3NhZ2UoKSkge1xuICAgICAgICAvLyBGb3Igbm9uLUlFMTAgbW9kZXJuIGJyb3dzZXJzXG4gICAgICAgIGluc3RhbGxQb3N0TWVzc2FnZUltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGdsb2JhbC5NZXNzYWdlQ2hhbm5lbCkge1xuICAgICAgICAvLyBGb3Igd2ViIHdvcmtlcnMsIHdoZXJlIHN1cHBvcnRlZFxuICAgICAgICBpbnN0YWxsTWVzc2FnZUNoYW5uZWxJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChkb2MgJiYgXCJvbnJlYWR5c3RhdGVjaGFuZ2VcIiBpbiBkb2MuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSkge1xuICAgICAgICAvLyBGb3IgSUUgNuKAkzhcbiAgICAgICAgaW5zdGFsbFJlYWR5U3RhdGVDaGFuZ2VJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIG9sZGVyIGJyb3dzZXJzXG4gICAgICAgIGluc3RhbGxTZXRUaW1lb3V0SW1wbGVtZW50YXRpb24oKTtcbiAgICB9XG5cbiAgICBhdHRhY2hUby5zZXRJbW1lZGlhdGUgPSBzZXRJbW1lZGlhdGU7XG4gICAgYXR0YWNoVG8uY2xlYXJJbW1lZGlhdGUgPSBjbGVhckltbWVkaWF0ZTtcbn0odHlwZW9mIHNlbGYgPT09IFwidW5kZWZpbmVkXCIgPyB0eXBlb2YgZ2xvYmFsID09PSBcInVuZGVmaW5lZFwiID8gdGhpcyA6IGdsb2JhbCA6IHNlbGYpKTtcbiIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCJpbXBvcnQgY2xpcGJvYXJkIGZyb20gJ2NsaXBib2FyZC1wb2x5ZmlsbC9idWlsZC9jbGlwYm9hcmQtcG9seWZpbGwucHJvbWlzZSdcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFkanVzdGFibGVCb3gge1xuICBjb25zdHJ1Y3RvciAoe1xuICAgIHNoYXBlRWxlbUlkID0gJ3NoYXBlJyxcbiAgICBnZW5lcmF0b3JFbGVtSWQgPSAnY29kZScsXG4gICAgY29weUNvZGVJZCA9ICdjb3B5JyxcbiAgICBjb3BpZWRDb2RlSWQgPSAnY2xpcGJvYXJkX2NvcGllZCcsXG4gICAgYm94Q29udGFpbmVySWQgPSAnYm94JyxcbiAgICB3aWR0aElucHV0SWQgPSAnd2lkdGgnLFxuICAgIGhlaWdodElucHV0SWQgPSAnaGVpZ2h0JyxcbiAgICBlbmFibGVBZHZhbmNlZElkID0gJ2VuYWJsZS1hZHZhbmNlZCcsXG4gICAgaW5pdFN0YXRlID0gbnVsbCxcbiAgICBtb3ZlYWJsZUVsZW1zIH1cbiAgICA9IHt9KSB7XG4gICAgdGhpcy5nZW5lcmF0b3JFbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZ2VuZXJhdG9yRWxlbUlkKVxuICAgIHRoaXMuc2hhcGVFbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2hhcGVFbGVtSWQpXG4gICAgdGhpcy5jb3BpZWRDb2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29waWVkQ29kZUlkKVxuICAgIHRoaXMuYm94Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYm94Q29udGFpbmVySWQpXG4gICAgdGhpcy53aWR0aElucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQod2lkdGhJbnB1dElkKVxuICAgIHRoaXMuaGVpZ2h0SW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChoZWlnaHRJbnB1dElkKVxuICAgIHRoaXMud2lkdGhJbnB1dC5vbmNoYW5nZSA9ICgpID0+IHsgdGhpcy51cGRhdGVTdGF0ZSh0aGlzLndpZHRoSW5wdXQudmFsdWUsICd3aWR0aCcpIH1cbiAgICB0aGlzLmhlaWdodElucHV0Lm9uY2hhbmdlID0gKCkgPT4geyB0aGlzLnVwZGF0ZVN0YXRlKHRoaXMuaGVpZ2h0SW5wdXQudmFsdWUsICdoZWlnaHQnKSB9XG4gICAgdGhpcy5lbmFibGVBZHZhbmNlZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVuYWJsZUFkdmFuY2VkSWQpXG4gICAgdGhpcy5lbmFibGVBZHZhbmNlZC5vbmNsaWNrID0gdGhpcy5lbmFibGVBZHZhbmNlZE9uQ2xpY2suYmluZCh0aGlzKVxuICAgIHRoaXMuaW5pdFN0YXRlKGluaXRTdGF0ZSlcbiAgICB0aGlzLmluaXRBZHZhbmNlZCgpXG4gICAgdGhpcy5oYW5kbGVzID0gdGhpcy5pbml0SGFuZGxlcyhtb3ZlYWJsZUVsZW1zKVxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvcHlDb2RlSWQpLm9uY2xpY2sgPSB0aGlzLnNldENsaXBib2FyZC5iaW5kKHRoaXMpXG4gIH1cbiAgaW5pdEhhbmRsZXMgKG1vdmVhYmxlRWxlbXMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBoYXZlIHRvIGltcGxlbWVudCB0aGUgbWV0aG9kIGluaXRIYW5kbGVzIScpXG4gIH1cbiAgdXBkYXRlQm9yZGVyUmFkaXVzICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBoYXZlIHRvIGltcGxlbWVudCB0aGUgbWV0aG9kIHVwZGF0ZUJvcmRlclJhZGl1cyEnKVxuICB9XG4gIGluaXRTdGF0ZSAoc3RhdGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBoYXZlIHRvIGltcGxlbWVudCB0aGUgbWV0aG9kIGluaXRTdGF0ZSEnKVxuICB9XG4gIGluaXRBZHZhbmNlZCAoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUud2lkdGggIT09ICcnICYmIHRoaXMuc3RhdGUuaGVpZ2h0ICE9PSAnJykge1xuICAgICAgdGhpcy5lbmFibGVBZHZhbmNlZC5jaGVja2VkID0gdHJ1ZVxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpbWVuc2lvbi1pbnB1dCcpLmNsYXNzTGlzdC5hZGQoJ3Zpc2libGUnKVxuICAgIH1cbiAgfVxuICBlbmFibGVBZHZhbmNlZE9uQ2xpY2sgKGUpIHtcbiAgICBpZiAodGhpcy5lbmFibGVBZHZhbmNlZC5jaGVja2VkKSB7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGltZW5zaW9uLWlucHV0JykuY2xhc3NMaXN0LmFkZCgndmlzaWJsZScpXG4gICAgICB0aGlzLnN0YXRlLndpZHRoID0gdGhpcy5ib3hDb250YWluZXIub2Zmc2V0V2lkdGhcbiAgICAgIHRoaXMuc3RhdGUuaGVpZ2h0ID0gdGhpcy5ib3hDb250YWluZXIub2Zmc2V0SGVpZ2h0XG4gICAgICB0aGlzLnVwZGF0ZVVJKClcbiAgICB9IGVsc2Uge1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpbWVuc2lvbi1pbnB1dCcpLmNsYXNzTGlzdC5yZW1vdmUoJ3Zpc2libGUnKVxuICAgICAgdGhpcy51cGRhdGVTdGF0ZSgnJywgJ3dpZHRoJylcbiAgICAgIHRoaXMudXBkYXRlU3RhdGUoJycsICdoZWlnaHQnKVxuICAgICAgdGhpcy5ib3hDb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gJydcbiAgICAgIHRoaXMuYm94Q29udGFpbmVyLnN0eWxlLndpZHRoID0gJydcbiAgICB9XG4gIH1cblxuICBzZXRDbGlwYm9hcmQgKCkge1xuICAgIGNsaXBib2FyZC53cml0ZVRleHQodGhpcy5nZW5lcmF0b3JFbGVtLmlubmVySFRNTCkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLmNvcGllZENvZGUuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJhbGVydFwiPkNvcGllZCB0byBjbGlwYm9hcmQg8J+RjTwvZGl2PidcbiAgICB9LCAoKSA9PiB7XG4gICAgICB0aGlzLmNvcGllZENvZGUuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJhbGVydFwiPvCfkpQgTm90IFN1cHBvcnRlZDwvZGl2PidcbiAgICB9KVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jb3BpZWRDb2RlLmlubmVySFRNTCA9ICcnXG4gICAgfVxuICAgICAgLCAyMDAwKVxuICB9XG4gIHNldFVybEhhc2ggKGhhc2gpIHtcbiAgICBpZiAod2luZG93Lmhpc3RvcnkgJiYgJ3B1c2hTdGF0ZScgaW4gd2luZG93Lmhpc3RvcnkpIHtcbiAgICAgIGhpc3RvcnkucHVzaFN0YXRlKG51bGwsIG51bGwsICcjJyArIGhhc2gpXG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gaGFzaFxuICAgIH1cbiAgfVxuICB1cGRhdGVTdGF0ZSAodmFsLCBrZXkpIHtcbiAgICB0aGlzLnN0YXRlW2tleV0gPSB2YWxcbiAgICB0aGlzLnVwZGF0ZVVJKClcbiAgfVxuICB1cGRhdGVVSSAoKSB7XG4gICAgdGhpcy51cGRhdGVCb3JkZXJSYWRpdXMoKVxuICAgIHRoaXMudXBkYXRlQm94KClcbiAgfVxuICB1cGRhdGVCb3ggKCkge1xuICAgIGlmICghdGhpcy5lbmFibGVBZHZhbmNlZC5jaGVja2VkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgbGV0IHN0eWxlSGVpZ2h0ID0gdGhpcy5zdGF0ZS5oZWlnaHQgPT0gJycgPyAnJyA6IHRoaXMuc3RhdGUuaGVpZ2h0ICsgJ3B4J1xuICAgIGxldCBzdHlsZVdpZHRoID0gdGhpcy5zdGF0ZS53aWR0aCA9PSAnJyA/ICcnIDogdGhpcy5zdGF0ZS53aWR0aCArICdweCdcbiAgICB0aGlzLmJveENvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSBzdHlsZUhlaWdodFxuICAgIHRoaXMuYm94Q29udGFpbmVyLnN0eWxlLndpZHRoID0gc3R5bGVXaWR0aFxuICAgIHRoaXMuaGVpZ2h0SW5wdXQudmFsdWUgPSB0aGlzLnN0YXRlLmhlaWdodFxuICAgIHRoaXMud2lkdGhJbnB1dC52YWx1ZSA9IHRoaXMuc3RhdGUud2lkdGhcbiAgfVxuICBzYXZlVXJsUGFyYW1zICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBoYXZlIHRvIGltcGxlbWVudCB0aGUgbWV0aG9kIHNhdmVVcmxQYXJhbXMhJylcbiAgfVxuICBzdGF0aWMgbG9hZFVybFBhcmFtcyAodXJsKSB7XG4gICAgY29uc3QgcmVnZXggPSAvIyhcXGRcXGQ/fDEwMClcXC4oXFxkXFxkP3wxMDApXFwuKFxcZFxcZD98MTAwKVxcLihcXGRcXGQ/fDEwMCktKD86KFxcZFxcZD98MTAwKVxcLihcXGRcXGQ/fDEwMClcXC4oXFxkXFxkP3wxMDApXFwuKFxcZFxcZD98MTAwKSk/LShcXGQqKS4oXFxkKikvZ21cbiAgICBsZXQgcGFyYW1zVG9BdHRyaWJ1dGUgPSBbJ2xlZnQnLCAndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0Qm90dG9tJywgJ3RvcFJpZ2h0JywgJ3JpZ2h0Qm90dG9tJywgJ2JvdHRvbVJpZ2h0JywgJ2hlaWdodCcsICd3aWR0aCddXG4gICAgbGV0IGF0dHJpYnV0ZXMgPSB7fVxuICAgIGxldCBtXG4gICAgaWYgKCFyZWdleC50ZXN0KHVybCkpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIHJlZ2V4Lmxhc3RJbmRleCA9IDBcbiAgICB3aGlsZSAoKG0gPSByZWdleC5leGVjKHVybCkpICE9PSBudWxsKSB7XG4gICAgICBtLmZvckVhY2goKG1hdGNoLCBncm91cEluZGV4KSA9PiB7XG4gICAgICAgIGlmIChncm91cEluZGV4ICE9IDApIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzW3BhcmFtc1RvQXR0cmlidXRlW2dyb3VwSW5kZXggLSAxXV0gPSBtYXRjaFxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gYXR0cmlidXRlc1xuICB9XG59XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBNb3ZhYmxlIHtcbiAgY29uc3RydWN0b3IgKGVsZW0sIG9uQ2hhbmdlLCBheGlzID0gJ3gnLCBpbml0UG9zaXRpb24gPSAzMCwgb25EcmFnRW5kID0gKCkgPT4ge30pIHtcbiAgICB0aGlzLmF4aXMgPSBheGlzXG4gICAgdGhpcy5wb3MgPSBpbml0UG9zaXRpb25cbiAgICB0aGlzLmVsZW0gPSBlbGVtXG5cbiAgICB0aGlzLm9uQ2hhbmdlID0gb25DaGFuZ2VcbiAgICB0aGlzLm9uRHJhZ0VuZCA9IG9uRHJhZ0VuZFxuICAgIHRoaXMuZWxlbS5vbm1vdXNlZG93biA9IHRoaXMuZHJhZ01vdXNlRG93bi5iaW5kKHRoaXMpXG4gICAgdGhpcy5lbGVtLm9udG91Y2hzdGFydCA9IHRoaXMuZHJhZ01vdXNlRG93bi5iaW5kKHRoaXMpXG4gICAgdGhpcy5zZXRJbml0UG9zKGluaXRQb3NpdGlvbilcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMucG9zLCB0aGlzLmVsZW0uaWQpXG4gIH1cbiAgZHJhZ01vdXNlRG93biAoZSkge1xuICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudFxuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIHRoaXMuY3VycmVudFNwYW4gPSBlLnRhcmdldFxuICAgIHRoaXMuY3VycmVudFNwYW4uY2xhc3NMaXN0LmFkZCgnYWN0aXZlJylcblxuICAgIGRvY3VtZW50Lm9ubW91c2V1cCA9IHRoaXMuY2xvc2VEcmFnRWxlbWVudC5iaW5kKHRoaXMpXG4gICAgZG9jdW1lbnQub250b3VjaGVuZCA9IHRoaXMuY2xvc2VEcmFnRWxlbWVudC5iaW5kKHRoaXMpXG5cbiAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IHRoaXMuZWxlbWVudERyYWcuYmluZCh0aGlzKVxuICAgIGRvY3VtZW50Lm9udG91Y2htb3ZlID0gdGhpcy5lbGVtZW50RHJhZy5iaW5kKHRoaXMpXG4gIH1cbiAgZWxlbWVudERyYWcgKGUpIHtcbiAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnRcbiAgICBpZiAodHlwZW9mIFRvdWNoRXZlbnQgIT09ICd1bmRlZmluZWQnICYmIGUgaW5zdGFuY2VvZiBUb3VjaEV2ZW50KSB7XG4gICAgICB2YXIgdG91Y2hvYmogPSBlLmNoYW5nZWRUb3VjaGVzWzBdIC8vIGZpcnN0IGZpbmdlclxuICAgICAgdGhpcy5zZXRQb3ModG91Y2hvYmouY2xpZW50WCwgdG91Y2hvYmouY2xpZW50WSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRQb3MoZS5jbGllbnRYLCBlLmNsaWVudFkpXG4gICAgfVxuICB9XG4gIHNldEluaXRQb3MocG9zKSB7XG4gICAgaWYgKHRoaXMuYXhpcyA9PSAneCcpIHtcbiAgICAgIHRoaXMuZWxlbS5zdHlsZS5sZWZ0ID0gcG9zICsgJyUnXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZWxlbS5zdHlsZS50b3AgPSBwb3MgKyAnJSdcbiAgICB9XG4gIH1cbiAgc2V0UG9zIChfcG9zWCwgX3Bvc1kpIHtcbiAgICBsZXQgYm94UmVjdCA9IHRoaXMuZWxlbS5wYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgaWYgKHRoaXMuYXhpcyA9PSAneCcpIHtcbiAgICAgIHRoaXMucG9zID0gdGhpcy52YWxCZXR3ZWVuKCgoX3Bvc1ggLSA1IC0gYm94UmVjdFsnbGVmdCddKS50b0ZpeGVkKDApICogMTAwIC8gYm94UmVjdFsnd2lkdGgnXSkudG9GaXhlZCgwKSwgMCwgMTAwKVxuICAgICAgdGhpcy5lbGVtLnN0eWxlLmxlZnQgPSB0aGlzLnBvcyArICclJ1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBvcyA9IHRoaXMudmFsQmV0d2VlbigoKF9wb3NZIC0gNSAtIGJveFJlY3RbJ3RvcCddKS50b0ZpeGVkKDApICogMTAwIC8gYm94UmVjdFsnaGVpZ2h0J10pLnRvRml4ZWQoMCksIDAsIDEwMClcbiAgICAgIHRoaXMuZWxlbS5zdHlsZS50b3AgPSB0aGlzLnBvcyArICclJ1xuICAgIH1cbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMucG9zLCB0aGlzLmVsZW0uaWQpXG4gIH1cblxuICBjbG9zZURyYWdFbGVtZW50ICgpIHtcbiAgICB0aGlzLmN1cnJlbnRTcGFuLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpXG4gICAgdGhpcy5vbkRyYWdFbmQoKVxuICAgIGRvY3VtZW50Lm9ubW91c2V1cCA9IG51bGxcbiAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IG51bGxcbiAgICBkb2N1bWVudC5vbnRvdWNoZW5kID0gbnVsbFxuICAgIGRvY3VtZW50Lm9udG91Y2htb3ZlID0gbnVsbFxuICB9XG5cbiAgdmFsQmV0d2VlbiAodiwgbWluLCBtYXgpIHtcbiAgICByZXR1cm4gKE1hdGgubWluKG1heCwgTWF0aC5tYXgobWluLCB2KSkpXG4gIH1cbn0iLCJpbXBvcnQgQWRqdXN0YWJsZUJveCBmcm9tICcuL2FkanVzdGFibGVfYm94J1xuaW1wb3J0IE1vdmFibGUgZnJvbSAnLi9tb3ZhYmxlJ1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGdWxsQ29udHJvbEJveCBleHRlbmRzIEFkanVzdGFibGVCb3gge1xuICBpbml0U3RhdGUgKHN0YXRlKSB7XG4gICAgbGV0IGRlZmF1bHRTdGF0ZSA9IHtcbiAgICAgIGxlZnQ6IDEwLFxuICAgICAgcmlnaHQ6IDEwLFxuICAgICAgdG9wOiAxMCxcbiAgICAgIGJvdHRvbTogMTAsXG4gICAgICBsZWZ0Qm90dG9tOiA5MCxcbiAgICAgIHJpZ2h0Qm90dG9tOiA5MCxcbiAgICAgIHRvcFJpZ2h0OiA5MCxcbiAgICAgIGJvdHRvbVJpZ2h0OiA5MCxcbiAgICAgIHdpZHRoOiAnJyxcbiAgICAgIGhlaWdodDogJycsXG4gICAgICBhZHZhbmNlZE1vZGU6IGZhbHNlXG4gICAgfVxuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZSA9PSBudWxsID8gZGVmYXVsdFN0YXRlIDogc3RhdGVcbiAgfVxuXG4gIGluaXRIYW5kbGVzIChtb3ZlYWJsZUVsZW1zKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxlZnQ6IG5ldyBNb3ZhYmxlKG1vdmVhYmxlRWxlbXMubGVmdCwgdGhpcy51cGRhdGVTdGF0ZS5iaW5kKHRoaXMpLCAneScsIHRoaXMuc3RhdGUubGVmdCwgdGhpcy5zYXZlVXJsUGFyYW1zLmJpbmQodGhpcykpLFxuICAgICAgcmlnaHQ6IG5ldyBNb3ZhYmxlKG1vdmVhYmxlRWxlbXMucmlnaHQsIHRoaXMudXBkYXRlU3RhdGUuYmluZCh0aGlzKSwgJ3knLCB0aGlzLnN0YXRlLnJpZ2h0LCB0aGlzLnNhdmVVcmxQYXJhbXMuYmluZCh0aGlzKSksXG4gICAgICB0b3A6IG5ldyBNb3ZhYmxlKG1vdmVhYmxlRWxlbXMudG9wLCB0aGlzLnVwZGF0ZVN0YXRlLmJpbmQodGhpcyksICd4JywgdGhpcy5zdGF0ZS50b3AsIHRoaXMuc2F2ZVVybFBhcmFtcy5iaW5kKHRoaXMpKSxcbiAgICAgIGJvdHRvbTogbmV3IE1vdmFibGUobW92ZWFibGVFbGVtcy5ib3R0b20sIHRoaXMudXBkYXRlU3RhdGUuYmluZCh0aGlzKSwgJ3gnLCB0aGlzLnN0YXRlLmJvdHRvbSwgdGhpcy5zYXZlVXJsUGFyYW1zLmJpbmQodGhpcykpLFxuICAgICAgbGVmdEJvdHRvbTogbmV3IE1vdmFibGUobW92ZWFibGVFbGVtcy5sZWZ0Qm90dG9tLCB0aGlzLnVwZGF0ZVN0YXRlLmJpbmQodGhpcyksICd5JywgdGhpcy5zdGF0ZS5sZWZ0Qm90dG9tLCB0aGlzLnNhdmVVcmxQYXJhbXMuYmluZCh0aGlzKSksXG4gICAgICByaWdodEJvdHRvbTogbmV3IE1vdmFibGUobW92ZWFibGVFbGVtcy5yaWdodEJvdHRvbSwgdGhpcy51cGRhdGVTdGF0ZS5iaW5kKHRoaXMpLCAneScsIHRoaXMuc3RhdGUucmlnaHRCb3R0b20sIHRoaXMuc2F2ZVVybFBhcmFtcy5iaW5kKHRoaXMpKSxcbiAgICAgIHRvcFJpZ2h0OiBuZXcgTW92YWJsZShtb3ZlYWJsZUVsZW1zLnRvcFJpZ2h0LCB0aGlzLnVwZGF0ZVN0YXRlLmJpbmQodGhpcyksICd4JywgdGhpcy5zdGF0ZS50b3BSaWdodCwgdGhpcy5zYXZlVXJsUGFyYW1zLmJpbmQodGhpcykpLFxuICAgICAgYm90dG9tUmlnaHQ6IG5ldyBNb3ZhYmxlKG1vdmVhYmxlRWxlbXMuYm90dG9tUmlnaHQsIHRoaXMudXBkYXRlU3RhdGUuYmluZCh0aGlzKSwgJ3gnLCB0aGlzLnN0YXRlLmJvdHRvbVJpZ2h0LCB0aGlzLnNhdmVVcmxQYXJhbXMuYmluZCh0aGlzKSlcbiAgICB9XG4gIH1cbiAgdXBkYXRlQm9yZGVyUmFkaXVzICgpIHtcbiAgICB2YXIgYnJkID0gdGhpcy5zdGF0ZS50b3AgKyAnJSAnXG4gICAgYnJkICs9ICgxMDAgLSB0aGlzLnN0YXRlLnRvcFJpZ2h0KSArICclICdcbiAgICBicmQgKz0gKDEwMCAtIHRoaXMuc3RhdGUuYm90dG9tUmlnaHQpICsgJyUgJ1xuICAgIGJyZCArPSB0aGlzLnN0YXRlLmJvdHRvbSArICclIC8gJ1xuICAgIGJyZCArPSB0aGlzLnN0YXRlLmxlZnQgKyAnJSAnXG4gICAgYnJkICs9IHRoaXMuc3RhdGUucmlnaHQgKyAnJSAnXG4gICAgYnJkICs9ICgxMDAgLSB0aGlzLnN0YXRlLnJpZ2h0Qm90dG9tKSArICclICdcbiAgICBicmQgKz0gKDEwMCAtIHRoaXMuc3RhdGUubGVmdEJvdHRvbSkgKyAnJSAnXG4gICAgdGhpcy5zaGFwZUVsZW0uc3R5bGVbJ2JvcmRlci1yYWRpdXMnXSA9IGJyZFxuICAgIHRoaXMuZ2VuZXJhdG9yRWxlbS5pbm5lckhUTUwgPSBicmRcbiAgfVxuICBzYXZlVXJsUGFyYW1zICgpIHtcbiAgICBjb25zdCB7IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSwgd2lkdGgsIGhlaWdodCwgbGVmdEJvdHRvbSwgdG9wUmlnaHQsIHJpZ2h0Qm90dG9tLCBib3R0b21SaWdodCB9ID0gdGhpcy5zdGF0ZVxuICAgIGxldCBoYXNoID0gYCR7bGVmdH0uJHt0b3B9LiR7cmlnaHR9LiR7Ym90dG9tfS0ke2xlZnRCb3R0b219LiR7dG9wUmlnaHR9LiR7cmlnaHRCb3R0b219LiR7Ym90dG9tUmlnaHR9LSR7aGVpZ2h0fS4ke3dpZHRofWBcbiAgICB0aGlzLnNldFVybEhhc2goaGFzaClcbiAgfVxufVxuIiwiaW1wb3J0ICcuL3Njc3MvbWFpbi5zY3NzJ1xuaW1wb3J0IEZ1bGxDb250cm9sQm94IGZyb20gXCIuL2pzL2Z1bGxfY29udHJvbF9ib3hcIjtcblxudmFyIG1vdmFibGVzID0ge1xuICBsZWZ0OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGVmdCcpLFxuICByaWdodDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JpZ2h0JyksXG4gIGJvdHRvbTogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdHRvbScpLFxuICB0b3A6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3AnKSxcbiAgbGVmdEJvdHRvbTogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xlZnRCb3R0b20nKSxcbiAgcmlnaHRCb3R0b206IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyaWdodEJvdHRvbScpLFxuICBib3R0b21SaWdodDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdHRvbVJpZ2h0JyksXG4gIHRvcFJpZ2h0OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9wUmlnaHQnKVxufVxubGV0IHBhcmFtcyA9IEZ1bGxDb250cm9sQm94LmxvYWRVcmxQYXJhbXMod2luZG93LmxvY2F0aW9uLmhyZWYpXG52YXIgbXlCb3ggPSBuZXcgRnVsbENvbnRyb2xCb3goe21vdmVhYmxlRWxlbXM6IG1vdmFibGVzLCBpbml0U3RhdGU6IHBhcmFtc30pXG4iXSwic291cmNlUm9vdCI6IiJ9
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.