/*!************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[0].use[1]!./node_modules/normalize.css/normalize.css ***!
  \************************************************************************************************************************/
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */

/* Document
   ========================================================================== */

/**
 * 1. Correct the line height in all browsers.
 * 2. Prevent adjustments of font size after orientation changes in iOS.
 */

html {
  line-height: 1.15; /* 1 */
  -webkit-text-size-adjust: 100%; /* 2 */
}

/* Sections
   ========================================================================== */

/**
 * Remove the margin in all browsers.
 */

body {
  margin: 0;
}

/**
 * Render the `main` element consistently in IE.
 */

main {
  display: block;
}

/**
 * Correct the font size and margin on `h1` elements within `section` and
 * `article` contexts in Chrome, Firefox, and Safari.
 */

h1 {
  font-size: 2em;
  margin: 0.67em 0;
}

/* Grouping content
   ========================================================================== */

/**
 * 1. Add the correct box sizing in Firefox.
 * 2. Show the overflow in Edge and IE.
 */

hr {
  box-sizing: content-box; /* 1 */
  height: 0; /* 1 */
  overflow: visible; /* 2 */
}

/**
 * 1. Correct the inheritance and scaling of font size in all browsers.
 * 2. Correct the odd `em` font sizing in all browsers.
 */

pre {
  font-family: monospace, monospace; /* 1 */
  font-size: 1em; /* 2 */
}

/* Text-level semantics
   ========================================================================== */

/**
 * Remove the gray background on active links in IE 10.
 */

a {
  background-color: transparent;
}

/**
 * 1. Remove the bottom border in Chrome 57-
 * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
 */

abbr[title] {
  border-bottom: none; /* 1 */
  text-decoration: underline; /* 2 */
  text-decoration: underline dotted; /* 2 */
}

/**
 * Add the correct font weight in Chrome, Edge, and Safari.
 */

b,
strong {
  font-weight: bolder;
}

/**
 * 1. Correct the inheritance and scaling of font size in all browsers.
 * 2. Correct the odd `em` font sizing in all browsers.
 */

code,
kbd,
samp {
  font-family: monospace, monospace; /* 1 */
  font-size: 1em; /* 2 */
}

/**
 * Add the correct font size in all browsers.
 */

small {
  font-size: 80%;
}

/**
 * Prevent `sub` and `sup` elements from affecting the line height in
 * all browsers.
 */

sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}

sub {
  bottom: -0.25em;
}

sup {
  top: -0.5em;
}

/* Embedded content
   ========================================================================== */

/**
 * Remove the border on images inside links in IE 10.
 */

img {
  border-style: none;
}

/* Forms
   ========================================================================== */

/**
 * 1. Change the font styles in all browsers.
 * 2. Remove the margin in Firefox and Safari.
 */

button,
input,
optgroup,
select,
textarea {
  font-family: inherit; /* 1 */
  font-size: 100%; /* 1 */
  line-height: 1.15; /* 1 */
  margin: 0; /* 2 */
}

/**
 * Show the overflow in IE.
 * 1. Show the overflow in Edge.
 */

button,
input { /* 1 */
  overflow: visible;
}

/**
 * Remove the inheritance of text transform in Edge, Firefox, and IE.
 * 1. Remove the inheritance of text transform in Firefox.
 */

button,
select { /* 1 */
  text-transform: none;
}

/**
 * Correct the inability to style clickable types in iOS and Safari.
 */

button,
[type="button"],
[type="reset"],
[type="submit"] {
  -webkit-appearance: button;
}

/**
 * Remove the inner border and padding in Firefox.
 */

button::-moz-focus-inner,
[type="button"]::-moz-focus-inner,
[type="reset"]::-moz-focus-inner,
[type="submit"]::-moz-focus-inner {
  border-style: none;
  padding: 0;
}

/**
 * Restore the focus styles unset by the previous rule.
 */

button:-moz-focusring,
[type="button"]:-moz-focusring,
[type="reset"]:-moz-focusring,
[type="submit"]:-moz-focusring {
  outline: 1px dotted ButtonText;
}

/**
 * Correct the padding in Firefox.
 */

fieldset {
  padding: 0.35em 0.75em 0.625em;
}

/**
 * 1. Correct the text wrapping in Edge and IE.
 * 2. Correct the color inheritance from `fieldset` elements in IE.
 * 3. Remove the padding so developers are not caught out when they zero out
 *    `fieldset` elements in all browsers.
 */

legend {
  box-sizing: border-box; /* 1 */
  color: inherit; /* 2 */
  display: table; /* 1 */
  max-width: 100%; /* 1 */
  padding: 0; /* 3 */
  white-space: normal; /* 1 */
}

/**
 * Add the correct vertical alignment in Chrome, Firefox, and Opera.
 */

progress {
  vertical-align: baseline;
}

/**
 * Remove the default vertical scrollbar in IE 10+.
 */

textarea {
  overflow: auto;
}

/**
 * 1. Add the correct box sizing in IE 10.
 * 2. Remove the padding in IE 10.
 */

[type="checkbox"],
[type="radio"] {
  box-sizing: border-box; /* 1 */
  padding: 0; /* 2 */
}

/**
 * Correct the cursor style of increment and decrement buttons in Chrome.
 */

[type="number"]::-webkit-inner-spin-button,
[type="number"]::-webkit-outer-spin-button {
  height: auto;
}

/**
 * 1. Correct the odd appearance in Chrome and Safari.
 * 2. Correct the outline style in Safari.
 */

[type="search"] {
  -webkit-appearance: textfield; /* 1 */
  outline-offset: -2px; /* 2 */
}

/**
 * Remove the inner padding in Chrome and Safari on macOS.
 */

[type="search"]::-webkit-search-decoration {
  -webkit-appearance: none;
}

/**
 * 1. Correct the inability to style clickable types in iOS and Safari.
 * 2. Change font properties to `inherit` in Safari.
 */

::-webkit-file-upload-button {
  -webkit-appearance: button; /* 1 */
  font: inherit; /* 2 */
}

/* Interactive
   ========================================================================== */

/*
 * Add the correct display in Edge, IE 10+, and Firefox.
 */

details {
  display: block;
}

/*
 * Add the correct display in all browsers.
 */

summary {
  display: list-item;
}

/* Misc
   ========================================================================== */

/**
 * Add the correct display in IE 10+.
 */

template {
  display: none;
}

/**
 * Add the correct display in IE 10.
 */

[hidden] {
  display: none;
}

/*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./node_modules/sass-resources-loader/lib/loader.js??ruleSet[1].rules[1].use[4]!./src/styles/general/font-faces.scss ***!
  \******************************************************************************************************************************************************************************************************************************************************************************************************************************************/
@-webkit-keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
@keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
@font-face{
  font-family:Plovdiv-Script;
  font-style:normal;
  font-weight:400;
  src:url(93a2d28888cafab4b55c.woff2) format("woff2"), url(7777d38585860be6d049.woff) format("woff");
}
@font-face{
  font-family:Apparat;
  font-style:normal;
  font-weight:100;
  src:url(2e15a1559b026117596e.woff2) format("woff2"), url(3046a675ef2ddff16199.woff) format("woff");
}
@font-face{
  font-family:Apparat;
  font-style:italic;
  font-weight:100;
  src:url(12d7da3085445acece96.woff2) format("woff2"), url(bf2579423107aedf35c0.woff) format("woff");
}
@font-face{
  font-family:Apparat;
  font-style:normal;
  font-weight:200;
  src:url(a5c401be6934f2deed03.woff2) format("woff2"), url(c4d13a399f7df5b98b4b.woff) format("woff");
}
@font-face{
  font-family:Apparat;
  font-style:italic;
  font-weight:200;
  src:url(80a437647db8219ebade.woff2) format("woff2"), url(405335bcf4e65a4a2929.woff) format("woff");
}
@font-face{
  font-family:Apparat;
  font-style:normal;
  font-weight:300;
  src:url(14d451479761f8f5a186.woff2) format("woff2"), url(492f59df63a6371ce5f8.woff) format("woff");
}
@font-face{
  font-family:Apparat;
  font-style:italic;
  font-weight:300;
  src:url(2b30bd369f0f851110b0.woff2) format("woff2"), url(73c1dcd4eda576f9c4c1.woff) format("woff");
}
@font-face{
  font-family:Apparat;
  font-style:normal;
  font-weight:400;
  src:url(1703c544bb7d0da3a7ac.woff2) format("woff2"), url(3e928a01e189615e8705.woff) format("woff");
}
@font-face{
  font-family:Apparat;
  font-style:italic;
  font-weight:400;
  src:url(631675df3140ecc90d73.woff2) format("woff2"), url(2e4df1326337996f07f6.woff) format("woff");
}
@font-face{
  font-family:Apparat;
  font-style:normal;
  font-weight:500;
  src:url(f5085f1c386dd78691d6.woff2) format("woff2"), url(dd21ac5bc8cb053cbbf8.woff) format("woff");
}
@font-face{
  font-family:Apparat;
  font-style:italic;
  font-weight:500;
  src:url(4e5910899060c83255dd.woff2) format("woff2"), url(88e64aceb12a4a7dae66.woff) format("woff");
}
@font-face{
  font-family:Apparat;
  font-style:normal;
  font-weight:600;
  src:url(c1e2255ffdc5988ea9e5.woff2) format("woff2"), url(f62d09278534d7bfe1cf.woff) format("woff");
}
@font-face{
  font-family:Apparat;
  font-style:italic;
  font-weight:600;
  src:url(7791a56dba6eeeb9e364.woff2) format("woff2"), url(23220abd9925b5ec29a9.woff) format("woff");
}
@font-face{
  font-family:Apparat;
  font-style:normal;
  font-weight:700;
  src:url(b1b7bd389d4be1f865e3.woff2) format("woff2"), url(b9c537beb6f2feb8991b.woff) format("woff");
}
@font-face{
  font-family:Apparat;
  font-style:italic;
  font-weight:700;
  src:url(0ee80db3fa3874e352f6.woff2) format("woff2"), url(714d61e405443424be99.woff) format("woff");
}
@font-face{
  font-family:Apparat;
  font-style:normal;
  font-weight:800;
  src:url(74db987cd525bae09e6a.woff2) format("woff2"), url(c919e74ab3ea1f2d103e.woff) format("woff");
}
@font-face{
  font-family:Apparat;
  font-style:italic;
  font-weight:800;
  src:url(5ad77675923ee520d84c.woff2) format("woff2"), url(5985e33c179c5826e380.woff) format("woff");
}
@font-face{
  font-family:Apparat;
  font-style:normal;
  font-weight:900;
  src:url(78530ac267324e60e7c0.woff2) format("woff2"), url(1ed40654e6cb0efaaa71.woff) format("woff");
}
@font-face{
  font-family:Apparat;
  font-style:italic;
  font-weight:900;
  src:url(e1a3f303d3150a41367b.woff2) format("woff2"), url(480fdf3f7e3b7474d0ac.woff) format("woff");
}
/*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./node_modules/sass-resources-loader/lib/loader.js??ruleSet[1].rules[1].use[4]!./src/styles/general/scaffolding.scss ***!
  \*******************************************************************************************************************************************************************************************************************************************************************************************************************************************/
@-webkit-keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
@keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
*,
*::before,
*::after{
  -webkit-box-sizing:border-box;
          box-sizing:border-box;
}
html{
  font-size:5.329024vw;
}
body{
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
  position:relative;
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-orient:vertical;
  -webkit-box-direction:normal;
      -ms-flex-direction:column;
          flex-direction:column;
  min-height:100vh;
  -webkit-tap-highlight-color:rgba(0, 0, 0, 0);
  font:400 1rem Plovdiv-Script, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen-Sans, Ubuntu, Cantarell, Helvetica Neue, sans-serif;
  -webkit-font-feature-settings:"ss01" 1;
          font-feature-settings:"ss01" 1;
  color:#01202f;
  cursor:default;
  background-color:#01202f;
}
body *::-moz-selection{
  background:rgba(142, 202, 230, 0.5);
}
body *::selection{
  background:rgba(142, 202, 230, 0.5);
}
h1,
h2,
h3,
h4,
h5,
h6{
  font-family:Apparat, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen-Sans, Ubuntu, Cantarell, Helvetica Neue, sans-serif;
  font-weight:700;
  line-height:1.2;
  color:#219ebc;
  cursor:text;
}
h1:first-child,
h2:first-child,
h3:first-child,
h4:first-child,
h5:first-child,
h6:first-child{
  margin-top:0;
}
h1{
  font-size:1.64706rem;
  text-align:center;
}
h2{
  font-size:1.41176rem;
}
strong{
  font-weight:700;
}
a{
  text-decoration:none;
  cursor:pointer;
}
img{
  pointer-events:none;
  -webkit-user-select:none;
     -moz-user-select:none;
      -ms-user-select:none;
          user-select:none;
}
svg{
  overflow:visible;
  overflow:initial;
}
.zn__beyond{
  padding-top:4.23529rem;
  margin-top:-4.23529rem;
}
@media screen and (min-width: 320px){
  html{
    font-size:calc(
    17Px + 17 *
      (
        (100vw - 320Px) / 960
      )
  );
  }
}
@media screen and (min-width: 1280px){
  html{
    font-size:34Px;
  }
}
/*!****************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./node_modules/sass-resources-loader/lib/loader.js??ruleSet[1].rules[1].use[4]!./src/styles/general/wrappers.scss ***!
  \****************************************************************************************************************************************************************************************************************************************************************************************************************************************/
@-webkit-keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
@keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
[class*=wrp-]{
  width:100%;
  margin-left:auto;
  margin-right:auto;
}
.zn__wrp-layout{
  padding-right:0.88235rem;
  padding-left:0.88235rem;
  max-width:1280Px;
}
.zn__wrp-page{
  max-width:29.41176rem;
}
.zn__wrp-article{
  max-width:20rem;
}
/*!**************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./node_modules/sass-resources-loader/lib/loader.js??ruleSet[1].rules[1].use[4]!./src/styles/general/global.scss ***!
  \**************************************************************************************************************************************************************************************************************************************************************************************************************************************/
@-webkit-keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
@keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
[id=cookie-law-info-bar]{
  font-size:3.761664vw;
  padding:0 0 0.44118rem !important;
  font-family:Apparat, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen-Sans, Ubuntu, Cantarell, Helvetica Neue, sans-serif !important;
  font-weight:400 !important;
  line-height:1.5;
  cursor:text;
  background-color:transparent !important;
  -webkit-box-shadow:none !important;
          box-shadow:none !important;
}
[id=cookie-law-info-bar] .zn__wrp-layout{
  padding-right:0.44118rem;
  padding-left:0.44118rem;
}
[id=cookie-law-info-bar] .cli-bar-container{
  -ms-flex-wrap:wrap;
      flex-wrap:wrap;
  padding:7.5Px 15Px;
  -webkit-box-shadow:3Px 3Px 0 #023047;
          box-shadow:3Px 3Px 0 #023047;
}
[id=cookie-law-info-bar] .cli-bar-btn_container{
  -webkit-box-flex:1;
      -ms-flex:1 1;
          flex:1 1;
  -webkit-box-pack:end;
      -ms-flex-pack:end;
          justify-content:flex-end;
  margin:3.75Px auto !important;
}
[id=cookie-law-info-bar] .cli-bar-message{
  margin:3.75Px auto !important;
  text-align:left;
}
[id=cookie-law-info-bar] .cli-plugin-button{
  display:block;
  margin:3.75Px 0;
  border-radius:0.29412rem;
}
[id=cookie-law-info-bar] .cli-plugin-button:hover{
  background-color:#023047 !important;
}
@-webkit-keyframes zn__spinner{
  0%{
    top:36Px;
    left:36Px;
    width:0;
    height:0;
    opacity:1;
  }
  100%{
    width:72Px;
    height:72Px;
    top:0;
    left:0;
    opacity:0;
  }
}
@keyframes zn__spinner{
  0%{
    top:36Px;
    left:36Px;
    width:0;
    height:0;
    opacity:1;
  }
  100%{
    width:72Px;
    height:72Px;
    top:0;
    left:0;
    opacity:0;
  }
}
.spinner{
  width:80Px;
  height:80Px;
  position:relative;
  display:inline-block;
}
.spinner div{
  position:absolute;
  border:4Px solid #fff;
  border-radius:50%;
  opacity:1;
  -webkit-animation:zn__spinner 1s cubic-bezier(0, 0.2, 0.8, 1) infinite;
          animation:zn__spinner 1s cubic-bezier(0, 0.2, 0.8, 1) infinite;
}
.spinner div:nth-child(2){
  -webkit-animation-delay:-0.5s;
          animation-delay:-0.5s;
}
@media screen and (min-width: 320px){
  [id=cookie-law-info-bar]{
    font-size:calc(
    12Px + 2.4 *
      (
        (100vw - 320Px) / 960
      )
  );
  }
}
@media screen and (min-width: 1280px){
  [id=cookie-law-info-bar]{
    font-size:14.4Px;
  }
}
/*!*************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./node_modules/sass-resources-loader/lib/loader.js??ruleSet[1].rules[1].use[4]!./src/styles/general/print.scss ***!
  \*************************************************************************************************************************************************************************************************************************************************************************************************************************************/
@-webkit-keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
@keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
/*!*************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./node_modules/sass-resources-loader/lib/loader.js??ruleSet[1].rules[1].use[4]!./src/styles/layout/header.scss ***!
  \*************************************************************************************************************************************************************************************************************************************************************************************************************************************/
.zn__header h1,
.zn__header h2,
.zn__header h3,
.zn__header h4,
.zn__header h5,
.zn__header h6,
.zn__header p{
  color:#fff;
}
.zn__header .zn__meta{
  color:#ffce56;
}
.zn__header .zn__text-link{
  color:#8ecae6;
  border-bottom:1Px dotted rgba(142, 202, 230, 0.33);
}
.zn__header .zn__text-link:hover{
  color:#ffb703;
}
.zn__header .zn__text-link:active{
  color:#ffce56;
}
.zn__header .zn__wave{
  position:absolute;
  top:calc(100% - 1Px);
  width:100%;
  height:3.5294117647em;
}
.zn__header .zn__wave .zn__inner{
  width:100%;
  height:100%;
  position:absolute;
  overflow:hidden;
}
.zn__header .zn__wave .zn__inner svg{
  width:100%;
  height:100%;
  position:absolute;
  left:50%;
  min-width:37.64706rem;
  -webkit-transform:translateX(-50%);
          transform:translateX(-50%);
}
@-webkit-keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
@keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
.zn__header .zn__scroll-btn{
  position:absolute;
  bottom:1.17647rem;
  left:50%;
  z-index:1;
  pointer-events:auto;
  background-color:#8ecae6;
  opacity:1;
  -webkit-transform:translateX(-50%);
          transform:translateX(-50%);
  -webkit-animation:zn__slide 1s ease-in-out infinite alternate;
          animation:zn__slide 1s ease-in-out infinite alternate;
}
.zn__header .zn__scroll-btn:hover{
  background-color:#ffb703;
}
.zn__header .zn__scroll-btn:active{
  background-color:#ffce56;
}
.zn__header .zn__scroll-btn svg{
  -webkit-transform:rotate(180deg);
          transform:rotate(180deg);
}
body:not(.zn__scrollable) .zn__header .zn__scroll-btn{
  pointer-events:none;
  opacity:0;
}
.zn__header{
  position:sticky;
  z-index:10;
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-align:center;
      -ms-flex-align:center;
          align-items:center;
  -webkit-box-pack:center;
      -ms-flex-pack:center;
          justify-content:center;
}
.zn__header .zn__wave{
  pointer-events:none;
}
.zn__header .zn__wave svg{
  fill:#01202f;
}
.zn__header .zn__wave svg *{
  pointer-events:auto;
}
.zn__mobile .zn__header .zn__wave .zn__scroll-btn{
  bottom:4.11765rem;
}
.zn__header .zn__logo{
  width:3.8235294118em;
  height:3.8235294118em;
  margin-right:0.5882352941em;
  margin-left:0.5882352941em;
  overflow:hidden;
  border-radius:50%;
  -webkit-transition:-webkit-transform 0.1s ease-in-out;
  transition:-webkit-transform 0.1s ease-in-out;
  transition:transform 0.1s ease-in-out;
  transition:transform 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;
}
.zn__header .zn__logo svg{
  width:100%;
}
.zn__header .zn__logo svg .c1{
  fill:transparent;
}
.zn__menu{
  position:fixed;
  top:0;
  left:50%;
  z-index:10;
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-align:center;
      -ms-flex-align:center;
          align-items:center;
  -webkit-box-pack:center;
      -ms-flex-pack:center;
          justify-content:center;
  width:100%;
  max-width:17.94118rem;
  height:4.7058823529em;
  background-color:#01202f;
  border-radius:0 0 1.4705882353em 1.4705882353em;
  -webkit-transition:font-size 0.1s ease-in-out;
  transition:font-size 0.1s ease-in-out;
  -webkit-transform:translateX(-50%);
          transform:translateX(-50%);
}
.zn__menu span{
  -webkit-box-flex:1;
      -ms-flex:1 1;
          flex:1 1;
}
.zn__menu span:first-child{
  text-align:right;
}
body:not(.home) .zn__menu, .zn__scrolled .zn__menu{
  font-size:0.7rem;
  background-color:transparent;
}
@media (hover: hover){
  .zn__header .zn__logo:hover{
    -webkit-transform:scale(1.3) rotate(-10deg);
            transform:scale(1.3) rotate(-10deg);
  }
}
/*!***********************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./node_modules/sass-resources-loader/lib/loader.js??ruleSet[1].rules[1].use[4]!./src/styles/layout/main.scss ***!
  \***********************************************************************************************************************************************************************************************************************************************************************************************************************************/
@-webkit-keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
@keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
.zn__main{
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-flex:1;
      -ms-flex:1 1;
          flex:1 1;
  -webkit-box-orient:vertical;
  -webkit-box-direction:normal;
      -ms-flex-direction:column;
          flex-direction:column;
  min-height:100vh;
  overflow:hidden;
}
.zn__content{
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-flex:1;
      -ms-flex:1 1;
          flex:1 1;
  -webkit-box-orient:vertical;
  -webkit-box-direction:normal;
      -ms-flex-direction:column;
          flex-direction:column;
  min-height:9.41176rem;
  padding:4.70588rem 0 7.52941rem;
  background-color:#fff7e2;
}
/*!*************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./node_modules/sass-resources-loader/lib/loader.js??ruleSet[1].rules[1].use[4]!./src/styles/layout/footer.scss ***!
  \*************************************************************************************************************************************************************************************************************************************************************************************************************************************/
.zn__footer .zn__wrp-layout h1,
.zn__footer .zn__wrp-layout h2,
.zn__footer .zn__wrp-layout h3,
.zn__footer .zn__wrp-layout h4,
.zn__footer .zn__wrp-layout h5,
.zn__footer .zn__wrp-layout h6,
.zn__footer .zn__wrp-layout p{
  color:#fff;
}
.zn__footer .zn__wrp-layout .zn__meta{
  color:#ffce56;
}
.zn__footer .zn__wrp-layout .zn__text-link{
  color:#8ecae6;
  border-bottom:1Px dotted rgba(142, 202, 230, 0.33);
}
.zn__footer .zn__wrp-layout .zn__text-link:hover{
  color:#ffb703;
}
.zn__footer .zn__wrp-layout .zn__text-link:active{
  color:#ffce56;
}
@-webkit-keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
@keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
.zn__footer{
  font-size:3.761664vw;
  position:relative;
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-align:center;
      -ms-flex-align:center;
          align-items:center;
  -webkit-box-pack:start;
      -ms-flex-pack:start;
          justify-content:flex-start;
  width:100vw;
  text-align:center;
  -webkit-user-select:none;
     -moz-user-select:none;
      -ms-user-select:none;
          user-select:none;
  background-color:#01202f;
}
.zn__footer .zn__wrp-layout{
  position:relative;
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-orient:vertical;
  -webkit-box-direction:normal;
      -ms-flex-direction:column;
          flex-direction:column;
  -webkit-box-align:center;
      -ms-flex-align:center;
          align-items:center;
  -webkit-box-pack:center;
      -ms-flex-pack:center;
          justify-content:center;
  height:100%;
  background-color:transparent;
}
.zn__footer .zn__wave{
  position:absolute;
  bottom:100%;
  width:100%;
  height:5.88235rem;
  overflow:hidden;
}
.zn__footer .zn__wave svg{
  width:100%;
  height:100%;
  position:absolute;
  left:50%;
  min-width:37.64706rem;
  fill:#01202f;
  -webkit-transform:translateX(-50%);
          transform:translateX(-50%);
}
.zn__footer .zn__logo{
  width:3.82353rem;
  height:3.82353rem;
  position:absolute;
  top:-4.85294rem;
  z-index:1;
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-pack:center;
      -ms-flex-pack:center;
          justify-content:center;
}
.zn__footer .zn__logo svg{
  width:100%;
  height:100%;
}
.zn__footer .zn__logo svg .c1{
  fill:transparent;
}
.zn__networks{
  font-size:5.329024vw;
  padding-top:0.8823529412em;
  padding-bottom:0.8823529412em;
  margin-right:-0.5882352941em;
  margin-left:-0.5882352941em;
  -webkit-box-pack:center;
      -ms-flex-pack:center;
          justify-content:center;
  margin-bottom:0.88235rem;
  border-top:1Px dotted #8ecae6;
}
.zn__networks,
.zn__networks > *{
  margin-right:0.5882352941em;
  margin-left:0.5882352941em;
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
}
.zn__networks a{
  width:1.4117647059em;
  height:1.4117647059em;
  margin-right:0.5882352941em;
  margin-left:0.5882352941em;
  display:block;
}
.zn__networks svg{
  width:100%;
  height:100%;
}
@media screen and (min-width: 320px){
  .zn__footer{
    font-size:calc(
    12Px + 2.4 *
      (
        (100vw - 320Px) / 960
      )
  );
  }
  .zn__networks{
    font-size:calc(
    17Px + 3.4 *
      (
        (100vw - 320Px) / 960
      )
  );
  }
}
@media screen and (min-width: 1280px){
  .zn__footer{
    font-size:14.4Px;
  }
  .zn__networks{
    font-size:20.4Px;
  }
}
@media (hover: hover){
  .zn__networks a,
.zn__networks a svg{
    -webkit-transition:all 0.1s ease-in-out;
    transition:all 0.1s ease-in-out;
  }
  .zn__networks a:hover{
    -webkit-transform:scale(1.2);
            transform:scale(1.2);
  }
  .zn__networks a:hover svg{
    -webkit-filter:drop-shadow(0 0 0.11765rem rgba(0, 0, 0, 0.8));
            filter:drop-shadow(0 0 0.11765rem rgba(0, 0, 0, 0.8));
  }
}
/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./node_modules/sass-resources-loader/lib/loader.js??ruleSet[1].rules[1].use[4]!./src/styles/pages/home.scss ***!
  \**********************************************************************************************************************************************************************************************************************************************************************************************************************************/
.zn__when h1, .zn__where h1, .zn__what h1,
.zn__when h2,
.zn__where h2,
.zn__what h2,
.zn__when h3,
.zn__where h3,
.zn__what h3,
.zn__when h4,
.zn__where h4,
.zn__what h4,
.zn__when h5,
.zn__where h5,
.zn__what h5,
.zn__when h6,
.zn__where h6,
.zn__what h6,
.zn__when p,
.zn__where p,
.zn__what p{
  color:#fff;
}
.zn__when .zn__meta, .zn__where .zn__meta, .zn__what .zn__meta{
  color:#ffce56;
}
.zn__when .zn__text-link, .zn__where .zn__text-link, .zn__what .zn__text-link{
  color:#8ecae6;
  border-bottom:1Px dotted rgba(142, 202, 230, 0.33);
}
.zn__when .zn__text-link:hover, .zn__where .zn__text-link:hover, .zn__what .zn__text-link:hover{
  color:#ffb703;
}
.zn__when .zn__text-link:active, .zn__where .zn__text-link:active, .zn__what .zn__text-link:active{
  color:#ffce56;
}
.zn__when .zn__wave, .zn__where .zn__wave, .zn__what .zn__wave{
  position:absolute;
  left:50%;
  width:100%;
  min-width:37.64706rem;
  -webkit-transform:translateX(-50%);
          transform:translateX(-50%);
}
.zn__when .zn__wave > svg, .zn__where .zn__wave > svg, .zn__what .zn__wave > svg{
  width:100%;
  height:100%;
}
@-webkit-keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
@keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
.zn__when, .zn__where, .zn__what{
  position:relative;
}
.zn__when .zn__wave, .zn__where .zn__wave, .zn__what .zn__wave{
  bottom:calc(100% - 1Px);
}
.home .zn__header{
  min-height:calc(
      100vh - 4.4117647059em
    );
  background:-webkit-gradient(linear, left top, left bottom, from(#023047), color-stop(75%, #01202f));
  background:linear-gradient(to bottom, #023047 0%, #01202f 75%);
}
.home section{
  text-align:center;
}
.home section > .zn__wrp-layout{
  position:relative;
  z-index:1;
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-orient:vertical;
  -webkit-box-direction:normal;
      -ms-flex-direction:column;
          flex-direction:column;
  -webkit-box-align:center;
      -ms-flex-align:center;
          align-items:center;
}
.home .zn__content{
  padding-bottom:0;
  background-color:#ddeff7;
}
.home .zn__content > section{
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-flex:1;
      -ms-flex:1 1;
          flex:1 1;
  -webkit-box-orient:vertical;
  -webkit-box-direction:normal;
      -ms-flex-direction:column;
          flex-direction:column;
  -webkit-box-pack:center;
      -ms-flex-pack:center;
          justify-content:center;
}
.home .zn__text{
  margin-top:0;
  text-align:center;
}
.home .zn__previous{
  margin-top:1.76471rem;
}
.home .zn__previous .zn__episodes-list{
  margin-bottom:-0.88235rem;
}
.home .zn__previous .zn__title{
  display:block;
  margin-bottom:0.88235rem;
}
.zn__info{
  padding-top:6.4705882353em;
  padding-bottom:1.76471rem;
}
.zn__info h1{
  color:#ffb703;
}
.zn__new-episode{
  position:relative;
  width:100%;
  margin-top:0.88235rem;
}
.zn__new-episode .zn__card{
}
.zn__new-episode .zn__card a{
  background-image:none;
  border:1Px solid #fff;
  border-radius:0.58824rem;
}
.zn__new-episode .zn__card .zn__meta{
  top:1Px;
  border-radius:0.58824rem 0;
}
.zn__new-episode .zn__card .zn__body{
  max-width:none;
  padding:0.76471rem;
}
.zn__new-episode .zn__card .zn__thumb{
  width:100%;
  height:100%;
  position:absolute;
  padding-top:0;
  margin:0;
  -webkit-filter:sepia(1) opacity(0.2);
          filter:sepia(1) opacity(0.2);
  border-top-left-radius:0.58824rem;
}
.zn__new-episode .zn__card .zn__thumb span::before{
  width:100%;
  height:100%;
  position:absolute;
  top:0;
  right:0;
  bottom:0;
  left:0;
  z-index:1;
  content:"";
  background-image:-webkit-gradient(linear, left top, left bottom, color-stop(45%, rgba(255, 243, 214, 0.75)), color-stop(66%, rgba(254, 253, 251, 0.1)));
  background-image:linear-gradient(to bottom, rgba(255, 243, 214, 0.75) 45%, rgba(254, 253, 251, 0.1) 66%);
}
.zn__new-episode .zn__heading{
  font-size:1.64706rem !important;
}
.zn__new-episode .zn__meta,
.zn__new-episode .zn__body{
  position:relative;
  z-index:1;
}
.zn__new-episode .zn__heading,
.zn__new-episode .zn__text,
.zn__new-episode .zn__player iframe{
  max-width:20rem;
  margin-left:auto;
  margin-right:auto;
}
.zn__new-episode .zn__text{
  position:relative;
  z-index:2;
}
.zn__new-episode .zn__text p{
  margin-bottom:0;
}
.zn__new-episode .zn__player{
  padding:0 0.76471rem 1.52941rem;
}
.zn__new-episode .zn__player iframe{
  width:100%;
  margin-bottom:0;
  border:0;
  -webkit-box-shadow:none;
          box-shadow:none;
  -webkit-transition:border-color 0.1s ease-in-out;
  transition:border-color 0.1s ease-in-out;
}
.zn__episodes{
  padding-bottom:8.47059rem;
}
.zn__what{
  padding-bottom:7.76471rem;
  background-color:#25b0d2;
}
.zn__what::-moz-selection,
.zn__what *::-moz-selection{
  background:rgba(33, 158, 188, 0.5);
}
.zn__what::-moz-selection, .zn__what *::-moz-selection{
  background:rgba(33, 158, 188, 0.5);
}
.zn__what::selection,
.zn__what *::selection{
  background:rgba(33, 158, 188, 0.5);
}
.zn__what .zn__text-link{
  color:#fff7e2;
  border-bottom:1Px dotted rgba(255, 247, 226, 0.33);
}
.zn__what .zn__text-link:hover{
  color:#fffefc;
}
.zn__what .zn__text-link:active{
  color:white;
}
.zn__what .zn__trailer-player{
  margin-top:-5rem;
}
.zn__what .zn__trailer-player a{
  color:#25b0d2;
}
.zn__what .zn__wave{
  height:6.76471rem;
}
.zn__what .zn__wave svg{
  fill:#25b0d2;
}
.zn__where{
  padding-bottom:8.11765rem;
  background-color:#219ebc;
}
.zn__where .zn__wave{
  height:9.70588rem;
}
.zn__where .zn__wave svg{
  fill:#219ebc;
}
.zn__where .zn__icon{
  margin-top:-3rem;
  background-color:#fff;
}
.zn__where .zn__icon svg{
  fill:#219ebc;
}
.zn__when{
  padding-bottom:7.64706rem;
  background-color:#1d8ca6;
}
.zn__when .zn__icon{
  margin-top:-1.5rem;
  background-color:#fff;
}
.zn__when .zn__icon svg{
  fill:#1d8ca6;
}
.zn__when .zn__wave{
  height:6.76471rem;
}
.zn__when .zn__wave svg{
  fill:#1d8ca6;
}
.zn__icon{
  width:3.29412rem;
  height:3.29412rem;
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-align:center;
      -ms-flex-align:center;
          align-items:center;
  -webkit-box-pack:center;
      -ms-flex-pack:center;
          justify-content:center;
  margin:0.29412rem;
  overflow:hidden;
  border-radius:50%;
}
.zn__icon svg{
  width:50%;
  height:50%;
}
@media screen and (max-width: 599px){
  .zn__new-episode{
    max-width:21.17647rem;
    margin-left:auto;
    margin-right:auto;
  }
}
@media (hover: hover){
  .zn__new-episode .zn__card a:hover::before{
    opacity:0;
  }
}
@media screen and (max-width: 600px){
  .zn__new-episode .zn__heading{
    padding-left:2rem;
    padding-right:2rem;
  }
}
/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./node_modules/sass-resources-loader/lib/loader.js??ruleSet[1].rules[1].use[4]!./src/styles/pages/blog.scss ***!
  \**********************************************************************************************************************************************************************************************************************************************************************************************************************************/
@-webkit-keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
@keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./node_modules/sass-resources-loader/lib/loader.js??ruleSet[1].rules[1].use[4]!./src/styles/pages/page.scss ***!
  \**********************************************************************************************************************************************************************************************************************************************************************************************************************************/
@-webkit-keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
@keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
.zn__page{
  text-align:center;
}
.zn__page .sharedaddy{
  display:none;
}
.error404 .zn__content,
.page-template .zn__content,
.blog .zn__content{
  background-color:#ddeff7;
}
.error404 .zn__content{
  -webkit-box-pack:center;
      -ms-flex-pack:center;
          justify-content:center;
}
/*!************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./node_modules/sass-resources-loader/lib/loader.js??ruleSet[1].rules[1].use[4]!./src/styles/pages/single.scss ***!
  \************************************************************************************************************************************************************************************************************************************************************************************************************************************/
.zn__single .zn__head h1,
.zn__single .zn__head h2,
.zn__single .zn__head h3,
.zn__single .zn__head h4,
.zn__single .zn__head h5,
.zn__single .zn__head h6,
.zn__single .zn__head p{
  color:#fff;
}
.zn__single .zn__head .zn__meta{
  color:#ffce56;
}
.zn__single .zn__head .zn__text-link{
  color:#8ecae6;
  border-bottom:1Px dotted rgba(142, 202, 230, 0.33);
}
.zn__single .zn__head .zn__text-link:hover{
  color:#ffb703;
}
.zn__single .zn__head .zn__text-link:active{
  color:#ffce56;
}
.zn__single .zn__head .zn__wave{
  position:absolute;
  top:calc(100% - 1Px);
  width:100%;
  height:3.5294117647em;
}
.zn__single .zn__head .zn__wave .zn__inner{
  width:100%;
  height:100%;
  position:absolute;
  overflow:hidden;
}
.zn__single .zn__head .zn__wave .zn__inner svg{
  width:100%;
  height:100%;
  position:absolute;
  left:50%;
  min-width:37.64706rem;
  -webkit-transform:translateX(-50%);
          transform:translateX(-50%);
}
@-webkit-keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
@keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
.zn__single .zn__head .zn__scroll-btn{
  position:absolute;
  bottom:1.17647rem;
  left:50%;
  z-index:1;
  pointer-events:auto;
  background-color:#8ecae6;
  opacity:1;
  -webkit-transform:translateX(-50%);
          transform:translateX(-50%);
  -webkit-animation:zn__slide 1s ease-in-out infinite alternate;
          animation:zn__slide 1s ease-in-out infinite alternate;
}
.zn__single .zn__head .zn__scroll-btn:hover{
  background-color:#ffb703;
}
.zn__single .zn__head .zn__scroll-btn:active{
  background-color:#ffce56;
}
.zn__single .zn__head .zn__scroll-btn svg{
  -webkit-transform:rotate(180deg);
          transform:rotate(180deg);
}
body:not(.zn__scrollable) .zn__single .zn__head .zn__scroll-btn, .zn__single body:not(.zn__scrollable) .zn__head .zn__scroll-btn{
  pointer-events:none;
  opacity:0;
}
.single .zn__content{
  padding-top:0;
}
.zn__single{
  text-align:center;
}
.zn__single .zn__head{
  position:relative;
  padding-top:4.70588rem;
  margin-bottom:4.70588rem;
  background-color:#023047;
  border-radius:0;
}
.zn__single .zn__head .zn__wave svg{
  fill:#023047;
}
.zn__single .zn__episode{
  position:relative;
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-orient:vertical;
  -webkit-box-direction:normal;
      -ms-flex-direction:column;
          flex-direction:column;
  -webkit-box-pack:center;
      -ms-flex-pack:center;
          justify-content:center;
  min-height:calc(
      100vh - 4.4117647059em
    );
}
.zn__single .zn__episode .zn__wrp-layout{
  z-index:1;
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-flex:1;
      -ms-flex:1 1;
          flex:1 1;
  -webkit-box-orient:vertical;
  -webkit-box-direction:normal;
      -ms-flex-direction:column;
          flex-direction:column;
  -webkit-box-pack:center;
      -ms-flex-pack:center;
          justify-content:center;
}
.zn__single .zn__episode .zn__wrp-layout > div:nth-child(1){
  -webkit-box-flex:1;
      -ms-flex:1 1;
          flex:1 1;
}
.zn__single .zn__episode .zn__wrp-layout > div:not(:nth-child(1)){
  -webkit-box-flex:2;
      -ms-flex:2 1;
          flex:2 1;
}
.zn__single .zn__episode .zn__meta{
  position:absolute;
  top:4.70588rem;
  left:50%;
  z-index:2;
  -webkit-transform:translateX(-50%);
          transform:translateX(-50%);
}
.zn__single .zn__episode h1{
  margin-top:2.29412rem;
}
.zn__single .zn__excerpt{
  font-size:5.329024vw;
  position:relative;
  z-index:2;
  margin-top:0.29412rem;
  font-weight:400;
}
.zn__single .zn__excerpt > span{
  display:block;
  margin-bottom:0.29412rem;
  font-family:Plovdiv-Script, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen-Sans, Ubuntu, Cantarell, Helvetica Neue, sans-serif;
  font-size:1.1em;
  color:#ffb703;
  text-align:center;
}
.zn__single .zn__excerpt p{
  margin-top:0;
}
.zn__single .zn__more{
  position:relative;
  z-index:1;
  display:-webkit-inline-box;
  display:-ms-inline-flexbox;
  display:inline-flex;
  -webkit-box-orient:vertical;
  -webkit-box-direction:normal;
      -ms-flex-direction:column;
          flex-direction:column;
  width:auto;
  margin:0 0.44118rem -0.88235rem;
  line-height:1.2;
  border-bottom-right-radius:0;
  border-bottom-left-radius:0;
}
.zn__single .zn__more p{
  margin-bottom:0;
}
.zn__single .zn__more,
.zn__single .zn__more label{
  cursor:text;
}
.zn__single .zn__more label{
  margin-bottom:0;
  color:#ffb703 !important;
}
.zn__single .zn__more .zn__meta{
  color:#fff !important;
}
.zn__single .zn__cover{
  position:relative;
  -webkit-perspective:58.82353rem;
          perspective:58.82353rem;
  margin:-0.88235rem -0.88235rem 3vw;
}
.zn__single .zn__cover::before{
  position:absolute;
  top:0;
  right:0;
  bottom:0;
  left:0;
  bottom:2.35294rem;
  content:"";
  border-radius:0.58824rem 0.58824rem 0 0;
  -webkit-box-shadow:0 0 1.88235rem -0.29412rem #b6aa8c;
          box-shadow:0 0 1.88235rem -0.29412rem #b6aa8c;
  -webkit-transform:rotateX(-4deg);
          transform:rotateX(-4deg);
  -webkit-transform-origin:top center;
          transform-origin:top center;
}
.zn__single .zn__cover picture{
  position:relative;
  display:block;
  width:100%;
  height:0;
  padding-top:56.25%;
  overflow:hidden;
  border:1Px solid white;
  border-bottom-width:1Px;
  border-radius:0.58824rem 0.58824rem 0 0;
}
.zn__single .zn__cover picture span{
  width:100%;
  height:100%;
  position:absolute;
  top:0;
  left:0;
  display:block;
}
.zn__single .zn__cover img{
  position:absolute;
  left:50%;
  -webkit-transform:translateX(-50%);
          transform:translateX(-50%);
  width:100%;
  height:100%;
  display:block;
  -o-object-fit:cover;
     object-fit:cover;
}
.zn__single .sharedaddy{
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-pack:center;
      -ms-flex-pack:center;
          justify-content:center;
  margin-top:0.88235rem;
}
.zn__single .sharedaddy .share-customize-link,
.zn__single .sharedaddy .share-end{
  display:none;
}
.zn__single .sharedaddy .sd-block{
  width:50% !important;
  min-width:11.76471rem;
}
.zn__single .sharedaddy .sd-title{
  font-size:3.761664vw;
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-orient:vertical;
  -webkit-box-direction:normal;
      -ms-flex-direction:column;
          flex-direction:column;
  -webkit-box-align:center;
      -ms-flex-align:center;
          align-items:center;
  font-family:Plovdiv-Script, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen-Sans, Ubuntu, Cantarell, Helvetica Neue, sans-serif;
  font-weight:normal;
  color:#219ebc;
  text-align:center;
}
.zn__single .sharedaddy .sd-title::before{
  border-top:1Px dotted #219ebc;
}
.zn__single .sharedaddy .sd-content{
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-pack:center;
      -ms-flex-pack:center;
          justify-content:center;
}
.zn__single .sharedaddy li{
  margin:0 0.29412rem;
}
.jp-sharing-input-touch .sd-content ul li{
  padding-right:0.29412rem;
  padding-left:0.29412rem;
}
@media screen and (min-width: 320px){
  .zn__single .zn__excerpt{
    font-size:calc(
    17Px + 3.4 *
      (
        (100vw - 320Px) / 960
      )
  );
  }
  .zn__single .sharedaddy .sd-title{
    font-size:calc(
    12Px + 2.4 *
      (
        (100vw - 320Px) / 960
      )
  );
  }
}
@media screen and (min-width: 1280px){
  .zn__single .zn__excerpt{
    font-size:20.4Px;
  }
  .zn__single .sharedaddy .sd-title{
    font-size:14.4Px;
  }
}
@media screen and (min-width: 600px){
  .zn__single .zn__cover picture{
    padding-top:42.8571428571%;
  }
}
/*!***********************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./node_modules/sass-resources-loader/lib/loader.js??ruleSet[1].rules[1].use[4]!./src/styles/pages/about.scss ***!
  \***********************************************************************************************************************************************************************************************************************************************************************************************************************************/
@-webkit-keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
@keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
.page-template-about .zn__trailer-player{
  margin-top:0.88235rem;
}
.page-template-about .zn__trailer-player a{
  color:#023047;
}
@media screen and (min-width: 780px){
  .page-template-about .zn__post-body{
    -webkit-column-count:2;
       -moz-column-count:2;
            column-count:2;
    -webkit-column-gap:0.88235rem;
       -moz-column-gap:0.88235rem;
            column-gap:0.88235rem;
  }
  .page-template-about .zn__post-body p{
    display:inline-block;
    page-break-inside:avoid;
    -webkit-column-break-inside:avoid;
       -moz-column-break-inside:avoid;
            break-inside:avoid;
    margin-top:0;
  }
}
/*!**************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./node_modules/sass-resources-loader/lib/loader.js??ruleSet[1].rules[1].use[4]!./src/styles/pages/error404.scss ***!
  \**************************************************************************************************************************************************************************************************************************************************************************************************************************************/
@-webkit-keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
@keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
.error404 section{
  text-align:center;
}
.error404 section ul{
  display:inline-block;
  margin:0;
  text-align:left;
}
.error404 section li{
  padding-top:0.29412rem;
  padding-bottom:0.29412rem;
}
/*!*********************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./node_modules/sass-resources-loader/lib/loader.js??ruleSet[1].rules[1].use[4]!./src/styles/components/typography.scss ***!
  \*********************************************************************************************************************************************************************************************************************************************************************************************************************************************/
@-webkit-keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
@keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
.zn__title{
  font-family:Plovdiv-Script, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen-Sans, Ubuntu, Cantarell, Helvetica Neue, sans-serif;
  font-weight:normal;
  text-align:center;
}
.zn__text{
  font:400 1rem Apparat, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen-Sans, Ubuntu, Cantarell, Helvetica Neue, sans-serif;
  line-height:1.5;
  cursor:text;
}
.zn__meta{
  font-size:3.761664vw;
  font-family:Plovdiv-Script, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen-Sans, Ubuntu, Cantarell, Helvetica Neue, sans-serif;
  line-height:normal;
  color:#666;
}
@media screen and (min-width: 320px){
  .zn__meta{
    font-size:calc(
    12Px + 2.4 *
      (
        (100vw - 320Px) / 960
      )
  );
  }
}
@media screen and (min-width: 1280px){
  .zn__meta{
    font-size:14.4Px;
  }
}
/*!*****************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./node_modules/sass-resources-loader/lib/loader.js??ruleSet[1].rules[1].use[4]!./src/styles/components/panels.scss ***!
  \*****************************************************************************************************************************************************************************************************************************************************************************************************************************************/
.zn__panel-cornflower h1, .zn__panel-blue-green h1, .zn__panel-prussian-blue h1,
.zn__panel-cornflower h2,
.zn__panel-blue-green h2,
.zn__panel-prussian-blue h2,
.zn__panel-cornflower h3,
.zn__panel-blue-green h3,
.zn__panel-prussian-blue h3,
.zn__panel-cornflower h4,
.zn__panel-blue-green h4,
.zn__panel-prussian-blue h4,
.zn__panel-cornflower h5,
.zn__panel-blue-green h5,
.zn__panel-prussian-blue h5,
.zn__panel-cornflower h6,
.zn__panel-blue-green h6,
.zn__panel-prussian-blue h6,
.zn__panel-cornflower p,
.zn__panel-blue-green p,
.zn__panel-prussian-blue p{
  color:#fff;
}
.zn__panel-cornflower .zn__meta, .zn__panel-blue-green .zn__meta, .zn__panel-prussian-blue .zn__meta{
  color:#ffce56;
}
.zn__panel-cornflower .zn__text-link, .zn__panel-blue-green .zn__text-link, .zn__panel-prussian-blue .zn__text-link{
  color:#8ecae6;
  border-bottom:1Px dotted rgba(142, 202, 230, 0.33);
}
.zn__panel-cornflower .zn__text-link:hover, .zn__panel-blue-green .zn__text-link:hover, .zn__panel-prussian-blue .zn__text-link:hover{
  color:#ffb703;
}
.zn__panel-cornflower .zn__text-link:active, .zn__panel-blue-green .zn__text-link:active, .zn__panel-prussian-blue .zn__text-link:active{
  color:#ffce56;
}
@-webkit-keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
@keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
[class*=panel-]{
  padding:0.88235rem;
  border-radius:0.58824rem;
}
[class*=panel-] + section[class*=panel-]{
  margin-top:0.88235rem;
}
.zn__panel-card{
  background-color:#f9f4e7;
  -webkit-box-shadow:0 0 1.17647rem -0.58824rem rgba(52, 126, 163, 0.8) !important;
          box-shadow:0 0 1.17647rem -0.58824rem rgba(52, 126, 163, 0.8) !important;
}
.zn__panel-sheet{
  background-color:#fcfcfc;
  -webkit-box-shadow:0 0 0.58824rem -0.29412rem #b6aa8c;
          box-shadow:0 0 0.58824rem -0.29412rem #b6aa8c;
}
.zn__panel-prussian-blue{
  background-color:#023047;
}
.zn__panel-blue-green{
  background-color:#219ebc;
}
.zn__panel-cornflower{
  background-color:#8ecae6;
}
.zn__panel-cornflower::-moz-selection,
.zn__panel-cornflower *::-moz-selection{
  background:rgba(95, 135, 154, 0.5);
}
.zn__panel-cornflower::-moz-selection, .zn__panel-cornflower *::-moz-selection{
  background:rgba(95, 135, 154, 0.5);
}
.zn__panel-cornflower::selection,
.zn__panel-cornflower *::selection{
  background:rgba(95, 135, 154, 0.5);
}
@media screen and (max-width: 779px){
  .zn__panel-transparent{
    padding-right:0 !important;
    padding-left:0 !important;
  }
}
/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./node_modules/sass-resources-loader/lib/loader.js??ruleSet[1].rules[1].use[4]!./src/styles/components/breadcrumbs.scss ***!
  \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************/
@charset "UTF-8";
@-webkit-keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
@keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
.zn__breadcrumbs{
  padding-right:0.88235rem;
  padding-left:0.88235rem;
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-align:start;
      -ms-flex-align:start;
          align-items:flex-start;
  -webkit-box-pack:justify;
      -ms-flex-pack:justify;
          justify-content:space-between;
  width:100%;
  text-align:center;
}
.zn__breadcrumbs .zn__se{
  text-transform:uppercase;
}
.zn__breadcrumbs.zn__breadcrumbs-head{
  margin-bottom:0.88235rem;
}
.zn__breadcrumbs b{
  font-family:sans-serif;
}
.zn__breadcrumbs a{
  position:relative;
  text-transform:uppercase;
}
.zn__breadcrumbs a::before, .zn__breadcrumbs a::after{
  padding-right:0.29412rem;
  padding-left:0.29412rem;
  position:absolute;
}
.zn__breadcrumbs .zn__backward{
  margin-left:0.29412rem;
  text-align:left;
}
.zn__breadcrumbs .zn__backward a::before{
  right:100%;
  content:"←";
}
.zn__breadcrumbs .zn__forward{
  margin-right:0.29412rem;
  text-align:right;
}
.zn__breadcrumbs .zn__forward a::after{
  left:100%;
  content:"→";
}
.zn__breadcrumbs span{
  -webkit-box-flex:1;
      -ms-flex:1 1;
          flex:1 1;
}
.zn__breadcrumbs time{
  -webkit-box-flex:3;
      -ms-flex:3 1;
          flex:3 1;
  cursor:text;
}
/*!***************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./node_modules/sass-resources-loader/lib/loader.js??ruleSet[1].rules[1].use[4]!./src/styles/components/card.scss ***!
  \***************************************************************************************************************************************************************************************************************************************************************************************************************************************/
@-webkit-keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
@keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
.zn__card{
  position:relative;
  display:block;
  width:100%;
  text-align:left;
}
.zn__card a{
  position:relative;
  z-index:1;
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-orient:vertical;
  -webkit-box-direction:normal;
      -ms-flex-direction:column;
          flex-direction:column;
  height:100%;
  padding:0;
  overflow:hidden;
  background-image:-webkit-gradient(linear, left top, right top, from(#f9f4e7), color-stop(33%, #fefdfb), color-stop(66%, #fefdfb), to(#f9f4e7));
  background-image:linear-gradient(to right, #f9f4e7 0%, #fefdfb 33%, #fefdfb 66%, #f9f4e7 100%);
  border-radius:0.58824rem 0;
}
.zn__card a::before{
  position:absolute;
  top:0;
  right:0;
  bottom:0;
  left:0;
  z-index:0;
  content:"";
  background-image:-webkit-gradient(linear, left top, left bottom, from(#fefdfb), color-stop(75%, #fefdfb));
  background-image:linear-gradient(to bottom, #fefdfb 0%, #fefdfb 75%);
  border-radius:0.58824rem 0;
  opacity:0;
  -webkit-transition:opacity 0.2s ease-in-out;
  transition:opacity 0.2s ease-in-out;
}
.zn__card a,
.zn__card a *{
  color:#01202f;
}
.zn__card .zn__thumb{
  position:relative;
  display:block;
  height:0;
  padding-top:56.25%;
  margin:1Px;
  overflow:hidden;
  border-top-left-radius:0.58824rem;
}
.zn__card .zn__thumb span{
  width:100%;
  height:100%;
  position:absolute;
  top:0;
  left:0;
  display:block;
}
.zn__card .zn__thumb img{
  position:absolute;
  left:50%;
  -webkit-transform:translateX(-50%);
          transform:translateX(-50%);
  width:100%;
  height:100%;
  display:block;
  -o-object-fit:cover;
     object-fit:cover;
}
.zn__card .zn__body{
  z-index:2;
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-flex:1;
      -ms-flex:1 1;
          flex:1 1;
  -webkit-box-orient:vertical;
  -webkit-box-direction:normal;
      -ms-flex-direction:column;
          flex-direction:column;
  max-width:18.82353rem;
  padding:0.88235rem;
  margin-left:auto;
  margin-right:auto;
  text-shadow:1Px 1Px 0 #fff;
}
.zn__card .zn__heading{
  font-size:6.896384vw;
  display:block;
  margin-bottom:0.88235rem;
  font-family:Apparat, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen-Sans, Ubuntu, Cantarell, Helvetica Neue, sans-serif;
  font-weight:600;
  line-height:1.2;
  text-align:center;
  cursor:inherit;
}
.zn__card .zn__text{
  font-size:5.329024vw;
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-orient:vertical;
  -webkit-box-direction:normal;
      -ms-flex-direction:column;
          flex-direction:column;
  font-weight:400;
  text-align:left;
  cursor:pointer;
}
.zn__card .zn__text > span{
  padding-top:0.29412rem;
  padding-bottom:0.29412rem;
  display:block;
  margin:0 -0.88235rem 0.29412rem;
  font-family:Plovdiv-Script, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen-Sans, Ubuntu, Cantarell, Helvetica Neue, sans-serif;
  font-size:1.1em;
  color:#16697d;
  text-align:center;
  text-shadow:none;
  background-image:-webkit-gradient(linear, left top, right top, from(#f9f4e7), color-stop(33%, #fff3d6), color-stop(66%, #fff3d6), to(#f9f4e7));
  background-image:linear-gradient(to right, #f9f4e7 0%, #fff3d6 33%, #fff3d6 66%, #f9f4e7 100%);
}
.zn__card .zn__text p{
  margin-top:0;
}
.zn__card .zn__meta{
  font-size:3.761664vw;
  position:absolute;
  top:1Px;
  left:1Px;
  z-index:2;
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-orient:vertical;
  -webkit-box-direction:normal;
      -ms-flex-direction:column;
          flex-direction:column;
  -webkit-box-align:center;
      -ms-flex-align:center;
          align-items:center;
  -webkit-box-pack:center;
      -ms-flex-pack:center;
          justify-content:center;
  padding:0.11765rem 0.47059rem;
  margin-bottom:0.88235rem;
  color:#f9f4e7;
  text-align:center;
  text-transform:uppercase;
  pointer-events:none;
  background-color:#023047;
  border-radius:0.58824rem 0;
}
.zn__card .zn__meta b{
  font-family:sans-serif;
}
.zn__card .zn__meta span{
  display:block;
  font-size:0.75em;
}
@media (hover: hover){
  .zn__card a:hover::before{
    opacity:1;
  }
}
@media screen and (max-width: 599px){
  .zn__card{
    max-width:21.17647rem;
    margin-left:auto;
    margin-right:auto;
  }
}
@media screen and (min-width: 320px){
  .zn__card .zn__heading{
    font-size:calc(
    22Px + 4.4 *
      (
        (100vw - 320Px) / 960
      )
  );
  }
  .zn__card .zn__text{
    font-size:calc(
    17Px + 3.4 *
      (
        (100vw - 320Px) / 960
      )
  );
  }
  .zn__card .zn__meta{
    font-size:calc(
    12Px + 2.4 *
      (
        (100vw - 320Px) / 960
      )
  );
  }
}
@media screen and (min-width: 1280px){
  .zn__card .zn__heading{
    font-size:26.4Px;
  }
  .zn__card .zn__text{
    font-size:20.4Px;
  }
  .zn__card .zn__meta{
    font-size:14.4Px;
  }
}
/*!************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./node_modules/sass-resources-loader/lib/loader.js??ruleSet[1].rules[1].use[4]!./src/styles/components/episodes-list.scss ***!
  \************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
@-webkit-keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
@keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
.zn__episodes-list{
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -ms-flex-wrap:wrap;
      flex-wrap:wrap;
  width:100%;
  margin-bottom:0;
}
.zn__episodes-list .zn__card{
  margin-bottom:1.76471rem;
}
@media screen and (min-width: 600px){
  .zn__episodes-list .zn__card .zn__body{
    display:grid;
    grid-template-rows:1fr auto 2fr;
  }
  .zn__episodes-list .zn__card .zn__heading{
    -ms-flex-item-align:center;
        align-self:center;
  }
}
@media screen and (min-width: 600px) and (max-width: 1023px){
  .zn__episodes-list .zn__card{
    width:calc(
        50% - 0.44118rem
      );
  }
  .zn__episodes-list .zn__card:not(:nth-child(2n+2)){
    margin-right:0.88235rem;
  }
}
@media screen and (min-width: 1024px){
  .zn__episodes-list .zn__card{
    width:calc(
        33.3333% - 0.58824rem
      );
  }
  .zn__episodes-list .zn__card:not(:nth-child(3n+3)){
    margin-right:0.88235rem;
  }
}
/*!****************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./node_modules/sass-resources-loader/lib/loader.js??ruleSet[1].rules[1].use[4]!./src/styles/components/links.scss ***!
  \****************************************************************************************************************************************************************************************************************************************************************************************************************************************/
@charset "UTF-8";
@-webkit-keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
@keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
.zn__post-body a,
.zn__text-link{
  color:#16697d;
  border-bottom:1Px dotted rgba(22, 105, 125, 0.33);
}
.zn__post-body a,
.zn__post-body a *,
.zn__text-link,
.zn__text-link *{
  -webkit-transition:border-bottom 0.05s ease-in-out, color 0.05s ease-in-out;
  transition:border-bottom 0.05s ease-in-out, color 0.05s ease-in-out;
}
.zn__post-body a:hover,
.zn__text-link:hover{
  color:#219ebc;
  border-bottom:1Px dotted transparent !important;
}
.zn__post-body a:active,
.zn__text-link:active{
  color:#6abed2;
}
.zn__ref-link{
  position:relative;
  display:inline-block;
  font-size:0.70588rem;
}
.zn__ref-link a::after{
  padding-right:0.29412rem;
  padding-left:0.29412rem;
  position:absolute;
  left:100%;
  content:"→";
}
/*!********************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./node_modules/sass-resources-loader/lib/loader.js??ruleSet[1].rules[1].use[4]!./src/styles/components/platforms.scss ***!
  \********************************************************************************************************************************************************************************************************************************************************************************************************************************************/
@-webkit-keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
@keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
.zn__platforms .zn__trailer-player{
  margin-bottom:0.88235rem;
}
.zn__platforms ul{
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-pack:center;
      -ms-flex-pack:center;
          justify-content:center;
  line-height:0;
}
.zn__platforms ul,
.zn__platforms li{
  padding:0;
  margin:0;
  list-style:none;
}
.zn__platforms li{
  display:block;
  margin:0 0.58824rem;
}
.zn__platforms a{
  display:block;
}
.zn__platforms svg{
  height:2.35294rem;
}
@media screen and (max-width: 1024px){
  .zn__platforms ul{
    -webkit-box-orient:vertical;
    -webkit-box-direction:normal;
        -ms-flex-direction:column;
            flex-direction:column;
    -webkit-box-align:center;
        -ms-flex-align:center;
            align-items:center;
  }
  .zn__platforms li{
    margin:0.58824rem 0;
  }
}
/*!*****************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./node_modules/sass-resources-loader/lib/loader.js??ruleSet[1].rules[1].use[4]!./src/styles/components/player.scss ***!
  \*****************************************************************************************************************************************************************************************************************************************************************************************************************************************/
@-webkit-keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
@keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
.zn__player{
  position:relative;
}
.zn__player > *{
  -webkit-transition:opacity 0.1s ease-in-out;
  transition:opacity 0.1s ease-in-out;
}
.zn__player iframe{
  position:relative;
  z-index:1;
  -webkit-box-sizing:content-box;
          box-sizing:content-box;
  display:block;
  margin-bottom:0.88235rem;
  overflow:hidden;
  border:1Px solid #557483;
  border-radius:0.58824rem;
  -webkit-box-shadow:0 0 10rem #557483;
          box-shadow:0 0 10rem #557483;
  opacity:0;
}
.zn__player .spinner{
  position:absolute;
  top:50%;
  left:50%;
  -webkit-transform:translate(-50%, -50%);
          transform:translate(-50%, -50%);
}
/*!*****************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./node_modules/sass-resources-loader/lib/loader.js??ruleSet[1].rules[1].use[4]!./src/styles/components/ribbon.scss ***!
  \*****************************************************************************************************************************************************************************************************************************************************************************************************************************************/
@-webkit-keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
@keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
.zn__ribbon{
  width:5.88235rem;
  height:5.88235rem;
  position:absolute;
  top:-0.58824rem;
  right:-0.58824rem;
  z-index:2;
  overflow:hidden;
  pointer-events:none;
}
.zn__ribbon::before, .zn__ribbon::after{
  width:0.58824rem;
  height:0.58824rem;
  position:absolute;
  z-index:0;
  display:block;
  content:" ";
  background:#b68200;
}
.zn__ribbon::before{
  top:0;
  left:0;
}
.zn__ribbon::after{
  right:0;
  bottom:0;
}
.zn__ribbon > div{
  position:relative;
  z-index:1;
  width:141.5%;
  -webkit-transform:translateY(-100%);
          transform:translateY(-100%);
}
.zn__ribbon > div > span{
  display:block;
  padding:0.29412rem 20%;
  color:#fff;
  text-align:center;
  background:#ffb703;
  -webkit-box-shadow:0 0.11765rem 0.58824rem -0.47059rem #030200;
          box-shadow:0 0.11765rem 0.58824rem -0.47059rem #030200;
  -webkit-transform:rotate(45deg);
          transform:rotate(45deg);
  -webkit-transform-origin:bottom left;
          transform-origin:bottom left;
}
/*!************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./node_modules/sass-resources-loader/lib/loader.js??ruleSet[1].rules[1].use[4]!./src/styles/components/scroll-button.scss ***!
  \************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
@-webkit-keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
@keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
.zn__scroll-btn{
  width:40Px;
  height:40Px;
  position:fixed;
  right:0.58824rem;
  bottom:0.58824rem;
  z-index:10;
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-align:center;
      -ms-flex-align:center;
          align-items:center;
  -webkit-box-pack:center;
      -ms-flex-pack:center;
          justify-content:center;
  overflow:hidden;
  pointer-events:none;
  background-color:#16697d;
  border-radius:50%;
  opacity:0;
  -webkit-transition:opacity 0.05s ease-in-out, background-color 0.05s ease-in-out;
  transition:opacity 0.05s ease-in-out, background-color 0.05s ease-in-out;
}
.zn__scroll-btn:hover{
  background-color:#219ebc;
}
.zn__scroll-btn:active{
  background-color:#6abed2;
}
.zn__scroll-btn svg{
  width:50%;
  height:50%;
  fill:#fff;
}
.zn__scroll-btn.zn__active{
  pointer-events:auto;
  opacity:1;
}
/*!****************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./node_modules/sass-resources-loader/lib/loader.js??ruleSet[1].rules[1].use[4]!./src/styles/components/sheet.scss ***!
  \****************************************************************************************************************************************************************************************************************************************************************************************************************************************/
@charset "UTF-8";
@-webkit-keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
@keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
.zn__sheet *[id]{
  padding-top:4.23529rem;
  margin-top:-4.23529rem;
}
.zn__sheet figcaption{
  font-size:3.761664vw;
  margin-top:0.29412rem;
  font-family:Plovdiv-Script, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen-Sans, Ubuntu, Cantarell, Helvetica Neue, sans-serif;
  text-align:center;
}
.zn__sheet .zn__post-body{
  font-size:5.329024vw;
  position:relative;
  line-height:1.5;
  text-align:left;
}
.zn__sheet .zn__post-body h1:not(.sd-title),
.zn__sheet .zn__post-body h2:not(.sd-title),
.zn__sheet .zn__post-body h3:not(.sd-title),
.zn__sheet .zn__post-body h4:not(.sd-title),
.zn__sheet .zn__post-body h5:not(.sd-title),
.zn__sheet .zn__post-body h6:not(.sd-title){
  padding-top:4.23529rem;
  margin-top:-3.38824rem;
  margin-bottom:0.5em;
  line-height:1.2;
  color:#16697d;
}
.zn__sheet .zn__post-body h1 + p,
.zn__sheet .zn__post-body h1 + :not(p) + p,
.zn__sheet .zn__post-body h2 + p,
.zn__sheet .zn__post-body h2 + :not(p) + p,
.zn__sheet .zn__post-body h3 + p,
.zn__sheet .zn__post-body h3 + :not(p) + p,
.zn__sheet .zn__post-body h4 + p,
.zn__sheet .zn__post-body h4 + :not(p) + p,
.zn__sheet .zn__post-body h5 + p,
.zn__sheet .zn__post-body h5 + :not(p) + p,
.zn__sheet .zn__post-body h6 + p,
.zn__sheet .zn__post-body h6 + :not(p) + p{
  text-indent:1.41176rem;
}
.zn__sheet .zn__post-body > h2:first-child{
  margin-top:-4.23529rem;
}
.zn__sheet .zn__post-body > p:first-of-type:not([class]){
  text-indent:0;
}
.zn__sheet .zn__post-body > p:first-of-type:not([class])::after{
  display:block;
  content:"";
}
.zn__sheet .zn__post-body > p:first-of-type:not([class])::first-letter{
  float:left;
  padding:0 0.05em;
  margin-top:0.05882rem;
  margin-right:0.1em;
  margin-bottom:-0.11765rem;
  font-size:4.5em;
  font-weight:700;
  line-height:0.9;
  color:#023047;
  background-color:#f9fdff;
  border:1Px solid #16697d;
  border-radius:0.05em;
  -webkit-box-shadow:-2Px -2Px 0 rgba(22, 105, 125, 0.33);
          box-shadow:-2Px -2Px 0 rgba(22, 105, 125, 0.33);
}
@-moz-document url-prefix(""){
  .zn__sheet .zn__post-body > p:first-of-type:not([class])::first-letter{
    padding:0.05em;
    margin-top:0.23529rem;
  }
}
.zn__sheet .zn__post-body h2{
  font-size:1.4em;
}
.zn__sheet .zn__post-body h3{
  font-size:1.2em;
}
.zn__sheet .zn__post-body blockquote{
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
  display:block;
  padding:0.88235rem 1.76471rem;
  font-family:Plovdiv-Script, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen-Sans, Ubuntu, Cantarell, Helvetica Neue, sans-serif;
  text-align:center;
  background:#ddeff7;
  border:0;
  border-radius:0 0.58824rem 0.58824rem 0.58824rem;
  -webkit-box-shadow:-1Px -1Px 0 #c7d7de;
          box-shadow:-1Px -1Px 0 #c7d7de;
}
.zn__sheet .zn__post-body blockquote em{
  font-style:normal;
}
.zn__sheet .zn__post-body blockquote p{
  margin-top:0;
}
.zn__sheet .zn__post-body blockquote p:last-child{
  margin-bottom:0;
}
.zn__sheet .zn__post-body blockquote cite{
  -webkit-font-smoothing:subpixel-antialiased;
  -moz-osx-font-smoothing:auto;
}
.zn__sheet .zn__post-body blockquote cite::before{
  content:"— ";
}
.zn__sheet .zn__post-body .has-background{
  background-color:transparent !important;
}
.zn__sheet .zn__post-body .wp-block-image figcaption,
.zn__sheet .zn__post-body .wp-block-embed figcaption{
  color:#666;
}
.zn__sheet .zn__post-body .wp-block-quote,
.zn__sheet .zn__post-body .wp-block-embed{
  clear:both;
}
.zn__sheet .zn__post-body .wp-block-jetpack-slideshow{
  overflow:hidden;
  border-radius:0.58824rem !important;
}
.zn__sheet .zn__post-body .wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_slide figure{
  overflow:hidden;
  background-color:#023047;
  border-radius:0.58824rem !important;
}
.zn__sheet .zn__post-body .wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_slide figure .wp-block-jetpack-slideshow_image{
  border-radius:0 !important;
}
.zn__sheet .zn__post-body hr{
  display:block;
  width:50% !important;
  min-width:11.76471rem;
  margin:1rem auto;
  cursor:default;
  border:0;
  border-bottom:1Px dotted #219ebc;
  opacity:1;
}
.zn__sheet .zn__post-body figure{
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-orient:vertical;
  -webkit-box-direction:normal;
      -ms-flex-direction:column;
          flex-direction:column;
  -webkit-box-align:center;
      -ms-flex-align:center;
          align-items:center;
}
.zn__sheet .zn__post-body figure img{
  width:100%;
  height:auto;
  overflow:hidden;
  border-radius:0.58824rem !important;
}
.zn__sheet .zn__post-body .wp-block-embed.is-type-video{
}
.zn__sheet .zn__post-body .wp-block-embed.is-type-video .wp-block-embed__wrapper{
  position:relative;
  width:100%;
  height:0;
  padding-top:56.25%;
}
.zn__sheet .zn__post-body .wp-block-embed.is-type-video .wp-block-embed__wrapper iframe{
  width:100%;
  height:100%;
  position:absolute;
  top:0;
  left:0;
}
.zn__sheet .zn__post-body iframe{
  overflow:hidden;
  border-radius:0.58824rem;
}
.zn__sheet .zn__post-body .wp-block-table{
  font-size:0.8em;
}
.zn__sheet .zn__post-body .wp-block-table th,
.zn__sheet .zn__post-body .wp-block-table td{
  vertical-align:baseline;
  vertical-align:initial;
}
.zn__sheet .zn__post-body .wp-block-table.is-style-stripes{
  border-bottom:0;
}
.zn__sheet .zn__post-body .wp-block-table.is-style-stripes tbody tr:nth-child(odd){
  background-color:#ddeff7;
}
.zn__sheet .zn__post-body .wp-block-table td:first-child{
  font-style:italic;
  border-radius:0.58824rem 0 0 0.58824rem;
}
.zn__sheet .zn__post-body .wp-block-table td:last-child{
  border-radius:0 0.58824rem 0.58824rem 0;
}
@media screen and (min-width: 320px){
  .zn__sheet figcaption{
    font-size:calc(
    12Px + 2.4 *
      (
        (100vw - 320Px) / 960
      )
  );
  }
  .zn__sheet .zn__post-body{
    font-size:calc(
    17Px + 3.4 *
      (
        (100vw - 320Px) / 960
      )
  );
  }
}
@media screen and (min-width: 1280px){
  .zn__sheet figcaption{
    font-size:14.4Px;
  }
  .zn__sheet .zn__post-body{
    font-size:20.4Px;
  }
}
@media screen and (max-width: 1023px){
  .zn__sheet .zn__post-body .wp-block-column .wp-block-image,
.zn__sheet .zn__post-body .alignleft,
.zn__sheet .zn__post-body .alignright{
    float:none;
    width:100%;
    max-width:17.94118rem;
    margin-left:auto;
    margin-right:auto;
  }
}
/*!*************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[1].use[3]!./node_modules/sass-resources-loader/lib/loader.js??ruleSet[1].rules[1].use[4]!./src/styles/components/trailer-player.scss ***!
  \*************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
@-webkit-keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
@keyframes zn__slide{
  from{
    -webkit-transform:translate(-50%, -50%);
            transform:translate(-50%, -50%);
  }
  to{
    -webkit-transform:translate(-50%, 0);
            transform:translate(-50%, 0);
  }
}
.zn__trailer-player{
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-orient:vertical;
  -webkit-box-direction:normal;
      -ms-flex-direction:column;
          flex-direction:column;
  -webkit-box-align:center;
      -ms-flex-align:center;
          align-items:center;
  -webkit-box-pack:center;
      -ms-flex-pack:center;
          justify-content:center;
}
.zn__trailer-player audio{
  display:none;
}
.zn__trailer-player a{
  width:3.29412rem;
  height:3.29412rem;
  margin-bottom:0.29412rem;
  overflow:hidden;
  background-color:#fff;
  border-radius:50%;
}
.zn__trailer-player span{
  width:100%;
  height:100%;
  display:-webkit-box;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-align:center;
      -ms-flex-align:center;
          align-items:center;
  -webkit-box-pack:center;
      -ms-flex-pack:center;
          justify-content:center;
}
.zn__trailer-player span svg{
  width:50%;
  height:50%;
  fill:currentColor;
}
.zn__trailer-player label{
  font-family:Apparat, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen-Sans, Ubuntu, Cantarell, Helvetica Neue, sans-serif;
  font-size:0.58824rem;
  color:#fff;
}
.zn__trailer-player [data-state=play] .zn__play,
.zn__trailer-player [data-state=pause] .zn__stop{
  display:none;
}
@media (hover: hover){
  .zn__trailer-player a svg{
    -webkit-transition:all 0.1s ease-in-out;
    transition:all 0.1s ease-in-out;
  }
  .zn__trailer-player a:hover svg{
    -webkit-transform:scale(1.1);
            transform:scale(1.1);
  }
}

/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVsYnRoZW1lLjVjNGI3ZGQ5NWIxZjhkYWJiODEwLmNzcyIsIm1hcHBpbmdzIjoiOzs7QUFBQSwyRUFBMkU7O0FBRTNFOytFQUMrRTs7QUFFL0U7OztFQUdFOztBQUVGO0VBQ0UsaUJBQWlCLEVBQUUsTUFBTTtFQUN6Qiw4QkFBOEIsRUFBRSxNQUFNO0FBQ3hDOztBQUVBOytFQUMrRTs7QUFFL0U7O0VBRUU7O0FBRUY7RUFDRSxTQUFTO0FBQ1g7O0FBRUE7O0VBRUU7O0FBRUY7RUFDRSxjQUFjO0FBQ2hCOztBQUVBOzs7RUFHRTs7QUFFRjtFQUNFLGNBQWM7RUFDZCxnQkFBZ0I7QUFDbEI7O0FBRUE7K0VBQytFOztBQUUvRTs7O0VBR0U7O0FBRUY7RUFDRSx1QkFBdUIsRUFBRSxNQUFNO0VBQy9CLFNBQVMsRUFBRSxNQUFNO0VBQ2pCLGlCQUFpQixFQUFFLE1BQU07QUFDM0I7O0FBRUE7OztFQUdFOztBQUVGO0VBQ0UsaUNBQWlDLEVBQUUsTUFBTTtFQUN6QyxjQUFjLEVBQUUsTUFBTTtBQUN4Qjs7QUFFQTsrRUFDK0U7O0FBRS9FOztFQUVFOztBQUVGO0VBQ0UsNkJBQTZCO0FBQy9COztBQUVBOzs7RUFHRTs7QUFFRjtFQUNFLG1CQUFtQixFQUFFLE1BQU07RUFDM0IsMEJBQTBCLEVBQUUsTUFBTTtFQUNsQyxpQ0FBaUMsRUFBRSxNQUFNO0FBQzNDOztBQUVBOztFQUVFOztBQUVGOztFQUVFLG1CQUFtQjtBQUNyQjs7QUFFQTs7O0VBR0U7O0FBRUY7OztFQUdFLGlDQUFpQyxFQUFFLE1BQU07RUFDekMsY0FBYyxFQUFFLE1BQU07QUFDeEI7O0FBRUE7O0VBRUU7O0FBRUY7RUFDRSxjQUFjO0FBQ2hCOztBQUVBOzs7RUFHRTs7QUFFRjs7RUFFRSxjQUFjO0VBQ2QsY0FBYztFQUNkLGtCQUFrQjtFQUNsQix3QkFBd0I7QUFDMUI7O0FBRUE7RUFDRSxlQUFlO0FBQ2pCOztBQUVBO0VBQ0UsV0FBVztBQUNiOztBQUVBOytFQUMrRTs7QUFFL0U7O0VBRUU7O0FBRUY7RUFDRSxrQkFBa0I7QUFDcEI7O0FBRUE7K0VBQytFOztBQUUvRTs7O0VBR0U7O0FBRUY7Ozs7O0VBS0Usb0JBQW9CLEVBQUUsTUFBTTtFQUM1QixlQUFlLEVBQUUsTUFBTTtFQUN2QixpQkFBaUIsRUFBRSxNQUFNO0VBQ3pCLFNBQVMsRUFBRSxNQUFNO0FBQ25COztBQUVBOzs7RUFHRTs7QUFFRjtRQUNRLE1BQU07RUFDWixpQkFBaUI7QUFDbkI7O0FBRUE7OztFQUdFOztBQUVGO1NBQ1MsTUFBTTtFQUNiLG9CQUFvQjtBQUN0Qjs7QUFFQTs7RUFFRTs7QUFFRjs7OztFQUlFLDBCQUEwQjtBQUM1Qjs7QUFFQTs7RUFFRTs7QUFFRjs7OztFQUlFLGtCQUFrQjtFQUNsQixVQUFVO0FBQ1o7O0FBRUE7O0VBRUU7O0FBRUY7Ozs7RUFJRSw4QkFBOEI7QUFDaEM7O0FBRUE7O0VBRUU7O0FBRUY7RUFDRSw4QkFBOEI7QUFDaEM7O0FBRUE7Ozs7O0VBS0U7O0FBRUY7RUFDRSxzQkFBc0IsRUFBRSxNQUFNO0VBQzlCLGNBQWMsRUFBRSxNQUFNO0VBQ3RCLGNBQWMsRUFBRSxNQUFNO0VBQ3RCLGVBQWUsRUFBRSxNQUFNO0VBQ3ZCLFVBQVUsRUFBRSxNQUFNO0VBQ2xCLG1CQUFtQixFQUFFLE1BQU07QUFDN0I7O0FBRUE7O0VBRUU7O0FBRUY7RUFDRSx3QkFBd0I7QUFDMUI7O0FBRUE7O0VBRUU7O0FBRUY7RUFDRSxjQUFjO0FBQ2hCOztBQUVBOzs7RUFHRTs7QUFFRjs7RUFFRSxzQkFBc0IsRUFBRSxNQUFNO0VBQzlCLFVBQVUsRUFBRSxNQUFNO0FBQ3BCOztBQUVBOztFQUVFOztBQUVGOztFQUVFLFlBQVk7QUFDZDs7QUFFQTs7O0VBR0U7O0FBRUY7RUFDRSw2QkFBNkIsRUFBRSxNQUFNO0VBQ3JDLG9CQUFvQixFQUFFLE1BQU07QUFDOUI7O0FBRUE7O0VBRUU7O0FBRUY7RUFDRSx3QkFBd0I7QUFDMUI7O0FBRUE7OztFQUdFOztBQUVGO0VBQ0UsMEJBQTBCLEVBQUUsTUFBTTtFQUNsQyxhQUFhLEVBQUUsTUFBTTtBQUN2Qjs7QUFFQTsrRUFDK0U7O0FBRS9FOztFQUVFOztBQUVGO0VBQ0UsY0FBYztBQUNoQjs7QUFFQTs7RUFFRTs7QUFFRjtFQUNFLGtCQUFrQjtBQUNwQjs7QUFFQTsrRUFDK0U7O0FBRS9FOztFQUVFOztBQUVGO0VBQ0UsYUFBYTtBQUNmOztBQUVBOztFQUVFOztBQUVGO0VBQ0UsYUFBYTtBQUNmOzs7OztBQ2dPRTtFQUNFO0lBQ0U7WUFBQTtFQTNqQko7RUE4akJFO0lBQ0U7WUFBQTtFQTVqQko7QUFDRjtBQXFqQkU7RUFDRTtJQUNFO1lBQUE7RUEzakJKO0VBOGpCRTtJQUNFO1lBQUE7RUE1akJKO0FBQ0Y7QUFrbkJFO0VBQ0UsMEJBV2M7RUFWZDtFQUNBLGVBYzRDO0VBYjVDO0FBaG5CSjtBQTRtQkU7RUFDRSxtQkFXYztFQVZkO0VBQ0EsZUFjNEM7RUFiNUM7QUExbUJKO0FBc21CRTtFQUNFLG1CQVdjO0VBVmQ7RUFDQSxlQW9CSTtFQW5CSjtBQXBtQko7QUFnbUJFO0VBQ0UsbUJBV2M7RUFWZDtFQUNBLGVBYzRDO0VBYjVDO0FBOWxCSjtBQTBsQkU7RUFDRSxtQkFXYztFQVZkO0VBQ0EsZUFvQkk7RUFuQko7QUF4bEJKO0FBb2xCRTtFQUNFLG1CQVdjO0VBVmQ7RUFDQSxlQWM0QztFQWI1QztBQWxsQko7QUE4a0JFO0VBQ0UsbUJBV2M7RUFWZDtFQUNBLGVBb0JJO0VBbkJKO0FBNWtCSjtBQXdrQkU7RUFDRSxtQkFXYztFQVZkO0VBQ0EsZUFjNEM7RUFiNUM7QUF0a0JKO0FBa2tCRTtFQUNFLG1CQVdjO0VBVmQ7RUFDQSxlQW9CSTtFQW5CSjtBQWhrQko7QUE0akJFO0VBQ0UsbUJBV2M7RUFWZDtFQUNBLGVBYzRDO0VBYjVDO0FBMWpCSjtBQXNqQkU7RUFDRSxtQkFXYztFQVZkO0VBQ0EsZUFvQkk7RUFuQko7QUFwakJKO0FBZ2pCRTtFQUNFLG1CQVdjO0VBVmQ7RUFDQSxlQWM0QztFQWI1QztBQTlpQko7QUEwaUJFO0VBQ0UsbUJBV2M7RUFWZDtFQUNBLGVBb0JJO0VBbkJKO0FBeGlCSjtBQW9pQkU7RUFDRSxtQkFXYztFQVZkO0VBQ0EsZUFjNEM7RUFiNUM7QUFsaUJKO0FBOGhCRTtFQUNFLG1CQVdjO0VBVmQ7RUFDQSxlQW9CSTtFQW5CSjtBQTVoQko7QUF3aEJFO0VBQ0UsbUJBV2M7RUFWZDtFQUNBLGVBYzRDO0VBYjVDO0FBdGhCSjtBQWtoQkU7RUFDRSxtQkFXYztFQVZkO0VBQ0EsZUFvQkk7RUFuQko7QUFoaEJKO0FBNGdCRTtFQUNFLG1CQVdjO0VBVmQ7RUFDQSxlQWM0QztFQWI1QztBQTFnQko7QUFzZ0JFO0VBQ0UsbUJBV2M7RUFWZDtFQUNBLGVBb0JJO0VBbkJKO0FBcGdCSixDOzs7O0FDbWNFO0VBQ0U7SUFDRTtZQUFBO0VBM2pCSjtFQThqQkU7SUFDRTtZQUFBO0VBNWpCSjtBQUNGO0FBcWpCRTtFQUNFO0lBQ0U7WUFBQTtFQTNqQko7RUE4akJFO0lBQ0U7WUFBQTtFQTVqQko7QUFDRjtBQThsQkE7OztFQUdFO1VBQUE7QUE1bEJGO0FBZ21CQTtFQXhJRTtBQXBkRjtBQXFtQkE7RUFuU0k7RUFDQTtFQXFTRjtFQUNBO0VBQUE7RUFBQTtFQUNBO0VBQUE7TUFBQTtVQUFBO0VBQ0E7RUFDQTtFQUNBO0VBR0E7VUFBQTtFQUNBO0VBQ0E7RUFDQTtBQXJsQkY7QUF3VEU7RUFDRSxtQ0FISTtBQW5UUjtBQXlURTtFQUNFLG1DQVBJO0FBaFRSO0FBdWxCQTs7Ozs7O0VBTUU7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQXBsQkY7QUFzbEJFOzs7Ozs7RUFDRTtBQS9rQko7QUFtbEJBO0VBQ0U7RUFDQTtBQWhsQkY7QUFtbEJBO0VBQ0U7QUFobEJGO0FBbWxCQTtFQUNFO0FBaGxCRjtBQW9sQkE7RUFDRTtFQUNBO0FBamxCRjtBQXFsQkE7RUFDRTtFQUNBO0tBQUE7TUFBQTtVQUFBO0FBbGxCRjtBQXNsQkE7RUFDRTtFQUFBO0FBbmxCRjtBQXVsQkE7RUFHRSxzQkFGUztFQUdUO0FBdGxCRjtBQTZYRTtFQXNJRjtJQXJJSTs7Ozs7R0FBQTtFQTljRjtBQUNGO0FBZ2RFO0VBa0lGO0lBaklJO0VBN2NGO0FBQ0YsQzs7OztBQzZoQkU7RUFDRTtJQUNFO1lBQUE7RUEzakJKO0VBOGpCRTtJQUNFO1lBQUE7RUE1akJKO0FBQ0Y7QUFxakJFO0VBQ0U7SUFDRTtZQUFBO0VBM2pCSjtFQThqQkU7SUFDRTtZQUFBO0VBNWpCSjtBQUNGO0FBOGxCQTtFQUNFO0VBQ0E7RUFBQTtBQTVsQkY7QUFnbUJBO0VBelRFLHdCQTBUbUI7RUF6VG5CLHVCQXlUbUI7RUFFbkI7QUE3bEJGO0FBaW1CQTtFQUNFO0FBOWxCRjtBQWttQkE7RUFDRTtBQS9sQkYsQzs7OztBQ21pQkU7RUFDRTtJQUNFO1lBQUE7RUEzakJKO0VBOGpCRTtJQUNFO1lBQUE7RUE1akJKO0FBQ0Y7QUFxakJFO0VBQ0U7SUFDRTtZQUFBO0VBM2pCSjtFQThqQkU7SUFDRTtZQUFBO0VBNWpCSjtBQUNGO0FBK2xCRTtFQWxJQTtFQXdJRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtVQUFBO0FBL2xCSjtBQWttQkk7RUFuVUYsd0JBb1V1QjtFQW5VdkIsdUJBbVV1QjtBQWhsQnpCO0FBbWxCSTtFQUNFO01BQUE7RUFDQTtFQUVBO1VBQUE7QUFsbEJOO0FBdWxCSTtFQUNFO01BQUE7VUFBQTtFQUNBO01BQUE7VUFBQTtFQUNBO0FBcmxCTjtBQXdsQkk7RUFDRTtFQUNBO0FBdGxCTjtBQXlsQkk7RUFDRTtFQUNBO0VBQ0E7QUF2bEJOO0FBeWxCTTtFQUNFO0FBdmxCUjtBQWltQkU7RUFDRTtJQUNFO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7RUEvbEJKO0VBa21CRTtJQS9YRixVQWdZK0I7SUEvWC9CLFdBK1grQjtJQUUzQjtJQUNBO0lBQ0E7RUFobUJKO0FBQ0Y7QUFpbEJFO0VBQ0U7SUFDRTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0VBL2xCSjtFQWttQkU7SUEvWEYsVUFnWStCO0lBL1gvQixXQStYK0I7SUFFM0I7SUFDQTtJQUNBO0VBaG1CSjtBQUNGO0FBbW1CRTtFQXhZQSxVQXlZNkI7RUF4WTdCLFdBd1k2QjtFQUUzQjtFQUNBO0FBam1CSjtBQW9tQkU7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO1VBQUE7QUFsbUJKO0FBcW1CRTtFQUNFO1VBQUE7QUFubUJKO0FBMFlFO0VBZ0lBO0lBL0hFOzs7OztHQUFBO0VBM2NGO0FBQ0Y7QUE2Y0U7RUE0SEE7SUEzSEU7RUExY0Y7QUFDRixDOzs7O0FDMGhCRTtFQUNFO0lBQ0U7WUFBQTtFQTNqQko7RUE4akJFO0lBQ0U7WUFBQTtFQTVqQko7QUFDRjtBQXFqQkU7RUFDRTtJQUNFO1lBQUE7RUEzakJKO0VBOGpCRTtJQUNFO1lBQUE7RUE1akJKO0FBQ0YsQzs7OztBQytlRTs7Ozs7OztFQU9FO0FBcmZKO0FBd2ZFO0VBQ0U7QUF0Zko7QUF5ZkU7RUFDRTtFQUNBO0FBdmZKO0FBMGZJO0VBQ0U7QUF4Zk47QUEyZkk7RUFDRTtBQXpmTjtBQStnQkU7RUFDRTtFQUVBO0VBQ0E7RUFDQTtBQTdnQko7QUErZ0JJO0VBcFFGLFVBcVErQjtFQXBRL0IsV0FvUStCO0VBRTNCO0VBQ0E7QUE3Z0JOO0FBK2dCTTtFQTFRSixVQTJRaUM7RUExUWpDLFdBMFFpQztFQUUzQjtFQUNBO0VBQ0E7RUFDQTtVQUFBO0FBN2dCUjtBQWtoQkU7RUFDRTtJQUNFO1lBQUE7RUFoaEJKO0VBbWhCRTtJQUNFO1lBQUE7RUFqaEJKO0FBQ0Y7QUEwZ0JFO0VBQ0U7SUFDRTtZQUFBO0VBaGhCSjtFQW1oQkU7SUFDRTtZQUFBO0VBamhCSjtBQUNGO0FBb2hCRTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7VUFBQTtFQUNBO1VBQUE7QUFsaEJKO0FBb2hCSTtFQUNFO0FBbGhCTjtBQXFoQkk7RUFDRTtBQW5oQk47QUFzaEJJO0VBQ0U7VUFBQTtBQXBoQk47QUF1aEJJO0VBQ0U7RUFDQTtBQXJoQk47QUE4aEJBO0VBSUU7RUFDQTtFQUNBO0VBQUE7RUFBQTtFQUNBO01BQUE7VUFBQTtFQUNBO01BQUE7VUFBQTtBQTloQkY7QUFnaUJFO0VBQ0U7QUE5aEJKO0FBZ2lCSTtFQUNFO0FBOWhCTjtBQWdpQk07RUFDRTtBQTloQlI7QUFtaUJNO0VBQ0U7QUFqaUJSO0FBc2lCRTtFQTdWQSxvQkE4VjZCO0VBN1Y3QixxQkE2VjZCO0VBeFU3QiwyQkF5VW9CO0VBeFVwQiwwQkF3VW9CO0VBRWxCO0VBQ0E7RUFDQTtFQUFBO0VBQUE7RUFBQTtBQW5pQko7QUEyaUJJO0VBQ0U7QUFwaUJOO0FBc2lCTTtFQUNFO0FBcGlCUjtBQTJpQkE7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQUE7RUFBQTtFQUNBO01BQUE7VUFBQTtFQUNBO01BQUE7VUFBQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUFBO0VBQ0E7VUFBQTtBQXhpQkY7QUEwaUJFO0VBQ0U7TUFBQTtVQUFBO0FBeGlCSjtBQTBpQkk7RUFDRTtBQXhpQk47QUE0aUJFO0VBRUU7RUFDQTtBQTNpQko7QUErZkk7RUFDRTtJQUNFO1lBQUE7RUFuaUJOO0FBQ0YsQzs7OztBQ2dkRTtFQUNFO0lBQ0U7WUFBQTtFQTNqQko7RUE4akJFO0lBQ0U7WUFBQTtFQTVqQko7QUFDRjtBQXFqQkU7RUFDRTtJQUNFO1lBQUE7RUEzakJKO0VBOGpCRTtJQUNFO1lBQUE7RUE1akJKO0FBQ0Y7QUE4bEJBO0VBQ0U7RUFBQTtFQUFBO0VBQ0E7TUFBQTtVQUFBO0VBQ0E7RUFBQTtNQUFBO1VBQUE7RUFDQTtFQUNBO0FBNWxCRjtBQWdtQkE7RUFDRTtFQUFBO0VBQUE7RUFDQTtNQUFBO1VBQUE7RUFDQTtFQUFBO01BQUE7VUFBQTtFQUNBO0VBSUE7RUFDQTtBQWhtQkYsQzs7OztBQytkRTs7Ozs7OztFQU9FO0FBcmZKO0FBd2ZFO0VBQ0U7QUF0Zko7QUF5ZkU7RUFDRTtFQUNBO0FBdmZKO0FBMGZJO0VBQ0U7QUF4Zk47QUEyZkk7RUFDRTtBQXpmTjtBQXVpQkU7RUFDRTtJQUNFO1lBQUE7RUFwaUJKO0VBdWlCRTtJQUNFO1lBQUE7RUFyaUJKO0FBQ0Y7QUE4aEJFO0VBQ0U7SUFDRTtZQUFBO0VBcGlCSjtFQXVpQkU7SUFDRTtZQUFBO0VBcmlCSjtBQUNGO0FBMmtCQTtFQXJJRTtFQTJJQTtFQUNBO0VBQUE7RUFBQTtFQUNBO01BQUE7VUFBQTtFQUNBO01BQUE7VUFBQTtFQUNBO0VBQ0E7RUFDQTtLQUFBO01BQUE7VUFBQTtFQUNBO0FBN2tCRjtBQStrQkU7RUFHRTtFQUNBO0VBQUE7RUFBQTtFQUNBO0VBQUE7TUFBQTtVQUFBO0VBQ0E7TUFBQTtVQUFBO0VBQ0E7TUFBQTtVQUFBO0VBQ0E7RUFDQTtBQWhrQko7QUFta0JFO0VBQ0U7RUFDQTtFQUNBO0VBQ0EsaUJBbkNZO0VBb0NaO0FBamtCSjtBQW1rQkk7RUFwV0YsVUFxVytCO0VBcFcvQixXQW9XK0I7RUFFM0I7RUFDQTtFQUNBO0VBQ0E7RUFDQTtVQUFBO0FBamtCTjtBQXFrQkU7RUEvV0EsZ0JBZ1hTO0VBL1dULGlCQStXUztFQUlQO0VBQ0E7RUFDQTtFQUNBO0VBQUE7RUFBQTtFQUNBO01BQUE7VUFBQTtBQXJrQko7QUF1a0JJO0VBMVhGLFVBMlgrQjtFQTFYL0IsV0EwWCtCO0FBcGtCakM7QUFza0JNO0VBQ0U7QUFwa0JSO0FBMmtCQTtFQXhNRTtFQXZMQSwwQkFzWW1CO0VBclluQiw2QkFxWW1CO0VBdFhuQiw0QkF1WGtCO0VBdFhsQiwyQkFzWGtCO0VBRWxCO01BQUE7VUFBQTtFQUNBO0VBQ0E7QUE1a0JGO0FBK2tCRTs7RUE5WEEsMkJBZ1lvQjtFQS9YcEIsMEJBK1hvQjtFQUVsQjtFQUFBO0VBQUE7QUE5akJKO0FBaWtCRTtFQTNaQSxvQkFzWVk7RUFyWVoscUJBcVlZO0VBaFhaLDJCQXVZb0I7RUF0WXBCLDBCQXNZb0I7RUFFbEI7QUE5akJKO0FBZ2xCRTtFQWpiQSxVQWtiNkI7RUFqYjdCLFdBaWI2QjtBQWprQi9CO0FBOFVFO0VBbUlGO0lBbElJOzs7OztHQUFBO0VBcmJGO0VBMG5CRjtJQXJNSTs7Ozs7R0FBQTtFQWxYRjtBQWxFRjtBQXViRTtFQStIRjtJQTlISTtFQXBiRjtFQXFuQkY7SUFqTUk7RUFqWEY7QUFsRUY7QUFncEJJO0VBQ0U7O0lBRUU7SUFBQTtFQTlqQk47RUFpa0JJO0lBQ0U7WUFBQTtFQS9qQk47RUFpa0JNO0lBQ0U7WUFBQTtFQS9qQlI7QUFDRixDOzs7O0FDa1dFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBT0U7QUF6ZUo7QUE0ZUU7RUFDRTtBQTFlSjtBQTZlRTtFQUNFO0VBQ0E7QUEzZUo7QUE4ZUk7RUFDRTtBQTVlTjtBQStlSTtFQUNFO0FBN2VOO0FBbWZBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtVQUFBO0FBaGZGO0FBa2ZFO0VBcFBBLFVBcVA2QjtFQXBQN0IsV0FvUDZCO0FBL2UvQjtBQStnQkU7RUFDRTtJQUNFO1lBQUE7RUE1Z0JKO0VBK2dCRTtJQUNFO1lBQUE7RUE3Z0JKO0FBQ0Y7QUFzZ0JFO0VBQ0U7SUFDRTtZQUFBO0VBNWdCSjtFQStnQkU7SUFDRTtZQUFBO0VBN2dCSjtBQUNGO0FBa2pCQTtFQUNFO0FBaGpCRjtBQWtqQkU7RUFJRTtBQW5qQko7QUF5akJFO0VBSUU7O0tBQUE7RUFHQTtFQUFBO0FBempCSjtBQTRqQkU7RUFDRTtBQTFqQko7QUE0akJJO0VBQ0U7RUFDQTtFQUNBO0VBQUE7RUFBQTtFQUNBO0VBQUE7TUFBQTtVQUFBO0VBQ0E7TUFBQTtVQUFBO0FBMWpCTjtBQThqQkU7RUFDRTtFQUNBO0FBNWpCSjtBQThqQkk7RUFDRTtFQUFBO0VBQUE7RUFDQTtNQUFBO1VBQUE7RUFDQTtFQUFBO01BQUE7VUFBQTtFQUNBO01BQUE7VUFBQTtBQTVqQk47QUFna0JFO0VBQ0U7RUFDQTtBQTlqQko7QUFpa0JFO0VBQ0U7QUEvakJKO0FBaWtCSTtFQUNFO0FBL2pCTjtBQWtrQkk7RUFDRTtFQUNBO0FBaGtCTjtBQXNrQkE7RUFDRTtFQUNBO0FBbmtCRjtBQXFrQkU7RUFDRTtBQW5rQko7QUF3a0JBO0VBS0U7RUFDQTtFQUNBO0FBemtCRjtBQWdsQkU7QUF2a0JGO0FBMmtCSTtFQUNFO0VBQ0E7RUFDQTtBQXprQk47QUFrbEJJO0VBQ0U7RUFDQTtBQTNrQk47QUE4a0JJO0VBQ0U7RUFDQSxrQkFsQ1U7QUExaUJoQjtBQStrQkk7RUF0YkYsVUF1YitCO0VBdGIvQixXQXNiK0I7RUFFM0I7RUFDQTtFQUNBO0VBQ0E7VUFBQTtFQUNBO0FBN2tCTjtBQStrQk07RUEvYkosVUFnY2lDO0VBL2JqQyxXQStiaUM7RUF6Y2pDLGlCQUQrQjtFQUUvQjtFQUNBO0VBQ0E7RUFDQTtFQXdjTTtFQUNBO0VBQ0E7RUFBQTtBQXprQlI7QUF3bEJFO0VBQ0U7QUF0bEJKO0FBNmxCRTs7RUFFRTtFQUNBO0FBdGxCSjtBQXlsQkU7OztFQUdFO0VBQ0E7RUFBQTtBQXZsQko7QUEwbEJFO0VBQ0U7RUFDQTtBQXhsQko7QUEwbEJJO0VBQ0U7QUF4bEJOO0FBNGxCRTtFQUNFO0FBMWxCSjtBQTRsQkk7RUFDRTtFQUNBO0VBQ0E7RUFDQTtVQUFBO0VBQ0E7RUFBQTtBQTFsQk47QUFnbUJBO0VBQ0U7QUE3bEJGO0FBa21CQTtFQU9FO0VBRUEsd0JBUGdCO0FBL2xCbEI7QUFzSkU7O0VBQ0Usa0NBSEk7QUFoSlI7QUFzSkU7RUFDRSxrQ0FQSTtBQTVJUjtBQWtKRTs7RUFDRSxrQ0FQSTtBQTVJUjtBQXFtQkU7RUFDRSxhQWhCVztFQWlCWDtBQW5tQko7QUFxbUJJO0VBQ0U7QUFubUJOO0FBc21CSTtFQUNFO0FBcG1CTjtBQXdtQkU7RUFDRTtBQXRtQko7QUF3bUJJO0VBQ0UsYUEvQlk7QUF2a0JsQjtBQTBtQkU7RUFDRTtBQXhtQko7QUEwbUJJO0VBQ0UsWUF2Q1k7QUFqa0JsQjtBQThtQkE7RUFJRTtFQUVBO0FBL21CRjtBQWluQkU7RUFDRTtBQS9tQko7QUFpbkJJO0VBQ0U7QUEvbUJOO0FBbW5CRTtFQUNFO0VBQ0E7QUFqbkJKO0FBbW5CSTtFQUNFO0FBam5CTjtBQXVuQkE7RUFNRTtFQUNBLHdCQU5nQjtBQW5uQmxCO0FBMm5CRTtFQUNFO0VBQ0E7QUF6bkJKO0FBMm5CSTtFQUNFLFlBYlk7QUE1bUJsQjtBQTZuQkU7RUFDRTtBQTNuQko7QUE2bkJJO0VBQ0UsWUFyQlk7QUF0bUJsQjtBQWlvQkE7RUE1bUJFLGdCQTZtQjJCO0VBNW1CM0IsaUJBNG1CMkI7RUFFM0I7RUFBQTtFQUFBO0VBQ0E7TUFBQTtVQUFBO0VBQ0E7TUFBQTtVQUFBO0VBQ0E7RUFDQTtFQUNBO0FBOW5CRjtBQWdvQkU7RUF0bkJBLFNBdW5CNkI7RUF0bkI3QixVQXNuQjZCO0FBN25CL0I7QUE2WkU7RUFURjtJQVVJO0lBQ0E7SUFBQTtFQXhrQkY7QUFDRjtBQW1sQk07RUFDRTtJQUNFO0VBemtCUjtBQUNGO0FBd25CSTtFQUhGO0lBSUk7SUFBQTtFQXJsQko7QUFDRixDOzs7O0FDaVpFO0VBQ0U7SUFDRTtZQUFBO0VBM2pCSjtFQThqQkU7SUFDRTtZQUFBO0VBNWpCSjtBQUNGO0FBcWpCRTtFQUNFO0lBQ0U7WUFBQTtFQTNqQko7RUE4akJFO0lBQ0U7WUFBQTtFQTVqQko7QUFDRixDOzs7O0FDcWpCRTtFQUNFO0lBQ0U7WUFBQTtFQTNqQko7RUE4akJFO0lBQ0U7WUFBQTtFQTVqQko7QUFDRjtBQXFqQkU7RUFDRTtJQUNFO1lBQUE7RUEzakJKO0VBOGpCRTtJQUNFO1lBQUE7RUE1akJKO0FBQ0Y7QUE4bEJBO0VBQ0U7QUE1bEJGO0FBOGxCRTtFQUNFO0FBNWxCSjtBQW1tQkU7OztFQUNFO0FBOWxCSjtBQW1tQkU7RUFDRTtNQUFBO1VBQUE7QUFobUJKLEM7Ozs7QUMrZEU7Ozs7Ozs7RUFPRTtBQXJmSjtBQXdmRTtFQUNFO0FBdGZKO0FBeWZFO0VBQ0U7RUFDQTtBQXZmSjtBQTBmSTtFQUNFO0FBeGZOO0FBMmZJO0VBQ0U7QUF6Zk47QUErZ0JFO0VBQ0U7RUFFQTtFQUNBO0VBQ0E7QUE3Z0JKO0FBK2dCSTtFQXBRRixVQXFRK0I7RUFwUS9CLFdBb1ErQjtFQUUzQjtFQUNBO0FBN2dCTjtBQStnQk07RUExUUosVUEyUWlDO0VBMVFqQyxXQTBRaUM7RUFFM0I7RUFDQTtFQUNBO0VBQ0E7VUFBQTtBQTdnQlI7QUFraEJFO0VBQ0U7SUFDRTtZQUFBO0VBaGhCSjtFQW1oQkU7SUFDRTtZQUFBO0VBamhCSjtBQUNGO0FBMGdCRTtFQUNFO0lBQ0U7WUFBQTtFQWhoQko7RUFtaEJFO0lBQ0U7WUFBQTtFQWpoQko7QUFDRjtBQW9oQkU7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO1VBQUE7RUFDQTtVQUFBO0FBbGhCSjtBQW9oQkk7RUFDRTtBQWxoQk47QUFxaEJJO0VBQ0U7QUFuaEJOO0FBc2hCSTtFQUNFO1VBQUE7QUFwaEJOO0FBdWhCSTtFQUNFO0VBQ0E7QUFyaEJOO0FBK2hCRTtFQUNFO0FBNWhCSjtBQWlpQkE7RUFDRTtBQTloQkY7QUFnaUJFO0VBTUU7RUFDQTtFQUNBO0VBQ0Esd0JBUlk7RUFTWjtBQW5pQko7QUFzaUJNO0VBQ0UsWUFiUTtBQXZoQmhCO0FBeWlCRTtFQUNFO0VBQ0E7RUFBQTtFQUFBO0VBQ0E7RUFBQTtNQUFBO1VBQUE7RUFDQTtNQUFBO1VBQUE7RUFDQTs7S0FBQTtBQXJpQko7QUF5aUJJO0VBQ0U7RUFDQTtFQUFBO0VBQUE7RUFDQTtNQUFBO1VBQUE7RUFDQTtFQUFBO01BQUE7VUFBQTtFQUNBO01BQUE7VUFBQTtBQXZpQk47QUF5aUJNO0VBQ0U7TUFBQTtVQUFBO0FBdmlCUjtBQTBpQk07RUFDRTtNQUFBO1VBQUE7QUF4aUJSO0FBNGlCSTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7VUFBQTtBQTFpQk47QUE2aUJJO0VBQ0U7QUEzaUJOO0FBK2lCRTtFQXZNQTtFQTZNRTtFQUNBO0VBQ0E7RUFDQTtBQWpqQko7QUFtakJJO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBbGlCTjtBQXFpQkk7RUFDRTtBQW5pQk47QUF1aUJFO0VBQ0U7RUFDQTtFQUNBO0VBQUE7RUFBQTtFQUNBO0VBQUE7TUFBQTtVQUFBO0VBQ0E7RUFDQTtFQUVBO0VBQ0E7RUFDQTtBQXRpQko7QUF3aUJJO0VBQ0U7QUF0aUJOO0FBeWlCSTs7RUFFRTtBQXZpQk47QUEwaUJJO0VBQ0U7RUFDQTtBQXhpQk47QUEyaUJJO0VBQ0U7QUF6aUJOO0FBNmlCRTtFQUtFO0VBQ0E7VUFBQTtFQUNBO0FBL2lCSjtBQWlqQkk7RUE5Y0YsaUJBRCtCO0VBRS9CO0VBQ0E7RUFDQTtFQUNBO0VBNmNJO0VBQ0E7RUFDQTtFQUNBO1VBQUE7RUFDQTtVQUFBO0VBQ0E7VUFBQTtBQTVpQk47QUEraUJJO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBN2lCTjtBQW1qQk07RUEvZEosVUFnZWlDO0VBL2RqQyxXQStkaUM7RUFFM0I7RUFDQTtFQUNBO0VBQ0E7QUE1aUJSO0FBZ2pCSTtFQW5nQkYsaUJBRGdDO0VBRWhDLFFBRmdEO0VBR2hEO1VBQUE7RUF3QkEsVUEyZStCO0VBMWUvQixXQTBlK0I7RUFFM0I7RUFDQTtLQUFBO0FBNWlCTjtBQWlqQkk7RUFDRTtFQUFBO0VBQUE7RUFDQTtNQUFBO1VBQUE7RUFDQTtBQS9pQk47QUFpakJNOztFQUVFO0FBL2lCUjtBQWtqQk07RUFDRTtFQUNBO0FBaGpCUjtBQW1qQk07RUFyVUo7RUEyVU07RUFBQTtFQUFBO0VBQ0E7RUFBQTtNQUFBO1VBQUE7RUFDQTtNQUFBO1VBQUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQXJqQlI7QUF1akJRO0VBQ0U7QUF0aUJWO0FBMmlCTTtFQUNFO0VBQUE7RUFBQTtFQUNBO01BQUE7VUFBQTtBQXppQlI7QUE0aUJNO0VBQ0U7QUExaUJSO0FBa2pCRTtFQXpoQkEsd0JBMGhCcUI7RUF6aEJyQix1QkF5aEJxQjtBQTlpQnZCO0FBd01FO0VBcU1BO0lBcE1FOzs7OztHQUFBO0VBM1ZGO0VBNnBCSTtJQWxVRjs7Ozs7R0FBQTtFQTlORjtBQTVIRjtBQTZWRTtFQWlNQTtJQWhNRTtFQTFWRjtFQXdwQkk7SUE5VEY7RUE3TkY7QUE1SEY7QUFnbkJNO0VBWEY7SUFZSTtFQTVpQk47QUFDRixDOzs7O0FDb1dFO0VBQ0U7SUFDRTtZQUFBO0VBM2pCSjtFQThqQkU7SUFDRTtZQUFBO0VBNWpCSjtBQUNGO0FBcWpCRTtFQUNFO0lBQ0U7WUFBQTtFQTNqQko7RUE4akJFO0lBQ0U7WUFBQTtFQTVqQko7QUFDRjtBQStsQkU7RUFDRTtBQTdsQko7QUErbEJJO0VBQ0U7QUE3bEJOO0FBa21CSTtFQURGO0lBRUk7T0FBQTtZQUFBO0lBQ0E7T0FBQTtZQUFBO0VBL2xCSjtFQWltQkk7SUFDRTtJQUNBO0lBQUE7T0FBQTtZQUFBO0lBQ0E7RUEvbEJOO0FBQ0YsQzs7OztBQ29pQkU7RUFDRTtJQUNFO1lBQUE7RUEzakJKO0VBOGpCRTtJQUNFO1lBQUE7RUE1akJKO0FBQ0Y7QUFxakJFO0VBQ0U7SUFDRTtZQUFBO0VBM2pCSjtFQThqQkU7SUFDRTtZQUFBO0VBNWpCSjtBQUNGO0FBK2xCRTtFQUNFO0FBN2xCSjtBQStsQkk7RUFDRTtFQUNBO0VBQ0E7QUE3bEJOO0FBZ21CSTtFQWxVRixzQkFtVXVCO0VBbFV2Qix5QkFrVXVCO0FBN2xCekIsQzs7OztBQ3lpQkU7RUFDRTtJQUNFO1lBQUE7RUEzakJKO0VBOGpCRTtJQUNFO1lBQUE7RUE1akJKO0FBQ0Y7QUFxakJFO0VBQ0U7SUFDRTtZQUFBO0VBM2pCSjtFQThqQkU7SUFDRTtZQUFBO0VBNWpCSjtBQUNGO0FBOGxCQTtFQUNFO0VBQ0E7RUFDQTtBQTVsQkY7QUFnbUJBO0VBQ0U7RUFHQTtFQUNBO0FBL2xCRjtBQW1tQkE7RUFqSkU7RUF1SkE7RUFDQTtFQUtBO0FBeG1CRjtBQTZjRTtFQStJRjtJQTlJSTs7Ozs7R0FBQTtFQXJjRjtBQUNGO0FBdWNFO0VBMklGO0lBMUlJO0VBcGNGO0FBQ0YsQzs7OztBQzhjRTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQU9FO0FBemVKO0FBNGVFO0VBQ0U7QUExZUo7QUE2ZUU7RUFDRTtFQUNBO0FBM2VKO0FBOGVJO0VBQ0U7QUE1ZU47QUErZUk7RUFDRTtBQTdlTjtBQTJoQkU7RUFDRTtJQUNFO1lBQUE7RUF4aEJKO0VBMmhCRTtJQUNFO1lBQUE7RUF6aEJKO0FBQ0Y7QUFraEJFO0VBQ0U7SUFDRTtZQUFBO0VBeGhCSjtFQTJoQkU7SUFDRTtZQUFBO0VBemhCSjtBQUNGO0FBMmpCQTtFQUNFO0VBQ0E7QUF4akJGO0FBMmpCRTtFQUNFO0FBempCSjtBQW9rQkE7RUFDRTtFQUNBO1VBQUE7QUExakJGO0FBOGpCQTtFQUNFO0VBQ0E7VUFBQTtBQTNqQkY7QUErakJBO0VBR0U7QUE5akJGO0FBa2tCQTtFQUdFO0FBamtCRjtBQXFrQkE7RUFHRTtBQXBrQkY7QUF1UkU7O0VBQ0Usa0NBSEk7QUFqUlI7QUF1UkU7RUFDRSxrQ0FQSTtBQTdRUjtBQW1SRTs7RUFDRSxrQ0FQSTtBQTdRUjtBQXloQkU7RUFERjtJQTdURSwwQkErVHFCO0lBOVRyQix5QkE4VHFCO0VBempCckI7QUFDRixDOzs7O0FDekRBLGdCQUFnQjtBQTRqQmQ7RUFDRTtJQUNFO1lBQUE7RUExakJKO0VBNmpCRTtJQUNFO1lBQUE7RUEzakJKO0FBQ0Y7QUFvakJFO0VBQ0U7SUFDRTtZQUFBO0VBMWpCSjtFQTZqQkU7SUFDRTtZQUFBO0VBM2pCSjtBQUNGO0FBNmxCQTtFQW5URSx3QkFvVG1CO0VBblRuQix1QkFtVG1CO0VBRW5CO0VBQUE7RUFBQTtFQUNBO01BQUE7VUFBQTtFQUNBO01BQUE7VUFBQTtFQUNBO0VBQ0E7QUEzbEJGO0FBNmxCRTtFQUNFO0FBM2xCSjtBQThsQkU7RUFDRTtBQTVsQko7QUFtbUJFO0VBQ0U7QUFqbUJKO0FBb21CRTtFQUNFO0VBQ0E7QUFsbUJKO0FBb21CSTtFQWhWRix3QkFrVnVCO0VBalZ2Qix1QkFpVnVCO0VBRW5CO0FBbm1CTjtBQXVtQkU7RUFDRTtFQUNBO0FBcm1CSjtBQXVtQkk7RUFDRTtFQUNBO0FBcm1CTjtBQXltQkU7RUFDRTtFQUNBO0FBdm1CSjtBQXltQkk7RUFDRTtFQUNBO0FBdm1CTjtBQTJtQkU7RUFDRTtNQUFBO1VBQUE7QUF6bUJKO0FBNG1CRTtFQUNFO01BQUE7VUFBQTtFQUNBO0FBMW1CSixDOzs7O0FDa2dCRTtFQUNFO0lBQ0U7WUFBQTtFQTNqQko7RUE4akJFO0lBQ0U7WUFBQTtFQTVqQko7QUFDRjtBQXFqQkU7RUFDRTtJQUNFO1lBQUE7RUEzakJKO0VBOGpCRTtJQUNFO1lBQUE7RUE1akJKO0FBQ0Y7QUFrbUJBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7QUFobUJGO0FBa21CRTtFQUNFO0VBQ0E7RUFDQTtFQUFBO0VBQUE7RUFDQTtFQUFBO01BQUE7VUFBQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQUE7RUFPQTtBQXRtQko7QUF3bUJJO0VBbFdGLGlCQUQrQjtFQUUvQjtFQUNBO0VBQ0E7RUFDQTtFQWlXSTtFQUNBO0VBQ0E7RUFBQTtFQUtBO0VBQ0E7RUFDQTtFQUFBO0FBdm1CTjtBQWduQkk7O0VBRUU7QUF6bUJOO0FBa25CRTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLGlDQWpFSztBQXppQlQ7QUE0bUJJO0VBbFlGLFVBbVkrQjtFQWxZL0IsV0FrWStCO0VBRTNCO0VBQ0E7RUFDQTtFQUNBO0FBMW1CTjtBQTZtQkk7RUFyYUYsaUJBRGdDO0VBRWhDLFFBRmdEO0VBR2hEO1VBQUE7RUF3QkEsVUE2WStCO0VBNVkvQixXQTRZK0I7RUFFM0I7RUFDQTtLQUFBO0FBem1CTjtBQTZtQkU7RUFDRTtFQUNBO0VBQUE7RUFBQTtFQUNBO01BQUE7VUFBQTtFQUNBO0VBQUE7TUFBQTtVQUFBO0VBQ0E7RUFDQTtFQUNBO0VBQUE7RUFDQTtBQTNtQko7QUE4bUJFO0VBbE9BO0VBd09FO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBaG5CSjtBQW1uQkU7RUFqUEE7RUF1UEU7RUFBQTtFQUFBO0VBQ0E7RUFBQTtNQUFBO1VBQUE7RUFDQTtFQUNBO0VBQ0E7QUF0bUJKO0FBd21CSTtFQXBiRixzQkEwYnVCO0VBemJ2Qix5QkF5YnVCO0VBRW5CO0VBQ0E7RUFFQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFBQTtBQTdsQk47QUFzbUJJO0VBQ0U7QUFwbUJOO0FBd21CRTtFQTNSQTtFQWlTRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQUE7RUFBQTtFQUNBO0VBQUE7TUFBQTtVQUFBO0VBQ0E7TUFBQTtVQUFBO0VBQ0E7TUFBQTtVQUFBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQTFtQko7QUE0bUJJO0VBQ0U7QUEzbEJOO0FBOGxCSTtFQUNFO0VBQ0E7QUE1bEJOO0FBK2NJO0VBQ0U7SUFDRTtFQXhtQk47QUFDRjtBQWluQkU7RUFsREY7SUFtREk7SUFDQTtJQUFBO0VBMW1CRjtBQUNGO0FBa2JFO0VBZ09BO0lBL05FOzs7OztHQUFBO0VBNVhGO0VBMG1CQTtJQTlPRTs7Ozs7R0FBQTtFQXJXRjtFQTZuQkE7SUF4UkU7Ozs7O0dBQUE7RUFwVEY7QUF2RUY7QUE4WEU7RUE0TkE7SUEzTkU7RUEzWEY7RUFxbUJBO0lBMU9FO0VBcFdGO0VBd25CQTtJQXBSRTtFQW5URjtBQXZFRixDOzs7O0FDMmNFO0VBQ0U7SUFDRTtZQUFBO0VBM2pCSjtFQThqQkU7SUFDRTtZQUFBO0VBNWpCSjtBQUNGO0FBcWpCRTtFQUNFO0lBQ0U7WUFBQTtFQTNqQko7RUE4akJFO0lBQ0U7WUFBQTtFQTVqQko7QUFDRjtBQThsQkE7RUFDRTtFQUFBO0VBQUE7RUFDQTtNQUFBO0VBQ0E7RUFDQTtBQTVsQkY7QUE4bEJFO0VBQ0U7QUE1bEJKO0FBOGxCSTtFQUNFO0lBQ0U7SUFDQTtFQTVsQk47RUErbEJJO0lBQ0U7UUFBQTtFQTdsQk47QUFDRjtBQWdtQkk7RUFkRjtJQWVJOztPQUFBO0VBM2xCSjtFQStsQkk7SUFDRTtFQTdsQk47QUFDRjtBQWdtQkk7RUF4QkY7SUF5Qkk7O09BQUE7RUEzbEJKO0VBK2xCSTtJQUNFO0VBN2xCTjtBQUNGLEM7Ozs7QUM3Q0EsZ0JBQWdCO0FBNGpCZDtFQUNFO0lBQ0U7WUFBQTtFQTFqQko7RUE2akJFO0lBQ0U7WUFBQTtFQTNqQko7QUFDRjtBQW9qQkU7RUFDRTtJQUNFO1lBQUE7RUExakJKO0VBNmpCRTtJQUNFO1lBQUE7RUEzakJKO0FBQ0Y7QUE2bEJBOztFQUVFO0VBQ0E7QUEzbEJGO0FBOGxCRTs7OztFQUVFO0VBQUE7QUExbEJKO0FBNmxCRTs7RUFDRTtFQUNBO0FBMWxCSjtBQTZsQkU7O0VBQ0U7QUExbEJKO0FBK2xCQTtFQUNFO0VBQ0E7RUFDQTtBQTVsQkY7QUE4bEJFO0VBOVVBLHdCQStVcUI7RUE5VXJCLHVCQThVcUI7RUFFbkI7RUFDQTtFQUNBO0FBNWxCSixDOzs7O0FDbWhCRTtFQUNFO0lBQ0U7WUFBQTtFQTNqQko7RUE4akJFO0lBQ0U7WUFBQTtFQTVqQko7QUFDRjtBQXFqQkU7RUFDRTtJQUNFO1lBQUE7RUEzakJKO0VBOGpCRTtJQUNFO1lBQUE7RUE1akJKO0FBQ0Y7QUErbEJFO0VBQ0U7QUE3bEJKO0FBZ21CRTtFQUNFO0VBQUE7RUFBQTtFQUNBO01BQUE7VUFBQTtFQUNBO0FBOWxCSjtBQTRtQkU7O0VBRUU7RUFDQTtFQUNBO0FBam1CSjtBQW9tQkU7RUFDRTtFQUNBO0FBbG1CSjtBQXFtQkU7RUFDRTtBQW5tQko7QUFzbUJFO0VBQ0U7QUFwbUJKO0FBd2tCRTtFQUNFO0lBQ0U7SUFBQTtRQUFBO1lBQUE7SUFDQTtRQUFBO1lBQUE7RUEvbEJKO0VBa21CRTtJQUNFO0VBaG1CSjtBQUNGLEM7Ozs7QUNvaUJFO0VBQ0U7SUFDRTtZQUFBO0VBM2pCSjtFQThqQkU7SUFDRTtZQUFBO0VBNWpCSjtBQUNGO0FBcWpCRTtFQUNFO0lBQ0U7WUFBQTtFQTNqQko7RUE4akJFO0lBQ0U7WUFBQTtFQTVqQko7QUFDRjtBQThsQkE7RUFDRTtBQTVsQkY7QUE4bEJFO0VBQ0U7RUFBQTtBQTVsQko7QUErbEJFO0VBQ0U7RUFDQTtFQUNBO1VBQUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUVBO0VBQ0E7VUFBQTtFQUNBO0FBOWxCSjtBQWltQkU7RUFyWEEsaUJBRDhCO0VBRTlCLE9BRjhDO0VBRzlDLFFBSDhDO0VBSTlDO1VBQUE7QUF6T0YsQzs7OztBQzZoQkU7RUFDRTtJQUNFO1lBQUE7RUEzakJKO0VBOGpCRTtJQUNFO1lBQUE7RUE1akJKO0FBQ0Y7QUFxakJFO0VBQ0U7SUFDRTtZQUFBO0VBM2pCSjtFQThqQkU7SUFDRTtZQUFBO0VBNWpCSjtBQUNGO0FBb21CQTtFQXBVRSxnQkErVEs7RUE5VEwsaUJBOFRLO0VBUUw7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBbG1CRjtBQW9tQkU7RUE5VUEsZ0JBOFRPO0VBN1RQLGlCQTZUTztFQW9CTDtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBbm1CSjtBQXNtQkU7RUFDRTtFQUNBO0FBcG1CSjtBQXVtQkU7RUFDRTtFQUNBO0FBcm1CSjtBQXdtQkU7RUFDRTtFQUNBO0VBQ0E7RUFDQTtVQUFBO0FBdG1CSjtBQXdtQkk7RUFDRTtFQUNBO0VBQ0EsVUEzQ087RUE0Q1A7RUFDQSxrQkE5Q007RUErQ047VUFBQTtFQUNBO1VBQUE7RUFDQTtVQUFBO0FBdG1CTixDOzs7O0FDMGdCRTtFQUNFO0lBQ0U7WUFBQTtFQTNqQko7RUE4akJFO0lBQ0U7WUFBQTtFQTVqQko7QUFDRjtBQXFqQkU7RUFDRTtJQUNFO1lBQUE7RUEzakJKO0VBOGpCRTtJQUNFO1lBQUE7RUE1akJKO0FBQ0Y7QUE4bEJBO0VBOVRFLFVBK1QyQjtFQTlUM0IsV0E4VDJCO0VBRTNCO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFBQTtFQUFBO0VBQ0E7TUFBQTtVQUFBO0VBQ0E7TUFBQTtVQUFBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQUE7QUE1bEJGO0FBOGxCRTtFQUNFO0FBNWxCSjtBQStsQkU7RUFDRTtBQTdsQko7QUFnbUJFO0VBdlZBLFNBd1Y2QjtFQXZWN0IsVUF1VjZCO0VBRzNCO0FBOWxCSjtBQWltQkU7RUFDRTtFQUNBO0FBL2xCSixDOzs7O0FDeENBLGdCQUFnQjtBQTRqQmQ7RUFDRTtJQUNFO1lBQUE7RUExakJKO0VBNmpCRTtJQUNFO1lBQUE7RUEzakJKO0FBQ0Y7QUFvakJFO0VBQ0U7SUFDRTtZQUFBO0VBMWpCSjtFQTZqQkU7SUFDRTtZQUFBO0VBM2pCSjtBQUNGO0FBbW1CRTtFQUdFLHNCQUZTO0VBR1Q7QUFubUJKO0FBc21CRTtFQTlJQTtFQW9KRTtFQUNBO0VBQ0E7QUF4bUJKO0FBMm1CRTtFQXpKQTtFQWdLRTtFQUNBO0VBQ0E7QUE5bEJKO0FBc21CTTs7Ozs7O0VBQ0Usc0JBZmE7RUFnQmI7RUFDQTtFQUNBO0VBQ0EsYUE3Q1E7QUFuaUJoQjtBQW1sQk07Ozs7Ozs7Ozs7OztFQUVFO0FBdmtCUjtBQTJrQkk7RUFDRTtBQXprQk47QUE0a0JJO0VBQ0U7QUExa0JOO0FBNGtCTTtFQUNFO0VBQ0E7QUExa0JSO0FBNmtCTTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUVBO0VBQ0E7RUFDQTtFQUNBO1VBQUE7QUEza0JSO0FBOGtCTTtFQUNFO0lBQ0U7SUFDQTtFQTVrQlI7QUFDRjtBQWdsQkk7RUFDRTtBQTlrQk47QUFpbEJJO0VBQ0U7QUEva0JOO0FBa2xCSTtFQXZYQTtFQUNBO0VBeVhFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7VUFBQTtBQWhsQk47QUFtbEJNO0VBQ0U7QUFqbEJSO0FBb2xCTTtFQUNFO0FBbGxCUjtBQW9sQlE7RUFDRTtBQWxsQlY7QUFzbEJNO0VBN1lGO0VBQ0E7QUF0TUo7QUFxbEJRO0VBQ0U7QUFubEJWO0FBd2xCSTtFQUNFO0FBdGxCTjtBQTJsQk07O0VBQ0U7QUF4bEJSO0FBNGxCSTs7RUFFRTtBQTFsQk47QUE2bEJJO0VBQ0U7RUFDQTtBQTNsQk47QUErbEJJO0VBRUU7RUFDQTtFQUNBO0FBN2xCTjtBQWdtQk07RUFDRTtBQTlsQlI7QUFnbkJJO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFFQTtBQXJtQk47QUF3bUJJO0VBQ0U7RUFBQTtFQUFBO0VBQ0E7RUFBQTtNQUFBO1VBQUE7RUFDQTtNQUFBO1VBQUE7QUF0bUJOO0FBd21CTTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0FBdG1CUjtBQTBtQkk7QUF2bUJKO0FBeW1CTTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0FBdm1CUjtBQXltQlE7RUFyaEJOLFVBc2hCbUM7RUFyaEJuQyxXQXFoQm1DO0VBRTNCO0VBQ0E7RUFDQTtBQXZtQlY7QUE0bUJJO0VBQ0U7RUFDQSx3QkFuT0c7QUF2WVQ7QUE2bUJJO0VBQ0U7QUEzbUJOO0FBNm1CTTs7RUFFRTtFQUFBO0FBM21CUjtBQThtQk07RUFDRTtBQTVtQlI7QUE4bUJRO0VBQ0U7QUE1bUJWO0FBcW5CUTtFQUNFO0VBQ0E7QUFubkJWO0FBc25CUTtFQUNFO0FBcG5CVjtBQW9QRTtFQTRJQTtJQTNJRTs7Ozs7R0FBQTtFQTVjRjtFQWttQkE7SUF0SkU7Ozs7O0dBQUE7RUF0YkY7QUFyQkY7QUE4Y0U7RUF3SUE7SUF2SUU7RUEzY0Y7RUE2bEJBO0lBbEpFO0VBcmJGO0FBckJGO0FBNHVCSTtFQUVJOzs7SUFHRTtJQUNBO0lBQ0E7SUFFQTtJQUFBO0VBbG1CUjtBQUNGLEM7Ozs7QUN1WUU7RUFDRTtJQUNFO1lBQUE7RUEzakJKO0VBOGpCRTtJQUNFO1lBQUE7RUE1akJKO0FBQ0Y7QUFxakJFO0VBQ0U7SUFDRTtZQUFBO0VBM2pCSjtFQThqQkU7SUFDRTtZQUFBO0VBNWpCSjtBQUNGO0FBOGxCQTtFQUNFO0VBQUE7RUFBQTtFQUNBO0VBQUE7TUFBQTtVQUFBO0VBQ0E7TUFBQTtVQUFBO0VBQ0E7TUFBQTtVQUFBO0FBNWxCRjtBQThsQkU7RUFDRTtBQTVsQko7QUErbEJFO0VBeFVBLGdCQXlVNkI7RUF4VTdCLGlCQXdVNkI7RUFFM0I7RUFDQTtFQUNBO0VBQ0E7QUE3bEJKO0FBNG1CRTtFQTdWQSxVQThWNkI7RUE3VjdCLFdBNlY2QjtFQUUzQjtFQUFBO0VBQUE7RUFDQTtNQUFBO1VBQUE7RUFDQTtNQUFBO1VBQUE7QUFsbUJKO0FBb21CSTtFQXBXRixTQXFXK0I7RUFwVy9CLFVBb1crQjtFQUUzQjtBQWxtQk47QUFzbUJFO0VBQ0U7RUFDQTtFQUNBO0FBcG1CSjtBQXVtQkU7O0VBRUU7QUFybUJKO0FBa2tCSTtFQUNFO0lBQ0U7SUFBQTtFQTdsQk47RUFpbUJNO0lBQ0U7WUFBQTtFQS9sQlI7QUFDRixDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYnVsYnRoZW1lLy4vbm9kZV9tb2R1bGVzL25vcm1hbGl6ZS5jc3Mvbm9ybWFsaXplLmNzcyIsIndlYnBhY2s6Ly9idWxidGhlbWUvLi9zcmMvc3R5bGVzL2dlbmVyYWwvZm9udC1mYWNlcy5zY3NzIiwid2VicGFjazovL2J1bGJ0aGVtZS8uL3NyYy9zdHlsZXMvZ2VuZXJhbC9zY2FmZm9sZGluZy5zY3NzIiwid2VicGFjazovL2J1bGJ0aGVtZS8uL3NyYy9zdHlsZXMvZ2VuZXJhbC93cmFwcGVycy5zY3NzIiwid2VicGFjazovL2J1bGJ0aGVtZS8uL3NyYy9zdHlsZXMvZ2VuZXJhbC9nbG9iYWwuc2NzcyIsIndlYnBhY2s6Ly9idWxidGhlbWUvLi9zcmMvc3R5bGVzL2dlbmVyYWwvcHJpbnQuc2NzcyIsIndlYnBhY2s6Ly9idWxidGhlbWUvLi9zcmMvc3R5bGVzL2xheW91dC9oZWFkZXIuc2NzcyIsIndlYnBhY2s6Ly9idWxidGhlbWUvLi9zcmMvc3R5bGVzL2xheW91dC9tYWluLnNjc3MiLCJ3ZWJwYWNrOi8vYnVsYnRoZW1lLy4vc3JjL3N0eWxlcy9sYXlvdXQvZm9vdGVyLnNjc3MiLCJ3ZWJwYWNrOi8vYnVsYnRoZW1lLy4vc3JjL3N0eWxlcy9wYWdlcy9ob21lLnNjc3MiLCJ3ZWJwYWNrOi8vYnVsYnRoZW1lLy4vc3JjL3N0eWxlcy9wYWdlcy9ibG9nLnNjc3MiLCJ3ZWJwYWNrOi8vYnVsYnRoZW1lLy4vc3JjL3N0eWxlcy9wYWdlcy9wYWdlLnNjc3MiLCJ3ZWJwYWNrOi8vYnVsYnRoZW1lLy4vc3JjL3N0eWxlcy9wYWdlcy9zaW5nbGUuc2NzcyIsIndlYnBhY2s6Ly9idWxidGhlbWUvLi9zcmMvc3R5bGVzL3BhZ2VzL2Fib3V0LnNjc3MiLCJ3ZWJwYWNrOi8vYnVsYnRoZW1lLy4vc3JjL3N0eWxlcy9wYWdlcy9lcnJvcjQwNC5zY3NzIiwid2VicGFjazovL2J1bGJ0aGVtZS8uL3NyYy9zdHlsZXMvY29tcG9uZW50cy90eXBvZ3JhcGh5LnNjc3MiLCJ3ZWJwYWNrOi8vYnVsYnRoZW1lLy4vc3JjL3N0eWxlcy9jb21wb25lbnRzL3BhbmVscy5zY3NzIiwid2VicGFjazovL2J1bGJ0aGVtZS8uL3NyYy9zdHlsZXMvY29tcG9uZW50cy9icmVhZGNydW1icy5zY3NzIiwid2VicGFjazovL2J1bGJ0aGVtZS8uL3NyYy9zdHlsZXMvY29tcG9uZW50cy9jYXJkLnNjc3MiLCJ3ZWJwYWNrOi8vYnVsYnRoZW1lLy4vc3JjL3N0eWxlcy9jb21wb25lbnRzL2VwaXNvZGVzLWxpc3Quc2NzcyIsIndlYnBhY2s6Ly9idWxidGhlbWUvLi9zcmMvc3R5bGVzL2NvbXBvbmVudHMvbGlua3Muc2NzcyIsIndlYnBhY2s6Ly9idWxidGhlbWUvLi9zcmMvc3R5bGVzL2NvbXBvbmVudHMvcGxhdGZvcm1zLnNjc3MiLCJ3ZWJwYWNrOi8vYnVsYnRoZW1lLy4vc3JjL3N0eWxlcy9jb21wb25lbnRzL3BsYXllci5zY3NzIiwid2VicGFjazovL2J1bGJ0aGVtZS8uL3NyYy9zdHlsZXMvY29tcG9uZW50cy9yaWJib24uc2NzcyIsIndlYnBhY2s6Ly9idWxidGhlbWUvLi9zcmMvc3R5bGVzL2NvbXBvbmVudHMvc2Nyb2xsLWJ1dHRvbi5zY3NzIiwid2VicGFjazovL2J1bGJ0aGVtZS8uL3NyYy9zdHlsZXMvY29tcG9uZW50cy9zaGVldC5zY3NzIiwid2VicGFjazovL2J1bGJ0aGVtZS8uL3NyYy9zdHlsZXMvY29tcG9uZW50cy90cmFpbGVyLXBsYXllci5zY3NzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qISBub3JtYWxpemUuY3NzIHY4LjAuMSB8IE1JVCBMaWNlbnNlIHwgZ2l0aHViLmNvbS9uZWNvbGFzL25vcm1hbGl6ZS5jc3MgKi9cblxuLyogRG9jdW1lbnRcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgbGluZSBoZWlnaHQgaW4gYWxsIGJyb3dzZXJzLlxuICogMi4gUHJldmVudCBhZGp1c3RtZW50cyBvZiBmb250IHNpemUgYWZ0ZXIgb3JpZW50YXRpb24gY2hhbmdlcyBpbiBpT1MuXG4gKi9cblxuaHRtbCB7XG4gIGxpbmUtaGVpZ2h0OiAxLjE1OyAvKiAxICovXG4gIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLyogMiAqL1xufVxuXG4vKiBTZWN0aW9uc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiBSZW1vdmUgdGhlIG1hcmdpbiBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cblxuYm9keSB7XG4gIG1hcmdpbjogMDtcbn1cblxuLyoqXG4gKiBSZW5kZXIgdGhlIGBtYWluYCBlbGVtZW50IGNvbnNpc3RlbnRseSBpbiBJRS5cbiAqL1xuXG5tYWluIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi8qKlxuICogQ29ycmVjdCB0aGUgZm9udCBzaXplIGFuZCBtYXJnaW4gb24gYGgxYCBlbGVtZW50cyB3aXRoaW4gYHNlY3Rpb25gIGFuZFxuICogYGFydGljbGVgIGNvbnRleHRzIGluIENocm9tZSwgRmlyZWZveCwgYW5kIFNhZmFyaS5cbiAqL1xuXG5oMSB7XG4gIGZvbnQtc2l6ZTogMmVtO1xuICBtYXJnaW46IDAuNjdlbSAwO1xufVxuXG4vKiBHcm91cGluZyBjb250ZW50XG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIDEuIEFkZCB0aGUgY29ycmVjdCBib3ggc2l6aW5nIGluIEZpcmVmb3guXG4gKiAyLiBTaG93IHRoZSBvdmVyZmxvdyBpbiBFZGdlIGFuZCBJRS5cbiAqL1xuXG5ociB7XG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OyAvKiAxICovXG4gIGhlaWdodDogMDsgLyogMSAqL1xuICBvdmVyZmxvdzogdmlzaWJsZTsgLyogMiAqL1xufVxuXG4vKipcbiAqIDEuIENvcnJlY3QgdGhlIGluaGVyaXRhbmNlIGFuZCBzY2FsaW5nIG9mIGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXG4gKiAyLiBDb3JyZWN0IHRoZSBvZGQgYGVtYCBmb250IHNpemluZyBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cblxucHJlIHtcbiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZSwgbW9ub3NwYWNlOyAvKiAxICovXG4gIGZvbnQtc2l6ZTogMWVtOyAvKiAyICovXG59XG5cbi8qIFRleHQtbGV2ZWwgc2VtYW50aWNzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIFJlbW92ZSB0aGUgZ3JheSBiYWNrZ3JvdW5kIG9uIGFjdGl2ZSBsaW5rcyBpbiBJRSAxMC5cbiAqL1xuXG5hIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbi8qKlxuICogMS4gUmVtb3ZlIHRoZSBib3R0b20gYm9yZGVyIGluIENocm9tZSA1Ny1cbiAqIDIuIEFkZCB0aGUgY29ycmVjdCB0ZXh0IGRlY29yYXRpb24gaW4gQ2hyb21lLCBFZGdlLCBJRSwgT3BlcmEsIGFuZCBTYWZhcmkuXG4gKi9cblxuYWJiclt0aXRsZV0ge1xuICBib3JkZXItYm90dG9tOiBub25lOyAvKiAxICovXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyAvKiAyICovXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDsgLyogMiAqL1xufVxuXG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBmb250IHdlaWdodCBpbiBDaHJvbWUsIEVkZ2UsIGFuZCBTYWZhcmkuXG4gKi9cblxuYixcbnN0cm9uZyB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7XG59XG5cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgaW5oZXJpdGFuY2UgYW5kIHNjYWxpbmcgb2YgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy5cbiAqIDIuIENvcnJlY3QgdGhlIG9kZCBgZW1gIGZvbnQgc2l6aW5nIGluIGFsbCBicm93c2Vycy5cbiAqL1xuXG5jb2RlLFxua2JkLFxuc2FtcCB7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTsgLyogMSAqL1xuICBmb250LXNpemU6IDFlbTsgLyogMiAqL1xufVxuXG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBmb250IHNpemUgaW4gYWxsIGJyb3dzZXJzLlxuICovXG5cbnNtYWxsIHtcbiAgZm9udC1zaXplOiA4MCU7XG59XG5cbi8qKlxuICogUHJldmVudCBgc3ViYCBhbmQgYHN1cGAgZWxlbWVudHMgZnJvbSBhZmZlY3RpbmcgdGhlIGxpbmUgaGVpZ2h0IGluXG4gKiBhbGwgYnJvd3NlcnMuXG4gKi9cblxuc3ViLFxuc3VwIHtcbiAgZm9udC1zaXplOiA3NSU7XG4gIGxpbmUtaGVpZ2h0OiAwO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbn1cblxuc3ViIHtcbiAgYm90dG9tOiAtMC4yNWVtO1xufVxuXG5zdXAge1xuICB0b3A6IC0wLjVlbTtcbn1cblxuLyogRW1iZWRkZWQgY29udGVudFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGJvcmRlciBvbiBpbWFnZXMgaW5zaWRlIGxpbmtzIGluIElFIDEwLlxuICovXG5cbmltZyB7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbn1cblxuLyogRm9ybXNcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogMS4gQ2hhbmdlIHRoZSBmb250IHN0eWxlcyBpbiBhbGwgYnJvd3NlcnMuXG4gKiAyLiBSZW1vdmUgdGhlIG1hcmdpbiBpbiBGaXJlZm94IGFuZCBTYWZhcmkuXG4gKi9cblxuYnV0dG9uLFxuaW5wdXQsXG5vcHRncm91cCxcbnNlbGVjdCxcbnRleHRhcmVhIHtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7IC8qIDEgKi9cbiAgZm9udC1zaXplOiAxMDAlOyAvKiAxICovXG4gIGxpbmUtaGVpZ2h0OiAxLjE1OyAvKiAxICovXG4gIG1hcmdpbjogMDsgLyogMiAqL1xufVxuXG4vKipcbiAqIFNob3cgdGhlIG92ZXJmbG93IGluIElFLlxuICogMS4gU2hvdyB0aGUgb3ZlcmZsb3cgaW4gRWRnZS5cbiAqL1xuXG5idXR0b24sXG5pbnB1dCB7IC8qIDEgKi9cbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBpbmhlcml0YW5jZSBvZiB0ZXh0IHRyYW5zZm9ybSBpbiBFZGdlLCBGaXJlZm94LCBhbmQgSUUuXG4gKiAxLiBSZW1vdmUgdGhlIGluaGVyaXRhbmNlIG9mIHRleHQgdHJhbnNmb3JtIGluIEZpcmVmb3guXG4gKi9cblxuYnV0dG9uLFxuc2VsZWN0IHsgLyogMSAqL1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbn1cblxuLyoqXG4gKiBDb3JyZWN0IHRoZSBpbmFiaWxpdHkgdG8gc3R5bGUgY2xpY2thYmxlIHR5cGVzIGluIGlPUyBhbmQgU2FmYXJpLlxuICovXG5cbmJ1dHRvbixcblt0eXBlPVwiYnV0dG9uXCJdLFxuW3R5cGU9XCJyZXNldFwiXSxcblt0eXBlPVwic3VibWl0XCJdIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247XG59XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBpbm5lciBib3JkZXIgYW5kIHBhZGRpbmcgaW4gRmlyZWZveC5cbiAqL1xuXG5idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXG5bdHlwZT1cImJ1dHRvblwiXTo6LW1vei1mb2N1cy1pbm5lcixcblt0eXBlPVwicmVzZXRcIl06Oi1tb3otZm9jdXMtaW5uZXIsXG5bdHlwZT1cInN1Ym1pdFwiXTo6LW1vei1mb2N1cy1pbm5lciB7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgcGFkZGluZzogMDtcbn1cblxuLyoqXG4gKiBSZXN0b3JlIHRoZSBmb2N1cyBzdHlsZXMgdW5zZXQgYnkgdGhlIHByZXZpb3VzIHJ1bGUuXG4gKi9cblxuYnV0dG9uOi1tb3otZm9jdXNyaW5nLFxuW3R5cGU9XCJidXR0b25cIl06LW1vei1mb2N1c3JpbmcsXG5bdHlwZT1cInJlc2V0XCJdOi1tb3otZm9jdXNyaW5nLFxuW3R5cGU9XCJzdWJtaXRcIl06LW1vei1mb2N1c3Jpbmcge1xuICBvdXRsaW5lOiAxcHggZG90dGVkIEJ1dHRvblRleHQ7XG59XG5cbi8qKlxuICogQ29ycmVjdCB0aGUgcGFkZGluZyBpbiBGaXJlZm94LlxuICovXG5cbmZpZWxkc2V0IHtcbiAgcGFkZGluZzogMC4zNWVtIDAuNzVlbSAwLjYyNWVtO1xufVxuXG4vKipcbiAqIDEuIENvcnJlY3QgdGhlIHRleHQgd3JhcHBpbmcgaW4gRWRnZSBhbmQgSUUuXG4gKiAyLiBDb3JyZWN0IHRoZSBjb2xvciBpbmhlcml0YW5jZSBmcm9tIGBmaWVsZHNldGAgZWxlbWVudHMgaW4gSUUuXG4gKiAzLiBSZW1vdmUgdGhlIHBhZGRpbmcgc28gZGV2ZWxvcGVycyBhcmUgbm90IGNhdWdodCBvdXQgd2hlbiB0aGV5IHplcm8gb3V0XG4gKiAgICBgZmllbGRzZXRgIGVsZW1lbnRzIGluIGFsbCBicm93c2Vycy5cbiAqL1xuXG5sZWdlbmQge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94OyAvKiAxICovXG4gIGNvbG9yOiBpbmhlcml0OyAvKiAyICovXG4gIGRpc3BsYXk6IHRhYmxlOyAvKiAxICovXG4gIG1heC13aWR0aDogMTAwJTsgLyogMSAqL1xuICBwYWRkaW5nOiAwOyAvKiAzICovXG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7IC8qIDEgKi9cbn1cblxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgdmVydGljYWwgYWxpZ25tZW50IGluIENocm9tZSwgRmlyZWZveCwgYW5kIE9wZXJhLlxuICovXG5cbnByb2dyZXNzIHtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xufVxuXG4vKipcbiAqIFJlbW92ZSB0aGUgZGVmYXVsdCB2ZXJ0aWNhbCBzY3JvbGxiYXIgaW4gSUUgMTArLlxuICovXG5cbnRleHRhcmVhIHtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG5cbi8qKlxuICogMS4gQWRkIHRoZSBjb3JyZWN0IGJveCBzaXppbmcgaW4gSUUgMTAuXG4gKiAyLiBSZW1vdmUgdGhlIHBhZGRpbmcgaW4gSUUgMTAuXG4gKi9cblxuW3R5cGU9XCJjaGVja2JveFwiXSxcblt0eXBlPVwicmFkaW9cIl0ge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94OyAvKiAxICovXG4gIHBhZGRpbmc6IDA7IC8qIDIgKi9cbn1cblxuLyoqXG4gKiBDb3JyZWN0IHRoZSBjdXJzb3Igc3R5bGUgb2YgaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgYnV0dG9ucyBpbiBDaHJvbWUuXG4gKi9cblxuW3R5cGU9XCJudW1iZXJcIl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG5bdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gIGhlaWdodDogYXV0bztcbn1cblxuLyoqXG4gKiAxLiBDb3JyZWN0IHRoZSBvZGQgYXBwZWFyYW5jZSBpbiBDaHJvbWUgYW5kIFNhZmFyaS5cbiAqIDIuIENvcnJlY3QgdGhlIG91dGxpbmUgc3R5bGUgaW4gU2FmYXJpLlxuICovXG5cblt0eXBlPVwic2VhcmNoXCJdIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7IC8qIDEgKi9cbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7IC8qIDIgKi9cbn1cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGlubmVyIHBhZGRpbmcgaW4gQ2hyb21lIGFuZCBTYWZhcmkgb24gbWFjT1MuXG4gKi9cblxuW3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG59XG5cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgaW5hYmlsaXR5IHRvIHN0eWxlIGNsaWNrYWJsZSB0eXBlcyBpbiBpT1MgYW5kIFNhZmFyaS5cbiAqIDIuIENoYW5nZSBmb250IHByb3BlcnRpZXMgdG8gYGluaGVyaXRgIGluIFNhZmFyaS5cbiAqL1xuXG46Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247IC8qIDEgKi9cbiAgZm9udDogaW5oZXJpdDsgLyogMiAqL1xufVxuXG4vKiBJbnRlcmFjdGl2ZVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLypcbiAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIEVkZ2UsIElFIDEwKywgYW5kIEZpcmVmb3guXG4gKi9cblxuZGV0YWlscyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4vKlxuICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gYWxsIGJyb3dzZXJzLlxuICovXG5cbnN1bW1hcnkge1xuICBkaXNwbGF5OiBsaXN0LWl0ZW07XG59XG5cbi8qIE1pc2NcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgMTArLlxuICovXG5cbnRlbXBsYXRlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRSAxMC5cbiAqL1xuXG5baGlkZGVuXSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4iLCIvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBHZW5lcmFsID4gRk9OVCBGQUNFU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5AdXNlICdzYXNzOm1hdGgnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IENPTE9SU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBMaWdodFxuQGZ1bmN0aW9uIGxpZ2h0KCRjb2xvciwgJHBlcmNlbnQpIHtcbiAgQHJldHVybiBtaXgoI2ZmZiwgJGNvbG9yLCAkcGVyY2VudCk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IERhcmtcbkBmdW5jdGlvbiBkYXJrKCRjb2xvciwgJHBlcmNlbnQpIHtcbiAgQHJldHVybiBtaXgoIzAwMCwgJGNvbG9yLCAkcGVyY2VudCk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogTUFQU1xuXG4kcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzOiBmYWxzZSAhZGVmYXVsdDtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIEdldCBEZWVwIFdhcm5pbmdcbi8vIERpc3BsYXlzIGEgd2FybmluZyBpZiB0aGUgcmV0cmlldmVkIHZhbHVlIGlzIGBudWxsYFxuQGZ1bmN0aW9uIG1hcC1nZXQtZGVlcC13YXJuaW5nKCR3YXJuLCAkZ2V0LCAka2V5KSB7XG4gIEBpZiBub3QgJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5ncyB7XG4gICAgQGlmICRnZXQgPT0gbnVsbCB7XG4gICAgICBAd2FybiAnTWFwIGhhcyBubyB2YWx1ZSBmb3Iga2V5IHNlYXJjaCBgI3skd2Fybn1gJztcbiAgICB9IEBlbHNlIGlmIHR5cGUtb2YoJGdldCkgIT0gJ21hcCcge1xuICAgICAgQHdhcm4gJ05vbi1tYXAgdmFsdWUgZm91bmQgZm9yIGtleSBzZWFyY2ggYCN7JHdhcm59YCwgY2Fubm90IHNlYXJjaCBmb3Iga2V5IGAjeyRrZXl9YCc7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiBudWxsO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IERlZXBcbi8vIEdpdmVuIGEgbWFwIGFuZCBhIGxpc3Qgb2Yga2V5cywgZmluZCB0aGUgdmFsdWUgYXQgdGhlIGdpdmVuIGtleVxuQGZ1bmN0aW9uIG1hcC1nZXQtZGVlcCgkbWFwLCAka2V5cy4uLikge1xuICBAaWYgbGVuZ3RoKCRrZXlzKSA9PSAxIHtcbiAgICAka2V5czogbnRoKCRrZXlzLCAxKTtcbiAgfVxuXG4gICR3YXJuOiAnI3tudGgoJGtleXMsIDEpfSc7XG4gICRsZW5ndGg6IGxlbmd0aCgka2V5cyk7XG4gICRnZXQ6IG1hcC1nZXQoJG1hcCwgbnRoKCRrZXlzLCAxKSk7XG5cbiAgQGlmICRsZW5ndGggPiAxIHtcbiAgICBAZm9yICRpIGZyb20gMiB0aHJvdWdoICRsZW5ndGgge1xuICAgICAgQGlmICRnZXQgIT0gbnVsbCBhbmQgdHlwZS1vZigkZ2V0KSA9PSAnbWFwJyB7XG4gICAgICAgICR3YXJuOiAkd2FybiArICctPiN7bnRoKCRrZXlzLCAkaSl9JztcbiAgICAgICAgJGdldDogbWFwLWdldCgkZ2V0LCBudGgoJGtleXMsICRpKSk7XG5cbiAgICAgICAgQGlmICRnZXQgPT0gbnVsbCB7XG4gICAgICAgICAgQHJldHVybiBtYXAtZ2V0LWRlZXAtd2FybmluZygkd2FybiwgJGdldCwgbnRoKCRrZXlzLCAkaSkpO1xuICAgICAgICB9XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgQHJldHVybiBtYXAtZ2V0LWRlZXAtd2FybmluZygkd2FybiwgJGdldCwgbnRoKCRrZXlzLCAkaSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGdldDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIEdldCBLZXlzXG5AZnVuY3Rpb24gZ2V0LWtleXMoJGtleXMsICRjb3VudGVyKSB7XG4gICRyZXR1cm46ICgpO1xuXG4gIEBmb3IgJGkgZnJvbSAxIHRvICRjb3VudGVyIHtcbiAgICAkcmV0dXJuOiBhcHBlbmQoJHJldHVybiwgbnRoKCRrZXlzLCAkaSkpO1xuICB9XG5cbiAgQHJldHVybiAkcmV0dXJuO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IFByZXZpb3VzIEtleVxuQGZ1bmN0aW9uIG1hcC1nZXQtcHJldi1rZXkoJG1hcCwgJGtleSkge1xuICAkaW5kZXg6IGluZGV4KCRtYXAsICRrZXkpO1xuICAkcHJldjogJGluZGV4IC0gMTtcbiAgJHJlc3VsdDogaWYoJHByZXYgPiAwLCBudGgoJG1hcCwgJHByZXYpLCBudWxsKTtcblxuICBAcmV0dXJuICRyZXN1bHQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBTZXRcbkBmdW5jdGlvbiBtYXAtc2V0KCRtYXAsICRrZXksICR2YWx1ZSkge1xuICBAcmV0dXJuIG1hcC1tZXJnZShcbiAgICAkbWFwLFxuICAgIChcbiAgICAgICRrZXk6ICR2YWx1ZVxuICAgIClcbiAgKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIFNldCBEZWVwXG5AZnVuY3Rpb24gbWFwLXNldC1kZWVwKCRtYXAsICRrZXlzLCAkdmFsdWUpIHtcbiAgJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5nczogdHJ1ZSAhZ2xvYmFsO1xuICAkbGVuZ3RoOiBsZW5ndGgoJGtleXMpO1xuICAkZ2V0LWtleXM6ICgpO1xuICAkbWFwLWxldmVsOiAoKTtcblxuICBAaWYgJGxlbmd0aCA+IDEge1xuICAgICRnZXQta2V5czogZ2V0LWtleXMoJGtleXMsICRsZW5ndGgpO1xuICAgICRtYXAtbGV2ZWw6IG1hcC1nZXQtZGVlcCgkbWFwLCAkZ2V0LWtleXMpO1xuICB9XG5cbiAgJG1lcmdlOiAoXG4gICAgbnRoKCRrZXlzLCAkbGVuZ3RoKTogJHZhbHVlXG4gICk7XG5cbiAgQGlmICRtYXAtbGV2ZWwge1xuICAgICRtZXJnZTogbWFwLW1lcmdlKCRtYXAtbGV2ZWwsICRtZXJnZSk7XG4gIH1cblxuICBAZm9yICRpIGZyb20gKCRsZW5ndGggKiAtMSArIDEpIHRocm91Z2ggLTEge1xuICAgICRqOiBhYnMoJGkpO1xuICAgICRrZXk6IG50aCgka2V5cywgJGopO1xuXG4gICAgLy8gQGRlYnVnICRnZXQta2V5cztcblxuICAgIEBpZiAkaiA+IDEge1xuICAgICAgJGdldC1rZXlzOiBnZXQta2V5cygka2V5cywgJGopO1xuICAgICAgJG1hcC1sZXZlbDogbWFwLWdldC1kZWVwKCRtYXAsICRnZXQta2V5cyk7XG5cbiAgICAgIEBpZiAkbWFwLWxldmVsIHtcbiAgICAgICAgJG1lcmdlOiBtYXAtbWVyZ2UoXG4gICAgICAgICAgJG1hcC1sZXZlbCxcbiAgICAgICAgICAoXG4gICAgICAgICAgICAka2V5OiAkbWVyZ2VcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgJG1lcmdlOiAoXG4gICAgICAgICAgJGtleTogJG1lcmdlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBAZWxzZSB7XG4gICAgICAkbWVyZ2U6IChcbiAgICAgICAgJGtleTogJG1lcmdlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gICRtYXA6IG1hcC1tZXJnZSgkbWFwLCAkbWVyZ2UpO1xuXG4gICRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3M6IGZhbHNlICFnbG9iYWw7XG5cbiAgQHJldHVybiAkbWFwO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IFVOSVRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFByb2dyZXNzaXZlIGNhbGNcbkBmdW5jdGlvbiBnZXQtcHJvZ3Jlc3NpdmUtY2FsYyhcbiAgJG1pbi1vYmotc2l6ZSxcbiAgJG1heC1vYmotc2l6ZSxcbiAgJG1pbi12cCxcbiAgJG1heC12cCxcbiAgJHZwLXVuaXQ6IHZ3XG4pIHtcbiAgQHJldHVybiBjYWxjKFxuICAgICN7JG1pbi1vYmotc2l6ZX0gKyAje3N0cmlwLXVuaXQoJG1heC1vYmotc2l6ZSAtICRtaW4tb2JqLXNpemUpfSAqXG4gICAgICAoKDEwMCN7JHZwLXVuaXR9IC0gI3skbWluLXZwfSkgLyAje3N0cmlwLXVuaXQoJG1heC12cCAtICRtaW4tdnApfSlcbiAgKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBVTklUU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTdHJpcCB1bml0XG5AZnVuY3Rpb24gc3RyaXAtdW5pdCgkbnVtYmVyKSB7XG4gIEBpZiB0eXBlLW9mKCRudW1iZXIpID09ICdudW1iZXInIGFuZCBub3QgdW5pdGxlc3MoJG51bWJlcikge1xuICAgIEByZXR1cm4gJG51bWJlciAvICgkbnVtYmVyICogMCArIDEpO1xuICB9XG5cbiAgQHJldHVybiAkbnVtYmVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgZW0vcmVtIHVuaXRcbkBmdW5jdGlvbiBlbSgkbnVtLCAkZm9udC1zaXplOiBmYWxzZSkge1xuICBAcmV0dXJuIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgZW0pO1xufVxuXG5AZnVuY3Rpb24gcmVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCByZW0pO1xufVxuXG5AZnVuY3Rpb24gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCAkdW5pdCkge1xuICAkZnM6IDEwcHg7XG5cbiAgQGlmICRmb250LXNpemUge1xuICAgICRmczogJGZvbnQtc2l6ZTtcbiAgfVxuICBAZWxzZSBpZiAkYmFzZS1odG1sLWZvbnQtc2l6ZSB7IC8vIG1ha2Ugc3VyZSB0byBkZWZpbmUgdGhpcyB2YXJpYWJsZSBvbiB5b3VyIG93blxuICAgICRmczogJGJhc2UtaHRtbC1mb250LXNpemU7XG4gIH1cblxuICBAcmV0dXJuICN7c3RyaXAtdW5pdCgkbnVtKSAvIHN0cmlwLXVuaXQoJGZzKX0jeyR1bml0fTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IHNjcmVlbiBwZXJjZW50XG5AZnVuY3Rpb24gZ2V0LXNjcmVlbi1wZXJjZW50KCR3aWR0aCwgJHNjcmVlbikge1xuICBAcmV0dXJuIHVucXVvdGUoJyN7JHdpZHRoICogMTAwIC8gJHNjcmVlbn0lJyk7XG59XG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogWi1JTkRFWEVTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdlbmVyYXRvclxuQGZ1bmN0aW9uIHotaW5kZXgoJG1hcCwgJGtleXMpIHtcbiAgJGZvdW5kLWluZGV4OiBudWxsO1xuXG4gIEBlYWNoICRrZXkgaW4gJGtleXMge1xuICAgIEBpZiAodHlwZS1vZigkbWFwKSA9PSAnbWFwJykge1xuICAgICAgJGZvdW5kLWluZGV4OiBpbmRleChtYXAta2V5cygkbWFwKSwgJGtleSk7XG4gICAgICAkbWFwOiBtYXAtZ2V0KCRtYXAsICRrZXkpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJGZvdW5kLWluZGV4OiBpbmRleCgkbWFwLCAka2V5KTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRmb3VuZC1pbmRleDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU2VydmVyXG5AZnVuY3Rpb24geigkbWFwLCAka2V5cy4uLikge1xuICBAcmV0dXJuIHotaW5kZXgoJG1hcCwgJGtleXMpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IEZPUk1TXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IElucHV0IHBsYWNlaG9sZGVyXG5AbWl4aW4gaW5wdXQtcGxhY2Vob2xkZXIoJGNvbCwgJHN0eWxlOiBpdGFsaWMpIHtcbiAgJjotbW96LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbiAgJjo6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2w7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICB9XG4gICY6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbiAgJjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2w7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICB9XG59XG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogUE9TSVRJT05TXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEFic29sdXRlIGNlbnRlcmVkXG5AbWl4aW4gYWJzb2x1dGUtY2VudGVyZWQoJHR5cGU6IGFic29sdXRlLCAkcG9zOiA1MCUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICB0b3A6ICRwb3M7XG4gIGxlZnQ6ICRwb3M7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBBYnNvbHV0ZSBjZW50ZXJlZCBYXG5AbWl4aW4gYWJzb2x1dGUtY2VudGVyZWQteCgkdHlwZTogYWJzb2x1dGUsICRwb3M6IDUwJSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIGxlZnQ6ICRwb3M7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQWJzb2x1dGUgY2VudGVyZWQgWVxuQG1peGluIGFic29sdXRlLWNlbnRlcmVkLXkoJHR5cGU6IGFic29sdXRlLCAkcG9zOiA1MCUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICB0b3A6ICRwb3M7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBTSE9SVEhBTkRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFBvc2l0aW9uc1xuQG1peGluIHBvc2l0aW9uLXN0cmV0Y2hlZCgkdHlwZTogYWJzb2x1dGUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IERpbWVuc2lvbnNcbkBtaXhpbiBkaW1lbnNpb25zLXNxdWFyZSgkdmFsdWUpIHtcbiAgd2lkdGg6ICR2YWx1ZTtcbiAgaGVpZ2h0OiAkdmFsdWU7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFBhZGRpbmdcbkBtaXhpbiBwYWRkaW5nLXYoJHZhbHVlKSB7XG4gIHBhZGRpbmctdG9wOiAkdmFsdWU7XG4gIHBhZGRpbmctYm90dG9tOiAkdmFsdWU7XG59XG5cbkBtaXhpbiBwYWRkaW5nLWgoJHZhbHVlKSB7XG4gIHBhZGRpbmctcmlnaHQ6ICR2YWx1ZTtcbiAgcGFkZGluZy1sZWZ0OiAkdmFsdWU7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcmdpblxuQG1peGluIG1hcmdpbi12KCR2YWx1ZSkge1xuICBtYXJnaW4tdG9wOiAkdmFsdWU7XG4gIG1hcmdpbi1ib3R0b206ICR2YWx1ZTtcbn1cblxuQG1peGluIG1hcmdpbi1oKCR2YWx1ZSkge1xuICBtYXJnaW4tcmlnaHQ6ICR2YWx1ZTtcbiAgbWFyZ2luLWxlZnQ6ICR2YWx1ZTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQm9yZGVyXG5AbWl4aW4gYm9yZGVyLXYoJHZhbHVlKSB7XG4gIGJvcmRlci10b3A6ICR2YWx1ZTtcbiAgYm9yZGVyLWJvdHRvbTogJHZhbHVlO1xufVxuXG5AbWl4aW4gYm9yZGVyLWgoJHZhbHVlKSB7XG4gIGJvcmRlci1yaWdodDogJHZhbHVlO1xuICBib3JkZXItbGVmdDogJHZhbHVlO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IFRZUE9HUkFQSFlcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRm9udCBzbW9vdGhpbmdcbkBtaXhpbiBmb250LXNtb290aGluZygkdmFsdWU6IGFudGlhbGlhc2VkKSB7XG4gIEBpZiAkdmFsdWUgPT0gYW50aWFsaWFzZWQge1xuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG4gIH0gQGVsc2Uge1xuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IHN1YnBpeGVsLWFudGlhbGlhc2VkO1xuICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBhdXRvO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFRleHQgdXBwZXJjYXNlXG5AbWl4aW4gdGV4dC11cHBlcmNhc2UoKSB7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIC1tb3otZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnY2FzZSc7XG4gIC13ZWJraXQtZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnY2FzZSc7XG4gIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2Nhc2UnIG9uO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTZWxlY3Rpb25cbkBtaXhpbiBzZWxlY3Rpb24oJGNvbCkge1xuICAkYmdyOiBpZigkY29sICE9IHRyYW5zcGFyZW50LCByZ2JhKCRjb2wsIDAuNSksIHJnYmEoMCwgMCwgMCwgMCkpO1xuXG4gICY6Oi1tb3otc2VsZWN0aW9uIHtcbiAgICBiYWNrZ3JvdW5kOiAkYmdyO1xuICB9XG5cbiAgJjo6c2VsZWN0aW9uIHtcbiAgICBiYWNrZ3JvdW5kOiAkYmdyO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEJBU0VcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgSW1wb3J0c1xuQGltcG9ydCAnLi4vLi4vZGVmcy9icmFuZC5qcyc7XG5AaW1wb3J0ICcuLi8uLi9kZWZzL3dlYnNpdGUuanMnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBGb250IHNpemVcbkBmdW5jdGlvbiByb2xlKCRtYXAsICR2YWx1ZSkge1xuICAkci1tYXA6IG1hcC1nZXQoJHZhbHVlLCAnbWFwJyk7XG4gICRyLXZhbHVlOiBtYXAtZ2V0KCR2YWx1ZSwgJ3ZhbHVlJyk7XG4gIEByZXR1cm4gbWFwLWdldCgkci1tYXAsICRyLXZhbHVlKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zID4gQ0FMQ1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCB2YWx1ZSBiYXNlZCBvbiB0aGUgYmFzZSBmb250IHNpemVcbkBmdW5jdGlvbiBiYXNlKCR2YWx1ZSkge1xuICBAcmV0dXJuIG1hdGguZGl2KCR2YWx1ZSwgbWFwLWdldCgkcm9sZXMtcmF0aW9zLCAnbGF5b3V0LWdyb3d0aCcpKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUHJvZ3Jlc3NpdmUgY2FsY1xuQGZ1bmN0aW9uIGdldC1wcm9ncmVzc2l2ZS1jYWxjKFxuICAkbWluLW9iai1zaXplLFxuICAkbWF4LW9iai1zaXplLFxuICAkbWluLXZwLFxuICAkbWF4LXZwLFxuICAkdnAtdW5pdDogdndcbikge1xuICBAcmV0dXJuIGNhbGMoXG4gICAgI3twaXhlbGF0ZSgkbWluLW9iai1zaXplKX0gKyAje3N0cmlwLXVuaXQoJG1heC1vYmotc2l6ZSAtICRtaW4tb2JqLXNpemUpfSAqXG4gICAgICAoXG4gICAgICAgICgxMDAjeyR2cC11bml0fSAtICN7cGl4ZWxhdGUoJG1pbi12cCl9KSAvICN7c3RyaXAtdW5pdChcbiAgICAgICAgICAgICRtYXgtdnAgLSAkbWluLXZwXG4gICAgICAgICAgKX1cbiAgICAgIClcbiAgKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zID4gVU5JVFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTdHJpcCB1bml0XG5AZnVuY3Rpb24gc3RyaXAtdW5pdCgkbnVtYmVyKSB7XG4gIEBpZiB0eXBlLW9mKCRudW1iZXIpID09ICdudW1iZXInIGFuZCBub3QgdW5pdGxlc3MoJG51bWJlcikge1xuICAgIEByZXR1cm4gbWF0aC5kaXYoJG51bWJlciwgKCRudW1iZXIgKiAwICsgMSkpO1xuICB9XG5cbiAgQHJldHVybiAkbnVtYmVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgUHggdW5pdFxuQGZ1bmN0aW9uIHBpeGVsYXRlKCR2YWx1ZSkge1xuICBAcmV0dXJuICN7c3RyaXAtdW5pdCgkdmFsdWUpfVB4O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgZW0vcmVtIHVuaXRcbkBmdW5jdGlvbiBlbSgkbnVtLCAkZm9udC1zaXplOiBmYWxzZSkge1xuICBAcmV0dXJuIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgZW0pO1xufVxuXG5AZnVuY3Rpb24gcmVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCByZW0pO1xufVxuXG5AZnVuY3Rpb24gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCAkdW5pdCkge1xuICAkZnM6IDEwcHg7XG5cbiAgQGlmICRmb250LXNpemUge1xuICAgICRmczogJGZvbnQtc2l6ZTtcbiAgfSBAZWxzZSB7XG4gICAgJGZzOiBtYXAtZ2V0KCR0eXBvZ3JhcGh5LCAnYmFzZV9mb250X3NpemUnKTtcbiAgfVxuXG4gIEByZXR1cm4gI3ttYXRoLmRpdihzdHJpcC11bml0KCRudW0pLCBzdHJpcC11bml0KCRmcykpfSN7JHVuaXR9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBEYXRhID4gU1dBVENIRVNcblxuQGltcG9ydCAnLi4vLi4vZGVmcy9zd2F0Y2hlcy9pbmRleC5qcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19icmVha3BvaW50cyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19yYXRpb3MnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvc3dhdGNoZXMvc3dhdGNoZXNfc2NyZWVucyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19zcGFjZXMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBEYXRhID4gUk9MRVNcblxuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfYm9yZGVycyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19icmVha3BvaW50cyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19jb2xvcnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfZGltZW5zaW9ucyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19yYXRpb3MnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfc2NyZWVucyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19zaGFkb3dzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3NwYWNlcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc190eXBvZ3JhcGh5JztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zID4gU0NBTEFCSUxJVFlcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTY2FsZXJcbkBtaXhpbiBzY2FsZXIoXG4gICRwcm9wZXJ0eSxcbiAgJG1pbi1zaXplLFxuICAkbWF4LXNpemUsXG4gICRtaW4tdnc6IG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtaW4nKSxcbiAgJG1heC12dzogbWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21heCcpXG4pIHtcbiAgI3skcHJvcGVydHl9OiAje3N0cmlwLXVuaXQobWF0aC5kaXYoKCRtaW4tdncgKiAwLjk3OTYpICogJG1pbi1zaXplLCAxMDAwKSl9dnc7IC8vIDAuOTc5NiBmaXhlcyB3cm9uZyBjYWxjdWxhdGlvbnMgaW4gQ2hyb21lXG5cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogJG1pbi12dykge1xuICAgICN7JHByb3BlcnR5fTogZ2V0LXByb2dyZXNzaXZlLWNhbGMoJG1pbi1zaXplLCAkbWF4LXNpemUsICRtaW4tdncsICRtYXgtdncpO1xuICB9XG5cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogJG1heC12dykge1xuICAgICN7JHByb3BlcnR5fTogcGl4ZWxhdGUoJG1heC1zaXplKTtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBQbGFjZWhvbGRlcnMgPiBTQ0FMQUJJTElUWVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE5lZ2F0aXZlXG4lcGgtbmVnYXRpdmUge1xuICBoMSxcbiAgaDIsXG4gIGgzLFxuICBoNCxcbiAgaDUsXG4gIGg2LFxuICBwIHtcbiAgICBjb2xvcjogbWFwLWdldCgkcm9sZXMtY29sLXRleHRzLCAnbmVnYXRpdmUnKTtcbiAgfVxuXG4gIC5tZXRhIHtcbiAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRzd2F0Y2hlcy1jb2xvcnMsICdob25leS15ZWxsb3cnLCAnbGlnaHQnKTtcbiAgfVxuXG4gIC50ZXh0LWxpbmsge1xuICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ25vcm1hbCcpO1xuICAgIGJvcmRlci1ib3R0b206IHBpeGVsYXRlKDFweCkgZG90dGVkXG4gICAgICByZ2JhKG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnbm9ybWFsJyksIDAuMzMpO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdob3ZlcicpO1xuICAgIH1cblxuICAgICY6YWN0aXZlIHtcbiAgICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2FjdGl2ZScpO1xuICAgIH1cbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBXYXZlXG4lcGgtd2F2ZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogNTAlO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLXdpZHRoOiBtYXRoLmRpdihtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWF4JyksIDIpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG5cbiAgPiBzdmcge1xuICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKDEwMCUpO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEhlYWQgd2F2ZVxuJXBoLWhlYWQtd2F2ZSB7XG4gICR3YXZlLWhlaWdodDogYmFzZShtYXAtZ2V0KCRyb2xlcy1kaW1lbnNpb25zLXdhdmVzLCAnaGVhZGVyJykpO1xuXG4gIC53YXZlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgdG9wOiBjYWxjKDEwMCUgLSAxUHgpO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogZW0oJHdhdmUtaGVpZ2h0KTtcblxuICAgIC5pbm5lciB7XG4gICAgICBAaW5jbHVkZSBkaW1lbnNpb25zLXNxdWFyZSgxMDAlKTtcblxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgICAgc3ZnIHtcbiAgICAgICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG5cbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIG1pbi13aWR0aDogbWF0aC5kaXYobWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21heCcpLCAyKTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBrZXlmcmFtZXMgc2xpZGUge1xuICAgIGZyb20ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgfVxuXG4gICAgdG8ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgMCk7XG4gICAgfVxuICB9XG5cbiAgLnNjcm9sbC1idG4ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3R0b206IDIwcHg7XG4gICAgbGVmdDogNTAlO1xuICAgIHotaW5kZXg6IDE7XG4gICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRzd2F0Y2hlcy1jb2xvcnMsICdjb3JuZmxvd2VyJywgJ2Jhc2UnKTtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICBhbmltYXRpb246IHNsaWRlIDFzIGVhc2UtaW4tb3V0IGluZmluaXRlIGFsdGVybmF0ZTtcblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdob3ZlcicpO1xuICAgIH1cblxuICAgICY6YWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnYWN0aXZlJyk7XG4gICAgfVxuXG4gICAgc3ZnIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gICAgfVxuXG4gICAgYm9keTpub3QoLnNjcm9sbGFibGUpICYge1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBWYXJpYWJsZXNcbiRmb250cy1kaXI6ICcuLi8uLi9mb250cyc7XG4kdHlwZWZhY2VzOiBtYXAtZ2V0LWRlZXAoJGJyYW5kLCAndHlwb2dyYXBoeScsICd0eXBlZmFjZXMnKTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRnVuY3Rpb25zXG5AZnVuY3Rpb24gZ2V0LXdlaWdodCgkd2VpZ2h0LW5hbWUpIHtcbiAgJHdlaWdodHM6IG1hcC1nZXQtZGVlcCgkYnJhbmQsICd0eXBvZ3JhcGh5JywgJ3dlaWdodHMnKTtcbiAgJHZhbHVlOiAnJztcbiAgQGVhY2ggJHdlaWdodCBpbiAkd2VpZ2h0cyB7XG4gICAgQGlmICR3ZWlnaHQtbmFtZSA9PSBtYXAtZ2V0KCR3ZWlnaHQsICdpZCcpIHtcbiAgICAgICR2YWx1ZTogbWFwLWdldCgkd2VpZ2h0LCAndmFsdWUnKTtcbiAgICB9XG4gIH1cbiAgQHJldHVybiAkdmFsdWU7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1peGluc1xuQG1peGluIGZvbnQtZmFjZSgkdHlwZWZhY2UtbmFtZSwgJHN0eWxlLW5hbWUsICR3ZWlnaHQsICRzdHlsZTogJ25vcm1hbCcpIHtcbiAgJHN0eWxlLW5hbWU6IGlmKCRzdHlsZSA9PSAnaXRhbGljJywgJyN7JHN0eWxlLW5hbWV9aXRhbGljJywgJyN7JHN0eWxlLW5hbWV9Jyk7XG4gICRwYXRoOiAnI3skZm9udHMtZGlyfS8je3RvLWxvd2VyLWNhc2UoJHR5cGVmYWNlLW5hbWUpfS8jeyRzdHlsZS1uYW1lfSc7XG5cbiAgQGZvbnQtZmFjZSB7XG4gICAgZm9udC1mYW1pbHk6ICR0eXBlZmFjZS1uYW1lO1xuICAgIGZvbnQtc3R5bGU6IHVucXVvdGUoJHN0eWxlKTtcbiAgICBmb250LXdlaWdodDogJHdlaWdodDtcbiAgICBzcmM6IHVybCgnI3skcGF0aH0ud29mZjInKSBmb3JtYXQoJ3dvZmYyJyksXG4gICAgICB1cmwoJyN7JHBhdGh9LndvZmYnKSBmb3JtYXQoJ3dvZmYnKTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBEZWZpbml0aW9uc1xuJHR5cGVmYWNlcy1saXN0OiBpZih0eXBlLW9mKCR0eXBlZmFjZXMpID09ICdtYXAnLCBbJHR5cGVmYWNlc10sICR0eXBlZmFjZXMpO1xuQGVhY2ggJHR5cGVmYWNlIGluICR0eXBlZmFjZXMtbGlzdCB7XG4gICR0eXBlZmFjZS1uYW1lOiBtYXAtZ2V0KCR0eXBlZmFjZSwgJ25hbWUnKTtcbiAgJHR5cGVmYWNlLXdlaWdodHM6IG1hcC1nZXQoJHR5cGVmYWNlLCAnd2VpZ2h0cycpO1xuICAkdHlwZWZhY2Utc3VwcG9ydHMtaXRhbGljOiBtYXAtZ2V0KCR0eXBlZmFjZSwgJ2l0YWxpYycpO1xuXG4gIEBlYWNoICR3ZWlnaHQgaW4gJHR5cGVmYWNlLXdlaWdodHMge1xuICAgIEBpbmNsdWRlIGZvbnQtZmFjZSgkdHlwZWZhY2UtbmFtZSwgJHdlaWdodCwgZ2V0LXdlaWdodCgkd2VpZ2h0KSk7XG5cbiAgICBAaWYgJHR5cGVmYWNlLXN1cHBvcnRzLWl0YWxpYyA9PSB0cnVlIHtcbiAgICAgIEBpbmNsdWRlIGZvbnQtZmFjZShcbiAgICAgICAgJHR5cGVmYWNlLW5hbWUsXG4gICAgICAgICR3ZWlnaHQsXG4gICAgICAgIGdldC13ZWlnaHQoJHdlaWdodCksXG4gICAgICAgICdpdGFsaWMnXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gR2VuZXJhbCA+IFNDQUZGT0xESU5HXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcbkB1c2UgJ3Nhc3M6bWF0aCc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogQ09MT1JTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IExpZ2h0XG5AZnVuY3Rpb24gbGlnaHQoJGNvbG9yLCAkcGVyY2VudCkge1xuICBAcmV0dXJuIG1peCgjZmZmLCAkY29sb3IsICRwZXJjZW50KTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRGFya1xuQGZ1bmN0aW9uIGRhcmsoJGNvbG9yLCAkcGVyY2VudCkge1xuICBAcmV0dXJuIG1peCgjMDAwLCAkY29sb3IsICRwZXJjZW50KTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBNQVBTXG5cbiRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3M6IGZhbHNlICFkZWZhdWx0O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IERlZXAgV2FybmluZ1xuLy8gRGlzcGxheXMgYSB3YXJuaW5nIGlmIHRoZSByZXRyaWV2ZWQgdmFsdWUgaXMgYG51bGxgXG5AZnVuY3Rpb24gbWFwLWdldC1kZWVwLXdhcm5pbmcoJHdhcm4sICRnZXQsICRrZXkpIHtcbiAgQGlmIG5vdCAkcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzIHtcbiAgICBAaWYgJGdldCA9PSBudWxsIHtcbiAgICAgIEB3YXJuICdNYXAgaGFzIG5vIHZhbHVlIGZvciBrZXkgc2VhcmNoIGAjeyR3YXJufWAnO1xuICAgIH0gQGVsc2UgaWYgdHlwZS1vZigkZ2V0KSAhPSAnbWFwJyB7XG4gICAgICBAd2FybiAnTm9uLW1hcCB2YWx1ZSBmb3VuZCBmb3Iga2V5IHNlYXJjaCBgI3skd2Fybn1gLCBjYW5ub3Qgc2VhcmNoIGZvciBrZXkgYCN7JGtleX1gJztcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuIG51bGw7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgRGVlcFxuLy8gR2l2ZW4gYSBtYXAgYW5kIGEgbGlzdCBvZiBrZXlzLCBmaW5kIHRoZSB2YWx1ZSBhdCB0aGUgZ2l2ZW4ga2V5XG5AZnVuY3Rpb24gbWFwLWdldC1kZWVwKCRtYXAsICRrZXlzLi4uKSB7XG4gIEBpZiBsZW5ndGgoJGtleXMpID09IDEge1xuICAgICRrZXlzOiBudGgoJGtleXMsIDEpO1xuICB9XG5cbiAgJHdhcm46ICcje250aCgka2V5cywgMSl9JztcbiAgJGxlbmd0aDogbGVuZ3RoKCRrZXlzKTtcbiAgJGdldDogbWFwLWdldCgkbWFwLCBudGgoJGtleXMsIDEpKTtcblxuICBAaWYgJGxlbmd0aCA+IDEge1xuICAgIEBmb3IgJGkgZnJvbSAyIHRocm91Z2ggJGxlbmd0aCB7XG4gICAgICBAaWYgJGdldCAhPSBudWxsIGFuZCB0eXBlLW9mKCRnZXQpID09ICdtYXAnIHtcbiAgICAgICAgJHdhcm46ICR3YXJuICsgJy0+I3tudGgoJGtleXMsICRpKX0nO1xuICAgICAgICAkZ2V0OiBtYXAtZ2V0KCRnZXQsIG50aCgka2V5cywgJGkpKTtcblxuICAgICAgICBAaWYgJGdldCA9PSBudWxsIHtcbiAgICAgICAgICBAcmV0dXJuIG1hcC1nZXQtZGVlcC13YXJuaW5nKCR3YXJuLCAkZ2V0LCBudGgoJGtleXMsICRpKSk7XG4gICAgICAgIH1cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICBAcmV0dXJuIG1hcC1nZXQtZGVlcC13YXJuaW5nKCR3YXJuLCAkZ2V0LCBudGgoJGtleXMsICRpKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkZ2V0O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IEtleXNcbkBmdW5jdGlvbiBnZXQta2V5cygka2V5cywgJGNvdW50ZXIpIHtcbiAgJHJldHVybjogKCk7XG5cbiAgQGZvciAkaSBmcm9tIDEgdG8gJGNvdW50ZXIge1xuICAgICRyZXR1cm46IGFwcGVuZCgkcmV0dXJuLCBudGgoJGtleXMsICRpKSk7XG4gIH1cblxuICBAcmV0dXJuICRyZXR1cm47XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgUHJldmlvdXMgS2V5XG5AZnVuY3Rpb24gbWFwLWdldC1wcmV2LWtleSgkbWFwLCAka2V5KSB7XG4gICRpbmRleDogaW5kZXgoJG1hcCwgJGtleSk7XG4gICRwcmV2OiAkaW5kZXggLSAxO1xuICAkcmVzdWx0OiBpZigkcHJldiA+IDAsIG50aCgkbWFwLCAkcHJldiksIG51bGwpO1xuXG4gIEByZXR1cm4gJHJlc3VsdDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIFNldFxuQGZ1bmN0aW9uIG1hcC1zZXQoJG1hcCwgJGtleSwgJHZhbHVlKSB7XG4gIEByZXR1cm4gbWFwLW1lcmdlKFxuICAgICRtYXAsXG4gICAgKFxuICAgICAgJGtleTogJHZhbHVlXG4gICAgKVxuICApO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgU2V0IERlZXBcbkBmdW5jdGlvbiBtYXAtc2V0LWRlZXAoJG1hcCwgJGtleXMsICR2YWx1ZSkge1xuICAkcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzOiB0cnVlICFnbG9iYWw7XG4gICRsZW5ndGg6IGxlbmd0aCgka2V5cyk7XG4gICRnZXQta2V5czogKCk7XG4gICRtYXAtbGV2ZWw6ICgpO1xuXG4gIEBpZiAkbGVuZ3RoID4gMSB7XG4gICAgJGdldC1rZXlzOiBnZXQta2V5cygka2V5cywgJGxlbmd0aCk7XG4gICAgJG1hcC1sZXZlbDogbWFwLWdldC1kZWVwKCRtYXAsICRnZXQta2V5cyk7XG4gIH1cblxuICAkbWVyZ2U6IChcbiAgICBudGgoJGtleXMsICRsZW5ndGgpOiAkdmFsdWVcbiAgKTtcblxuICBAaWYgJG1hcC1sZXZlbCB7XG4gICAgJG1lcmdlOiBtYXAtbWVyZ2UoJG1hcC1sZXZlbCwgJG1lcmdlKTtcbiAgfVxuXG4gIEBmb3IgJGkgZnJvbSAoJGxlbmd0aCAqIC0xICsgMSkgdGhyb3VnaCAtMSB7XG4gICAgJGo6IGFicygkaSk7XG4gICAgJGtleTogbnRoKCRrZXlzLCAkaik7XG5cbiAgICAvLyBAZGVidWcgJGdldC1rZXlzO1xuXG4gICAgQGlmICRqID4gMSB7XG4gICAgICAkZ2V0LWtleXM6IGdldC1rZXlzKCRrZXlzLCAkaik7XG4gICAgICAkbWFwLWxldmVsOiBtYXAtZ2V0LWRlZXAoJG1hcCwgJGdldC1rZXlzKTtcblxuICAgICAgQGlmICRtYXAtbGV2ZWwge1xuICAgICAgICAkbWVyZ2U6IG1hcC1tZXJnZShcbiAgICAgICAgICAkbWFwLWxldmVsLFxuICAgICAgICAgIChcbiAgICAgICAgICAgICRrZXk6ICRtZXJnZVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICAkbWVyZ2U6IChcbiAgICAgICAgICAka2V5OiAkbWVyZ2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IEBlbHNlIHtcbiAgICAgICRtZXJnZTogKFxuICAgICAgICAka2V5OiAkbWVyZ2VcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgJG1hcDogbWFwLW1lcmdlKCRtYXAsICRtZXJnZSk7XG5cbiAgJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5nczogZmFsc2UgIWdsb2JhbDtcblxuICBAcmV0dXJuICRtYXA7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogVU5JVFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUHJvZ3Jlc3NpdmUgY2FsY1xuQGZ1bmN0aW9uIGdldC1wcm9ncmVzc2l2ZS1jYWxjKFxuICAkbWluLW9iai1zaXplLFxuICAkbWF4LW9iai1zaXplLFxuICAkbWluLXZwLFxuICAkbWF4LXZwLFxuICAkdnAtdW5pdDogdndcbikge1xuICBAcmV0dXJuIGNhbGMoXG4gICAgI3skbWluLW9iai1zaXplfSArICN7c3RyaXAtdW5pdCgkbWF4LW9iai1zaXplIC0gJG1pbi1vYmotc2l6ZSl9ICpcbiAgICAgICgoMTAwI3skdnAtdW5pdH0gLSAjeyRtaW4tdnB9KSAvICN7c3RyaXAtdW5pdCgkbWF4LXZwIC0gJG1pbi12cCl9KVxuICApO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IFVOSVRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFN0cmlwIHVuaXRcbkBmdW5jdGlvbiBzdHJpcC11bml0KCRudW1iZXIpIHtcbiAgQGlmIHR5cGUtb2YoJG51bWJlcikgPT0gJ251bWJlcicgYW5kIG5vdCB1bml0bGVzcygkbnVtYmVyKSB7XG4gICAgQHJldHVybiAkbnVtYmVyIC8gKCRudW1iZXIgKiAwICsgMSk7XG4gIH1cblxuICBAcmV0dXJuICRudW1iZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBlbS9yZW0gdW5pdFxuQGZ1bmN0aW9uIGVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCBlbSk7XG59XG5cbkBmdW5jdGlvbiByZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIHJlbSk7XG59XG5cbkBmdW5jdGlvbiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsICR1bml0KSB7XG4gICRmczogMTBweDtcblxuICBAaWYgJGZvbnQtc2l6ZSB7XG4gICAgJGZzOiAkZm9udC1zaXplO1xuICB9XG4gIEBlbHNlIGlmICRiYXNlLWh0bWwtZm9udC1zaXplIHsgLy8gbWFrZSBzdXJlIHRvIGRlZmluZSB0aGlzIHZhcmlhYmxlIG9uIHlvdXIgb3duXG4gICAgJGZzOiAkYmFzZS1odG1sLWZvbnQtc2l6ZTtcbiAgfVxuXG4gIEByZXR1cm4gI3tzdHJpcC11bml0KCRudW0pIC8gc3RyaXAtdW5pdCgkZnMpfSN7JHVuaXR9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgc2NyZWVuIHBlcmNlbnRcbkBmdW5jdGlvbiBnZXQtc2NyZWVuLXBlcmNlbnQoJHdpZHRoLCAkc2NyZWVuKSB7XG4gIEByZXR1cm4gdW5xdW90ZSgnI3skd2lkdGggKiAxMDAgLyAkc2NyZWVufSUnKTtcbn1cblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBaLUlOREVYRVNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2VuZXJhdG9yXG5AZnVuY3Rpb24gei1pbmRleCgkbWFwLCAka2V5cykge1xuICAkZm91bmQtaW5kZXg6IG51bGw7XG5cbiAgQGVhY2ggJGtleSBpbiAka2V5cyB7XG4gICAgQGlmICh0eXBlLW9mKCRtYXApID09ICdtYXAnKSB7XG4gICAgICAkZm91bmQtaW5kZXg6IGluZGV4KG1hcC1rZXlzKCRtYXApLCAka2V5KTtcbiAgICAgICRtYXA6IG1hcC1nZXQoJG1hcCwgJGtleSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkZm91bmQtaW5kZXg6IGluZGV4KCRtYXAsICRrZXkpO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGZvdW5kLWluZGV4O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTZXJ2ZXJcbkBmdW5jdGlvbiB6KCRtYXAsICRrZXlzLi4uKSB7XG4gIEByZXR1cm4gei1pbmRleCgkbWFwLCAka2V5cyk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogRk9STVNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgSW5wdXQgcGxhY2Vob2xkZXJcbkBtaXhpbiBpbnB1dC1wbGFjZWhvbGRlcigkY29sLCAkc3R5bGU6IGl0YWxpYykge1xuICAmOi1tb3otcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxuICAmOjotbW96LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbiAgJjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxuICAmOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbn1cblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBQT1NJVElPTlNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQWJzb2x1dGUgY2VudGVyZWRcbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXJlZCgkdHlwZTogYWJzb2x1dGUsICRwb3M6IDUwJSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIHRvcDogJHBvcztcbiAgbGVmdDogJHBvcztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEFic29sdXRlIGNlbnRlcmVkIFhcbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXJlZC14KCR0eXBlOiBhYnNvbHV0ZSwgJHBvczogNTAlKSB7XG4gIHBvc2l0aW9uOiAkdHlwZTtcbiAgbGVmdDogJHBvcztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBBYnNvbHV0ZSBjZW50ZXJlZCBZXG5AbWl4aW4gYWJzb2x1dGUtY2VudGVyZWQteSgkdHlwZTogYWJzb2x1dGUsICRwb3M6IDUwJSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIHRvcDogJHBvcztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IFNIT1JUSEFORFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUG9zaXRpb25zXG5AbWl4aW4gcG9zaXRpb24tc3RyZXRjaGVkKCR0eXBlOiBhYnNvbHV0ZSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRGltZW5zaW9uc1xuQG1peGluIGRpbWVuc2lvbnMtc3F1YXJlKCR2YWx1ZSkge1xuICB3aWR0aDogJHZhbHVlO1xuICBoZWlnaHQ6ICR2YWx1ZTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUGFkZGluZ1xuQG1peGluIHBhZGRpbmctdigkdmFsdWUpIHtcbiAgcGFkZGluZy10b3A6ICR2YWx1ZTtcbiAgcGFkZGluZy1ib3R0b206ICR2YWx1ZTtcbn1cblxuQG1peGluIHBhZGRpbmctaCgkdmFsdWUpIHtcbiAgcGFkZGluZy1yaWdodDogJHZhbHVlO1xuICBwYWRkaW5nLWxlZnQ6ICR2YWx1ZTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFyZ2luXG5AbWl4aW4gbWFyZ2luLXYoJHZhbHVlKSB7XG4gIG1hcmdpbi10b3A6ICR2YWx1ZTtcbiAgbWFyZ2luLWJvdHRvbTogJHZhbHVlO1xufVxuXG5AbWl4aW4gbWFyZ2luLWgoJHZhbHVlKSB7XG4gIG1hcmdpbi1yaWdodDogJHZhbHVlO1xuICBtYXJnaW4tbGVmdDogJHZhbHVlO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBCb3JkZXJcbkBtaXhpbiBib3JkZXItdigkdmFsdWUpIHtcbiAgYm9yZGVyLXRvcDogJHZhbHVlO1xuICBib3JkZXItYm90dG9tOiAkdmFsdWU7XG59XG5cbkBtaXhpbiBib3JkZXItaCgkdmFsdWUpIHtcbiAgYm9yZGVyLXJpZ2h0OiAkdmFsdWU7XG4gIGJvcmRlci1sZWZ0OiAkdmFsdWU7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogVFlQT0dSQVBIWVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBGb250IHNtb290aGluZ1xuQG1peGluIGZvbnQtc21vb3RoaW5nKCR2YWx1ZTogYW50aWFsaWFzZWQpIHtcbiAgQGlmICR2YWx1ZSA9PSBhbnRpYWxpYXNlZCB7XG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbiAgfSBAZWxzZSB7XG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogc3VicGl4ZWwtYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGF1dG87XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgVGV4dCB1cHBlcmNhc2VcbkBtaXhpbiB0ZXh0LXVwcGVyY2FzZSgpIHtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgLW1vei1mb250LWZlYXR1cmUtc2V0dGluZ3M6ICdjYXNlJztcbiAgLXdlYmtpdC1mb250LWZlYXR1cmUtc2V0dGluZ3M6ICdjYXNlJztcbiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnY2FzZScgb247XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFNlbGVjdGlvblxuQG1peGluIHNlbGVjdGlvbigkY29sKSB7XG4gICRiZ3I6IGlmKCRjb2wgIT0gdHJhbnNwYXJlbnQsIHJnYmEoJGNvbCwgMC41KSwgcmdiYSgwLCAwLCAwLCAwKSk7XG5cbiAgJjo6LW1vei1zZWxlY3Rpb24ge1xuICAgIGJhY2tncm91bmQ6ICRiZ3I7XG4gIH1cblxuICAmOjpzZWxlY3Rpb24ge1xuICAgIGJhY2tncm91bmQ6ICRiZ3I7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gQkFTRVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBJbXBvcnRzXG5AaW1wb3J0ICcuLi8uLi9kZWZzL2JyYW5kLmpzJztcbkBpbXBvcnQgJy4uLy4uL2RlZnMvd2Vic2l0ZS5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEZvbnQgc2l6ZVxuQGZ1bmN0aW9uIHJvbGUoJG1hcCwgJHZhbHVlKSB7XG4gICRyLW1hcDogbWFwLWdldCgkdmFsdWUsICdtYXAnKTtcbiAgJHItdmFsdWU6IG1hcC1nZXQoJHZhbHVlLCAndmFsdWUnKTtcbiAgQHJldHVybiBtYXAtZ2V0KCRyLW1hcCwgJHItdmFsdWUpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnMgPiBDQUxDXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IHZhbHVlIGJhc2VkIG9uIHRoZSBiYXNlIGZvbnQgc2l6ZVxuQGZ1bmN0aW9uIGJhc2UoJHZhbHVlKSB7XG4gIEByZXR1cm4gbWF0aC5kaXYoJHZhbHVlLCBtYXAtZ2V0KCRyb2xlcy1yYXRpb3MsICdsYXlvdXQtZ3Jvd3RoJykpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBQcm9ncmVzc2l2ZSBjYWxjXG5AZnVuY3Rpb24gZ2V0LXByb2dyZXNzaXZlLWNhbGMoXG4gICRtaW4tb2JqLXNpemUsXG4gICRtYXgtb2JqLXNpemUsXG4gICRtaW4tdnAsXG4gICRtYXgtdnAsXG4gICR2cC11bml0OiB2d1xuKSB7XG4gIEByZXR1cm4gY2FsYyhcbiAgICAje3BpeGVsYXRlKCRtaW4tb2JqLXNpemUpfSArICN7c3RyaXAtdW5pdCgkbWF4LW9iai1zaXplIC0gJG1pbi1vYmotc2l6ZSl9ICpcbiAgICAgIChcbiAgICAgICAgKDEwMCN7JHZwLXVuaXR9IC0gI3twaXhlbGF0ZSgkbWluLXZwKX0pIC8gI3tzdHJpcC11bml0KFxuICAgICAgICAgICAgJG1heC12cCAtICRtaW4tdnBcbiAgICAgICAgICApfVxuICAgICAgKVxuICApO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnMgPiBVTklUU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFN0cmlwIHVuaXRcbkBmdW5jdGlvbiBzdHJpcC11bml0KCRudW1iZXIpIHtcbiAgQGlmIHR5cGUtb2YoJG51bWJlcikgPT0gJ251bWJlcicgYW5kIG5vdCB1bml0bGVzcygkbnVtYmVyKSB7XG4gICAgQHJldHVybiBtYXRoLmRpdigkbnVtYmVyLCAoJG51bWJlciAqIDAgKyAxKSk7XG4gIH1cblxuICBAcmV0dXJuICRudW1iZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBQeCB1bml0XG5AZnVuY3Rpb24gcGl4ZWxhdGUoJHZhbHVlKSB7XG4gIEByZXR1cm4gI3tzdHJpcC11bml0KCR2YWx1ZSl9UHg7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBlbS9yZW0gdW5pdFxuQGZ1bmN0aW9uIGVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCBlbSk7XG59XG5cbkBmdW5jdGlvbiByZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIHJlbSk7XG59XG5cbkBmdW5jdGlvbiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsICR1bml0KSB7XG4gICRmczogMTBweDtcblxuICBAaWYgJGZvbnQtc2l6ZSB7XG4gICAgJGZzOiAkZm9udC1zaXplO1xuICB9IEBlbHNlIHtcbiAgICAkZnM6IG1hcC1nZXQoJHR5cG9ncmFwaHksICdiYXNlX2ZvbnRfc2l6ZScpO1xuICB9XG5cbiAgQHJldHVybiAje21hdGguZGl2KHN0cmlwLXVuaXQoJG51bSksIHN0cmlwLXVuaXQoJGZzKSl9I3skdW5pdH07XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIERhdGEgPiBTV0FUQ0hFU1xuXG5AaW1wb3J0ICcuLi8uLi9kZWZzL3N3YXRjaGVzL2luZGV4LmpzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX2JyZWFrcG9pbnRzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX3JhdGlvcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19zY3JlZW5zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX3NwYWNlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIERhdGEgPiBST0xFU1xuXG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19ib3JkZXJzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2JyZWFrcG9pbnRzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2NvbG9ycyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19kaW1lbnNpb25zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3JhdGlvcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19zY3JlZW5zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3NoYWRvd3MnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfc3BhY2VzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3R5cG9ncmFwaHknO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnMgPiBTQ0FMQUJJTElUWVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFNjYWxlclxuQG1peGluIHNjYWxlcihcbiAgJHByb3BlcnR5LFxuICAkbWluLXNpemUsXG4gICRtYXgtc2l6ZSxcbiAgJG1pbi12dzogbWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21pbicpLFxuICAkbWF4LXZ3OiBtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWF4Jylcbikge1xuICAjeyRwcm9wZXJ0eX06ICN7c3RyaXAtdW5pdChtYXRoLmRpdigoJG1pbi12dyAqIDAuOTc5NikgKiAkbWluLXNpemUsIDEwMDApKX12dzsgLy8gMC45Nzk2IGZpeGVzIHdyb25nIGNhbGN1bGF0aW9ucyBpbiBDaHJvbWVcblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAkbWluLXZ3KSB7XG4gICAgI3skcHJvcGVydHl9OiBnZXQtcHJvZ3Jlc3NpdmUtY2FsYygkbWluLXNpemUsICRtYXgtc2l6ZSwgJG1pbi12dywgJG1heC12dyk7XG4gIH1cblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAkbWF4LXZ3KSB7XG4gICAgI3skcHJvcGVydHl9OiBwaXhlbGF0ZSgkbWF4LXNpemUpO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIFBsYWNlaG9sZGVycyA+IFNDQUxBQklMSVRZXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTmVnYXRpdmVcbiVwaC1uZWdhdGl2ZSB7XG4gIGgxLFxuICBoMixcbiAgaDMsXG4gIGg0LFxuICBoNSxcbiAgaDYsXG4gIHAge1xuICAgIGNvbG9yOiBtYXAtZ2V0KCRyb2xlcy1jb2wtdGV4dHMsICduZWdhdGl2ZScpO1xuICB9XG5cbiAgLm1ldGEge1xuICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHN3YXRjaGVzLWNvbG9ycywgJ2hvbmV5LXllbGxvdycsICdsaWdodCcpO1xuICB9XG5cbiAgLnRleHQtbGluayB7XG4gICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnbm9ybWFsJyk7XG4gICAgYm9yZGVyLWJvdHRvbTogcGl4ZWxhdGUoMXB4KSBkb3R0ZWRcbiAgICAgIHJnYmEobWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdub3JtYWwnKSwgMC4zMyk7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2hvdmVyJyk7XG4gICAgfVxuXG4gICAgJjphY3RpdmUge1xuICAgICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnYWN0aXZlJyk7XG4gICAgfVxuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFdhdmVcbiVwaC13YXZlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiA1MCU7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4td2lkdGg6IG1hdGguZGl2KG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtYXgnKSwgMik7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcblxuICA+IHN2ZyB7XG4gICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgSGVhZCB3YXZlXG4lcGgtaGVhZC13YXZlIHtcbiAgJHdhdmUtaGVpZ2h0OiBiYXNlKG1hcC1nZXQoJHJvbGVzLWRpbWVuc2lvbnMtd2F2ZXMsICdoZWFkZXInKSk7XG5cbiAgLndhdmUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICB0b3A6IGNhbGMoMTAwJSAtIDFQeCk7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiBlbSgkd2F2ZS1oZWlnaHQpO1xuXG4gICAgLmlubmVyIHtcbiAgICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKDEwMCUpO1xuXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgICBzdmcge1xuICAgICAgICBAaW5jbHVkZSBkaW1lbnNpb25zLXNxdWFyZSgxMDAlKTtcblxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgbWluLXdpZHRoOiBtYXRoLmRpdihtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWF4JyksIDIpO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQGtleWZyYW1lcyBzbGlkZSB7XG4gICAgZnJvbSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICB9XG5cbiAgICB0byB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAwKTtcbiAgICB9XG4gIH1cblxuICAuc2Nyb2xsLWJ0biB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvdHRvbTogMjBweDtcbiAgICBsZWZ0OiA1MCU7XG4gICAgei1pbmRleDogMTtcbiAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0LWRlZXAoJHN3YXRjaGVzLWNvbG9ycywgJ2Nvcm5mbG93ZXInLCAnYmFzZScpO1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgIGFuaW1hdGlvbjogc2xpZGUgMXMgZWFzZS1pbi1vdXQgaW5maW5pdGUgYWx0ZXJuYXRlO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2hvdmVyJyk7XG4gICAgfVxuXG4gICAgJjphY3RpdmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdhY3RpdmUnKTtcbiAgICB9XG5cbiAgICBzdmcge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgICB9XG5cbiAgICBib2R5Om5vdCguc2Nyb2xsYWJsZSkgJiB7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEJveCBtb2RlbFxuKixcbio6OmJlZm9yZSxcbio6OmFmdGVyIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRG9jdW1lbnRcbmh0bWwge1xuICAkbWluLWZvbnQtc2l6ZTogbWFwLWdldCgkcm9sZXMtdHlwby1mb250LXNpemVzLWJhc2UsICdtaW4nKTtcbiAgJG1heC1mb250LXNpemU6IG1hcC1nZXQoJHJvbGVzLXR5cG8tZm9udC1zaXplcy1iYXNlLCAnbWF4Jyk7XG5cbiAgQGluY2x1ZGUgc2NhbGVyKGZvbnQtc2l6ZSwgJG1pbi1mb250LXNpemUsICRtYXgtZm9udC1zaXplKTtcblxuICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0KCRyb2xlcy1jb2wtYmFja2dyb3VuZHMsICdkb2N1bWVudCcpO1xufVxuXG5ib2R5IHtcbiAgQGluY2x1ZGUgZm9udC1zbW9vdGhpbmcoKTtcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1pbi1oZWlnaHQ6IDEwMHZoO1xuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6ICN7cmdiYSgwLCAwLCAwLCAwKX07XG4gIGZvbnQ6IG1hcC1nZXQoJHJvbGVzLXR5cG8tZm9udC13ZWlnaHRzLCAnYm9keScpXG4gICAgbWFwLWdldCgkcm9sZXMtdHlwby1mb250LXNpemVzLCAnYm9keScpXG4gICAgdW5xdW90ZShtYXAtZ2V0KCRyb2xlcy10eXBvLWZvbnQtZmFtaWxpZXMsICdib2R5JykpO1xuICBmb250LWZlYXR1cmUtc2V0dGluZ3M6ICdzczAxJyAxO1xuICBjb2xvcjogbWFwLWdldCgkcm9sZXMtY29sLXRleHRzLCAnYmFzZScpO1xuICBjdXJzb3I6IGRlZmF1bHQ7XG4gIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQoJHJvbGVzLWNvbC1iYWNrZ3JvdW5kcywgJ2JvZHknKTtcblxuICAqIHtcbiAgICBAaW5jbHVkZSBzZWxlY3Rpb24obWFwLWdldC1kZWVwKCRzd2F0Y2hlcy1jb2xvcnMsICdjb3JuZmxvd2VyJywgJ2Jhc2UnKSk7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgVGV4dFxuaDEsXG5oMixcbmgzLFxuaDQsXG5oNSxcbmg2IHtcbiAgZm9udC1mYW1pbHk6IG1hcC1nZXQoJHJvbGVzLXR5cG8tZm9udC1mYW1pbGllcywgJ2hlYWRpbmdzJyk7XG4gIGZvbnQtd2VpZ2h0OiBtYXAtZ2V0KCRyb2xlcy10eXBvLWZvbnQtd2VpZ2h0cywgJ2hlYWRpbmdzJyk7XG4gIGxpbmUtaGVpZ2h0OiBtYXAtZ2V0KCRyb2xlcy10eXBvLWxpbmUtaGVpZ2h0cywgJ2hlYWRpbmdzJyk7XG4gIGNvbG9yOiBtYXAtZ2V0KCRyb2xlcy1jb2wtdGV4dHMsICdoZWFkaW5ncycpO1xuICBjdXJzb3I6IHRleHQ7XG5cbiAgJjpmaXJzdC1jaGlsZCB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgfVxufVxuXG5oMSB7XG4gIGZvbnQtc2l6ZTogbWFwLWdldCgkcm9sZXMtdHlwby1mb250LXNpemVzLCAndGl0bGUnKTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5oMiB7XG4gIGZvbnQtc2l6ZTogbWFwLWdldCgkcm9sZXMtdHlwby1mb250LXNpemVzLCAnc3VidGl0bGUnKTtcbn1cblxuc3Ryb25nIHtcbiAgZm9udC13ZWlnaHQ6IG1hcC1nZXQtZGVlcCgkc3dhdGNoZXMtdHlwbywgJ2ZvbnQtd2VpZ2h0cycsICdib2xkJyk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IExpbmtzXG5hIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEltYWdlc1xuaW1nIHtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHVzZXItc2VsZWN0OiBub25lO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHcmFwaGljc1xuc3ZnIHtcbiAgb3ZlcmZsb3c6IGluaXRpYWw7IC8vIGZpeCBmb3IgU2FmYXJpIHdoZXJlIHBhcnQgb2YgdGhlIGdyYXBoaWNzIGlzIGJlaW5nIGNyb3BwZWQgaW4gdGhlIGJvdHRvbVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBCZXlvbmRcbi5iZXlvbmQge1xuICAkb2Zmc2V0OiBiYXNlKG1hcC1nZXQoJHJvbGVzLWRpbWVuc2lvbnMtd2F2ZXMsICdoZWFkZXInKSkgKiAxLjI7XG5cbiAgcGFkZGluZy10b3A6ICRvZmZzZXQ7XG4gIG1hcmdpbi10b3A6ICRvZmZzZXQgKiAtMTtcbn1cbiIsIi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEdlbmVyYWwgPiBXUkFQUEVSU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5AdXNlICdzYXNzOm1hdGgnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IENPTE9SU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBMaWdodFxuQGZ1bmN0aW9uIGxpZ2h0KCRjb2xvciwgJHBlcmNlbnQpIHtcbiAgQHJldHVybiBtaXgoI2ZmZiwgJGNvbG9yLCAkcGVyY2VudCk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IERhcmtcbkBmdW5jdGlvbiBkYXJrKCRjb2xvciwgJHBlcmNlbnQpIHtcbiAgQHJldHVybiBtaXgoIzAwMCwgJGNvbG9yLCAkcGVyY2VudCk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogTUFQU1xuXG4kcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzOiBmYWxzZSAhZGVmYXVsdDtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIEdldCBEZWVwIFdhcm5pbmdcbi8vIERpc3BsYXlzIGEgd2FybmluZyBpZiB0aGUgcmV0cmlldmVkIHZhbHVlIGlzIGBudWxsYFxuQGZ1bmN0aW9uIG1hcC1nZXQtZGVlcC13YXJuaW5nKCR3YXJuLCAkZ2V0LCAka2V5KSB7XG4gIEBpZiBub3QgJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5ncyB7XG4gICAgQGlmICRnZXQgPT0gbnVsbCB7XG4gICAgICBAd2FybiAnTWFwIGhhcyBubyB2YWx1ZSBmb3Iga2V5IHNlYXJjaCBgI3skd2Fybn1gJztcbiAgICB9IEBlbHNlIGlmIHR5cGUtb2YoJGdldCkgIT0gJ21hcCcge1xuICAgICAgQHdhcm4gJ05vbi1tYXAgdmFsdWUgZm91bmQgZm9yIGtleSBzZWFyY2ggYCN7JHdhcm59YCwgY2Fubm90IHNlYXJjaCBmb3Iga2V5IGAjeyRrZXl9YCc7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiBudWxsO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IERlZXBcbi8vIEdpdmVuIGEgbWFwIGFuZCBhIGxpc3Qgb2Yga2V5cywgZmluZCB0aGUgdmFsdWUgYXQgdGhlIGdpdmVuIGtleVxuQGZ1bmN0aW9uIG1hcC1nZXQtZGVlcCgkbWFwLCAka2V5cy4uLikge1xuICBAaWYgbGVuZ3RoKCRrZXlzKSA9PSAxIHtcbiAgICAka2V5czogbnRoKCRrZXlzLCAxKTtcbiAgfVxuXG4gICR3YXJuOiAnI3tudGgoJGtleXMsIDEpfSc7XG4gICRsZW5ndGg6IGxlbmd0aCgka2V5cyk7XG4gICRnZXQ6IG1hcC1nZXQoJG1hcCwgbnRoKCRrZXlzLCAxKSk7XG5cbiAgQGlmICRsZW5ndGggPiAxIHtcbiAgICBAZm9yICRpIGZyb20gMiB0aHJvdWdoICRsZW5ndGgge1xuICAgICAgQGlmICRnZXQgIT0gbnVsbCBhbmQgdHlwZS1vZigkZ2V0KSA9PSAnbWFwJyB7XG4gICAgICAgICR3YXJuOiAkd2FybiArICctPiN7bnRoKCRrZXlzLCAkaSl9JztcbiAgICAgICAgJGdldDogbWFwLWdldCgkZ2V0LCBudGgoJGtleXMsICRpKSk7XG5cbiAgICAgICAgQGlmICRnZXQgPT0gbnVsbCB7XG4gICAgICAgICAgQHJldHVybiBtYXAtZ2V0LWRlZXAtd2FybmluZygkd2FybiwgJGdldCwgbnRoKCRrZXlzLCAkaSkpO1xuICAgICAgICB9XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgQHJldHVybiBtYXAtZ2V0LWRlZXAtd2FybmluZygkd2FybiwgJGdldCwgbnRoKCRrZXlzLCAkaSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGdldDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIEdldCBLZXlzXG5AZnVuY3Rpb24gZ2V0LWtleXMoJGtleXMsICRjb3VudGVyKSB7XG4gICRyZXR1cm46ICgpO1xuXG4gIEBmb3IgJGkgZnJvbSAxIHRvICRjb3VudGVyIHtcbiAgICAkcmV0dXJuOiBhcHBlbmQoJHJldHVybiwgbnRoKCRrZXlzLCAkaSkpO1xuICB9XG5cbiAgQHJldHVybiAkcmV0dXJuO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IFByZXZpb3VzIEtleVxuQGZ1bmN0aW9uIG1hcC1nZXQtcHJldi1rZXkoJG1hcCwgJGtleSkge1xuICAkaW5kZXg6IGluZGV4KCRtYXAsICRrZXkpO1xuICAkcHJldjogJGluZGV4IC0gMTtcbiAgJHJlc3VsdDogaWYoJHByZXYgPiAwLCBudGgoJG1hcCwgJHByZXYpLCBudWxsKTtcblxuICBAcmV0dXJuICRyZXN1bHQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBTZXRcbkBmdW5jdGlvbiBtYXAtc2V0KCRtYXAsICRrZXksICR2YWx1ZSkge1xuICBAcmV0dXJuIG1hcC1tZXJnZShcbiAgICAkbWFwLFxuICAgIChcbiAgICAgICRrZXk6ICR2YWx1ZVxuICAgIClcbiAgKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIFNldCBEZWVwXG5AZnVuY3Rpb24gbWFwLXNldC1kZWVwKCRtYXAsICRrZXlzLCAkdmFsdWUpIHtcbiAgJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5nczogdHJ1ZSAhZ2xvYmFsO1xuICAkbGVuZ3RoOiBsZW5ndGgoJGtleXMpO1xuICAkZ2V0LWtleXM6ICgpO1xuICAkbWFwLWxldmVsOiAoKTtcblxuICBAaWYgJGxlbmd0aCA+IDEge1xuICAgICRnZXQta2V5czogZ2V0LWtleXMoJGtleXMsICRsZW5ndGgpO1xuICAgICRtYXAtbGV2ZWw6IG1hcC1nZXQtZGVlcCgkbWFwLCAkZ2V0LWtleXMpO1xuICB9XG5cbiAgJG1lcmdlOiAoXG4gICAgbnRoKCRrZXlzLCAkbGVuZ3RoKTogJHZhbHVlXG4gICk7XG5cbiAgQGlmICRtYXAtbGV2ZWwge1xuICAgICRtZXJnZTogbWFwLW1lcmdlKCRtYXAtbGV2ZWwsICRtZXJnZSk7XG4gIH1cblxuICBAZm9yICRpIGZyb20gKCRsZW5ndGggKiAtMSArIDEpIHRocm91Z2ggLTEge1xuICAgICRqOiBhYnMoJGkpO1xuICAgICRrZXk6IG50aCgka2V5cywgJGopO1xuXG4gICAgLy8gQGRlYnVnICRnZXQta2V5cztcblxuICAgIEBpZiAkaiA+IDEge1xuICAgICAgJGdldC1rZXlzOiBnZXQta2V5cygka2V5cywgJGopO1xuICAgICAgJG1hcC1sZXZlbDogbWFwLWdldC1kZWVwKCRtYXAsICRnZXQta2V5cyk7XG5cbiAgICAgIEBpZiAkbWFwLWxldmVsIHtcbiAgICAgICAgJG1lcmdlOiBtYXAtbWVyZ2UoXG4gICAgICAgICAgJG1hcC1sZXZlbCxcbiAgICAgICAgICAoXG4gICAgICAgICAgICAka2V5OiAkbWVyZ2VcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgJG1lcmdlOiAoXG4gICAgICAgICAgJGtleTogJG1lcmdlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBAZWxzZSB7XG4gICAgICAkbWVyZ2U6IChcbiAgICAgICAgJGtleTogJG1lcmdlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gICRtYXA6IG1hcC1tZXJnZSgkbWFwLCAkbWVyZ2UpO1xuXG4gICRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3M6IGZhbHNlICFnbG9iYWw7XG5cbiAgQHJldHVybiAkbWFwO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IFVOSVRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFByb2dyZXNzaXZlIGNhbGNcbkBmdW5jdGlvbiBnZXQtcHJvZ3Jlc3NpdmUtY2FsYyhcbiAgJG1pbi1vYmotc2l6ZSxcbiAgJG1heC1vYmotc2l6ZSxcbiAgJG1pbi12cCxcbiAgJG1heC12cCxcbiAgJHZwLXVuaXQ6IHZ3XG4pIHtcbiAgQHJldHVybiBjYWxjKFxuICAgICN7JG1pbi1vYmotc2l6ZX0gKyAje3N0cmlwLXVuaXQoJG1heC1vYmotc2l6ZSAtICRtaW4tb2JqLXNpemUpfSAqXG4gICAgICAoKDEwMCN7JHZwLXVuaXR9IC0gI3skbWluLXZwfSkgLyAje3N0cmlwLXVuaXQoJG1heC12cCAtICRtaW4tdnApfSlcbiAgKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBVTklUU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTdHJpcCB1bml0XG5AZnVuY3Rpb24gc3RyaXAtdW5pdCgkbnVtYmVyKSB7XG4gIEBpZiB0eXBlLW9mKCRudW1iZXIpID09ICdudW1iZXInIGFuZCBub3QgdW5pdGxlc3MoJG51bWJlcikge1xuICAgIEByZXR1cm4gJG51bWJlciAvICgkbnVtYmVyICogMCArIDEpO1xuICB9XG5cbiAgQHJldHVybiAkbnVtYmVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgZW0vcmVtIHVuaXRcbkBmdW5jdGlvbiBlbSgkbnVtLCAkZm9udC1zaXplOiBmYWxzZSkge1xuICBAcmV0dXJuIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgZW0pO1xufVxuXG5AZnVuY3Rpb24gcmVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCByZW0pO1xufVxuXG5AZnVuY3Rpb24gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCAkdW5pdCkge1xuICAkZnM6IDEwcHg7XG5cbiAgQGlmICRmb250LXNpemUge1xuICAgICRmczogJGZvbnQtc2l6ZTtcbiAgfVxuICBAZWxzZSBpZiAkYmFzZS1odG1sLWZvbnQtc2l6ZSB7IC8vIG1ha2Ugc3VyZSB0byBkZWZpbmUgdGhpcyB2YXJpYWJsZSBvbiB5b3VyIG93blxuICAgICRmczogJGJhc2UtaHRtbC1mb250LXNpemU7XG4gIH1cblxuICBAcmV0dXJuICN7c3RyaXAtdW5pdCgkbnVtKSAvIHN0cmlwLXVuaXQoJGZzKX0jeyR1bml0fTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IHNjcmVlbiBwZXJjZW50XG5AZnVuY3Rpb24gZ2V0LXNjcmVlbi1wZXJjZW50KCR3aWR0aCwgJHNjcmVlbikge1xuICBAcmV0dXJuIHVucXVvdGUoJyN7JHdpZHRoICogMTAwIC8gJHNjcmVlbn0lJyk7XG59XG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogWi1JTkRFWEVTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdlbmVyYXRvclxuQGZ1bmN0aW9uIHotaW5kZXgoJG1hcCwgJGtleXMpIHtcbiAgJGZvdW5kLWluZGV4OiBudWxsO1xuXG4gIEBlYWNoICRrZXkgaW4gJGtleXMge1xuICAgIEBpZiAodHlwZS1vZigkbWFwKSA9PSAnbWFwJykge1xuICAgICAgJGZvdW5kLWluZGV4OiBpbmRleChtYXAta2V5cygkbWFwKSwgJGtleSk7XG4gICAgICAkbWFwOiBtYXAtZ2V0KCRtYXAsICRrZXkpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJGZvdW5kLWluZGV4OiBpbmRleCgkbWFwLCAka2V5KTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRmb3VuZC1pbmRleDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU2VydmVyXG5AZnVuY3Rpb24geigkbWFwLCAka2V5cy4uLikge1xuICBAcmV0dXJuIHotaW5kZXgoJG1hcCwgJGtleXMpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IEZPUk1TXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IElucHV0IHBsYWNlaG9sZGVyXG5AbWl4aW4gaW5wdXQtcGxhY2Vob2xkZXIoJGNvbCwgJHN0eWxlOiBpdGFsaWMpIHtcbiAgJjotbW96LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbiAgJjo6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2w7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICB9XG4gICY6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbiAgJjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2w7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICB9XG59XG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogUE9TSVRJT05TXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEFic29sdXRlIGNlbnRlcmVkXG5AbWl4aW4gYWJzb2x1dGUtY2VudGVyZWQoJHR5cGU6IGFic29sdXRlLCAkcG9zOiA1MCUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICB0b3A6ICRwb3M7XG4gIGxlZnQ6ICRwb3M7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBBYnNvbHV0ZSBjZW50ZXJlZCBYXG5AbWl4aW4gYWJzb2x1dGUtY2VudGVyZWQteCgkdHlwZTogYWJzb2x1dGUsICRwb3M6IDUwJSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIGxlZnQ6ICRwb3M7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQWJzb2x1dGUgY2VudGVyZWQgWVxuQG1peGluIGFic29sdXRlLWNlbnRlcmVkLXkoJHR5cGU6IGFic29sdXRlLCAkcG9zOiA1MCUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICB0b3A6ICRwb3M7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBTSE9SVEhBTkRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFBvc2l0aW9uc1xuQG1peGluIHBvc2l0aW9uLXN0cmV0Y2hlZCgkdHlwZTogYWJzb2x1dGUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IERpbWVuc2lvbnNcbkBtaXhpbiBkaW1lbnNpb25zLXNxdWFyZSgkdmFsdWUpIHtcbiAgd2lkdGg6ICR2YWx1ZTtcbiAgaGVpZ2h0OiAkdmFsdWU7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFBhZGRpbmdcbkBtaXhpbiBwYWRkaW5nLXYoJHZhbHVlKSB7XG4gIHBhZGRpbmctdG9wOiAkdmFsdWU7XG4gIHBhZGRpbmctYm90dG9tOiAkdmFsdWU7XG59XG5cbkBtaXhpbiBwYWRkaW5nLWgoJHZhbHVlKSB7XG4gIHBhZGRpbmctcmlnaHQ6ICR2YWx1ZTtcbiAgcGFkZGluZy1sZWZ0OiAkdmFsdWU7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcmdpblxuQG1peGluIG1hcmdpbi12KCR2YWx1ZSkge1xuICBtYXJnaW4tdG9wOiAkdmFsdWU7XG4gIG1hcmdpbi1ib3R0b206ICR2YWx1ZTtcbn1cblxuQG1peGluIG1hcmdpbi1oKCR2YWx1ZSkge1xuICBtYXJnaW4tcmlnaHQ6ICR2YWx1ZTtcbiAgbWFyZ2luLWxlZnQ6ICR2YWx1ZTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQm9yZGVyXG5AbWl4aW4gYm9yZGVyLXYoJHZhbHVlKSB7XG4gIGJvcmRlci10b3A6ICR2YWx1ZTtcbiAgYm9yZGVyLWJvdHRvbTogJHZhbHVlO1xufVxuXG5AbWl4aW4gYm9yZGVyLWgoJHZhbHVlKSB7XG4gIGJvcmRlci1yaWdodDogJHZhbHVlO1xuICBib3JkZXItbGVmdDogJHZhbHVlO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IFRZUE9HUkFQSFlcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRm9udCBzbW9vdGhpbmdcbkBtaXhpbiBmb250LXNtb290aGluZygkdmFsdWU6IGFudGlhbGlhc2VkKSB7XG4gIEBpZiAkdmFsdWUgPT0gYW50aWFsaWFzZWQge1xuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG4gIH0gQGVsc2Uge1xuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IHN1YnBpeGVsLWFudGlhbGlhc2VkO1xuICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBhdXRvO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFRleHQgdXBwZXJjYXNlXG5AbWl4aW4gdGV4dC11cHBlcmNhc2UoKSB7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIC1tb3otZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnY2FzZSc7XG4gIC13ZWJraXQtZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnY2FzZSc7XG4gIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2Nhc2UnIG9uO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTZWxlY3Rpb25cbkBtaXhpbiBzZWxlY3Rpb24oJGNvbCkge1xuICAkYmdyOiBpZigkY29sICE9IHRyYW5zcGFyZW50LCByZ2JhKCRjb2wsIDAuNSksIHJnYmEoMCwgMCwgMCwgMCkpO1xuXG4gICY6Oi1tb3otc2VsZWN0aW9uIHtcbiAgICBiYWNrZ3JvdW5kOiAkYmdyO1xuICB9XG5cbiAgJjo6c2VsZWN0aW9uIHtcbiAgICBiYWNrZ3JvdW5kOiAkYmdyO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEJBU0VcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgSW1wb3J0c1xuQGltcG9ydCAnLi4vLi4vZGVmcy9icmFuZC5qcyc7XG5AaW1wb3J0ICcuLi8uLi9kZWZzL3dlYnNpdGUuanMnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBGb250IHNpemVcbkBmdW5jdGlvbiByb2xlKCRtYXAsICR2YWx1ZSkge1xuICAkci1tYXA6IG1hcC1nZXQoJHZhbHVlLCAnbWFwJyk7XG4gICRyLXZhbHVlOiBtYXAtZ2V0KCR2YWx1ZSwgJ3ZhbHVlJyk7XG4gIEByZXR1cm4gbWFwLWdldCgkci1tYXAsICRyLXZhbHVlKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zID4gQ0FMQ1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCB2YWx1ZSBiYXNlZCBvbiB0aGUgYmFzZSBmb250IHNpemVcbkBmdW5jdGlvbiBiYXNlKCR2YWx1ZSkge1xuICBAcmV0dXJuIG1hdGguZGl2KCR2YWx1ZSwgbWFwLWdldCgkcm9sZXMtcmF0aW9zLCAnbGF5b3V0LWdyb3d0aCcpKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUHJvZ3Jlc3NpdmUgY2FsY1xuQGZ1bmN0aW9uIGdldC1wcm9ncmVzc2l2ZS1jYWxjKFxuICAkbWluLW9iai1zaXplLFxuICAkbWF4LW9iai1zaXplLFxuICAkbWluLXZwLFxuICAkbWF4LXZwLFxuICAkdnAtdW5pdDogdndcbikge1xuICBAcmV0dXJuIGNhbGMoXG4gICAgI3twaXhlbGF0ZSgkbWluLW9iai1zaXplKX0gKyAje3N0cmlwLXVuaXQoJG1heC1vYmotc2l6ZSAtICRtaW4tb2JqLXNpemUpfSAqXG4gICAgICAoXG4gICAgICAgICgxMDAjeyR2cC11bml0fSAtICN7cGl4ZWxhdGUoJG1pbi12cCl9KSAvICN7c3RyaXAtdW5pdChcbiAgICAgICAgICAgICRtYXgtdnAgLSAkbWluLXZwXG4gICAgICAgICAgKX1cbiAgICAgIClcbiAgKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zID4gVU5JVFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTdHJpcCB1bml0XG5AZnVuY3Rpb24gc3RyaXAtdW5pdCgkbnVtYmVyKSB7XG4gIEBpZiB0eXBlLW9mKCRudW1iZXIpID09ICdudW1iZXInIGFuZCBub3QgdW5pdGxlc3MoJG51bWJlcikge1xuICAgIEByZXR1cm4gbWF0aC5kaXYoJG51bWJlciwgKCRudW1iZXIgKiAwICsgMSkpO1xuICB9XG5cbiAgQHJldHVybiAkbnVtYmVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgUHggdW5pdFxuQGZ1bmN0aW9uIHBpeGVsYXRlKCR2YWx1ZSkge1xuICBAcmV0dXJuICN7c3RyaXAtdW5pdCgkdmFsdWUpfVB4O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgZW0vcmVtIHVuaXRcbkBmdW5jdGlvbiBlbSgkbnVtLCAkZm9udC1zaXplOiBmYWxzZSkge1xuICBAcmV0dXJuIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgZW0pO1xufVxuXG5AZnVuY3Rpb24gcmVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCByZW0pO1xufVxuXG5AZnVuY3Rpb24gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCAkdW5pdCkge1xuICAkZnM6IDEwcHg7XG5cbiAgQGlmICRmb250LXNpemUge1xuICAgICRmczogJGZvbnQtc2l6ZTtcbiAgfSBAZWxzZSB7XG4gICAgJGZzOiBtYXAtZ2V0KCR0eXBvZ3JhcGh5LCAnYmFzZV9mb250X3NpemUnKTtcbiAgfVxuXG4gIEByZXR1cm4gI3ttYXRoLmRpdihzdHJpcC11bml0KCRudW0pLCBzdHJpcC11bml0KCRmcykpfSN7JHVuaXR9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBEYXRhID4gU1dBVENIRVNcblxuQGltcG9ydCAnLi4vLi4vZGVmcy9zd2F0Y2hlcy9pbmRleC5qcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19icmVha3BvaW50cyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19yYXRpb3MnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvc3dhdGNoZXMvc3dhdGNoZXNfc2NyZWVucyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19zcGFjZXMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBEYXRhID4gUk9MRVNcblxuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfYm9yZGVycyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19icmVha3BvaW50cyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19jb2xvcnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfZGltZW5zaW9ucyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19yYXRpb3MnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfc2NyZWVucyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19zaGFkb3dzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3NwYWNlcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc190eXBvZ3JhcGh5JztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zID4gU0NBTEFCSUxJVFlcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTY2FsZXJcbkBtaXhpbiBzY2FsZXIoXG4gICRwcm9wZXJ0eSxcbiAgJG1pbi1zaXplLFxuICAkbWF4LXNpemUsXG4gICRtaW4tdnc6IG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtaW4nKSxcbiAgJG1heC12dzogbWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21heCcpXG4pIHtcbiAgI3skcHJvcGVydHl9OiAje3N0cmlwLXVuaXQobWF0aC5kaXYoKCRtaW4tdncgKiAwLjk3OTYpICogJG1pbi1zaXplLCAxMDAwKSl9dnc7IC8vIDAuOTc5NiBmaXhlcyB3cm9uZyBjYWxjdWxhdGlvbnMgaW4gQ2hyb21lXG5cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogJG1pbi12dykge1xuICAgICN7JHByb3BlcnR5fTogZ2V0LXByb2dyZXNzaXZlLWNhbGMoJG1pbi1zaXplLCAkbWF4LXNpemUsICRtaW4tdncsICRtYXgtdncpO1xuICB9XG5cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogJG1heC12dykge1xuICAgICN7JHByb3BlcnR5fTogcGl4ZWxhdGUoJG1heC1zaXplKTtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBQbGFjZWhvbGRlcnMgPiBTQ0FMQUJJTElUWVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE5lZ2F0aXZlXG4lcGgtbmVnYXRpdmUge1xuICBoMSxcbiAgaDIsXG4gIGgzLFxuICBoNCxcbiAgaDUsXG4gIGg2LFxuICBwIHtcbiAgICBjb2xvcjogbWFwLWdldCgkcm9sZXMtY29sLXRleHRzLCAnbmVnYXRpdmUnKTtcbiAgfVxuXG4gIC5tZXRhIHtcbiAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRzd2F0Y2hlcy1jb2xvcnMsICdob25leS15ZWxsb3cnLCAnbGlnaHQnKTtcbiAgfVxuXG4gIC50ZXh0LWxpbmsge1xuICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ25vcm1hbCcpO1xuICAgIGJvcmRlci1ib3R0b206IHBpeGVsYXRlKDFweCkgZG90dGVkXG4gICAgICByZ2JhKG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnbm9ybWFsJyksIDAuMzMpO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdob3ZlcicpO1xuICAgIH1cblxuICAgICY6YWN0aXZlIHtcbiAgICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2FjdGl2ZScpO1xuICAgIH1cbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBXYXZlXG4lcGgtd2F2ZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogNTAlO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLXdpZHRoOiBtYXRoLmRpdihtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWF4JyksIDIpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG5cbiAgPiBzdmcge1xuICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKDEwMCUpO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEhlYWQgd2F2ZVxuJXBoLWhlYWQtd2F2ZSB7XG4gICR3YXZlLWhlaWdodDogYmFzZShtYXAtZ2V0KCRyb2xlcy1kaW1lbnNpb25zLXdhdmVzLCAnaGVhZGVyJykpO1xuXG4gIC53YXZlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgdG9wOiBjYWxjKDEwMCUgLSAxUHgpO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogZW0oJHdhdmUtaGVpZ2h0KTtcblxuICAgIC5pbm5lciB7XG4gICAgICBAaW5jbHVkZSBkaW1lbnNpb25zLXNxdWFyZSgxMDAlKTtcblxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgICAgc3ZnIHtcbiAgICAgICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG5cbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIG1pbi13aWR0aDogbWF0aC5kaXYobWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21heCcpLCAyKTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBrZXlmcmFtZXMgc2xpZGUge1xuICAgIGZyb20ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgfVxuXG4gICAgdG8ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgMCk7XG4gICAgfVxuICB9XG5cbiAgLnNjcm9sbC1idG4ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3R0b206IDIwcHg7XG4gICAgbGVmdDogNTAlO1xuICAgIHotaW5kZXg6IDE7XG4gICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRzd2F0Y2hlcy1jb2xvcnMsICdjb3JuZmxvd2VyJywgJ2Jhc2UnKTtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICBhbmltYXRpb246IHNsaWRlIDFzIGVhc2UtaW4tb3V0IGluZmluaXRlIGFsdGVybmF0ZTtcblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdob3ZlcicpO1xuICAgIH1cblxuICAgICY6YWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnYWN0aXZlJyk7XG4gICAgfVxuXG4gICAgc3ZnIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gICAgfVxuXG4gICAgYm9keTpub3QoLnNjcm9sbGFibGUpICYge1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBBbGxcbltjbGFzcyo9J3dycC0nXSB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW4taW5saW5lOiBhdXRvO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBMYXlvdXRcbi53cnAtbGF5b3V0IHtcbiAgQGluY2x1ZGUgcGFkZGluZy1oKG1hcC1nZXQoJHJvbGVzLXNwYWNlcywgJ2xheW91dCcpKTtcblxuICBtYXgtd2lkdGg6IHBpeGVsYXRlKG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtYXgnKSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFBhZ2Vcbi53cnAtcGFnZSB7XG4gIG1heC13aWR0aDogYmFzZShtYXAtZ2V0KCRyb2xlcy1kaW1lbnNpb25zLWNvbnRlbnQsICdwYWdlJykpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBQb3N0XG4ud3JwLWFydGljbGUge1xuICBtYXgtd2lkdGg6IGJhc2UobWFwLWdldCgkcm9sZXMtZGltZW5zaW9ucy1jb250ZW50LCAnYXJ0aWNsZScpKTtcbn1cbiIsIi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEdlbmVyYWwgPiBHTE9CQUxcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuQHVzZSAnc2FzczptYXRoJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBDT0xPUlNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTGlnaHRcbkBmdW5jdGlvbiBsaWdodCgkY29sb3IsICRwZXJjZW50KSB7XG4gIEByZXR1cm4gbWl4KCNmZmYsICRjb2xvciwgJHBlcmNlbnQpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBEYXJrXG5AZnVuY3Rpb24gZGFyaygkY29sb3IsICRwZXJjZW50KSB7XG4gIEByZXR1cm4gbWl4KCMwMDAsICRjb2xvciwgJHBlcmNlbnQpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IE1BUFNcblxuJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5nczogZmFsc2UgIWRlZmF1bHQ7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgRGVlcCBXYXJuaW5nXG4vLyBEaXNwbGF5cyBhIHdhcm5pbmcgaWYgdGhlIHJldHJpZXZlZCB2YWx1ZSBpcyBgbnVsbGBcbkBmdW5jdGlvbiBtYXAtZ2V0LWRlZXAtd2FybmluZygkd2FybiwgJGdldCwgJGtleSkge1xuICBAaWYgbm90ICRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3Mge1xuICAgIEBpZiAkZ2V0ID09IG51bGwge1xuICAgICAgQHdhcm4gJ01hcCBoYXMgbm8gdmFsdWUgZm9yIGtleSBzZWFyY2ggYCN7JHdhcm59YCc7XG4gICAgfSBAZWxzZSBpZiB0eXBlLW9mKCRnZXQpICE9ICdtYXAnIHtcbiAgICAgIEB3YXJuICdOb24tbWFwIHZhbHVlIGZvdW5kIGZvciBrZXkgc2VhcmNoIGAjeyR3YXJufWAsIGNhbm5vdCBzZWFyY2ggZm9yIGtleSBgI3ska2V5fWAnO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gbnVsbDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIEdldCBEZWVwXG4vLyBHaXZlbiBhIG1hcCBhbmQgYSBsaXN0IG9mIGtleXMsIGZpbmQgdGhlIHZhbHVlIGF0IHRoZSBnaXZlbiBrZXlcbkBmdW5jdGlvbiBtYXAtZ2V0LWRlZXAoJG1hcCwgJGtleXMuLi4pIHtcbiAgQGlmIGxlbmd0aCgka2V5cykgPT0gMSB7XG4gICAgJGtleXM6IG50aCgka2V5cywgMSk7XG4gIH1cblxuICAkd2FybjogJyN7bnRoKCRrZXlzLCAxKX0nO1xuICAkbGVuZ3RoOiBsZW5ndGgoJGtleXMpO1xuICAkZ2V0OiBtYXAtZ2V0KCRtYXAsIG50aCgka2V5cywgMSkpO1xuXG4gIEBpZiAkbGVuZ3RoID4gMSB7XG4gICAgQGZvciAkaSBmcm9tIDIgdGhyb3VnaCAkbGVuZ3RoIHtcbiAgICAgIEBpZiAkZ2V0ICE9IG51bGwgYW5kIHR5cGUtb2YoJGdldCkgPT0gJ21hcCcge1xuICAgICAgICAkd2FybjogJHdhcm4gKyAnLT4je250aCgka2V5cywgJGkpfSc7XG4gICAgICAgICRnZXQ6IG1hcC1nZXQoJGdldCwgbnRoKCRrZXlzLCAkaSkpO1xuXG4gICAgICAgIEBpZiAkZ2V0ID09IG51bGwge1xuICAgICAgICAgIEByZXR1cm4gbWFwLWdldC1kZWVwLXdhcm5pbmcoJHdhcm4sICRnZXQsIG50aCgka2V5cywgJGkpKTtcbiAgICAgICAgfVxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIEByZXR1cm4gbWFwLWdldC1kZWVwLXdhcm5pbmcoJHdhcm4sICRnZXQsIG50aCgka2V5cywgJGkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRnZXQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgS2V5c1xuQGZ1bmN0aW9uIGdldC1rZXlzKCRrZXlzLCAkY291bnRlcikge1xuICAkcmV0dXJuOiAoKTtcblxuICBAZm9yICRpIGZyb20gMSB0byAkY291bnRlciB7XG4gICAgJHJldHVybjogYXBwZW5kKCRyZXR1cm4sIG50aCgka2V5cywgJGkpKTtcbiAgfVxuXG4gIEByZXR1cm4gJHJldHVybjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIEdldCBQcmV2aW91cyBLZXlcbkBmdW5jdGlvbiBtYXAtZ2V0LXByZXYta2V5KCRtYXAsICRrZXkpIHtcbiAgJGluZGV4OiBpbmRleCgkbWFwLCAka2V5KTtcbiAgJHByZXY6ICRpbmRleCAtIDE7XG4gICRyZXN1bHQ6IGlmKCRwcmV2ID4gMCwgbnRoKCRtYXAsICRwcmV2KSwgbnVsbCk7XG5cbiAgQHJldHVybiAkcmVzdWx0O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgU2V0XG5AZnVuY3Rpb24gbWFwLXNldCgkbWFwLCAka2V5LCAkdmFsdWUpIHtcbiAgQHJldHVybiBtYXAtbWVyZ2UoXG4gICAgJG1hcCxcbiAgICAoXG4gICAgICAka2V5OiAkdmFsdWVcbiAgICApXG4gICk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBTZXQgRGVlcFxuQGZ1bmN0aW9uIG1hcC1zZXQtZGVlcCgkbWFwLCAka2V5cywgJHZhbHVlKSB7XG4gICRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3M6IHRydWUgIWdsb2JhbDtcbiAgJGxlbmd0aDogbGVuZ3RoKCRrZXlzKTtcbiAgJGdldC1rZXlzOiAoKTtcbiAgJG1hcC1sZXZlbDogKCk7XG5cbiAgQGlmICRsZW5ndGggPiAxIHtcbiAgICAkZ2V0LWtleXM6IGdldC1rZXlzKCRrZXlzLCAkbGVuZ3RoKTtcbiAgICAkbWFwLWxldmVsOiBtYXAtZ2V0LWRlZXAoJG1hcCwgJGdldC1rZXlzKTtcbiAgfVxuXG4gICRtZXJnZTogKFxuICAgIG50aCgka2V5cywgJGxlbmd0aCk6ICR2YWx1ZVxuICApO1xuXG4gIEBpZiAkbWFwLWxldmVsIHtcbiAgICAkbWVyZ2U6IG1hcC1tZXJnZSgkbWFwLWxldmVsLCAkbWVyZ2UpO1xuICB9XG5cbiAgQGZvciAkaSBmcm9tICgkbGVuZ3RoICogLTEgKyAxKSB0aHJvdWdoIC0xIHtcbiAgICAkajogYWJzKCRpKTtcbiAgICAka2V5OiBudGgoJGtleXMsICRqKTtcblxuICAgIC8vIEBkZWJ1ZyAkZ2V0LWtleXM7XG5cbiAgICBAaWYgJGogPiAxIHtcbiAgICAgICRnZXQta2V5czogZ2V0LWtleXMoJGtleXMsICRqKTtcbiAgICAgICRtYXAtbGV2ZWw6IG1hcC1nZXQtZGVlcCgkbWFwLCAkZ2V0LWtleXMpO1xuXG4gICAgICBAaWYgJG1hcC1sZXZlbCB7XG4gICAgICAgICRtZXJnZTogbWFwLW1lcmdlKFxuICAgICAgICAgICRtYXAtbGV2ZWwsXG4gICAgICAgICAgKFxuICAgICAgICAgICAgJGtleTogJG1lcmdlXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSBAZWxzZSB7XG4gICAgICAgICRtZXJnZTogKFxuICAgICAgICAgICRrZXk6ICRtZXJnZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gQGVsc2Uge1xuICAgICAgJG1lcmdlOiAoXG4gICAgICAgICRrZXk6ICRtZXJnZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAkbWFwOiBtYXAtbWVyZ2UoJG1hcCwgJG1lcmdlKTtcblxuICAkcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzOiBmYWxzZSAhZ2xvYmFsO1xuXG4gIEByZXR1cm4gJG1hcDtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBVTklUU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBQcm9ncmVzc2l2ZSBjYWxjXG5AZnVuY3Rpb24gZ2V0LXByb2dyZXNzaXZlLWNhbGMoXG4gICRtaW4tb2JqLXNpemUsXG4gICRtYXgtb2JqLXNpemUsXG4gICRtaW4tdnAsXG4gICRtYXgtdnAsXG4gICR2cC11bml0OiB2d1xuKSB7XG4gIEByZXR1cm4gY2FsYyhcbiAgICAjeyRtaW4tb2JqLXNpemV9ICsgI3tzdHJpcC11bml0KCRtYXgtb2JqLXNpemUgLSAkbWluLW9iai1zaXplKX0gKlxuICAgICAgKCgxMDAjeyR2cC11bml0fSAtICN7JG1pbi12cH0pIC8gI3tzdHJpcC11bml0KCRtYXgtdnAgLSAkbWluLXZwKX0pXG4gICk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogVU5JVFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU3RyaXAgdW5pdFxuQGZ1bmN0aW9uIHN0cmlwLXVuaXQoJG51bWJlcikge1xuICBAaWYgdHlwZS1vZigkbnVtYmVyKSA9PSAnbnVtYmVyJyBhbmQgbm90IHVuaXRsZXNzKCRudW1iZXIpIHtcbiAgICBAcmV0dXJuICRudW1iZXIgLyAoJG51bWJlciAqIDAgKyAxKTtcbiAgfVxuXG4gIEByZXR1cm4gJG51bWJlcjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IGVtL3JlbSB1bml0XG5AZnVuY3Rpb24gZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIGVtKTtcbn1cblxuQGZ1bmN0aW9uIHJlbSgkbnVtLCAkZm9udC1zaXplOiBmYWxzZSkge1xuICBAcmV0dXJuIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgcmVtKTtcbn1cblxuQGZ1bmN0aW9uIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgJHVuaXQpIHtcbiAgJGZzOiAxMHB4O1xuXG4gIEBpZiAkZm9udC1zaXplIHtcbiAgICAkZnM6ICRmb250LXNpemU7XG4gIH1cbiAgQGVsc2UgaWYgJGJhc2UtaHRtbC1mb250LXNpemUgeyAvLyBtYWtlIHN1cmUgdG8gZGVmaW5lIHRoaXMgdmFyaWFibGUgb24geW91ciBvd25cbiAgICAkZnM6ICRiYXNlLWh0bWwtZm9udC1zaXplO1xuICB9XG5cbiAgQHJldHVybiAje3N0cmlwLXVuaXQoJG51bSkgLyBzdHJpcC11bml0KCRmcyl9I3skdW5pdH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBzY3JlZW4gcGVyY2VudFxuQGZ1bmN0aW9uIGdldC1zY3JlZW4tcGVyY2VudCgkd2lkdGgsICRzY3JlZW4pIHtcbiAgQHJldHVybiB1bnF1b3RlKCcjeyR3aWR0aCAqIDEwMCAvICRzY3JlZW59JScpO1xufVxuXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IFotSU5ERVhFU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZW5lcmF0b3JcbkBmdW5jdGlvbiB6LWluZGV4KCRtYXAsICRrZXlzKSB7XG4gICRmb3VuZC1pbmRleDogbnVsbDtcblxuICBAZWFjaCAka2V5IGluICRrZXlzIHtcbiAgICBAaWYgKHR5cGUtb2YoJG1hcCkgPT0gJ21hcCcpIHtcbiAgICAgICRmb3VuZC1pbmRleDogaW5kZXgobWFwLWtleXMoJG1hcCksICRrZXkpO1xuICAgICAgJG1hcDogbWFwLWdldCgkbWFwLCAka2V5KTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRmb3VuZC1pbmRleDogaW5kZXgoJG1hcCwgJGtleSk7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkZm91bmQtaW5kZXg7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFNlcnZlclxuQGZ1bmN0aW9uIHooJG1hcCwgJGtleXMuLi4pIHtcbiAgQHJldHVybiB6LWluZGV4KCRtYXAsICRrZXlzKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBGT1JNU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBJbnB1dCBwbGFjZWhvbGRlclxuQG1peGluIGlucHV0LXBsYWNlaG9sZGVyKCRjb2wsICRzdHlsZTogaXRhbGljKSB7XG4gICY6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2w7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICB9XG4gICY6Oi1tb3otcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxuICAmOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2w7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICB9XG4gICY6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxufVxuXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IFBPU0lUSU9OU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBBYnNvbHV0ZSBjZW50ZXJlZFxuQG1peGluIGFic29sdXRlLWNlbnRlcmVkKCR0eXBlOiBhYnNvbHV0ZSwgJHBvczogNTAlKSB7XG4gIHBvc2l0aW9uOiAkdHlwZTtcbiAgdG9wOiAkcG9zO1xuICBsZWZ0OiAkcG9zO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQWJzb2x1dGUgY2VudGVyZWQgWFxuQG1peGluIGFic29sdXRlLWNlbnRlcmVkLXgoJHR5cGU6IGFic29sdXRlLCAkcG9zOiA1MCUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICBsZWZ0OiAkcG9zO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEFic29sdXRlIGNlbnRlcmVkIFlcbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXJlZC15KCR0eXBlOiBhYnNvbHV0ZSwgJHBvczogNTAlKSB7XG4gIHBvc2l0aW9uOiAkdHlwZTtcbiAgdG9wOiAkcG9zO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogU0hPUlRIQU5EU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBQb3NpdGlvbnNcbkBtaXhpbiBwb3NpdGlvbi1zdHJldGNoZWQoJHR5cGU6IGFic29sdXRlKSB7XG4gIHBvc2l0aW9uOiAkdHlwZTtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBEaW1lbnNpb25zXG5AbWl4aW4gZGltZW5zaW9ucy1zcXVhcmUoJHZhbHVlKSB7XG4gIHdpZHRoOiAkdmFsdWU7XG4gIGhlaWdodDogJHZhbHVlO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBQYWRkaW5nXG5AbWl4aW4gcGFkZGluZy12KCR2YWx1ZSkge1xuICBwYWRkaW5nLXRvcDogJHZhbHVlO1xuICBwYWRkaW5nLWJvdHRvbTogJHZhbHVlO1xufVxuXG5AbWl4aW4gcGFkZGluZy1oKCR2YWx1ZSkge1xuICBwYWRkaW5nLXJpZ2h0OiAkdmFsdWU7XG4gIHBhZGRpbmctbGVmdDogJHZhbHVlO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXJnaW5cbkBtaXhpbiBtYXJnaW4tdigkdmFsdWUpIHtcbiAgbWFyZ2luLXRvcDogJHZhbHVlO1xuICBtYXJnaW4tYm90dG9tOiAkdmFsdWU7XG59XG5cbkBtaXhpbiBtYXJnaW4taCgkdmFsdWUpIHtcbiAgbWFyZ2luLXJpZ2h0OiAkdmFsdWU7XG4gIG1hcmdpbi1sZWZ0OiAkdmFsdWU7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEJvcmRlclxuQG1peGluIGJvcmRlci12KCR2YWx1ZSkge1xuICBib3JkZXItdG9wOiAkdmFsdWU7XG4gIGJvcmRlci1ib3R0b206ICR2YWx1ZTtcbn1cblxuQG1peGluIGJvcmRlci1oKCR2YWx1ZSkge1xuICBib3JkZXItcmlnaHQ6ICR2YWx1ZTtcbiAgYm9yZGVyLWxlZnQ6ICR2YWx1ZTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBUWVBPR1JBUEhZXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEZvbnQgc21vb3RoaW5nXG5AbWl4aW4gZm9udC1zbW9vdGhpbmcoJHZhbHVlOiBhbnRpYWxpYXNlZCkge1xuICBAaWYgJHZhbHVlID09IGFudGlhbGlhc2VkIHtcbiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICB9IEBlbHNlIHtcbiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBzdWJwaXhlbC1hbnRpYWxpYXNlZDtcbiAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogYXV0bztcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBUZXh0IHVwcGVyY2FzZVxuQG1peGluIHRleHQtdXBwZXJjYXNlKCkge1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAtbW96LWZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2Nhc2UnO1xuICAtd2Via2l0LWZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2Nhc2UnO1xuICBmb250LWZlYXR1cmUtc2V0dGluZ3M6ICdjYXNlJyBvbjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU2VsZWN0aW9uXG5AbWl4aW4gc2VsZWN0aW9uKCRjb2wpIHtcbiAgJGJncjogaWYoJGNvbCAhPSB0cmFuc3BhcmVudCwgcmdiYSgkY29sLCAwLjUpLCByZ2JhKDAsIDAsIDAsIDApKTtcblxuICAmOjotbW96LXNlbGVjdGlvbiB7XG4gICAgYmFja2dyb3VuZDogJGJncjtcbiAgfVxuXG4gICY6OnNlbGVjdGlvbiB7XG4gICAgYmFja2dyb3VuZDogJGJncjtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBCQVNFXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEltcG9ydHNcbkBpbXBvcnQgJy4uLy4uL2RlZnMvYnJhbmQuanMnO1xuQGltcG9ydCAnLi4vLi4vZGVmcy93ZWJzaXRlLmpzJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRm9udCBzaXplXG5AZnVuY3Rpb24gcm9sZSgkbWFwLCAkdmFsdWUpIHtcbiAgJHItbWFwOiBtYXAtZ2V0KCR2YWx1ZSwgJ21hcCcpO1xuICAkci12YWx1ZTogbWFwLWdldCgkdmFsdWUsICd2YWx1ZScpO1xuICBAcmV0dXJuIG1hcC1nZXQoJHItbWFwLCAkci12YWx1ZSk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9ucyA+IENBTENcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgdmFsdWUgYmFzZWQgb24gdGhlIGJhc2UgZm9udCBzaXplXG5AZnVuY3Rpb24gYmFzZSgkdmFsdWUpIHtcbiAgQHJldHVybiBtYXRoLmRpdigkdmFsdWUsIG1hcC1nZXQoJHJvbGVzLXJhdGlvcywgJ2xheW91dC1ncm93dGgnKSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFByb2dyZXNzaXZlIGNhbGNcbkBmdW5jdGlvbiBnZXQtcHJvZ3Jlc3NpdmUtY2FsYyhcbiAgJG1pbi1vYmotc2l6ZSxcbiAgJG1heC1vYmotc2l6ZSxcbiAgJG1pbi12cCxcbiAgJG1heC12cCxcbiAgJHZwLXVuaXQ6IHZ3XG4pIHtcbiAgQHJldHVybiBjYWxjKFxuICAgICN7cGl4ZWxhdGUoJG1pbi1vYmotc2l6ZSl9ICsgI3tzdHJpcC11bml0KCRtYXgtb2JqLXNpemUgLSAkbWluLW9iai1zaXplKX0gKlxuICAgICAgKFxuICAgICAgICAoMTAwI3skdnAtdW5pdH0gLSAje3BpeGVsYXRlKCRtaW4tdnApfSkgLyAje3N0cmlwLXVuaXQoXG4gICAgICAgICAgICAkbWF4LXZwIC0gJG1pbi12cFxuICAgICAgICAgICl9XG4gICAgICApXG4gICk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9ucyA+IFVOSVRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU3RyaXAgdW5pdFxuQGZ1bmN0aW9uIHN0cmlwLXVuaXQoJG51bWJlcikge1xuICBAaWYgdHlwZS1vZigkbnVtYmVyKSA9PSAnbnVtYmVyJyBhbmQgbm90IHVuaXRsZXNzKCRudW1iZXIpIHtcbiAgICBAcmV0dXJuIG1hdGguZGl2KCRudW1iZXIsICgkbnVtYmVyICogMCArIDEpKTtcbiAgfVxuXG4gIEByZXR1cm4gJG51bWJlcjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IFB4IHVuaXRcbkBmdW5jdGlvbiBwaXhlbGF0ZSgkdmFsdWUpIHtcbiAgQHJldHVybiAje3N0cmlwLXVuaXQoJHZhbHVlKX1QeDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IGVtL3JlbSB1bml0XG5AZnVuY3Rpb24gZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIGVtKTtcbn1cblxuQGZ1bmN0aW9uIHJlbSgkbnVtLCAkZm9udC1zaXplOiBmYWxzZSkge1xuICBAcmV0dXJuIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgcmVtKTtcbn1cblxuQGZ1bmN0aW9uIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgJHVuaXQpIHtcbiAgJGZzOiAxMHB4O1xuXG4gIEBpZiAkZm9udC1zaXplIHtcbiAgICAkZnM6ICRmb250LXNpemU7XG4gIH0gQGVsc2Uge1xuICAgICRmczogbWFwLWdldCgkdHlwb2dyYXBoeSwgJ2Jhc2VfZm9udF9zaXplJyk7XG4gIH1cblxuICBAcmV0dXJuICN7bWF0aC5kaXYoc3RyaXAtdW5pdCgkbnVtKSwgc3RyaXAtdW5pdCgkZnMpKX0jeyR1bml0fTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRGF0YSA+IFNXQVRDSEVTXG5cbkBpbXBvcnQgJy4uLy4uL2RlZnMvc3dhdGNoZXMvaW5kZXguanMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvc3dhdGNoZXMvc3dhdGNoZXNfYnJlYWtwb2ludHMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvc3dhdGNoZXMvc3dhdGNoZXNfcmF0aW9zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX3NjcmVlbnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvc3dhdGNoZXMvc3dhdGNoZXNfc3BhY2VzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRGF0YSA+IFJPTEVTXG5cbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2JvcmRlcnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfYnJlYWtwb2ludHMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfY29sb3JzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2RpbWVuc2lvbnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfcmF0aW9zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3NjcmVlbnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfc2hhZG93cyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19zcGFjZXMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfdHlwb2dyYXBoeSc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGlucyA+IFNDQUxBQklMSVRZXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU2NhbGVyXG5AbWl4aW4gc2NhbGVyKFxuICAkcHJvcGVydHksXG4gICRtaW4tc2l6ZSxcbiAgJG1heC1zaXplLFxuICAkbWluLXZ3OiBtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWluJyksXG4gICRtYXgtdnc6IG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtYXgnKVxuKSB7XG4gICN7JHByb3BlcnR5fTogI3tzdHJpcC11bml0KG1hdGguZGl2KCgkbWluLXZ3ICogMC45Nzk2KSAqICRtaW4tc2l6ZSwgMTAwMCkpfXZ3OyAvLyAwLjk3OTYgZml4ZXMgd3JvbmcgY2FsY3VsYXRpb25zIGluIENocm9tZVxuXG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6ICRtaW4tdncpIHtcbiAgICAjeyRwcm9wZXJ0eX06IGdldC1wcm9ncmVzc2l2ZS1jYWxjKCRtaW4tc2l6ZSwgJG1heC1zaXplLCAkbWluLXZ3LCAkbWF4LXZ3KTtcbiAgfVxuXG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6ICRtYXgtdncpIHtcbiAgICAjeyRwcm9wZXJ0eX06IHBpeGVsYXRlKCRtYXgtc2l6ZSk7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gUGxhY2Vob2xkZXJzID4gU0NBTEFCSUxJVFlcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBOZWdhdGl2ZVxuJXBoLW5lZ2F0aXZlIHtcbiAgaDEsXG4gIGgyLFxuICBoMyxcbiAgaDQsXG4gIGg1LFxuICBoNixcbiAgcCB7XG4gICAgY29sb3I6IG1hcC1nZXQoJHJvbGVzLWNvbC10ZXh0cywgJ25lZ2F0aXZlJyk7XG4gIH1cblxuICAubWV0YSB7XG4gICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkc3dhdGNoZXMtY29sb3JzLCAnaG9uZXkteWVsbG93JywgJ2xpZ2h0Jyk7XG4gIH1cblxuICAudGV4dC1saW5rIHtcbiAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdub3JtYWwnKTtcbiAgICBib3JkZXItYm90dG9tOiBwaXhlbGF0ZSgxcHgpIGRvdHRlZFxuICAgICAgcmdiYShtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ25vcm1hbCcpLCAwLjMzKTtcblxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnaG92ZXInKTtcbiAgICB9XG5cbiAgICAmOmFjdGl2ZSB7XG4gICAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdhY3RpdmUnKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgV2F2ZVxuJXBoLXdhdmUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDUwJTtcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi13aWR0aDogbWF0aC5kaXYobWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21heCcpLCAyKTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuXG4gID4gc3ZnIHtcbiAgICBAaW5jbHVkZSBkaW1lbnNpb25zLXNxdWFyZSgxMDAlKTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBIZWFkIHdhdmVcbiVwaC1oZWFkLXdhdmUge1xuICAkd2F2ZS1oZWlnaHQ6IGJhc2UobWFwLWdldCgkcm9sZXMtZGltZW5zaW9ucy13YXZlcywgJ2hlYWRlcicpKTtcblxuICAud2F2ZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgIHRvcDogY2FsYygxMDAlIC0gMVB4KTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IGVtKCR3YXZlLWhlaWdodCk7XG5cbiAgICAuaW5uZXIge1xuICAgICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG5cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAgIHN2ZyB7XG4gICAgICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKDEwMCUpO1xuXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICBtaW4td2lkdGg6IG1hdGguZGl2KG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtYXgnKSwgMik7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAa2V5ZnJhbWVzIHNsaWRlIHtcbiAgICBmcm9tIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgIH1cblxuICAgIHRvIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIDApO1xuICAgIH1cbiAgfVxuXG4gIC5zY3JvbGwtYnRuIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm90dG9tOiAyMHB4O1xuICAgIGxlZnQ6IDUwJTtcbiAgICB6LWluZGV4OiAxO1xuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQtZGVlcCgkc3dhdGNoZXMtY29sb3JzLCAnY29ybmZsb3dlcicsICdiYXNlJyk7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgYW5pbWF0aW9uOiBzbGlkZSAxcyBlYXNlLWluLW91dCBpbmZpbml0ZSBhbHRlcm5hdGU7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnaG92ZXInKTtcbiAgICB9XG5cbiAgICAmOmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2FjdGl2ZScpO1xuICAgIH1cblxuICAgIHN2ZyB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuICAgIH1cblxuICAgIGJvZHk6bm90KC5zY3JvbGxhYmxlKSAmIHtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG4gIH1cbn1cblxuOmdsb2JhbCB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IENvb2tpZSBDb25zZW50XG4gIFtpZD0nY29va2llLWxhdy1pbmZvLWJhciddIHtcbiAgICAkbWluLWZvbnQtc2l6ZTogbWFwLWdldCgkcm9sZXMtdHlwby1mb250LXNpemVzLCAnbm90aWZpY2F0aW9uJyk7XG4gICAgJG1heC1mb250LXNpemU6ICRtaW4tZm9udC1zaXplICogbWFwLWdldCgkcm9sZXMtcmF0aW9zLCAndGV4dC1ncm93dGgnKTtcblxuICAgIEBpbmNsdWRlIHNjYWxlcihmb250LXNpemUsICRtaW4tZm9udC1zaXplLCAkbWF4LWZvbnQtc2l6ZSk7XG5cbiAgICBwYWRkaW5nOiAwIDAgbWFwLWdldCgkcm9sZXMtc3BhY2VzLCAnbGF5b3V0JykgKiAwLjUgIWltcG9ydGFudDtcbiAgICBmb250LWZhbWlseTogbWFwLWdldCgkcm9sZXMtdHlwby1mb250LWZhbWlsaWVzLCAndGV4dCcpICFpbXBvcnRhbnQ7XG4gICAgZm9udC13ZWlnaHQ6IG1hcC1nZXQoJHJvbGVzLXR5cG8tZm9udC13ZWlnaHRzLCAndGV4dCcpICFpbXBvcnRhbnQ7XG4gICAgbGluZS1oZWlnaHQ6IG1hcC1nZXQoJHJvbGVzLXR5cG8tbGluZS1oZWlnaHRzLCAndGV4dCcpO1xuICAgIGN1cnNvcjogdGV4dDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcblxuICAgIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSAqL1xuICAgIC56bl9fd3JwLWxheW91dCB7XG4gICAgICBAaW5jbHVkZSBwYWRkaW5nLWgobWFwLWdldCgkcm9sZXMtc3BhY2VzLCAnbGF5b3V0JykgKiAwLjUpO1xuICAgIH1cblxuICAgIC5jbGktYmFyLWNvbnRhaW5lciB7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICBwYWRkaW5nOiBwaXhlbGF0ZShtYXAtZ2V0KCRyb2xlcy1zcGFjZXMsICdwYW5lbCcpICogMC41KVxuICAgICAgICBwaXhlbGF0ZShtYXAtZ2V0KCRyb2xlcy1zcGFjZXMsICdwYW5lbCcpKTtcbiAgICAgIGJveC1zaGFkb3c6IHBpeGVsYXRlKDNweCkgcGl4ZWxhdGUoM3B4KSAwXG4gICAgICAgIG1hcC1nZXQtZGVlcCgkc3dhdGNoZXMtY29sb3JzLCAncHJ1c3NpYW4tYmx1ZScsICdiYXNlJyk7XG4gICAgfVxuXG4gICAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lICovXG4gICAgLmNsaS1iYXItYnRuX2NvbnRhaW5lciB7XG4gICAgICBmbGV4OiAxO1xuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICAgIG1hcmdpbjogcGl4ZWxhdGUobWFwLWdldCgkcm9sZXMtc3BhY2VzLCAncGFuZWwnKSAqIDAuMjUpIGF1dG8gIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAuY2xpLWJhci1tZXNzYWdlIHtcbiAgICAgIG1hcmdpbjogcGl4ZWxhdGUobWFwLWdldCgkcm9sZXMtc3BhY2VzLCAncGFuZWwnKSAqIDAuMjUpIGF1dG8gIWltcG9ydGFudDtcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgfVxuXG4gICAgLmNsaS1wbHVnaW4tYnV0dG9uIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgbWFyZ2luOiBwaXhlbGF0ZShtYXAtZ2V0KCRyb2xlcy1zcGFjZXMsICdwYW5lbCcpICogMC4yNSkgMDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IG1hcC1nZXQoJHJvbGVzLWJvcmRlcnMtcmFkaXVzZXMsICdibG9jaycpICogMC41O1xuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKFxuICAgICAgICAgICRzd2F0Y2hlcy1jb2xvcnMsXG4gICAgICAgICAgJ3BydXNzaWFuLWJsdWUnLFxuICAgICAgICAgICdiYXNlJ1xuICAgICAgICApICFpbXBvcnRhbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU3Bpbm5lclxuICBAa2V5ZnJhbWVzIHNwaW5uZXIge1xuICAgIDAlIHtcbiAgICAgIHRvcDogcGl4ZWxhdGUoMzZweCk7XG4gICAgICBsZWZ0OiBwaXhlbGF0ZSgzNnB4KTtcbiAgICAgIHdpZHRoOiAwO1xuICAgICAgaGVpZ2h0OiAwO1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG5cbiAgICAxMDAlIHtcbiAgICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKHBpeGVsYXRlKDcycHgpKTtcblxuICAgICAgdG9wOiAwO1xuICAgICAgbGVmdDogMDtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuICB9XG5cbiAgLnNwaW5uZXIge1xuICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKHBpeGVsYXRlKDgwcHgpKTtcblxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIH1cblxuICAuc3Bpbm5lciBkaXYge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3JkZXI6IHBpeGVsYXRlKDRweCkgc29saWQgI2ZmZjtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgb3BhY2l0eTogMTtcbiAgICBhbmltYXRpb246IHpuX19zcGlubmVyIDFzIGN1YmljLWJlemllcigwLCAwLjIsIDAuOCwgMSkgaW5maW5pdGU7XG4gIH1cblxuICAuc3Bpbm5lciBkaXY6bnRoLWNoaWxkKDIpIHtcbiAgICBhbmltYXRpb24tZGVsYXk6IC0wLjVzO1xuICB9XG59XG4iLCIvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBHZW5lcmFsID4gUFJJTlQgU1RZTEVTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcbkB1c2UgJ3Nhc3M6bWF0aCc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogQ09MT1JTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IExpZ2h0XG5AZnVuY3Rpb24gbGlnaHQoJGNvbG9yLCAkcGVyY2VudCkge1xuICBAcmV0dXJuIG1peCgjZmZmLCAkY29sb3IsICRwZXJjZW50KTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRGFya1xuQGZ1bmN0aW9uIGRhcmsoJGNvbG9yLCAkcGVyY2VudCkge1xuICBAcmV0dXJuIG1peCgjMDAwLCAkY29sb3IsICRwZXJjZW50KTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBNQVBTXG5cbiRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3M6IGZhbHNlICFkZWZhdWx0O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IERlZXAgV2FybmluZ1xuLy8gRGlzcGxheXMgYSB3YXJuaW5nIGlmIHRoZSByZXRyaWV2ZWQgdmFsdWUgaXMgYG51bGxgXG5AZnVuY3Rpb24gbWFwLWdldC1kZWVwLXdhcm5pbmcoJHdhcm4sICRnZXQsICRrZXkpIHtcbiAgQGlmIG5vdCAkcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzIHtcbiAgICBAaWYgJGdldCA9PSBudWxsIHtcbiAgICAgIEB3YXJuICdNYXAgaGFzIG5vIHZhbHVlIGZvciBrZXkgc2VhcmNoIGAjeyR3YXJufWAnO1xuICAgIH0gQGVsc2UgaWYgdHlwZS1vZigkZ2V0KSAhPSAnbWFwJyB7XG4gICAgICBAd2FybiAnTm9uLW1hcCB2YWx1ZSBmb3VuZCBmb3Iga2V5IHNlYXJjaCBgI3skd2Fybn1gLCBjYW5ub3Qgc2VhcmNoIGZvciBrZXkgYCN7JGtleX1gJztcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuIG51bGw7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgRGVlcFxuLy8gR2l2ZW4gYSBtYXAgYW5kIGEgbGlzdCBvZiBrZXlzLCBmaW5kIHRoZSB2YWx1ZSBhdCB0aGUgZ2l2ZW4ga2V5XG5AZnVuY3Rpb24gbWFwLWdldC1kZWVwKCRtYXAsICRrZXlzLi4uKSB7XG4gIEBpZiBsZW5ndGgoJGtleXMpID09IDEge1xuICAgICRrZXlzOiBudGgoJGtleXMsIDEpO1xuICB9XG5cbiAgJHdhcm46ICcje250aCgka2V5cywgMSl9JztcbiAgJGxlbmd0aDogbGVuZ3RoKCRrZXlzKTtcbiAgJGdldDogbWFwLWdldCgkbWFwLCBudGgoJGtleXMsIDEpKTtcblxuICBAaWYgJGxlbmd0aCA+IDEge1xuICAgIEBmb3IgJGkgZnJvbSAyIHRocm91Z2ggJGxlbmd0aCB7XG4gICAgICBAaWYgJGdldCAhPSBudWxsIGFuZCB0eXBlLW9mKCRnZXQpID09ICdtYXAnIHtcbiAgICAgICAgJHdhcm46ICR3YXJuICsgJy0+I3tudGgoJGtleXMsICRpKX0nO1xuICAgICAgICAkZ2V0OiBtYXAtZ2V0KCRnZXQsIG50aCgka2V5cywgJGkpKTtcblxuICAgICAgICBAaWYgJGdldCA9PSBudWxsIHtcbiAgICAgICAgICBAcmV0dXJuIG1hcC1nZXQtZGVlcC13YXJuaW5nKCR3YXJuLCAkZ2V0LCBudGgoJGtleXMsICRpKSk7XG4gICAgICAgIH1cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICBAcmV0dXJuIG1hcC1nZXQtZGVlcC13YXJuaW5nKCR3YXJuLCAkZ2V0LCBudGgoJGtleXMsICRpKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkZ2V0O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IEtleXNcbkBmdW5jdGlvbiBnZXQta2V5cygka2V5cywgJGNvdW50ZXIpIHtcbiAgJHJldHVybjogKCk7XG5cbiAgQGZvciAkaSBmcm9tIDEgdG8gJGNvdW50ZXIge1xuICAgICRyZXR1cm46IGFwcGVuZCgkcmV0dXJuLCBudGgoJGtleXMsICRpKSk7XG4gIH1cblxuICBAcmV0dXJuICRyZXR1cm47XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgUHJldmlvdXMgS2V5XG5AZnVuY3Rpb24gbWFwLWdldC1wcmV2LWtleSgkbWFwLCAka2V5KSB7XG4gICRpbmRleDogaW5kZXgoJG1hcCwgJGtleSk7XG4gICRwcmV2OiAkaW5kZXggLSAxO1xuICAkcmVzdWx0OiBpZigkcHJldiA+IDAsIG50aCgkbWFwLCAkcHJldiksIG51bGwpO1xuXG4gIEByZXR1cm4gJHJlc3VsdDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIFNldFxuQGZ1bmN0aW9uIG1hcC1zZXQoJG1hcCwgJGtleSwgJHZhbHVlKSB7XG4gIEByZXR1cm4gbWFwLW1lcmdlKFxuICAgICRtYXAsXG4gICAgKFxuICAgICAgJGtleTogJHZhbHVlXG4gICAgKVxuICApO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgU2V0IERlZXBcbkBmdW5jdGlvbiBtYXAtc2V0LWRlZXAoJG1hcCwgJGtleXMsICR2YWx1ZSkge1xuICAkcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzOiB0cnVlICFnbG9iYWw7XG4gICRsZW5ndGg6IGxlbmd0aCgka2V5cyk7XG4gICRnZXQta2V5czogKCk7XG4gICRtYXAtbGV2ZWw6ICgpO1xuXG4gIEBpZiAkbGVuZ3RoID4gMSB7XG4gICAgJGdldC1rZXlzOiBnZXQta2V5cygka2V5cywgJGxlbmd0aCk7XG4gICAgJG1hcC1sZXZlbDogbWFwLWdldC1kZWVwKCRtYXAsICRnZXQta2V5cyk7XG4gIH1cblxuICAkbWVyZ2U6IChcbiAgICBudGgoJGtleXMsICRsZW5ndGgpOiAkdmFsdWVcbiAgKTtcblxuICBAaWYgJG1hcC1sZXZlbCB7XG4gICAgJG1lcmdlOiBtYXAtbWVyZ2UoJG1hcC1sZXZlbCwgJG1lcmdlKTtcbiAgfVxuXG4gIEBmb3IgJGkgZnJvbSAoJGxlbmd0aCAqIC0xICsgMSkgdGhyb3VnaCAtMSB7XG4gICAgJGo6IGFicygkaSk7XG4gICAgJGtleTogbnRoKCRrZXlzLCAkaik7XG5cbiAgICAvLyBAZGVidWcgJGdldC1rZXlzO1xuXG4gICAgQGlmICRqID4gMSB7XG4gICAgICAkZ2V0LWtleXM6IGdldC1rZXlzKCRrZXlzLCAkaik7XG4gICAgICAkbWFwLWxldmVsOiBtYXAtZ2V0LWRlZXAoJG1hcCwgJGdldC1rZXlzKTtcblxuICAgICAgQGlmICRtYXAtbGV2ZWwge1xuICAgICAgICAkbWVyZ2U6IG1hcC1tZXJnZShcbiAgICAgICAgICAkbWFwLWxldmVsLFxuICAgICAgICAgIChcbiAgICAgICAgICAgICRrZXk6ICRtZXJnZVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICAkbWVyZ2U6IChcbiAgICAgICAgICAka2V5OiAkbWVyZ2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IEBlbHNlIHtcbiAgICAgICRtZXJnZTogKFxuICAgICAgICAka2V5OiAkbWVyZ2VcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgJG1hcDogbWFwLW1lcmdlKCRtYXAsICRtZXJnZSk7XG5cbiAgJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5nczogZmFsc2UgIWdsb2JhbDtcblxuICBAcmV0dXJuICRtYXA7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogVU5JVFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUHJvZ3Jlc3NpdmUgY2FsY1xuQGZ1bmN0aW9uIGdldC1wcm9ncmVzc2l2ZS1jYWxjKFxuICAkbWluLW9iai1zaXplLFxuICAkbWF4LW9iai1zaXplLFxuICAkbWluLXZwLFxuICAkbWF4LXZwLFxuICAkdnAtdW5pdDogdndcbikge1xuICBAcmV0dXJuIGNhbGMoXG4gICAgI3skbWluLW9iai1zaXplfSArICN7c3RyaXAtdW5pdCgkbWF4LW9iai1zaXplIC0gJG1pbi1vYmotc2l6ZSl9ICpcbiAgICAgICgoMTAwI3skdnAtdW5pdH0gLSAjeyRtaW4tdnB9KSAvICN7c3RyaXAtdW5pdCgkbWF4LXZwIC0gJG1pbi12cCl9KVxuICApO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IFVOSVRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFN0cmlwIHVuaXRcbkBmdW5jdGlvbiBzdHJpcC11bml0KCRudW1iZXIpIHtcbiAgQGlmIHR5cGUtb2YoJG51bWJlcikgPT0gJ251bWJlcicgYW5kIG5vdCB1bml0bGVzcygkbnVtYmVyKSB7XG4gICAgQHJldHVybiAkbnVtYmVyIC8gKCRudW1iZXIgKiAwICsgMSk7XG4gIH1cblxuICBAcmV0dXJuICRudW1iZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBlbS9yZW0gdW5pdFxuQGZ1bmN0aW9uIGVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCBlbSk7XG59XG5cbkBmdW5jdGlvbiByZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIHJlbSk7XG59XG5cbkBmdW5jdGlvbiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsICR1bml0KSB7XG4gICRmczogMTBweDtcblxuICBAaWYgJGZvbnQtc2l6ZSB7XG4gICAgJGZzOiAkZm9udC1zaXplO1xuICB9XG4gIEBlbHNlIGlmICRiYXNlLWh0bWwtZm9udC1zaXplIHsgLy8gbWFrZSBzdXJlIHRvIGRlZmluZSB0aGlzIHZhcmlhYmxlIG9uIHlvdXIgb3duXG4gICAgJGZzOiAkYmFzZS1odG1sLWZvbnQtc2l6ZTtcbiAgfVxuXG4gIEByZXR1cm4gI3tzdHJpcC11bml0KCRudW0pIC8gc3RyaXAtdW5pdCgkZnMpfSN7JHVuaXR9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgc2NyZWVuIHBlcmNlbnRcbkBmdW5jdGlvbiBnZXQtc2NyZWVuLXBlcmNlbnQoJHdpZHRoLCAkc2NyZWVuKSB7XG4gIEByZXR1cm4gdW5xdW90ZSgnI3skd2lkdGggKiAxMDAgLyAkc2NyZWVufSUnKTtcbn1cblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBaLUlOREVYRVNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2VuZXJhdG9yXG5AZnVuY3Rpb24gei1pbmRleCgkbWFwLCAka2V5cykge1xuICAkZm91bmQtaW5kZXg6IG51bGw7XG5cbiAgQGVhY2ggJGtleSBpbiAka2V5cyB7XG4gICAgQGlmICh0eXBlLW9mKCRtYXApID09ICdtYXAnKSB7XG4gICAgICAkZm91bmQtaW5kZXg6IGluZGV4KG1hcC1rZXlzKCRtYXApLCAka2V5KTtcbiAgICAgICRtYXA6IG1hcC1nZXQoJG1hcCwgJGtleSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkZm91bmQtaW5kZXg6IGluZGV4KCRtYXAsICRrZXkpO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGZvdW5kLWluZGV4O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTZXJ2ZXJcbkBmdW5jdGlvbiB6KCRtYXAsICRrZXlzLi4uKSB7XG4gIEByZXR1cm4gei1pbmRleCgkbWFwLCAka2V5cyk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogRk9STVNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgSW5wdXQgcGxhY2Vob2xkZXJcbkBtaXhpbiBpbnB1dC1wbGFjZWhvbGRlcigkY29sLCAkc3R5bGU6IGl0YWxpYykge1xuICAmOi1tb3otcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxuICAmOjotbW96LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbiAgJjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxuICAmOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbn1cblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBQT1NJVElPTlNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQWJzb2x1dGUgY2VudGVyZWRcbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXJlZCgkdHlwZTogYWJzb2x1dGUsICRwb3M6IDUwJSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIHRvcDogJHBvcztcbiAgbGVmdDogJHBvcztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEFic29sdXRlIGNlbnRlcmVkIFhcbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXJlZC14KCR0eXBlOiBhYnNvbHV0ZSwgJHBvczogNTAlKSB7XG4gIHBvc2l0aW9uOiAkdHlwZTtcbiAgbGVmdDogJHBvcztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBBYnNvbHV0ZSBjZW50ZXJlZCBZXG5AbWl4aW4gYWJzb2x1dGUtY2VudGVyZWQteSgkdHlwZTogYWJzb2x1dGUsICRwb3M6IDUwJSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIHRvcDogJHBvcztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IFNIT1JUSEFORFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUG9zaXRpb25zXG5AbWl4aW4gcG9zaXRpb24tc3RyZXRjaGVkKCR0eXBlOiBhYnNvbHV0ZSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRGltZW5zaW9uc1xuQG1peGluIGRpbWVuc2lvbnMtc3F1YXJlKCR2YWx1ZSkge1xuICB3aWR0aDogJHZhbHVlO1xuICBoZWlnaHQ6ICR2YWx1ZTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUGFkZGluZ1xuQG1peGluIHBhZGRpbmctdigkdmFsdWUpIHtcbiAgcGFkZGluZy10b3A6ICR2YWx1ZTtcbiAgcGFkZGluZy1ib3R0b206ICR2YWx1ZTtcbn1cblxuQG1peGluIHBhZGRpbmctaCgkdmFsdWUpIHtcbiAgcGFkZGluZy1yaWdodDogJHZhbHVlO1xuICBwYWRkaW5nLWxlZnQ6ICR2YWx1ZTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFyZ2luXG5AbWl4aW4gbWFyZ2luLXYoJHZhbHVlKSB7XG4gIG1hcmdpbi10b3A6ICR2YWx1ZTtcbiAgbWFyZ2luLWJvdHRvbTogJHZhbHVlO1xufVxuXG5AbWl4aW4gbWFyZ2luLWgoJHZhbHVlKSB7XG4gIG1hcmdpbi1yaWdodDogJHZhbHVlO1xuICBtYXJnaW4tbGVmdDogJHZhbHVlO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBCb3JkZXJcbkBtaXhpbiBib3JkZXItdigkdmFsdWUpIHtcbiAgYm9yZGVyLXRvcDogJHZhbHVlO1xuICBib3JkZXItYm90dG9tOiAkdmFsdWU7XG59XG5cbkBtaXhpbiBib3JkZXItaCgkdmFsdWUpIHtcbiAgYm9yZGVyLXJpZ2h0OiAkdmFsdWU7XG4gIGJvcmRlci1sZWZ0OiAkdmFsdWU7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogVFlQT0dSQVBIWVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBGb250IHNtb290aGluZ1xuQG1peGluIGZvbnQtc21vb3RoaW5nKCR2YWx1ZTogYW50aWFsaWFzZWQpIHtcbiAgQGlmICR2YWx1ZSA9PSBhbnRpYWxpYXNlZCB7XG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbiAgfSBAZWxzZSB7XG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogc3VicGl4ZWwtYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGF1dG87XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgVGV4dCB1cHBlcmNhc2VcbkBtaXhpbiB0ZXh0LXVwcGVyY2FzZSgpIHtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgLW1vei1mb250LWZlYXR1cmUtc2V0dGluZ3M6ICdjYXNlJztcbiAgLXdlYmtpdC1mb250LWZlYXR1cmUtc2V0dGluZ3M6ICdjYXNlJztcbiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnY2FzZScgb247XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFNlbGVjdGlvblxuQG1peGluIHNlbGVjdGlvbigkY29sKSB7XG4gICRiZ3I6IGlmKCRjb2wgIT0gdHJhbnNwYXJlbnQsIHJnYmEoJGNvbCwgMC41KSwgcmdiYSgwLCAwLCAwLCAwKSk7XG5cbiAgJjo6LW1vei1zZWxlY3Rpb24ge1xuICAgIGJhY2tncm91bmQ6ICRiZ3I7XG4gIH1cblxuICAmOjpzZWxlY3Rpb24ge1xuICAgIGJhY2tncm91bmQ6ICRiZ3I7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gQkFTRVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBJbXBvcnRzXG5AaW1wb3J0ICcuLi8uLi9kZWZzL2JyYW5kLmpzJztcbkBpbXBvcnQgJy4uLy4uL2RlZnMvd2Vic2l0ZS5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEZvbnQgc2l6ZVxuQGZ1bmN0aW9uIHJvbGUoJG1hcCwgJHZhbHVlKSB7XG4gICRyLW1hcDogbWFwLWdldCgkdmFsdWUsICdtYXAnKTtcbiAgJHItdmFsdWU6IG1hcC1nZXQoJHZhbHVlLCAndmFsdWUnKTtcbiAgQHJldHVybiBtYXAtZ2V0KCRyLW1hcCwgJHItdmFsdWUpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnMgPiBDQUxDXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IHZhbHVlIGJhc2VkIG9uIHRoZSBiYXNlIGZvbnQgc2l6ZVxuQGZ1bmN0aW9uIGJhc2UoJHZhbHVlKSB7XG4gIEByZXR1cm4gbWF0aC5kaXYoJHZhbHVlLCBtYXAtZ2V0KCRyb2xlcy1yYXRpb3MsICdsYXlvdXQtZ3Jvd3RoJykpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBQcm9ncmVzc2l2ZSBjYWxjXG5AZnVuY3Rpb24gZ2V0LXByb2dyZXNzaXZlLWNhbGMoXG4gICRtaW4tb2JqLXNpemUsXG4gICRtYXgtb2JqLXNpemUsXG4gICRtaW4tdnAsXG4gICRtYXgtdnAsXG4gICR2cC11bml0OiB2d1xuKSB7XG4gIEByZXR1cm4gY2FsYyhcbiAgICAje3BpeGVsYXRlKCRtaW4tb2JqLXNpemUpfSArICN7c3RyaXAtdW5pdCgkbWF4LW9iai1zaXplIC0gJG1pbi1vYmotc2l6ZSl9ICpcbiAgICAgIChcbiAgICAgICAgKDEwMCN7JHZwLXVuaXR9IC0gI3twaXhlbGF0ZSgkbWluLXZwKX0pIC8gI3tzdHJpcC11bml0KFxuICAgICAgICAgICAgJG1heC12cCAtICRtaW4tdnBcbiAgICAgICAgICApfVxuICAgICAgKVxuICApO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnMgPiBVTklUU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFN0cmlwIHVuaXRcbkBmdW5jdGlvbiBzdHJpcC11bml0KCRudW1iZXIpIHtcbiAgQGlmIHR5cGUtb2YoJG51bWJlcikgPT0gJ251bWJlcicgYW5kIG5vdCB1bml0bGVzcygkbnVtYmVyKSB7XG4gICAgQHJldHVybiBtYXRoLmRpdigkbnVtYmVyLCAoJG51bWJlciAqIDAgKyAxKSk7XG4gIH1cblxuICBAcmV0dXJuICRudW1iZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBQeCB1bml0XG5AZnVuY3Rpb24gcGl4ZWxhdGUoJHZhbHVlKSB7XG4gIEByZXR1cm4gI3tzdHJpcC11bml0KCR2YWx1ZSl9UHg7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBlbS9yZW0gdW5pdFxuQGZ1bmN0aW9uIGVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCBlbSk7XG59XG5cbkBmdW5jdGlvbiByZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIHJlbSk7XG59XG5cbkBmdW5jdGlvbiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsICR1bml0KSB7XG4gICRmczogMTBweDtcblxuICBAaWYgJGZvbnQtc2l6ZSB7XG4gICAgJGZzOiAkZm9udC1zaXplO1xuICB9IEBlbHNlIHtcbiAgICAkZnM6IG1hcC1nZXQoJHR5cG9ncmFwaHksICdiYXNlX2ZvbnRfc2l6ZScpO1xuICB9XG5cbiAgQHJldHVybiAje21hdGguZGl2KHN0cmlwLXVuaXQoJG51bSksIHN0cmlwLXVuaXQoJGZzKSl9I3skdW5pdH07XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIERhdGEgPiBTV0FUQ0hFU1xuXG5AaW1wb3J0ICcuLi8uLi9kZWZzL3N3YXRjaGVzL2luZGV4LmpzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX2JyZWFrcG9pbnRzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX3JhdGlvcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19zY3JlZW5zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX3NwYWNlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIERhdGEgPiBST0xFU1xuXG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19ib3JkZXJzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2JyZWFrcG9pbnRzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2NvbG9ycyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19kaW1lbnNpb25zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3JhdGlvcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19zY3JlZW5zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3NoYWRvd3MnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfc3BhY2VzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3R5cG9ncmFwaHknO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnMgPiBTQ0FMQUJJTElUWVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFNjYWxlclxuQG1peGluIHNjYWxlcihcbiAgJHByb3BlcnR5LFxuICAkbWluLXNpemUsXG4gICRtYXgtc2l6ZSxcbiAgJG1pbi12dzogbWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21pbicpLFxuICAkbWF4LXZ3OiBtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWF4Jylcbikge1xuICAjeyRwcm9wZXJ0eX06ICN7c3RyaXAtdW5pdChtYXRoLmRpdigoJG1pbi12dyAqIDAuOTc5NikgKiAkbWluLXNpemUsIDEwMDApKX12dzsgLy8gMC45Nzk2IGZpeGVzIHdyb25nIGNhbGN1bGF0aW9ucyBpbiBDaHJvbWVcblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAkbWluLXZ3KSB7XG4gICAgI3skcHJvcGVydHl9OiBnZXQtcHJvZ3Jlc3NpdmUtY2FsYygkbWluLXNpemUsICRtYXgtc2l6ZSwgJG1pbi12dywgJG1heC12dyk7XG4gIH1cblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAkbWF4LXZ3KSB7XG4gICAgI3skcHJvcGVydHl9OiBwaXhlbGF0ZSgkbWF4LXNpemUpO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIFBsYWNlaG9sZGVycyA+IFNDQUxBQklMSVRZXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTmVnYXRpdmVcbiVwaC1uZWdhdGl2ZSB7XG4gIGgxLFxuICBoMixcbiAgaDMsXG4gIGg0LFxuICBoNSxcbiAgaDYsXG4gIHAge1xuICAgIGNvbG9yOiBtYXAtZ2V0KCRyb2xlcy1jb2wtdGV4dHMsICduZWdhdGl2ZScpO1xuICB9XG5cbiAgLm1ldGEge1xuICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHN3YXRjaGVzLWNvbG9ycywgJ2hvbmV5LXllbGxvdycsICdsaWdodCcpO1xuICB9XG5cbiAgLnRleHQtbGluayB7XG4gICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnbm9ybWFsJyk7XG4gICAgYm9yZGVyLWJvdHRvbTogcGl4ZWxhdGUoMXB4KSBkb3R0ZWRcbiAgICAgIHJnYmEobWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdub3JtYWwnKSwgMC4zMyk7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2hvdmVyJyk7XG4gICAgfVxuXG4gICAgJjphY3RpdmUge1xuICAgICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnYWN0aXZlJyk7XG4gICAgfVxuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFdhdmVcbiVwaC13YXZlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiA1MCU7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4td2lkdGg6IG1hdGguZGl2KG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtYXgnKSwgMik7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcblxuICA+IHN2ZyB7XG4gICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgSGVhZCB3YXZlXG4lcGgtaGVhZC13YXZlIHtcbiAgJHdhdmUtaGVpZ2h0OiBiYXNlKG1hcC1nZXQoJHJvbGVzLWRpbWVuc2lvbnMtd2F2ZXMsICdoZWFkZXInKSk7XG5cbiAgLndhdmUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICB0b3A6IGNhbGMoMTAwJSAtIDFQeCk7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiBlbSgkd2F2ZS1oZWlnaHQpO1xuXG4gICAgLmlubmVyIHtcbiAgICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKDEwMCUpO1xuXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgICBzdmcge1xuICAgICAgICBAaW5jbHVkZSBkaW1lbnNpb25zLXNxdWFyZSgxMDAlKTtcblxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgbWluLXdpZHRoOiBtYXRoLmRpdihtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWF4JyksIDIpO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQGtleWZyYW1lcyBzbGlkZSB7XG4gICAgZnJvbSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICB9XG5cbiAgICB0byB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAwKTtcbiAgICB9XG4gIH1cblxuICAuc2Nyb2xsLWJ0biB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvdHRvbTogMjBweDtcbiAgICBsZWZ0OiA1MCU7XG4gICAgei1pbmRleDogMTtcbiAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0LWRlZXAoJHN3YXRjaGVzLWNvbG9ycywgJ2Nvcm5mbG93ZXInLCAnYmFzZScpO1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgIGFuaW1hdGlvbjogc2xpZGUgMXMgZWFzZS1pbi1vdXQgaW5maW5pdGUgYWx0ZXJuYXRlO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2hvdmVyJyk7XG4gICAgfVxuXG4gICAgJjphY3RpdmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdhY3RpdmUnKTtcbiAgICB9XG5cbiAgICBzdmcge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgICB9XG5cbiAgICBib2R5Om5vdCguc2Nyb2xsYWJsZSkgJiB7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuICB9XG59XG5cbi8vLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUGFnZVxuLy9AcGFnZSB7XG4vLyAgJGd1dHRlcjogbWFwLWdldCgkcm9sZXMtc3BhY2VzLXByaW50LCAnYXBwJyk7XG4vL1xuLy8gIHNpemU6IEE0O1xuLy8gIG1hcmdpbjogJGd1dHRlciAkZ3V0dGVyICRndXR0ZXIvMjtcbi8vfVxuLy9cbi8vLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRG9jdW1lbnRcbi8vQG1lZGlhIHByaW50IHtcbi8vICBodG1sLFxuLy8gIGJvZHkge1xuLy8gICAgd2lkdGg6ICRyb2xlcy1zaXplLXByaW50LXBhZ2Utd2lkdGg7XG4vLyAgICBoZWlnaHQ6ICRyb2xlcy1zaXplLXByaW50LXBhZ2UtaGVpZ2h0O1xuLy8gIH1cbi8vXG4vLyAgYm9keSB7XG4vLyAgICAtd2Via2l0LXByaW50LWNvbG9yLWFkanVzdDogZXhhY3QgIWltcG9ydGFudDtcbi8vICAgIGZvbnQtc2l6ZTogMS4zcmVtO1xuLy8gIH1cbi8vXG4vLyAgW2lkPSdyb290J10ge1xuLy8gICAgd2lkdGg6IGluaXRpYWw7XG4vLyAgICBtaW4taGVpZ2h0OiBpbml0aWFsO1xuLy8gICAgYmFja2dyb3VuZDogaW5pdGlhbDtcbi8vICAgIGJvcmRlcjogaW5pdGlhbDtcbi8vICAgIGJvcmRlci1yYWRpdXM6IGluaXRpYWw7XG4vLyAgICBib3gtc2hhZG93OiBpbml0aWFsO1xuLy8gICAgcGFnZS1icmVhay1hZnRlcjogYWx3YXlzO1xuLy8gIH1cbi8vXG4vLyAgYSB7XG4vLyAgICBjb2xvcjogbWFwLWdldCgkcm9sZXMtY29sLXRleHRzLCAnYmFzZScpICFpbXBvcnRhbnQ7XG4vLyAgfVxuLy99XG4iLCIvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBMYXlvdXQgPiBIRUFERVJcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuQHVzZSAnc2FzczptYXRoJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBDT0xPUlNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTGlnaHRcbkBmdW5jdGlvbiBsaWdodCgkY29sb3IsICRwZXJjZW50KSB7XG4gIEByZXR1cm4gbWl4KCNmZmYsICRjb2xvciwgJHBlcmNlbnQpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBEYXJrXG5AZnVuY3Rpb24gZGFyaygkY29sb3IsICRwZXJjZW50KSB7XG4gIEByZXR1cm4gbWl4KCMwMDAsICRjb2xvciwgJHBlcmNlbnQpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IE1BUFNcblxuJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5nczogZmFsc2UgIWRlZmF1bHQ7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgRGVlcCBXYXJuaW5nXG4vLyBEaXNwbGF5cyBhIHdhcm5pbmcgaWYgdGhlIHJldHJpZXZlZCB2YWx1ZSBpcyBgbnVsbGBcbkBmdW5jdGlvbiBtYXAtZ2V0LWRlZXAtd2FybmluZygkd2FybiwgJGdldCwgJGtleSkge1xuICBAaWYgbm90ICRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3Mge1xuICAgIEBpZiAkZ2V0ID09IG51bGwge1xuICAgICAgQHdhcm4gJ01hcCBoYXMgbm8gdmFsdWUgZm9yIGtleSBzZWFyY2ggYCN7JHdhcm59YCc7XG4gICAgfSBAZWxzZSBpZiB0eXBlLW9mKCRnZXQpICE9ICdtYXAnIHtcbiAgICAgIEB3YXJuICdOb24tbWFwIHZhbHVlIGZvdW5kIGZvciBrZXkgc2VhcmNoIGAjeyR3YXJufWAsIGNhbm5vdCBzZWFyY2ggZm9yIGtleSBgI3ska2V5fWAnO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gbnVsbDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIEdldCBEZWVwXG4vLyBHaXZlbiBhIG1hcCBhbmQgYSBsaXN0IG9mIGtleXMsIGZpbmQgdGhlIHZhbHVlIGF0IHRoZSBnaXZlbiBrZXlcbkBmdW5jdGlvbiBtYXAtZ2V0LWRlZXAoJG1hcCwgJGtleXMuLi4pIHtcbiAgQGlmIGxlbmd0aCgka2V5cykgPT0gMSB7XG4gICAgJGtleXM6IG50aCgka2V5cywgMSk7XG4gIH1cblxuICAkd2FybjogJyN7bnRoKCRrZXlzLCAxKX0nO1xuICAkbGVuZ3RoOiBsZW5ndGgoJGtleXMpO1xuICAkZ2V0OiBtYXAtZ2V0KCRtYXAsIG50aCgka2V5cywgMSkpO1xuXG4gIEBpZiAkbGVuZ3RoID4gMSB7XG4gICAgQGZvciAkaSBmcm9tIDIgdGhyb3VnaCAkbGVuZ3RoIHtcbiAgICAgIEBpZiAkZ2V0ICE9IG51bGwgYW5kIHR5cGUtb2YoJGdldCkgPT0gJ21hcCcge1xuICAgICAgICAkd2FybjogJHdhcm4gKyAnLT4je250aCgka2V5cywgJGkpfSc7XG4gICAgICAgICRnZXQ6IG1hcC1nZXQoJGdldCwgbnRoKCRrZXlzLCAkaSkpO1xuXG4gICAgICAgIEBpZiAkZ2V0ID09IG51bGwge1xuICAgICAgICAgIEByZXR1cm4gbWFwLWdldC1kZWVwLXdhcm5pbmcoJHdhcm4sICRnZXQsIG50aCgka2V5cywgJGkpKTtcbiAgICAgICAgfVxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIEByZXR1cm4gbWFwLWdldC1kZWVwLXdhcm5pbmcoJHdhcm4sICRnZXQsIG50aCgka2V5cywgJGkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRnZXQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgS2V5c1xuQGZ1bmN0aW9uIGdldC1rZXlzKCRrZXlzLCAkY291bnRlcikge1xuICAkcmV0dXJuOiAoKTtcblxuICBAZm9yICRpIGZyb20gMSB0byAkY291bnRlciB7XG4gICAgJHJldHVybjogYXBwZW5kKCRyZXR1cm4sIG50aCgka2V5cywgJGkpKTtcbiAgfVxuXG4gIEByZXR1cm4gJHJldHVybjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIEdldCBQcmV2aW91cyBLZXlcbkBmdW5jdGlvbiBtYXAtZ2V0LXByZXYta2V5KCRtYXAsICRrZXkpIHtcbiAgJGluZGV4OiBpbmRleCgkbWFwLCAka2V5KTtcbiAgJHByZXY6ICRpbmRleCAtIDE7XG4gICRyZXN1bHQ6IGlmKCRwcmV2ID4gMCwgbnRoKCRtYXAsICRwcmV2KSwgbnVsbCk7XG5cbiAgQHJldHVybiAkcmVzdWx0O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgU2V0XG5AZnVuY3Rpb24gbWFwLXNldCgkbWFwLCAka2V5LCAkdmFsdWUpIHtcbiAgQHJldHVybiBtYXAtbWVyZ2UoXG4gICAgJG1hcCxcbiAgICAoXG4gICAgICAka2V5OiAkdmFsdWVcbiAgICApXG4gICk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBTZXQgRGVlcFxuQGZ1bmN0aW9uIG1hcC1zZXQtZGVlcCgkbWFwLCAka2V5cywgJHZhbHVlKSB7XG4gICRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3M6IHRydWUgIWdsb2JhbDtcbiAgJGxlbmd0aDogbGVuZ3RoKCRrZXlzKTtcbiAgJGdldC1rZXlzOiAoKTtcbiAgJG1hcC1sZXZlbDogKCk7XG5cbiAgQGlmICRsZW5ndGggPiAxIHtcbiAgICAkZ2V0LWtleXM6IGdldC1rZXlzKCRrZXlzLCAkbGVuZ3RoKTtcbiAgICAkbWFwLWxldmVsOiBtYXAtZ2V0LWRlZXAoJG1hcCwgJGdldC1rZXlzKTtcbiAgfVxuXG4gICRtZXJnZTogKFxuICAgIG50aCgka2V5cywgJGxlbmd0aCk6ICR2YWx1ZVxuICApO1xuXG4gIEBpZiAkbWFwLWxldmVsIHtcbiAgICAkbWVyZ2U6IG1hcC1tZXJnZSgkbWFwLWxldmVsLCAkbWVyZ2UpO1xuICB9XG5cbiAgQGZvciAkaSBmcm9tICgkbGVuZ3RoICogLTEgKyAxKSB0aHJvdWdoIC0xIHtcbiAgICAkajogYWJzKCRpKTtcbiAgICAka2V5OiBudGgoJGtleXMsICRqKTtcblxuICAgIC8vIEBkZWJ1ZyAkZ2V0LWtleXM7XG5cbiAgICBAaWYgJGogPiAxIHtcbiAgICAgICRnZXQta2V5czogZ2V0LWtleXMoJGtleXMsICRqKTtcbiAgICAgICRtYXAtbGV2ZWw6IG1hcC1nZXQtZGVlcCgkbWFwLCAkZ2V0LWtleXMpO1xuXG4gICAgICBAaWYgJG1hcC1sZXZlbCB7XG4gICAgICAgICRtZXJnZTogbWFwLW1lcmdlKFxuICAgICAgICAgICRtYXAtbGV2ZWwsXG4gICAgICAgICAgKFxuICAgICAgICAgICAgJGtleTogJG1lcmdlXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSBAZWxzZSB7XG4gICAgICAgICRtZXJnZTogKFxuICAgICAgICAgICRrZXk6ICRtZXJnZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gQGVsc2Uge1xuICAgICAgJG1lcmdlOiAoXG4gICAgICAgICRrZXk6ICRtZXJnZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAkbWFwOiBtYXAtbWVyZ2UoJG1hcCwgJG1lcmdlKTtcblxuICAkcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzOiBmYWxzZSAhZ2xvYmFsO1xuXG4gIEByZXR1cm4gJG1hcDtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBVTklUU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBQcm9ncmVzc2l2ZSBjYWxjXG5AZnVuY3Rpb24gZ2V0LXByb2dyZXNzaXZlLWNhbGMoXG4gICRtaW4tb2JqLXNpemUsXG4gICRtYXgtb2JqLXNpemUsXG4gICRtaW4tdnAsXG4gICRtYXgtdnAsXG4gICR2cC11bml0OiB2d1xuKSB7XG4gIEByZXR1cm4gY2FsYyhcbiAgICAjeyRtaW4tb2JqLXNpemV9ICsgI3tzdHJpcC11bml0KCRtYXgtb2JqLXNpemUgLSAkbWluLW9iai1zaXplKX0gKlxuICAgICAgKCgxMDAjeyR2cC11bml0fSAtICN7JG1pbi12cH0pIC8gI3tzdHJpcC11bml0KCRtYXgtdnAgLSAkbWluLXZwKX0pXG4gICk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogVU5JVFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU3RyaXAgdW5pdFxuQGZ1bmN0aW9uIHN0cmlwLXVuaXQoJG51bWJlcikge1xuICBAaWYgdHlwZS1vZigkbnVtYmVyKSA9PSAnbnVtYmVyJyBhbmQgbm90IHVuaXRsZXNzKCRudW1iZXIpIHtcbiAgICBAcmV0dXJuICRudW1iZXIgLyAoJG51bWJlciAqIDAgKyAxKTtcbiAgfVxuXG4gIEByZXR1cm4gJG51bWJlcjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IGVtL3JlbSB1bml0XG5AZnVuY3Rpb24gZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIGVtKTtcbn1cblxuQGZ1bmN0aW9uIHJlbSgkbnVtLCAkZm9udC1zaXplOiBmYWxzZSkge1xuICBAcmV0dXJuIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgcmVtKTtcbn1cblxuQGZ1bmN0aW9uIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgJHVuaXQpIHtcbiAgJGZzOiAxMHB4O1xuXG4gIEBpZiAkZm9udC1zaXplIHtcbiAgICAkZnM6ICRmb250LXNpemU7XG4gIH1cbiAgQGVsc2UgaWYgJGJhc2UtaHRtbC1mb250LXNpemUgeyAvLyBtYWtlIHN1cmUgdG8gZGVmaW5lIHRoaXMgdmFyaWFibGUgb24geW91ciBvd25cbiAgICAkZnM6ICRiYXNlLWh0bWwtZm9udC1zaXplO1xuICB9XG5cbiAgQHJldHVybiAje3N0cmlwLXVuaXQoJG51bSkgLyBzdHJpcC11bml0KCRmcyl9I3skdW5pdH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBzY3JlZW4gcGVyY2VudFxuQGZ1bmN0aW9uIGdldC1zY3JlZW4tcGVyY2VudCgkd2lkdGgsICRzY3JlZW4pIHtcbiAgQHJldHVybiB1bnF1b3RlKCcjeyR3aWR0aCAqIDEwMCAvICRzY3JlZW59JScpO1xufVxuXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IFotSU5ERVhFU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZW5lcmF0b3JcbkBmdW5jdGlvbiB6LWluZGV4KCRtYXAsICRrZXlzKSB7XG4gICRmb3VuZC1pbmRleDogbnVsbDtcblxuICBAZWFjaCAka2V5IGluICRrZXlzIHtcbiAgICBAaWYgKHR5cGUtb2YoJG1hcCkgPT0gJ21hcCcpIHtcbiAgICAgICRmb3VuZC1pbmRleDogaW5kZXgobWFwLWtleXMoJG1hcCksICRrZXkpO1xuICAgICAgJG1hcDogbWFwLWdldCgkbWFwLCAka2V5KTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRmb3VuZC1pbmRleDogaW5kZXgoJG1hcCwgJGtleSk7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkZm91bmQtaW5kZXg7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFNlcnZlclxuQGZ1bmN0aW9uIHooJG1hcCwgJGtleXMuLi4pIHtcbiAgQHJldHVybiB6LWluZGV4KCRtYXAsICRrZXlzKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBGT1JNU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBJbnB1dCBwbGFjZWhvbGRlclxuQG1peGluIGlucHV0LXBsYWNlaG9sZGVyKCRjb2wsICRzdHlsZTogaXRhbGljKSB7XG4gICY6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2w7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICB9XG4gICY6Oi1tb3otcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxuICAmOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2w7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICB9XG4gICY6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxufVxuXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IFBPU0lUSU9OU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBBYnNvbHV0ZSBjZW50ZXJlZFxuQG1peGluIGFic29sdXRlLWNlbnRlcmVkKCR0eXBlOiBhYnNvbHV0ZSwgJHBvczogNTAlKSB7XG4gIHBvc2l0aW9uOiAkdHlwZTtcbiAgdG9wOiAkcG9zO1xuICBsZWZ0OiAkcG9zO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQWJzb2x1dGUgY2VudGVyZWQgWFxuQG1peGluIGFic29sdXRlLWNlbnRlcmVkLXgoJHR5cGU6IGFic29sdXRlLCAkcG9zOiA1MCUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICBsZWZ0OiAkcG9zO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEFic29sdXRlIGNlbnRlcmVkIFlcbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXJlZC15KCR0eXBlOiBhYnNvbHV0ZSwgJHBvczogNTAlKSB7XG4gIHBvc2l0aW9uOiAkdHlwZTtcbiAgdG9wOiAkcG9zO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogU0hPUlRIQU5EU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBQb3NpdGlvbnNcbkBtaXhpbiBwb3NpdGlvbi1zdHJldGNoZWQoJHR5cGU6IGFic29sdXRlKSB7XG4gIHBvc2l0aW9uOiAkdHlwZTtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBEaW1lbnNpb25zXG5AbWl4aW4gZGltZW5zaW9ucy1zcXVhcmUoJHZhbHVlKSB7XG4gIHdpZHRoOiAkdmFsdWU7XG4gIGhlaWdodDogJHZhbHVlO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBQYWRkaW5nXG5AbWl4aW4gcGFkZGluZy12KCR2YWx1ZSkge1xuICBwYWRkaW5nLXRvcDogJHZhbHVlO1xuICBwYWRkaW5nLWJvdHRvbTogJHZhbHVlO1xufVxuXG5AbWl4aW4gcGFkZGluZy1oKCR2YWx1ZSkge1xuICBwYWRkaW5nLXJpZ2h0OiAkdmFsdWU7XG4gIHBhZGRpbmctbGVmdDogJHZhbHVlO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXJnaW5cbkBtaXhpbiBtYXJnaW4tdigkdmFsdWUpIHtcbiAgbWFyZ2luLXRvcDogJHZhbHVlO1xuICBtYXJnaW4tYm90dG9tOiAkdmFsdWU7XG59XG5cbkBtaXhpbiBtYXJnaW4taCgkdmFsdWUpIHtcbiAgbWFyZ2luLXJpZ2h0OiAkdmFsdWU7XG4gIG1hcmdpbi1sZWZ0OiAkdmFsdWU7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEJvcmRlclxuQG1peGluIGJvcmRlci12KCR2YWx1ZSkge1xuICBib3JkZXItdG9wOiAkdmFsdWU7XG4gIGJvcmRlci1ib3R0b206ICR2YWx1ZTtcbn1cblxuQG1peGluIGJvcmRlci1oKCR2YWx1ZSkge1xuICBib3JkZXItcmlnaHQ6ICR2YWx1ZTtcbiAgYm9yZGVyLWxlZnQ6ICR2YWx1ZTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBUWVBPR1JBUEhZXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEZvbnQgc21vb3RoaW5nXG5AbWl4aW4gZm9udC1zbW9vdGhpbmcoJHZhbHVlOiBhbnRpYWxpYXNlZCkge1xuICBAaWYgJHZhbHVlID09IGFudGlhbGlhc2VkIHtcbiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICB9IEBlbHNlIHtcbiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBzdWJwaXhlbC1hbnRpYWxpYXNlZDtcbiAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogYXV0bztcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBUZXh0IHVwcGVyY2FzZVxuQG1peGluIHRleHQtdXBwZXJjYXNlKCkge1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAtbW96LWZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2Nhc2UnO1xuICAtd2Via2l0LWZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2Nhc2UnO1xuICBmb250LWZlYXR1cmUtc2V0dGluZ3M6ICdjYXNlJyBvbjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU2VsZWN0aW9uXG5AbWl4aW4gc2VsZWN0aW9uKCRjb2wpIHtcbiAgJGJncjogaWYoJGNvbCAhPSB0cmFuc3BhcmVudCwgcmdiYSgkY29sLCAwLjUpLCByZ2JhKDAsIDAsIDAsIDApKTtcblxuICAmOjotbW96LXNlbGVjdGlvbiB7XG4gICAgYmFja2dyb3VuZDogJGJncjtcbiAgfVxuXG4gICY6OnNlbGVjdGlvbiB7XG4gICAgYmFja2dyb3VuZDogJGJncjtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBCQVNFXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEltcG9ydHNcbkBpbXBvcnQgJy4uLy4uL2RlZnMvYnJhbmQuanMnO1xuQGltcG9ydCAnLi4vLi4vZGVmcy93ZWJzaXRlLmpzJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRm9udCBzaXplXG5AZnVuY3Rpb24gcm9sZSgkbWFwLCAkdmFsdWUpIHtcbiAgJHItbWFwOiBtYXAtZ2V0KCR2YWx1ZSwgJ21hcCcpO1xuICAkci12YWx1ZTogbWFwLWdldCgkdmFsdWUsICd2YWx1ZScpO1xuICBAcmV0dXJuIG1hcC1nZXQoJHItbWFwLCAkci12YWx1ZSk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9ucyA+IENBTENcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgdmFsdWUgYmFzZWQgb24gdGhlIGJhc2UgZm9udCBzaXplXG5AZnVuY3Rpb24gYmFzZSgkdmFsdWUpIHtcbiAgQHJldHVybiBtYXRoLmRpdigkdmFsdWUsIG1hcC1nZXQoJHJvbGVzLXJhdGlvcywgJ2xheW91dC1ncm93dGgnKSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFByb2dyZXNzaXZlIGNhbGNcbkBmdW5jdGlvbiBnZXQtcHJvZ3Jlc3NpdmUtY2FsYyhcbiAgJG1pbi1vYmotc2l6ZSxcbiAgJG1heC1vYmotc2l6ZSxcbiAgJG1pbi12cCxcbiAgJG1heC12cCxcbiAgJHZwLXVuaXQ6IHZ3XG4pIHtcbiAgQHJldHVybiBjYWxjKFxuICAgICN7cGl4ZWxhdGUoJG1pbi1vYmotc2l6ZSl9ICsgI3tzdHJpcC11bml0KCRtYXgtb2JqLXNpemUgLSAkbWluLW9iai1zaXplKX0gKlxuICAgICAgKFxuICAgICAgICAoMTAwI3skdnAtdW5pdH0gLSAje3BpeGVsYXRlKCRtaW4tdnApfSkgLyAje3N0cmlwLXVuaXQoXG4gICAgICAgICAgICAkbWF4LXZwIC0gJG1pbi12cFxuICAgICAgICAgICl9XG4gICAgICApXG4gICk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9ucyA+IFVOSVRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU3RyaXAgdW5pdFxuQGZ1bmN0aW9uIHN0cmlwLXVuaXQoJG51bWJlcikge1xuICBAaWYgdHlwZS1vZigkbnVtYmVyKSA9PSAnbnVtYmVyJyBhbmQgbm90IHVuaXRsZXNzKCRudW1iZXIpIHtcbiAgICBAcmV0dXJuIG1hdGguZGl2KCRudW1iZXIsICgkbnVtYmVyICogMCArIDEpKTtcbiAgfVxuXG4gIEByZXR1cm4gJG51bWJlcjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IFB4IHVuaXRcbkBmdW5jdGlvbiBwaXhlbGF0ZSgkdmFsdWUpIHtcbiAgQHJldHVybiAje3N0cmlwLXVuaXQoJHZhbHVlKX1QeDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IGVtL3JlbSB1bml0XG5AZnVuY3Rpb24gZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIGVtKTtcbn1cblxuQGZ1bmN0aW9uIHJlbSgkbnVtLCAkZm9udC1zaXplOiBmYWxzZSkge1xuICBAcmV0dXJuIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgcmVtKTtcbn1cblxuQGZ1bmN0aW9uIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgJHVuaXQpIHtcbiAgJGZzOiAxMHB4O1xuXG4gIEBpZiAkZm9udC1zaXplIHtcbiAgICAkZnM6ICRmb250LXNpemU7XG4gIH0gQGVsc2Uge1xuICAgICRmczogbWFwLWdldCgkdHlwb2dyYXBoeSwgJ2Jhc2VfZm9udF9zaXplJyk7XG4gIH1cblxuICBAcmV0dXJuICN7bWF0aC5kaXYoc3RyaXAtdW5pdCgkbnVtKSwgc3RyaXAtdW5pdCgkZnMpKX0jeyR1bml0fTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRGF0YSA+IFNXQVRDSEVTXG5cbkBpbXBvcnQgJy4uLy4uL2RlZnMvc3dhdGNoZXMvaW5kZXguanMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvc3dhdGNoZXMvc3dhdGNoZXNfYnJlYWtwb2ludHMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvc3dhdGNoZXMvc3dhdGNoZXNfcmF0aW9zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX3NjcmVlbnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvc3dhdGNoZXMvc3dhdGNoZXNfc3BhY2VzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRGF0YSA+IFJPTEVTXG5cbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2JvcmRlcnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfYnJlYWtwb2ludHMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfY29sb3JzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2RpbWVuc2lvbnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfcmF0aW9zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3NjcmVlbnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfc2hhZG93cyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19zcGFjZXMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfdHlwb2dyYXBoeSc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGlucyA+IFNDQUxBQklMSVRZXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU2NhbGVyXG5AbWl4aW4gc2NhbGVyKFxuICAkcHJvcGVydHksXG4gICRtaW4tc2l6ZSxcbiAgJG1heC1zaXplLFxuICAkbWluLXZ3OiBtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWluJyksXG4gICRtYXgtdnc6IG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtYXgnKVxuKSB7XG4gICN7JHByb3BlcnR5fTogI3tzdHJpcC11bml0KG1hdGguZGl2KCgkbWluLXZ3ICogMC45Nzk2KSAqICRtaW4tc2l6ZSwgMTAwMCkpfXZ3OyAvLyAwLjk3OTYgZml4ZXMgd3JvbmcgY2FsY3VsYXRpb25zIGluIENocm9tZVxuXG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6ICRtaW4tdncpIHtcbiAgICAjeyRwcm9wZXJ0eX06IGdldC1wcm9ncmVzc2l2ZS1jYWxjKCRtaW4tc2l6ZSwgJG1heC1zaXplLCAkbWluLXZ3LCAkbWF4LXZ3KTtcbiAgfVxuXG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6ICRtYXgtdncpIHtcbiAgICAjeyRwcm9wZXJ0eX06IHBpeGVsYXRlKCRtYXgtc2l6ZSk7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gUGxhY2Vob2xkZXJzID4gU0NBTEFCSUxJVFlcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBOZWdhdGl2ZVxuJXBoLW5lZ2F0aXZlIHtcbiAgaDEsXG4gIGgyLFxuICBoMyxcbiAgaDQsXG4gIGg1LFxuICBoNixcbiAgcCB7XG4gICAgY29sb3I6IG1hcC1nZXQoJHJvbGVzLWNvbC10ZXh0cywgJ25lZ2F0aXZlJyk7XG4gIH1cblxuICAubWV0YSB7XG4gICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkc3dhdGNoZXMtY29sb3JzLCAnaG9uZXkteWVsbG93JywgJ2xpZ2h0Jyk7XG4gIH1cblxuICAudGV4dC1saW5rIHtcbiAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdub3JtYWwnKTtcbiAgICBib3JkZXItYm90dG9tOiBwaXhlbGF0ZSgxcHgpIGRvdHRlZFxuICAgICAgcmdiYShtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ25vcm1hbCcpLCAwLjMzKTtcblxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnaG92ZXInKTtcbiAgICB9XG5cbiAgICAmOmFjdGl2ZSB7XG4gICAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdhY3RpdmUnKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgV2F2ZVxuJXBoLXdhdmUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDUwJTtcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi13aWR0aDogbWF0aC5kaXYobWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21heCcpLCAyKTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuXG4gID4gc3ZnIHtcbiAgICBAaW5jbHVkZSBkaW1lbnNpb25zLXNxdWFyZSgxMDAlKTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBIZWFkIHdhdmVcbiVwaC1oZWFkLXdhdmUge1xuICAkd2F2ZS1oZWlnaHQ6IGJhc2UobWFwLWdldCgkcm9sZXMtZGltZW5zaW9ucy13YXZlcywgJ2hlYWRlcicpKTtcblxuICAud2F2ZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgIHRvcDogY2FsYygxMDAlIC0gMVB4KTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IGVtKCR3YXZlLWhlaWdodCk7XG5cbiAgICAuaW5uZXIge1xuICAgICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG5cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAgIHN2ZyB7XG4gICAgICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKDEwMCUpO1xuXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICBtaW4td2lkdGg6IG1hdGguZGl2KG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtYXgnKSwgMik7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAa2V5ZnJhbWVzIHNsaWRlIHtcbiAgICBmcm9tIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgIH1cblxuICAgIHRvIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIDApO1xuICAgIH1cbiAgfVxuXG4gIC5zY3JvbGwtYnRuIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm90dG9tOiAyMHB4O1xuICAgIGxlZnQ6IDUwJTtcbiAgICB6LWluZGV4OiAxO1xuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQtZGVlcCgkc3dhdGNoZXMtY29sb3JzLCAnY29ybmZsb3dlcicsICdiYXNlJyk7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgYW5pbWF0aW9uOiBzbGlkZSAxcyBlYXNlLWluLW91dCBpbmZpbml0ZSBhbHRlcm5hdGU7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnaG92ZXInKTtcbiAgICB9XG5cbiAgICAmOmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2FjdGl2ZScpO1xuICAgIH1cblxuICAgIHN2ZyB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuICAgIH1cblxuICAgIGJvZHk6bm90KC5zY3JvbGxhYmxlKSAmIHtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgVmFyaWFibGVzXG4kbWVudS1oZWlnaHQ6IGJhc2UobWFwLWdldCgkcm9sZXMtZGltZW5zaW9ucy1oZWFkZXIsICdtZW51JykpO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBSb290XG4uaGVhZGVyIHtcbiAgQGV4dGVuZCAlcGgtbmVnYXRpdmU7XG4gIEBleHRlbmQgJXBoLWhlYWQtd2F2ZTtcblxuICBwb3NpdGlvbjogc3RpY2t5O1xuICB6LWluZGV4OiAxMDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cbiAgLndhdmUge1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuXG4gICAgc3ZnIHtcbiAgICAgIGZpbGw6IG1hcC1nZXQoJHJvbGVzLWNvbC1iYWNrZ3JvdW5kcywgJ2hlYWRlcicpO1xuXG4gICAgICAqIHtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gICAgICB9XG4gICAgfVxuXG4gICAgLnNjcm9sbC1idG4ge1xuICAgICAgLm1vYmlsZSAmIHtcbiAgICAgICAgYm90dG9tOiA3MHB4O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5sb2dvIHtcbiAgICBAaW5jbHVkZSBkaW1lbnNpb25zLXNxdWFyZShlbSg2NXB4KSk7XG4gICAgQGluY2x1ZGUgbWFyZ2luLWgoZW0obWFwLWdldCgkcm9sZXMtc3BhY2VzLCAnbG9nbycpKSk7XG5cbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4xcyBlYXNlLWluLW91dDtcblxuICAgIEBtZWRpYSAoaG92ZXI6IGhvdmVyKSB7XG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjMpIHJvdGF0ZSgtMTBkZWcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN2ZyB7XG4gICAgICB3aWR0aDogMTAwJTtcblxuICAgICAgOmdsb2JhbCguYzEpIHtcbiAgICAgICAgZmlsbDogdHJhbnNwYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1lbnVcbi5tZW51IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDUwJTtcbiAgei1pbmRleDogMTA7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiBtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWluJykgLSAobWFwLWdldCgkcm9sZXMtc3BhY2VzLCAnbGF5b3V0JykpO1xuICBoZWlnaHQ6IGVtKCRtZW51LWhlaWdodCk7XG4gIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQoJHJvbGVzLWNvbC1iYWNrZ3JvdW5kcywgJ2hlYWRlcicpO1xuICBib3JkZXItcmFkaXVzOiAwIDAgZW0oMjVweCkgZW0oMjVweCk7XG4gIHRyYW5zaXRpb246IGZvbnQtc2l6ZSAwLjFzIGVhc2UtaW4tb3V0O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG5cbiAgc3BhbiB7XG4gICAgZmxleDogMTtcblxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgfVxuICB9XG5cbiAgYm9keTpub3QoOmdsb2JhbCguaG9tZSkpICYsXG4gIC5zY3JvbGxlZCAmIHtcbiAgICBmb250LXNpemU6IDAuN3JlbTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxufVxuIiwiLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTGF5b3V0ID4gTUFJTlxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5AdXNlICdzYXNzOm1hdGgnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IENPTE9SU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBMaWdodFxuQGZ1bmN0aW9uIGxpZ2h0KCRjb2xvciwgJHBlcmNlbnQpIHtcbiAgQHJldHVybiBtaXgoI2ZmZiwgJGNvbG9yLCAkcGVyY2VudCk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IERhcmtcbkBmdW5jdGlvbiBkYXJrKCRjb2xvciwgJHBlcmNlbnQpIHtcbiAgQHJldHVybiBtaXgoIzAwMCwgJGNvbG9yLCAkcGVyY2VudCk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogTUFQU1xuXG4kcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzOiBmYWxzZSAhZGVmYXVsdDtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIEdldCBEZWVwIFdhcm5pbmdcbi8vIERpc3BsYXlzIGEgd2FybmluZyBpZiB0aGUgcmV0cmlldmVkIHZhbHVlIGlzIGBudWxsYFxuQGZ1bmN0aW9uIG1hcC1nZXQtZGVlcC13YXJuaW5nKCR3YXJuLCAkZ2V0LCAka2V5KSB7XG4gIEBpZiBub3QgJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5ncyB7XG4gICAgQGlmICRnZXQgPT0gbnVsbCB7XG4gICAgICBAd2FybiAnTWFwIGhhcyBubyB2YWx1ZSBmb3Iga2V5IHNlYXJjaCBgI3skd2Fybn1gJztcbiAgICB9IEBlbHNlIGlmIHR5cGUtb2YoJGdldCkgIT0gJ21hcCcge1xuICAgICAgQHdhcm4gJ05vbi1tYXAgdmFsdWUgZm91bmQgZm9yIGtleSBzZWFyY2ggYCN7JHdhcm59YCwgY2Fubm90IHNlYXJjaCBmb3Iga2V5IGAjeyRrZXl9YCc7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiBudWxsO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IERlZXBcbi8vIEdpdmVuIGEgbWFwIGFuZCBhIGxpc3Qgb2Yga2V5cywgZmluZCB0aGUgdmFsdWUgYXQgdGhlIGdpdmVuIGtleVxuQGZ1bmN0aW9uIG1hcC1nZXQtZGVlcCgkbWFwLCAka2V5cy4uLikge1xuICBAaWYgbGVuZ3RoKCRrZXlzKSA9PSAxIHtcbiAgICAka2V5czogbnRoKCRrZXlzLCAxKTtcbiAgfVxuXG4gICR3YXJuOiAnI3tudGgoJGtleXMsIDEpfSc7XG4gICRsZW5ndGg6IGxlbmd0aCgka2V5cyk7XG4gICRnZXQ6IG1hcC1nZXQoJG1hcCwgbnRoKCRrZXlzLCAxKSk7XG5cbiAgQGlmICRsZW5ndGggPiAxIHtcbiAgICBAZm9yICRpIGZyb20gMiB0aHJvdWdoICRsZW5ndGgge1xuICAgICAgQGlmICRnZXQgIT0gbnVsbCBhbmQgdHlwZS1vZigkZ2V0KSA9PSAnbWFwJyB7XG4gICAgICAgICR3YXJuOiAkd2FybiArICctPiN7bnRoKCRrZXlzLCAkaSl9JztcbiAgICAgICAgJGdldDogbWFwLWdldCgkZ2V0LCBudGgoJGtleXMsICRpKSk7XG5cbiAgICAgICAgQGlmICRnZXQgPT0gbnVsbCB7XG4gICAgICAgICAgQHJldHVybiBtYXAtZ2V0LWRlZXAtd2FybmluZygkd2FybiwgJGdldCwgbnRoKCRrZXlzLCAkaSkpO1xuICAgICAgICB9XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgQHJldHVybiBtYXAtZ2V0LWRlZXAtd2FybmluZygkd2FybiwgJGdldCwgbnRoKCRrZXlzLCAkaSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGdldDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIEdldCBLZXlzXG5AZnVuY3Rpb24gZ2V0LWtleXMoJGtleXMsICRjb3VudGVyKSB7XG4gICRyZXR1cm46ICgpO1xuXG4gIEBmb3IgJGkgZnJvbSAxIHRvICRjb3VudGVyIHtcbiAgICAkcmV0dXJuOiBhcHBlbmQoJHJldHVybiwgbnRoKCRrZXlzLCAkaSkpO1xuICB9XG5cbiAgQHJldHVybiAkcmV0dXJuO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IFByZXZpb3VzIEtleVxuQGZ1bmN0aW9uIG1hcC1nZXQtcHJldi1rZXkoJG1hcCwgJGtleSkge1xuICAkaW5kZXg6IGluZGV4KCRtYXAsICRrZXkpO1xuICAkcHJldjogJGluZGV4IC0gMTtcbiAgJHJlc3VsdDogaWYoJHByZXYgPiAwLCBudGgoJG1hcCwgJHByZXYpLCBudWxsKTtcblxuICBAcmV0dXJuICRyZXN1bHQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBTZXRcbkBmdW5jdGlvbiBtYXAtc2V0KCRtYXAsICRrZXksICR2YWx1ZSkge1xuICBAcmV0dXJuIG1hcC1tZXJnZShcbiAgICAkbWFwLFxuICAgIChcbiAgICAgICRrZXk6ICR2YWx1ZVxuICAgIClcbiAgKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIFNldCBEZWVwXG5AZnVuY3Rpb24gbWFwLXNldC1kZWVwKCRtYXAsICRrZXlzLCAkdmFsdWUpIHtcbiAgJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5nczogdHJ1ZSAhZ2xvYmFsO1xuICAkbGVuZ3RoOiBsZW5ndGgoJGtleXMpO1xuICAkZ2V0LWtleXM6ICgpO1xuICAkbWFwLWxldmVsOiAoKTtcblxuICBAaWYgJGxlbmd0aCA+IDEge1xuICAgICRnZXQta2V5czogZ2V0LWtleXMoJGtleXMsICRsZW5ndGgpO1xuICAgICRtYXAtbGV2ZWw6IG1hcC1nZXQtZGVlcCgkbWFwLCAkZ2V0LWtleXMpO1xuICB9XG5cbiAgJG1lcmdlOiAoXG4gICAgbnRoKCRrZXlzLCAkbGVuZ3RoKTogJHZhbHVlXG4gICk7XG5cbiAgQGlmICRtYXAtbGV2ZWwge1xuICAgICRtZXJnZTogbWFwLW1lcmdlKCRtYXAtbGV2ZWwsICRtZXJnZSk7XG4gIH1cblxuICBAZm9yICRpIGZyb20gKCRsZW5ndGggKiAtMSArIDEpIHRocm91Z2ggLTEge1xuICAgICRqOiBhYnMoJGkpO1xuICAgICRrZXk6IG50aCgka2V5cywgJGopO1xuXG4gICAgLy8gQGRlYnVnICRnZXQta2V5cztcblxuICAgIEBpZiAkaiA+IDEge1xuICAgICAgJGdldC1rZXlzOiBnZXQta2V5cygka2V5cywgJGopO1xuICAgICAgJG1hcC1sZXZlbDogbWFwLWdldC1kZWVwKCRtYXAsICRnZXQta2V5cyk7XG5cbiAgICAgIEBpZiAkbWFwLWxldmVsIHtcbiAgICAgICAgJG1lcmdlOiBtYXAtbWVyZ2UoXG4gICAgICAgICAgJG1hcC1sZXZlbCxcbiAgICAgICAgICAoXG4gICAgICAgICAgICAka2V5OiAkbWVyZ2VcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgJG1lcmdlOiAoXG4gICAgICAgICAgJGtleTogJG1lcmdlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBAZWxzZSB7XG4gICAgICAkbWVyZ2U6IChcbiAgICAgICAgJGtleTogJG1lcmdlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gICRtYXA6IG1hcC1tZXJnZSgkbWFwLCAkbWVyZ2UpO1xuXG4gICRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3M6IGZhbHNlICFnbG9iYWw7XG5cbiAgQHJldHVybiAkbWFwO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IFVOSVRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFByb2dyZXNzaXZlIGNhbGNcbkBmdW5jdGlvbiBnZXQtcHJvZ3Jlc3NpdmUtY2FsYyhcbiAgJG1pbi1vYmotc2l6ZSxcbiAgJG1heC1vYmotc2l6ZSxcbiAgJG1pbi12cCxcbiAgJG1heC12cCxcbiAgJHZwLXVuaXQ6IHZ3XG4pIHtcbiAgQHJldHVybiBjYWxjKFxuICAgICN7JG1pbi1vYmotc2l6ZX0gKyAje3N0cmlwLXVuaXQoJG1heC1vYmotc2l6ZSAtICRtaW4tb2JqLXNpemUpfSAqXG4gICAgICAoKDEwMCN7JHZwLXVuaXR9IC0gI3skbWluLXZwfSkgLyAje3N0cmlwLXVuaXQoJG1heC12cCAtICRtaW4tdnApfSlcbiAgKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBVTklUU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTdHJpcCB1bml0XG5AZnVuY3Rpb24gc3RyaXAtdW5pdCgkbnVtYmVyKSB7XG4gIEBpZiB0eXBlLW9mKCRudW1iZXIpID09ICdudW1iZXInIGFuZCBub3QgdW5pdGxlc3MoJG51bWJlcikge1xuICAgIEByZXR1cm4gJG51bWJlciAvICgkbnVtYmVyICogMCArIDEpO1xuICB9XG5cbiAgQHJldHVybiAkbnVtYmVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgZW0vcmVtIHVuaXRcbkBmdW5jdGlvbiBlbSgkbnVtLCAkZm9udC1zaXplOiBmYWxzZSkge1xuICBAcmV0dXJuIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgZW0pO1xufVxuXG5AZnVuY3Rpb24gcmVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCByZW0pO1xufVxuXG5AZnVuY3Rpb24gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCAkdW5pdCkge1xuICAkZnM6IDEwcHg7XG5cbiAgQGlmICRmb250LXNpemUge1xuICAgICRmczogJGZvbnQtc2l6ZTtcbiAgfVxuICBAZWxzZSBpZiAkYmFzZS1odG1sLWZvbnQtc2l6ZSB7IC8vIG1ha2Ugc3VyZSB0byBkZWZpbmUgdGhpcyB2YXJpYWJsZSBvbiB5b3VyIG93blxuICAgICRmczogJGJhc2UtaHRtbC1mb250LXNpemU7XG4gIH1cblxuICBAcmV0dXJuICN7c3RyaXAtdW5pdCgkbnVtKSAvIHN0cmlwLXVuaXQoJGZzKX0jeyR1bml0fTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IHNjcmVlbiBwZXJjZW50XG5AZnVuY3Rpb24gZ2V0LXNjcmVlbi1wZXJjZW50KCR3aWR0aCwgJHNjcmVlbikge1xuICBAcmV0dXJuIHVucXVvdGUoJyN7JHdpZHRoICogMTAwIC8gJHNjcmVlbn0lJyk7XG59XG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogWi1JTkRFWEVTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdlbmVyYXRvclxuQGZ1bmN0aW9uIHotaW5kZXgoJG1hcCwgJGtleXMpIHtcbiAgJGZvdW5kLWluZGV4OiBudWxsO1xuXG4gIEBlYWNoICRrZXkgaW4gJGtleXMge1xuICAgIEBpZiAodHlwZS1vZigkbWFwKSA9PSAnbWFwJykge1xuICAgICAgJGZvdW5kLWluZGV4OiBpbmRleChtYXAta2V5cygkbWFwKSwgJGtleSk7XG4gICAgICAkbWFwOiBtYXAtZ2V0KCRtYXAsICRrZXkpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJGZvdW5kLWluZGV4OiBpbmRleCgkbWFwLCAka2V5KTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRmb3VuZC1pbmRleDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU2VydmVyXG5AZnVuY3Rpb24geigkbWFwLCAka2V5cy4uLikge1xuICBAcmV0dXJuIHotaW5kZXgoJG1hcCwgJGtleXMpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IEZPUk1TXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IElucHV0IHBsYWNlaG9sZGVyXG5AbWl4aW4gaW5wdXQtcGxhY2Vob2xkZXIoJGNvbCwgJHN0eWxlOiBpdGFsaWMpIHtcbiAgJjotbW96LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbiAgJjo6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2w7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICB9XG4gICY6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbiAgJjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2w7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICB9XG59XG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogUE9TSVRJT05TXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEFic29sdXRlIGNlbnRlcmVkXG5AbWl4aW4gYWJzb2x1dGUtY2VudGVyZWQoJHR5cGU6IGFic29sdXRlLCAkcG9zOiA1MCUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICB0b3A6ICRwb3M7XG4gIGxlZnQ6ICRwb3M7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBBYnNvbHV0ZSBjZW50ZXJlZCBYXG5AbWl4aW4gYWJzb2x1dGUtY2VudGVyZWQteCgkdHlwZTogYWJzb2x1dGUsICRwb3M6IDUwJSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIGxlZnQ6ICRwb3M7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQWJzb2x1dGUgY2VudGVyZWQgWVxuQG1peGluIGFic29sdXRlLWNlbnRlcmVkLXkoJHR5cGU6IGFic29sdXRlLCAkcG9zOiA1MCUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICB0b3A6ICRwb3M7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBTSE9SVEhBTkRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFBvc2l0aW9uc1xuQG1peGluIHBvc2l0aW9uLXN0cmV0Y2hlZCgkdHlwZTogYWJzb2x1dGUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IERpbWVuc2lvbnNcbkBtaXhpbiBkaW1lbnNpb25zLXNxdWFyZSgkdmFsdWUpIHtcbiAgd2lkdGg6ICR2YWx1ZTtcbiAgaGVpZ2h0OiAkdmFsdWU7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFBhZGRpbmdcbkBtaXhpbiBwYWRkaW5nLXYoJHZhbHVlKSB7XG4gIHBhZGRpbmctdG9wOiAkdmFsdWU7XG4gIHBhZGRpbmctYm90dG9tOiAkdmFsdWU7XG59XG5cbkBtaXhpbiBwYWRkaW5nLWgoJHZhbHVlKSB7XG4gIHBhZGRpbmctcmlnaHQ6ICR2YWx1ZTtcbiAgcGFkZGluZy1sZWZ0OiAkdmFsdWU7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcmdpblxuQG1peGluIG1hcmdpbi12KCR2YWx1ZSkge1xuICBtYXJnaW4tdG9wOiAkdmFsdWU7XG4gIG1hcmdpbi1ib3R0b206ICR2YWx1ZTtcbn1cblxuQG1peGluIG1hcmdpbi1oKCR2YWx1ZSkge1xuICBtYXJnaW4tcmlnaHQ6ICR2YWx1ZTtcbiAgbWFyZ2luLWxlZnQ6ICR2YWx1ZTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQm9yZGVyXG5AbWl4aW4gYm9yZGVyLXYoJHZhbHVlKSB7XG4gIGJvcmRlci10b3A6ICR2YWx1ZTtcbiAgYm9yZGVyLWJvdHRvbTogJHZhbHVlO1xufVxuXG5AbWl4aW4gYm9yZGVyLWgoJHZhbHVlKSB7XG4gIGJvcmRlci1yaWdodDogJHZhbHVlO1xuICBib3JkZXItbGVmdDogJHZhbHVlO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IFRZUE9HUkFQSFlcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRm9udCBzbW9vdGhpbmdcbkBtaXhpbiBmb250LXNtb290aGluZygkdmFsdWU6IGFudGlhbGlhc2VkKSB7XG4gIEBpZiAkdmFsdWUgPT0gYW50aWFsaWFzZWQge1xuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG4gIH0gQGVsc2Uge1xuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IHN1YnBpeGVsLWFudGlhbGlhc2VkO1xuICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBhdXRvO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFRleHQgdXBwZXJjYXNlXG5AbWl4aW4gdGV4dC11cHBlcmNhc2UoKSB7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIC1tb3otZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnY2FzZSc7XG4gIC13ZWJraXQtZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnY2FzZSc7XG4gIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2Nhc2UnIG9uO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTZWxlY3Rpb25cbkBtaXhpbiBzZWxlY3Rpb24oJGNvbCkge1xuICAkYmdyOiBpZigkY29sICE9IHRyYW5zcGFyZW50LCByZ2JhKCRjb2wsIDAuNSksIHJnYmEoMCwgMCwgMCwgMCkpO1xuXG4gICY6Oi1tb3otc2VsZWN0aW9uIHtcbiAgICBiYWNrZ3JvdW5kOiAkYmdyO1xuICB9XG5cbiAgJjo6c2VsZWN0aW9uIHtcbiAgICBiYWNrZ3JvdW5kOiAkYmdyO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEJBU0VcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgSW1wb3J0c1xuQGltcG9ydCAnLi4vLi4vZGVmcy9icmFuZC5qcyc7XG5AaW1wb3J0ICcuLi8uLi9kZWZzL3dlYnNpdGUuanMnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBGb250IHNpemVcbkBmdW5jdGlvbiByb2xlKCRtYXAsICR2YWx1ZSkge1xuICAkci1tYXA6IG1hcC1nZXQoJHZhbHVlLCAnbWFwJyk7XG4gICRyLXZhbHVlOiBtYXAtZ2V0KCR2YWx1ZSwgJ3ZhbHVlJyk7XG4gIEByZXR1cm4gbWFwLWdldCgkci1tYXAsICRyLXZhbHVlKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zID4gQ0FMQ1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCB2YWx1ZSBiYXNlZCBvbiB0aGUgYmFzZSBmb250IHNpemVcbkBmdW5jdGlvbiBiYXNlKCR2YWx1ZSkge1xuICBAcmV0dXJuIG1hdGguZGl2KCR2YWx1ZSwgbWFwLWdldCgkcm9sZXMtcmF0aW9zLCAnbGF5b3V0LWdyb3d0aCcpKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUHJvZ3Jlc3NpdmUgY2FsY1xuQGZ1bmN0aW9uIGdldC1wcm9ncmVzc2l2ZS1jYWxjKFxuICAkbWluLW9iai1zaXplLFxuICAkbWF4LW9iai1zaXplLFxuICAkbWluLXZwLFxuICAkbWF4LXZwLFxuICAkdnAtdW5pdDogdndcbikge1xuICBAcmV0dXJuIGNhbGMoXG4gICAgI3twaXhlbGF0ZSgkbWluLW9iai1zaXplKX0gKyAje3N0cmlwLXVuaXQoJG1heC1vYmotc2l6ZSAtICRtaW4tb2JqLXNpemUpfSAqXG4gICAgICAoXG4gICAgICAgICgxMDAjeyR2cC11bml0fSAtICN7cGl4ZWxhdGUoJG1pbi12cCl9KSAvICN7c3RyaXAtdW5pdChcbiAgICAgICAgICAgICRtYXgtdnAgLSAkbWluLXZwXG4gICAgICAgICAgKX1cbiAgICAgIClcbiAgKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zID4gVU5JVFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTdHJpcCB1bml0XG5AZnVuY3Rpb24gc3RyaXAtdW5pdCgkbnVtYmVyKSB7XG4gIEBpZiB0eXBlLW9mKCRudW1iZXIpID09ICdudW1iZXInIGFuZCBub3QgdW5pdGxlc3MoJG51bWJlcikge1xuICAgIEByZXR1cm4gbWF0aC5kaXYoJG51bWJlciwgKCRudW1iZXIgKiAwICsgMSkpO1xuICB9XG5cbiAgQHJldHVybiAkbnVtYmVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgUHggdW5pdFxuQGZ1bmN0aW9uIHBpeGVsYXRlKCR2YWx1ZSkge1xuICBAcmV0dXJuICN7c3RyaXAtdW5pdCgkdmFsdWUpfVB4O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgZW0vcmVtIHVuaXRcbkBmdW5jdGlvbiBlbSgkbnVtLCAkZm9udC1zaXplOiBmYWxzZSkge1xuICBAcmV0dXJuIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgZW0pO1xufVxuXG5AZnVuY3Rpb24gcmVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCByZW0pO1xufVxuXG5AZnVuY3Rpb24gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCAkdW5pdCkge1xuICAkZnM6IDEwcHg7XG5cbiAgQGlmICRmb250LXNpemUge1xuICAgICRmczogJGZvbnQtc2l6ZTtcbiAgfSBAZWxzZSB7XG4gICAgJGZzOiBtYXAtZ2V0KCR0eXBvZ3JhcGh5LCAnYmFzZV9mb250X3NpemUnKTtcbiAgfVxuXG4gIEByZXR1cm4gI3ttYXRoLmRpdihzdHJpcC11bml0KCRudW0pLCBzdHJpcC11bml0KCRmcykpfSN7JHVuaXR9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBEYXRhID4gU1dBVENIRVNcblxuQGltcG9ydCAnLi4vLi4vZGVmcy9zd2F0Y2hlcy9pbmRleC5qcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19icmVha3BvaW50cyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19yYXRpb3MnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvc3dhdGNoZXMvc3dhdGNoZXNfc2NyZWVucyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19zcGFjZXMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBEYXRhID4gUk9MRVNcblxuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfYm9yZGVycyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19icmVha3BvaW50cyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19jb2xvcnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfZGltZW5zaW9ucyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19yYXRpb3MnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfc2NyZWVucyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19zaGFkb3dzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3NwYWNlcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc190eXBvZ3JhcGh5JztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zID4gU0NBTEFCSUxJVFlcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTY2FsZXJcbkBtaXhpbiBzY2FsZXIoXG4gICRwcm9wZXJ0eSxcbiAgJG1pbi1zaXplLFxuICAkbWF4LXNpemUsXG4gICRtaW4tdnc6IG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtaW4nKSxcbiAgJG1heC12dzogbWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21heCcpXG4pIHtcbiAgI3skcHJvcGVydHl9OiAje3N0cmlwLXVuaXQobWF0aC5kaXYoKCRtaW4tdncgKiAwLjk3OTYpICogJG1pbi1zaXplLCAxMDAwKSl9dnc7IC8vIDAuOTc5NiBmaXhlcyB3cm9uZyBjYWxjdWxhdGlvbnMgaW4gQ2hyb21lXG5cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogJG1pbi12dykge1xuICAgICN7JHByb3BlcnR5fTogZ2V0LXByb2dyZXNzaXZlLWNhbGMoJG1pbi1zaXplLCAkbWF4LXNpemUsICRtaW4tdncsICRtYXgtdncpO1xuICB9XG5cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogJG1heC12dykge1xuICAgICN7JHByb3BlcnR5fTogcGl4ZWxhdGUoJG1heC1zaXplKTtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBQbGFjZWhvbGRlcnMgPiBTQ0FMQUJJTElUWVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE5lZ2F0aXZlXG4lcGgtbmVnYXRpdmUge1xuICBoMSxcbiAgaDIsXG4gIGgzLFxuICBoNCxcbiAgaDUsXG4gIGg2LFxuICBwIHtcbiAgICBjb2xvcjogbWFwLWdldCgkcm9sZXMtY29sLXRleHRzLCAnbmVnYXRpdmUnKTtcbiAgfVxuXG4gIC5tZXRhIHtcbiAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRzd2F0Y2hlcy1jb2xvcnMsICdob25leS15ZWxsb3cnLCAnbGlnaHQnKTtcbiAgfVxuXG4gIC50ZXh0LWxpbmsge1xuICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ25vcm1hbCcpO1xuICAgIGJvcmRlci1ib3R0b206IHBpeGVsYXRlKDFweCkgZG90dGVkXG4gICAgICByZ2JhKG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnbm9ybWFsJyksIDAuMzMpO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdob3ZlcicpO1xuICAgIH1cblxuICAgICY6YWN0aXZlIHtcbiAgICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2FjdGl2ZScpO1xuICAgIH1cbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBXYXZlXG4lcGgtd2F2ZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogNTAlO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLXdpZHRoOiBtYXRoLmRpdihtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWF4JyksIDIpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG5cbiAgPiBzdmcge1xuICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKDEwMCUpO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEhlYWQgd2F2ZVxuJXBoLWhlYWQtd2F2ZSB7XG4gICR3YXZlLWhlaWdodDogYmFzZShtYXAtZ2V0KCRyb2xlcy1kaW1lbnNpb25zLXdhdmVzLCAnaGVhZGVyJykpO1xuXG4gIC53YXZlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgdG9wOiBjYWxjKDEwMCUgLSAxUHgpO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogZW0oJHdhdmUtaGVpZ2h0KTtcblxuICAgIC5pbm5lciB7XG4gICAgICBAaW5jbHVkZSBkaW1lbnNpb25zLXNxdWFyZSgxMDAlKTtcblxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgICAgc3ZnIHtcbiAgICAgICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG5cbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIG1pbi13aWR0aDogbWF0aC5kaXYobWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21heCcpLCAyKTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBrZXlmcmFtZXMgc2xpZGUge1xuICAgIGZyb20ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgfVxuXG4gICAgdG8ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgMCk7XG4gICAgfVxuICB9XG5cbiAgLnNjcm9sbC1idG4ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3R0b206IDIwcHg7XG4gICAgbGVmdDogNTAlO1xuICAgIHotaW5kZXg6IDE7XG4gICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRzd2F0Y2hlcy1jb2xvcnMsICdjb3JuZmxvd2VyJywgJ2Jhc2UnKTtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICBhbmltYXRpb246IHNsaWRlIDFzIGVhc2UtaW4tb3V0IGluZmluaXRlIGFsdGVybmF0ZTtcblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdob3ZlcicpO1xuICAgIH1cblxuICAgICY6YWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnYWN0aXZlJyk7XG4gICAgfVxuXG4gICAgc3ZnIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gICAgfVxuXG4gICAgYm9keTpub3QoLnNjcm9sbGFibGUpICYge1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBSb290XG4ubWFpbiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXg6IDE7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1pbi1oZWlnaHQ6IDEwMHZoO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBDb250ZW50XG4uY29udGVudCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXg6IDE7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1pbi1oZWlnaHQ6IGJhc2UoXG4gICAgbWFwLWdldCgkcm9sZXMtZGltZW5zaW9ucy13YXZlcywgJ2hlYWRlcicpICtcbiAgICAgIG1hcC1nZXQoJHJvbGVzLWRpbWVuc2lvbnMtd2F2ZXMsICdmb290ZXInKVxuICApO1xuICBwYWRkaW5nOiBtYXAtZ2V0KCRyb2xlcy1zcGFjZXMsICdoZWFkLXdhdmUnKSAwIDEyOHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0KCRyb2xlcy1jb2wtYmFja2dyb3VuZHMsICdjb250ZW50Jyk7XG59XG4iLCIvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBMYXlvdXQgPiBGT09URVJcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuQHVzZSAnc2FzczptYXRoJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBDT0xPUlNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTGlnaHRcbkBmdW5jdGlvbiBsaWdodCgkY29sb3IsICRwZXJjZW50KSB7XG4gIEByZXR1cm4gbWl4KCNmZmYsICRjb2xvciwgJHBlcmNlbnQpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBEYXJrXG5AZnVuY3Rpb24gZGFyaygkY29sb3IsICRwZXJjZW50KSB7XG4gIEByZXR1cm4gbWl4KCMwMDAsICRjb2xvciwgJHBlcmNlbnQpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IE1BUFNcblxuJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5nczogZmFsc2UgIWRlZmF1bHQ7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgRGVlcCBXYXJuaW5nXG4vLyBEaXNwbGF5cyBhIHdhcm5pbmcgaWYgdGhlIHJldHJpZXZlZCB2YWx1ZSBpcyBgbnVsbGBcbkBmdW5jdGlvbiBtYXAtZ2V0LWRlZXAtd2FybmluZygkd2FybiwgJGdldCwgJGtleSkge1xuICBAaWYgbm90ICRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3Mge1xuICAgIEBpZiAkZ2V0ID09IG51bGwge1xuICAgICAgQHdhcm4gJ01hcCBoYXMgbm8gdmFsdWUgZm9yIGtleSBzZWFyY2ggYCN7JHdhcm59YCc7XG4gICAgfSBAZWxzZSBpZiB0eXBlLW9mKCRnZXQpICE9ICdtYXAnIHtcbiAgICAgIEB3YXJuICdOb24tbWFwIHZhbHVlIGZvdW5kIGZvciBrZXkgc2VhcmNoIGAjeyR3YXJufWAsIGNhbm5vdCBzZWFyY2ggZm9yIGtleSBgI3ska2V5fWAnO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gbnVsbDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIEdldCBEZWVwXG4vLyBHaXZlbiBhIG1hcCBhbmQgYSBsaXN0IG9mIGtleXMsIGZpbmQgdGhlIHZhbHVlIGF0IHRoZSBnaXZlbiBrZXlcbkBmdW5jdGlvbiBtYXAtZ2V0LWRlZXAoJG1hcCwgJGtleXMuLi4pIHtcbiAgQGlmIGxlbmd0aCgka2V5cykgPT0gMSB7XG4gICAgJGtleXM6IG50aCgka2V5cywgMSk7XG4gIH1cblxuICAkd2FybjogJyN7bnRoKCRrZXlzLCAxKX0nO1xuICAkbGVuZ3RoOiBsZW5ndGgoJGtleXMpO1xuICAkZ2V0OiBtYXAtZ2V0KCRtYXAsIG50aCgka2V5cywgMSkpO1xuXG4gIEBpZiAkbGVuZ3RoID4gMSB7XG4gICAgQGZvciAkaSBmcm9tIDIgdGhyb3VnaCAkbGVuZ3RoIHtcbiAgICAgIEBpZiAkZ2V0ICE9IG51bGwgYW5kIHR5cGUtb2YoJGdldCkgPT0gJ21hcCcge1xuICAgICAgICAkd2FybjogJHdhcm4gKyAnLT4je250aCgka2V5cywgJGkpfSc7XG4gICAgICAgICRnZXQ6IG1hcC1nZXQoJGdldCwgbnRoKCRrZXlzLCAkaSkpO1xuXG4gICAgICAgIEBpZiAkZ2V0ID09IG51bGwge1xuICAgICAgICAgIEByZXR1cm4gbWFwLWdldC1kZWVwLXdhcm5pbmcoJHdhcm4sICRnZXQsIG50aCgka2V5cywgJGkpKTtcbiAgICAgICAgfVxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIEByZXR1cm4gbWFwLWdldC1kZWVwLXdhcm5pbmcoJHdhcm4sICRnZXQsIG50aCgka2V5cywgJGkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRnZXQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgS2V5c1xuQGZ1bmN0aW9uIGdldC1rZXlzKCRrZXlzLCAkY291bnRlcikge1xuICAkcmV0dXJuOiAoKTtcblxuICBAZm9yICRpIGZyb20gMSB0byAkY291bnRlciB7XG4gICAgJHJldHVybjogYXBwZW5kKCRyZXR1cm4sIG50aCgka2V5cywgJGkpKTtcbiAgfVxuXG4gIEByZXR1cm4gJHJldHVybjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIEdldCBQcmV2aW91cyBLZXlcbkBmdW5jdGlvbiBtYXAtZ2V0LXByZXYta2V5KCRtYXAsICRrZXkpIHtcbiAgJGluZGV4OiBpbmRleCgkbWFwLCAka2V5KTtcbiAgJHByZXY6ICRpbmRleCAtIDE7XG4gICRyZXN1bHQ6IGlmKCRwcmV2ID4gMCwgbnRoKCRtYXAsICRwcmV2KSwgbnVsbCk7XG5cbiAgQHJldHVybiAkcmVzdWx0O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgU2V0XG5AZnVuY3Rpb24gbWFwLXNldCgkbWFwLCAka2V5LCAkdmFsdWUpIHtcbiAgQHJldHVybiBtYXAtbWVyZ2UoXG4gICAgJG1hcCxcbiAgICAoXG4gICAgICAka2V5OiAkdmFsdWVcbiAgICApXG4gICk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBTZXQgRGVlcFxuQGZ1bmN0aW9uIG1hcC1zZXQtZGVlcCgkbWFwLCAka2V5cywgJHZhbHVlKSB7XG4gICRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3M6IHRydWUgIWdsb2JhbDtcbiAgJGxlbmd0aDogbGVuZ3RoKCRrZXlzKTtcbiAgJGdldC1rZXlzOiAoKTtcbiAgJG1hcC1sZXZlbDogKCk7XG5cbiAgQGlmICRsZW5ndGggPiAxIHtcbiAgICAkZ2V0LWtleXM6IGdldC1rZXlzKCRrZXlzLCAkbGVuZ3RoKTtcbiAgICAkbWFwLWxldmVsOiBtYXAtZ2V0LWRlZXAoJG1hcCwgJGdldC1rZXlzKTtcbiAgfVxuXG4gICRtZXJnZTogKFxuICAgIG50aCgka2V5cywgJGxlbmd0aCk6ICR2YWx1ZVxuICApO1xuXG4gIEBpZiAkbWFwLWxldmVsIHtcbiAgICAkbWVyZ2U6IG1hcC1tZXJnZSgkbWFwLWxldmVsLCAkbWVyZ2UpO1xuICB9XG5cbiAgQGZvciAkaSBmcm9tICgkbGVuZ3RoICogLTEgKyAxKSB0aHJvdWdoIC0xIHtcbiAgICAkajogYWJzKCRpKTtcbiAgICAka2V5OiBudGgoJGtleXMsICRqKTtcblxuICAgIC8vIEBkZWJ1ZyAkZ2V0LWtleXM7XG5cbiAgICBAaWYgJGogPiAxIHtcbiAgICAgICRnZXQta2V5czogZ2V0LWtleXMoJGtleXMsICRqKTtcbiAgICAgICRtYXAtbGV2ZWw6IG1hcC1nZXQtZGVlcCgkbWFwLCAkZ2V0LWtleXMpO1xuXG4gICAgICBAaWYgJG1hcC1sZXZlbCB7XG4gICAgICAgICRtZXJnZTogbWFwLW1lcmdlKFxuICAgICAgICAgICRtYXAtbGV2ZWwsXG4gICAgICAgICAgKFxuICAgICAgICAgICAgJGtleTogJG1lcmdlXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSBAZWxzZSB7XG4gICAgICAgICRtZXJnZTogKFxuICAgICAgICAgICRrZXk6ICRtZXJnZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gQGVsc2Uge1xuICAgICAgJG1lcmdlOiAoXG4gICAgICAgICRrZXk6ICRtZXJnZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAkbWFwOiBtYXAtbWVyZ2UoJG1hcCwgJG1lcmdlKTtcblxuICAkcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzOiBmYWxzZSAhZ2xvYmFsO1xuXG4gIEByZXR1cm4gJG1hcDtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBVTklUU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBQcm9ncmVzc2l2ZSBjYWxjXG5AZnVuY3Rpb24gZ2V0LXByb2dyZXNzaXZlLWNhbGMoXG4gICRtaW4tb2JqLXNpemUsXG4gICRtYXgtb2JqLXNpemUsXG4gICRtaW4tdnAsXG4gICRtYXgtdnAsXG4gICR2cC11bml0OiB2d1xuKSB7XG4gIEByZXR1cm4gY2FsYyhcbiAgICAjeyRtaW4tb2JqLXNpemV9ICsgI3tzdHJpcC11bml0KCRtYXgtb2JqLXNpemUgLSAkbWluLW9iai1zaXplKX0gKlxuICAgICAgKCgxMDAjeyR2cC11bml0fSAtICN7JG1pbi12cH0pIC8gI3tzdHJpcC11bml0KCRtYXgtdnAgLSAkbWluLXZwKX0pXG4gICk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogVU5JVFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU3RyaXAgdW5pdFxuQGZ1bmN0aW9uIHN0cmlwLXVuaXQoJG51bWJlcikge1xuICBAaWYgdHlwZS1vZigkbnVtYmVyKSA9PSAnbnVtYmVyJyBhbmQgbm90IHVuaXRsZXNzKCRudW1iZXIpIHtcbiAgICBAcmV0dXJuICRudW1iZXIgLyAoJG51bWJlciAqIDAgKyAxKTtcbiAgfVxuXG4gIEByZXR1cm4gJG51bWJlcjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IGVtL3JlbSB1bml0XG5AZnVuY3Rpb24gZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIGVtKTtcbn1cblxuQGZ1bmN0aW9uIHJlbSgkbnVtLCAkZm9udC1zaXplOiBmYWxzZSkge1xuICBAcmV0dXJuIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgcmVtKTtcbn1cblxuQGZ1bmN0aW9uIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgJHVuaXQpIHtcbiAgJGZzOiAxMHB4O1xuXG4gIEBpZiAkZm9udC1zaXplIHtcbiAgICAkZnM6ICRmb250LXNpemU7XG4gIH1cbiAgQGVsc2UgaWYgJGJhc2UtaHRtbC1mb250LXNpemUgeyAvLyBtYWtlIHN1cmUgdG8gZGVmaW5lIHRoaXMgdmFyaWFibGUgb24geW91ciBvd25cbiAgICAkZnM6ICRiYXNlLWh0bWwtZm9udC1zaXplO1xuICB9XG5cbiAgQHJldHVybiAje3N0cmlwLXVuaXQoJG51bSkgLyBzdHJpcC11bml0KCRmcyl9I3skdW5pdH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBzY3JlZW4gcGVyY2VudFxuQGZ1bmN0aW9uIGdldC1zY3JlZW4tcGVyY2VudCgkd2lkdGgsICRzY3JlZW4pIHtcbiAgQHJldHVybiB1bnF1b3RlKCcjeyR3aWR0aCAqIDEwMCAvICRzY3JlZW59JScpO1xufVxuXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IFotSU5ERVhFU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZW5lcmF0b3JcbkBmdW5jdGlvbiB6LWluZGV4KCRtYXAsICRrZXlzKSB7XG4gICRmb3VuZC1pbmRleDogbnVsbDtcblxuICBAZWFjaCAka2V5IGluICRrZXlzIHtcbiAgICBAaWYgKHR5cGUtb2YoJG1hcCkgPT0gJ21hcCcpIHtcbiAgICAgICRmb3VuZC1pbmRleDogaW5kZXgobWFwLWtleXMoJG1hcCksICRrZXkpO1xuICAgICAgJG1hcDogbWFwLWdldCgkbWFwLCAka2V5KTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRmb3VuZC1pbmRleDogaW5kZXgoJG1hcCwgJGtleSk7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkZm91bmQtaW5kZXg7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFNlcnZlclxuQGZ1bmN0aW9uIHooJG1hcCwgJGtleXMuLi4pIHtcbiAgQHJldHVybiB6LWluZGV4KCRtYXAsICRrZXlzKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBGT1JNU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBJbnB1dCBwbGFjZWhvbGRlclxuQG1peGluIGlucHV0LXBsYWNlaG9sZGVyKCRjb2wsICRzdHlsZTogaXRhbGljKSB7XG4gICY6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2w7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICB9XG4gICY6Oi1tb3otcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxuICAmOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2w7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICB9XG4gICY6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxufVxuXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IFBPU0lUSU9OU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBBYnNvbHV0ZSBjZW50ZXJlZFxuQG1peGluIGFic29sdXRlLWNlbnRlcmVkKCR0eXBlOiBhYnNvbHV0ZSwgJHBvczogNTAlKSB7XG4gIHBvc2l0aW9uOiAkdHlwZTtcbiAgdG9wOiAkcG9zO1xuICBsZWZ0OiAkcG9zO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQWJzb2x1dGUgY2VudGVyZWQgWFxuQG1peGluIGFic29sdXRlLWNlbnRlcmVkLXgoJHR5cGU6IGFic29sdXRlLCAkcG9zOiA1MCUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICBsZWZ0OiAkcG9zO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEFic29sdXRlIGNlbnRlcmVkIFlcbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXJlZC15KCR0eXBlOiBhYnNvbHV0ZSwgJHBvczogNTAlKSB7XG4gIHBvc2l0aW9uOiAkdHlwZTtcbiAgdG9wOiAkcG9zO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogU0hPUlRIQU5EU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBQb3NpdGlvbnNcbkBtaXhpbiBwb3NpdGlvbi1zdHJldGNoZWQoJHR5cGU6IGFic29sdXRlKSB7XG4gIHBvc2l0aW9uOiAkdHlwZTtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBEaW1lbnNpb25zXG5AbWl4aW4gZGltZW5zaW9ucy1zcXVhcmUoJHZhbHVlKSB7XG4gIHdpZHRoOiAkdmFsdWU7XG4gIGhlaWdodDogJHZhbHVlO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBQYWRkaW5nXG5AbWl4aW4gcGFkZGluZy12KCR2YWx1ZSkge1xuICBwYWRkaW5nLXRvcDogJHZhbHVlO1xuICBwYWRkaW5nLWJvdHRvbTogJHZhbHVlO1xufVxuXG5AbWl4aW4gcGFkZGluZy1oKCR2YWx1ZSkge1xuICBwYWRkaW5nLXJpZ2h0OiAkdmFsdWU7XG4gIHBhZGRpbmctbGVmdDogJHZhbHVlO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXJnaW5cbkBtaXhpbiBtYXJnaW4tdigkdmFsdWUpIHtcbiAgbWFyZ2luLXRvcDogJHZhbHVlO1xuICBtYXJnaW4tYm90dG9tOiAkdmFsdWU7XG59XG5cbkBtaXhpbiBtYXJnaW4taCgkdmFsdWUpIHtcbiAgbWFyZ2luLXJpZ2h0OiAkdmFsdWU7XG4gIG1hcmdpbi1sZWZ0OiAkdmFsdWU7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEJvcmRlclxuQG1peGluIGJvcmRlci12KCR2YWx1ZSkge1xuICBib3JkZXItdG9wOiAkdmFsdWU7XG4gIGJvcmRlci1ib3R0b206ICR2YWx1ZTtcbn1cblxuQG1peGluIGJvcmRlci1oKCR2YWx1ZSkge1xuICBib3JkZXItcmlnaHQ6ICR2YWx1ZTtcbiAgYm9yZGVyLWxlZnQ6ICR2YWx1ZTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBUWVBPR1JBUEhZXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEZvbnQgc21vb3RoaW5nXG5AbWl4aW4gZm9udC1zbW9vdGhpbmcoJHZhbHVlOiBhbnRpYWxpYXNlZCkge1xuICBAaWYgJHZhbHVlID09IGFudGlhbGlhc2VkIHtcbiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICB9IEBlbHNlIHtcbiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBzdWJwaXhlbC1hbnRpYWxpYXNlZDtcbiAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogYXV0bztcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBUZXh0IHVwcGVyY2FzZVxuQG1peGluIHRleHQtdXBwZXJjYXNlKCkge1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAtbW96LWZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2Nhc2UnO1xuICAtd2Via2l0LWZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2Nhc2UnO1xuICBmb250LWZlYXR1cmUtc2V0dGluZ3M6ICdjYXNlJyBvbjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU2VsZWN0aW9uXG5AbWl4aW4gc2VsZWN0aW9uKCRjb2wpIHtcbiAgJGJncjogaWYoJGNvbCAhPSB0cmFuc3BhcmVudCwgcmdiYSgkY29sLCAwLjUpLCByZ2JhKDAsIDAsIDAsIDApKTtcblxuICAmOjotbW96LXNlbGVjdGlvbiB7XG4gICAgYmFja2dyb3VuZDogJGJncjtcbiAgfVxuXG4gICY6OnNlbGVjdGlvbiB7XG4gICAgYmFja2dyb3VuZDogJGJncjtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBCQVNFXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEltcG9ydHNcbkBpbXBvcnQgJy4uLy4uL2RlZnMvYnJhbmQuanMnO1xuQGltcG9ydCAnLi4vLi4vZGVmcy93ZWJzaXRlLmpzJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRm9udCBzaXplXG5AZnVuY3Rpb24gcm9sZSgkbWFwLCAkdmFsdWUpIHtcbiAgJHItbWFwOiBtYXAtZ2V0KCR2YWx1ZSwgJ21hcCcpO1xuICAkci12YWx1ZTogbWFwLWdldCgkdmFsdWUsICd2YWx1ZScpO1xuICBAcmV0dXJuIG1hcC1nZXQoJHItbWFwLCAkci12YWx1ZSk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9ucyA+IENBTENcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgdmFsdWUgYmFzZWQgb24gdGhlIGJhc2UgZm9udCBzaXplXG5AZnVuY3Rpb24gYmFzZSgkdmFsdWUpIHtcbiAgQHJldHVybiBtYXRoLmRpdigkdmFsdWUsIG1hcC1nZXQoJHJvbGVzLXJhdGlvcywgJ2xheW91dC1ncm93dGgnKSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFByb2dyZXNzaXZlIGNhbGNcbkBmdW5jdGlvbiBnZXQtcHJvZ3Jlc3NpdmUtY2FsYyhcbiAgJG1pbi1vYmotc2l6ZSxcbiAgJG1heC1vYmotc2l6ZSxcbiAgJG1pbi12cCxcbiAgJG1heC12cCxcbiAgJHZwLXVuaXQ6IHZ3XG4pIHtcbiAgQHJldHVybiBjYWxjKFxuICAgICN7cGl4ZWxhdGUoJG1pbi1vYmotc2l6ZSl9ICsgI3tzdHJpcC11bml0KCRtYXgtb2JqLXNpemUgLSAkbWluLW9iai1zaXplKX0gKlxuICAgICAgKFxuICAgICAgICAoMTAwI3skdnAtdW5pdH0gLSAje3BpeGVsYXRlKCRtaW4tdnApfSkgLyAje3N0cmlwLXVuaXQoXG4gICAgICAgICAgICAkbWF4LXZwIC0gJG1pbi12cFxuICAgICAgICAgICl9XG4gICAgICApXG4gICk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9ucyA+IFVOSVRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU3RyaXAgdW5pdFxuQGZ1bmN0aW9uIHN0cmlwLXVuaXQoJG51bWJlcikge1xuICBAaWYgdHlwZS1vZigkbnVtYmVyKSA9PSAnbnVtYmVyJyBhbmQgbm90IHVuaXRsZXNzKCRudW1iZXIpIHtcbiAgICBAcmV0dXJuIG1hdGguZGl2KCRudW1iZXIsICgkbnVtYmVyICogMCArIDEpKTtcbiAgfVxuXG4gIEByZXR1cm4gJG51bWJlcjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IFB4IHVuaXRcbkBmdW5jdGlvbiBwaXhlbGF0ZSgkdmFsdWUpIHtcbiAgQHJldHVybiAje3N0cmlwLXVuaXQoJHZhbHVlKX1QeDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IGVtL3JlbSB1bml0XG5AZnVuY3Rpb24gZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIGVtKTtcbn1cblxuQGZ1bmN0aW9uIHJlbSgkbnVtLCAkZm9udC1zaXplOiBmYWxzZSkge1xuICBAcmV0dXJuIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgcmVtKTtcbn1cblxuQGZ1bmN0aW9uIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgJHVuaXQpIHtcbiAgJGZzOiAxMHB4O1xuXG4gIEBpZiAkZm9udC1zaXplIHtcbiAgICAkZnM6ICRmb250LXNpemU7XG4gIH0gQGVsc2Uge1xuICAgICRmczogbWFwLWdldCgkdHlwb2dyYXBoeSwgJ2Jhc2VfZm9udF9zaXplJyk7XG4gIH1cblxuICBAcmV0dXJuICN7bWF0aC5kaXYoc3RyaXAtdW5pdCgkbnVtKSwgc3RyaXAtdW5pdCgkZnMpKX0jeyR1bml0fTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRGF0YSA+IFNXQVRDSEVTXG5cbkBpbXBvcnQgJy4uLy4uL2RlZnMvc3dhdGNoZXMvaW5kZXguanMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvc3dhdGNoZXMvc3dhdGNoZXNfYnJlYWtwb2ludHMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvc3dhdGNoZXMvc3dhdGNoZXNfcmF0aW9zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX3NjcmVlbnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvc3dhdGNoZXMvc3dhdGNoZXNfc3BhY2VzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRGF0YSA+IFJPTEVTXG5cbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2JvcmRlcnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfYnJlYWtwb2ludHMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfY29sb3JzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2RpbWVuc2lvbnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfcmF0aW9zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3NjcmVlbnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfc2hhZG93cyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19zcGFjZXMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfdHlwb2dyYXBoeSc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGlucyA+IFNDQUxBQklMSVRZXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU2NhbGVyXG5AbWl4aW4gc2NhbGVyKFxuICAkcHJvcGVydHksXG4gICRtaW4tc2l6ZSxcbiAgJG1heC1zaXplLFxuICAkbWluLXZ3OiBtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWluJyksXG4gICRtYXgtdnc6IG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtYXgnKVxuKSB7XG4gICN7JHByb3BlcnR5fTogI3tzdHJpcC11bml0KG1hdGguZGl2KCgkbWluLXZ3ICogMC45Nzk2KSAqICRtaW4tc2l6ZSwgMTAwMCkpfXZ3OyAvLyAwLjk3OTYgZml4ZXMgd3JvbmcgY2FsY3VsYXRpb25zIGluIENocm9tZVxuXG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6ICRtaW4tdncpIHtcbiAgICAjeyRwcm9wZXJ0eX06IGdldC1wcm9ncmVzc2l2ZS1jYWxjKCRtaW4tc2l6ZSwgJG1heC1zaXplLCAkbWluLXZ3LCAkbWF4LXZ3KTtcbiAgfVxuXG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6ICRtYXgtdncpIHtcbiAgICAjeyRwcm9wZXJ0eX06IHBpeGVsYXRlKCRtYXgtc2l6ZSk7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gUGxhY2Vob2xkZXJzID4gU0NBTEFCSUxJVFlcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBOZWdhdGl2ZVxuJXBoLW5lZ2F0aXZlIHtcbiAgaDEsXG4gIGgyLFxuICBoMyxcbiAgaDQsXG4gIGg1LFxuICBoNixcbiAgcCB7XG4gICAgY29sb3I6IG1hcC1nZXQoJHJvbGVzLWNvbC10ZXh0cywgJ25lZ2F0aXZlJyk7XG4gIH1cblxuICAubWV0YSB7XG4gICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkc3dhdGNoZXMtY29sb3JzLCAnaG9uZXkteWVsbG93JywgJ2xpZ2h0Jyk7XG4gIH1cblxuICAudGV4dC1saW5rIHtcbiAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdub3JtYWwnKTtcbiAgICBib3JkZXItYm90dG9tOiBwaXhlbGF0ZSgxcHgpIGRvdHRlZFxuICAgICAgcmdiYShtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ25vcm1hbCcpLCAwLjMzKTtcblxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnaG92ZXInKTtcbiAgICB9XG5cbiAgICAmOmFjdGl2ZSB7XG4gICAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdhY3RpdmUnKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgV2F2ZVxuJXBoLXdhdmUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDUwJTtcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi13aWR0aDogbWF0aC5kaXYobWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21heCcpLCAyKTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuXG4gID4gc3ZnIHtcbiAgICBAaW5jbHVkZSBkaW1lbnNpb25zLXNxdWFyZSgxMDAlKTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBIZWFkIHdhdmVcbiVwaC1oZWFkLXdhdmUge1xuICAkd2F2ZS1oZWlnaHQ6IGJhc2UobWFwLWdldCgkcm9sZXMtZGltZW5zaW9ucy13YXZlcywgJ2hlYWRlcicpKTtcblxuICAud2F2ZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgIHRvcDogY2FsYygxMDAlIC0gMVB4KTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IGVtKCR3YXZlLWhlaWdodCk7XG5cbiAgICAuaW5uZXIge1xuICAgICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG5cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAgIHN2ZyB7XG4gICAgICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKDEwMCUpO1xuXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICBtaW4td2lkdGg6IG1hdGguZGl2KG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtYXgnKSwgMik7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAa2V5ZnJhbWVzIHNsaWRlIHtcbiAgICBmcm9tIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgIH1cblxuICAgIHRvIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIDApO1xuICAgIH1cbiAgfVxuXG4gIC5zY3JvbGwtYnRuIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm90dG9tOiAyMHB4O1xuICAgIGxlZnQ6IDUwJTtcbiAgICB6LWluZGV4OiAxO1xuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQtZGVlcCgkc3dhdGNoZXMtY29sb3JzLCAnY29ybmZsb3dlcicsICdiYXNlJyk7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgYW5pbWF0aW9uOiBzbGlkZSAxcyBlYXNlLWluLW91dCBpbmZpbml0ZSBhbHRlcm5hdGU7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnaG92ZXInKTtcbiAgICB9XG5cbiAgICAmOmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2FjdGl2ZScpO1xuICAgIH1cblxuICAgIHN2ZyB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuICAgIH1cblxuICAgIGJvZHk6bm90KC5zY3JvbGxhYmxlKSAmIHtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgVmFyaWFibGVzXG4kZm9vdGVyLWhlaWdodDogYmFzZShtYXAtZ2V0KCRyb2xlcy1kaW1lbnNpb25zLXdhdmVzLCAnZm9vdGVyJykpO1xuJGJyZWFrcG9pbnQ6IDQ2MHB4O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBSb290XG4uZm9vdGVyIHtcbiAgJG1pbi1mb250LXNpemU6IG1hcC1nZXQoJHJvbGVzLXR5cG8tZm9udC1zaXplcywgJ21ldGEnKTtcbiAgJG1heC1mb250LXNpemU6ICRtaW4tZm9udC1zaXplICogbWFwLWdldCgkcm9sZXMtcmF0aW9zLCAndGV4dC1ncm93dGgnKTtcblxuICBAaW5jbHVkZSBzY2FsZXIoZm9udC1zaXplLCAkbWluLWZvbnQtc2l6ZSwgJG1heC1mb250LXNpemUpO1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICB3aWR0aDogMTAwdnc7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQoJHJvbGVzLWNvbC1iYWNrZ3JvdW5kcywgJ2Zvb3RlcicpO1xuXG4gIC53cnAtbGF5b3V0IHtcbiAgICBAZXh0ZW5kICVwaC1uZWdhdGl2ZTtcblxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIH1cblxuICAud2F2ZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvdHRvbTogMTAwJTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6ICRmb290ZXItaGVpZ2h0O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICBzdmcge1xuICAgICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG5cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGxlZnQ6IDUwJTtcbiAgICAgIG1pbi13aWR0aDogbWF0aC5kaXYobWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21heCcpLCAyKTtcbiAgICAgIGZpbGw6IG1hcC1nZXQoJHJvbGVzLWNvbC1iYWNrZ3JvdW5kcywgJ2Zvb3RlcicpO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgIH1cbiAgfVxuXG4gIC5sb2dvIHtcbiAgICAkc2l6ZTogNjVweDtcblxuICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKCRzaXplKTtcblxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IChtYXRoLmRpdigkZm9vdGVyLWhlaWdodCwgMikgKyAobWF0aC5kaXYoJHNpemUsIDIpKSkgKiAtMTtcbiAgICB6LWluZGV4OiAxO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cbiAgICBzdmcge1xuICAgICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG5cbiAgICAgIDpnbG9iYWwoLmMxKSB7XG4gICAgICAgIGZpbGw6IHRyYW5zcGFyZW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBOZXR3b3Jrc1xuLm5ldHdvcmtzIHtcbiAgJGljb24tc2l6ZTogZW0oMjRweCk7XG4gICRvZmZzZXQ6IG1hcC1nZXQoJHN3YXRjaGVzLXNwYWNlcywgJzEwJyk7XG4gICRtaW4tZm9udC1zaXplOiBtYXAtZ2V0KCRyb2xlcy10eXBvLWZvbnQtc2l6ZXMtYmFzZSwgJ21pbicpO1xuICAkbWF4LWZvbnQtc2l6ZTogJG1pbi1mb250LXNpemUgKiBtYXAtZ2V0KCRyb2xlcy1yYXRpb3MsICd0ZXh0LWdyb3d0aCcpO1xuXG4gIEBpbmNsdWRlIHNjYWxlcihmb250LXNpemUsICRtaW4tZm9udC1zaXplLCAkbWF4LWZvbnQtc2l6ZSk7XG4gIEBpbmNsdWRlIHBhZGRpbmctdihlbShtYXRoLmRpdihtYXAtZ2V0KCRyb2xlcy1zcGFjZXMsICdzZWN0aW9uJyksIDIpKSk7XG4gIEBpbmNsdWRlIG1hcmdpbi1oKGVtKCRvZmZzZXQgKiAtMSkpO1xuXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW4tYm90dG9tOiBtYXRoLmRpdihtYXAtZ2V0KCRyb2xlcy1zcGFjZXMsICdzZWN0aW9uJyksIDIpO1xuICBib3JkZXItdG9wOiBwaXhlbGF0ZSgxcHgpIGRvdHRlZFxuICAgIG1hcC1nZXQtZGVlcCgkc3dhdGNoZXMtY29sb3JzLCAnY29ybmZsb3dlcicsICdiYXNlJyk7XG5cbiAgJixcbiAgPiAqIHtcbiAgICBAaW5jbHVkZSBtYXJnaW4taChlbSgkb2Zmc2V0KSk7XG5cbiAgICBkaXNwbGF5OiBmbGV4O1xuICB9XG5cbiAgYSB7XG4gICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoJGljb24tc2l6ZSk7XG4gICAgQGluY2x1ZGUgbWFyZ2luLWgoZW0oJG9mZnNldCkpO1xuXG4gICAgZGlzcGxheTogYmxvY2s7XG5cbiAgICBAbWVkaWEgKGhvdmVyOiBob3Zlcikge1xuICAgICAgJixcbiAgICAgIHN2ZyB7XG4gICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjFzIGVhc2UtaW4tb3V0O1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpO1xuXG4gICAgICAgIHN2ZyB7XG4gICAgICAgICAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDAgMnB4IHJnYmEoIzAwMCwgMC44KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdmcge1xuICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKDEwMCUpO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEF1dGhvclxuLmF1dGhvciB7XG4gIC8vXG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IENvcHlyaWdodFxuLmNvcHlyaWdodCB7XG4gIC8vXG59XG4iLCIvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBQYWdlcyA+IEhPTUVcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuQHVzZSAnc2FzczptYXRoJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBDT0xPUlNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTGlnaHRcbkBmdW5jdGlvbiBsaWdodCgkY29sb3IsICRwZXJjZW50KSB7XG4gIEByZXR1cm4gbWl4KCNmZmYsICRjb2xvciwgJHBlcmNlbnQpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBEYXJrXG5AZnVuY3Rpb24gZGFyaygkY29sb3IsICRwZXJjZW50KSB7XG4gIEByZXR1cm4gbWl4KCMwMDAsICRjb2xvciwgJHBlcmNlbnQpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IE1BUFNcblxuJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5nczogZmFsc2UgIWRlZmF1bHQ7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgRGVlcCBXYXJuaW5nXG4vLyBEaXNwbGF5cyBhIHdhcm5pbmcgaWYgdGhlIHJldHJpZXZlZCB2YWx1ZSBpcyBgbnVsbGBcbkBmdW5jdGlvbiBtYXAtZ2V0LWRlZXAtd2FybmluZygkd2FybiwgJGdldCwgJGtleSkge1xuICBAaWYgbm90ICRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3Mge1xuICAgIEBpZiAkZ2V0ID09IG51bGwge1xuICAgICAgQHdhcm4gJ01hcCBoYXMgbm8gdmFsdWUgZm9yIGtleSBzZWFyY2ggYCN7JHdhcm59YCc7XG4gICAgfSBAZWxzZSBpZiB0eXBlLW9mKCRnZXQpICE9ICdtYXAnIHtcbiAgICAgIEB3YXJuICdOb24tbWFwIHZhbHVlIGZvdW5kIGZvciBrZXkgc2VhcmNoIGAjeyR3YXJufWAsIGNhbm5vdCBzZWFyY2ggZm9yIGtleSBgI3ska2V5fWAnO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gbnVsbDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIEdldCBEZWVwXG4vLyBHaXZlbiBhIG1hcCBhbmQgYSBsaXN0IG9mIGtleXMsIGZpbmQgdGhlIHZhbHVlIGF0IHRoZSBnaXZlbiBrZXlcbkBmdW5jdGlvbiBtYXAtZ2V0LWRlZXAoJG1hcCwgJGtleXMuLi4pIHtcbiAgQGlmIGxlbmd0aCgka2V5cykgPT0gMSB7XG4gICAgJGtleXM6IG50aCgka2V5cywgMSk7XG4gIH1cblxuICAkd2FybjogJyN7bnRoKCRrZXlzLCAxKX0nO1xuICAkbGVuZ3RoOiBsZW5ndGgoJGtleXMpO1xuICAkZ2V0OiBtYXAtZ2V0KCRtYXAsIG50aCgka2V5cywgMSkpO1xuXG4gIEBpZiAkbGVuZ3RoID4gMSB7XG4gICAgQGZvciAkaSBmcm9tIDIgdGhyb3VnaCAkbGVuZ3RoIHtcbiAgICAgIEBpZiAkZ2V0ICE9IG51bGwgYW5kIHR5cGUtb2YoJGdldCkgPT0gJ21hcCcge1xuICAgICAgICAkd2FybjogJHdhcm4gKyAnLT4je250aCgka2V5cywgJGkpfSc7XG4gICAgICAgICRnZXQ6IG1hcC1nZXQoJGdldCwgbnRoKCRrZXlzLCAkaSkpO1xuXG4gICAgICAgIEBpZiAkZ2V0ID09IG51bGwge1xuICAgICAgICAgIEByZXR1cm4gbWFwLWdldC1kZWVwLXdhcm5pbmcoJHdhcm4sICRnZXQsIG50aCgka2V5cywgJGkpKTtcbiAgICAgICAgfVxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIEByZXR1cm4gbWFwLWdldC1kZWVwLXdhcm5pbmcoJHdhcm4sICRnZXQsIG50aCgka2V5cywgJGkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRnZXQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgS2V5c1xuQGZ1bmN0aW9uIGdldC1rZXlzKCRrZXlzLCAkY291bnRlcikge1xuICAkcmV0dXJuOiAoKTtcblxuICBAZm9yICRpIGZyb20gMSB0byAkY291bnRlciB7XG4gICAgJHJldHVybjogYXBwZW5kKCRyZXR1cm4sIG50aCgka2V5cywgJGkpKTtcbiAgfVxuXG4gIEByZXR1cm4gJHJldHVybjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIEdldCBQcmV2aW91cyBLZXlcbkBmdW5jdGlvbiBtYXAtZ2V0LXByZXYta2V5KCRtYXAsICRrZXkpIHtcbiAgJGluZGV4OiBpbmRleCgkbWFwLCAka2V5KTtcbiAgJHByZXY6ICRpbmRleCAtIDE7XG4gICRyZXN1bHQ6IGlmKCRwcmV2ID4gMCwgbnRoKCRtYXAsICRwcmV2KSwgbnVsbCk7XG5cbiAgQHJldHVybiAkcmVzdWx0O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgU2V0XG5AZnVuY3Rpb24gbWFwLXNldCgkbWFwLCAka2V5LCAkdmFsdWUpIHtcbiAgQHJldHVybiBtYXAtbWVyZ2UoXG4gICAgJG1hcCxcbiAgICAoXG4gICAgICAka2V5OiAkdmFsdWVcbiAgICApXG4gICk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBTZXQgRGVlcFxuQGZ1bmN0aW9uIG1hcC1zZXQtZGVlcCgkbWFwLCAka2V5cywgJHZhbHVlKSB7XG4gICRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3M6IHRydWUgIWdsb2JhbDtcbiAgJGxlbmd0aDogbGVuZ3RoKCRrZXlzKTtcbiAgJGdldC1rZXlzOiAoKTtcbiAgJG1hcC1sZXZlbDogKCk7XG5cbiAgQGlmICRsZW5ndGggPiAxIHtcbiAgICAkZ2V0LWtleXM6IGdldC1rZXlzKCRrZXlzLCAkbGVuZ3RoKTtcbiAgICAkbWFwLWxldmVsOiBtYXAtZ2V0LWRlZXAoJG1hcCwgJGdldC1rZXlzKTtcbiAgfVxuXG4gICRtZXJnZTogKFxuICAgIG50aCgka2V5cywgJGxlbmd0aCk6ICR2YWx1ZVxuICApO1xuXG4gIEBpZiAkbWFwLWxldmVsIHtcbiAgICAkbWVyZ2U6IG1hcC1tZXJnZSgkbWFwLWxldmVsLCAkbWVyZ2UpO1xuICB9XG5cbiAgQGZvciAkaSBmcm9tICgkbGVuZ3RoICogLTEgKyAxKSB0aHJvdWdoIC0xIHtcbiAgICAkajogYWJzKCRpKTtcbiAgICAka2V5OiBudGgoJGtleXMsICRqKTtcblxuICAgIC8vIEBkZWJ1ZyAkZ2V0LWtleXM7XG5cbiAgICBAaWYgJGogPiAxIHtcbiAgICAgICRnZXQta2V5czogZ2V0LWtleXMoJGtleXMsICRqKTtcbiAgICAgICRtYXAtbGV2ZWw6IG1hcC1nZXQtZGVlcCgkbWFwLCAkZ2V0LWtleXMpO1xuXG4gICAgICBAaWYgJG1hcC1sZXZlbCB7XG4gICAgICAgICRtZXJnZTogbWFwLW1lcmdlKFxuICAgICAgICAgICRtYXAtbGV2ZWwsXG4gICAgICAgICAgKFxuICAgICAgICAgICAgJGtleTogJG1lcmdlXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSBAZWxzZSB7XG4gICAgICAgICRtZXJnZTogKFxuICAgICAgICAgICRrZXk6ICRtZXJnZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gQGVsc2Uge1xuICAgICAgJG1lcmdlOiAoXG4gICAgICAgICRrZXk6ICRtZXJnZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAkbWFwOiBtYXAtbWVyZ2UoJG1hcCwgJG1lcmdlKTtcblxuICAkcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzOiBmYWxzZSAhZ2xvYmFsO1xuXG4gIEByZXR1cm4gJG1hcDtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBVTklUU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBQcm9ncmVzc2l2ZSBjYWxjXG5AZnVuY3Rpb24gZ2V0LXByb2dyZXNzaXZlLWNhbGMoXG4gICRtaW4tb2JqLXNpemUsXG4gICRtYXgtb2JqLXNpemUsXG4gICRtaW4tdnAsXG4gICRtYXgtdnAsXG4gICR2cC11bml0OiB2d1xuKSB7XG4gIEByZXR1cm4gY2FsYyhcbiAgICAjeyRtaW4tb2JqLXNpemV9ICsgI3tzdHJpcC11bml0KCRtYXgtb2JqLXNpemUgLSAkbWluLW9iai1zaXplKX0gKlxuICAgICAgKCgxMDAjeyR2cC11bml0fSAtICN7JG1pbi12cH0pIC8gI3tzdHJpcC11bml0KCRtYXgtdnAgLSAkbWluLXZwKX0pXG4gICk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogVU5JVFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU3RyaXAgdW5pdFxuQGZ1bmN0aW9uIHN0cmlwLXVuaXQoJG51bWJlcikge1xuICBAaWYgdHlwZS1vZigkbnVtYmVyKSA9PSAnbnVtYmVyJyBhbmQgbm90IHVuaXRsZXNzKCRudW1iZXIpIHtcbiAgICBAcmV0dXJuICRudW1iZXIgLyAoJG51bWJlciAqIDAgKyAxKTtcbiAgfVxuXG4gIEByZXR1cm4gJG51bWJlcjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IGVtL3JlbSB1bml0XG5AZnVuY3Rpb24gZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIGVtKTtcbn1cblxuQGZ1bmN0aW9uIHJlbSgkbnVtLCAkZm9udC1zaXplOiBmYWxzZSkge1xuICBAcmV0dXJuIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgcmVtKTtcbn1cblxuQGZ1bmN0aW9uIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgJHVuaXQpIHtcbiAgJGZzOiAxMHB4O1xuXG4gIEBpZiAkZm9udC1zaXplIHtcbiAgICAkZnM6ICRmb250LXNpemU7XG4gIH1cbiAgQGVsc2UgaWYgJGJhc2UtaHRtbC1mb250LXNpemUgeyAvLyBtYWtlIHN1cmUgdG8gZGVmaW5lIHRoaXMgdmFyaWFibGUgb24geW91ciBvd25cbiAgICAkZnM6ICRiYXNlLWh0bWwtZm9udC1zaXplO1xuICB9XG5cbiAgQHJldHVybiAje3N0cmlwLXVuaXQoJG51bSkgLyBzdHJpcC11bml0KCRmcyl9I3skdW5pdH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBzY3JlZW4gcGVyY2VudFxuQGZ1bmN0aW9uIGdldC1zY3JlZW4tcGVyY2VudCgkd2lkdGgsICRzY3JlZW4pIHtcbiAgQHJldHVybiB1bnF1b3RlKCcjeyR3aWR0aCAqIDEwMCAvICRzY3JlZW59JScpO1xufVxuXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IFotSU5ERVhFU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZW5lcmF0b3JcbkBmdW5jdGlvbiB6LWluZGV4KCRtYXAsICRrZXlzKSB7XG4gICRmb3VuZC1pbmRleDogbnVsbDtcblxuICBAZWFjaCAka2V5IGluICRrZXlzIHtcbiAgICBAaWYgKHR5cGUtb2YoJG1hcCkgPT0gJ21hcCcpIHtcbiAgICAgICRmb3VuZC1pbmRleDogaW5kZXgobWFwLWtleXMoJG1hcCksICRrZXkpO1xuICAgICAgJG1hcDogbWFwLWdldCgkbWFwLCAka2V5KTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRmb3VuZC1pbmRleDogaW5kZXgoJG1hcCwgJGtleSk7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkZm91bmQtaW5kZXg7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFNlcnZlclxuQGZ1bmN0aW9uIHooJG1hcCwgJGtleXMuLi4pIHtcbiAgQHJldHVybiB6LWluZGV4KCRtYXAsICRrZXlzKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBGT1JNU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBJbnB1dCBwbGFjZWhvbGRlclxuQG1peGluIGlucHV0LXBsYWNlaG9sZGVyKCRjb2wsICRzdHlsZTogaXRhbGljKSB7XG4gICY6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2w7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICB9XG4gICY6Oi1tb3otcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxuICAmOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2w7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICB9XG4gICY6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxufVxuXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IFBPU0lUSU9OU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBBYnNvbHV0ZSBjZW50ZXJlZFxuQG1peGluIGFic29sdXRlLWNlbnRlcmVkKCR0eXBlOiBhYnNvbHV0ZSwgJHBvczogNTAlKSB7XG4gIHBvc2l0aW9uOiAkdHlwZTtcbiAgdG9wOiAkcG9zO1xuICBsZWZ0OiAkcG9zO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQWJzb2x1dGUgY2VudGVyZWQgWFxuQG1peGluIGFic29sdXRlLWNlbnRlcmVkLXgoJHR5cGU6IGFic29sdXRlLCAkcG9zOiA1MCUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICBsZWZ0OiAkcG9zO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEFic29sdXRlIGNlbnRlcmVkIFlcbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXJlZC15KCR0eXBlOiBhYnNvbHV0ZSwgJHBvczogNTAlKSB7XG4gIHBvc2l0aW9uOiAkdHlwZTtcbiAgdG9wOiAkcG9zO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogU0hPUlRIQU5EU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBQb3NpdGlvbnNcbkBtaXhpbiBwb3NpdGlvbi1zdHJldGNoZWQoJHR5cGU6IGFic29sdXRlKSB7XG4gIHBvc2l0aW9uOiAkdHlwZTtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBEaW1lbnNpb25zXG5AbWl4aW4gZGltZW5zaW9ucy1zcXVhcmUoJHZhbHVlKSB7XG4gIHdpZHRoOiAkdmFsdWU7XG4gIGhlaWdodDogJHZhbHVlO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBQYWRkaW5nXG5AbWl4aW4gcGFkZGluZy12KCR2YWx1ZSkge1xuICBwYWRkaW5nLXRvcDogJHZhbHVlO1xuICBwYWRkaW5nLWJvdHRvbTogJHZhbHVlO1xufVxuXG5AbWl4aW4gcGFkZGluZy1oKCR2YWx1ZSkge1xuICBwYWRkaW5nLXJpZ2h0OiAkdmFsdWU7XG4gIHBhZGRpbmctbGVmdDogJHZhbHVlO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXJnaW5cbkBtaXhpbiBtYXJnaW4tdigkdmFsdWUpIHtcbiAgbWFyZ2luLXRvcDogJHZhbHVlO1xuICBtYXJnaW4tYm90dG9tOiAkdmFsdWU7XG59XG5cbkBtaXhpbiBtYXJnaW4taCgkdmFsdWUpIHtcbiAgbWFyZ2luLXJpZ2h0OiAkdmFsdWU7XG4gIG1hcmdpbi1sZWZ0OiAkdmFsdWU7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEJvcmRlclxuQG1peGluIGJvcmRlci12KCR2YWx1ZSkge1xuICBib3JkZXItdG9wOiAkdmFsdWU7XG4gIGJvcmRlci1ib3R0b206ICR2YWx1ZTtcbn1cblxuQG1peGluIGJvcmRlci1oKCR2YWx1ZSkge1xuICBib3JkZXItcmlnaHQ6ICR2YWx1ZTtcbiAgYm9yZGVyLWxlZnQ6ICR2YWx1ZTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBUWVBPR1JBUEhZXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEZvbnQgc21vb3RoaW5nXG5AbWl4aW4gZm9udC1zbW9vdGhpbmcoJHZhbHVlOiBhbnRpYWxpYXNlZCkge1xuICBAaWYgJHZhbHVlID09IGFudGlhbGlhc2VkIHtcbiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICB9IEBlbHNlIHtcbiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBzdWJwaXhlbC1hbnRpYWxpYXNlZDtcbiAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogYXV0bztcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBUZXh0IHVwcGVyY2FzZVxuQG1peGluIHRleHQtdXBwZXJjYXNlKCkge1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAtbW96LWZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2Nhc2UnO1xuICAtd2Via2l0LWZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2Nhc2UnO1xuICBmb250LWZlYXR1cmUtc2V0dGluZ3M6ICdjYXNlJyBvbjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU2VsZWN0aW9uXG5AbWl4aW4gc2VsZWN0aW9uKCRjb2wpIHtcbiAgJGJncjogaWYoJGNvbCAhPSB0cmFuc3BhcmVudCwgcmdiYSgkY29sLCAwLjUpLCByZ2JhKDAsIDAsIDAsIDApKTtcblxuICAmOjotbW96LXNlbGVjdGlvbiB7XG4gICAgYmFja2dyb3VuZDogJGJncjtcbiAgfVxuXG4gICY6OnNlbGVjdGlvbiB7XG4gICAgYmFja2dyb3VuZDogJGJncjtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBCQVNFXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEltcG9ydHNcbkBpbXBvcnQgJy4uLy4uL2RlZnMvYnJhbmQuanMnO1xuQGltcG9ydCAnLi4vLi4vZGVmcy93ZWJzaXRlLmpzJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRm9udCBzaXplXG5AZnVuY3Rpb24gcm9sZSgkbWFwLCAkdmFsdWUpIHtcbiAgJHItbWFwOiBtYXAtZ2V0KCR2YWx1ZSwgJ21hcCcpO1xuICAkci12YWx1ZTogbWFwLWdldCgkdmFsdWUsICd2YWx1ZScpO1xuICBAcmV0dXJuIG1hcC1nZXQoJHItbWFwLCAkci12YWx1ZSk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9ucyA+IENBTENcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgdmFsdWUgYmFzZWQgb24gdGhlIGJhc2UgZm9udCBzaXplXG5AZnVuY3Rpb24gYmFzZSgkdmFsdWUpIHtcbiAgQHJldHVybiBtYXRoLmRpdigkdmFsdWUsIG1hcC1nZXQoJHJvbGVzLXJhdGlvcywgJ2xheW91dC1ncm93dGgnKSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFByb2dyZXNzaXZlIGNhbGNcbkBmdW5jdGlvbiBnZXQtcHJvZ3Jlc3NpdmUtY2FsYyhcbiAgJG1pbi1vYmotc2l6ZSxcbiAgJG1heC1vYmotc2l6ZSxcbiAgJG1pbi12cCxcbiAgJG1heC12cCxcbiAgJHZwLXVuaXQ6IHZ3XG4pIHtcbiAgQHJldHVybiBjYWxjKFxuICAgICN7cGl4ZWxhdGUoJG1pbi1vYmotc2l6ZSl9ICsgI3tzdHJpcC11bml0KCRtYXgtb2JqLXNpemUgLSAkbWluLW9iai1zaXplKX0gKlxuICAgICAgKFxuICAgICAgICAoMTAwI3skdnAtdW5pdH0gLSAje3BpeGVsYXRlKCRtaW4tdnApfSkgLyAje3N0cmlwLXVuaXQoXG4gICAgICAgICAgICAkbWF4LXZwIC0gJG1pbi12cFxuICAgICAgICAgICl9XG4gICAgICApXG4gICk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9ucyA+IFVOSVRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU3RyaXAgdW5pdFxuQGZ1bmN0aW9uIHN0cmlwLXVuaXQoJG51bWJlcikge1xuICBAaWYgdHlwZS1vZigkbnVtYmVyKSA9PSAnbnVtYmVyJyBhbmQgbm90IHVuaXRsZXNzKCRudW1iZXIpIHtcbiAgICBAcmV0dXJuIG1hdGguZGl2KCRudW1iZXIsICgkbnVtYmVyICogMCArIDEpKTtcbiAgfVxuXG4gIEByZXR1cm4gJG51bWJlcjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IFB4IHVuaXRcbkBmdW5jdGlvbiBwaXhlbGF0ZSgkdmFsdWUpIHtcbiAgQHJldHVybiAje3N0cmlwLXVuaXQoJHZhbHVlKX1QeDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IGVtL3JlbSB1bml0XG5AZnVuY3Rpb24gZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIGVtKTtcbn1cblxuQGZ1bmN0aW9uIHJlbSgkbnVtLCAkZm9udC1zaXplOiBmYWxzZSkge1xuICBAcmV0dXJuIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgcmVtKTtcbn1cblxuQGZ1bmN0aW9uIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgJHVuaXQpIHtcbiAgJGZzOiAxMHB4O1xuXG4gIEBpZiAkZm9udC1zaXplIHtcbiAgICAkZnM6ICRmb250LXNpemU7XG4gIH0gQGVsc2Uge1xuICAgICRmczogbWFwLWdldCgkdHlwb2dyYXBoeSwgJ2Jhc2VfZm9udF9zaXplJyk7XG4gIH1cblxuICBAcmV0dXJuICN7bWF0aC5kaXYoc3RyaXAtdW5pdCgkbnVtKSwgc3RyaXAtdW5pdCgkZnMpKX0jeyR1bml0fTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRGF0YSA+IFNXQVRDSEVTXG5cbkBpbXBvcnQgJy4uLy4uL2RlZnMvc3dhdGNoZXMvaW5kZXguanMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvc3dhdGNoZXMvc3dhdGNoZXNfYnJlYWtwb2ludHMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvc3dhdGNoZXMvc3dhdGNoZXNfcmF0aW9zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX3NjcmVlbnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvc3dhdGNoZXMvc3dhdGNoZXNfc3BhY2VzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRGF0YSA+IFJPTEVTXG5cbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2JvcmRlcnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfYnJlYWtwb2ludHMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfY29sb3JzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2RpbWVuc2lvbnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfcmF0aW9zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3NjcmVlbnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfc2hhZG93cyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19zcGFjZXMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfdHlwb2dyYXBoeSc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGlucyA+IFNDQUxBQklMSVRZXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU2NhbGVyXG5AbWl4aW4gc2NhbGVyKFxuICAkcHJvcGVydHksXG4gICRtaW4tc2l6ZSxcbiAgJG1heC1zaXplLFxuICAkbWluLXZ3OiBtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWluJyksXG4gICRtYXgtdnc6IG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtYXgnKVxuKSB7XG4gICN7JHByb3BlcnR5fTogI3tzdHJpcC11bml0KG1hdGguZGl2KCgkbWluLXZ3ICogMC45Nzk2KSAqICRtaW4tc2l6ZSwgMTAwMCkpfXZ3OyAvLyAwLjk3OTYgZml4ZXMgd3JvbmcgY2FsY3VsYXRpb25zIGluIENocm9tZVxuXG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6ICRtaW4tdncpIHtcbiAgICAjeyRwcm9wZXJ0eX06IGdldC1wcm9ncmVzc2l2ZS1jYWxjKCRtaW4tc2l6ZSwgJG1heC1zaXplLCAkbWluLXZ3LCAkbWF4LXZ3KTtcbiAgfVxuXG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6ICRtYXgtdncpIHtcbiAgICAjeyRwcm9wZXJ0eX06IHBpeGVsYXRlKCRtYXgtc2l6ZSk7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gUGxhY2Vob2xkZXJzID4gU0NBTEFCSUxJVFlcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBOZWdhdGl2ZVxuJXBoLW5lZ2F0aXZlIHtcbiAgaDEsXG4gIGgyLFxuICBoMyxcbiAgaDQsXG4gIGg1LFxuICBoNixcbiAgcCB7XG4gICAgY29sb3I6IG1hcC1nZXQoJHJvbGVzLWNvbC10ZXh0cywgJ25lZ2F0aXZlJyk7XG4gIH1cblxuICAubWV0YSB7XG4gICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkc3dhdGNoZXMtY29sb3JzLCAnaG9uZXkteWVsbG93JywgJ2xpZ2h0Jyk7XG4gIH1cblxuICAudGV4dC1saW5rIHtcbiAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdub3JtYWwnKTtcbiAgICBib3JkZXItYm90dG9tOiBwaXhlbGF0ZSgxcHgpIGRvdHRlZFxuICAgICAgcmdiYShtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ25vcm1hbCcpLCAwLjMzKTtcblxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnaG92ZXInKTtcbiAgICB9XG5cbiAgICAmOmFjdGl2ZSB7XG4gICAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdhY3RpdmUnKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgV2F2ZVxuJXBoLXdhdmUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDUwJTtcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi13aWR0aDogbWF0aC5kaXYobWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21heCcpLCAyKTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuXG4gID4gc3ZnIHtcbiAgICBAaW5jbHVkZSBkaW1lbnNpb25zLXNxdWFyZSgxMDAlKTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBIZWFkIHdhdmVcbiVwaC1oZWFkLXdhdmUge1xuICAkd2F2ZS1oZWlnaHQ6IGJhc2UobWFwLWdldCgkcm9sZXMtZGltZW5zaW9ucy13YXZlcywgJ2hlYWRlcicpKTtcblxuICAud2F2ZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgIHRvcDogY2FsYygxMDAlIC0gMVB4KTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IGVtKCR3YXZlLWhlaWdodCk7XG5cbiAgICAuaW5uZXIge1xuICAgICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG5cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAgIHN2ZyB7XG4gICAgICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKDEwMCUpO1xuXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICBtaW4td2lkdGg6IG1hdGguZGl2KG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtYXgnKSwgMik7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAa2V5ZnJhbWVzIHNsaWRlIHtcbiAgICBmcm9tIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgIH1cblxuICAgIHRvIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIDApO1xuICAgIH1cbiAgfVxuXG4gIC5zY3JvbGwtYnRuIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm90dG9tOiAyMHB4O1xuICAgIGxlZnQ6IDUwJTtcbiAgICB6LWluZGV4OiAxO1xuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQtZGVlcCgkc3dhdGNoZXMtY29sb3JzLCAnY29ybmZsb3dlcicsICdiYXNlJyk7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgYW5pbWF0aW9uOiBzbGlkZSAxcyBlYXNlLWluLW91dCBpbmZpbml0ZSBhbHRlcm5hdGU7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnaG92ZXInKTtcbiAgICB9XG5cbiAgICAmOmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2FjdGl2ZScpO1xuICAgIH1cblxuICAgIHN2ZyB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuICAgIH1cblxuICAgIGJvZHk6bm90KC5zY3JvbGxhYmxlKSAmIHtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgVmFyaWFibGVzXG4kbWVudS1oZWlnaHQ6IGJhc2UobWFwLWdldCgkcm9sZXMtZGltZW5zaW9ucy1oZWFkZXIsICdtZW51JykpO1xuJGhlYWRlci13YXZlLWhlaWdodDogYmFzZShtYXAtZ2V0KCRyb2xlcy1kaW1lbnNpb25zLXdhdmVzLCAnaGVhZGVyJykpO1xuXG4lcGgtc2VjdGlvbi13YXZlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIC53YXZlIHtcbiAgICBAZXh0ZW5kICVwaC13YXZlO1xuXG4gICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgYm90dG9tOiBjYWxjKDEwMCUgLSAxUHgpO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFJvb3RcbjpnbG9iYWwoLmhvbWUpIHtcbiAgLmhlYWRlciB7XG4gICAgJGJhc2U6IG1hcC1nZXQtZGVlcCgkc3dhdGNoZXMtY29sb3JzLCAncHJ1c3NpYW4tYmx1ZScsICdiYXNlJyk7XG4gICAgJGRhcms6IG1hcC1nZXQtZGVlcCgkc3dhdGNoZXMtY29sb3JzLCAncHJ1c3NpYW4tYmx1ZScsICdkYXJrJyk7XG5cbiAgICBtaW4taGVpZ2h0OiBjYWxjKFxuICAgICAgMTAwdmggLSAje2VtKCRoZWFkZXItd2F2ZS1oZWlnaHQgKyBtYXAtZ2V0KCRyb2xlcy1zcGFjZXMsICdwYW5lbCcpKX1cbiAgICApO1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICN7JGJhc2V9IDAlLCAjeyRkYXJrfSA3NSUpO1xuICB9XG5cbiAgc2VjdGlvbiB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgPiAud3JwLWxheW91dCB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB6LWluZGV4OiAxO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIH1cbiAgfVxuXG4gIC5jb250ZW50IHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0LWRlZXAoJHN3YXRjaGVzLWNvbG9ycywgJ2NvbHVtYmlhLWJsdWUnLCAnbGlnaHQnKTtcblxuICAgID4gc2VjdGlvbiB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleDogMTtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICB9XG4gIH1cblxuICAudGV4dCB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cblxuICAucHJldmlvdXMge1xuICAgIG1hcmdpbi10b3A6IG1hcC1nZXQoJHJvbGVzLXNwYWNlcywgJ3NlY3Rpb24nKTtcblxuICAgIC5lcGlzb2Rlcy1saXN0IHtcbiAgICAgIG1hcmdpbi1ib3R0b206IG1hcC1nZXQoJHJvbGVzLXNwYWNlcywgJ2VwaXNvZGUtaXRlbXMnKSAqIC0xO1xuICAgIH1cblxuICAgIC50aXRsZSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIG1hcmdpbi1ib3R0b206IG1hcC1nZXQoJHN3YXRjaGVzLXNwYWNlcywgJzE1Jyk7XG4gICAgfVxuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEluZm9cbi5pbmZvIHtcbiAgcGFkZGluZy10b3A6IGVtKCRtZW51LWhlaWdodCArIG1hdGguZGl2KCRoZWFkZXItd2F2ZS1oZWlnaHQsIDIpKTtcbiAgcGFkZGluZy1ib3R0b206IG1hcC1nZXQoJHJvbGVzLXNwYWNlcywgJ3NlY3Rpb24nKTtcblxuICBoMSB7XG4gICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkc3dhdGNoZXMtY29sb3JzLCAnaG9uZXkteWVsbG93JywgJ2Jhc2UnKTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBOZXcgZXBpc29kZVxuLm5ldy1lcGlzb2RlIHtcbiAgJGJnci1jb2xvcjogbWFwLWdldCgkcm9sZXMtY29sLWJhY2tncm91bmRzLCAnY2FyZCcpO1xuICAkYm9yZGVyLXdpZHRoOiAycHg7XG4gICRpbm5lci1zcGFjZTogbWFwLWdldCgkcm9sZXMtc3BhY2VzLCAncGFuZWwnKSAtICRib3JkZXItd2lkdGg7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luLXRvcDogbWFwLWdldCgkcm9sZXMtc3BhY2VzLCAncGFuZWwnKTtcblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiBtYXAtZ2V0KCRyb2xlcy1icmVha3BvaW50cywgJ3R3by1jb2x1bW5zJykgLSAxKSB7XG4gICAgbWF4LXdpZHRoOiBtYXAtZ2V0KCRyb2xlcy1kaW1lbnNpb25zLWNvbnRlbnQsICdjYXJkJyk7XG4gICAgbWFyZ2luLWlubGluZTogYXV0bztcbiAgfVxuXG4gIC5jYXJkIHtcbiAgICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgKi9cbiAgICAkYm9yZGVyOiBtYXAtZ2V0LWRlZXAoJHN3YXRjaGVzLWNvbG9ycywgJ21vbm9jaHJvbWUnLCB3aGl0ZSk7XG5cbiAgICBhIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gICAgICBib3JkZXI6IHBpeGVsYXRlKDFweCkgc29saWQgJGJvcmRlcjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IG1hcC1nZXQoJHJvbGVzLWJvcmRlcnMtcmFkaXVzZXMsICdibG9jaycpO1xuXG4gICAgICBAbWVkaWEgKGhvdmVyOiBob3Zlcikge1xuICAgICAgICAmOmhvdmVyOjpiZWZvcmUge1xuICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAubWV0YSB7XG4gICAgICB0b3A6IHBpeGVsYXRlKDFweCk7XG4gICAgICBib3JkZXItcmFkaXVzOiBtYXAtZ2V0KCRyb2xlcy1ib3JkZXJzLXJhZGl1c2VzLCAnYmxvY2snKSAwO1xuICAgIH1cblxuICAgIC5ib2R5IHtcbiAgICAgIG1heC13aWR0aDogbm9uZTtcbiAgICAgIHBhZGRpbmc6ICRpbm5lci1zcGFjZTtcbiAgICB9XG5cbiAgICAudGh1bWIge1xuICAgICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG5cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHBhZGRpbmctdG9wOiAwO1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgZmlsdGVyOiBzZXBpYSgxKSBvcGFjaXR5KDAuMik7XG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiBtYXAtZ2V0KCRyb2xlcy1ib3JkZXJzLXJhZGl1c2VzLCAnYmxvY2snKTtcblxuICAgICAgc3Bhbjo6YmVmb3JlIHtcbiAgICAgICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG4gICAgICAgIEBpbmNsdWRlIHBvc2l0aW9uLXN0cmV0Y2hlZCgpO1xuXG4gICAgICAgIHotaW5kZXg6IDE7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoXG4gICAgICAgICAgdG8gYm90dG9tLFxuICAgICAgICAgICN7cmdiYShcbiAgICAgICAgICAgICAgbGlnaHRlbihcbiAgICAgICAgICAgICAgICBtYXAtZ2V0LWRlZXAoJHN3YXRjaGVzLWNvbG9ycywgJ2hvbmV5LXllbGxvdycsICdsaWdodCcpLFxuICAgICAgICAgICAgICAgIDI1JVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAwLjc1XG4gICAgICAgICAgICApfSA0NSUsXG4gICAgICAgICAgI3tyZ2JhKGxpZ2h0ZW4oJGJnci1jb2xvciwgNSUpLCAwLjEpfSA2NiVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuaGVhZGluZyB7XG4gICAgZm9udC1zaXplOiBtYXAtZ2V0KCRyb2xlcy10eXBvLWZvbnQtc2l6ZXMsICd0aXRsZScpICFpbXBvcnRhbnQ7XG5cbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiBtYXAtZ2V0KCRyb2xlcy1icmVha3BvaW50cywgJ3R3by1jb2x1bW5zJykpIHtcbiAgICAgIHBhZGRpbmctaW5saW5lOiAycmVtO1xuICAgIH1cbiAgfVxuXG4gIC5tZXRhLFxuICAuYm9keSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDE7XG4gIH1cblxuICAuaGVhZGluZyxcbiAgLnRleHQsXG4gIC5wbGF5ZXIgaWZyYW1lIHtcbiAgICBtYXgtd2lkdGg6IGJhc2UobWFwLWdldCgkcm9sZXMtZGltZW5zaW9ucy1jb250ZW50LCAnYXJ0aWNsZScpKTtcbiAgICBtYXJnaW4taW5saW5lOiBhdXRvO1xuICB9XG5cbiAgLnRleHQge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAyO1xuXG4gICAgcCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIH1cbiAgfVxuXG4gIC5wbGF5ZXIge1xuICAgIHBhZGRpbmc6IDAgJGlubmVyLXNwYWNlICRpbm5lci1zcGFjZSAqIDI7XG5cbiAgICBpZnJhbWUge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgYm9yZGVyOiAwO1xuICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjFzIGVhc2UtaW4tb3V0O1xuICAgIH1cbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBFcGlzb2Rlc1xuLmVwaXNvZGVzIHtcbiAgcGFkZGluZy1ib3R0b206IGJhc2UobWFwLWdldCgkcm9sZXMtZGltZW5zaW9ucy13YXZlcywgJ3doYXQnKSAqIDEuMikgKlxuICAgIG1hcC1nZXQoJHJvbGVzLXJhdGlvcywgJ3RleHQtZ3Jvd3RoJyk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFdoYXRcbi53aGF0IHtcbiAgJGxpbmstY29sb3I6IG1hcC1nZXQtZGVlcCgkc3dhdGNoZXMtY29sb3JzLCAnZHV0Y2gtd2hpdGUnLCAnYmFzZScpO1xuICAkc2VjdGlvbi1jb2xvcjogbWFwLWdldCgkcm9sZXMtY29sLWJhY2tncm91bmRzLCAnd2hhdCcpO1xuXG4gIEBleHRlbmQgJXBoLXNlY3Rpb24td2F2ZTtcbiAgQGV4dGVuZCAlcGgtbmVnYXRpdmU7XG5cbiAgcGFkZGluZy1ib3R0b206IGJhc2UobWFwLWdldCgkcm9sZXMtZGltZW5zaW9ucy13YXZlcywgJ3doZXJlJykpICpcbiAgICBtYXAtZ2V0KCRyb2xlcy1yYXRpb3MsICd0ZXh0LWdyb3d0aCcpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VjdGlvbi1jb2xvcjtcblxuICAmLFxuICAqIHtcbiAgICBAaW5jbHVkZSBzZWxlY3Rpb24obWFwLWdldC1kZWVwKCRzd2F0Y2hlcy1jb2xvcnMsICdibHVlLWdyZWVuJywgJ2Jhc2UnKSk7XG4gIH1cblxuICAudGV4dC1saW5rIHtcbiAgICBjb2xvcjogJGxpbmstY29sb3I7XG4gICAgYm9yZGVyLWJvdHRvbTogcGl4ZWxhdGUoMXB4KSBkb3R0ZWQgcmdiYSgkbGluay1jb2xvciwgMC4zMyk7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiBsaWdodGVuKCRsaW5rLWNvbG9yLCA1JSk7XG4gICAgfVxuXG4gICAgJjphY3RpdmUge1xuICAgICAgY29sb3I6IGxpZ2h0ZW4oJGxpbmstY29sb3IsIDEwJSk7XG4gICAgfVxuICB9XG5cbiAgLnRyYWlsZXItcGxheWVyIHtcbiAgICBtYXJnaW4tdG9wOiAtNXJlbTtcblxuICAgIGEge1xuICAgICAgY29sb3I6ICRzZWN0aW9uLWNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIC53YXZlIHtcbiAgICBoZWlnaHQ6IGJhc2UobWFwLWdldCgkcm9sZXMtZGltZW5zaW9ucy13YXZlcywgJ3doZW4nKSk7XG5cbiAgICBzdmcge1xuICAgICAgZmlsbDogJHNlY3Rpb24tY29sb3I7XG4gICAgfVxuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFdoZXJlXG4ud2hlcmUge1xuICBAZXh0ZW5kICVwaC1zZWN0aW9uLXdhdmU7XG4gIEBleHRlbmQgJXBoLW5lZ2F0aXZlO1xuXG4gIHBhZGRpbmctYm90dG9tOiBiYXNlKG1hcC1nZXQoJHJvbGVzLWRpbWVuc2lvbnMtd2F2ZXMsICd3aGVuJykpICpcbiAgICBtYXAtZ2V0KCRyb2xlcy1yYXRpb3MsICd0ZXh0LWdyb3d0aCcpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0KCRyb2xlcy1jb2wtYmFja2dyb3VuZHMsICd3aGVyZScpO1xuXG4gIC53YXZlIHtcbiAgICBoZWlnaHQ6IGJhc2UobWFwLWdldCgkcm9sZXMtZGltZW5zaW9ucy13YXZlcywgJ3doZXJlJykpICogMS41O1xuXG4gICAgc3ZnIHtcbiAgICAgIGZpbGw6IG1hcC1nZXQoJHJvbGVzLWNvbC1iYWNrZ3JvdW5kcywgJ3doZXJlJyk7XG4gICAgfVxuICB9XG5cbiAgLmljb24ge1xuICAgIG1hcmdpbi10b3A6IC0zcmVtO1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQoJHJvbGVzLWNvbC10ZXh0cywgJ25lZ2F0aXZlJyk7XG5cbiAgICBzdmcge1xuICAgICAgZmlsbDogbWFwLWdldCgkcm9sZXMtY29sLWJhY2tncm91bmRzLCAnd2hlcmUnKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgV2hlblxuLndoZW4ge1xuICAkc2VjdGlvbi1jb2xvcjogbWFwLWdldCgkcm9sZXMtY29sLWJhY2tncm91bmRzLCAnd2hlbicpO1xuXG4gIEBleHRlbmQgJXBoLXNlY3Rpb24td2F2ZTtcbiAgQGV4dGVuZCAlcGgtbmVnYXRpdmU7XG5cbiAgcGFkZGluZy1ib3R0b206IGJhc2UobWFwLWdldCgkcm9sZXMtZGltZW5zaW9ucy13YXZlcywgJ2Zvb3RlcicpKSAqIDEuMztcbiAgYmFja2dyb3VuZC1jb2xvcjogJHNlY3Rpb24tY29sb3I7XG5cbiAgLmljb24ge1xuICAgIG1hcmdpbi10b3A6IC0xLjVyZW07XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldCgkcm9sZXMtY29sLXRleHRzLCAnbmVnYXRpdmUnKTtcblxuICAgIHN2ZyB7XG4gICAgICBmaWxsOiAkc2VjdGlvbi1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAud2F2ZSB7XG4gICAgaGVpZ2h0OiBiYXNlKG1hcC1nZXQoJHJvbGVzLWRpbWVuc2lvbnMtd2F2ZXMsICd3aGVuJykpO1xuXG4gICAgc3ZnIHtcbiAgICAgIGZpbGw6ICRzZWN0aW9uLWNvbG9yO1xuICAgIH1cbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBJY29uXG4uaWNvbiB7XG4gIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKDU2cHgpO1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW46IG1hcC1nZXQoJHN3YXRjaGVzLXNwYWNlcywgJzUnKTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuXG4gIHN2ZyB7XG4gICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoNTAlKTtcbiAgfVxufVxuIiwiLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gUGFnZXMgPiBCTE9HXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcbkB1c2UgJ3Nhc3M6bWF0aCc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogQ09MT1JTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IExpZ2h0XG5AZnVuY3Rpb24gbGlnaHQoJGNvbG9yLCAkcGVyY2VudCkge1xuICBAcmV0dXJuIG1peCgjZmZmLCAkY29sb3IsICRwZXJjZW50KTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRGFya1xuQGZ1bmN0aW9uIGRhcmsoJGNvbG9yLCAkcGVyY2VudCkge1xuICBAcmV0dXJuIG1peCgjMDAwLCAkY29sb3IsICRwZXJjZW50KTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBNQVBTXG5cbiRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3M6IGZhbHNlICFkZWZhdWx0O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IERlZXAgV2FybmluZ1xuLy8gRGlzcGxheXMgYSB3YXJuaW5nIGlmIHRoZSByZXRyaWV2ZWQgdmFsdWUgaXMgYG51bGxgXG5AZnVuY3Rpb24gbWFwLWdldC1kZWVwLXdhcm5pbmcoJHdhcm4sICRnZXQsICRrZXkpIHtcbiAgQGlmIG5vdCAkcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzIHtcbiAgICBAaWYgJGdldCA9PSBudWxsIHtcbiAgICAgIEB3YXJuICdNYXAgaGFzIG5vIHZhbHVlIGZvciBrZXkgc2VhcmNoIGAjeyR3YXJufWAnO1xuICAgIH0gQGVsc2UgaWYgdHlwZS1vZigkZ2V0KSAhPSAnbWFwJyB7XG4gICAgICBAd2FybiAnTm9uLW1hcCB2YWx1ZSBmb3VuZCBmb3Iga2V5IHNlYXJjaCBgI3skd2Fybn1gLCBjYW5ub3Qgc2VhcmNoIGZvciBrZXkgYCN7JGtleX1gJztcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuIG51bGw7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgRGVlcFxuLy8gR2l2ZW4gYSBtYXAgYW5kIGEgbGlzdCBvZiBrZXlzLCBmaW5kIHRoZSB2YWx1ZSBhdCB0aGUgZ2l2ZW4ga2V5XG5AZnVuY3Rpb24gbWFwLWdldC1kZWVwKCRtYXAsICRrZXlzLi4uKSB7XG4gIEBpZiBsZW5ndGgoJGtleXMpID09IDEge1xuICAgICRrZXlzOiBudGgoJGtleXMsIDEpO1xuICB9XG5cbiAgJHdhcm46ICcje250aCgka2V5cywgMSl9JztcbiAgJGxlbmd0aDogbGVuZ3RoKCRrZXlzKTtcbiAgJGdldDogbWFwLWdldCgkbWFwLCBudGgoJGtleXMsIDEpKTtcblxuICBAaWYgJGxlbmd0aCA+IDEge1xuICAgIEBmb3IgJGkgZnJvbSAyIHRocm91Z2ggJGxlbmd0aCB7XG4gICAgICBAaWYgJGdldCAhPSBudWxsIGFuZCB0eXBlLW9mKCRnZXQpID09ICdtYXAnIHtcbiAgICAgICAgJHdhcm46ICR3YXJuICsgJy0+I3tudGgoJGtleXMsICRpKX0nO1xuICAgICAgICAkZ2V0OiBtYXAtZ2V0KCRnZXQsIG50aCgka2V5cywgJGkpKTtcblxuICAgICAgICBAaWYgJGdldCA9PSBudWxsIHtcbiAgICAgICAgICBAcmV0dXJuIG1hcC1nZXQtZGVlcC13YXJuaW5nKCR3YXJuLCAkZ2V0LCBudGgoJGtleXMsICRpKSk7XG4gICAgICAgIH1cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICBAcmV0dXJuIG1hcC1nZXQtZGVlcC13YXJuaW5nKCR3YXJuLCAkZ2V0LCBudGgoJGtleXMsICRpKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkZ2V0O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IEtleXNcbkBmdW5jdGlvbiBnZXQta2V5cygka2V5cywgJGNvdW50ZXIpIHtcbiAgJHJldHVybjogKCk7XG5cbiAgQGZvciAkaSBmcm9tIDEgdG8gJGNvdW50ZXIge1xuICAgICRyZXR1cm46IGFwcGVuZCgkcmV0dXJuLCBudGgoJGtleXMsICRpKSk7XG4gIH1cblxuICBAcmV0dXJuICRyZXR1cm47XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgUHJldmlvdXMgS2V5XG5AZnVuY3Rpb24gbWFwLWdldC1wcmV2LWtleSgkbWFwLCAka2V5KSB7XG4gICRpbmRleDogaW5kZXgoJG1hcCwgJGtleSk7XG4gICRwcmV2OiAkaW5kZXggLSAxO1xuICAkcmVzdWx0OiBpZigkcHJldiA+IDAsIG50aCgkbWFwLCAkcHJldiksIG51bGwpO1xuXG4gIEByZXR1cm4gJHJlc3VsdDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIFNldFxuQGZ1bmN0aW9uIG1hcC1zZXQoJG1hcCwgJGtleSwgJHZhbHVlKSB7XG4gIEByZXR1cm4gbWFwLW1lcmdlKFxuICAgICRtYXAsXG4gICAgKFxuICAgICAgJGtleTogJHZhbHVlXG4gICAgKVxuICApO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgU2V0IERlZXBcbkBmdW5jdGlvbiBtYXAtc2V0LWRlZXAoJG1hcCwgJGtleXMsICR2YWx1ZSkge1xuICAkcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzOiB0cnVlICFnbG9iYWw7XG4gICRsZW5ndGg6IGxlbmd0aCgka2V5cyk7XG4gICRnZXQta2V5czogKCk7XG4gICRtYXAtbGV2ZWw6ICgpO1xuXG4gIEBpZiAkbGVuZ3RoID4gMSB7XG4gICAgJGdldC1rZXlzOiBnZXQta2V5cygka2V5cywgJGxlbmd0aCk7XG4gICAgJG1hcC1sZXZlbDogbWFwLWdldC1kZWVwKCRtYXAsICRnZXQta2V5cyk7XG4gIH1cblxuICAkbWVyZ2U6IChcbiAgICBudGgoJGtleXMsICRsZW5ndGgpOiAkdmFsdWVcbiAgKTtcblxuICBAaWYgJG1hcC1sZXZlbCB7XG4gICAgJG1lcmdlOiBtYXAtbWVyZ2UoJG1hcC1sZXZlbCwgJG1lcmdlKTtcbiAgfVxuXG4gIEBmb3IgJGkgZnJvbSAoJGxlbmd0aCAqIC0xICsgMSkgdGhyb3VnaCAtMSB7XG4gICAgJGo6IGFicygkaSk7XG4gICAgJGtleTogbnRoKCRrZXlzLCAkaik7XG5cbiAgICAvLyBAZGVidWcgJGdldC1rZXlzO1xuXG4gICAgQGlmICRqID4gMSB7XG4gICAgICAkZ2V0LWtleXM6IGdldC1rZXlzKCRrZXlzLCAkaik7XG4gICAgICAkbWFwLWxldmVsOiBtYXAtZ2V0LWRlZXAoJG1hcCwgJGdldC1rZXlzKTtcblxuICAgICAgQGlmICRtYXAtbGV2ZWwge1xuICAgICAgICAkbWVyZ2U6IG1hcC1tZXJnZShcbiAgICAgICAgICAkbWFwLWxldmVsLFxuICAgICAgICAgIChcbiAgICAgICAgICAgICRrZXk6ICRtZXJnZVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICAkbWVyZ2U6IChcbiAgICAgICAgICAka2V5OiAkbWVyZ2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IEBlbHNlIHtcbiAgICAgICRtZXJnZTogKFxuICAgICAgICAka2V5OiAkbWVyZ2VcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgJG1hcDogbWFwLW1lcmdlKCRtYXAsICRtZXJnZSk7XG5cbiAgJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5nczogZmFsc2UgIWdsb2JhbDtcblxuICBAcmV0dXJuICRtYXA7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogVU5JVFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUHJvZ3Jlc3NpdmUgY2FsY1xuQGZ1bmN0aW9uIGdldC1wcm9ncmVzc2l2ZS1jYWxjKFxuICAkbWluLW9iai1zaXplLFxuICAkbWF4LW9iai1zaXplLFxuICAkbWluLXZwLFxuICAkbWF4LXZwLFxuICAkdnAtdW5pdDogdndcbikge1xuICBAcmV0dXJuIGNhbGMoXG4gICAgI3skbWluLW9iai1zaXplfSArICN7c3RyaXAtdW5pdCgkbWF4LW9iai1zaXplIC0gJG1pbi1vYmotc2l6ZSl9ICpcbiAgICAgICgoMTAwI3skdnAtdW5pdH0gLSAjeyRtaW4tdnB9KSAvICN7c3RyaXAtdW5pdCgkbWF4LXZwIC0gJG1pbi12cCl9KVxuICApO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IFVOSVRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFN0cmlwIHVuaXRcbkBmdW5jdGlvbiBzdHJpcC11bml0KCRudW1iZXIpIHtcbiAgQGlmIHR5cGUtb2YoJG51bWJlcikgPT0gJ251bWJlcicgYW5kIG5vdCB1bml0bGVzcygkbnVtYmVyKSB7XG4gICAgQHJldHVybiAkbnVtYmVyIC8gKCRudW1iZXIgKiAwICsgMSk7XG4gIH1cblxuICBAcmV0dXJuICRudW1iZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBlbS9yZW0gdW5pdFxuQGZ1bmN0aW9uIGVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCBlbSk7XG59XG5cbkBmdW5jdGlvbiByZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIHJlbSk7XG59XG5cbkBmdW5jdGlvbiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsICR1bml0KSB7XG4gICRmczogMTBweDtcblxuICBAaWYgJGZvbnQtc2l6ZSB7XG4gICAgJGZzOiAkZm9udC1zaXplO1xuICB9XG4gIEBlbHNlIGlmICRiYXNlLWh0bWwtZm9udC1zaXplIHsgLy8gbWFrZSBzdXJlIHRvIGRlZmluZSB0aGlzIHZhcmlhYmxlIG9uIHlvdXIgb3duXG4gICAgJGZzOiAkYmFzZS1odG1sLWZvbnQtc2l6ZTtcbiAgfVxuXG4gIEByZXR1cm4gI3tzdHJpcC11bml0KCRudW0pIC8gc3RyaXAtdW5pdCgkZnMpfSN7JHVuaXR9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgc2NyZWVuIHBlcmNlbnRcbkBmdW5jdGlvbiBnZXQtc2NyZWVuLXBlcmNlbnQoJHdpZHRoLCAkc2NyZWVuKSB7XG4gIEByZXR1cm4gdW5xdW90ZSgnI3skd2lkdGggKiAxMDAgLyAkc2NyZWVufSUnKTtcbn1cblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBaLUlOREVYRVNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2VuZXJhdG9yXG5AZnVuY3Rpb24gei1pbmRleCgkbWFwLCAka2V5cykge1xuICAkZm91bmQtaW5kZXg6IG51bGw7XG5cbiAgQGVhY2ggJGtleSBpbiAka2V5cyB7XG4gICAgQGlmICh0eXBlLW9mKCRtYXApID09ICdtYXAnKSB7XG4gICAgICAkZm91bmQtaW5kZXg6IGluZGV4KG1hcC1rZXlzKCRtYXApLCAka2V5KTtcbiAgICAgICRtYXA6IG1hcC1nZXQoJG1hcCwgJGtleSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkZm91bmQtaW5kZXg6IGluZGV4KCRtYXAsICRrZXkpO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGZvdW5kLWluZGV4O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTZXJ2ZXJcbkBmdW5jdGlvbiB6KCRtYXAsICRrZXlzLi4uKSB7XG4gIEByZXR1cm4gei1pbmRleCgkbWFwLCAka2V5cyk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogRk9STVNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgSW5wdXQgcGxhY2Vob2xkZXJcbkBtaXhpbiBpbnB1dC1wbGFjZWhvbGRlcigkY29sLCAkc3R5bGU6IGl0YWxpYykge1xuICAmOi1tb3otcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxuICAmOjotbW96LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbiAgJjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxuICAmOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbn1cblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBQT1NJVElPTlNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQWJzb2x1dGUgY2VudGVyZWRcbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXJlZCgkdHlwZTogYWJzb2x1dGUsICRwb3M6IDUwJSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIHRvcDogJHBvcztcbiAgbGVmdDogJHBvcztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEFic29sdXRlIGNlbnRlcmVkIFhcbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXJlZC14KCR0eXBlOiBhYnNvbHV0ZSwgJHBvczogNTAlKSB7XG4gIHBvc2l0aW9uOiAkdHlwZTtcbiAgbGVmdDogJHBvcztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBBYnNvbHV0ZSBjZW50ZXJlZCBZXG5AbWl4aW4gYWJzb2x1dGUtY2VudGVyZWQteSgkdHlwZTogYWJzb2x1dGUsICRwb3M6IDUwJSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIHRvcDogJHBvcztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IFNIT1JUSEFORFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUG9zaXRpb25zXG5AbWl4aW4gcG9zaXRpb24tc3RyZXRjaGVkKCR0eXBlOiBhYnNvbHV0ZSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRGltZW5zaW9uc1xuQG1peGluIGRpbWVuc2lvbnMtc3F1YXJlKCR2YWx1ZSkge1xuICB3aWR0aDogJHZhbHVlO1xuICBoZWlnaHQ6ICR2YWx1ZTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUGFkZGluZ1xuQG1peGluIHBhZGRpbmctdigkdmFsdWUpIHtcbiAgcGFkZGluZy10b3A6ICR2YWx1ZTtcbiAgcGFkZGluZy1ib3R0b206ICR2YWx1ZTtcbn1cblxuQG1peGluIHBhZGRpbmctaCgkdmFsdWUpIHtcbiAgcGFkZGluZy1yaWdodDogJHZhbHVlO1xuICBwYWRkaW5nLWxlZnQ6ICR2YWx1ZTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFyZ2luXG5AbWl4aW4gbWFyZ2luLXYoJHZhbHVlKSB7XG4gIG1hcmdpbi10b3A6ICR2YWx1ZTtcbiAgbWFyZ2luLWJvdHRvbTogJHZhbHVlO1xufVxuXG5AbWl4aW4gbWFyZ2luLWgoJHZhbHVlKSB7XG4gIG1hcmdpbi1yaWdodDogJHZhbHVlO1xuICBtYXJnaW4tbGVmdDogJHZhbHVlO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBCb3JkZXJcbkBtaXhpbiBib3JkZXItdigkdmFsdWUpIHtcbiAgYm9yZGVyLXRvcDogJHZhbHVlO1xuICBib3JkZXItYm90dG9tOiAkdmFsdWU7XG59XG5cbkBtaXhpbiBib3JkZXItaCgkdmFsdWUpIHtcbiAgYm9yZGVyLXJpZ2h0OiAkdmFsdWU7XG4gIGJvcmRlci1sZWZ0OiAkdmFsdWU7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogVFlQT0dSQVBIWVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBGb250IHNtb290aGluZ1xuQG1peGluIGZvbnQtc21vb3RoaW5nKCR2YWx1ZTogYW50aWFsaWFzZWQpIHtcbiAgQGlmICR2YWx1ZSA9PSBhbnRpYWxpYXNlZCB7XG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbiAgfSBAZWxzZSB7XG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogc3VicGl4ZWwtYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGF1dG87XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgVGV4dCB1cHBlcmNhc2VcbkBtaXhpbiB0ZXh0LXVwcGVyY2FzZSgpIHtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgLW1vei1mb250LWZlYXR1cmUtc2V0dGluZ3M6ICdjYXNlJztcbiAgLXdlYmtpdC1mb250LWZlYXR1cmUtc2V0dGluZ3M6ICdjYXNlJztcbiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnY2FzZScgb247XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFNlbGVjdGlvblxuQG1peGluIHNlbGVjdGlvbigkY29sKSB7XG4gICRiZ3I6IGlmKCRjb2wgIT0gdHJhbnNwYXJlbnQsIHJnYmEoJGNvbCwgMC41KSwgcmdiYSgwLCAwLCAwLCAwKSk7XG5cbiAgJjo6LW1vei1zZWxlY3Rpb24ge1xuICAgIGJhY2tncm91bmQ6ICRiZ3I7XG4gIH1cblxuICAmOjpzZWxlY3Rpb24ge1xuICAgIGJhY2tncm91bmQ6ICRiZ3I7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gQkFTRVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBJbXBvcnRzXG5AaW1wb3J0ICcuLi8uLi9kZWZzL2JyYW5kLmpzJztcbkBpbXBvcnQgJy4uLy4uL2RlZnMvd2Vic2l0ZS5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEZvbnQgc2l6ZVxuQGZ1bmN0aW9uIHJvbGUoJG1hcCwgJHZhbHVlKSB7XG4gICRyLW1hcDogbWFwLWdldCgkdmFsdWUsICdtYXAnKTtcbiAgJHItdmFsdWU6IG1hcC1nZXQoJHZhbHVlLCAndmFsdWUnKTtcbiAgQHJldHVybiBtYXAtZ2V0KCRyLW1hcCwgJHItdmFsdWUpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnMgPiBDQUxDXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IHZhbHVlIGJhc2VkIG9uIHRoZSBiYXNlIGZvbnQgc2l6ZVxuQGZ1bmN0aW9uIGJhc2UoJHZhbHVlKSB7XG4gIEByZXR1cm4gbWF0aC5kaXYoJHZhbHVlLCBtYXAtZ2V0KCRyb2xlcy1yYXRpb3MsICdsYXlvdXQtZ3Jvd3RoJykpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBQcm9ncmVzc2l2ZSBjYWxjXG5AZnVuY3Rpb24gZ2V0LXByb2dyZXNzaXZlLWNhbGMoXG4gICRtaW4tb2JqLXNpemUsXG4gICRtYXgtb2JqLXNpemUsXG4gICRtaW4tdnAsXG4gICRtYXgtdnAsXG4gICR2cC11bml0OiB2d1xuKSB7XG4gIEByZXR1cm4gY2FsYyhcbiAgICAje3BpeGVsYXRlKCRtaW4tb2JqLXNpemUpfSArICN7c3RyaXAtdW5pdCgkbWF4LW9iai1zaXplIC0gJG1pbi1vYmotc2l6ZSl9ICpcbiAgICAgIChcbiAgICAgICAgKDEwMCN7JHZwLXVuaXR9IC0gI3twaXhlbGF0ZSgkbWluLXZwKX0pIC8gI3tzdHJpcC11bml0KFxuICAgICAgICAgICAgJG1heC12cCAtICRtaW4tdnBcbiAgICAgICAgICApfVxuICAgICAgKVxuICApO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnMgPiBVTklUU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFN0cmlwIHVuaXRcbkBmdW5jdGlvbiBzdHJpcC11bml0KCRudW1iZXIpIHtcbiAgQGlmIHR5cGUtb2YoJG51bWJlcikgPT0gJ251bWJlcicgYW5kIG5vdCB1bml0bGVzcygkbnVtYmVyKSB7XG4gICAgQHJldHVybiBtYXRoLmRpdigkbnVtYmVyLCAoJG51bWJlciAqIDAgKyAxKSk7XG4gIH1cblxuICBAcmV0dXJuICRudW1iZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBQeCB1bml0XG5AZnVuY3Rpb24gcGl4ZWxhdGUoJHZhbHVlKSB7XG4gIEByZXR1cm4gI3tzdHJpcC11bml0KCR2YWx1ZSl9UHg7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBlbS9yZW0gdW5pdFxuQGZ1bmN0aW9uIGVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCBlbSk7XG59XG5cbkBmdW5jdGlvbiByZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIHJlbSk7XG59XG5cbkBmdW5jdGlvbiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsICR1bml0KSB7XG4gICRmczogMTBweDtcblxuICBAaWYgJGZvbnQtc2l6ZSB7XG4gICAgJGZzOiAkZm9udC1zaXplO1xuICB9IEBlbHNlIHtcbiAgICAkZnM6IG1hcC1nZXQoJHR5cG9ncmFwaHksICdiYXNlX2ZvbnRfc2l6ZScpO1xuICB9XG5cbiAgQHJldHVybiAje21hdGguZGl2KHN0cmlwLXVuaXQoJG51bSksIHN0cmlwLXVuaXQoJGZzKSl9I3skdW5pdH07XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIERhdGEgPiBTV0FUQ0hFU1xuXG5AaW1wb3J0ICcuLi8uLi9kZWZzL3N3YXRjaGVzL2luZGV4LmpzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX2JyZWFrcG9pbnRzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX3JhdGlvcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19zY3JlZW5zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX3NwYWNlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIERhdGEgPiBST0xFU1xuXG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19ib3JkZXJzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2JyZWFrcG9pbnRzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2NvbG9ycyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19kaW1lbnNpb25zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3JhdGlvcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19zY3JlZW5zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3NoYWRvd3MnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfc3BhY2VzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3R5cG9ncmFwaHknO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnMgPiBTQ0FMQUJJTElUWVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFNjYWxlclxuQG1peGluIHNjYWxlcihcbiAgJHByb3BlcnR5LFxuICAkbWluLXNpemUsXG4gICRtYXgtc2l6ZSxcbiAgJG1pbi12dzogbWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21pbicpLFxuICAkbWF4LXZ3OiBtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWF4Jylcbikge1xuICAjeyRwcm9wZXJ0eX06ICN7c3RyaXAtdW5pdChtYXRoLmRpdigoJG1pbi12dyAqIDAuOTc5NikgKiAkbWluLXNpemUsIDEwMDApKX12dzsgLy8gMC45Nzk2IGZpeGVzIHdyb25nIGNhbGN1bGF0aW9ucyBpbiBDaHJvbWVcblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAkbWluLXZ3KSB7XG4gICAgI3skcHJvcGVydHl9OiBnZXQtcHJvZ3Jlc3NpdmUtY2FsYygkbWluLXNpemUsICRtYXgtc2l6ZSwgJG1pbi12dywgJG1heC12dyk7XG4gIH1cblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAkbWF4LXZ3KSB7XG4gICAgI3skcHJvcGVydHl9OiBwaXhlbGF0ZSgkbWF4LXNpemUpO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIFBsYWNlaG9sZGVycyA+IFNDQUxBQklMSVRZXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTmVnYXRpdmVcbiVwaC1uZWdhdGl2ZSB7XG4gIGgxLFxuICBoMixcbiAgaDMsXG4gIGg0LFxuICBoNSxcbiAgaDYsXG4gIHAge1xuICAgIGNvbG9yOiBtYXAtZ2V0KCRyb2xlcy1jb2wtdGV4dHMsICduZWdhdGl2ZScpO1xuICB9XG5cbiAgLm1ldGEge1xuICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHN3YXRjaGVzLWNvbG9ycywgJ2hvbmV5LXllbGxvdycsICdsaWdodCcpO1xuICB9XG5cbiAgLnRleHQtbGluayB7XG4gICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnbm9ybWFsJyk7XG4gICAgYm9yZGVyLWJvdHRvbTogcGl4ZWxhdGUoMXB4KSBkb3R0ZWRcbiAgICAgIHJnYmEobWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdub3JtYWwnKSwgMC4zMyk7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2hvdmVyJyk7XG4gICAgfVxuXG4gICAgJjphY3RpdmUge1xuICAgICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnYWN0aXZlJyk7XG4gICAgfVxuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFdhdmVcbiVwaC13YXZlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiA1MCU7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4td2lkdGg6IG1hdGguZGl2KG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtYXgnKSwgMik7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcblxuICA+IHN2ZyB7XG4gICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgSGVhZCB3YXZlXG4lcGgtaGVhZC13YXZlIHtcbiAgJHdhdmUtaGVpZ2h0OiBiYXNlKG1hcC1nZXQoJHJvbGVzLWRpbWVuc2lvbnMtd2F2ZXMsICdoZWFkZXInKSk7XG5cbiAgLndhdmUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICB0b3A6IGNhbGMoMTAwJSAtIDFQeCk7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiBlbSgkd2F2ZS1oZWlnaHQpO1xuXG4gICAgLmlubmVyIHtcbiAgICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKDEwMCUpO1xuXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgICBzdmcge1xuICAgICAgICBAaW5jbHVkZSBkaW1lbnNpb25zLXNxdWFyZSgxMDAlKTtcblxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgbWluLXdpZHRoOiBtYXRoLmRpdihtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWF4JyksIDIpO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQGtleWZyYW1lcyBzbGlkZSB7XG4gICAgZnJvbSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICB9XG5cbiAgICB0byB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAwKTtcbiAgICB9XG4gIH1cblxuICAuc2Nyb2xsLWJ0biB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvdHRvbTogMjBweDtcbiAgICBsZWZ0OiA1MCU7XG4gICAgei1pbmRleDogMTtcbiAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0LWRlZXAoJHN3YXRjaGVzLWNvbG9ycywgJ2Nvcm5mbG93ZXInLCAnYmFzZScpO1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgIGFuaW1hdGlvbjogc2xpZGUgMXMgZWFzZS1pbi1vdXQgaW5maW5pdGUgYWx0ZXJuYXRlO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2hvdmVyJyk7XG4gICAgfVxuXG4gICAgJjphY3RpdmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdhY3RpdmUnKTtcbiAgICB9XG5cbiAgICBzdmcge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgICB9XG5cbiAgICBib2R5Om5vdCguc2Nyb2xsYWJsZSkgJiB7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFJvb3RcbjpnbG9iYWwoLmJsb2cpIHtcbiAgLy9cbn1cbiIsIi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIFBhZ2VzID4gUEFHRVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5AdXNlICdzYXNzOm1hdGgnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IENPTE9SU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBMaWdodFxuQGZ1bmN0aW9uIGxpZ2h0KCRjb2xvciwgJHBlcmNlbnQpIHtcbiAgQHJldHVybiBtaXgoI2ZmZiwgJGNvbG9yLCAkcGVyY2VudCk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IERhcmtcbkBmdW5jdGlvbiBkYXJrKCRjb2xvciwgJHBlcmNlbnQpIHtcbiAgQHJldHVybiBtaXgoIzAwMCwgJGNvbG9yLCAkcGVyY2VudCk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogTUFQU1xuXG4kcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzOiBmYWxzZSAhZGVmYXVsdDtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIEdldCBEZWVwIFdhcm5pbmdcbi8vIERpc3BsYXlzIGEgd2FybmluZyBpZiB0aGUgcmV0cmlldmVkIHZhbHVlIGlzIGBudWxsYFxuQGZ1bmN0aW9uIG1hcC1nZXQtZGVlcC13YXJuaW5nKCR3YXJuLCAkZ2V0LCAka2V5KSB7XG4gIEBpZiBub3QgJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5ncyB7XG4gICAgQGlmICRnZXQgPT0gbnVsbCB7XG4gICAgICBAd2FybiAnTWFwIGhhcyBubyB2YWx1ZSBmb3Iga2V5IHNlYXJjaCBgI3skd2Fybn1gJztcbiAgICB9IEBlbHNlIGlmIHR5cGUtb2YoJGdldCkgIT0gJ21hcCcge1xuICAgICAgQHdhcm4gJ05vbi1tYXAgdmFsdWUgZm91bmQgZm9yIGtleSBzZWFyY2ggYCN7JHdhcm59YCwgY2Fubm90IHNlYXJjaCBmb3Iga2V5IGAjeyRrZXl9YCc7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiBudWxsO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IERlZXBcbi8vIEdpdmVuIGEgbWFwIGFuZCBhIGxpc3Qgb2Yga2V5cywgZmluZCB0aGUgdmFsdWUgYXQgdGhlIGdpdmVuIGtleVxuQGZ1bmN0aW9uIG1hcC1nZXQtZGVlcCgkbWFwLCAka2V5cy4uLikge1xuICBAaWYgbGVuZ3RoKCRrZXlzKSA9PSAxIHtcbiAgICAka2V5czogbnRoKCRrZXlzLCAxKTtcbiAgfVxuXG4gICR3YXJuOiAnI3tudGgoJGtleXMsIDEpfSc7XG4gICRsZW5ndGg6IGxlbmd0aCgka2V5cyk7XG4gICRnZXQ6IG1hcC1nZXQoJG1hcCwgbnRoKCRrZXlzLCAxKSk7XG5cbiAgQGlmICRsZW5ndGggPiAxIHtcbiAgICBAZm9yICRpIGZyb20gMiB0aHJvdWdoICRsZW5ndGgge1xuICAgICAgQGlmICRnZXQgIT0gbnVsbCBhbmQgdHlwZS1vZigkZ2V0KSA9PSAnbWFwJyB7XG4gICAgICAgICR3YXJuOiAkd2FybiArICctPiN7bnRoKCRrZXlzLCAkaSl9JztcbiAgICAgICAgJGdldDogbWFwLWdldCgkZ2V0LCBudGgoJGtleXMsICRpKSk7XG5cbiAgICAgICAgQGlmICRnZXQgPT0gbnVsbCB7XG4gICAgICAgICAgQHJldHVybiBtYXAtZ2V0LWRlZXAtd2FybmluZygkd2FybiwgJGdldCwgbnRoKCRrZXlzLCAkaSkpO1xuICAgICAgICB9XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgQHJldHVybiBtYXAtZ2V0LWRlZXAtd2FybmluZygkd2FybiwgJGdldCwgbnRoKCRrZXlzLCAkaSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGdldDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIEdldCBLZXlzXG5AZnVuY3Rpb24gZ2V0LWtleXMoJGtleXMsICRjb3VudGVyKSB7XG4gICRyZXR1cm46ICgpO1xuXG4gIEBmb3IgJGkgZnJvbSAxIHRvICRjb3VudGVyIHtcbiAgICAkcmV0dXJuOiBhcHBlbmQoJHJldHVybiwgbnRoKCRrZXlzLCAkaSkpO1xuICB9XG5cbiAgQHJldHVybiAkcmV0dXJuO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IFByZXZpb3VzIEtleVxuQGZ1bmN0aW9uIG1hcC1nZXQtcHJldi1rZXkoJG1hcCwgJGtleSkge1xuICAkaW5kZXg6IGluZGV4KCRtYXAsICRrZXkpO1xuICAkcHJldjogJGluZGV4IC0gMTtcbiAgJHJlc3VsdDogaWYoJHByZXYgPiAwLCBudGgoJG1hcCwgJHByZXYpLCBudWxsKTtcblxuICBAcmV0dXJuICRyZXN1bHQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBTZXRcbkBmdW5jdGlvbiBtYXAtc2V0KCRtYXAsICRrZXksICR2YWx1ZSkge1xuICBAcmV0dXJuIG1hcC1tZXJnZShcbiAgICAkbWFwLFxuICAgIChcbiAgICAgICRrZXk6ICR2YWx1ZVxuICAgIClcbiAgKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIFNldCBEZWVwXG5AZnVuY3Rpb24gbWFwLXNldC1kZWVwKCRtYXAsICRrZXlzLCAkdmFsdWUpIHtcbiAgJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5nczogdHJ1ZSAhZ2xvYmFsO1xuICAkbGVuZ3RoOiBsZW5ndGgoJGtleXMpO1xuICAkZ2V0LWtleXM6ICgpO1xuICAkbWFwLWxldmVsOiAoKTtcblxuICBAaWYgJGxlbmd0aCA+IDEge1xuICAgICRnZXQta2V5czogZ2V0LWtleXMoJGtleXMsICRsZW5ndGgpO1xuICAgICRtYXAtbGV2ZWw6IG1hcC1nZXQtZGVlcCgkbWFwLCAkZ2V0LWtleXMpO1xuICB9XG5cbiAgJG1lcmdlOiAoXG4gICAgbnRoKCRrZXlzLCAkbGVuZ3RoKTogJHZhbHVlXG4gICk7XG5cbiAgQGlmICRtYXAtbGV2ZWwge1xuICAgICRtZXJnZTogbWFwLW1lcmdlKCRtYXAtbGV2ZWwsICRtZXJnZSk7XG4gIH1cblxuICBAZm9yICRpIGZyb20gKCRsZW5ndGggKiAtMSArIDEpIHRocm91Z2ggLTEge1xuICAgICRqOiBhYnMoJGkpO1xuICAgICRrZXk6IG50aCgka2V5cywgJGopO1xuXG4gICAgLy8gQGRlYnVnICRnZXQta2V5cztcblxuICAgIEBpZiAkaiA+IDEge1xuICAgICAgJGdldC1rZXlzOiBnZXQta2V5cygka2V5cywgJGopO1xuICAgICAgJG1hcC1sZXZlbDogbWFwLWdldC1kZWVwKCRtYXAsICRnZXQta2V5cyk7XG5cbiAgICAgIEBpZiAkbWFwLWxldmVsIHtcbiAgICAgICAgJG1lcmdlOiBtYXAtbWVyZ2UoXG4gICAgICAgICAgJG1hcC1sZXZlbCxcbiAgICAgICAgICAoXG4gICAgICAgICAgICAka2V5OiAkbWVyZ2VcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgJG1lcmdlOiAoXG4gICAgICAgICAgJGtleTogJG1lcmdlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBAZWxzZSB7XG4gICAgICAkbWVyZ2U6IChcbiAgICAgICAgJGtleTogJG1lcmdlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gICRtYXA6IG1hcC1tZXJnZSgkbWFwLCAkbWVyZ2UpO1xuXG4gICRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3M6IGZhbHNlICFnbG9iYWw7XG5cbiAgQHJldHVybiAkbWFwO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IFVOSVRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFByb2dyZXNzaXZlIGNhbGNcbkBmdW5jdGlvbiBnZXQtcHJvZ3Jlc3NpdmUtY2FsYyhcbiAgJG1pbi1vYmotc2l6ZSxcbiAgJG1heC1vYmotc2l6ZSxcbiAgJG1pbi12cCxcbiAgJG1heC12cCxcbiAgJHZwLXVuaXQ6IHZ3XG4pIHtcbiAgQHJldHVybiBjYWxjKFxuICAgICN7JG1pbi1vYmotc2l6ZX0gKyAje3N0cmlwLXVuaXQoJG1heC1vYmotc2l6ZSAtICRtaW4tb2JqLXNpemUpfSAqXG4gICAgICAoKDEwMCN7JHZwLXVuaXR9IC0gI3skbWluLXZwfSkgLyAje3N0cmlwLXVuaXQoJG1heC12cCAtICRtaW4tdnApfSlcbiAgKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBVTklUU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTdHJpcCB1bml0XG5AZnVuY3Rpb24gc3RyaXAtdW5pdCgkbnVtYmVyKSB7XG4gIEBpZiB0eXBlLW9mKCRudW1iZXIpID09ICdudW1iZXInIGFuZCBub3QgdW5pdGxlc3MoJG51bWJlcikge1xuICAgIEByZXR1cm4gJG51bWJlciAvICgkbnVtYmVyICogMCArIDEpO1xuICB9XG5cbiAgQHJldHVybiAkbnVtYmVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgZW0vcmVtIHVuaXRcbkBmdW5jdGlvbiBlbSgkbnVtLCAkZm9udC1zaXplOiBmYWxzZSkge1xuICBAcmV0dXJuIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgZW0pO1xufVxuXG5AZnVuY3Rpb24gcmVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCByZW0pO1xufVxuXG5AZnVuY3Rpb24gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCAkdW5pdCkge1xuICAkZnM6IDEwcHg7XG5cbiAgQGlmICRmb250LXNpemUge1xuICAgICRmczogJGZvbnQtc2l6ZTtcbiAgfVxuICBAZWxzZSBpZiAkYmFzZS1odG1sLWZvbnQtc2l6ZSB7IC8vIG1ha2Ugc3VyZSB0byBkZWZpbmUgdGhpcyB2YXJpYWJsZSBvbiB5b3VyIG93blxuICAgICRmczogJGJhc2UtaHRtbC1mb250LXNpemU7XG4gIH1cblxuICBAcmV0dXJuICN7c3RyaXAtdW5pdCgkbnVtKSAvIHN0cmlwLXVuaXQoJGZzKX0jeyR1bml0fTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IHNjcmVlbiBwZXJjZW50XG5AZnVuY3Rpb24gZ2V0LXNjcmVlbi1wZXJjZW50KCR3aWR0aCwgJHNjcmVlbikge1xuICBAcmV0dXJuIHVucXVvdGUoJyN7JHdpZHRoICogMTAwIC8gJHNjcmVlbn0lJyk7XG59XG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogWi1JTkRFWEVTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdlbmVyYXRvclxuQGZ1bmN0aW9uIHotaW5kZXgoJG1hcCwgJGtleXMpIHtcbiAgJGZvdW5kLWluZGV4OiBudWxsO1xuXG4gIEBlYWNoICRrZXkgaW4gJGtleXMge1xuICAgIEBpZiAodHlwZS1vZigkbWFwKSA9PSAnbWFwJykge1xuICAgICAgJGZvdW5kLWluZGV4OiBpbmRleChtYXAta2V5cygkbWFwKSwgJGtleSk7XG4gICAgICAkbWFwOiBtYXAtZ2V0KCRtYXAsICRrZXkpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJGZvdW5kLWluZGV4OiBpbmRleCgkbWFwLCAka2V5KTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRmb3VuZC1pbmRleDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU2VydmVyXG5AZnVuY3Rpb24geigkbWFwLCAka2V5cy4uLikge1xuICBAcmV0dXJuIHotaW5kZXgoJG1hcCwgJGtleXMpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IEZPUk1TXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IElucHV0IHBsYWNlaG9sZGVyXG5AbWl4aW4gaW5wdXQtcGxhY2Vob2xkZXIoJGNvbCwgJHN0eWxlOiBpdGFsaWMpIHtcbiAgJjotbW96LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbiAgJjo6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2w7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICB9XG4gICY6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbiAgJjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2w7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICB9XG59XG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogUE9TSVRJT05TXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEFic29sdXRlIGNlbnRlcmVkXG5AbWl4aW4gYWJzb2x1dGUtY2VudGVyZWQoJHR5cGU6IGFic29sdXRlLCAkcG9zOiA1MCUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICB0b3A6ICRwb3M7XG4gIGxlZnQ6ICRwb3M7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBBYnNvbHV0ZSBjZW50ZXJlZCBYXG5AbWl4aW4gYWJzb2x1dGUtY2VudGVyZWQteCgkdHlwZTogYWJzb2x1dGUsICRwb3M6IDUwJSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIGxlZnQ6ICRwb3M7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQWJzb2x1dGUgY2VudGVyZWQgWVxuQG1peGluIGFic29sdXRlLWNlbnRlcmVkLXkoJHR5cGU6IGFic29sdXRlLCAkcG9zOiA1MCUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICB0b3A6ICRwb3M7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBTSE9SVEhBTkRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFBvc2l0aW9uc1xuQG1peGluIHBvc2l0aW9uLXN0cmV0Y2hlZCgkdHlwZTogYWJzb2x1dGUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IERpbWVuc2lvbnNcbkBtaXhpbiBkaW1lbnNpb25zLXNxdWFyZSgkdmFsdWUpIHtcbiAgd2lkdGg6ICR2YWx1ZTtcbiAgaGVpZ2h0OiAkdmFsdWU7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFBhZGRpbmdcbkBtaXhpbiBwYWRkaW5nLXYoJHZhbHVlKSB7XG4gIHBhZGRpbmctdG9wOiAkdmFsdWU7XG4gIHBhZGRpbmctYm90dG9tOiAkdmFsdWU7XG59XG5cbkBtaXhpbiBwYWRkaW5nLWgoJHZhbHVlKSB7XG4gIHBhZGRpbmctcmlnaHQ6ICR2YWx1ZTtcbiAgcGFkZGluZy1sZWZ0OiAkdmFsdWU7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcmdpblxuQG1peGluIG1hcmdpbi12KCR2YWx1ZSkge1xuICBtYXJnaW4tdG9wOiAkdmFsdWU7XG4gIG1hcmdpbi1ib3R0b206ICR2YWx1ZTtcbn1cblxuQG1peGluIG1hcmdpbi1oKCR2YWx1ZSkge1xuICBtYXJnaW4tcmlnaHQ6ICR2YWx1ZTtcbiAgbWFyZ2luLWxlZnQ6ICR2YWx1ZTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQm9yZGVyXG5AbWl4aW4gYm9yZGVyLXYoJHZhbHVlKSB7XG4gIGJvcmRlci10b3A6ICR2YWx1ZTtcbiAgYm9yZGVyLWJvdHRvbTogJHZhbHVlO1xufVxuXG5AbWl4aW4gYm9yZGVyLWgoJHZhbHVlKSB7XG4gIGJvcmRlci1yaWdodDogJHZhbHVlO1xuICBib3JkZXItbGVmdDogJHZhbHVlO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IFRZUE9HUkFQSFlcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRm9udCBzbW9vdGhpbmdcbkBtaXhpbiBmb250LXNtb290aGluZygkdmFsdWU6IGFudGlhbGlhc2VkKSB7XG4gIEBpZiAkdmFsdWUgPT0gYW50aWFsaWFzZWQge1xuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG4gIH0gQGVsc2Uge1xuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IHN1YnBpeGVsLWFudGlhbGlhc2VkO1xuICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBhdXRvO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFRleHQgdXBwZXJjYXNlXG5AbWl4aW4gdGV4dC11cHBlcmNhc2UoKSB7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIC1tb3otZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnY2FzZSc7XG4gIC13ZWJraXQtZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnY2FzZSc7XG4gIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2Nhc2UnIG9uO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTZWxlY3Rpb25cbkBtaXhpbiBzZWxlY3Rpb24oJGNvbCkge1xuICAkYmdyOiBpZigkY29sICE9IHRyYW5zcGFyZW50LCByZ2JhKCRjb2wsIDAuNSksIHJnYmEoMCwgMCwgMCwgMCkpO1xuXG4gICY6Oi1tb3otc2VsZWN0aW9uIHtcbiAgICBiYWNrZ3JvdW5kOiAkYmdyO1xuICB9XG5cbiAgJjo6c2VsZWN0aW9uIHtcbiAgICBiYWNrZ3JvdW5kOiAkYmdyO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEJBU0VcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgSW1wb3J0c1xuQGltcG9ydCAnLi4vLi4vZGVmcy9icmFuZC5qcyc7XG5AaW1wb3J0ICcuLi8uLi9kZWZzL3dlYnNpdGUuanMnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBGb250IHNpemVcbkBmdW5jdGlvbiByb2xlKCRtYXAsICR2YWx1ZSkge1xuICAkci1tYXA6IG1hcC1nZXQoJHZhbHVlLCAnbWFwJyk7XG4gICRyLXZhbHVlOiBtYXAtZ2V0KCR2YWx1ZSwgJ3ZhbHVlJyk7XG4gIEByZXR1cm4gbWFwLWdldCgkci1tYXAsICRyLXZhbHVlKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zID4gQ0FMQ1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCB2YWx1ZSBiYXNlZCBvbiB0aGUgYmFzZSBmb250IHNpemVcbkBmdW5jdGlvbiBiYXNlKCR2YWx1ZSkge1xuICBAcmV0dXJuIG1hdGguZGl2KCR2YWx1ZSwgbWFwLWdldCgkcm9sZXMtcmF0aW9zLCAnbGF5b3V0LWdyb3d0aCcpKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUHJvZ3Jlc3NpdmUgY2FsY1xuQGZ1bmN0aW9uIGdldC1wcm9ncmVzc2l2ZS1jYWxjKFxuICAkbWluLW9iai1zaXplLFxuICAkbWF4LW9iai1zaXplLFxuICAkbWluLXZwLFxuICAkbWF4LXZwLFxuICAkdnAtdW5pdDogdndcbikge1xuICBAcmV0dXJuIGNhbGMoXG4gICAgI3twaXhlbGF0ZSgkbWluLW9iai1zaXplKX0gKyAje3N0cmlwLXVuaXQoJG1heC1vYmotc2l6ZSAtICRtaW4tb2JqLXNpemUpfSAqXG4gICAgICAoXG4gICAgICAgICgxMDAjeyR2cC11bml0fSAtICN7cGl4ZWxhdGUoJG1pbi12cCl9KSAvICN7c3RyaXAtdW5pdChcbiAgICAgICAgICAgICRtYXgtdnAgLSAkbWluLXZwXG4gICAgICAgICAgKX1cbiAgICAgIClcbiAgKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zID4gVU5JVFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTdHJpcCB1bml0XG5AZnVuY3Rpb24gc3RyaXAtdW5pdCgkbnVtYmVyKSB7XG4gIEBpZiB0eXBlLW9mKCRudW1iZXIpID09ICdudW1iZXInIGFuZCBub3QgdW5pdGxlc3MoJG51bWJlcikge1xuICAgIEByZXR1cm4gbWF0aC5kaXYoJG51bWJlciwgKCRudW1iZXIgKiAwICsgMSkpO1xuICB9XG5cbiAgQHJldHVybiAkbnVtYmVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgUHggdW5pdFxuQGZ1bmN0aW9uIHBpeGVsYXRlKCR2YWx1ZSkge1xuICBAcmV0dXJuICN7c3RyaXAtdW5pdCgkdmFsdWUpfVB4O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgZW0vcmVtIHVuaXRcbkBmdW5jdGlvbiBlbSgkbnVtLCAkZm9udC1zaXplOiBmYWxzZSkge1xuICBAcmV0dXJuIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgZW0pO1xufVxuXG5AZnVuY3Rpb24gcmVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCByZW0pO1xufVxuXG5AZnVuY3Rpb24gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCAkdW5pdCkge1xuICAkZnM6IDEwcHg7XG5cbiAgQGlmICRmb250LXNpemUge1xuICAgICRmczogJGZvbnQtc2l6ZTtcbiAgfSBAZWxzZSB7XG4gICAgJGZzOiBtYXAtZ2V0KCR0eXBvZ3JhcGh5LCAnYmFzZV9mb250X3NpemUnKTtcbiAgfVxuXG4gIEByZXR1cm4gI3ttYXRoLmRpdihzdHJpcC11bml0KCRudW0pLCBzdHJpcC11bml0KCRmcykpfSN7JHVuaXR9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBEYXRhID4gU1dBVENIRVNcblxuQGltcG9ydCAnLi4vLi4vZGVmcy9zd2F0Y2hlcy9pbmRleC5qcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19icmVha3BvaW50cyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19yYXRpb3MnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvc3dhdGNoZXMvc3dhdGNoZXNfc2NyZWVucyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19zcGFjZXMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBEYXRhID4gUk9MRVNcblxuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfYm9yZGVycyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19icmVha3BvaW50cyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19jb2xvcnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfZGltZW5zaW9ucyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19yYXRpb3MnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfc2NyZWVucyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19zaGFkb3dzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3NwYWNlcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc190eXBvZ3JhcGh5JztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zID4gU0NBTEFCSUxJVFlcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTY2FsZXJcbkBtaXhpbiBzY2FsZXIoXG4gICRwcm9wZXJ0eSxcbiAgJG1pbi1zaXplLFxuICAkbWF4LXNpemUsXG4gICRtaW4tdnc6IG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtaW4nKSxcbiAgJG1heC12dzogbWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21heCcpXG4pIHtcbiAgI3skcHJvcGVydHl9OiAje3N0cmlwLXVuaXQobWF0aC5kaXYoKCRtaW4tdncgKiAwLjk3OTYpICogJG1pbi1zaXplLCAxMDAwKSl9dnc7IC8vIDAuOTc5NiBmaXhlcyB3cm9uZyBjYWxjdWxhdGlvbnMgaW4gQ2hyb21lXG5cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogJG1pbi12dykge1xuICAgICN7JHByb3BlcnR5fTogZ2V0LXByb2dyZXNzaXZlLWNhbGMoJG1pbi1zaXplLCAkbWF4LXNpemUsICRtaW4tdncsICRtYXgtdncpO1xuICB9XG5cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogJG1heC12dykge1xuICAgICN7JHByb3BlcnR5fTogcGl4ZWxhdGUoJG1heC1zaXplKTtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBQbGFjZWhvbGRlcnMgPiBTQ0FMQUJJTElUWVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE5lZ2F0aXZlXG4lcGgtbmVnYXRpdmUge1xuICBoMSxcbiAgaDIsXG4gIGgzLFxuICBoNCxcbiAgaDUsXG4gIGg2LFxuICBwIHtcbiAgICBjb2xvcjogbWFwLWdldCgkcm9sZXMtY29sLXRleHRzLCAnbmVnYXRpdmUnKTtcbiAgfVxuXG4gIC5tZXRhIHtcbiAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRzd2F0Y2hlcy1jb2xvcnMsICdob25leS15ZWxsb3cnLCAnbGlnaHQnKTtcbiAgfVxuXG4gIC50ZXh0LWxpbmsge1xuICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ25vcm1hbCcpO1xuICAgIGJvcmRlci1ib3R0b206IHBpeGVsYXRlKDFweCkgZG90dGVkXG4gICAgICByZ2JhKG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnbm9ybWFsJyksIDAuMzMpO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdob3ZlcicpO1xuICAgIH1cblxuICAgICY6YWN0aXZlIHtcbiAgICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2FjdGl2ZScpO1xuICAgIH1cbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBXYXZlXG4lcGgtd2F2ZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogNTAlO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLXdpZHRoOiBtYXRoLmRpdihtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWF4JyksIDIpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG5cbiAgPiBzdmcge1xuICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKDEwMCUpO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEhlYWQgd2F2ZVxuJXBoLWhlYWQtd2F2ZSB7XG4gICR3YXZlLWhlaWdodDogYmFzZShtYXAtZ2V0KCRyb2xlcy1kaW1lbnNpb25zLXdhdmVzLCAnaGVhZGVyJykpO1xuXG4gIC53YXZlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgdG9wOiBjYWxjKDEwMCUgLSAxUHgpO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogZW0oJHdhdmUtaGVpZ2h0KTtcblxuICAgIC5pbm5lciB7XG4gICAgICBAaW5jbHVkZSBkaW1lbnNpb25zLXNxdWFyZSgxMDAlKTtcblxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgICAgc3ZnIHtcbiAgICAgICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG5cbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIG1pbi13aWR0aDogbWF0aC5kaXYobWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21heCcpLCAyKTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBrZXlmcmFtZXMgc2xpZGUge1xuICAgIGZyb20ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgfVxuXG4gICAgdG8ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgMCk7XG4gICAgfVxuICB9XG5cbiAgLnNjcm9sbC1idG4ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3R0b206IDIwcHg7XG4gICAgbGVmdDogNTAlO1xuICAgIHotaW5kZXg6IDE7XG4gICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRzd2F0Y2hlcy1jb2xvcnMsICdjb3JuZmxvd2VyJywgJ2Jhc2UnKTtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICBhbmltYXRpb246IHNsaWRlIDFzIGVhc2UtaW4tb3V0IGluZmluaXRlIGFsdGVybmF0ZTtcblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdob3ZlcicpO1xuICAgIH1cblxuICAgICY6YWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnYWN0aXZlJyk7XG4gICAgfVxuXG4gICAgc3ZnIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gICAgfVxuXG4gICAgYm9keTpub3QoLnNjcm9sbGFibGUpICYge1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBSb290XG4ucGFnZSB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcblxuICA6Z2xvYmFsKC5zaGFyZWRhZGR5KSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG46Z2xvYmFsKC5lcnJvcjQwNCksXG46Z2xvYmFsKC5wYWdlLXRlbXBsYXRlKSxcbjpnbG9iYWwoLmJsb2cpIHtcbiAgLmNvbnRlbnQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQoJHJvbGVzLWNvbC1iYWNrZ3JvdW5kcywgJ3BhZ2UnKTtcbiAgfVxufVxuXG46Z2xvYmFsKC5lcnJvcjQwNCkge1xuICAuY29udGVudCB7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIH1cbn1cbiIsIi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIFBhZ2VzID4gU0lOR0xFXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcbkB1c2UgJ3Nhc3M6bWF0aCc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogQ09MT1JTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IExpZ2h0XG5AZnVuY3Rpb24gbGlnaHQoJGNvbG9yLCAkcGVyY2VudCkge1xuICBAcmV0dXJuIG1peCgjZmZmLCAkY29sb3IsICRwZXJjZW50KTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRGFya1xuQGZ1bmN0aW9uIGRhcmsoJGNvbG9yLCAkcGVyY2VudCkge1xuICBAcmV0dXJuIG1peCgjMDAwLCAkY29sb3IsICRwZXJjZW50KTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBNQVBTXG5cbiRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3M6IGZhbHNlICFkZWZhdWx0O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IERlZXAgV2FybmluZ1xuLy8gRGlzcGxheXMgYSB3YXJuaW5nIGlmIHRoZSByZXRyaWV2ZWQgdmFsdWUgaXMgYG51bGxgXG5AZnVuY3Rpb24gbWFwLWdldC1kZWVwLXdhcm5pbmcoJHdhcm4sICRnZXQsICRrZXkpIHtcbiAgQGlmIG5vdCAkcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzIHtcbiAgICBAaWYgJGdldCA9PSBudWxsIHtcbiAgICAgIEB3YXJuICdNYXAgaGFzIG5vIHZhbHVlIGZvciBrZXkgc2VhcmNoIGAjeyR3YXJufWAnO1xuICAgIH0gQGVsc2UgaWYgdHlwZS1vZigkZ2V0KSAhPSAnbWFwJyB7XG4gICAgICBAd2FybiAnTm9uLW1hcCB2YWx1ZSBmb3VuZCBmb3Iga2V5IHNlYXJjaCBgI3skd2Fybn1gLCBjYW5ub3Qgc2VhcmNoIGZvciBrZXkgYCN7JGtleX1gJztcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuIG51bGw7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgRGVlcFxuLy8gR2l2ZW4gYSBtYXAgYW5kIGEgbGlzdCBvZiBrZXlzLCBmaW5kIHRoZSB2YWx1ZSBhdCB0aGUgZ2l2ZW4ga2V5XG5AZnVuY3Rpb24gbWFwLWdldC1kZWVwKCRtYXAsICRrZXlzLi4uKSB7XG4gIEBpZiBsZW5ndGgoJGtleXMpID09IDEge1xuICAgICRrZXlzOiBudGgoJGtleXMsIDEpO1xuICB9XG5cbiAgJHdhcm46ICcje250aCgka2V5cywgMSl9JztcbiAgJGxlbmd0aDogbGVuZ3RoKCRrZXlzKTtcbiAgJGdldDogbWFwLWdldCgkbWFwLCBudGgoJGtleXMsIDEpKTtcblxuICBAaWYgJGxlbmd0aCA+IDEge1xuICAgIEBmb3IgJGkgZnJvbSAyIHRocm91Z2ggJGxlbmd0aCB7XG4gICAgICBAaWYgJGdldCAhPSBudWxsIGFuZCB0eXBlLW9mKCRnZXQpID09ICdtYXAnIHtcbiAgICAgICAgJHdhcm46ICR3YXJuICsgJy0+I3tudGgoJGtleXMsICRpKX0nO1xuICAgICAgICAkZ2V0OiBtYXAtZ2V0KCRnZXQsIG50aCgka2V5cywgJGkpKTtcblxuICAgICAgICBAaWYgJGdldCA9PSBudWxsIHtcbiAgICAgICAgICBAcmV0dXJuIG1hcC1nZXQtZGVlcC13YXJuaW5nKCR3YXJuLCAkZ2V0LCBudGgoJGtleXMsICRpKSk7XG4gICAgICAgIH1cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICBAcmV0dXJuIG1hcC1nZXQtZGVlcC13YXJuaW5nKCR3YXJuLCAkZ2V0LCBudGgoJGtleXMsICRpKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkZ2V0O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IEtleXNcbkBmdW5jdGlvbiBnZXQta2V5cygka2V5cywgJGNvdW50ZXIpIHtcbiAgJHJldHVybjogKCk7XG5cbiAgQGZvciAkaSBmcm9tIDEgdG8gJGNvdW50ZXIge1xuICAgICRyZXR1cm46IGFwcGVuZCgkcmV0dXJuLCBudGgoJGtleXMsICRpKSk7XG4gIH1cblxuICBAcmV0dXJuICRyZXR1cm47XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgUHJldmlvdXMgS2V5XG5AZnVuY3Rpb24gbWFwLWdldC1wcmV2LWtleSgkbWFwLCAka2V5KSB7XG4gICRpbmRleDogaW5kZXgoJG1hcCwgJGtleSk7XG4gICRwcmV2OiAkaW5kZXggLSAxO1xuICAkcmVzdWx0OiBpZigkcHJldiA+IDAsIG50aCgkbWFwLCAkcHJldiksIG51bGwpO1xuXG4gIEByZXR1cm4gJHJlc3VsdDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIFNldFxuQGZ1bmN0aW9uIG1hcC1zZXQoJG1hcCwgJGtleSwgJHZhbHVlKSB7XG4gIEByZXR1cm4gbWFwLW1lcmdlKFxuICAgICRtYXAsXG4gICAgKFxuICAgICAgJGtleTogJHZhbHVlXG4gICAgKVxuICApO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgU2V0IERlZXBcbkBmdW5jdGlvbiBtYXAtc2V0LWRlZXAoJG1hcCwgJGtleXMsICR2YWx1ZSkge1xuICAkcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzOiB0cnVlICFnbG9iYWw7XG4gICRsZW5ndGg6IGxlbmd0aCgka2V5cyk7XG4gICRnZXQta2V5czogKCk7XG4gICRtYXAtbGV2ZWw6ICgpO1xuXG4gIEBpZiAkbGVuZ3RoID4gMSB7XG4gICAgJGdldC1rZXlzOiBnZXQta2V5cygka2V5cywgJGxlbmd0aCk7XG4gICAgJG1hcC1sZXZlbDogbWFwLWdldC1kZWVwKCRtYXAsICRnZXQta2V5cyk7XG4gIH1cblxuICAkbWVyZ2U6IChcbiAgICBudGgoJGtleXMsICRsZW5ndGgpOiAkdmFsdWVcbiAgKTtcblxuICBAaWYgJG1hcC1sZXZlbCB7XG4gICAgJG1lcmdlOiBtYXAtbWVyZ2UoJG1hcC1sZXZlbCwgJG1lcmdlKTtcbiAgfVxuXG4gIEBmb3IgJGkgZnJvbSAoJGxlbmd0aCAqIC0xICsgMSkgdGhyb3VnaCAtMSB7XG4gICAgJGo6IGFicygkaSk7XG4gICAgJGtleTogbnRoKCRrZXlzLCAkaik7XG5cbiAgICAvLyBAZGVidWcgJGdldC1rZXlzO1xuXG4gICAgQGlmICRqID4gMSB7XG4gICAgICAkZ2V0LWtleXM6IGdldC1rZXlzKCRrZXlzLCAkaik7XG4gICAgICAkbWFwLWxldmVsOiBtYXAtZ2V0LWRlZXAoJG1hcCwgJGdldC1rZXlzKTtcblxuICAgICAgQGlmICRtYXAtbGV2ZWwge1xuICAgICAgICAkbWVyZ2U6IG1hcC1tZXJnZShcbiAgICAgICAgICAkbWFwLWxldmVsLFxuICAgICAgICAgIChcbiAgICAgICAgICAgICRrZXk6ICRtZXJnZVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICAkbWVyZ2U6IChcbiAgICAgICAgICAka2V5OiAkbWVyZ2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IEBlbHNlIHtcbiAgICAgICRtZXJnZTogKFxuICAgICAgICAka2V5OiAkbWVyZ2VcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgJG1hcDogbWFwLW1lcmdlKCRtYXAsICRtZXJnZSk7XG5cbiAgJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5nczogZmFsc2UgIWdsb2JhbDtcblxuICBAcmV0dXJuICRtYXA7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogVU5JVFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUHJvZ3Jlc3NpdmUgY2FsY1xuQGZ1bmN0aW9uIGdldC1wcm9ncmVzc2l2ZS1jYWxjKFxuICAkbWluLW9iai1zaXplLFxuICAkbWF4LW9iai1zaXplLFxuICAkbWluLXZwLFxuICAkbWF4LXZwLFxuICAkdnAtdW5pdDogdndcbikge1xuICBAcmV0dXJuIGNhbGMoXG4gICAgI3skbWluLW9iai1zaXplfSArICN7c3RyaXAtdW5pdCgkbWF4LW9iai1zaXplIC0gJG1pbi1vYmotc2l6ZSl9ICpcbiAgICAgICgoMTAwI3skdnAtdW5pdH0gLSAjeyRtaW4tdnB9KSAvICN7c3RyaXAtdW5pdCgkbWF4LXZwIC0gJG1pbi12cCl9KVxuICApO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IFVOSVRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFN0cmlwIHVuaXRcbkBmdW5jdGlvbiBzdHJpcC11bml0KCRudW1iZXIpIHtcbiAgQGlmIHR5cGUtb2YoJG51bWJlcikgPT0gJ251bWJlcicgYW5kIG5vdCB1bml0bGVzcygkbnVtYmVyKSB7XG4gICAgQHJldHVybiAkbnVtYmVyIC8gKCRudW1iZXIgKiAwICsgMSk7XG4gIH1cblxuICBAcmV0dXJuICRudW1iZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBlbS9yZW0gdW5pdFxuQGZ1bmN0aW9uIGVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCBlbSk7XG59XG5cbkBmdW5jdGlvbiByZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIHJlbSk7XG59XG5cbkBmdW5jdGlvbiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsICR1bml0KSB7XG4gICRmczogMTBweDtcblxuICBAaWYgJGZvbnQtc2l6ZSB7XG4gICAgJGZzOiAkZm9udC1zaXplO1xuICB9XG4gIEBlbHNlIGlmICRiYXNlLWh0bWwtZm9udC1zaXplIHsgLy8gbWFrZSBzdXJlIHRvIGRlZmluZSB0aGlzIHZhcmlhYmxlIG9uIHlvdXIgb3duXG4gICAgJGZzOiAkYmFzZS1odG1sLWZvbnQtc2l6ZTtcbiAgfVxuXG4gIEByZXR1cm4gI3tzdHJpcC11bml0KCRudW0pIC8gc3RyaXAtdW5pdCgkZnMpfSN7JHVuaXR9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgc2NyZWVuIHBlcmNlbnRcbkBmdW5jdGlvbiBnZXQtc2NyZWVuLXBlcmNlbnQoJHdpZHRoLCAkc2NyZWVuKSB7XG4gIEByZXR1cm4gdW5xdW90ZSgnI3skd2lkdGggKiAxMDAgLyAkc2NyZWVufSUnKTtcbn1cblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBaLUlOREVYRVNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2VuZXJhdG9yXG5AZnVuY3Rpb24gei1pbmRleCgkbWFwLCAka2V5cykge1xuICAkZm91bmQtaW5kZXg6IG51bGw7XG5cbiAgQGVhY2ggJGtleSBpbiAka2V5cyB7XG4gICAgQGlmICh0eXBlLW9mKCRtYXApID09ICdtYXAnKSB7XG4gICAgICAkZm91bmQtaW5kZXg6IGluZGV4KG1hcC1rZXlzKCRtYXApLCAka2V5KTtcbiAgICAgICRtYXA6IG1hcC1nZXQoJG1hcCwgJGtleSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkZm91bmQtaW5kZXg6IGluZGV4KCRtYXAsICRrZXkpO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGZvdW5kLWluZGV4O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTZXJ2ZXJcbkBmdW5jdGlvbiB6KCRtYXAsICRrZXlzLi4uKSB7XG4gIEByZXR1cm4gei1pbmRleCgkbWFwLCAka2V5cyk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogRk9STVNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgSW5wdXQgcGxhY2Vob2xkZXJcbkBtaXhpbiBpbnB1dC1wbGFjZWhvbGRlcigkY29sLCAkc3R5bGU6IGl0YWxpYykge1xuICAmOi1tb3otcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxuICAmOjotbW96LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbiAgJjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxuICAmOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbn1cblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBQT1NJVElPTlNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQWJzb2x1dGUgY2VudGVyZWRcbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXJlZCgkdHlwZTogYWJzb2x1dGUsICRwb3M6IDUwJSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIHRvcDogJHBvcztcbiAgbGVmdDogJHBvcztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEFic29sdXRlIGNlbnRlcmVkIFhcbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXJlZC14KCR0eXBlOiBhYnNvbHV0ZSwgJHBvczogNTAlKSB7XG4gIHBvc2l0aW9uOiAkdHlwZTtcbiAgbGVmdDogJHBvcztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBBYnNvbHV0ZSBjZW50ZXJlZCBZXG5AbWl4aW4gYWJzb2x1dGUtY2VudGVyZWQteSgkdHlwZTogYWJzb2x1dGUsICRwb3M6IDUwJSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIHRvcDogJHBvcztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IFNIT1JUSEFORFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUG9zaXRpb25zXG5AbWl4aW4gcG9zaXRpb24tc3RyZXRjaGVkKCR0eXBlOiBhYnNvbHV0ZSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRGltZW5zaW9uc1xuQG1peGluIGRpbWVuc2lvbnMtc3F1YXJlKCR2YWx1ZSkge1xuICB3aWR0aDogJHZhbHVlO1xuICBoZWlnaHQ6ICR2YWx1ZTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUGFkZGluZ1xuQG1peGluIHBhZGRpbmctdigkdmFsdWUpIHtcbiAgcGFkZGluZy10b3A6ICR2YWx1ZTtcbiAgcGFkZGluZy1ib3R0b206ICR2YWx1ZTtcbn1cblxuQG1peGluIHBhZGRpbmctaCgkdmFsdWUpIHtcbiAgcGFkZGluZy1yaWdodDogJHZhbHVlO1xuICBwYWRkaW5nLWxlZnQ6ICR2YWx1ZTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFyZ2luXG5AbWl4aW4gbWFyZ2luLXYoJHZhbHVlKSB7XG4gIG1hcmdpbi10b3A6ICR2YWx1ZTtcbiAgbWFyZ2luLWJvdHRvbTogJHZhbHVlO1xufVxuXG5AbWl4aW4gbWFyZ2luLWgoJHZhbHVlKSB7XG4gIG1hcmdpbi1yaWdodDogJHZhbHVlO1xuICBtYXJnaW4tbGVmdDogJHZhbHVlO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBCb3JkZXJcbkBtaXhpbiBib3JkZXItdigkdmFsdWUpIHtcbiAgYm9yZGVyLXRvcDogJHZhbHVlO1xuICBib3JkZXItYm90dG9tOiAkdmFsdWU7XG59XG5cbkBtaXhpbiBib3JkZXItaCgkdmFsdWUpIHtcbiAgYm9yZGVyLXJpZ2h0OiAkdmFsdWU7XG4gIGJvcmRlci1sZWZ0OiAkdmFsdWU7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogVFlQT0dSQVBIWVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBGb250IHNtb290aGluZ1xuQG1peGluIGZvbnQtc21vb3RoaW5nKCR2YWx1ZTogYW50aWFsaWFzZWQpIHtcbiAgQGlmICR2YWx1ZSA9PSBhbnRpYWxpYXNlZCB7XG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbiAgfSBAZWxzZSB7XG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogc3VicGl4ZWwtYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGF1dG87XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgVGV4dCB1cHBlcmNhc2VcbkBtaXhpbiB0ZXh0LXVwcGVyY2FzZSgpIHtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgLW1vei1mb250LWZlYXR1cmUtc2V0dGluZ3M6ICdjYXNlJztcbiAgLXdlYmtpdC1mb250LWZlYXR1cmUtc2V0dGluZ3M6ICdjYXNlJztcbiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnY2FzZScgb247XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFNlbGVjdGlvblxuQG1peGluIHNlbGVjdGlvbigkY29sKSB7XG4gICRiZ3I6IGlmKCRjb2wgIT0gdHJhbnNwYXJlbnQsIHJnYmEoJGNvbCwgMC41KSwgcmdiYSgwLCAwLCAwLCAwKSk7XG5cbiAgJjo6LW1vei1zZWxlY3Rpb24ge1xuICAgIGJhY2tncm91bmQ6ICRiZ3I7XG4gIH1cblxuICAmOjpzZWxlY3Rpb24ge1xuICAgIGJhY2tncm91bmQ6ICRiZ3I7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gQkFTRVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBJbXBvcnRzXG5AaW1wb3J0ICcuLi8uLi9kZWZzL2JyYW5kLmpzJztcbkBpbXBvcnQgJy4uLy4uL2RlZnMvd2Vic2l0ZS5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEZvbnQgc2l6ZVxuQGZ1bmN0aW9uIHJvbGUoJG1hcCwgJHZhbHVlKSB7XG4gICRyLW1hcDogbWFwLWdldCgkdmFsdWUsICdtYXAnKTtcbiAgJHItdmFsdWU6IG1hcC1nZXQoJHZhbHVlLCAndmFsdWUnKTtcbiAgQHJldHVybiBtYXAtZ2V0KCRyLW1hcCwgJHItdmFsdWUpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnMgPiBDQUxDXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IHZhbHVlIGJhc2VkIG9uIHRoZSBiYXNlIGZvbnQgc2l6ZVxuQGZ1bmN0aW9uIGJhc2UoJHZhbHVlKSB7XG4gIEByZXR1cm4gbWF0aC5kaXYoJHZhbHVlLCBtYXAtZ2V0KCRyb2xlcy1yYXRpb3MsICdsYXlvdXQtZ3Jvd3RoJykpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBQcm9ncmVzc2l2ZSBjYWxjXG5AZnVuY3Rpb24gZ2V0LXByb2dyZXNzaXZlLWNhbGMoXG4gICRtaW4tb2JqLXNpemUsXG4gICRtYXgtb2JqLXNpemUsXG4gICRtaW4tdnAsXG4gICRtYXgtdnAsXG4gICR2cC11bml0OiB2d1xuKSB7XG4gIEByZXR1cm4gY2FsYyhcbiAgICAje3BpeGVsYXRlKCRtaW4tb2JqLXNpemUpfSArICN7c3RyaXAtdW5pdCgkbWF4LW9iai1zaXplIC0gJG1pbi1vYmotc2l6ZSl9ICpcbiAgICAgIChcbiAgICAgICAgKDEwMCN7JHZwLXVuaXR9IC0gI3twaXhlbGF0ZSgkbWluLXZwKX0pIC8gI3tzdHJpcC11bml0KFxuICAgICAgICAgICAgJG1heC12cCAtICRtaW4tdnBcbiAgICAgICAgICApfVxuICAgICAgKVxuICApO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnMgPiBVTklUU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFN0cmlwIHVuaXRcbkBmdW5jdGlvbiBzdHJpcC11bml0KCRudW1iZXIpIHtcbiAgQGlmIHR5cGUtb2YoJG51bWJlcikgPT0gJ251bWJlcicgYW5kIG5vdCB1bml0bGVzcygkbnVtYmVyKSB7XG4gICAgQHJldHVybiBtYXRoLmRpdigkbnVtYmVyLCAoJG51bWJlciAqIDAgKyAxKSk7XG4gIH1cblxuICBAcmV0dXJuICRudW1iZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBQeCB1bml0XG5AZnVuY3Rpb24gcGl4ZWxhdGUoJHZhbHVlKSB7XG4gIEByZXR1cm4gI3tzdHJpcC11bml0KCR2YWx1ZSl9UHg7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBlbS9yZW0gdW5pdFxuQGZ1bmN0aW9uIGVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCBlbSk7XG59XG5cbkBmdW5jdGlvbiByZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIHJlbSk7XG59XG5cbkBmdW5jdGlvbiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsICR1bml0KSB7XG4gICRmczogMTBweDtcblxuICBAaWYgJGZvbnQtc2l6ZSB7XG4gICAgJGZzOiAkZm9udC1zaXplO1xuICB9IEBlbHNlIHtcbiAgICAkZnM6IG1hcC1nZXQoJHR5cG9ncmFwaHksICdiYXNlX2ZvbnRfc2l6ZScpO1xuICB9XG5cbiAgQHJldHVybiAje21hdGguZGl2KHN0cmlwLXVuaXQoJG51bSksIHN0cmlwLXVuaXQoJGZzKSl9I3skdW5pdH07XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIERhdGEgPiBTV0FUQ0hFU1xuXG5AaW1wb3J0ICcuLi8uLi9kZWZzL3N3YXRjaGVzL2luZGV4LmpzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX2JyZWFrcG9pbnRzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX3JhdGlvcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19zY3JlZW5zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX3NwYWNlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIERhdGEgPiBST0xFU1xuXG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19ib3JkZXJzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2JyZWFrcG9pbnRzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2NvbG9ycyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19kaW1lbnNpb25zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3JhdGlvcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19zY3JlZW5zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3NoYWRvd3MnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfc3BhY2VzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3R5cG9ncmFwaHknO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnMgPiBTQ0FMQUJJTElUWVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFNjYWxlclxuQG1peGluIHNjYWxlcihcbiAgJHByb3BlcnR5LFxuICAkbWluLXNpemUsXG4gICRtYXgtc2l6ZSxcbiAgJG1pbi12dzogbWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21pbicpLFxuICAkbWF4LXZ3OiBtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWF4Jylcbikge1xuICAjeyRwcm9wZXJ0eX06ICN7c3RyaXAtdW5pdChtYXRoLmRpdigoJG1pbi12dyAqIDAuOTc5NikgKiAkbWluLXNpemUsIDEwMDApKX12dzsgLy8gMC45Nzk2IGZpeGVzIHdyb25nIGNhbGN1bGF0aW9ucyBpbiBDaHJvbWVcblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAkbWluLXZ3KSB7XG4gICAgI3skcHJvcGVydHl9OiBnZXQtcHJvZ3Jlc3NpdmUtY2FsYygkbWluLXNpemUsICRtYXgtc2l6ZSwgJG1pbi12dywgJG1heC12dyk7XG4gIH1cblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAkbWF4LXZ3KSB7XG4gICAgI3skcHJvcGVydHl9OiBwaXhlbGF0ZSgkbWF4LXNpemUpO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIFBsYWNlaG9sZGVycyA+IFNDQUxBQklMSVRZXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTmVnYXRpdmVcbiVwaC1uZWdhdGl2ZSB7XG4gIGgxLFxuICBoMixcbiAgaDMsXG4gIGg0LFxuICBoNSxcbiAgaDYsXG4gIHAge1xuICAgIGNvbG9yOiBtYXAtZ2V0KCRyb2xlcy1jb2wtdGV4dHMsICduZWdhdGl2ZScpO1xuICB9XG5cbiAgLm1ldGEge1xuICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHN3YXRjaGVzLWNvbG9ycywgJ2hvbmV5LXllbGxvdycsICdsaWdodCcpO1xuICB9XG5cbiAgLnRleHQtbGluayB7XG4gICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnbm9ybWFsJyk7XG4gICAgYm9yZGVyLWJvdHRvbTogcGl4ZWxhdGUoMXB4KSBkb3R0ZWRcbiAgICAgIHJnYmEobWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdub3JtYWwnKSwgMC4zMyk7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2hvdmVyJyk7XG4gICAgfVxuXG4gICAgJjphY3RpdmUge1xuICAgICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnYWN0aXZlJyk7XG4gICAgfVxuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFdhdmVcbiVwaC13YXZlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiA1MCU7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4td2lkdGg6IG1hdGguZGl2KG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtYXgnKSwgMik7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcblxuICA+IHN2ZyB7XG4gICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgSGVhZCB3YXZlXG4lcGgtaGVhZC13YXZlIHtcbiAgJHdhdmUtaGVpZ2h0OiBiYXNlKG1hcC1nZXQoJHJvbGVzLWRpbWVuc2lvbnMtd2F2ZXMsICdoZWFkZXInKSk7XG5cbiAgLndhdmUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICB0b3A6IGNhbGMoMTAwJSAtIDFQeCk7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiBlbSgkd2F2ZS1oZWlnaHQpO1xuXG4gICAgLmlubmVyIHtcbiAgICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKDEwMCUpO1xuXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgICBzdmcge1xuICAgICAgICBAaW5jbHVkZSBkaW1lbnNpb25zLXNxdWFyZSgxMDAlKTtcblxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgbWluLXdpZHRoOiBtYXRoLmRpdihtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWF4JyksIDIpO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQGtleWZyYW1lcyBzbGlkZSB7XG4gICAgZnJvbSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICB9XG5cbiAgICB0byB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAwKTtcbiAgICB9XG4gIH1cblxuICAuc2Nyb2xsLWJ0biB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvdHRvbTogMjBweDtcbiAgICBsZWZ0OiA1MCU7XG4gICAgei1pbmRleDogMTtcbiAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0LWRlZXAoJHN3YXRjaGVzLWNvbG9ycywgJ2Nvcm5mbG93ZXInLCAnYmFzZScpO1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgIGFuaW1hdGlvbjogc2xpZGUgMXMgZWFzZS1pbi1vdXQgaW5maW5pdGUgYWx0ZXJuYXRlO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2hvdmVyJyk7XG4gICAgfVxuXG4gICAgJjphY3RpdmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdhY3RpdmUnKTtcbiAgICB9XG5cbiAgICBzdmcge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgICB9XG5cbiAgICBib2R5Om5vdCguc2Nyb2xsYWJsZSkgJiB7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFZhcmlhYmxlc1xuJHdhdmUtaGVpZ2h0OiBiYXNlKG1hcC1nZXQoJHJvbGVzLWRpbWVuc2lvbnMtd2F2ZXMsICdoZWFkZXInKSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdsb2JhbFxuOmdsb2JhbCguc2luZ2xlKSB7XG4gIC5jb250ZW50IHtcbiAgICBwYWRkaW5nLXRvcDogMDtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBSb290XG4uc2luZ2xlIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gIC5oZWFkIHtcbiAgICAkYmdyLWNvbG9yOiBtYXAtZ2V0LWRlZXAoJHN3YXRjaGVzLWNvbG9ycywgJ3BydXNzaWFuLWJsdWUnLCAnYmFzZScpO1xuXG4gICAgQGV4dGVuZCAlcGgtbmVnYXRpdmU7XG4gICAgQGV4dGVuZCAlcGgtaGVhZC13YXZlO1xuXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHBhZGRpbmctdG9wOiBtYXAtZ2V0KCRyb2xlcy1zcGFjZXMsICdoZWFkLXdhdmUnKTtcbiAgICBtYXJnaW4tYm90dG9tOiBtYXAtZ2V0KCRyb2xlcy1zcGFjZXMsICdoZWFkLXdhdmUnKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmdyLWNvbG9yO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG5cbiAgICAud2F2ZSB7XG4gICAgICBzdmcge1xuICAgICAgICBmaWxsOiAkYmdyLWNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5lcGlzb2RlIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIG1pbi1oZWlnaHQ6IGNhbGMoXG4gICAgICAxMDB2aCAtICN7ZW0oJHdhdmUtaGVpZ2h0ICsgbWFwLWdldCgkcm9sZXMtc3BhY2VzLCAncGFuZWwnKSl9XG4gICAgKTtcblxuICAgIC53cnAtbGF5b3V0IHtcbiAgICAgIHotaW5kZXg6IDE7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleDogMTtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblxuICAgICAgPiBkaXY6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgIH1cblxuICAgICAgPiBkaXY6bm90KDpudGgtY2hpbGQoMSkpIHtcbiAgICAgICAgZmxleDogMjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAubWV0YSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IG1hcC1nZXQoJHJvbGVzLXNwYWNlcywgJ2hlYWQtd2F2ZScpO1xuICAgICAgbGVmdDogNTAlO1xuICAgICAgei1pbmRleDogMjtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICB9XG5cbiAgICBoMSB7XG4gICAgICBtYXJnaW4tdG9wOiBtYXAtZ2V0KCRyb2xlcy1zcGFjZXMsICdzZWN0aW9uJykgKiAxLjM7XG4gICAgfVxuICB9XG5cbiAgLmV4Y2VycHQge1xuICAgICRtaW4tZm9udC1zaXplOiBtYXAtZ2V0KCRyb2xlcy10eXBvLWZvbnQtc2l6ZXMsICdjYXJkLXRleHQnKTtcbiAgICAkbWF4LWZvbnQtc2l6ZTogJG1pbi1mb250LXNpemUgKiBtYXAtZ2V0KCRyb2xlcy1yYXRpb3MsICd0ZXh0LWdyb3d0aCcpO1xuXG4gICAgQGluY2x1ZGUgc2NhbGVyKGZvbnQtc2l6ZSwgJG1pbi1mb250LXNpemUsICRtYXgtZm9udC1zaXplKTtcblxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAyO1xuICAgIG1hcmdpbi10b3A6IG1hcC1nZXQoJHN3YXRjaGVzLXNwYWNlcywgJzUnKTtcbiAgICBmb250LXdlaWdodDogbWFwLWdldCgkcm9sZXMtdHlwby1mb250LXdlaWdodHMsICdjYXJkLXRleHQnKTtcblxuICAgID4gc3BhbiB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIG1hcmdpbi1ib3R0b206IG1hcC1nZXQoJHN3YXRjaGVzLXNwYWNlcywgJzUnKTtcbiAgICAgIGZvbnQtZmFtaWx5OiB1bnF1b3RlKG1hcC1nZXQoJHJvbGVzLXR5cG8tZm9udC1mYW1pbGllcywgJ2JvZHknKSk7XG4gICAgICBmb250LXNpemU6IDEuMWVtO1xuICAgICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkc3dhdGNoZXMtY29sb3JzLCAnaG9uZXkteWVsbG93JywgJ2Jhc2UnKTtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB9XG5cbiAgICBwIHtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgfVxuICB9XG5cbiAgLm1vcmUge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAxO1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgd2lkdGg6IGF1dG87XG4gICAgbWFyZ2luOiAwIG1hcC1nZXQoJHJvbGVzLXNwYWNlcywgJ3BhbmVsJykgKiAwLjVcbiAgICAgIG1hcC1nZXQoJHJvbGVzLXNwYWNlcywgJ3BhbmVsJykgKiAtMTtcbiAgICBsaW5lLWhlaWdodDogbWFwLWdldCgkcm9sZXMtdHlwby1saW5lLWhlaWdodHMsICdoZWFkaW5ncycpO1xuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG5cbiAgICBwIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgfVxuXG4gICAgJixcbiAgICBsYWJlbCB7XG4gICAgICBjdXJzb3I6IHRleHQ7XG4gICAgfVxuXG4gICAgbGFiZWwge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHN3YXRjaGVzLWNvbG9ycywgJ2hvbmV5LXllbGxvdycsICdiYXNlJykgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAubWV0YSB7XG4gICAgICBjb2xvcjogbWFwLWdldCgkcm9sZXMtY29sLXRleHRzLCAnbmVnYXRpdmUnKSAhaW1wb3J0YW50O1xuICAgIH1cbiAgfVxuXG4gIC5jb3ZlciB7XG4gICAgJHNoZWV0LWJncjogbGlnaHRlbihtYXAtZ2V0KCRyb2xlcy1jb2wtYmFja2dyb3VuZHMsICdzaGVldCcpLCAyJSk7XG4gICAgJHJhZGl1czogbWFwLWdldCgkcm9sZXMtYm9yZGVycy1yYWRpdXNlcywgJ2Jsb2NrJyk7XG4gICAgJG5lZ2F0aXZlLW9mZnNldDogbWFwLWdldCgkcm9sZXMtc3BhY2VzLCAncGFuZWwnKSAqIC0xO1xuXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHBlcnNwZWN0aXZlOiAxMDAwcHg7XG4gICAgbWFyZ2luOiAkbmVnYXRpdmUtb2Zmc2V0ICRuZWdhdGl2ZS1vZmZzZXQgM3Z3O1xuXG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIEBpbmNsdWRlIHBvc2l0aW9uLXN0cmV0Y2hlZCgpO1xuXG4gICAgICBib3R0b206IDQwcHg7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRyYWRpdXMgJHJhZGl1cyAwIDA7XG4gICAgICBib3gtc2hhZG93OiAwIDAgMzJweCAtNXB4IHJnYigxODIgMTcwIDE0MCk7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZVgoLTRkZWcpO1xuICAgICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIGNlbnRlcjtcbiAgICB9XG5cbiAgICBwaWN0dXJlIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDA7XG4gICAgICBwYWRkaW5nLXRvcDogbWF0aC5kaXYoOSwgMTYpICogMTAwJTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBib3JkZXI6IHBpeGVsYXRlKDFweCkgc29saWQgJHNoZWV0LWJncjtcbiAgICAgIGJvcmRlci1ib3R0b20td2lkdGg6IHBpeGVsYXRlKDFweCk7XG4gICAgICBib3JkZXItcmFkaXVzOiAkcmFkaXVzICRyYWRpdXMgMCAwO1xuXG4gICAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiBtYXAtZ2V0KCRyb2xlcy1icmVha3BvaW50cywgJ3R3by1jb2x1bW5zJykpIHtcbiAgICAgICAgcGFkZGluZy10b3A6IG1hdGguZGl2KDksIDIxKSAqIDEwMCU7XG4gICAgICB9XG5cbiAgICAgIHNwYW4ge1xuICAgICAgICBAaW5jbHVkZSBkaW1lbnNpb25zLXNxdWFyZSgxMDAlKTtcblxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW1nIHtcbiAgICAgIEBpbmNsdWRlIGFic29sdXRlLWNlbnRlcmVkLXgoKTtcbiAgICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKDEwMCUpO1xuXG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIG9iamVjdC1maXQ6IGNvdmVyO1xuICAgIH1cbiAgfVxuXG4gIDpnbG9iYWwge1xuICAgIC5zaGFyZWRhZGR5IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIG1hcmdpbi10b3A6IG1hcC1nZXQoJHN3YXRjaGVzLXNwYWNlcywgJzE1Jyk7XG5cbiAgICAgIC5zaGFyZS1jdXN0b21pemUtbGluayxcbiAgICAgIC5zaGFyZS1lbmQge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuXG4gICAgICAuc2QtYmxvY2sge1xuICAgICAgICB3aWR0aDogNTAlICFpbXBvcnRhbnQ7XG4gICAgICAgIG1pbi13aWR0aDogMjAwcHg7XG4gICAgICB9XG5cbiAgICAgIC5zZC10aXRsZSB7XG4gICAgICAgICRtaW4tZm9udC1zaXplOiBtYXAtZ2V0KCRyb2xlcy10eXBvLWZvbnQtc2l6ZXMsICdtZXRhJyk7XG4gICAgICAgICRtYXgtZm9udC1zaXplOiAkbWluLWZvbnQtc2l6ZSAqIG1hcC1nZXQoJHJvbGVzLXJhdGlvcywgJ3RleHQtZ3Jvd3RoJyk7XG5cbiAgICAgICAgQGluY2x1ZGUgc2NhbGVyKGZvbnQtc2l6ZSwgJG1pbi1mb250LXNpemUsICRtYXgtZm9udC1zaXplKTtcblxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBmb250LWZhbWlseTogdW5xdW90ZShtYXAtZ2V0KCRyb2xlcy10eXBvLWZvbnQtZmFtaWxpZXMsICdib2R5JykpO1xuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRzd2F0Y2hlcy1jb2xvcnMsICdibHVlLWdyZWVuJywgJ2Jhc2UnKTtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgYm9yZGVyLXRvcDogcGl4ZWxhdGUoMXB4KSBkb3R0ZWRcbiAgICAgICAgICAgIG1hcC1nZXQtZGVlcCgkc3dhdGNoZXMtY29sb3JzLCAnYmx1ZS1ncmVlbicsICdiYXNlJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLnNkLWNvbnRlbnQge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIH1cblxuICAgICAgbGkge1xuICAgICAgICBtYXJnaW46IDAgbWFwLWdldCgkc3dhdGNoZXMtc3BhY2VzLCAnNScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBPdmVyd3JpdGVzXG46Z2xvYmFsIHtcbiAgLmpwLXNoYXJpbmctaW5wdXQtdG91Y2ggLnNkLWNvbnRlbnQgdWwgbGkge1xuICAgIEBpbmNsdWRlIHBhZGRpbmctaChtYXAtZ2V0KCRzd2F0Y2hlcy1zcGFjZXMsICc1JykpO1xuICB9XG59XG4iLCIvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBQYWdlcyA+IEFCT1VUXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcbkB1c2UgJ3Nhc3M6bWF0aCc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogQ09MT1JTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IExpZ2h0XG5AZnVuY3Rpb24gbGlnaHQoJGNvbG9yLCAkcGVyY2VudCkge1xuICBAcmV0dXJuIG1peCgjZmZmLCAkY29sb3IsICRwZXJjZW50KTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRGFya1xuQGZ1bmN0aW9uIGRhcmsoJGNvbG9yLCAkcGVyY2VudCkge1xuICBAcmV0dXJuIG1peCgjMDAwLCAkY29sb3IsICRwZXJjZW50KTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBNQVBTXG5cbiRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3M6IGZhbHNlICFkZWZhdWx0O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IERlZXAgV2FybmluZ1xuLy8gRGlzcGxheXMgYSB3YXJuaW5nIGlmIHRoZSByZXRyaWV2ZWQgdmFsdWUgaXMgYG51bGxgXG5AZnVuY3Rpb24gbWFwLWdldC1kZWVwLXdhcm5pbmcoJHdhcm4sICRnZXQsICRrZXkpIHtcbiAgQGlmIG5vdCAkcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzIHtcbiAgICBAaWYgJGdldCA9PSBudWxsIHtcbiAgICAgIEB3YXJuICdNYXAgaGFzIG5vIHZhbHVlIGZvciBrZXkgc2VhcmNoIGAjeyR3YXJufWAnO1xuICAgIH0gQGVsc2UgaWYgdHlwZS1vZigkZ2V0KSAhPSAnbWFwJyB7XG4gICAgICBAd2FybiAnTm9uLW1hcCB2YWx1ZSBmb3VuZCBmb3Iga2V5IHNlYXJjaCBgI3skd2Fybn1gLCBjYW5ub3Qgc2VhcmNoIGZvciBrZXkgYCN7JGtleX1gJztcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuIG51bGw7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgRGVlcFxuLy8gR2l2ZW4gYSBtYXAgYW5kIGEgbGlzdCBvZiBrZXlzLCBmaW5kIHRoZSB2YWx1ZSBhdCB0aGUgZ2l2ZW4ga2V5XG5AZnVuY3Rpb24gbWFwLWdldC1kZWVwKCRtYXAsICRrZXlzLi4uKSB7XG4gIEBpZiBsZW5ndGgoJGtleXMpID09IDEge1xuICAgICRrZXlzOiBudGgoJGtleXMsIDEpO1xuICB9XG5cbiAgJHdhcm46ICcje250aCgka2V5cywgMSl9JztcbiAgJGxlbmd0aDogbGVuZ3RoKCRrZXlzKTtcbiAgJGdldDogbWFwLWdldCgkbWFwLCBudGgoJGtleXMsIDEpKTtcblxuICBAaWYgJGxlbmd0aCA+IDEge1xuICAgIEBmb3IgJGkgZnJvbSAyIHRocm91Z2ggJGxlbmd0aCB7XG4gICAgICBAaWYgJGdldCAhPSBudWxsIGFuZCB0eXBlLW9mKCRnZXQpID09ICdtYXAnIHtcbiAgICAgICAgJHdhcm46ICR3YXJuICsgJy0+I3tudGgoJGtleXMsICRpKX0nO1xuICAgICAgICAkZ2V0OiBtYXAtZ2V0KCRnZXQsIG50aCgka2V5cywgJGkpKTtcblxuICAgICAgICBAaWYgJGdldCA9PSBudWxsIHtcbiAgICAgICAgICBAcmV0dXJuIG1hcC1nZXQtZGVlcC13YXJuaW5nKCR3YXJuLCAkZ2V0LCBudGgoJGtleXMsICRpKSk7XG4gICAgICAgIH1cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICBAcmV0dXJuIG1hcC1nZXQtZGVlcC13YXJuaW5nKCR3YXJuLCAkZ2V0LCBudGgoJGtleXMsICRpKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkZ2V0O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IEtleXNcbkBmdW5jdGlvbiBnZXQta2V5cygka2V5cywgJGNvdW50ZXIpIHtcbiAgJHJldHVybjogKCk7XG5cbiAgQGZvciAkaSBmcm9tIDEgdG8gJGNvdW50ZXIge1xuICAgICRyZXR1cm46IGFwcGVuZCgkcmV0dXJuLCBudGgoJGtleXMsICRpKSk7XG4gIH1cblxuICBAcmV0dXJuICRyZXR1cm47XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgUHJldmlvdXMgS2V5XG5AZnVuY3Rpb24gbWFwLWdldC1wcmV2LWtleSgkbWFwLCAka2V5KSB7XG4gICRpbmRleDogaW5kZXgoJG1hcCwgJGtleSk7XG4gICRwcmV2OiAkaW5kZXggLSAxO1xuICAkcmVzdWx0OiBpZigkcHJldiA+IDAsIG50aCgkbWFwLCAkcHJldiksIG51bGwpO1xuXG4gIEByZXR1cm4gJHJlc3VsdDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIFNldFxuQGZ1bmN0aW9uIG1hcC1zZXQoJG1hcCwgJGtleSwgJHZhbHVlKSB7XG4gIEByZXR1cm4gbWFwLW1lcmdlKFxuICAgICRtYXAsXG4gICAgKFxuICAgICAgJGtleTogJHZhbHVlXG4gICAgKVxuICApO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgU2V0IERlZXBcbkBmdW5jdGlvbiBtYXAtc2V0LWRlZXAoJG1hcCwgJGtleXMsICR2YWx1ZSkge1xuICAkcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzOiB0cnVlICFnbG9iYWw7XG4gICRsZW5ndGg6IGxlbmd0aCgka2V5cyk7XG4gICRnZXQta2V5czogKCk7XG4gICRtYXAtbGV2ZWw6ICgpO1xuXG4gIEBpZiAkbGVuZ3RoID4gMSB7XG4gICAgJGdldC1rZXlzOiBnZXQta2V5cygka2V5cywgJGxlbmd0aCk7XG4gICAgJG1hcC1sZXZlbDogbWFwLWdldC1kZWVwKCRtYXAsICRnZXQta2V5cyk7XG4gIH1cblxuICAkbWVyZ2U6IChcbiAgICBudGgoJGtleXMsICRsZW5ndGgpOiAkdmFsdWVcbiAgKTtcblxuICBAaWYgJG1hcC1sZXZlbCB7XG4gICAgJG1lcmdlOiBtYXAtbWVyZ2UoJG1hcC1sZXZlbCwgJG1lcmdlKTtcbiAgfVxuXG4gIEBmb3IgJGkgZnJvbSAoJGxlbmd0aCAqIC0xICsgMSkgdGhyb3VnaCAtMSB7XG4gICAgJGo6IGFicygkaSk7XG4gICAgJGtleTogbnRoKCRrZXlzLCAkaik7XG5cbiAgICAvLyBAZGVidWcgJGdldC1rZXlzO1xuXG4gICAgQGlmICRqID4gMSB7XG4gICAgICAkZ2V0LWtleXM6IGdldC1rZXlzKCRrZXlzLCAkaik7XG4gICAgICAkbWFwLWxldmVsOiBtYXAtZ2V0LWRlZXAoJG1hcCwgJGdldC1rZXlzKTtcblxuICAgICAgQGlmICRtYXAtbGV2ZWwge1xuICAgICAgICAkbWVyZ2U6IG1hcC1tZXJnZShcbiAgICAgICAgICAkbWFwLWxldmVsLFxuICAgICAgICAgIChcbiAgICAgICAgICAgICRrZXk6ICRtZXJnZVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICAkbWVyZ2U6IChcbiAgICAgICAgICAka2V5OiAkbWVyZ2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IEBlbHNlIHtcbiAgICAgICRtZXJnZTogKFxuICAgICAgICAka2V5OiAkbWVyZ2VcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgJG1hcDogbWFwLW1lcmdlKCRtYXAsICRtZXJnZSk7XG5cbiAgJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5nczogZmFsc2UgIWdsb2JhbDtcblxuICBAcmV0dXJuICRtYXA7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogVU5JVFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUHJvZ3Jlc3NpdmUgY2FsY1xuQGZ1bmN0aW9uIGdldC1wcm9ncmVzc2l2ZS1jYWxjKFxuICAkbWluLW9iai1zaXplLFxuICAkbWF4LW9iai1zaXplLFxuICAkbWluLXZwLFxuICAkbWF4LXZwLFxuICAkdnAtdW5pdDogdndcbikge1xuICBAcmV0dXJuIGNhbGMoXG4gICAgI3skbWluLW9iai1zaXplfSArICN7c3RyaXAtdW5pdCgkbWF4LW9iai1zaXplIC0gJG1pbi1vYmotc2l6ZSl9ICpcbiAgICAgICgoMTAwI3skdnAtdW5pdH0gLSAjeyRtaW4tdnB9KSAvICN7c3RyaXAtdW5pdCgkbWF4LXZwIC0gJG1pbi12cCl9KVxuICApO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IFVOSVRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFN0cmlwIHVuaXRcbkBmdW5jdGlvbiBzdHJpcC11bml0KCRudW1iZXIpIHtcbiAgQGlmIHR5cGUtb2YoJG51bWJlcikgPT0gJ251bWJlcicgYW5kIG5vdCB1bml0bGVzcygkbnVtYmVyKSB7XG4gICAgQHJldHVybiAkbnVtYmVyIC8gKCRudW1iZXIgKiAwICsgMSk7XG4gIH1cblxuICBAcmV0dXJuICRudW1iZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBlbS9yZW0gdW5pdFxuQGZ1bmN0aW9uIGVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCBlbSk7XG59XG5cbkBmdW5jdGlvbiByZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIHJlbSk7XG59XG5cbkBmdW5jdGlvbiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsICR1bml0KSB7XG4gICRmczogMTBweDtcblxuICBAaWYgJGZvbnQtc2l6ZSB7XG4gICAgJGZzOiAkZm9udC1zaXplO1xuICB9XG4gIEBlbHNlIGlmICRiYXNlLWh0bWwtZm9udC1zaXplIHsgLy8gbWFrZSBzdXJlIHRvIGRlZmluZSB0aGlzIHZhcmlhYmxlIG9uIHlvdXIgb3duXG4gICAgJGZzOiAkYmFzZS1odG1sLWZvbnQtc2l6ZTtcbiAgfVxuXG4gIEByZXR1cm4gI3tzdHJpcC11bml0KCRudW0pIC8gc3RyaXAtdW5pdCgkZnMpfSN7JHVuaXR9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgc2NyZWVuIHBlcmNlbnRcbkBmdW5jdGlvbiBnZXQtc2NyZWVuLXBlcmNlbnQoJHdpZHRoLCAkc2NyZWVuKSB7XG4gIEByZXR1cm4gdW5xdW90ZSgnI3skd2lkdGggKiAxMDAgLyAkc2NyZWVufSUnKTtcbn1cblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBaLUlOREVYRVNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2VuZXJhdG9yXG5AZnVuY3Rpb24gei1pbmRleCgkbWFwLCAka2V5cykge1xuICAkZm91bmQtaW5kZXg6IG51bGw7XG5cbiAgQGVhY2ggJGtleSBpbiAka2V5cyB7XG4gICAgQGlmICh0eXBlLW9mKCRtYXApID09ICdtYXAnKSB7XG4gICAgICAkZm91bmQtaW5kZXg6IGluZGV4KG1hcC1rZXlzKCRtYXApLCAka2V5KTtcbiAgICAgICRtYXA6IG1hcC1nZXQoJG1hcCwgJGtleSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkZm91bmQtaW5kZXg6IGluZGV4KCRtYXAsICRrZXkpO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGZvdW5kLWluZGV4O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTZXJ2ZXJcbkBmdW5jdGlvbiB6KCRtYXAsICRrZXlzLi4uKSB7XG4gIEByZXR1cm4gei1pbmRleCgkbWFwLCAka2V5cyk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogRk9STVNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgSW5wdXQgcGxhY2Vob2xkZXJcbkBtaXhpbiBpbnB1dC1wbGFjZWhvbGRlcigkY29sLCAkc3R5bGU6IGl0YWxpYykge1xuICAmOi1tb3otcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxuICAmOjotbW96LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbiAgJjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxuICAmOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbn1cblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBQT1NJVElPTlNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQWJzb2x1dGUgY2VudGVyZWRcbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXJlZCgkdHlwZTogYWJzb2x1dGUsICRwb3M6IDUwJSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIHRvcDogJHBvcztcbiAgbGVmdDogJHBvcztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEFic29sdXRlIGNlbnRlcmVkIFhcbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXJlZC14KCR0eXBlOiBhYnNvbHV0ZSwgJHBvczogNTAlKSB7XG4gIHBvc2l0aW9uOiAkdHlwZTtcbiAgbGVmdDogJHBvcztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBBYnNvbHV0ZSBjZW50ZXJlZCBZXG5AbWl4aW4gYWJzb2x1dGUtY2VudGVyZWQteSgkdHlwZTogYWJzb2x1dGUsICRwb3M6IDUwJSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIHRvcDogJHBvcztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IFNIT1JUSEFORFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUG9zaXRpb25zXG5AbWl4aW4gcG9zaXRpb24tc3RyZXRjaGVkKCR0eXBlOiBhYnNvbHV0ZSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRGltZW5zaW9uc1xuQG1peGluIGRpbWVuc2lvbnMtc3F1YXJlKCR2YWx1ZSkge1xuICB3aWR0aDogJHZhbHVlO1xuICBoZWlnaHQ6ICR2YWx1ZTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUGFkZGluZ1xuQG1peGluIHBhZGRpbmctdigkdmFsdWUpIHtcbiAgcGFkZGluZy10b3A6ICR2YWx1ZTtcbiAgcGFkZGluZy1ib3R0b206ICR2YWx1ZTtcbn1cblxuQG1peGluIHBhZGRpbmctaCgkdmFsdWUpIHtcbiAgcGFkZGluZy1yaWdodDogJHZhbHVlO1xuICBwYWRkaW5nLWxlZnQ6ICR2YWx1ZTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFyZ2luXG5AbWl4aW4gbWFyZ2luLXYoJHZhbHVlKSB7XG4gIG1hcmdpbi10b3A6ICR2YWx1ZTtcbiAgbWFyZ2luLWJvdHRvbTogJHZhbHVlO1xufVxuXG5AbWl4aW4gbWFyZ2luLWgoJHZhbHVlKSB7XG4gIG1hcmdpbi1yaWdodDogJHZhbHVlO1xuICBtYXJnaW4tbGVmdDogJHZhbHVlO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBCb3JkZXJcbkBtaXhpbiBib3JkZXItdigkdmFsdWUpIHtcbiAgYm9yZGVyLXRvcDogJHZhbHVlO1xuICBib3JkZXItYm90dG9tOiAkdmFsdWU7XG59XG5cbkBtaXhpbiBib3JkZXItaCgkdmFsdWUpIHtcbiAgYm9yZGVyLXJpZ2h0OiAkdmFsdWU7XG4gIGJvcmRlci1sZWZ0OiAkdmFsdWU7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogVFlQT0dSQVBIWVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBGb250IHNtb290aGluZ1xuQG1peGluIGZvbnQtc21vb3RoaW5nKCR2YWx1ZTogYW50aWFsaWFzZWQpIHtcbiAgQGlmICR2YWx1ZSA9PSBhbnRpYWxpYXNlZCB7XG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbiAgfSBAZWxzZSB7XG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogc3VicGl4ZWwtYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGF1dG87XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgVGV4dCB1cHBlcmNhc2VcbkBtaXhpbiB0ZXh0LXVwcGVyY2FzZSgpIHtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgLW1vei1mb250LWZlYXR1cmUtc2V0dGluZ3M6ICdjYXNlJztcbiAgLXdlYmtpdC1mb250LWZlYXR1cmUtc2V0dGluZ3M6ICdjYXNlJztcbiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnY2FzZScgb247XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFNlbGVjdGlvblxuQG1peGluIHNlbGVjdGlvbigkY29sKSB7XG4gICRiZ3I6IGlmKCRjb2wgIT0gdHJhbnNwYXJlbnQsIHJnYmEoJGNvbCwgMC41KSwgcmdiYSgwLCAwLCAwLCAwKSk7XG5cbiAgJjo6LW1vei1zZWxlY3Rpb24ge1xuICAgIGJhY2tncm91bmQ6ICRiZ3I7XG4gIH1cblxuICAmOjpzZWxlY3Rpb24ge1xuICAgIGJhY2tncm91bmQ6ICRiZ3I7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gQkFTRVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBJbXBvcnRzXG5AaW1wb3J0ICcuLi8uLi9kZWZzL2JyYW5kLmpzJztcbkBpbXBvcnQgJy4uLy4uL2RlZnMvd2Vic2l0ZS5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEZvbnQgc2l6ZVxuQGZ1bmN0aW9uIHJvbGUoJG1hcCwgJHZhbHVlKSB7XG4gICRyLW1hcDogbWFwLWdldCgkdmFsdWUsICdtYXAnKTtcbiAgJHItdmFsdWU6IG1hcC1nZXQoJHZhbHVlLCAndmFsdWUnKTtcbiAgQHJldHVybiBtYXAtZ2V0KCRyLW1hcCwgJHItdmFsdWUpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnMgPiBDQUxDXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IHZhbHVlIGJhc2VkIG9uIHRoZSBiYXNlIGZvbnQgc2l6ZVxuQGZ1bmN0aW9uIGJhc2UoJHZhbHVlKSB7XG4gIEByZXR1cm4gbWF0aC5kaXYoJHZhbHVlLCBtYXAtZ2V0KCRyb2xlcy1yYXRpb3MsICdsYXlvdXQtZ3Jvd3RoJykpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBQcm9ncmVzc2l2ZSBjYWxjXG5AZnVuY3Rpb24gZ2V0LXByb2dyZXNzaXZlLWNhbGMoXG4gICRtaW4tb2JqLXNpemUsXG4gICRtYXgtb2JqLXNpemUsXG4gICRtaW4tdnAsXG4gICRtYXgtdnAsXG4gICR2cC11bml0OiB2d1xuKSB7XG4gIEByZXR1cm4gY2FsYyhcbiAgICAje3BpeGVsYXRlKCRtaW4tb2JqLXNpemUpfSArICN7c3RyaXAtdW5pdCgkbWF4LW9iai1zaXplIC0gJG1pbi1vYmotc2l6ZSl9ICpcbiAgICAgIChcbiAgICAgICAgKDEwMCN7JHZwLXVuaXR9IC0gI3twaXhlbGF0ZSgkbWluLXZwKX0pIC8gI3tzdHJpcC11bml0KFxuICAgICAgICAgICAgJG1heC12cCAtICRtaW4tdnBcbiAgICAgICAgICApfVxuICAgICAgKVxuICApO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnMgPiBVTklUU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFN0cmlwIHVuaXRcbkBmdW5jdGlvbiBzdHJpcC11bml0KCRudW1iZXIpIHtcbiAgQGlmIHR5cGUtb2YoJG51bWJlcikgPT0gJ251bWJlcicgYW5kIG5vdCB1bml0bGVzcygkbnVtYmVyKSB7XG4gICAgQHJldHVybiBtYXRoLmRpdigkbnVtYmVyLCAoJG51bWJlciAqIDAgKyAxKSk7XG4gIH1cblxuICBAcmV0dXJuICRudW1iZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBQeCB1bml0XG5AZnVuY3Rpb24gcGl4ZWxhdGUoJHZhbHVlKSB7XG4gIEByZXR1cm4gI3tzdHJpcC11bml0KCR2YWx1ZSl9UHg7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBlbS9yZW0gdW5pdFxuQGZ1bmN0aW9uIGVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCBlbSk7XG59XG5cbkBmdW5jdGlvbiByZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIHJlbSk7XG59XG5cbkBmdW5jdGlvbiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsICR1bml0KSB7XG4gICRmczogMTBweDtcblxuICBAaWYgJGZvbnQtc2l6ZSB7XG4gICAgJGZzOiAkZm9udC1zaXplO1xuICB9IEBlbHNlIHtcbiAgICAkZnM6IG1hcC1nZXQoJHR5cG9ncmFwaHksICdiYXNlX2ZvbnRfc2l6ZScpO1xuICB9XG5cbiAgQHJldHVybiAje21hdGguZGl2KHN0cmlwLXVuaXQoJG51bSksIHN0cmlwLXVuaXQoJGZzKSl9I3skdW5pdH07XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIERhdGEgPiBTV0FUQ0hFU1xuXG5AaW1wb3J0ICcuLi8uLi9kZWZzL3N3YXRjaGVzL2luZGV4LmpzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX2JyZWFrcG9pbnRzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX3JhdGlvcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19zY3JlZW5zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX3NwYWNlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIERhdGEgPiBST0xFU1xuXG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19ib3JkZXJzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2JyZWFrcG9pbnRzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2NvbG9ycyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19kaW1lbnNpb25zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3JhdGlvcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19zY3JlZW5zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3NoYWRvd3MnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfc3BhY2VzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3R5cG9ncmFwaHknO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnMgPiBTQ0FMQUJJTElUWVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFNjYWxlclxuQG1peGluIHNjYWxlcihcbiAgJHByb3BlcnR5LFxuICAkbWluLXNpemUsXG4gICRtYXgtc2l6ZSxcbiAgJG1pbi12dzogbWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21pbicpLFxuICAkbWF4LXZ3OiBtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWF4Jylcbikge1xuICAjeyRwcm9wZXJ0eX06ICN7c3RyaXAtdW5pdChtYXRoLmRpdigoJG1pbi12dyAqIDAuOTc5NikgKiAkbWluLXNpemUsIDEwMDApKX12dzsgLy8gMC45Nzk2IGZpeGVzIHdyb25nIGNhbGN1bGF0aW9ucyBpbiBDaHJvbWVcblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAkbWluLXZ3KSB7XG4gICAgI3skcHJvcGVydHl9OiBnZXQtcHJvZ3Jlc3NpdmUtY2FsYygkbWluLXNpemUsICRtYXgtc2l6ZSwgJG1pbi12dywgJG1heC12dyk7XG4gIH1cblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAkbWF4LXZ3KSB7XG4gICAgI3skcHJvcGVydHl9OiBwaXhlbGF0ZSgkbWF4LXNpemUpO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIFBsYWNlaG9sZGVycyA+IFNDQUxBQklMSVRZXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTmVnYXRpdmVcbiVwaC1uZWdhdGl2ZSB7XG4gIGgxLFxuICBoMixcbiAgaDMsXG4gIGg0LFxuICBoNSxcbiAgaDYsXG4gIHAge1xuICAgIGNvbG9yOiBtYXAtZ2V0KCRyb2xlcy1jb2wtdGV4dHMsICduZWdhdGl2ZScpO1xuICB9XG5cbiAgLm1ldGEge1xuICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHN3YXRjaGVzLWNvbG9ycywgJ2hvbmV5LXllbGxvdycsICdsaWdodCcpO1xuICB9XG5cbiAgLnRleHQtbGluayB7XG4gICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnbm9ybWFsJyk7XG4gICAgYm9yZGVyLWJvdHRvbTogcGl4ZWxhdGUoMXB4KSBkb3R0ZWRcbiAgICAgIHJnYmEobWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdub3JtYWwnKSwgMC4zMyk7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2hvdmVyJyk7XG4gICAgfVxuXG4gICAgJjphY3RpdmUge1xuICAgICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnYWN0aXZlJyk7XG4gICAgfVxuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFdhdmVcbiVwaC13YXZlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiA1MCU7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4td2lkdGg6IG1hdGguZGl2KG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtYXgnKSwgMik7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcblxuICA+IHN2ZyB7XG4gICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgSGVhZCB3YXZlXG4lcGgtaGVhZC13YXZlIHtcbiAgJHdhdmUtaGVpZ2h0OiBiYXNlKG1hcC1nZXQoJHJvbGVzLWRpbWVuc2lvbnMtd2F2ZXMsICdoZWFkZXInKSk7XG5cbiAgLndhdmUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICB0b3A6IGNhbGMoMTAwJSAtIDFQeCk7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiBlbSgkd2F2ZS1oZWlnaHQpO1xuXG4gICAgLmlubmVyIHtcbiAgICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKDEwMCUpO1xuXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgICBzdmcge1xuICAgICAgICBAaW5jbHVkZSBkaW1lbnNpb25zLXNxdWFyZSgxMDAlKTtcblxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgbWluLXdpZHRoOiBtYXRoLmRpdihtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWF4JyksIDIpO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQGtleWZyYW1lcyBzbGlkZSB7XG4gICAgZnJvbSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICB9XG5cbiAgICB0byB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAwKTtcbiAgICB9XG4gIH1cblxuICAuc2Nyb2xsLWJ0biB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvdHRvbTogMjBweDtcbiAgICBsZWZ0OiA1MCU7XG4gICAgei1pbmRleDogMTtcbiAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0LWRlZXAoJHN3YXRjaGVzLWNvbG9ycywgJ2Nvcm5mbG93ZXInLCAnYmFzZScpO1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgIGFuaW1hdGlvbjogc2xpZGUgMXMgZWFzZS1pbi1vdXQgaW5maW5pdGUgYWx0ZXJuYXRlO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2hvdmVyJyk7XG4gICAgfVxuXG4gICAgJjphY3RpdmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdhY3RpdmUnKTtcbiAgICB9XG5cbiAgICBzdmcge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgICB9XG5cbiAgICBib2R5Om5vdCguc2Nyb2xsYWJsZSkgJiB7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFJvb3RcbjpnbG9iYWwoLnBhZ2UtdGVtcGxhdGUtYWJvdXQpIHtcbiAgLnRyYWlsZXItcGxheWVyIHtcbiAgICBtYXJnaW4tdG9wOiBtYXAtZ2V0KCRyb2xlcy1zcGFjZXMsICdwYW5lbCcpO1xuXG4gICAgYSB7XG4gICAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRzd2F0Y2hlcy1jb2xvcnMsICdwcnVzc2lhbi1ibHVlJywgJ2Jhc2UnKTtcbiAgICB9XG4gIH1cblxuICAucG9zdC1ib2R5IHtcbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiBtYXAtZ2V0KCRyb2xlcy1icmVha3BvaW50cywgJ3RleHQtY29sdW1ucycpKSB7XG4gICAgICBjb2x1bW4tY291bnQ6IDI7XG4gICAgICBjb2x1bW4tZ2FwOiBtYXAtZ2V0KCRyb2xlcy1zcGFjZXMsICdwYW5lbCcpO1xuXG4gICAgICBwIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBicmVhay1pbnNpZGU6IGF2b2lkO1xuICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gUGFnZXMgPiBFUlJPUiA0MDRcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuQHVzZSAnc2FzczptYXRoJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBDT0xPUlNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTGlnaHRcbkBmdW5jdGlvbiBsaWdodCgkY29sb3IsICRwZXJjZW50KSB7XG4gIEByZXR1cm4gbWl4KCNmZmYsICRjb2xvciwgJHBlcmNlbnQpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBEYXJrXG5AZnVuY3Rpb24gZGFyaygkY29sb3IsICRwZXJjZW50KSB7XG4gIEByZXR1cm4gbWl4KCMwMDAsICRjb2xvciwgJHBlcmNlbnQpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IE1BUFNcblxuJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5nczogZmFsc2UgIWRlZmF1bHQ7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgRGVlcCBXYXJuaW5nXG4vLyBEaXNwbGF5cyBhIHdhcm5pbmcgaWYgdGhlIHJldHJpZXZlZCB2YWx1ZSBpcyBgbnVsbGBcbkBmdW5jdGlvbiBtYXAtZ2V0LWRlZXAtd2FybmluZygkd2FybiwgJGdldCwgJGtleSkge1xuICBAaWYgbm90ICRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3Mge1xuICAgIEBpZiAkZ2V0ID09IG51bGwge1xuICAgICAgQHdhcm4gJ01hcCBoYXMgbm8gdmFsdWUgZm9yIGtleSBzZWFyY2ggYCN7JHdhcm59YCc7XG4gICAgfSBAZWxzZSBpZiB0eXBlLW9mKCRnZXQpICE9ICdtYXAnIHtcbiAgICAgIEB3YXJuICdOb24tbWFwIHZhbHVlIGZvdW5kIGZvciBrZXkgc2VhcmNoIGAjeyR3YXJufWAsIGNhbm5vdCBzZWFyY2ggZm9yIGtleSBgI3ska2V5fWAnO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gbnVsbDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIEdldCBEZWVwXG4vLyBHaXZlbiBhIG1hcCBhbmQgYSBsaXN0IG9mIGtleXMsIGZpbmQgdGhlIHZhbHVlIGF0IHRoZSBnaXZlbiBrZXlcbkBmdW5jdGlvbiBtYXAtZ2V0LWRlZXAoJG1hcCwgJGtleXMuLi4pIHtcbiAgQGlmIGxlbmd0aCgka2V5cykgPT0gMSB7XG4gICAgJGtleXM6IG50aCgka2V5cywgMSk7XG4gIH1cblxuICAkd2FybjogJyN7bnRoKCRrZXlzLCAxKX0nO1xuICAkbGVuZ3RoOiBsZW5ndGgoJGtleXMpO1xuICAkZ2V0OiBtYXAtZ2V0KCRtYXAsIG50aCgka2V5cywgMSkpO1xuXG4gIEBpZiAkbGVuZ3RoID4gMSB7XG4gICAgQGZvciAkaSBmcm9tIDIgdGhyb3VnaCAkbGVuZ3RoIHtcbiAgICAgIEBpZiAkZ2V0ICE9IG51bGwgYW5kIHR5cGUtb2YoJGdldCkgPT0gJ21hcCcge1xuICAgICAgICAkd2FybjogJHdhcm4gKyAnLT4je250aCgka2V5cywgJGkpfSc7XG4gICAgICAgICRnZXQ6IG1hcC1nZXQoJGdldCwgbnRoKCRrZXlzLCAkaSkpO1xuXG4gICAgICAgIEBpZiAkZ2V0ID09IG51bGwge1xuICAgICAgICAgIEByZXR1cm4gbWFwLWdldC1kZWVwLXdhcm5pbmcoJHdhcm4sICRnZXQsIG50aCgka2V5cywgJGkpKTtcbiAgICAgICAgfVxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIEByZXR1cm4gbWFwLWdldC1kZWVwLXdhcm5pbmcoJHdhcm4sICRnZXQsIG50aCgka2V5cywgJGkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRnZXQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgS2V5c1xuQGZ1bmN0aW9uIGdldC1rZXlzKCRrZXlzLCAkY291bnRlcikge1xuICAkcmV0dXJuOiAoKTtcblxuICBAZm9yICRpIGZyb20gMSB0byAkY291bnRlciB7XG4gICAgJHJldHVybjogYXBwZW5kKCRyZXR1cm4sIG50aCgka2V5cywgJGkpKTtcbiAgfVxuXG4gIEByZXR1cm4gJHJldHVybjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIEdldCBQcmV2aW91cyBLZXlcbkBmdW5jdGlvbiBtYXAtZ2V0LXByZXYta2V5KCRtYXAsICRrZXkpIHtcbiAgJGluZGV4OiBpbmRleCgkbWFwLCAka2V5KTtcbiAgJHByZXY6ICRpbmRleCAtIDE7XG4gICRyZXN1bHQ6IGlmKCRwcmV2ID4gMCwgbnRoKCRtYXAsICRwcmV2KSwgbnVsbCk7XG5cbiAgQHJldHVybiAkcmVzdWx0O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgU2V0XG5AZnVuY3Rpb24gbWFwLXNldCgkbWFwLCAka2V5LCAkdmFsdWUpIHtcbiAgQHJldHVybiBtYXAtbWVyZ2UoXG4gICAgJG1hcCxcbiAgICAoXG4gICAgICAka2V5OiAkdmFsdWVcbiAgICApXG4gICk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBTZXQgRGVlcFxuQGZ1bmN0aW9uIG1hcC1zZXQtZGVlcCgkbWFwLCAka2V5cywgJHZhbHVlKSB7XG4gICRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3M6IHRydWUgIWdsb2JhbDtcbiAgJGxlbmd0aDogbGVuZ3RoKCRrZXlzKTtcbiAgJGdldC1rZXlzOiAoKTtcbiAgJG1hcC1sZXZlbDogKCk7XG5cbiAgQGlmICRsZW5ndGggPiAxIHtcbiAgICAkZ2V0LWtleXM6IGdldC1rZXlzKCRrZXlzLCAkbGVuZ3RoKTtcbiAgICAkbWFwLWxldmVsOiBtYXAtZ2V0LWRlZXAoJG1hcCwgJGdldC1rZXlzKTtcbiAgfVxuXG4gICRtZXJnZTogKFxuICAgIG50aCgka2V5cywgJGxlbmd0aCk6ICR2YWx1ZVxuICApO1xuXG4gIEBpZiAkbWFwLWxldmVsIHtcbiAgICAkbWVyZ2U6IG1hcC1tZXJnZSgkbWFwLWxldmVsLCAkbWVyZ2UpO1xuICB9XG5cbiAgQGZvciAkaSBmcm9tICgkbGVuZ3RoICogLTEgKyAxKSB0aHJvdWdoIC0xIHtcbiAgICAkajogYWJzKCRpKTtcbiAgICAka2V5OiBudGgoJGtleXMsICRqKTtcblxuICAgIC8vIEBkZWJ1ZyAkZ2V0LWtleXM7XG5cbiAgICBAaWYgJGogPiAxIHtcbiAgICAgICRnZXQta2V5czogZ2V0LWtleXMoJGtleXMsICRqKTtcbiAgICAgICRtYXAtbGV2ZWw6IG1hcC1nZXQtZGVlcCgkbWFwLCAkZ2V0LWtleXMpO1xuXG4gICAgICBAaWYgJG1hcC1sZXZlbCB7XG4gICAgICAgICRtZXJnZTogbWFwLW1lcmdlKFxuICAgICAgICAgICRtYXAtbGV2ZWwsXG4gICAgICAgICAgKFxuICAgICAgICAgICAgJGtleTogJG1lcmdlXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSBAZWxzZSB7XG4gICAgICAgICRtZXJnZTogKFxuICAgICAgICAgICRrZXk6ICRtZXJnZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gQGVsc2Uge1xuICAgICAgJG1lcmdlOiAoXG4gICAgICAgICRrZXk6ICRtZXJnZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAkbWFwOiBtYXAtbWVyZ2UoJG1hcCwgJG1lcmdlKTtcblxuICAkcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzOiBmYWxzZSAhZ2xvYmFsO1xuXG4gIEByZXR1cm4gJG1hcDtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBVTklUU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBQcm9ncmVzc2l2ZSBjYWxjXG5AZnVuY3Rpb24gZ2V0LXByb2dyZXNzaXZlLWNhbGMoXG4gICRtaW4tb2JqLXNpemUsXG4gICRtYXgtb2JqLXNpemUsXG4gICRtaW4tdnAsXG4gICRtYXgtdnAsXG4gICR2cC11bml0OiB2d1xuKSB7XG4gIEByZXR1cm4gY2FsYyhcbiAgICAjeyRtaW4tb2JqLXNpemV9ICsgI3tzdHJpcC11bml0KCRtYXgtb2JqLXNpemUgLSAkbWluLW9iai1zaXplKX0gKlxuICAgICAgKCgxMDAjeyR2cC11bml0fSAtICN7JG1pbi12cH0pIC8gI3tzdHJpcC11bml0KCRtYXgtdnAgLSAkbWluLXZwKX0pXG4gICk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogVU5JVFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU3RyaXAgdW5pdFxuQGZ1bmN0aW9uIHN0cmlwLXVuaXQoJG51bWJlcikge1xuICBAaWYgdHlwZS1vZigkbnVtYmVyKSA9PSAnbnVtYmVyJyBhbmQgbm90IHVuaXRsZXNzKCRudW1iZXIpIHtcbiAgICBAcmV0dXJuICRudW1iZXIgLyAoJG51bWJlciAqIDAgKyAxKTtcbiAgfVxuXG4gIEByZXR1cm4gJG51bWJlcjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IGVtL3JlbSB1bml0XG5AZnVuY3Rpb24gZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIGVtKTtcbn1cblxuQGZ1bmN0aW9uIHJlbSgkbnVtLCAkZm9udC1zaXplOiBmYWxzZSkge1xuICBAcmV0dXJuIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgcmVtKTtcbn1cblxuQGZ1bmN0aW9uIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgJHVuaXQpIHtcbiAgJGZzOiAxMHB4O1xuXG4gIEBpZiAkZm9udC1zaXplIHtcbiAgICAkZnM6ICRmb250LXNpemU7XG4gIH1cbiAgQGVsc2UgaWYgJGJhc2UtaHRtbC1mb250LXNpemUgeyAvLyBtYWtlIHN1cmUgdG8gZGVmaW5lIHRoaXMgdmFyaWFibGUgb24geW91ciBvd25cbiAgICAkZnM6ICRiYXNlLWh0bWwtZm9udC1zaXplO1xuICB9XG5cbiAgQHJldHVybiAje3N0cmlwLXVuaXQoJG51bSkgLyBzdHJpcC11bml0KCRmcyl9I3skdW5pdH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBzY3JlZW4gcGVyY2VudFxuQGZ1bmN0aW9uIGdldC1zY3JlZW4tcGVyY2VudCgkd2lkdGgsICRzY3JlZW4pIHtcbiAgQHJldHVybiB1bnF1b3RlKCcjeyR3aWR0aCAqIDEwMCAvICRzY3JlZW59JScpO1xufVxuXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IFotSU5ERVhFU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZW5lcmF0b3JcbkBmdW5jdGlvbiB6LWluZGV4KCRtYXAsICRrZXlzKSB7XG4gICRmb3VuZC1pbmRleDogbnVsbDtcblxuICBAZWFjaCAka2V5IGluICRrZXlzIHtcbiAgICBAaWYgKHR5cGUtb2YoJG1hcCkgPT0gJ21hcCcpIHtcbiAgICAgICRmb3VuZC1pbmRleDogaW5kZXgobWFwLWtleXMoJG1hcCksICRrZXkpO1xuICAgICAgJG1hcDogbWFwLWdldCgkbWFwLCAka2V5KTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRmb3VuZC1pbmRleDogaW5kZXgoJG1hcCwgJGtleSk7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkZm91bmQtaW5kZXg7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFNlcnZlclxuQGZ1bmN0aW9uIHooJG1hcCwgJGtleXMuLi4pIHtcbiAgQHJldHVybiB6LWluZGV4KCRtYXAsICRrZXlzKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBGT1JNU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBJbnB1dCBwbGFjZWhvbGRlclxuQG1peGluIGlucHV0LXBsYWNlaG9sZGVyKCRjb2wsICRzdHlsZTogaXRhbGljKSB7XG4gICY6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2w7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICB9XG4gICY6Oi1tb3otcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxuICAmOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2w7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICB9XG4gICY6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxufVxuXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IFBPU0lUSU9OU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBBYnNvbHV0ZSBjZW50ZXJlZFxuQG1peGluIGFic29sdXRlLWNlbnRlcmVkKCR0eXBlOiBhYnNvbHV0ZSwgJHBvczogNTAlKSB7XG4gIHBvc2l0aW9uOiAkdHlwZTtcbiAgdG9wOiAkcG9zO1xuICBsZWZ0OiAkcG9zO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQWJzb2x1dGUgY2VudGVyZWQgWFxuQG1peGluIGFic29sdXRlLWNlbnRlcmVkLXgoJHR5cGU6IGFic29sdXRlLCAkcG9zOiA1MCUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICBsZWZ0OiAkcG9zO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEFic29sdXRlIGNlbnRlcmVkIFlcbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXJlZC15KCR0eXBlOiBhYnNvbHV0ZSwgJHBvczogNTAlKSB7XG4gIHBvc2l0aW9uOiAkdHlwZTtcbiAgdG9wOiAkcG9zO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogU0hPUlRIQU5EU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBQb3NpdGlvbnNcbkBtaXhpbiBwb3NpdGlvbi1zdHJldGNoZWQoJHR5cGU6IGFic29sdXRlKSB7XG4gIHBvc2l0aW9uOiAkdHlwZTtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBEaW1lbnNpb25zXG5AbWl4aW4gZGltZW5zaW9ucy1zcXVhcmUoJHZhbHVlKSB7XG4gIHdpZHRoOiAkdmFsdWU7XG4gIGhlaWdodDogJHZhbHVlO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBQYWRkaW5nXG5AbWl4aW4gcGFkZGluZy12KCR2YWx1ZSkge1xuICBwYWRkaW5nLXRvcDogJHZhbHVlO1xuICBwYWRkaW5nLWJvdHRvbTogJHZhbHVlO1xufVxuXG5AbWl4aW4gcGFkZGluZy1oKCR2YWx1ZSkge1xuICBwYWRkaW5nLXJpZ2h0OiAkdmFsdWU7XG4gIHBhZGRpbmctbGVmdDogJHZhbHVlO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXJnaW5cbkBtaXhpbiBtYXJnaW4tdigkdmFsdWUpIHtcbiAgbWFyZ2luLXRvcDogJHZhbHVlO1xuICBtYXJnaW4tYm90dG9tOiAkdmFsdWU7XG59XG5cbkBtaXhpbiBtYXJnaW4taCgkdmFsdWUpIHtcbiAgbWFyZ2luLXJpZ2h0OiAkdmFsdWU7XG4gIG1hcmdpbi1sZWZ0OiAkdmFsdWU7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEJvcmRlclxuQG1peGluIGJvcmRlci12KCR2YWx1ZSkge1xuICBib3JkZXItdG9wOiAkdmFsdWU7XG4gIGJvcmRlci1ib3R0b206ICR2YWx1ZTtcbn1cblxuQG1peGluIGJvcmRlci1oKCR2YWx1ZSkge1xuICBib3JkZXItcmlnaHQ6ICR2YWx1ZTtcbiAgYm9yZGVyLWxlZnQ6ICR2YWx1ZTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBUWVBPR1JBUEhZXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEZvbnQgc21vb3RoaW5nXG5AbWl4aW4gZm9udC1zbW9vdGhpbmcoJHZhbHVlOiBhbnRpYWxpYXNlZCkge1xuICBAaWYgJHZhbHVlID09IGFudGlhbGlhc2VkIHtcbiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICB9IEBlbHNlIHtcbiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBzdWJwaXhlbC1hbnRpYWxpYXNlZDtcbiAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogYXV0bztcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBUZXh0IHVwcGVyY2FzZVxuQG1peGluIHRleHQtdXBwZXJjYXNlKCkge1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAtbW96LWZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2Nhc2UnO1xuICAtd2Via2l0LWZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2Nhc2UnO1xuICBmb250LWZlYXR1cmUtc2V0dGluZ3M6ICdjYXNlJyBvbjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU2VsZWN0aW9uXG5AbWl4aW4gc2VsZWN0aW9uKCRjb2wpIHtcbiAgJGJncjogaWYoJGNvbCAhPSB0cmFuc3BhcmVudCwgcmdiYSgkY29sLCAwLjUpLCByZ2JhKDAsIDAsIDAsIDApKTtcblxuICAmOjotbW96LXNlbGVjdGlvbiB7XG4gICAgYmFja2dyb3VuZDogJGJncjtcbiAgfVxuXG4gICY6OnNlbGVjdGlvbiB7XG4gICAgYmFja2dyb3VuZDogJGJncjtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBCQVNFXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEltcG9ydHNcbkBpbXBvcnQgJy4uLy4uL2RlZnMvYnJhbmQuanMnO1xuQGltcG9ydCAnLi4vLi4vZGVmcy93ZWJzaXRlLmpzJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRm9udCBzaXplXG5AZnVuY3Rpb24gcm9sZSgkbWFwLCAkdmFsdWUpIHtcbiAgJHItbWFwOiBtYXAtZ2V0KCR2YWx1ZSwgJ21hcCcpO1xuICAkci12YWx1ZTogbWFwLWdldCgkdmFsdWUsICd2YWx1ZScpO1xuICBAcmV0dXJuIG1hcC1nZXQoJHItbWFwLCAkci12YWx1ZSk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9ucyA+IENBTENcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgdmFsdWUgYmFzZWQgb24gdGhlIGJhc2UgZm9udCBzaXplXG5AZnVuY3Rpb24gYmFzZSgkdmFsdWUpIHtcbiAgQHJldHVybiBtYXRoLmRpdigkdmFsdWUsIG1hcC1nZXQoJHJvbGVzLXJhdGlvcywgJ2xheW91dC1ncm93dGgnKSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFByb2dyZXNzaXZlIGNhbGNcbkBmdW5jdGlvbiBnZXQtcHJvZ3Jlc3NpdmUtY2FsYyhcbiAgJG1pbi1vYmotc2l6ZSxcbiAgJG1heC1vYmotc2l6ZSxcbiAgJG1pbi12cCxcbiAgJG1heC12cCxcbiAgJHZwLXVuaXQ6IHZ3XG4pIHtcbiAgQHJldHVybiBjYWxjKFxuICAgICN7cGl4ZWxhdGUoJG1pbi1vYmotc2l6ZSl9ICsgI3tzdHJpcC11bml0KCRtYXgtb2JqLXNpemUgLSAkbWluLW9iai1zaXplKX0gKlxuICAgICAgKFxuICAgICAgICAoMTAwI3skdnAtdW5pdH0gLSAje3BpeGVsYXRlKCRtaW4tdnApfSkgLyAje3N0cmlwLXVuaXQoXG4gICAgICAgICAgICAkbWF4LXZwIC0gJG1pbi12cFxuICAgICAgICAgICl9XG4gICAgICApXG4gICk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9ucyA+IFVOSVRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU3RyaXAgdW5pdFxuQGZ1bmN0aW9uIHN0cmlwLXVuaXQoJG51bWJlcikge1xuICBAaWYgdHlwZS1vZigkbnVtYmVyKSA9PSAnbnVtYmVyJyBhbmQgbm90IHVuaXRsZXNzKCRudW1iZXIpIHtcbiAgICBAcmV0dXJuIG1hdGguZGl2KCRudW1iZXIsICgkbnVtYmVyICogMCArIDEpKTtcbiAgfVxuXG4gIEByZXR1cm4gJG51bWJlcjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IFB4IHVuaXRcbkBmdW5jdGlvbiBwaXhlbGF0ZSgkdmFsdWUpIHtcbiAgQHJldHVybiAje3N0cmlwLXVuaXQoJHZhbHVlKX1QeDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IGVtL3JlbSB1bml0XG5AZnVuY3Rpb24gZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIGVtKTtcbn1cblxuQGZ1bmN0aW9uIHJlbSgkbnVtLCAkZm9udC1zaXplOiBmYWxzZSkge1xuICBAcmV0dXJuIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgcmVtKTtcbn1cblxuQGZ1bmN0aW9uIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgJHVuaXQpIHtcbiAgJGZzOiAxMHB4O1xuXG4gIEBpZiAkZm9udC1zaXplIHtcbiAgICAkZnM6ICRmb250LXNpemU7XG4gIH0gQGVsc2Uge1xuICAgICRmczogbWFwLWdldCgkdHlwb2dyYXBoeSwgJ2Jhc2VfZm9udF9zaXplJyk7XG4gIH1cblxuICBAcmV0dXJuICN7bWF0aC5kaXYoc3RyaXAtdW5pdCgkbnVtKSwgc3RyaXAtdW5pdCgkZnMpKX0jeyR1bml0fTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRGF0YSA+IFNXQVRDSEVTXG5cbkBpbXBvcnQgJy4uLy4uL2RlZnMvc3dhdGNoZXMvaW5kZXguanMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvc3dhdGNoZXMvc3dhdGNoZXNfYnJlYWtwb2ludHMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvc3dhdGNoZXMvc3dhdGNoZXNfcmF0aW9zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX3NjcmVlbnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvc3dhdGNoZXMvc3dhdGNoZXNfc3BhY2VzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRGF0YSA+IFJPTEVTXG5cbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2JvcmRlcnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfYnJlYWtwb2ludHMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfY29sb3JzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2RpbWVuc2lvbnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfcmF0aW9zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3NjcmVlbnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfc2hhZG93cyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19zcGFjZXMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfdHlwb2dyYXBoeSc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGlucyA+IFNDQUxBQklMSVRZXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU2NhbGVyXG5AbWl4aW4gc2NhbGVyKFxuICAkcHJvcGVydHksXG4gICRtaW4tc2l6ZSxcbiAgJG1heC1zaXplLFxuICAkbWluLXZ3OiBtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWluJyksXG4gICRtYXgtdnc6IG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtYXgnKVxuKSB7XG4gICN7JHByb3BlcnR5fTogI3tzdHJpcC11bml0KG1hdGguZGl2KCgkbWluLXZ3ICogMC45Nzk2KSAqICRtaW4tc2l6ZSwgMTAwMCkpfXZ3OyAvLyAwLjk3OTYgZml4ZXMgd3JvbmcgY2FsY3VsYXRpb25zIGluIENocm9tZVxuXG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6ICRtaW4tdncpIHtcbiAgICAjeyRwcm9wZXJ0eX06IGdldC1wcm9ncmVzc2l2ZS1jYWxjKCRtaW4tc2l6ZSwgJG1heC1zaXplLCAkbWluLXZ3LCAkbWF4LXZ3KTtcbiAgfVxuXG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6ICRtYXgtdncpIHtcbiAgICAjeyRwcm9wZXJ0eX06IHBpeGVsYXRlKCRtYXgtc2l6ZSk7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gUGxhY2Vob2xkZXJzID4gU0NBTEFCSUxJVFlcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBOZWdhdGl2ZVxuJXBoLW5lZ2F0aXZlIHtcbiAgaDEsXG4gIGgyLFxuICBoMyxcbiAgaDQsXG4gIGg1LFxuICBoNixcbiAgcCB7XG4gICAgY29sb3I6IG1hcC1nZXQoJHJvbGVzLWNvbC10ZXh0cywgJ25lZ2F0aXZlJyk7XG4gIH1cblxuICAubWV0YSB7XG4gICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkc3dhdGNoZXMtY29sb3JzLCAnaG9uZXkteWVsbG93JywgJ2xpZ2h0Jyk7XG4gIH1cblxuICAudGV4dC1saW5rIHtcbiAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdub3JtYWwnKTtcbiAgICBib3JkZXItYm90dG9tOiBwaXhlbGF0ZSgxcHgpIGRvdHRlZFxuICAgICAgcmdiYShtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ25vcm1hbCcpLCAwLjMzKTtcblxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnaG92ZXInKTtcbiAgICB9XG5cbiAgICAmOmFjdGl2ZSB7XG4gICAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdhY3RpdmUnKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgV2F2ZVxuJXBoLXdhdmUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDUwJTtcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi13aWR0aDogbWF0aC5kaXYobWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21heCcpLCAyKTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuXG4gID4gc3ZnIHtcbiAgICBAaW5jbHVkZSBkaW1lbnNpb25zLXNxdWFyZSgxMDAlKTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBIZWFkIHdhdmVcbiVwaC1oZWFkLXdhdmUge1xuICAkd2F2ZS1oZWlnaHQ6IGJhc2UobWFwLWdldCgkcm9sZXMtZGltZW5zaW9ucy13YXZlcywgJ2hlYWRlcicpKTtcblxuICAud2F2ZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgIHRvcDogY2FsYygxMDAlIC0gMVB4KTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IGVtKCR3YXZlLWhlaWdodCk7XG5cbiAgICAuaW5uZXIge1xuICAgICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG5cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAgIHN2ZyB7XG4gICAgICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKDEwMCUpO1xuXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICBtaW4td2lkdGg6IG1hdGguZGl2KG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtYXgnKSwgMik7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAa2V5ZnJhbWVzIHNsaWRlIHtcbiAgICBmcm9tIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgIH1cblxuICAgIHRvIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIDApO1xuICAgIH1cbiAgfVxuXG4gIC5zY3JvbGwtYnRuIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm90dG9tOiAyMHB4O1xuICAgIGxlZnQ6IDUwJTtcbiAgICB6LWluZGV4OiAxO1xuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQtZGVlcCgkc3dhdGNoZXMtY29sb3JzLCAnY29ybmZsb3dlcicsICdiYXNlJyk7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgYW5pbWF0aW9uOiBzbGlkZSAxcyBlYXNlLWluLW91dCBpbmZpbml0ZSBhbHRlcm5hdGU7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnaG92ZXInKTtcbiAgICB9XG5cbiAgICAmOmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2FjdGl2ZScpO1xuICAgIH1cblxuICAgIHN2ZyB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuICAgIH1cblxuICAgIGJvZHk6bm90KC5zY3JvbGxhYmxlKSAmIHtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUm9vdFxuOmdsb2JhbCguZXJyb3I0MDQpIHtcbiAgc2VjdGlvbiB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgdWwge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICB9XG5cbiAgICBsaSB7XG4gICAgICBAaW5jbHVkZSBwYWRkaW5nLXYobWFwLWdldCgkcm9sZXMtc3BhY2VzLCAnbGlzdCcpKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIENvbXBvbmVudHMgPiBUWVBPR1JBUEhZXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcbkB1c2UgJ3Nhc3M6bWF0aCc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogQ09MT1JTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IExpZ2h0XG5AZnVuY3Rpb24gbGlnaHQoJGNvbG9yLCAkcGVyY2VudCkge1xuICBAcmV0dXJuIG1peCgjZmZmLCAkY29sb3IsICRwZXJjZW50KTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRGFya1xuQGZ1bmN0aW9uIGRhcmsoJGNvbG9yLCAkcGVyY2VudCkge1xuICBAcmV0dXJuIG1peCgjMDAwLCAkY29sb3IsICRwZXJjZW50KTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBNQVBTXG5cbiRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3M6IGZhbHNlICFkZWZhdWx0O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IERlZXAgV2FybmluZ1xuLy8gRGlzcGxheXMgYSB3YXJuaW5nIGlmIHRoZSByZXRyaWV2ZWQgdmFsdWUgaXMgYG51bGxgXG5AZnVuY3Rpb24gbWFwLWdldC1kZWVwLXdhcm5pbmcoJHdhcm4sICRnZXQsICRrZXkpIHtcbiAgQGlmIG5vdCAkcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzIHtcbiAgICBAaWYgJGdldCA9PSBudWxsIHtcbiAgICAgIEB3YXJuICdNYXAgaGFzIG5vIHZhbHVlIGZvciBrZXkgc2VhcmNoIGAjeyR3YXJufWAnO1xuICAgIH0gQGVsc2UgaWYgdHlwZS1vZigkZ2V0KSAhPSAnbWFwJyB7XG4gICAgICBAd2FybiAnTm9uLW1hcCB2YWx1ZSBmb3VuZCBmb3Iga2V5IHNlYXJjaCBgI3skd2Fybn1gLCBjYW5ub3Qgc2VhcmNoIGZvciBrZXkgYCN7JGtleX1gJztcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuIG51bGw7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgRGVlcFxuLy8gR2l2ZW4gYSBtYXAgYW5kIGEgbGlzdCBvZiBrZXlzLCBmaW5kIHRoZSB2YWx1ZSBhdCB0aGUgZ2l2ZW4ga2V5XG5AZnVuY3Rpb24gbWFwLWdldC1kZWVwKCRtYXAsICRrZXlzLi4uKSB7XG4gIEBpZiBsZW5ndGgoJGtleXMpID09IDEge1xuICAgICRrZXlzOiBudGgoJGtleXMsIDEpO1xuICB9XG5cbiAgJHdhcm46ICcje250aCgka2V5cywgMSl9JztcbiAgJGxlbmd0aDogbGVuZ3RoKCRrZXlzKTtcbiAgJGdldDogbWFwLWdldCgkbWFwLCBudGgoJGtleXMsIDEpKTtcblxuICBAaWYgJGxlbmd0aCA+IDEge1xuICAgIEBmb3IgJGkgZnJvbSAyIHRocm91Z2ggJGxlbmd0aCB7XG4gICAgICBAaWYgJGdldCAhPSBudWxsIGFuZCB0eXBlLW9mKCRnZXQpID09ICdtYXAnIHtcbiAgICAgICAgJHdhcm46ICR3YXJuICsgJy0+I3tudGgoJGtleXMsICRpKX0nO1xuICAgICAgICAkZ2V0OiBtYXAtZ2V0KCRnZXQsIG50aCgka2V5cywgJGkpKTtcblxuICAgICAgICBAaWYgJGdldCA9PSBudWxsIHtcbiAgICAgICAgICBAcmV0dXJuIG1hcC1nZXQtZGVlcC13YXJuaW5nKCR3YXJuLCAkZ2V0LCBudGgoJGtleXMsICRpKSk7XG4gICAgICAgIH1cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICBAcmV0dXJuIG1hcC1nZXQtZGVlcC13YXJuaW5nKCR3YXJuLCAkZ2V0LCBudGgoJGtleXMsICRpKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkZ2V0O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IEtleXNcbkBmdW5jdGlvbiBnZXQta2V5cygka2V5cywgJGNvdW50ZXIpIHtcbiAgJHJldHVybjogKCk7XG5cbiAgQGZvciAkaSBmcm9tIDEgdG8gJGNvdW50ZXIge1xuICAgICRyZXR1cm46IGFwcGVuZCgkcmV0dXJuLCBudGgoJGtleXMsICRpKSk7XG4gIH1cblxuICBAcmV0dXJuICRyZXR1cm47XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgUHJldmlvdXMgS2V5XG5AZnVuY3Rpb24gbWFwLWdldC1wcmV2LWtleSgkbWFwLCAka2V5KSB7XG4gICRpbmRleDogaW5kZXgoJG1hcCwgJGtleSk7XG4gICRwcmV2OiAkaW5kZXggLSAxO1xuICAkcmVzdWx0OiBpZigkcHJldiA+IDAsIG50aCgkbWFwLCAkcHJldiksIG51bGwpO1xuXG4gIEByZXR1cm4gJHJlc3VsdDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIFNldFxuQGZ1bmN0aW9uIG1hcC1zZXQoJG1hcCwgJGtleSwgJHZhbHVlKSB7XG4gIEByZXR1cm4gbWFwLW1lcmdlKFxuICAgICRtYXAsXG4gICAgKFxuICAgICAgJGtleTogJHZhbHVlXG4gICAgKVxuICApO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgU2V0IERlZXBcbkBmdW5jdGlvbiBtYXAtc2V0LWRlZXAoJG1hcCwgJGtleXMsICR2YWx1ZSkge1xuICAkcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzOiB0cnVlICFnbG9iYWw7XG4gICRsZW5ndGg6IGxlbmd0aCgka2V5cyk7XG4gICRnZXQta2V5czogKCk7XG4gICRtYXAtbGV2ZWw6ICgpO1xuXG4gIEBpZiAkbGVuZ3RoID4gMSB7XG4gICAgJGdldC1rZXlzOiBnZXQta2V5cygka2V5cywgJGxlbmd0aCk7XG4gICAgJG1hcC1sZXZlbDogbWFwLWdldC1kZWVwKCRtYXAsICRnZXQta2V5cyk7XG4gIH1cblxuICAkbWVyZ2U6IChcbiAgICBudGgoJGtleXMsICRsZW5ndGgpOiAkdmFsdWVcbiAgKTtcblxuICBAaWYgJG1hcC1sZXZlbCB7XG4gICAgJG1lcmdlOiBtYXAtbWVyZ2UoJG1hcC1sZXZlbCwgJG1lcmdlKTtcbiAgfVxuXG4gIEBmb3IgJGkgZnJvbSAoJGxlbmd0aCAqIC0xICsgMSkgdGhyb3VnaCAtMSB7XG4gICAgJGo6IGFicygkaSk7XG4gICAgJGtleTogbnRoKCRrZXlzLCAkaik7XG5cbiAgICAvLyBAZGVidWcgJGdldC1rZXlzO1xuXG4gICAgQGlmICRqID4gMSB7XG4gICAgICAkZ2V0LWtleXM6IGdldC1rZXlzKCRrZXlzLCAkaik7XG4gICAgICAkbWFwLWxldmVsOiBtYXAtZ2V0LWRlZXAoJG1hcCwgJGdldC1rZXlzKTtcblxuICAgICAgQGlmICRtYXAtbGV2ZWwge1xuICAgICAgICAkbWVyZ2U6IG1hcC1tZXJnZShcbiAgICAgICAgICAkbWFwLWxldmVsLFxuICAgICAgICAgIChcbiAgICAgICAgICAgICRrZXk6ICRtZXJnZVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICAkbWVyZ2U6IChcbiAgICAgICAgICAka2V5OiAkbWVyZ2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IEBlbHNlIHtcbiAgICAgICRtZXJnZTogKFxuICAgICAgICAka2V5OiAkbWVyZ2VcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgJG1hcDogbWFwLW1lcmdlKCRtYXAsICRtZXJnZSk7XG5cbiAgJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5nczogZmFsc2UgIWdsb2JhbDtcblxuICBAcmV0dXJuICRtYXA7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogVU5JVFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUHJvZ3Jlc3NpdmUgY2FsY1xuQGZ1bmN0aW9uIGdldC1wcm9ncmVzc2l2ZS1jYWxjKFxuICAkbWluLW9iai1zaXplLFxuICAkbWF4LW9iai1zaXplLFxuICAkbWluLXZwLFxuICAkbWF4LXZwLFxuICAkdnAtdW5pdDogdndcbikge1xuICBAcmV0dXJuIGNhbGMoXG4gICAgI3skbWluLW9iai1zaXplfSArICN7c3RyaXAtdW5pdCgkbWF4LW9iai1zaXplIC0gJG1pbi1vYmotc2l6ZSl9ICpcbiAgICAgICgoMTAwI3skdnAtdW5pdH0gLSAjeyRtaW4tdnB9KSAvICN7c3RyaXAtdW5pdCgkbWF4LXZwIC0gJG1pbi12cCl9KVxuICApO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IFVOSVRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFN0cmlwIHVuaXRcbkBmdW5jdGlvbiBzdHJpcC11bml0KCRudW1iZXIpIHtcbiAgQGlmIHR5cGUtb2YoJG51bWJlcikgPT0gJ251bWJlcicgYW5kIG5vdCB1bml0bGVzcygkbnVtYmVyKSB7XG4gICAgQHJldHVybiAkbnVtYmVyIC8gKCRudW1iZXIgKiAwICsgMSk7XG4gIH1cblxuICBAcmV0dXJuICRudW1iZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBlbS9yZW0gdW5pdFxuQGZ1bmN0aW9uIGVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCBlbSk7XG59XG5cbkBmdW5jdGlvbiByZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIHJlbSk7XG59XG5cbkBmdW5jdGlvbiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsICR1bml0KSB7XG4gICRmczogMTBweDtcblxuICBAaWYgJGZvbnQtc2l6ZSB7XG4gICAgJGZzOiAkZm9udC1zaXplO1xuICB9XG4gIEBlbHNlIGlmICRiYXNlLWh0bWwtZm9udC1zaXplIHsgLy8gbWFrZSBzdXJlIHRvIGRlZmluZSB0aGlzIHZhcmlhYmxlIG9uIHlvdXIgb3duXG4gICAgJGZzOiAkYmFzZS1odG1sLWZvbnQtc2l6ZTtcbiAgfVxuXG4gIEByZXR1cm4gI3tzdHJpcC11bml0KCRudW0pIC8gc3RyaXAtdW5pdCgkZnMpfSN7JHVuaXR9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgc2NyZWVuIHBlcmNlbnRcbkBmdW5jdGlvbiBnZXQtc2NyZWVuLXBlcmNlbnQoJHdpZHRoLCAkc2NyZWVuKSB7XG4gIEByZXR1cm4gdW5xdW90ZSgnI3skd2lkdGggKiAxMDAgLyAkc2NyZWVufSUnKTtcbn1cblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBaLUlOREVYRVNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2VuZXJhdG9yXG5AZnVuY3Rpb24gei1pbmRleCgkbWFwLCAka2V5cykge1xuICAkZm91bmQtaW5kZXg6IG51bGw7XG5cbiAgQGVhY2ggJGtleSBpbiAka2V5cyB7XG4gICAgQGlmICh0eXBlLW9mKCRtYXApID09ICdtYXAnKSB7XG4gICAgICAkZm91bmQtaW5kZXg6IGluZGV4KG1hcC1rZXlzKCRtYXApLCAka2V5KTtcbiAgICAgICRtYXA6IG1hcC1nZXQoJG1hcCwgJGtleSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkZm91bmQtaW5kZXg6IGluZGV4KCRtYXAsICRrZXkpO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGZvdW5kLWluZGV4O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTZXJ2ZXJcbkBmdW5jdGlvbiB6KCRtYXAsICRrZXlzLi4uKSB7XG4gIEByZXR1cm4gei1pbmRleCgkbWFwLCAka2V5cyk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogRk9STVNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgSW5wdXQgcGxhY2Vob2xkZXJcbkBtaXhpbiBpbnB1dC1wbGFjZWhvbGRlcigkY29sLCAkc3R5bGU6IGl0YWxpYykge1xuICAmOi1tb3otcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxuICAmOjotbW96LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbiAgJjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxuICAmOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbn1cblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBQT1NJVElPTlNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQWJzb2x1dGUgY2VudGVyZWRcbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXJlZCgkdHlwZTogYWJzb2x1dGUsICRwb3M6IDUwJSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIHRvcDogJHBvcztcbiAgbGVmdDogJHBvcztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEFic29sdXRlIGNlbnRlcmVkIFhcbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXJlZC14KCR0eXBlOiBhYnNvbHV0ZSwgJHBvczogNTAlKSB7XG4gIHBvc2l0aW9uOiAkdHlwZTtcbiAgbGVmdDogJHBvcztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBBYnNvbHV0ZSBjZW50ZXJlZCBZXG5AbWl4aW4gYWJzb2x1dGUtY2VudGVyZWQteSgkdHlwZTogYWJzb2x1dGUsICRwb3M6IDUwJSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIHRvcDogJHBvcztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IFNIT1JUSEFORFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUG9zaXRpb25zXG5AbWl4aW4gcG9zaXRpb24tc3RyZXRjaGVkKCR0eXBlOiBhYnNvbHV0ZSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRGltZW5zaW9uc1xuQG1peGluIGRpbWVuc2lvbnMtc3F1YXJlKCR2YWx1ZSkge1xuICB3aWR0aDogJHZhbHVlO1xuICBoZWlnaHQ6ICR2YWx1ZTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUGFkZGluZ1xuQG1peGluIHBhZGRpbmctdigkdmFsdWUpIHtcbiAgcGFkZGluZy10b3A6ICR2YWx1ZTtcbiAgcGFkZGluZy1ib3R0b206ICR2YWx1ZTtcbn1cblxuQG1peGluIHBhZGRpbmctaCgkdmFsdWUpIHtcbiAgcGFkZGluZy1yaWdodDogJHZhbHVlO1xuICBwYWRkaW5nLWxlZnQ6ICR2YWx1ZTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFyZ2luXG5AbWl4aW4gbWFyZ2luLXYoJHZhbHVlKSB7XG4gIG1hcmdpbi10b3A6ICR2YWx1ZTtcbiAgbWFyZ2luLWJvdHRvbTogJHZhbHVlO1xufVxuXG5AbWl4aW4gbWFyZ2luLWgoJHZhbHVlKSB7XG4gIG1hcmdpbi1yaWdodDogJHZhbHVlO1xuICBtYXJnaW4tbGVmdDogJHZhbHVlO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBCb3JkZXJcbkBtaXhpbiBib3JkZXItdigkdmFsdWUpIHtcbiAgYm9yZGVyLXRvcDogJHZhbHVlO1xuICBib3JkZXItYm90dG9tOiAkdmFsdWU7XG59XG5cbkBtaXhpbiBib3JkZXItaCgkdmFsdWUpIHtcbiAgYm9yZGVyLXJpZ2h0OiAkdmFsdWU7XG4gIGJvcmRlci1sZWZ0OiAkdmFsdWU7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogVFlQT0dSQVBIWVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBGb250IHNtb290aGluZ1xuQG1peGluIGZvbnQtc21vb3RoaW5nKCR2YWx1ZTogYW50aWFsaWFzZWQpIHtcbiAgQGlmICR2YWx1ZSA9PSBhbnRpYWxpYXNlZCB7XG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbiAgfSBAZWxzZSB7XG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogc3VicGl4ZWwtYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGF1dG87XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgVGV4dCB1cHBlcmNhc2VcbkBtaXhpbiB0ZXh0LXVwcGVyY2FzZSgpIHtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgLW1vei1mb250LWZlYXR1cmUtc2V0dGluZ3M6ICdjYXNlJztcbiAgLXdlYmtpdC1mb250LWZlYXR1cmUtc2V0dGluZ3M6ICdjYXNlJztcbiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnY2FzZScgb247XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFNlbGVjdGlvblxuQG1peGluIHNlbGVjdGlvbigkY29sKSB7XG4gICRiZ3I6IGlmKCRjb2wgIT0gdHJhbnNwYXJlbnQsIHJnYmEoJGNvbCwgMC41KSwgcmdiYSgwLCAwLCAwLCAwKSk7XG5cbiAgJjo6LW1vei1zZWxlY3Rpb24ge1xuICAgIGJhY2tncm91bmQ6ICRiZ3I7XG4gIH1cblxuICAmOjpzZWxlY3Rpb24ge1xuICAgIGJhY2tncm91bmQ6ICRiZ3I7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gQkFTRVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBJbXBvcnRzXG5AaW1wb3J0ICcuLi8uLi9kZWZzL2JyYW5kLmpzJztcbkBpbXBvcnQgJy4uLy4uL2RlZnMvd2Vic2l0ZS5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEZvbnQgc2l6ZVxuQGZ1bmN0aW9uIHJvbGUoJG1hcCwgJHZhbHVlKSB7XG4gICRyLW1hcDogbWFwLWdldCgkdmFsdWUsICdtYXAnKTtcbiAgJHItdmFsdWU6IG1hcC1nZXQoJHZhbHVlLCAndmFsdWUnKTtcbiAgQHJldHVybiBtYXAtZ2V0KCRyLW1hcCwgJHItdmFsdWUpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnMgPiBDQUxDXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IHZhbHVlIGJhc2VkIG9uIHRoZSBiYXNlIGZvbnQgc2l6ZVxuQGZ1bmN0aW9uIGJhc2UoJHZhbHVlKSB7XG4gIEByZXR1cm4gbWF0aC5kaXYoJHZhbHVlLCBtYXAtZ2V0KCRyb2xlcy1yYXRpb3MsICdsYXlvdXQtZ3Jvd3RoJykpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBQcm9ncmVzc2l2ZSBjYWxjXG5AZnVuY3Rpb24gZ2V0LXByb2dyZXNzaXZlLWNhbGMoXG4gICRtaW4tb2JqLXNpemUsXG4gICRtYXgtb2JqLXNpemUsXG4gICRtaW4tdnAsXG4gICRtYXgtdnAsXG4gICR2cC11bml0OiB2d1xuKSB7XG4gIEByZXR1cm4gY2FsYyhcbiAgICAje3BpeGVsYXRlKCRtaW4tb2JqLXNpemUpfSArICN7c3RyaXAtdW5pdCgkbWF4LW9iai1zaXplIC0gJG1pbi1vYmotc2l6ZSl9ICpcbiAgICAgIChcbiAgICAgICAgKDEwMCN7JHZwLXVuaXR9IC0gI3twaXhlbGF0ZSgkbWluLXZwKX0pIC8gI3tzdHJpcC11bml0KFxuICAgICAgICAgICAgJG1heC12cCAtICRtaW4tdnBcbiAgICAgICAgICApfVxuICAgICAgKVxuICApO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnMgPiBVTklUU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFN0cmlwIHVuaXRcbkBmdW5jdGlvbiBzdHJpcC11bml0KCRudW1iZXIpIHtcbiAgQGlmIHR5cGUtb2YoJG51bWJlcikgPT0gJ251bWJlcicgYW5kIG5vdCB1bml0bGVzcygkbnVtYmVyKSB7XG4gICAgQHJldHVybiBtYXRoLmRpdigkbnVtYmVyLCAoJG51bWJlciAqIDAgKyAxKSk7XG4gIH1cblxuICBAcmV0dXJuICRudW1iZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBQeCB1bml0XG5AZnVuY3Rpb24gcGl4ZWxhdGUoJHZhbHVlKSB7XG4gIEByZXR1cm4gI3tzdHJpcC11bml0KCR2YWx1ZSl9UHg7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBlbS9yZW0gdW5pdFxuQGZ1bmN0aW9uIGVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCBlbSk7XG59XG5cbkBmdW5jdGlvbiByZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIHJlbSk7XG59XG5cbkBmdW5jdGlvbiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsICR1bml0KSB7XG4gICRmczogMTBweDtcblxuICBAaWYgJGZvbnQtc2l6ZSB7XG4gICAgJGZzOiAkZm9udC1zaXplO1xuICB9IEBlbHNlIHtcbiAgICAkZnM6IG1hcC1nZXQoJHR5cG9ncmFwaHksICdiYXNlX2ZvbnRfc2l6ZScpO1xuICB9XG5cbiAgQHJldHVybiAje21hdGguZGl2KHN0cmlwLXVuaXQoJG51bSksIHN0cmlwLXVuaXQoJGZzKSl9I3skdW5pdH07XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIERhdGEgPiBTV0FUQ0hFU1xuXG5AaW1wb3J0ICcuLi8uLi9kZWZzL3N3YXRjaGVzL2luZGV4LmpzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX2JyZWFrcG9pbnRzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX3JhdGlvcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19zY3JlZW5zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX3NwYWNlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIERhdGEgPiBST0xFU1xuXG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19ib3JkZXJzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2JyZWFrcG9pbnRzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2NvbG9ycyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19kaW1lbnNpb25zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3JhdGlvcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19zY3JlZW5zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3NoYWRvd3MnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfc3BhY2VzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3R5cG9ncmFwaHknO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnMgPiBTQ0FMQUJJTElUWVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFNjYWxlclxuQG1peGluIHNjYWxlcihcbiAgJHByb3BlcnR5LFxuICAkbWluLXNpemUsXG4gICRtYXgtc2l6ZSxcbiAgJG1pbi12dzogbWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21pbicpLFxuICAkbWF4LXZ3OiBtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWF4Jylcbikge1xuICAjeyRwcm9wZXJ0eX06ICN7c3RyaXAtdW5pdChtYXRoLmRpdigoJG1pbi12dyAqIDAuOTc5NikgKiAkbWluLXNpemUsIDEwMDApKX12dzsgLy8gMC45Nzk2IGZpeGVzIHdyb25nIGNhbGN1bGF0aW9ucyBpbiBDaHJvbWVcblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAkbWluLXZ3KSB7XG4gICAgI3skcHJvcGVydHl9OiBnZXQtcHJvZ3Jlc3NpdmUtY2FsYygkbWluLXNpemUsICRtYXgtc2l6ZSwgJG1pbi12dywgJG1heC12dyk7XG4gIH1cblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAkbWF4LXZ3KSB7XG4gICAgI3skcHJvcGVydHl9OiBwaXhlbGF0ZSgkbWF4LXNpemUpO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIFBsYWNlaG9sZGVycyA+IFNDQUxBQklMSVRZXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTmVnYXRpdmVcbiVwaC1uZWdhdGl2ZSB7XG4gIGgxLFxuICBoMixcbiAgaDMsXG4gIGg0LFxuICBoNSxcbiAgaDYsXG4gIHAge1xuICAgIGNvbG9yOiBtYXAtZ2V0KCRyb2xlcy1jb2wtdGV4dHMsICduZWdhdGl2ZScpO1xuICB9XG5cbiAgLm1ldGEge1xuICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHN3YXRjaGVzLWNvbG9ycywgJ2hvbmV5LXllbGxvdycsICdsaWdodCcpO1xuICB9XG5cbiAgLnRleHQtbGluayB7XG4gICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnbm9ybWFsJyk7XG4gICAgYm9yZGVyLWJvdHRvbTogcGl4ZWxhdGUoMXB4KSBkb3R0ZWRcbiAgICAgIHJnYmEobWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdub3JtYWwnKSwgMC4zMyk7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2hvdmVyJyk7XG4gICAgfVxuXG4gICAgJjphY3RpdmUge1xuICAgICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnYWN0aXZlJyk7XG4gICAgfVxuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFdhdmVcbiVwaC13YXZlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiA1MCU7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4td2lkdGg6IG1hdGguZGl2KG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtYXgnKSwgMik7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcblxuICA+IHN2ZyB7XG4gICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgSGVhZCB3YXZlXG4lcGgtaGVhZC13YXZlIHtcbiAgJHdhdmUtaGVpZ2h0OiBiYXNlKG1hcC1nZXQoJHJvbGVzLWRpbWVuc2lvbnMtd2F2ZXMsICdoZWFkZXInKSk7XG5cbiAgLndhdmUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICB0b3A6IGNhbGMoMTAwJSAtIDFQeCk7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiBlbSgkd2F2ZS1oZWlnaHQpO1xuXG4gICAgLmlubmVyIHtcbiAgICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKDEwMCUpO1xuXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgICBzdmcge1xuICAgICAgICBAaW5jbHVkZSBkaW1lbnNpb25zLXNxdWFyZSgxMDAlKTtcblxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgbWluLXdpZHRoOiBtYXRoLmRpdihtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWF4JyksIDIpO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQGtleWZyYW1lcyBzbGlkZSB7XG4gICAgZnJvbSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICB9XG5cbiAgICB0byB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAwKTtcbiAgICB9XG4gIH1cblxuICAuc2Nyb2xsLWJ0biB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvdHRvbTogMjBweDtcbiAgICBsZWZ0OiA1MCU7XG4gICAgei1pbmRleDogMTtcbiAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0LWRlZXAoJHN3YXRjaGVzLWNvbG9ycywgJ2Nvcm5mbG93ZXInLCAnYmFzZScpO1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgIGFuaW1hdGlvbjogc2xpZGUgMXMgZWFzZS1pbi1vdXQgaW5maW5pdGUgYWx0ZXJuYXRlO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2hvdmVyJyk7XG4gICAgfVxuXG4gICAgJjphY3RpdmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdhY3RpdmUnKTtcbiAgICB9XG5cbiAgICBzdmcge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgICB9XG5cbiAgICBib2R5Om5vdCguc2Nyb2xsYWJsZSkgJiB7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFRpdGxlXG4udGl0bGUge1xuICBmb250LWZhbWlseTogbWFwLWdldCgkcm9sZXMtdHlwby1mb250LWZhbWlsaWVzLCAnYm9keScpO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFRleHRcbi50ZXh0IHtcbiAgZm9udDogbWFwLWdldCgkcm9sZXMtdHlwby1mb250LXdlaWdodHMsICd0ZXh0JylcbiAgICBtYXAtZ2V0KCRyb2xlcy10eXBvLWZvbnQtc2l6ZXMsICd0ZXh0JylcbiAgICBtYXAtZ2V0KCRyb2xlcy10eXBvLWZvbnQtZmFtaWxpZXMsICd0ZXh0Jyk7XG4gIGxpbmUtaGVpZ2h0OiBtYXAtZ2V0KCRyb2xlcy10eXBvLWxpbmUtaGVpZ2h0cywgJ3RleHQnKTtcbiAgY3Vyc29yOiB0ZXh0O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNZXRhXG4ubWV0YSB7XG4gICRtaW4tZm9udC1zaXplOiBtYXAtZ2V0KCRyb2xlcy10eXBvLWZvbnQtc2l6ZXMsICdtZXRhJyk7XG4gICRtYXgtZm9udC1zaXplOiAkbWluLWZvbnQtc2l6ZSAqIG1hcC1nZXQoJHJvbGVzLXJhdGlvcywgJ3RleHQtZ3Jvd3RoJyk7XG5cbiAgQGluY2x1ZGUgc2NhbGVyKGZvbnQtc2l6ZSwgJG1pbi1mb250LXNpemUsICRtYXgtZm9udC1zaXplKTtcblxuICBmb250LWZhbWlseTogbWFwLWdldCgkcm9sZXMtdHlwby1mb250LWZhbWlsaWVzLCAnbWV0YScpO1xuICBsaW5lLWhlaWdodDogbWFwLWdldC1kZWVwKFxuICAgICRzd2F0Y2hlcy10eXBvLFxuICAgICdsaW5lLWhlaWdodHMnLFxuICAgICdsaW5lLWhlaWdodC1ub3JtYWwnXG4gICk7XG4gIGNvbG9yOiBtYXAtZ2V0KCRyb2xlcy1jb2wtdGV4dHMsICdtZXRhJyk7XG59XG4iLCIvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBDb21wb25lbnRzID4gUEFORUxTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcbkB1c2UgJ3Nhc3M6bWF0aCc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogQ09MT1JTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IExpZ2h0XG5AZnVuY3Rpb24gbGlnaHQoJGNvbG9yLCAkcGVyY2VudCkge1xuICBAcmV0dXJuIG1peCgjZmZmLCAkY29sb3IsICRwZXJjZW50KTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRGFya1xuQGZ1bmN0aW9uIGRhcmsoJGNvbG9yLCAkcGVyY2VudCkge1xuICBAcmV0dXJuIG1peCgjMDAwLCAkY29sb3IsICRwZXJjZW50KTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBNQVBTXG5cbiRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3M6IGZhbHNlICFkZWZhdWx0O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IERlZXAgV2FybmluZ1xuLy8gRGlzcGxheXMgYSB3YXJuaW5nIGlmIHRoZSByZXRyaWV2ZWQgdmFsdWUgaXMgYG51bGxgXG5AZnVuY3Rpb24gbWFwLWdldC1kZWVwLXdhcm5pbmcoJHdhcm4sICRnZXQsICRrZXkpIHtcbiAgQGlmIG5vdCAkcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzIHtcbiAgICBAaWYgJGdldCA9PSBudWxsIHtcbiAgICAgIEB3YXJuICdNYXAgaGFzIG5vIHZhbHVlIGZvciBrZXkgc2VhcmNoIGAjeyR3YXJufWAnO1xuICAgIH0gQGVsc2UgaWYgdHlwZS1vZigkZ2V0KSAhPSAnbWFwJyB7XG4gICAgICBAd2FybiAnTm9uLW1hcCB2YWx1ZSBmb3VuZCBmb3Iga2V5IHNlYXJjaCBgI3skd2Fybn1gLCBjYW5ub3Qgc2VhcmNoIGZvciBrZXkgYCN7JGtleX1gJztcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuIG51bGw7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgRGVlcFxuLy8gR2l2ZW4gYSBtYXAgYW5kIGEgbGlzdCBvZiBrZXlzLCBmaW5kIHRoZSB2YWx1ZSBhdCB0aGUgZ2l2ZW4ga2V5XG5AZnVuY3Rpb24gbWFwLWdldC1kZWVwKCRtYXAsICRrZXlzLi4uKSB7XG4gIEBpZiBsZW5ndGgoJGtleXMpID09IDEge1xuICAgICRrZXlzOiBudGgoJGtleXMsIDEpO1xuICB9XG5cbiAgJHdhcm46ICcje250aCgka2V5cywgMSl9JztcbiAgJGxlbmd0aDogbGVuZ3RoKCRrZXlzKTtcbiAgJGdldDogbWFwLWdldCgkbWFwLCBudGgoJGtleXMsIDEpKTtcblxuICBAaWYgJGxlbmd0aCA+IDEge1xuICAgIEBmb3IgJGkgZnJvbSAyIHRocm91Z2ggJGxlbmd0aCB7XG4gICAgICBAaWYgJGdldCAhPSBudWxsIGFuZCB0eXBlLW9mKCRnZXQpID09ICdtYXAnIHtcbiAgICAgICAgJHdhcm46ICR3YXJuICsgJy0+I3tudGgoJGtleXMsICRpKX0nO1xuICAgICAgICAkZ2V0OiBtYXAtZ2V0KCRnZXQsIG50aCgka2V5cywgJGkpKTtcblxuICAgICAgICBAaWYgJGdldCA9PSBudWxsIHtcbiAgICAgICAgICBAcmV0dXJuIG1hcC1nZXQtZGVlcC13YXJuaW5nKCR3YXJuLCAkZ2V0LCBudGgoJGtleXMsICRpKSk7XG4gICAgICAgIH1cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICBAcmV0dXJuIG1hcC1nZXQtZGVlcC13YXJuaW5nKCR3YXJuLCAkZ2V0LCBudGgoJGtleXMsICRpKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkZ2V0O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IEtleXNcbkBmdW5jdGlvbiBnZXQta2V5cygka2V5cywgJGNvdW50ZXIpIHtcbiAgJHJldHVybjogKCk7XG5cbiAgQGZvciAkaSBmcm9tIDEgdG8gJGNvdW50ZXIge1xuICAgICRyZXR1cm46IGFwcGVuZCgkcmV0dXJuLCBudGgoJGtleXMsICRpKSk7XG4gIH1cblxuICBAcmV0dXJuICRyZXR1cm47XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgUHJldmlvdXMgS2V5XG5AZnVuY3Rpb24gbWFwLWdldC1wcmV2LWtleSgkbWFwLCAka2V5KSB7XG4gICRpbmRleDogaW5kZXgoJG1hcCwgJGtleSk7XG4gICRwcmV2OiAkaW5kZXggLSAxO1xuICAkcmVzdWx0OiBpZigkcHJldiA+IDAsIG50aCgkbWFwLCAkcHJldiksIG51bGwpO1xuXG4gIEByZXR1cm4gJHJlc3VsdDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIFNldFxuQGZ1bmN0aW9uIG1hcC1zZXQoJG1hcCwgJGtleSwgJHZhbHVlKSB7XG4gIEByZXR1cm4gbWFwLW1lcmdlKFxuICAgICRtYXAsXG4gICAgKFxuICAgICAgJGtleTogJHZhbHVlXG4gICAgKVxuICApO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgU2V0IERlZXBcbkBmdW5jdGlvbiBtYXAtc2V0LWRlZXAoJG1hcCwgJGtleXMsICR2YWx1ZSkge1xuICAkcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzOiB0cnVlICFnbG9iYWw7XG4gICRsZW5ndGg6IGxlbmd0aCgka2V5cyk7XG4gICRnZXQta2V5czogKCk7XG4gICRtYXAtbGV2ZWw6ICgpO1xuXG4gIEBpZiAkbGVuZ3RoID4gMSB7XG4gICAgJGdldC1rZXlzOiBnZXQta2V5cygka2V5cywgJGxlbmd0aCk7XG4gICAgJG1hcC1sZXZlbDogbWFwLWdldC1kZWVwKCRtYXAsICRnZXQta2V5cyk7XG4gIH1cblxuICAkbWVyZ2U6IChcbiAgICBudGgoJGtleXMsICRsZW5ndGgpOiAkdmFsdWVcbiAgKTtcblxuICBAaWYgJG1hcC1sZXZlbCB7XG4gICAgJG1lcmdlOiBtYXAtbWVyZ2UoJG1hcC1sZXZlbCwgJG1lcmdlKTtcbiAgfVxuXG4gIEBmb3IgJGkgZnJvbSAoJGxlbmd0aCAqIC0xICsgMSkgdGhyb3VnaCAtMSB7XG4gICAgJGo6IGFicygkaSk7XG4gICAgJGtleTogbnRoKCRrZXlzLCAkaik7XG5cbiAgICAvLyBAZGVidWcgJGdldC1rZXlzO1xuXG4gICAgQGlmICRqID4gMSB7XG4gICAgICAkZ2V0LWtleXM6IGdldC1rZXlzKCRrZXlzLCAkaik7XG4gICAgICAkbWFwLWxldmVsOiBtYXAtZ2V0LWRlZXAoJG1hcCwgJGdldC1rZXlzKTtcblxuICAgICAgQGlmICRtYXAtbGV2ZWwge1xuICAgICAgICAkbWVyZ2U6IG1hcC1tZXJnZShcbiAgICAgICAgICAkbWFwLWxldmVsLFxuICAgICAgICAgIChcbiAgICAgICAgICAgICRrZXk6ICRtZXJnZVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICAkbWVyZ2U6IChcbiAgICAgICAgICAka2V5OiAkbWVyZ2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IEBlbHNlIHtcbiAgICAgICRtZXJnZTogKFxuICAgICAgICAka2V5OiAkbWVyZ2VcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgJG1hcDogbWFwLW1lcmdlKCRtYXAsICRtZXJnZSk7XG5cbiAgJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5nczogZmFsc2UgIWdsb2JhbDtcblxuICBAcmV0dXJuICRtYXA7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogVU5JVFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUHJvZ3Jlc3NpdmUgY2FsY1xuQGZ1bmN0aW9uIGdldC1wcm9ncmVzc2l2ZS1jYWxjKFxuICAkbWluLW9iai1zaXplLFxuICAkbWF4LW9iai1zaXplLFxuICAkbWluLXZwLFxuICAkbWF4LXZwLFxuICAkdnAtdW5pdDogdndcbikge1xuICBAcmV0dXJuIGNhbGMoXG4gICAgI3skbWluLW9iai1zaXplfSArICN7c3RyaXAtdW5pdCgkbWF4LW9iai1zaXplIC0gJG1pbi1vYmotc2l6ZSl9ICpcbiAgICAgICgoMTAwI3skdnAtdW5pdH0gLSAjeyRtaW4tdnB9KSAvICN7c3RyaXAtdW5pdCgkbWF4LXZwIC0gJG1pbi12cCl9KVxuICApO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IFVOSVRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFN0cmlwIHVuaXRcbkBmdW5jdGlvbiBzdHJpcC11bml0KCRudW1iZXIpIHtcbiAgQGlmIHR5cGUtb2YoJG51bWJlcikgPT0gJ251bWJlcicgYW5kIG5vdCB1bml0bGVzcygkbnVtYmVyKSB7XG4gICAgQHJldHVybiAkbnVtYmVyIC8gKCRudW1iZXIgKiAwICsgMSk7XG4gIH1cblxuICBAcmV0dXJuICRudW1iZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBlbS9yZW0gdW5pdFxuQGZ1bmN0aW9uIGVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCBlbSk7XG59XG5cbkBmdW5jdGlvbiByZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIHJlbSk7XG59XG5cbkBmdW5jdGlvbiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsICR1bml0KSB7XG4gICRmczogMTBweDtcblxuICBAaWYgJGZvbnQtc2l6ZSB7XG4gICAgJGZzOiAkZm9udC1zaXplO1xuICB9XG4gIEBlbHNlIGlmICRiYXNlLWh0bWwtZm9udC1zaXplIHsgLy8gbWFrZSBzdXJlIHRvIGRlZmluZSB0aGlzIHZhcmlhYmxlIG9uIHlvdXIgb3duXG4gICAgJGZzOiAkYmFzZS1odG1sLWZvbnQtc2l6ZTtcbiAgfVxuXG4gIEByZXR1cm4gI3tzdHJpcC11bml0KCRudW0pIC8gc3RyaXAtdW5pdCgkZnMpfSN7JHVuaXR9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgc2NyZWVuIHBlcmNlbnRcbkBmdW5jdGlvbiBnZXQtc2NyZWVuLXBlcmNlbnQoJHdpZHRoLCAkc2NyZWVuKSB7XG4gIEByZXR1cm4gdW5xdW90ZSgnI3skd2lkdGggKiAxMDAgLyAkc2NyZWVufSUnKTtcbn1cblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBaLUlOREVYRVNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2VuZXJhdG9yXG5AZnVuY3Rpb24gei1pbmRleCgkbWFwLCAka2V5cykge1xuICAkZm91bmQtaW5kZXg6IG51bGw7XG5cbiAgQGVhY2ggJGtleSBpbiAka2V5cyB7XG4gICAgQGlmICh0eXBlLW9mKCRtYXApID09ICdtYXAnKSB7XG4gICAgICAkZm91bmQtaW5kZXg6IGluZGV4KG1hcC1rZXlzKCRtYXApLCAka2V5KTtcbiAgICAgICRtYXA6IG1hcC1nZXQoJG1hcCwgJGtleSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkZm91bmQtaW5kZXg6IGluZGV4KCRtYXAsICRrZXkpO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGZvdW5kLWluZGV4O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTZXJ2ZXJcbkBmdW5jdGlvbiB6KCRtYXAsICRrZXlzLi4uKSB7XG4gIEByZXR1cm4gei1pbmRleCgkbWFwLCAka2V5cyk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogRk9STVNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgSW5wdXQgcGxhY2Vob2xkZXJcbkBtaXhpbiBpbnB1dC1wbGFjZWhvbGRlcigkY29sLCAkc3R5bGU6IGl0YWxpYykge1xuICAmOi1tb3otcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxuICAmOjotbW96LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbiAgJjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxuICAmOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbn1cblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBQT1NJVElPTlNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQWJzb2x1dGUgY2VudGVyZWRcbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXJlZCgkdHlwZTogYWJzb2x1dGUsICRwb3M6IDUwJSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIHRvcDogJHBvcztcbiAgbGVmdDogJHBvcztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEFic29sdXRlIGNlbnRlcmVkIFhcbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXJlZC14KCR0eXBlOiBhYnNvbHV0ZSwgJHBvczogNTAlKSB7XG4gIHBvc2l0aW9uOiAkdHlwZTtcbiAgbGVmdDogJHBvcztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBBYnNvbHV0ZSBjZW50ZXJlZCBZXG5AbWl4aW4gYWJzb2x1dGUtY2VudGVyZWQteSgkdHlwZTogYWJzb2x1dGUsICRwb3M6IDUwJSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIHRvcDogJHBvcztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IFNIT1JUSEFORFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUG9zaXRpb25zXG5AbWl4aW4gcG9zaXRpb24tc3RyZXRjaGVkKCR0eXBlOiBhYnNvbHV0ZSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRGltZW5zaW9uc1xuQG1peGluIGRpbWVuc2lvbnMtc3F1YXJlKCR2YWx1ZSkge1xuICB3aWR0aDogJHZhbHVlO1xuICBoZWlnaHQ6ICR2YWx1ZTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUGFkZGluZ1xuQG1peGluIHBhZGRpbmctdigkdmFsdWUpIHtcbiAgcGFkZGluZy10b3A6ICR2YWx1ZTtcbiAgcGFkZGluZy1ib3R0b206ICR2YWx1ZTtcbn1cblxuQG1peGluIHBhZGRpbmctaCgkdmFsdWUpIHtcbiAgcGFkZGluZy1yaWdodDogJHZhbHVlO1xuICBwYWRkaW5nLWxlZnQ6ICR2YWx1ZTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFyZ2luXG5AbWl4aW4gbWFyZ2luLXYoJHZhbHVlKSB7XG4gIG1hcmdpbi10b3A6ICR2YWx1ZTtcbiAgbWFyZ2luLWJvdHRvbTogJHZhbHVlO1xufVxuXG5AbWl4aW4gbWFyZ2luLWgoJHZhbHVlKSB7XG4gIG1hcmdpbi1yaWdodDogJHZhbHVlO1xuICBtYXJnaW4tbGVmdDogJHZhbHVlO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBCb3JkZXJcbkBtaXhpbiBib3JkZXItdigkdmFsdWUpIHtcbiAgYm9yZGVyLXRvcDogJHZhbHVlO1xuICBib3JkZXItYm90dG9tOiAkdmFsdWU7XG59XG5cbkBtaXhpbiBib3JkZXItaCgkdmFsdWUpIHtcbiAgYm9yZGVyLXJpZ2h0OiAkdmFsdWU7XG4gIGJvcmRlci1sZWZ0OiAkdmFsdWU7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogVFlQT0dSQVBIWVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBGb250IHNtb290aGluZ1xuQG1peGluIGZvbnQtc21vb3RoaW5nKCR2YWx1ZTogYW50aWFsaWFzZWQpIHtcbiAgQGlmICR2YWx1ZSA9PSBhbnRpYWxpYXNlZCB7XG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbiAgfSBAZWxzZSB7XG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogc3VicGl4ZWwtYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGF1dG87XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgVGV4dCB1cHBlcmNhc2VcbkBtaXhpbiB0ZXh0LXVwcGVyY2FzZSgpIHtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgLW1vei1mb250LWZlYXR1cmUtc2V0dGluZ3M6ICdjYXNlJztcbiAgLXdlYmtpdC1mb250LWZlYXR1cmUtc2V0dGluZ3M6ICdjYXNlJztcbiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnY2FzZScgb247XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFNlbGVjdGlvblxuQG1peGluIHNlbGVjdGlvbigkY29sKSB7XG4gICRiZ3I6IGlmKCRjb2wgIT0gdHJhbnNwYXJlbnQsIHJnYmEoJGNvbCwgMC41KSwgcmdiYSgwLCAwLCAwLCAwKSk7XG5cbiAgJjo6LW1vei1zZWxlY3Rpb24ge1xuICAgIGJhY2tncm91bmQ6ICRiZ3I7XG4gIH1cblxuICAmOjpzZWxlY3Rpb24ge1xuICAgIGJhY2tncm91bmQ6ICRiZ3I7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gQkFTRVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBJbXBvcnRzXG5AaW1wb3J0ICcuLi8uLi9kZWZzL2JyYW5kLmpzJztcbkBpbXBvcnQgJy4uLy4uL2RlZnMvd2Vic2l0ZS5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEZvbnQgc2l6ZVxuQGZ1bmN0aW9uIHJvbGUoJG1hcCwgJHZhbHVlKSB7XG4gICRyLW1hcDogbWFwLWdldCgkdmFsdWUsICdtYXAnKTtcbiAgJHItdmFsdWU6IG1hcC1nZXQoJHZhbHVlLCAndmFsdWUnKTtcbiAgQHJldHVybiBtYXAtZ2V0KCRyLW1hcCwgJHItdmFsdWUpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnMgPiBDQUxDXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IHZhbHVlIGJhc2VkIG9uIHRoZSBiYXNlIGZvbnQgc2l6ZVxuQGZ1bmN0aW9uIGJhc2UoJHZhbHVlKSB7XG4gIEByZXR1cm4gbWF0aC5kaXYoJHZhbHVlLCBtYXAtZ2V0KCRyb2xlcy1yYXRpb3MsICdsYXlvdXQtZ3Jvd3RoJykpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBQcm9ncmVzc2l2ZSBjYWxjXG5AZnVuY3Rpb24gZ2V0LXByb2dyZXNzaXZlLWNhbGMoXG4gICRtaW4tb2JqLXNpemUsXG4gICRtYXgtb2JqLXNpemUsXG4gICRtaW4tdnAsXG4gICRtYXgtdnAsXG4gICR2cC11bml0OiB2d1xuKSB7XG4gIEByZXR1cm4gY2FsYyhcbiAgICAje3BpeGVsYXRlKCRtaW4tb2JqLXNpemUpfSArICN7c3RyaXAtdW5pdCgkbWF4LW9iai1zaXplIC0gJG1pbi1vYmotc2l6ZSl9ICpcbiAgICAgIChcbiAgICAgICAgKDEwMCN7JHZwLXVuaXR9IC0gI3twaXhlbGF0ZSgkbWluLXZwKX0pIC8gI3tzdHJpcC11bml0KFxuICAgICAgICAgICAgJG1heC12cCAtICRtaW4tdnBcbiAgICAgICAgICApfVxuICAgICAgKVxuICApO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnMgPiBVTklUU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFN0cmlwIHVuaXRcbkBmdW5jdGlvbiBzdHJpcC11bml0KCRudW1iZXIpIHtcbiAgQGlmIHR5cGUtb2YoJG51bWJlcikgPT0gJ251bWJlcicgYW5kIG5vdCB1bml0bGVzcygkbnVtYmVyKSB7XG4gICAgQHJldHVybiBtYXRoLmRpdigkbnVtYmVyLCAoJG51bWJlciAqIDAgKyAxKSk7XG4gIH1cblxuICBAcmV0dXJuICRudW1iZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBQeCB1bml0XG5AZnVuY3Rpb24gcGl4ZWxhdGUoJHZhbHVlKSB7XG4gIEByZXR1cm4gI3tzdHJpcC11bml0KCR2YWx1ZSl9UHg7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBlbS9yZW0gdW5pdFxuQGZ1bmN0aW9uIGVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCBlbSk7XG59XG5cbkBmdW5jdGlvbiByZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIHJlbSk7XG59XG5cbkBmdW5jdGlvbiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsICR1bml0KSB7XG4gICRmczogMTBweDtcblxuICBAaWYgJGZvbnQtc2l6ZSB7XG4gICAgJGZzOiAkZm9udC1zaXplO1xuICB9IEBlbHNlIHtcbiAgICAkZnM6IG1hcC1nZXQoJHR5cG9ncmFwaHksICdiYXNlX2ZvbnRfc2l6ZScpO1xuICB9XG5cbiAgQHJldHVybiAje21hdGguZGl2KHN0cmlwLXVuaXQoJG51bSksIHN0cmlwLXVuaXQoJGZzKSl9I3skdW5pdH07XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIERhdGEgPiBTV0FUQ0hFU1xuXG5AaW1wb3J0ICcuLi8uLi9kZWZzL3N3YXRjaGVzL2luZGV4LmpzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX2JyZWFrcG9pbnRzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX3JhdGlvcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19zY3JlZW5zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX3NwYWNlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIERhdGEgPiBST0xFU1xuXG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19ib3JkZXJzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2JyZWFrcG9pbnRzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2NvbG9ycyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19kaW1lbnNpb25zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3JhdGlvcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19zY3JlZW5zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3NoYWRvd3MnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfc3BhY2VzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3R5cG9ncmFwaHknO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnMgPiBTQ0FMQUJJTElUWVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFNjYWxlclxuQG1peGluIHNjYWxlcihcbiAgJHByb3BlcnR5LFxuICAkbWluLXNpemUsXG4gICRtYXgtc2l6ZSxcbiAgJG1pbi12dzogbWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21pbicpLFxuICAkbWF4LXZ3OiBtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWF4Jylcbikge1xuICAjeyRwcm9wZXJ0eX06ICN7c3RyaXAtdW5pdChtYXRoLmRpdigoJG1pbi12dyAqIDAuOTc5NikgKiAkbWluLXNpemUsIDEwMDApKX12dzsgLy8gMC45Nzk2IGZpeGVzIHdyb25nIGNhbGN1bGF0aW9ucyBpbiBDaHJvbWVcblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAkbWluLXZ3KSB7XG4gICAgI3skcHJvcGVydHl9OiBnZXQtcHJvZ3Jlc3NpdmUtY2FsYygkbWluLXNpemUsICRtYXgtc2l6ZSwgJG1pbi12dywgJG1heC12dyk7XG4gIH1cblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAkbWF4LXZ3KSB7XG4gICAgI3skcHJvcGVydHl9OiBwaXhlbGF0ZSgkbWF4LXNpemUpO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIFBsYWNlaG9sZGVycyA+IFNDQUxBQklMSVRZXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTmVnYXRpdmVcbiVwaC1uZWdhdGl2ZSB7XG4gIGgxLFxuICBoMixcbiAgaDMsXG4gIGg0LFxuICBoNSxcbiAgaDYsXG4gIHAge1xuICAgIGNvbG9yOiBtYXAtZ2V0KCRyb2xlcy1jb2wtdGV4dHMsICduZWdhdGl2ZScpO1xuICB9XG5cbiAgLm1ldGEge1xuICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHN3YXRjaGVzLWNvbG9ycywgJ2hvbmV5LXllbGxvdycsICdsaWdodCcpO1xuICB9XG5cbiAgLnRleHQtbGluayB7XG4gICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnbm9ybWFsJyk7XG4gICAgYm9yZGVyLWJvdHRvbTogcGl4ZWxhdGUoMXB4KSBkb3R0ZWRcbiAgICAgIHJnYmEobWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdub3JtYWwnKSwgMC4zMyk7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2hvdmVyJyk7XG4gICAgfVxuXG4gICAgJjphY3RpdmUge1xuICAgICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnYWN0aXZlJyk7XG4gICAgfVxuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFdhdmVcbiVwaC13YXZlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiA1MCU7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4td2lkdGg6IG1hdGguZGl2KG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtYXgnKSwgMik7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcblxuICA+IHN2ZyB7XG4gICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgSGVhZCB3YXZlXG4lcGgtaGVhZC13YXZlIHtcbiAgJHdhdmUtaGVpZ2h0OiBiYXNlKG1hcC1nZXQoJHJvbGVzLWRpbWVuc2lvbnMtd2F2ZXMsICdoZWFkZXInKSk7XG5cbiAgLndhdmUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICB0b3A6IGNhbGMoMTAwJSAtIDFQeCk7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiBlbSgkd2F2ZS1oZWlnaHQpO1xuXG4gICAgLmlubmVyIHtcbiAgICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKDEwMCUpO1xuXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgICBzdmcge1xuICAgICAgICBAaW5jbHVkZSBkaW1lbnNpb25zLXNxdWFyZSgxMDAlKTtcblxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgbWluLXdpZHRoOiBtYXRoLmRpdihtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWF4JyksIDIpO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQGtleWZyYW1lcyBzbGlkZSB7XG4gICAgZnJvbSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICB9XG5cbiAgICB0byB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAwKTtcbiAgICB9XG4gIH1cblxuICAuc2Nyb2xsLWJ0biB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvdHRvbTogMjBweDtcbiAgICBsZWZ0OiA1MCU7XG4gICAgei1pbmRleDogMTtcbiAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0LWRlZXAoJHN3YXRjaGVzLWNvbG9ycywgJ2Nvcm5mbG93ZXInLCAnYmFzZScpO1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgIGFuaW1hdGlvbjogc2xpZGUgMXMgZWFzZS1pbi1vdXQgaW5maW5pdGUgYWx0ZXJuYXRlO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2hvdmVyJyk7XG4gICAgfVxuXG4gICAgJjphY3RpdmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdhY3RpdmUnKTtcbiAgICB9XG5cbiAgICBzdmcge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgICB9XG5cbiAgICBib2R5Om5vdCguc2Nyb2xsYWJsZSkgJiB7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEFsbFxuW2NsYXNzKj0ncGFuZWwtJ10ge1xuICBwYWRkaW5nOiBtYXAtZ2V0KCRyb2xlcy1zcGFjZXMsICdwYW5lbCcpO1xuICBib3JkZXItcmFkaXVzOiBtYXAtZ2V0KCRyb2xlcy1ib3JkZXJzLXJhZGl1c2VzLCAnYmxvY2snKTtcblxuICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgKi9cbiAgKyBzZWN0aW9uW2NsYXNzKj0ncGFuZWwtJ10ge1xuICAgIG1hcmdpbi10b3A6IG1hcC1nZXQoJHJvbGVzLXNwYWNlcywgJ3BhbmVsJyk7XG4gIH1cbn1cblxuLnBhbmVsLXRyYW5zcGFyZW50IHtcbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogbWFwLWdldCgkcm9sZXMtYnJlYWtwb2ludHMsICd0ZXh0LWNvbHVtbnMnKSAtIDEpIHtcbiAgICBAaW5jbHVkZSBwYWRkaW5nLWgoMCAhaW1wb3J0YW50KTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBDYXJkXG4ucGFuZWwtY2FyZCB7XG4gIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQoJHJvbGVzLWNvbC1iYWNrZ3JvdW5kcywgJ2NhcmQnKTtcbiAgYm94LXNoYWRvdzogMCAwIDIwcHggLTEwcHggcmdiKDUyIDEyNiAxNjMgLyA4MCUpICFpbXBvcnRhbnQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFNoZWV0XG4ucGFuZWwtc2hlZXQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0KCRyb2xlcy1jb2wtYmFja2dyb3VuZHMsICdzaGVldCcpO1xuICBib3gtc2hhZG93OiAwIDAgMTBweCAtNXB4IHJnYigxODIgMTcwIDE0MCk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFBydXNzaWFuIGJsdWVcbi5wYW5lbC1wcnVzc2lhbi1ibHVlIHtcbiAgQGV4dGVuZCAlcGgtbmVnYXRpdmU7XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRzd2F0Y2hlcy1jb2xvcnMsICdwcnVzc2lhbi1ibHVlJywgJ2Jhc2UnKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQmx1ZSBncmVlblxuLnBhbmVsLWJsdWUtZ3JlZW4ge1xuICBAZXh0ZW5kICVwaC1uZWdhdGl2ZTtcblxuICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0LWRlZXAoJHN3YXRjaGVzLWNvbG9ycywgJ2JsdWUtZ3JlZW4nLCAnYmFzZScpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBDb3JuZmxvd2Vyc1xuLnBhbmVsLWNvcm5mbG93ZXIge1xuICBAZXh0ZW5kICVwaC1uZWdhdGl2ZTtcblxuICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0LWRlZXAoJHN3YXRjaGVzLWNvbG9ycywgJ2Nvcm5mbG93ZXInLCAnYmFzZScpO1xuXG4gICYsXG4gICoge1xuICAgIEBpbmNsdWRlIHNlbGVjdGlvbihtYXAtZ2V0LWRlZXAoJHN3YXRjaGVzLWNvbG9ycywgJ2Nvcm5mbG93ZXInLCAnZGFyaycpKTtcbiAgfVxufVxuIiwiLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gQ29tcG9uZW50cyA+IEJSRUFEQ1JVTUJTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcbkB1c2UgJ3Nhc3M6bWF0aCc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogQ09MT1JTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IExpZ2h0XG5AZnVuY3Rpb24gbGlnaHQoJGNvbG9yLCAkcGVyY2VudCkge1xuICBAcmV0dXJuIG1peCgjZmZmLCAkY29sb3IsICRwZXJjZW50KTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRGFya1xuQGZ1bmN0aW9uIGRhcmsoJGNvbG9yLCAkcGVyY2VudCkge1xuICBAcmV0dXJuIG1peCgjMDAwLCAkY29sb3IsICRwZXJjZW50KTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBNQVBTXG5cbiRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3M6IGZhbHNlICFkZWZhdWx0O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IERlZXAgV2FybmluZ1xuLy8gRGlzcGxheXMgYSB3YXJuaW5nIGlmIHRoZSByZXRyaWV2ZWQgdmFsdWUgaXMgYG51bGxgXG5AZnVuY3Rpb24gbWFwLWdldC1kZWVwLXdhcm5pbmcoJHdhcm4sICRnZXQsICRrZXkpIHtcbiAgQGlmIG5vdCAkcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzIHtcbiAgICBAaWYgJGdldCA9PSBudWxsIHtcbiAgICAgIEB3YXJuICdNYXAgaGFzIG5vIHZhbHVlIGZvciBrZXkgc2VhcmNoIGAjeyR3YXJufWAnO1xuICAgIH0gQGVsc2UgaWYgdHlwZS1vZigkZ2V0KSAhPSAnbWFwJyB7XG4gICAgICBAd2FybiAnTm9uLW1hcCB2YWx1ZSBmb3VuZCBmb3Iga2V5IHNlYXJjaCBgI3skd2Fybn1gLCBjYW5ub3Qgc2VhcmNoIGZvciBrZXkgYCN7JGtleX1gJztcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuIG51bGw7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgRGVlcFxuLy8gR2l2ZW4gYSBtYXAgYW5kIGEgbGlzdCBvZiBrZXlzLCBmaW5kIHRoZSB2YWx1ZSBhdCB0aGUgZ2l2ZW4ga2V5XG5AZnVuY3Rpb24gbWFwLWdldC1kZWVwKCRtYXAsICRrZXlzLi4uKSB7XG4gIEBpZiBsZW5ndGgoJGtleXMpID09IDEge1xuICAgICRrZXlzOiBudGgoJGtleXMsIDEpO1xuICB9XG5cbiAgJHdhcm46ICcje250aCgka2V5cywgMSl9JztcbiAgJGxlbmd0aDogbGVuZ3RoKCRrZXlzKTtcbiAgJGdldDogbWFwLWdldCgkbWFwLCBudGgoJGtleXMsIDEpKTtcblxuICBAaWYgJGxlbmd0aCA+IDEge1xuICAgIEBmb3IgJGkgZnJvbSAyIHRocm91Z2ggJGxlbmd0aCB7XG4gICAgICBAaWYgJGdldCAhPSBudWxsIGFuZCB0eXBlLW9mKCRnZXQpID09ICdtYXAnIHtcbiAgICAgICAgJHdhcm46ICR3YXJuICsgJy0+I3tudGgoJGtleXMsICRpKX0nO1xuICAgICAgICAkZ2V0OiBtYXAtZ2V0KCRnZXQsIG50aCgka2V5cywgJGkpKTtcblxuICAgICAgICBAaWYgJGdldCA9PSBudWxsIHtcbiAgICAgICAgICBAcmV0dXJuIG1hcC1nZXQtZGVlcC13YXJuaW5nKCR3YXJuLCAkZ2V0LCBudGgoJGtleXMsICRpKSk7XG4gICAgICAgIH1cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICBAcmV0dXJuIG1hcC1nZXQtZGVlcC13YXJuaW5nKCR3YXJuLCAkZ2V0LCBudGgoJGtleXMsICRpKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkZ2V0O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IEtleXNcbkBmdW5jdGlvbiBnZXQta2V5cygka2V5cywgJGNvdW50ZXIpIHtcbiAgJHJldHVybjogKCk7XG5cbiAgQGZvciAkaSBmcm9tIDEgdG8gJGNvdW50ZXIge1xuICAgICRyZXR1cm46IGFwcGVuZCgkcmV0dXJuLCBudGgoJGtleXMsICRpKSk7XG4gIH1cblxuICBAcmV0dXJuICRyZXR1cm47XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgUHJldmlvdXMgS2V5XG5AZnVuY3Rpb24gbWFwLWdldC1wcmV2LWtleSgkbWFwLCAka2V5KSB7XG4gICRpbmRleDogaW5kZXgoJG1hcCwgJGtleSk7XG4gICRwcmV2OiAkaW5kZXggLSAxO1xuICAkcmVzdWx0OiBpZigkcHJldiA+IDAsIG50aCgkbWFwLCAkcHJldiksIG51bGwpO1xuXG4gIEByZXR1cm4gJHJlc3VsdDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIFNldFxuQGZ1bmN0aW9uIG1hcC1zZXQoJG1hcCwgJGtleSwgJHZhbHVlKSB7XG4gIEByZXR1cm4gbWFwLW1lcmdlKFxuICAgICRtYXAsXG4gICAgKFxuICAgICAgJGtleTogJHZhbHVlXG4gICAgKVxuICApO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgU2V0IERlZXBcbkBmdW5jdGlvbiBtYXAtc2V0LWRlZXAoJG1hcCwgJGtleXMsICR2YWx1ZSkge1xuICAkcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzOiB0cnVlICFnbG9iYWw7XG4gICRsZW5ndGg6IGxlbmd0aCgka2V5cyk7XG4gICRnZXQta2V5czogKCk7XG4gICRtYXAtbGV2ZWw6ICgpO1xuXG4gIEBpZiAkbGVuZ3RoID4gMSB7XG4gICAgJGdldC1rZXlzOiBnZXQta2V5cygka2V5cywgJGxlbmd0aCk7XG4gICAgJG1hcC1sZXZlbDogbWFwLWdldC1kZWVwKCRtYXAsICRnZXQta2V5cyk7XG4gIH1cblxuICAkbWVyZ2U6IChcbiAgICBudGgoJGtleXMsICRsZW5ndGgpOiAkdmFsdWVcbiAgKTtcblxuICBAaWYgJG1hcC1sZXZlbCB7XG4gICAgJG1lcmdlOiBtYXAtbWVyZ2UoJG1hcC1sZXZlbCwgJG1lcmdlKTtcbiAgfVxuXG4gIEBmb3IgJGkgZnJvbSAoJGxlbmd0aCAqIC0xICsgMSkgdGhyb3VnaCAtMSB7XG4gICAgJGo6IGFicygkaSk7XG4gICAgJGtleTogbnRoKCRrZXlzLCAkaik7XG5cbiAgICAvLyBAZGVidWcgJGdldC1rZXlzO1xuXG4gICAgQGlmICRqID4gMSB7XG4gICAgICAkZ2V0LWtleXM6IGdldC1rZXlzKCRrZXlzLCAkaik7XG4gICAgICAkbWFwLWxldmVsOiBtYXAtZ2V0LWRlZXAoJG1hcCwgJGdldC1rZXlzKTtcblxuICAgICAgQGlmICRtYXAtbGV2ZWwge1xuICAgICAgICAkbWVyZ2U6IG1hcC1tZXJnZShcbiAgICAgICAgICAkbWFwLWxldmVsLFxuICAgICAgICAgIChcbiAgICAgICAgICAgICRrZXk6ICRtZXJnZVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICAkbWVyZ2U6IChcbiAgICAgICAgICAka2V5OiAkbWVyZ2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IEBlbHNlIHtcbiAgICAgICRtZXJnZTogKFxuICAgICAgICAka2V5OiAkbWVyZ2VcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgJG1hcDogbWFwLW1lcmdlKCRtYXAsICRtZXJnZSk7XG5cbiAgJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5nczogZmFsc2UgIWdsb2JhbDtcblxuICBAcmV0dXJuICRtYXA7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogVU5JVFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUHJvZ3Jlc3NpdmUgY2FsY1xuQGZ1bmN0aW9uIGdldC1wcm9ncmVzc2l2ZS1jYWxjKFxuICAkbWluLW9iai1zaXplLFxuICAkbWF4LW9iai1zaXplLFxuICAkbWluLXZwLFxuICAkbWF4LXZwLFxuICAkdnAtdW5pdDogdndcbikge1xuICBAcmV0dXJuIGNhbGMoXG4gICAgI3skbWluLW9iai1zaXplfSArICN7c3RyaXAtdW5pdCgkbWF4LW9iai1zaXplIC0gJG1pbi1vYmotc2l6ZSl9ICpcbiAgICAgICgoMTAwI3skdnAtdW5pdH0gLSAjeyRtaW4tdnB9KSAvICN7c3RyaXAtdW5pdCgkbWF4LXZwIC0gJG1pbi12cCl9KVxuICApO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IFVOSVRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFN0cmlwIHVuaXRcbkBmdW5jdGlvbiBzdHJpcC11bml0KCRudW1iZXIpIHtcbiAgQGlmIHR5cGUtb2YoJG51bWJlcikgPT0gJ251bWJlcicgYW5kIG5vdCB1bml0bGVzcygkbnVtYmVyKSB7XG4gICAgQHJldHVybiAkbnVtYmVyIC8gKCRudW1iZXIgKiAwICsgMSk7XG4gIH1cblxuICBAcmV0dXJuICRudW1iZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBlbS9yZW0gdW5pdFxuQGZ1bmN0aW9uIGVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCBlbSk7XG59XG5cbkBmdW5jdGlvbiByZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIHJlbSk7XG59XG5cbkBmdW5jdGlvbiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsICR1bml0KSB7XG4gICRmczogMTBweDtcblxuICBAaWYgJGZvbnQtc2l6ZSB7XG4gICAgJGZzOiAkZm9udC1zaXplO1xuICB9XG4gIEBlbHNlIGlmICRiYXNlLWh0bWwtZm9udC1zaXplIHsgLy8gbWFrZSBzdXJlIHRvIGRlZmluZSB0aGlzIHZhcmlhYmxlIG9uIHlvdXIgb3duXG4gICAgJGZzOiAkYmFzZS1odG1sLWZvbnQtc2l6ZTtcbiAgfVxuXG4gIEByZXR1cm4gI3tzdHJpcC11bml0KCRudW0pIC8gc3RyaXAtdW5pdCgkZnMpfSN7JHVuaXR9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgc2NyZWVuIHBlcmNlbnRcbkBmdW5jdGlvbiBnZXQtc2NyZWVuLXBlcmNlbnQoJHdpZHRoLCAkc2NyZWVuKSB7XG4gIEByZXR1cm4gdW5xdW90ZSgnI3skd2lkdGggKiAxMDAgLyAkc2NyZWVufSUnKTtcbn1cblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBaLUlOREVYRVNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2VuZXJhdG9yXG5AZnVuY3Rpb24gei1pbmRleCgkbWFwLCAka2V5cykge1xuICAkZm91bmQtaW5kZXg6IG51bGw7XG5cbiAgQGVhY2ggJGtleSBpbiAka2V5cyB7XG4gICAgQGlmICh0eXBlLW9mKCRtYXApID09ICdtYXAnKSB7XG4gICAgICAkZm91bmQtaW5kZXg6IGluZGV4KG1hcC1rZXlzKCRtYXApLCAka2V5KTtcbiAgICAgICRtYXA6IG1hcC1nZXQoJG1hcCwgJGtleSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkZm91bmQtaW5kZXg6IGluZGV4KCRtYXAsICRrZXkpO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGZvdW5kLWluZGV4O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTZXJ2ZXJcbkBmdW5jdGlvbiB6KCRtYXAsICRrZXlzLi4uKSB7XG4gIEByZXR1cm4gei1pbmRleCgkbWFwLCAka2V5cyk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogRk9STVNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgSW5wdXQgcGxhY2Vob2xkZXJcbkBtaXhpbiBpbnB1dC1wbGFjZWhvbGRlcigkY29sLCAkc3R5bGU6IGl0YWxpYykge1xuICAmOi1tb3otcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxuICAmOjotbW96LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbiAgJjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxuICAmOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbn1cblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBQT1NJVElPTlNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQWJzb2x1dGUgY2VudGVyZWRcbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXJlZCgkdHlwZTogYWJzb2x1dGUsICRwb3M6IDUwJSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIHRvcDogJHBvcztcbiAgbGVmdDogJHBvcztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEFic29sdXRlIGNlbnRlcmVkIFhcbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXJlZC14KCR0eXBlOiBhYnNvbHV0ZSwgJHBvczogNTAlKSB7XG4gIHBvc2l0aW9uOiAkdHlwZTtcbiAgbGVmdDogJHBvcztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBBYnNvbHV0ZSBjZW50ZXJlZCBZXG5AbWl4aW4gYWJzb2x1dGUtY2VudGVyZWQteSgkdHlwZTogYWJzb2x1dGUsICRwb3M6IDUwJSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIHRvcDogJHBvcztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IFNIT1JUSEFORFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUG9zaXRpb25zXG5AbWl4aW4gcG9zaXRpb24tc3RyZXRjaGVkKCR0eXBlOiBhYnNvbHV0ZSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRGltZW5zaW9uc1xuQG1peGluIGRpbWVuc2lvbnMtc3F1YXJlKCR2YWx1ZSkge1xuICB3aWR0aDogJHZhbHVlO1xuICBoZWlnaHQ6ICR2YWx1ZTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUGFkZGluZ1xuQG1peGluIHBhZGRpbmctdigkdmFsdWUpIHtcbiAgcGFkZGluZy10b3A6ICR2YWx1ZTtcbiAgcGFkZGluZy1ib3R0b206ICR2YWx1ZTtcbn1cblxuQG1peGluIHBhZGRpbmctaCgkdmFsdWUpIHtcbiAgcGFkZGluZy1yaWdodDogJHZhbHVlO1xuICBwYWRkaW5nLWxlZnQ6ICR2YWx1ZTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFyZ2luXG5AbWl4aW4gbWFyZ2luLXYoJHZhbHVlKSB7XG4gIG1hcmdpbi10b3A6ICR2YWx1ZTtcbiAgbWFyZ2luLWJvdHRvbTogJHZhbHVlO1xufVxuXG5AbWl4aW4gbWFyZ2luLWgoJHZhbHVlKSB7XG4gIG1hcmdpbi1yaWdodDogJHZhbHVlO1xuICBtYXJnaW4tbGVmdDogJHZhbHVlO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBCb3JkZXJcbkBtaXhpbiBib3JkZXItdigkdmFsdWUpIHtcbiAgYm9yZGVyLXRvcDogJHZhbHVlO1xuICBib3JkZXItYm90dG9tOiAkdmFsdWU7XG59XG5cbkBtaXhpbiBib3JkZXItaCgkdmFsdWUpIHtcbiAgYm9yZGVyLXJpZ2h0OiAkdmFsdWU7XG4gIGJvcmRlci1sZWZ0OiAkdmFsdWU7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogVFlQT0dSQVBIWVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBGb250IHNtb290aGluZ1xuQG1peGluIGZvbnQtc21vb3RoaW5nKCR2YWx1ZTogYW50aWFsaWFzZWQpIHtcbiAgQGlmICR2YWx1ZSA9PSBhbnRpYWxpYXNlZCB7XG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbiAgfSBAZWxzZSB7XG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogc3VicGl4ZWwtYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGF1dG87XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgVGV4dCB1cHBlcmNhc2VcbkBtaXhpbiB0ZXh0LXVwcGVyY2FzZSgpIHtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgLW1vei1mb250LWZlYXR1cmUtc2V0dGluZ3M6ICdjYXNlJztcbiAgLXdlYmtpdC1mb250LWZlYXR1cmUtc2V0dGluZ3M6ICdjYXNlJztcbiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnY2FzZScgb247XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFNlbGVjdGlvblxuQG1peGluIHNlbGVjdGlvbigkY29sKSB7XG4gICRiZ3I6IGlmKCRjb2wgIT0gdHJhbnNwYXJlbnQsIHJnYmEoJGNvbCwgMC41KSwgcmdiYSgwLCAwLCAwLCAwKSk7XG5cbiAgJjo6LW1vei1zZWxlY3Rpb24ge1xuICAgIGJhY2tncm91bmQ6ICRiZ3I7XG4gIH1cblxuICAmOjpzZWxlY3Rpb24ge1xuICAgIGJhY2tncm91bmQ6ICRiZ3I7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gQkFTRVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBJbXBvcnRzXG5AaW1wb3J0ICcuLi8uLi9kZWZzL2JyYW5kLmpzJztcbkBpbXBvcnQgJy4uLy4uL2RlZnMvd2Vic2l0ZS5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEZvbnQgc2l6ZVxuQGZ1bmN0aW9uIHJvbGUoJG1hcCwgJHZhbHVlKSB7XG4gICRyLW1hcDogbWFwLWdldCgkdmFsdWUsICdtYXAnKTtcbiAgJHItdmFsdWU6IG1hcC1nZXQoJHZhbHVlLCAndmFsdWUnKTtcbiAgQHJldHVybiBtYXAtZ2V0KCRyLW1hcCwgJHItdmFsdWUpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnMgPiBDQUxDXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IHZhbHVlIGJhc2VkIG9uIHRoZSBiYXNlIGZvbnQgc2l6ZVxuQGZ1bmN0aW9uIGJhc2UoJHZhbHVlKSB7XG4gIEByZXR1cm4gbWF0aC5kaXYoJHZhbHVlLCBtYXAtZ2V0KCRyb2xlcy1yYXRpb3MsICdsYXlvdXQtZ3Jvd3RoJykpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBQcm9ncmVzc2l2ZSBjYWxjXG5AZnVuY3Rpb24gZ2V0LXByb2dyZXNzaXZlLWNhbGMoXG4gICRtaW4tb2JqLXNpemUsXG4gICRtYXgtb2JqLXNpemUsXG4gICRtaW4tdnAsXG4gICRtYXgtdnAsXG4gICR2cC11bml0OiB2d1xuKSB7XG4gIEByZXR1cm4gY2FsYyhcbiAgICAje3BpeGVsYXRlKCRtaW4tb2JqLXNpemUpfSArICN7c3RyaXAtdW5pdCgkbWF4LW9iai1zaXplIC0gJG1pbi1vYmotc2l6ZSl9ICpcbiAgICAgIChcbiAgICAgICAgKDEwMCN7JHZwLXVuaXR9IC0gI3twaXhlbGF0ZSgkbWluLXZwKX0pIC8gI3tzdHJpcC11bml0KFxuICAgICAgICAgICAgJG1heC12cCAtICRtaW4tdnBcbiAgICAgICAgICApfVxuICAgICAgKVxuICApO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnMgPiBVTklUU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFN0cmlwIHVuaXRcbkBmdW5jdGlvbiBzdHJpcC11bml0KCRudW1iZXIpIHtcbiAgQGlmIHR5cGUtb2YoJG51bWJlcikgPT0gJ251bWJlcicgYW5kIG5vdCB1bml0bGVzcygkbnVtYmVyKSB7XG4gICAgQHJldHVybiBtYXRoLmRpdigkbnVtYmVyLCAoJG51bWJlciAqIDAgKyAxKSk7XG4gIH1cblxuICBAcmV0dXJuICRudW1iZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBQeCB1bml0XG5AZnVuY3Rpb24gcGl4ZWxhdGUoJHZhbHVlKSB7XG4gIEByZXR1cm4gI3tzdHJpcC11bml0KCR2YWx1ZSl9UHg7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBlbS9yZW0gdW5pdFxuQGZ1bmN0aW9uIGVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCBlbSk7XG59XG5cbkBmdW5jdGlvbiByZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIHJlbSk7XG59XG5cbkBmdW5jdGlvbiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsICR1bml0KSB7XG4gICRmczogMTBweDtcblxuICBAaWYgJGZvbnQtc2l6ZSB7XG4gICAgJGZzOiAkZm9udC1zaXplO1xuICB9IEBlbHNlIHtcbiAgICAkZnM6IG1hcC1nZXQoJHR5cG9ncmFwaHksICdiYXNlX2ZvbnRfc2l6ZScpO1xuICB9XG5cbiAgQHJldHVybiAje21hdGguZGl2KHN0cmlwLXVuaXQoJG51bSksIHN0cmlwLXVuaXQoJGZzKSl9I3skdW5pdH07XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIERhdGEgPiBTV0FUQ0hFU1xuXG5AaW1wb3J0ICcuLi8uLi9kZWZzL3N3YXRjaGVzL2luZGV4LmpzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX2JyZWFrcG9pbnRzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX3JhdGlvcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19zY3JlZW5zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX3NwYWNlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIERhdGEgPiBST0xFU1xuXG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19ib3JkZXJzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2JyZWFrcG9pbnRzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2NvbG9ycyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19kaW1lbnNpb25zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3JhdGlvcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19zY3JlZW5zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3NoYWRvd3MnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfc3BhY2VzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3R5cG9ncmFwaHknO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnMgPiBTQ0FMQUJJTElUWVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFNjYWxlclxuQG1peGluIHNjYWxlcihcbiAgJHByb3BlcnR5LFxuICAkbWluLXNpemUsXG4gICRtYXgtc2l6ZSxcbiAgJG1pbi12dzogbWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21pbicpLFxuICAkbWF4LXZ3OiBtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWF4Jylcbikge1xuICAjeyRwcm9wZXJ0eX06ICN7c3RyaXAtdW5pdChtYXRoLmRpdigoJG1pbi12dyAqIDAuOTc5NikgKiAkbWluLXNpemUsIDEwMDApKX12dzsgLy8gMC45Nzk2IGZpeGVzIHdyb25nIGNhbGN1bGF0aW9ucyBpbiBDaHJvbWVcblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAkbWluLXZ3KSB7XG4gICAgI3skcHJvcGVydHl9OiBnZXQtcHJvZ3Jlc3NpdmUtY2FsYygkbWluLXNpemUsICRtYXgtc2l6ZSwgJG1pbi12dywgJG1heC12dyk7XG4gIH1cblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAkbWF4LXZ3KSB7XG4gICAgI3skcHJvcGVydHl9OiBwaXhlbGF0ZSgkbWF4LXNpemUpO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIFBsYWNlaG9sZGVycyA+IFNDQUxBQklMSVRZXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTmVnYXRpdmVcbiVwaC1uZWdhdGl2ZSB7XG4gIGgxLFxuICBoMixcbiAgaDMsXG4gIGg0LFxuICBoNSxcbiAgaDYsXG4gIHAge1xuICAgIGNvbG9yOiBtYXAtZ2V0KCRyb2xlcy1jb2wtdGV4dHMsICduZWdhdGl2ZScpO1xuICB9XG5cbiAgLm1ldGEge1xuICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHN3YXRjaGVzLWNvbG9ycywgJ2hvbmV5LXllbGxvdycsICdsaWdodCcpO1xuICB9XG5cbiAgLnRleHQtbGluayB7XG4gICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnbm9ybWFsJyk7XG4gICAgYm9yZGVyLWJvdHRvbTogcGl4ZWxhdGUoMXB4KSBkb3R0ZWRcbiAgICAgIHJnYmEobWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdub3JtYWwnKSwgMC4zMyk7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2hvdmVyJyk7XG4gICAgfVxuXG4gICAgJjphY3RpdmUge1xuICAgICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnYWN0aXZlJyk7XG4gICAgfVxuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFdhdmVcbiVwaC13YXZlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiA1MCU7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4td2lkdGg6IG1hdGguZGl2KG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtYXgnKSwgMik7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcblxuICA+IHN2ZyB7XG4gICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgSGVhZCB3YXZlXG4lcGgtaGVhZC13YXZlIHtcbiAgJHdhdmUtaGVpZ2h0OiBiYXNlKG1hcC1nZXQoJHJvbGVzLWRpbWVuc2lvbnMtd2F2ZXMsICdoZWFkZXInKSk7XG5cbiAgLndhdmUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICB0b3A6IGNhbGMoMTAwJSAtIDFQeCk7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiBlbSgkd2F2ZS1oZWlnaHQpO1xuXG4gICAgLmlubmVyIHtcbiAgICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKDEwMCUpO1xuXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgICBzdmcge1xuICAgICAgICBAaW5jbHVkZSBkaW1lbnNpb25zLXNxdWFyZSgxMDAlKTtcblxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgbWluLXdpZHRoOiBtYXRoLmRpdihtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWF4JyksIDIpO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQGtleWZyYW1lcyBzbGlkZSB7XG4gICAgZnJvbSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICB9XG5cbiAgICB0byB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAwKTtcbiAgICB9XG4gIH1cblxuICAuc2Nyb2xsLWJ0biB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvdHRvbTogMjBweDtcbiAgICBsZWZ0OiA1MCU7XG4gICAgei1pbmRleDogMTtcbiAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0LWRlZXAoJHN3YXRjaGVzLWNvbG9ycywgJ2Nvcm5mbG93ZXInLCAnYmFzZScpO1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgIGFuaW1hdGlvbjogc2xpZGUgMXMgZWFzZS1pbi1vdXQgaW5maW5pdGUgYWx0ZXJuYXRlO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2hvdmVyJyk7XG4gICAgfVxuXG4gICAgJjphY3RpdmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdhY3RpdmUnKTtcbiAgICB9XG5cbiAgICBzdmcge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgICB9XG5cbiAgICBib2R5Om5vdCguc2Nyb2xsYWJsZSkgJiB7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFJvb3Rcbi5icmVhZGNydW1icyB7XG4gIEBpbmNsdWRlIHBhZGRpbmctaChtYXAtZ2V0KCRyb2xlcy1zcGFjZXMsICdsYXlvdXQnKSk7XG5cbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgd2lkdGg6IDEwMCU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcblxuICAuc2Uge1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIH1cblxuICAmLmJyZWFkY3J1bWJzLWhlYWQge1xuICAgIG1hcmdpbi1ib3R0b206IG1hcC1nZXQoJHN3YXRjaGVzLXNwYWNlcywgJzE1Jyk7XG4gIH1cblxuICAmLmJyZWFkY3J1bWJzLWZvb3Qge1xuICAgIC8vXG4gIH1cblxuICBiIHtcbiAgICBmb250LWZhbWlseTogc2Fucy1zZXJpZjtcbiAgfVxuXG4gIGEge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXG4gICAgJjo6YmVmb3JlLFxuICAgICY6OmFmdGVyIHtcbiAgICAgIEBpbmNsdWRlIHBhZGRpbmctaChtYXAtZ2V0KCRzd2F0Y2hlcy1zcGFjZXMsICc1JykpO1xuXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgfVxuICB9XG5cbiAgLmJhY2t3YXJkIHtcbiAgICBtYXJnaW4tbGVmdDogbWFwLWdldCgkc3dhdGNoZXMtc3BhY2VzLCAnNScpO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG5cbiAgICBhOjpiZWZvcmUge1xuICAgICAgcmlnaHQ6IDEwMCU7XG4gICAgICBjb250ZW50OiAn4oaQJztcbiAgICB9XG4gIH1cblxuICAuZm9yd2FyZCB7XG4gICAgbWFyZ2luLXJpZ2h0OiBtYXAtZ2V0KCRzd2F0Y2hlcy1zcGFjZXMsICc1Jyk7XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG5cbiAgICBhOjphZnRlciB7XG4gICAgICBsZWZ0OiAxMDAlO1xuICAgICAgY29udGVudDogJ+KGkic7XG4gICAgfVxuICB9XG5cbiAgc3BhbiB7XG4gICAgZmxleDogMTtcbiAgfVxuXG4gIHRpbWUge1xuICAgIGZsZXg6IDM7XG4gICAgY3Vyc29yOiB0ZXh0O1xuICB9XG59XG4iLCIvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBDb21wb25lbnRzID4gQ0FSRFxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5AdXNlICdzYXNzOm1hdGgnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IENPTE9SU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBMaWdodFxuQGZ1bmN0aW9uIGxpZ2h0KCRjb2xvciwgJHBlcmNlbnQpIHtcbiAgQHJldHVybiBtaXgoI2ZmZiwgJGNvbG9yLCAkcGVyY2VudCk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IERhcmtcbkBmdW5jdGlvbiBkYXJrKCRjb2xvciwgJHBlcmNlbnQpIHtcbiAgQHJldHVybiBtaXgoIzAwMCwgJGNvbG9yLCAkcGVyY2VudCk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogTUFQU1xuXG4kcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzOiBmYWxzZSAhZGVmYXVsdDtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIEdldCBEZWVwIFdhcm5pbmdcbi8vIERpc3BsYXlzIGEgd2FybmluZyBpZiB0aGUgcmV0cmlldmVkIHZhbHVlIGlzIGBudWxsYFxuQGZ1bmN0aW9uIG1hcC1nZXQtZGVlcC13YXJuaW5nKCR3YXJuLCAkZ2V0LCAka2V5KSB7XG4gIEBpZiBub3QgJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5ncyB7XG4gICAgQGlmICRnZXQgPT0gbnVsbCB7XG4gICAgICBAd2FybiAnTWFwIGhhcyBubyB2YWx1ZSBmb3Iga2V5IHNlYXJjaCBgI3skd2Fybn1gJztcbiAgICB9IEBlbHNlIGlmIHR5cGUtb2YoJGdldCkgIT0gJ21hcCcge1xuICAgICAgQHdhcm4gJ05vbi1tYXAgdmFsdWUgZm91bmQgZm9yIGtleSBzZWFyY2ggYCN7JHdhcm59YCwgY2Fubm90IHNlYXJjaCBmb3Iga2V5IGAjeyRrZXl9YCc7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiBudWxsO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IERlZXBcbi8vIEdpdmVuIGEgbWFwIGFuZCBhIGxpc3Qgb2Yga2V5cywgZmluZCB0aGUgdmFsdWUgYXQgdGhlIGdpdmVuIGtleVxuQGZ1bmN0aW9uIG1hcC1nZXQtZGVlcCgkbWFwLCAka2V5cy4uLikge1xuICBAaWYgbGVuZ3RoKCRrZXlzKSA9PSAxIHtcbiAgICAka2V5czogbnRoKCRrZXlzLCAxKTtcbiAgfVxuXG4gICR3YXJuOiAnI3tudGgoJGtleXMsIDEpfSc7XG4gICRsZW5ndGg6IGxlbmd0aCgka2V5cyk7XG4gICRnZXQ6IG1hcC1nZXQoJG1hcCwgbnRoKCRrZXlzLCAxKSk7XG5cbiAgQGlmICRsZW5ndGggPiAxIHtcbiAgICBAZm9yICRpIGZyb20gMiB0aHJvdWdoICRsZW5ndGgge1xuICAgICAgQGlmICRnZXQgIT0gbnVsbCBhbmQgdHlwZS1vZigkZ2V0KSA9PSAnbWFwJyB7XG4gICAgICAgICR3YXJuOiAkd2FybiArICctPiN7bnRoKCRrZXlzLCAkaSl9JztcbiAgICAgICAgJGdldDogbWFwLWdldCgkZ2V0LCBudGgoJGtleXMsICRpKSk7XG5cbiAgICAgICAgQGlmICRnZXQgPT0gbnVsbCB7XG4gICAgICAgICAgQHJldHVybiBtYXAtZ2V0LWRlZXAtd2FybmluZygkd2FybiwgJGdldCwgbnRoKCRrZXlzLCAkaSkpO1xuICAgICAgICB9XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgQHJldHVybiBtYXAtZ2V0LWRlZXAtd2FybmluZygkd2FybiwgJGdldCwgbnRoKCRrZXlzLCAkaSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGdldDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIEdldCBLZXlzXG5AZnVuY3Rpb24gZ2V0LWtleXMoJGtleXMsICRjb3VudGVyKSB7XG4gICRyZXR1cm46ICgpO1xuXG4gIEBmb3IgJGkgZnJvbSAxIHRvICRjb3VudGVyIHtcbiAgICAkcmV0dXJuOiBhcHBlbmQoJHJldHVybiwgbnRoKCRrZXlzLCAkaSkpO1xuICB9XG5cbiAgQHJldHVybiAkcmV0dXJuO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IFByZXZpb3VzIEtleVxuQGZ1bmN0aW9uIG1hcC1nZXQtcHJldi1rZXkoJG1hcCwgJGtleSkge1xuICAkaW5kZXg6IGluZGV4KCRtYXAsICRrZXkpO1xuICAkcHJldjogJGluZGV4IC0gMTtcbiAgJHJlc3VsdDogaWYoJHByZXYgPiAwLCBudGgoJG1hcCwgJHByZXYpLCBudWxsKTtcblxuICBAcmV0dXJuICRyZXN1bHQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBTZXRcbkBmdW5jdGlvbiBtYXAtc2V0KCRtYXAsICRrZXksICR2YWx1ZSkge1xuICBAcmV0dXJuIG1hcC1tZXJnZShcbiAgICAkbWFwLFxuICAgIChcbiAgICAgICRrZXk6ICR2YWx1ZVxuICAgIClcbiAgKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIFNldCBEZWVwXG5AZnVuY3Rpb24gbWFwLXNldC1kZWVwKCRtYXAsICRrZXlzLCAkdmFsdWUpIHtcbiAgJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5nczogdHJ1ZSAhZ2xvYmFsO1xuICAkbGVuZ3RoOiBsZW5ndGgoJGtleXMpO1xuICAkZ2V0LWtleXM6ICgpO1xuICAkbWFwLWxldmVsOiAoKTtcblxuICBAaWYgJGxlbmd0aCA+IDEge1xuICAgICRnZXQta2V5czogZ2V0LWtleXMoJGtleXMsICRsZW5ndGgpO1xuICAgICRtYXAtbGV2ZWw6IG1hcC1nZXQtZGVlcCgkbWFwLCAkZ2V0LWtleXMpO1xuICB9XG5cbiAgJG1lcmdlOiAoXG4gICAgbnRoKCRrZXlzLCAkbGVuZ3RoKTogJHZhbHVlXG4gICk7XG5cbiAgQGlmICRtYXAtbGV2ZWwge1xuICAgICRtZXJnZTogbWFwLW1lcmdlKCRtYXAtbGV2ZWwsICRtZXJnZSk7XG4gIH1cblxuICBAZm9yICRpIGZyb20gKCRsZW5ndGggKiAtMSArIDEpIHRocm91Z2ggLTEge1xuICAgICRqOiBhYnMoJGkpO1xuICAgICRrZXk6IG50aCgka2V5cywgJGopO1xuXG4gICAgLy8gQGRlYnVnICRnZXQta2V5cztcblxuICAgIEBpZiAkaiA+IDEge1xuICAgICAgJGdldC1rZXlzOiBnZXQta2V5cygka2V5cywgJGopO1xuICAgICAgJG1hcC1sZXZlbDogbWFwLWdldC1kZWVwKCRtYXAsICRnZXQta2V5cyk7XG5cbiAgICAgIEBpZiAkbWFwLWxldmVsIHtcbiAgICAgICAgJG1lcmdlOiBtYXAtbWVyZ2UoXG4gICAgICAgICAgJG1hcC1sZXZlbCxcbiAgICAgICAgICAoXG4gICAgICAgICAgICAka2V5OiAkbWVyZ2VcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgJG1lcmdlOiAoXG4gICAgICAgICAgJGtleTogJG1lcmdlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBAZWxzZSB7XG4gICAgICAkbWVyZ2U6IChcbiAgICAgICAgJGtleTogJG1lcmdlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gICRtYXA6IG1hcC1tZXJnZSgkbWFwLCAkbWVyZ2UpO1xuXG4gICRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3M6IGZhbHNlICFnbG9iYWw7XG5cbiAgQHJldHVybiAkbWFwO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IFVOSVRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFByb2dyZXNzaXZlIGNhbGNcbkBmdW5jdGlvbiBnZXQtcHJvZ3Jlc3NpdmUtY2FsYyhcbiAgJG1pbi1vYmotc2l6ZSxcbiAgJG1heC1vYmotc2l6ZSxcbiAgJG1pbi12cCxcbiAgJG1heC12cCxcbiAgJHZwLXVuaXQ6IHZ3XG4pIHtcbiAgQHJldHVybiBjYWxjKFxuICAgICN7JG1pbi1vYmotc2l6ZX0gKyAje3N0cmlwLXVuaXQoJG1heC1vYmotc2l6ZSAtICRtaW4tb2JqLXNpemUpfSAqXG4gICAgICAoKDEwMCN7JHZwLXVuaXR9IC0gI3skbWluLXZwfSkgLyAje3N0cmlwLXVuaXQoJG1heC12cCAtICRtaW4tdnApfSlcbiAgKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBVTklUU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTdHJpcCB1bml0XG5AZnVuY3Rpb24gc3RyaXAtdW5pdCgkbnVtYmVyKSB7XG4gIEBpZiB0eXBlLW9mKCRudW1iZXIpID09ICdudW1iZXInIGFuZCBub3QgdW5pdGxlc3MoJG51bWJlcikge1xuICAgIEByZXR1cm4gJG51bWJlciAvICgkbnVtYmVyICogMCArIDEpO1xuICB9XG5cbiAgQHJldHVybiAkbnVtYmVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgZW0vcmVtIHVuaXRcbkBmdW5jdGlvbiBlbSgkbnVtLCAkZm9udC1zaXplOiBmYWxzZSkge1xuICBAcmV0dXJuIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgZW0pO1xufVxuXG5AZnVuY3Rpb24gcmVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCByZW0pO1xufVxuXG5AZnVuY3Rpb24gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCAkdW5pdCkge1xuICAkZnM6IDEwcHg7XG5cbiAgQGlmICRmb250LXNpemUge1xuICAgICRmczogJGZvbnQtc2l6ZTtcbiAgfVxuICBAZWxzZSBpZiAkYmFzZS1odG1sLWZvbnQtc2l6ZSB7IC8vIG1ha2Ugc3VyZSB0byBkZWZpbmUgdGhpcyB2YXJpYWJsZSBvbiB5b3VyIG93blxuICAgICRmczogJGJhc2UtaHRtbC1mb250LXNpemU7XG4gIH1cblxuICBAcmV0dXJuICN7c3RyaXAtdW5pdCgkbnVtKSAvIHN0cmlwLXVuaXQoJGZzKX0jeyR1bml0fTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IHNjcmVlbiBwZXJjZW50XG5AZnVuY3Rpb24gZ2V0LXNjcmVlbi1wZXJjZW50KCR3aWR0aCwgJHNjcmVlbikge1xuICBAcmV0dXJuIHVucXVvdGUoJyN7JHdpZHRoICogMTAwIC8gJHNjcmVlbn0lJyk7XG59XG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogWi1JTkRFWEVTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdlbmVyYXRvclxuQGZ1bmN0aW9uIHotaW5kZXgoJG1hcCwgJGtleXMpIHtcbiAgJGZvdW5kLWluZGV4OiBudWxsO1xuXG4gIEBlYWNoICRrZXkgaW4gJGtleXMge1xuICAgIEBpZiAodHlwZS1vZigkbWFwKSA9PSAnbWFwJykge1xuICAgICAgJGZvdW5kLWluZGV4OiBpbmRleChtYXAta2V5cygkbWFwKSwgJGtleSk7XG4gICAgICAkbWFwOiBtYXAtZ2V0KCRtYXAsICRrZXkpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJGZvdW5kLWluZGV4OiBpbmRleCgkbWFwLCAka2V5KTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRmb3VuZC1pbmRleDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU2VydmVyXG5AZnVuY3Rpb24geigkbWFwLCAka2V5cy4uLikge1xuICBAcmV0dXJuIHotaW5kZXgoJG1hcCwgJGtleXMpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IEZPUk1TXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IElucHV0IHBsYWNlaG9sZGVyXG5AbWl4aW4gaW5wdXQtcGxhY2Vob2xkZXIoJGNvbCwgJHN0eWxlOiBpdGFsaWMpIHtcbiAgJjotbW96LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbiAgJjo6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2w7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICB9XG4gICY6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbiAgJjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2w7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICB9XG59XG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogUE9TSVRJT05TXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEFic29sdXRlIGNlbnRlcmVkXG5AbWl4aW4gYWJzb2x1dGUtY2VudGVyZWQoJHR5cGU6IGFic29sdXRlLCAkcG9zOiA1MCUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICB0b3A6ICRwb3M7XG4gIGxlZnQ6ICRwb3M7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBBYnNvbHV0ZSBjZW50ZXJlZCBYXG5AbWl4aW4gYWJzb2x1dGUtY2VudGVyZWQteCgkdHlwZTogYWJzb2x1dGUsICRwb3M6IDUwJSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIGxlZnQ6ICRwb3M7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQWJzb2x1dGUgY2VudGVyZWQgWVxuQG1peGluIGFic29sdXRlLWNlbnRlcmVkLXkoJHR5cGU6IGFic29sdXRlLCAkcG9zOiA1MCUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICB0b3A6ICRwb3M7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBTSE9SVEhBTkRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFBvc2l0aW9uc1xuQG1peGluIHBvc2l0aW9uLXN0cmV0Y2hlZCgkdHlwZTogYWJzb2x1dGUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IERpbWVuc2lvbnNcbkBtaXhpbiBkaW1lbnNpb25zLXNxdWFyZSgkdmFsdWUpIHtcbiAgd2lkdGg6ICR2YWx1ZTtcbiAgaGVpZ2h0OiAkdmFsdWU7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFBhZGRpbmdcbkBtaXhpbiBwYWRkaW5nLXYoJHZhbHVlKSB7XG4gIHBhZGRpbmctdG9wOiAkdmFsdWU7XG4gIHBhZGRpbmctYm90dG9tOiAkdmFsdWU7XG59XG5cbkBtaXhpbiBwYWRkaW5nLWgoJHZhbHVlKSB7XG4gIHBhZGRpbmctcmlnaHQ6ICR2YWx1ZTtcbiAgcGFkZGluZy1sZWZ0OiAkdmFsdWU7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcmdpblxuQG1peGluIG1hcmdpbi12KCR2YWx1ZSkge1xuICBtYXJnaW4tdG9wOiAkdmFsdWU7XG4gIG1hcmdpbi1ib3R0b206ICR2YWx1ZTtcbn1cblxuQG1peGluIG1hcmdpbi1oKCR2YWx1ZSkge1xuICBtYXJnaW4tcmlnaHQ6ICR2YWx1ZTtcbiAgbWFyZ2luLWxlZnQ6ICR2YWx1ZTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQm9yZGVyXG5AbWl4aW4gYm9yZGVyLXYoJHZhbHVlKSB7XG4gIGJvcmRlci10b3A6ICR2YWx1ZTtcbiAgYm9yZGVyLWJvdHRvbTogJHZhbHVlO1xufVxuXG5AbWl4aW4gYm9yZGVyLWgoJHZhbHVlKSB7XG4gIGJvcmRlci1yaWdodDogJHZhbHVlO1xuICBib3JkZXItbGVmdDogJHZhbHVlO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IFRZUE9HUkFQSFlcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRm9udCBzbW9vdGhpbmdcbkBtaXhpbiBmb250LXNtb290aGluZygkdmFsdWU6IGFudGlhbGlhc2VkKSB7XG4gIEBpZiAkdmFsdWUgPT0gYW50aWFsaWFzZWQge1xuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG4gIH0gQGVsc2Uge1xuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IHN1YnBpeGVsLWFudGlhbGlhc2VkO1xuICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBhdXRvO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFRleHQgdXBwZXJjYXNlXG5AbWl4aW4gdGV4dC11cHBlcmNhc2UoKSB7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIC1tb3otZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnY2FzZSc7XG4gIC13ZWJraXQtZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnY2FzZSc7XG4gIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2Nhc2UnIG9uO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTZWxlY3Rpb25cbkBtaXhpbiBzZWxlY3Rpb24oJGNvbCkge1xuICAkYmdyOiBpZigkY29sICE9IHRyYW5zcGFyZW50LCByZ2JhKCRjb2wsIDAuNSksIHJnYmEoMCwgMCwgMCwgMCkpO1xuXG4gICY6Oi1tb3otc2VsZWN0aW9uIHtcbiAgICBiYWNrZ3JvdW5kOiAkYmdyO1xuICB9XG5cbiAgJjo6c2VsZWN0aW9uIHtcbiAgICBiYWNrZ3JvdW5kOiAkYmdyO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEJBU0VcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgSW1wb3J0c1xuQGltcG9ydCAnLi4vLi4vZGVmcy9icmFuZC5qcyc7XG5AaW1wb3J0ICcuLi8uLi9kZWZzL3dlYnNpdGUuanMnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBGb250IHNpemVcbkBmdW5jdGlvbiByb2xlKCRtYXAsICR2YWx1ZSkge1xuICAkci1tYXA6IG1hcC1nZXQoJHZhbHVlLCAnbWFwJyk7XG4gICRyLXZhbHVlOiBtYXAtZ2V0KCR2YWx1ZSwgJ3ZhbHVlJyk7XG4gIEByZXR1cm4gbWFwLWdldCgkci1tYXAsICRyLXZhbHVlKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zID4gQ0FMQ1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCB2YWx1ZSBiYXNlZCBvbiB0aGUgYmFzZSBmb250IHNpemVcbkBmdW5jdGlvbiBiYXNlKCR2YWx1ZSkge1xuICBAcmV0dXJuIG1hdGguZGl2KCR2YWx1ZSwgbWFwLWdldCgkcm9sZXMtcmF0aW9zLCAnbGF5b3V0LWdyb3d0aCcpKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUHJvZ3Jlc3NpdmUgY2FsY1xuQGZ1bmN0aW9uIGdldC1wcm9ncmVzc2l2ZS1jYWxjKFxuICAkbWluLW9iai1zaXplLFxuICAkbWF4LW9iai1zaXplLFxuICAkbWluLXZwLFxuICAkbWF4LXZwLFxuICAkdnAtdW5pdDogdndcbikge1xuICBAcmV0dXJuIGNhbGMoXG4gICAgI3twaXhlbGF0ZSgkbWluLW9iai1zaXplKX0gKyAje3N0cmlwLXVuaXQoJG1heC1vYmotc2l6ZSAtICRtaW4tb2JqLXNpemUpfSAqXG4gICAgICAoXG4gICAgICAgICgxMDAjeyR2cC11bml0fSAtICN7cGl4ZWxhdGUoJG1pbi12cCl9KSAvICN7c3RyaXAtdW5pdChcbiAgICAgICAgICAgICRtYXgtdnAgLSAkbWluLXZwXG4gICAgICAgICAgKX1cbiAgICAgIClcbiAgKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zID4gVU5JVFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTdHJpcCB1bml0XG5AZnVuY3Rpb24gc3RyaXAtdW5pdCgkbnVtYmVyKSB7XG4gIEBpZiB0eXBlLW9mKCRudW1iZXIpID09ICdudW1iZXInIGFuZCBub3QgdW5pdGxlc3MoJG51bWJlcikge1xuICAgIEByZXR1cm4gbWF0aC5kaXYoJG51bWJlciwgKCRudW1iZXIgKiAwICsgMSkpO1xuICB9XG5cbiAgQHJldHVybiAkbnVtYmVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgUHggdW5pdFxuQGZ1bmN0aW9uIHBpeGVsYXRlKCR2YWx1ZSkge1xuICBAcmV0dXJuICN7c3RyaXAtdW5pdCgkdmFsdWUpfVB4O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgZW0vcmVtIHVuaXRcbkBmdW5jdGlvbiBlbSgkbnVtLCAkZm9udC1zaXplOiBmYWxzZSkge1xuICBAcmV0dXJuIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgZW0pO1xufVxuXG5AZnVuY3Rpb24gcmVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCByZW0pO1xufVxuXG5AZnVuY3Rpb24gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCAkdW5pdCkge1xuICAkZnM6IDEwcHg7XG5cbiAgQGlmICRmb250LXNpemUge1xuICAgICRmczogJGZvbnQtc2l6ZTtcbiAgfSBAZWxzZSB7XG4gICAgJGZzOiBtYXAtZ2V0KCR0eXBvZ3JhcGh5LCAnYmFzZV9mb250X3NpemUnKTtcbiAgfVxuXG4gIEByZXR1cm4gI3ttYXRoLmRpdihzdHJpcC11bml0KCRudW0pLCBzdHJpcC11bml0KCRmcykpfSN7JHVuaXR9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBEYXRhID4gU1dBVENIRVNcblxuQGltcG9ydCAnLi4vLi4vZGVmcy9zd2F0Y2hlcy9pbmRleC5qcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19icmVha3BvaW50cyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19yYXRpb3MnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvc3dhdGNoZXMvc3dhdGNoZXNfc2NyZWVucyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19zcGFjZXMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBEYXRhID4gUk9MRVNcblxuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfYm9yZGVycyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19icmVha3BvaW50cyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19jb2xvcnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfZGltZW5zaW9ucyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19yYXRpb3MnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfc2NyZWVucyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19zaGFkb3dzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3NwYWNlcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc190eXBvZ3JhcGh5JztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zID4gU0NBTEFCSUxJVFlcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTY2FsZXJcbkBtaXhpbiBzY2FsZXIoXG4gICRwcm9wZXJ0eSxcbiAgJG1pbi1zaXplLFxuICAkbWF4LXNpemUsXG4gICRtaW4tdnc6IG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtaW4nKSxcbiAgJG1heC12dzogbWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21heCcpXG4pIHtcbiAgI3skcHJvcGVydHl9OiAje3N0cmlwLXVuaXQobWF0aC5kaXYoKCRtaW4tdncgKiAwLjk3OTYpICogJG1pbi1zaXplLCAxMDAwKSl9dnc7IC8vIDAuOTc5NiBmaXhlcyB3cm9uZyBjYWxjdWxhdGlvbnMgaW4gQ2hyb21lXG5cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogJG1pbi12dykge1xuICAgICN7JHByb3BlcnR5fTogZ2V0LXByb2dyZXNzaXZlLWNhbGMoJG1pbi1zaXplLCAkbWF4LXNpemUsICRtaW4tdncsICRtYXgtdncpO1xuICB9XG5cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogJG1heC12dykge1xuICAgICN7JHByb3BlcnR5fTogcGl4ZWxhdGUoJG1heC1zaXplKTtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBQbGFjZWhvbGRlcnMgPiBTQ0FMQUJJTElUWVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE5lZ2F0aXZlXG4lcGgtbmVnYXRpdmUge1xuICBoMSxcbiAgaDIsXG4gIGgzLFxuICBoNCxcbiAgaDUsXG4gIGg2LFxuICBwIHtcbiAgICBjb2xvcjogbWFwLWdldCgkcm9sZXMtY29sLXRleHRzLCAnbmVnYXRpdmUnKTtcbiAgfVxuXG4gIC5tZXRhIHtcbiAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRzd2F0Y2hlcy1jb2xvcnMsICdob25leS15ZWxsb3cnLCAnbGlnaHQnKTtcbiAgfVxuXG4gIC50ZXh0LWxpbmsge1xuICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ25vcm1hbCcpO1xuICAgIGJvcmRlci1ib3R0b206IHBpeGVsYXRlKDFweCkgZG90dGVkXG4gICAgICByZ2JhKG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnbm9ybWFsJyksIDAuMzMpO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdob3ZlcicpO1xuICAgIH1cblxuICAgICY6YWN0aXZlIHtcbiAgICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2FjdGl2ZScpO1xuICAgIH1cbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBXYXZlXG4lcGgtd2F2ZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogNTAlO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLXdpZHRoOiBtYXRoLmRpdihtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWF4JyksIDIpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG5cbiAgPiBzdmcge1xuICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKDEwMCUpO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEhlYWQgd2F2ZVxuJXBoLWhlYWQtd2F2ZSB7XG4gICR3YXZlLWhlaWdodDogYmFzZShtYXAtZ2V0KCRyb2xlcy1kaW1lbnNpb25zLXdhdmVzLCAnaGVhZGVyJykpO1xuXG4gIC53YXZlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgdG9wOiBjYWxjKDEwMCUgLSAxUHgpO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogZW0oJHdhdmUtaGVpZ2h0KTtcblxuICAgIC5pbm5lciB7XG4gICAgICBAaW5jbHVkZSBkaW1lbnNpb25zLXNxdWFyZSgxMDAlKTtcblxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgICAgc3ZnIHtcbiAgICAgICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG5cbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIG1pbi13aWR0aDogbWF0aC5kaXYobWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21heCcpLCAyKTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBrZXlmcmFtZXMgc2xpZGUge1xuICAgIGZyb20ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgfVxuXG4gICAgdG8ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgMCk7XG4gICAgfVxuICB9XG5cbiAgLnNjcm9sbC1idG4ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3R0b206IDIwcHg7XG4gICAgbGVmdDogNTAlO1xuICAgIHotaW5kZXg6IDE7XG4gICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRzd2F0Y2hlcy1jb2xvcnMsICdjb3JuZmxvd2VyJywgJ2Jhc2UnKTtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICBhbmltYXRpb246IHNsaWRlIDFzIGVhc2UtaW4tb3V0IGluZmluaXRlIGFsdGVybmF0ZTtcblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdob3ZlcicpO1xuICAgIH1cblxuICAgICY6YWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnYWN0aXZlJyk7XG4gICAgfVxuXG4gICAgc3ZnIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gICAgfVxuXG4gICAgYm9keTpub3QoLnNjcm9sbGFibGUpICYge1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBWYXJpYWJsZXNcbiRiZ3ItY29sb3I6IG1hcC1nZXQoJHJvbGVzLWNvbC1iYWNrZ3JvdW5kcywgJ2NhcmQnKTtcbiRyYWRpdXM6IG1hcC1nZXQoJHJvbGVzLWJvcmRlcnMtcmFkaXVzZXMsICdibG9jaycpO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBSb290XG4uY2FyZCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuXG4gIGEge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAxO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgcGFkZGluZzogMDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChcbiAgICAgIHRvIHJpZ2h0LFxuICAgICAgI3skYmdyLWNvbG9yfSAwJSxcbiAgICAgICN7bGlnaHRlbigkYmdyLWNvbG9yLCA1JSl9IDMzJSxcbiAgICAgICN7bGlnaHRlbigkYmdyLWNvbG9yLCA1JSl9IDY2JSxcbiAgICAgICN7JGJnci1jb2xvcn0gMTAwJVxuICAgICk7XG4gICAgYm9yZGVyLXJhZGl1czogJHJhZGl1cyAwO1xuXG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIEBpbmNsdWRlIHBvc2l0aW9uLXN0cmV0Y2hlZCgpO1xuXG4gICAgICB6LWluZGV4OiAwO1xuICAgICAgY29udGVudDogJyc7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoXG4gICAgICAgIHRvIGJvdHRvbSxcbiAgICAgICAgI3tsaWdodGVuKCRiZ3ItY29sb3IsIDUlKX0gMCUsXG4gICAgICAgICN7bGlnaHRlbigkYmdyLWNvbG9yLCA1JSl9IDc1JVxuICAgICAgKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRyYWRpdXMgMDtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZS1pbi1vdXQ7XG4gICAgfVxuXG4gICAgQG1lZGlhIChob3ZlcjogaG92ZXIpIHtcbiAgICAgICY6aG92ZXI6OmJlZm9yZSB7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJixcbiAgICAqIHtcbiAgICAgIGNvbG9yOiBtYXAtZ2V0KCRyb2xlcy1jb2wtdGV4dHMsICdiYXNlJyk7XG4gICAgfVxuICB9XG5cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogbWFwLWdldCgkcm9sZXMtYnJlYWtwb2ludHMsICd0d28tY29sdW1ucycpIC0gMSkge1xuICAgIG1heC13aWR0aDogbWFwLWdldCgkcm9sZXMtZGltZW5zaW9ucy1jb250ZW50LCAnY2FyZCcpO1xuICAgIG1hcmdpbi1pbmxpbmU6IGF1dG87XG4gIH1cblxuICAudGh1bWIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBoZWlnaHQ6IDA7XG4gICAgcGFkZGluZy10b3A6IG1hdGguZGl2KDksIDE2KSAqIDEwMCU7XG4gICAgbWFyZ2luOiBwaXhlbGF0ZSgxcHgpO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJHJhZGl1cztcblxuICAgIHNwYW4ge1xuICAgICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG5cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG5cbiAgICBpbWcge1xuICAgICAgQGluY2x1ZGUgYWJzb2x1dGUtY2VudGVyZWQteCgpO1xuICAgICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG5cbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgb2JqZWN0LWZpdDogY292ZXI7XG4gICAgfVxuICB9XG5cbiAgLmJvZHkge1xuICAgIHotaW5kZXg6IDI7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4OiAxO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgbWF4LXdpZHRoOiBtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWluJyk7XG4gICAgcGFkZGluZzogbWFwLWdldCgkcm9sZXMtc3BhY2VzLCAncGFuZWwnKTtcbiAgICBtYXJnaW4taW5saW5lOiBhdXRvO1xuICAgIHRleHQtc2hhZG93OiBtYXAtZ2V0KCRyb2xlcy10eXBvLXNoYWRvd3MsICdjYXJkJyk7XG4gIH1cblxuICAuaGVhZGluZyB7XG4gICAgJG1pbi1mb250LXNpemU6IG1hcC1nZXQoJHJvbGVzLXR5cG8tZm9udC1zaXplcywgJ2NhcmQtdGl0bGUnKTtcbiAgICAkbWF4LWZvbnQtc2l6ZTogJG1pbi1mb250LXNpemUgKiBtYXAtZ2V0KCRyb2xlcy1yYXRpb3MsICd0ZXh0LWdyb3d0aCcpO1xuXG4gICAgQGluY2x1ZGUgc2NhbGVyKGZvbnQtc2l6ZSwgJG1pbi1mb250LXNpemUsICRtYXgtZm9udC1zaXplKTtcblxuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi1ib3R0b206IG1hcC1nZXQoJHJvbGVzLXNwYWNlcywgJ2VwaXNvZGUtaXRlbXMnKTtcbiAgICBmb250LWZhbWlseTogbWFwLWdldCgkcm9sZXMtdHlwby1mb250LWZhbWlsaWVzLCAnY2FyZC10aXRsZScpO1xuICAgIGZvbnQtd2VpZ2h0OiBtYXAtZ2V0KCRyb2xlcy10eXBvLWZvbnQtd2VpZ2h0cywgJ2NhcmQtdGl0bGUnKTtcbiAgICBsaW5lLWhlaWdodDogbWFwLWdldCgkcm9sZXMtdHlwby1saW5lLWhlaWdodHMsICdjYXJkLXRpdGxlJyk7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGN1cnNvcjogaW5oZXJpdDtcbiAgfVxuXG4gIC50ZXh0IHtcbiAgICAkbWluLWZvbnQtc2l6ZTogbWFwLWdldCgkcm9sZXMtdHlwby1mb250LXNpemVzLCAnY2FyZC10ZXh0Jyk7XG4gICAgJG1heC1mb250LXNpemU6ICRtaW4tZm9udC1zaXplICogbWFwLWdldCgkcm9sZXMtcmF0aW9zLCAndGV4dC1ncm93dGgnKTtcblxuICAgIEBpbmNsdWRlIHNjYWxlcihmb250LXNpemUsICRtaW4tZm9udC1zaXplLCAkbWF4LWZvbnQtc2l6ZSk7XG5cbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZm9udC13ZWlnaHQ6IG1hcC1nZXQoJHJvbGVzLXR5cG8tZm9udC13ZWlnaHRzLCAnY2FyZC10ZXh0Jyk7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICA+IHNwYW4ge1xuICAgICAgJGdyYWRpZW50LWNvbG9yOiBsaWdodGVuKFxuICAgICAgICBtYXAtZ2V0LWRlZXAoJHN3YXRjaGVzLWNvbG9ycywgJ2hvbmV5LXllbGxvdycsICdsaWdodCcpLFxuICAgICAgICAyNSVcbiAgICAgICk7XG5cbiAgICAgIEBpbmNsdWRlIHBhZGRpbmctdihtYXAtZ2V0KCRzd2F0Y2hlcy1zcGFjZXMsICc1JykpO1xuXG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIG1hcmdpbjogMCBtYXAtZ2V0KCRyb2xlcy1zcGFjZXMsICdwYW5lbCcpICogLTFcbiAgICAgICAgbWFwLWdldCgkc3dhdGNoZXMtc3BhY2VzLCAnNScpO1xuICAgICAgZm9udC1mYW1pbHk6IHVucXVvdGUobWFwLWdldCgkcm9sZXMtdHlwby1mb250LWZhbWlsaWVzLCAnYm9keScpKTtcbiAgICAgIGZvbnQtc2l6ZTogMS4xZW07XG4gICAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRzd2F0Y2hlcy1jb2xvcnMsICdibHVlLWdyZWVuJywgJ2RhcmsnKTtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIHRleHQtc2hhZG93OiBub25lO1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KFxuICAgICAgICB0byByaWdodCxcbiAgICAgICAgJGJnci1jb2xvciAwJSxcbiAgICAgICAgJGdyYWRpZW50LWNvbG9yIDMzJSxcbiAgICAgICAgJGdyYWRpZW50LWNvbG9yIDY2JSxcbiAgICAgICAgJGJnci1jb2xvciAxMDAlXG4gICAgICApO1xuICAgIH1cblxuICAgIHAge1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICB9XG4gIH1cblxuICAubWV0YSB7XG4gICAgJG1pbi1mb250LXNpemU6IG1hcC1nZXQoJHJvbGVzLXR5cG8tZm9udC1zaXplcywgJ21ldGEnKTtcbiAgICAkbWF4LWZvbnQtc2l6ZTogJG1pbi1mb250LXNpemUgKiBtYXAtZ2V0KCRyb2xlcy1yYXRpb3MsICd0ZXh0LWdyb3d0aCcpO1xuXG4gICAgQGluY2x1ZGUgc2NhbGVyKGZvbnQtc2l6ZSwgJG1pbi1mb250LXNpemUsICRtYXgtZm9udC1zaXplKTtcblxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IHBpeGVsYXRlKDFweCk7XG4gICAgbGVmdDogcGl4ZWxhdGUoMXB4KTtcbiAgICB6LWluZGV4OiAyO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIHBhZGRpbmc6IDJweCA4cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogbWFwLWdldCgkc3dhdGNoZXMtc3BhY2VzLCAnMTUnKTtcbiAgICBjb2xvcjogbWFwLWdldCgkcm9sZXMtY29sLWJhY2tncm91bmRzLCAnY2FyZCcpO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQtZGVlcCgkc3dhdGNoZXMtY29sb3JzLCAncHJ1c3NpYW4tYmx1ZScsICdiYXNlJyk7XG4gICAgYm9yZGVyLXJhZGl1czogJHJhZGl1cyAwO1xuXG4gICAgYiB7XG4gICAgICBmb250LWZhbWlseTogc2Fucy1zZXJpZjtcbiAgICB9XG5cbiAgICBzcGFuIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgZm9udC1zaXplOiAwLjc1ZW07XG4gICAgfVxuICB9XG59XG4iLCIvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBDb21wb25lbnRzID4gRVBJU09ERVMgTElTVFxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5AdXNlICdzYXNzOm1hdGgnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IENPTE9SU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBMaWdodFxuQGZ1bmN0aW9uIGxpZ2h0KCRjb2xvciwgJHBlcmNlbnQpIHtcbiAgQHJldHVybiBtaXgoI2ZmZiwgJGNvbG9yLCAkcGVyY2VudCk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IERhcmtcbkBmdW5jdGlvbiBkYXJrKCRjb2xvciwgJHBlcmNlbnQpIHtcbiAgQHJldHVybiBtaXgoIzAwMCwgJGNvbG9yLCAkcGVyY2VudCk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogTUFQU1xuXG4kcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzOiBmYWxzZSAhZGVmYXVsdDtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIEdldCBEZWVwIFdhcm5pbmdcbi8vIERpc3BsYXlzIGEgd2FybmluZyBpZiB0aGUgcmV0cmlldmVkIHZhbHVlIGlzIGBudWxsYFxuQGZ1bmN0aW9uIG1hcC1nZXQtZGVlcC13YXJuaW5nKCR3YXJuLCAkZ2V0LCAka2V5KSB7XG4gIEBpZiBub3QgJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5ncyB7XG4gICAgQGlmICRnZXQgPT0gbnVsbCB7XG4gICAgICBAd2FybiAnTWFwIGhhcyBubyB2YWx1ZSBmb3Iga2V5IHNlYXJjaCBgI3skd2Fybn1gJztcbiAgICB9IEBlbHNlIGlmIHR5cGUtb2YoJGdldCkgIT0gJ21hcCcge1xuICAgICAgQHdhcm4gJ05vbi1tYXAgdmFsdWUgZm91bmQgZm9yIGtleSBzZWFyY2ggYCN7JHdhcm59YCwgY2Fubm90IHNlYXJjaCBmb3Iga2V5IGAjeyRrZXl9YCc7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiBudWxsO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IERlZXBcbi8vIEdpdmVuIGEgbWFwIGFuZCBhIGxpc3Qgb2Yga2V5cywgZmluZCB0aGUgdmFsdWUgYXQgdGhlIGdpdmVuIGtleVxuQGZ1bmN0aW9uIG1hcC1nZXQtZGVlcCgkbWFwLCAka2V5cy4uLikge1xuICBAaWYgbGVuZ3RoKCRrZXlzKSA9PSAxIHtcbiAgICAka2V5czogbnRoKCRrZXlzLCAxKTtcbiAgfVxuXG4gICR3YXJuOiAnI3tudGgoJGtleXMsIDEpfSc7XG4gICRsZW5ndGg6IGxlbmd0aCgka2V5cyk7XG4gICRnZXQ6IG1hcC1nZXQoJG1hcCwgbnRoKCRrZXlzLCAxKSk7XG5cbiAgQGlmICRsZW5ndGggPiAxIHtcbiAgICBAZm9yICRpIGZyb20gMiB0aHJvdWdoICRsZW5ndGgge1xuICAgICAgQGlmICRnZXQgIT0gbnVsbCBhbmQgdHlwZS1vZigkZ2V0KSA9PSAnbWFwJyB7XG4gICAgICAgICR3YXJuOiAkd2FybiArICctPiN7bnRoKCRrZXlzLCAkaSl9JztcbiAgICAgICAgJGdldDogbWFwLWdldCgkZ2V0LCBudGgoJGtleXMsICRpKSk7XG5cbiAgICAgICAgQGlmICRnZXQgPT0gbnVsbCB7XG4gICAgICAgICAgQHJldHVybiBtYXAtZ2V0LWRlZXAtd2FybmluZygkd2FybiwgJGdldCwgbnRoKCRrZXlzLCAkaSkpO1xuICAgICAgICB9XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgQHJldHVybiBtYXAtZ2V0LWRlZXAtd2FybmluZygkd2FybiwgJGdldCwgbnRoKCRrZXlzLCAkaSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGdldDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIEdldCBLZXlzXG5AZnVuY3Rpb24gZ2V0LWtleXMoJGtleXMsICRjb3VudGVyKSB7XG4gICRyZXR1cm46ICgpO1xuXG4gIEBmb3IgJGkgZnJvbSAxIHRvICRjb3VudGVyIHtcbiAgICAkcmV0dXJuOiBhcHBlbmQoJHJldHVybiwgbnRoKCRrZXlzLCAkaSkpO1xuICB9XG5cbiAgQHJldHVybiAkcmV0dXJuO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IFByZXZpb3VzIEtleVxuQGZ1bmN0aW9uIG1hcC1nZXQtcHJldi1rZXkoJG1hcCwgJGtleSkge1xuICAkaW5kZXg6IGluZGV4KCRtYXAsICRrZXkpO1xuICAkcHJldjogJGluZGV4IC0gMTtcbiAgJHJlc3VsdDogaWYoJHByZXYgPiAwLCBudGgoJG1hcCwgJHByZXYpLCBudWxsKTtcblxuICBAcmV0dXJuICRyZXN1bHQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBTZXRcbkBmdW5jdGlvbiBtYXAtc2V0KCRtYXAsICRrZXksICR2YWx1ZSkge1xuICBAcmV0dXJuIG1hcC1tZXJnZShcbiAgICAkbWFwLFxuICAgIChcbiAgICAgICRrZXk6ICR2YWx1ZVxuICAgIClcbiAgKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIFNldCBEZWVwXG5AZnVuY3Rpb24gbWFwLXNldC1kZWVwKCRtYXAsICRrZXlzLCAkdmFsdWUpIHtcbiAgJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5nczogdHJ1ZSAhZ2xvYmFsO1xuICAkbGVuZ3RoOiBsZW5ndGgoJGtleXMpO1xuICAkZ2V0LWtleXM6ICgpO1xuICAkbWFwLWxldmVsOiAoKTtcblxuICBAaWYgJGxlbmd0aCA+IDEge1xuICAgICRnZXQta2V5czogZ2V0LWtleXMoJGtleXMsICRsZW5ndGgpO1xuICAgICRtYXAtbGV2ZWw6IG1hcC1nZXQtZGVlcCgkbWFwLCAkZ2V0LWtleXMpO1xuICB9XG5cbiAgJG1lcmdlOiAoXG4gICAgbnRoKCRrZXlzLCAkbGVuZ3RoKTogJHZhbHVlXG4gICk7XG5cbiAgQGlmICRtYXAtbGV2ZWwge1xuICAgICRtZXJnZTogbWFwLW1lcmdlKCRtYXAtbGV2ZWwsICRtZXJnZSk7XG4gIH1cblxuICBAZm9yICRpIGZyb20gKCRsZW5ndGggKiAtMSArIDEpIHRocm91Z2ggLTEge1xuICAgICRqOiBhYnMoJGkpO1xuICAgICRrZXk6IG50aCgka2V5cywgJGopO1xuXG4gICAgLy8gQGRlYnVnICRnZXQta2V5cztcblxuICAgIEBpZiAkaiA+IDEge1xuICAgICAgJGdldC1rZXlzOiBnZXQta2V5cygka2V5cywgJGopO1xuICAgICAgJG1hcC1sZXZlbDogbWFwLWdldC1kZWVwKCRtYXAsICRnZXQta2V5cyk7XG5cbiAgICAgIEBpZiAkbWFwLWxldmVsIHtcbiAgICAgICAgJG1lcmdlOiBtYXAtbWVyZ2UoXG4gICAgICAgICAgJG1hcC1sZXZlbCxcbiAgICAgICAgICAoXG4gICAgICAgICAgICAka2V5OiAkbWVyZ2VcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgJG1lcmdlOiAoXG4gICAgICAgICAgJGtleTogJG1lcmdlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBAZWxzZSB7XG4gICAgICAkbWVyZ2U6IChcbiAgICAgICAgJGtleTogJG1lcmdlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gICRtYXA6IG1hcC1tZXJnZSgkbWFwLCAkbWVyZ2UpO1xuXG4gICRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3M6IGZhbHNlICFnbG9iYWw7XG5cbiAgQHJldHVybiAkbWFwO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IFVOSVRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFByb2dyZXNzaXZlIGNhbGNcbkBmdW5jdGlvbiBnZXQtcHJvZ3Jlc3NpdmUtY2FsYyhcbiAgJG1pbi1vYmotc2l6ZSxcbiAgJG1heC1vYmotc2l6ZSxcbiAgJG1pbi12cCxcbiAgJG1heC12cCxcbiAgJHZwLXVuaXQ6IHZ3XG4pIHtcbiAgQHJldHVybiBjYWxjKFxuICAgICN7JG1pbi1vYmotc2l6ZX0gKyAje3N0cmlwLXVuaXQoJG1heC1vYmotc2l6ZSAtICRtaW4tb2JqLXNpemUpfSAqXG4gICAgICAoKDEwMCN7JHZwLXVuaXR9IC0gI3skbWluLXZwfSkgLyAje3N0cmlwLXVuaXQoJG1heC12cCAtICRtaW4tdnApfSlcbiAgKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBVTklUU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTdHJpcCB1bml0XG5AZnVuY3Rpb24gc3RyaXAtdW5pdCgkbnVtYmVyKSB7XG4gIEBpZiB0eXBlLW9mKCRudW1iZXIpID09ICdudW1iZXInIGFuZCBub3QgdW5pdGxlc3MoJG51bWJlcikge1xuICAgIEByZXR1cm4gJG51bWJlciAvICgkbnVtYmVyICogMCArIDEpO1xuICB9XG5cbiAgQHJldHVybiAkbnVtYmVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgZW0vcmVtIHVuaXRcbkBmdW5jdGlvbiBlbSgkbnVtLCAkZm9udC1zaXplOiBmYWxzZSkge1xuICBAcmV0dXJuIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgZW0pO1xufVxuXG5AZnVuY3Rpb24gcmVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCByZW0pO1xufVxuXG5AZnVuY3Rpb24gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCAkdW5pdCkge1xuICAkZnM6IDEwcHg7XG5cbiAgQGlmICRmb250LXNpemUge1xuICAgICRmczogJGZvbnQtc2l6ZTtcbiAgfVxuICBAZWxzZSBpZiAkYmFzZS1odG1sLWZvbnQtc2l6ZSB7IC8vIG1ha2Ugc3VyZSB0byBkZWZpbmUgdGhpcyB2YXJpYWJsZSBvbiB5b3VyIG93blxuICAgICRmczogJGJhc2UtaHRtbC1mb250LXNpemU7XG4gIH1cblxuICBAcmV0dXJuICN7c3RyaXAtdW5pdCgkbnVtKSAvIHN0cmlwLXVuaXQoJGZzKX0jeyR1bml0fTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IHNjcmVlbiBwZXJjZW50XG5AZnVuY3Rpb24gZ2V0LXNjcmVlbi1wZXJjZW50KCR3aWR0aCwgJHNjcmVlbikge1xuICBAcmV0dXJuIHVucXVvdGUoJyN7JHdpZHRoICogMTAwIC8gJHNjcmVlbn0lJyk7XG59XG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogWi1JTkRFWEVTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdlbmVyYXRvclxuQGZ1bmN0aW9uIHotaW5kZXgoJG1hcCwgJGtleXMpIHtcbiAgJGZvdW5kLWluZGV4OiBudWxsO1xuXG4gIEBlYWNoICRrZXkgaW4gJGtleXMge1xuICAgIEBpZiAodHlwZS1vZigkbWFwKSA9PSAnbWFwJykge1xuICAgICAgJGZvdW5kLWluZGV4OiBpbmRleChtYXAta2V5cygkbWFwKSwgJGtleSk7XG4gICAgICAkbWFwOiBtYXAtZ2V0KCRtYXAsICRrZXkpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJGZvdW5kLWluZGV4OiBpbmRleCgkbWFwLCAka2V5KTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRmb3VuZC1pbmRleDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU2VydmVyXG5AZnVuY3Rpb24geigkbWFwLCAka2V5cy4uLikge1xuICBAcmV0dXJuIHotaW5kZXgoJG1hcCwgJGtleXMpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IEZPUk1TXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IElucHV0IHBsYWNlaG9sZGVyXG5AbWl4aW4gaW5wdXQtcGxhY2Vob2xkZXIoJGNvbCwgJHN0eWxlOiBpdGFsaWMpIHtcbiAgJjotbW96LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbiAgJjo6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2w7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICB9XG4gICY6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbiAgJjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2w7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICB9XG59XG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogUE9TSVRJT05TXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEFic29sdXRlIGNlbnRlcmVkXG5AbWl4aW4gYWJzb2x1dGUtY2VudGVyZWQoJHR5cGU6IGFic29sdXRlLCAkcG9zOiA1MCUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICB0b3A6ICRwb3M7XG4gIGxlZnQ6ICRwb3M7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBBYnNvbHV0ZSBjZW50ZXJlZCBYXG5AbWl4aW4gYWJzb2x1dGUtY2VudGVyZWQteCgkdHlwZTogYWJzb2x1dGUsICRwb3M6IDUwJSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIGxlZnQ6ICRwb3M7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQWJzb2x1dGUgY2VudGVyZWQgWVxuQG1peGluIGFic29sdXRlLWNlbnRlcmVkLXkoJHR5cGU6IGFic29sdXRlLCAkcG9zOiA1MCUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICB0b3A6ICRwb3M7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBTSE9SVEhBTkRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFBvc2l0aW9uc1xuQG1peGluIHBvc2l0aW9uLXN0cmV0Y2hlZCgkdHlwZTogYWJzb2x1dGUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IERpbWVuc2lvbnNcbkBtaXhpbiBkaW1lbnNpb25zLXNxdWFyZSgkdmFsdWUpIHtcbiAgd2lkdGg6ICR2YWx1ZTtcbiAgaGVpZ2h0OiAkdmFsdWU7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFBhZGRpbmdcbkBtaXhpbiBwYWRkaW5nLXYoJHZhbHVlKSB7XG4gIHBhZGRpbmctdG9wOiAkdmFsdWU7XG4gIHBhZGRpbmctYm90dG9tOiAkdmFsdWU7XG59XG5cbkBtaXhpbiBwYWRkaW5nLWgoJHZhbHVlKSB7XG4gIHBhZGRpbmctcmlnaHQ6ICR2YWx1ZTtcbiAgcGFkZGluZy1sZWZ0OiAkdmFsdWU7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcmdpblxuQG1peGluIG1hcmdpbi12KCR2YWx1ZSkge1xuICBtYXJnaW4tdG9wOiAkdmFsdWU7XG4gIG1hcmdpbi1ib3R0b206ICR2YWx1ZTtcbn1cblxuQG1peGluIG1hcmdpbi1oKCR2YWx1ZSkge1xuICBtYXJnaW4tcmlnaHQ6ICR2YWx1ZTtcbiAgbWFyZ2luLWxlZnQ6ICR2YWx1ZTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQm9yZGVyXG5AbWl4aW4gYm9yZGVyLXYoJHZhbHVlKSB7XG4gIGJvcmRlci10b3A6ICR2YWx1ZTtcbiAgYm9yZGVyLWJvdHRvbTogJHZhbHVlO1xufVxuXG5AbWl4aW4gYm9yZGVyLWgoJHZhbHVlKSB7XG4gIGJvcmRlci1yaWdodDogJHZhbHVlO1xuICBib3JkZXItbGVmdDogJHZhbHVlO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IFRZUE9HUkFQSFlcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRm9udCBzbW9vdGhpbmdcbkBtaXhpbiBmb250LXNtb290aGluZygkdmFsdWU6IGFudGlhbGlhc2VkKSB7XG4gIEBpZiAkdmFsdWUgPT0gYW50aWFsaWFzZWQge1xuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG4gIH0gQGVsc2Uge1xuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IHN1YnBpeGVsLWFudGlhbGlhc2VkO1xuICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBhdXRvO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFRleHQgdXBwZXJjYXNlXG5AbWl4aW4gdGV4dC11cHBlcmNhc2UoKSB7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIC1tb3otZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnY2FzZSc7XG4gIC13ZWJraXQtZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnY2FzZSc7XG4gIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2Nhc2UnIG9uO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTZWxlY3Rpb25cbkBtaXhpbiBzZWxlY3Rpb24oJGNvbCkge1xuICAkYmdyOiBpZigkY29sICE9IHRyYW5zcGFyZW50LCByZ2JhKCRjb2wsIDAuNSksIHJnYmEoMCwgMCwgMCwgMCkpO1xuXG4gICY6Oi1tb3otc2VsZWN0aW9uIHtcbiAgICBiYWNrZ3JvdW5kOiAkYmdyO1xuICB9XG5cbiAgJjo6c2VsZWN0aW9uIHtcbiAgICBiYWNrZ3JvdW5kOiAkYmdyO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEJBU0VcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgSW1wb3J0c1xuQGltcG9ydCAnLi4vLi4vZGVmcy9icmFuZC5qcyc7XG5AaW1wb3J0ICcuLi8uLi9kZWZzL3dlYnNpdGUuanMnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBGb250IHNpemVcbkBmdW5jdGlvbiByb2xlKCRtYXAsICR2YWx1ZSkge1xuICAkci1tYXA6IG1hcC1nZXQoJHZhbHVlLCAnbWFwJyk7XG4gICRyLXZhbHVlOiBtYXAtZ2V0KCR2YWx1ZSwgJ3ZhbHVlJyk7XG4gIEByZXR1cm4gbWFwLWdldCgkci1tYXAsICRyLXZhbHVlKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zID4gQ0FMQ1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCB2YWx1ZSBiYXNlZCBvbiB0aGUgYmFzZSBmb250IHNpemVcbkBmdW5jdGlvbiBiYXNlKCR2YWx1ZSkge1xuICBAcmV0dXJuIG1hdGguZGl2KCR2YWx1ZSwgbWFwLWdldCgkcm9sZXMtcmF0aW9zLCAnbGF5b3V0LWdyb3d0aCcpKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUHJvZ3Jlc3NpdmUgY2FsY1xuQGZ1bmN0aW9uIGdldC1wcm9ncmVzc2l2ZS1jYWxjKFxuICAkbWluLW9iai1zaXplLFxuICAkbWF4LW9iai1zaXplLFxuICAkbWluLXZwLFxuICAkbWF4LXZwLFxuICAkdnAtdW5pdDogdndcbikge1xuICBAcmV0dXJuIGNhbGMoXG4gICAgI3twaXhlbGF0ZSgkbWluLW9iai1zaXplKX0gKyAje3N0cmlwLXVuaXQoJG1heC1vYmotc2l6ZSAtICRtaW4tb2JqLXNpemUpfSAqXG4gICAgICAoXG4gICAgICAgICgxMDAjeyR2cC11bml0fSAtICN7cGl4ZWxhdGUoJG1pbi12cCl9KSAvICN7c3RyaXAtdW5pdChcbiAgICAgICAgICAgICRtYXgtdnAgLSAkbWluLXZwXG4gICAgICAgICAgKX1cbiAgICAgIClcbiAgKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zID4gVU5JVFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTdHJpcCB1bml0XG5AZnVuY3Rpb24gc3RyaXAtdW5pdCgkbnVtYmVyKSB7XG4gIEBpZiB0eXBlLW9mKCRudW1iZXIpID09ICdudW1iZXInIGFuZCBub3QgdW5pdGxlc3MoJG51bWJlcikge1xuICAgIEByZXR1cm4gbWF0aC5kaXYoJG51bWJlciwgKCRudW1iZXIgKiAwICsgMSkpO1xuICB9XG5cbiAgQHJldHVybiAkbnVtYmVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgUHggdW5pdFxuQGZ1bmN0aW9uIHBpeGVsYXRlKCR2YWx1ZSkge1xuICBAcmV0dXJuICN7c3RyaXAtdW5pdCgkdmFsdWUpfVB4O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgZW0vcmVtIHVuaXRcbkBmdW5jdGlvbiBlbSgkbnVtLCAkZm9udC1zaXplOiBmYWxzZSkge1xuICBAcmV0dXJuIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgZW0pO1xufVxuXG5AZnVuY3Rpb24gcmVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCByZW0pO1xufVxuXG5AZnVuY3Rpb24gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCAkdW5pdCkge1xuICAkZnM6IDEwcHg7XG5cbiAgQGlmICRmb250LXNpemUge1xuICAgICRmczogJGZvbnQtc2l6ZTtcbiAgfSBAZWxzZSB7XG4gICAgJGZzOiBtYXAtZ2V0KCR0eXBvZ3JhcGh5LCAnYmFzZV9mb250X3NpemUnKTtcbiAgfVxuXG4gIEByZXR1cm4gI3ttYXRoLmRpdihzdHJpcC11bml0KCRudW0pLCBzdHJpcC11bml0KCRmcykpfSN7JHVuaXR9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBEYXRhID4gU1dBVENIRVNcblxuQGltcG9ydCAnLi4vLi4vZGVmcy9zd2F0Y2hlcy9pbmRleC5qcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19icmVha3BvaW50cyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19yYXRpb3MnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvc3dhdGNoZXMvc3dhdGNoZXNfc2NyZWVucyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19zcGFjZXMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBEYXRhID4gUk9MRVNcblxuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfYm9yZGVycyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19icmVha3BvaW50cyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19jb2xvcnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfZGltZW5zaW9ucyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19yYXRpb3MnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfc2NyZWVucyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19zaGFkb3dzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3NwYWNlcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc190eXBvZ3JhcGh5JztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zID4gU0NBTEFCSUxJVFlcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTY2FsZXJcbkBtaXhpbiBzY2FsZXIoXG4gICRwcm9wZXJ0eSxcbiAgJG1pbi1zaXplLFxuICAkbWF4LXNpemUsXG4gICRtaW4tdnc6IG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtaW4nKSxcbiAgJG1heC12dzogbWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21heCcpXG4pIHtcbiAgI3skcHJvcGVydHl9OiAje3N0cmlwLXVuaXQobWF0aC5kaXYoKCRtaW4tdncgKiAwLjk3OTYpICogJG1pbi1zaXplLCAxMDAwKSl9dnc7IC8vIDAuOTc5NiBmaXhlcyB3cm9uZyBjYWxjdWxhdGlvbnMgaW4gQ2hyb21lXG5cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogJG1pbi12dykge1xuICAgICN7JHByb3BlcnR5fTogZ2V0LXByb2dyZXNzaXZlLWNhbGMoJG1pbi1zaXplLCAkbWF4LXNpemUsICRtaW4tdncsICRtYXgtdncpO1xuICB9XG5cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogJG1heC12dykge1xuICAgICN7JHByb3BlcnR5fTogcGl4ZWxhdGUoJG1heC1zaXplKTtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBQbGFjZWhvbGRlcnMgPiBTQ0FMQUJJTElUWVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE5lZ2F0aXZlXG4lcGgtbmVnYXRpdmUge1xuICBoMSxcbiAgaDIsXG4gIGgzLFxuICBoNCxcbiAgaDUsXG4gIGg2LFxuICBwIHtcbiAgICBjb2xvcjogbWFwLWdldCgkcm9sZXMtY29sLXRleHRzLCAnbmVnYXRpdmUnKTtcbiAgfVxuXG4gIC5tZXRhIHtcbiAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRzd2F0Y2hlcy1jb2xvcnMsICdob25leS15ZWxsb3cnLCAnbGlnaHQnKTtcbiAgfVxuXG4gIC50ZXh0LWxpbmsge1xuICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ25vcm1hbCcpO1xuICAgIGJvcmRlci1ib3R0b206IHBpeGVsYXRlKDFweCkgZG90dGVkXG4gICAgICByZ2JhKG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnbm9ybWFsJyksIDAuMzMpO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdob3ZlcicpO1xuICAgIH1cblxuICAgICY6YWN0aXZlIHtcbiAgICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2FjdGl2ZScpO1xuICAgIH1cbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBXYXZlXG4lcGgtd2F2ZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogNTAlO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLXdpZHRoOiBtYXRoLmRpdihtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWF4JyksIDIpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG5cbiAgPiBzdmcge1xuICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKDEwMCUpO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEhlYWQgd2F2ZVxuJXBoLWhlYWQtd2F2ZSB7XG4gICR3YXZlLWhlaWdodDogYmFzZShtYXAtZ2V0KCRyb2xlcy1kaW1lbnNpb25zLXdhdmVzLCAnaGVhZGVyJykpO1xuXG4gIC53YXZlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgdG9wOiBjYWxjKDEwMCUgLSAxUHgpO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogZW0oJHdhdmUtaGVpZ2h0KTtcblxuICAgIC5pbm5lciB7XG4gICAgICBAaW5jbHVkZSBkaW1lbnNpb25zLXNxdWFyZSgxMDAlKTtcblxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgICAgc3ZnIHtcbiAgICAgICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG5cbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIG1pbi13aWR0aDogbWF0aC5kaXYobWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21heCcpLCAyKTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBrZXlmcmFtZXMgc2xpZGUge1xuICAgIGZyb20ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgfVxuXG4gICAgdG8ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgMCk7XG4gICAgfVxuICB9XG5cbiAgLnNjcm9sbC1idG4ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3R0b206IDIwcHg7XG4gICAgbGVmdDogNTAlO1xuICAgIHotaW5kZXg6IDE7XG4gICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRzd2F0Y2hlcy1jb2xvcnMsICdjb3JuZmxvd2VyJywgJ2Jhc2UnKTtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICBhbmltYXRpb246IHNsaWRlIDFzIGVhc2UtaW4tb3V0IGluZmluaXRlIGFsdGVybmF0ZTtcblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdob3ZlcicpO1xuICAgIH1cblxuICAgICY6YWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnYWN0aXZlJyk7XG4gICAgfVxuXG4gICAgc3ZnIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gICAgfVxuXG4gICAgYm9keTpub3QoLnNjcm9sbGFibGUpICYge1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBSb290XG4uZXBpc29kZXMtbGlzdCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi1ib3R0b206IDA7XG5cbiAgLmNhcmQge1xuICAgIG1hcmdpbi1ib3R0b206IG1hcC1nZXQoJHJvbGVzLXNwYWNlcywgJ2VwaXNvZGUtaXRlbXMnKSAqIDI7XG5cbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiBtYXAtZ2V0KCRyb2xlcy1icmVha3BvaW50cywgJ3R3by1jb2x1bW5zJykpIHtcbiAgICAgIC5ib2R5IHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiAxZnIgYXV0byAyZnI7XG4gICAgICB9XG5cbiAgICAgIC5oZWFkaW5nIHtcbiAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IG1hcC1nZXQoJHJvbGVzLWJyZWFrcG9pbnRzLCAndHdvLWNvbHVtbnMnKSkgYW5kIChtYXgtd2lkdGg6IG1hcC1nZXQoJHJvbGVzLWJyZWFrcG9pbnRzLCAndGhyZWUtY29sdW1ucycpIC0gMSkge1xuICAgICAgd2lkdGg6IGNhbGMoXG4gICAgICAgIDUwJSAtICN7bWF0aC5kaXYobWFwLWdldCgkcm9sZXMtc3BhY2VzLCAnZXBpc29kZS1pdGVtcycpLCAyKX1cbiAgICAgICk7XG5cbiAgICAgICY6bm90KDpudGgtY2hpbGQoMm4gKyAyKSkge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IG1hcC1nZXQoJHJvbGVzLXNwYWNlcywgJ2VwaXNvZGUtaXRlbXMnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiBtYXAtZ2V0KCRyb2xlcy1icmVha3BvaW50cywgJ3RocmVlLWNvbHVtbnMnKSkge1xuICAgICAgd2lkdGg6IGNhbGMoXG4gICAgICAgIDMzLjMzMzMlIC0gI3ttYXRoLmRpdihtYXAtZ2V0KCRyb2xlcy1zcGFjZXMsICdlcGlzb2RlLWl0ZW1zJykgKiAyLCAzKX1cbiAgICAgICk7XG5cbiAgICAgICY6bm90KDpudGgtY2hpbGQoM24gKyAzKSkge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IG1hcC1nZXQoJHJvbGVzLXNwYWNlcywgJ2VwaXNvZGUtaXRlbXMnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIENvbXBvbmVudHMgPiBMSU5LU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5AdXNlICdzYXNzOm1hdGgnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IENPTE9SU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBMaWdodFxuQGZ1bmN0aW9uIGxpZ2h0KCRjb2xvciwgJHBlcmNlbnQpIHtcbiAgQHJldHVybiBtaXgoI2ZmZiwgJGNvbG9yLCAkcGVyY2VudCk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IERhcmtcbkBmdW5jdGlvbiBkYXJrKCRjb2xvciwgJHBlcmNlbnQpIHtcbiAgQHJldHVybiBtaXgoIzAwMCwgJGNvbG9yLCAkcGVyY2VudCk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogTUFQU1xuXG4kcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzOiBmYWxzZSAhZGVmYXVsdDtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIEdldCBEZWVwIFdhcm5pbmdcbi8vIERpc3BsYXlzIGEgd2FybmluZyBpZiB0aGUgcmV0cmlldmVkIHZhbHVlIGlzIGBudWxsYFxuQGZ1bmN0aW9uIG1hcC1nZXQtZGVlcC13YXJuaW5nKCR3YXJuLCAkZ2V0LCAka2V5KSB7XG4gIEBpZiBub3QgJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5ncyB7XG4gICAgQGlmICRnZXQgPT0gbnVsbCB7XG4gICAgICBAd2FybiAnTWFwIGhhcyBubyB2YWx1ZSBmb3Iga2V5IHNlYXJjaCBgI3skd2Fybn1gJztcbiAgICB9IEBlbHNlIGlmIHR5cGUtb2YoJGdldCkgIT0gJ21hcCcge1xuICAgICAgQHdhcm4gJ05vbi1tYXAgdmFsdWUgZm91bmQgZm9yIGtleSBzZWFyY2ggYCN7JHdhcm59YCwgY2Fubm90IHNlYXJjaCBmb3Iga2V5IGAjeyRrZXl9YCc7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiBudWxsO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IERlZXBcbi8vIEdpdmVuIGEgbWFwIGFuZCBhIGxpc3Qgb2Yga2V5cywgZmluZCB0aGUgdmFsdWUgYXQgdGhlIGdpdmVuIGtleVxuQGZ1bmN0aW9uIG1hcC1nZXQtZGVlcCgkbWFwLCAka2V5cy4uLikge1xuICBAaWYgbGVuZ3RoKCRrZXlzKSA9PSAxIHtcbiAgICAka2V5czogbnRoKCRrZXlzLCAxKTtcbiAgfVxuXG4gICR3YXJuOiAnI3tudGgoJGtleXMsIDEpfSc7XG4gICRsZW5ndGg6IGxlbmd0aCgka2V5cyk7XG4gICRnZXQ6IG1hcC1nZXQoJG1hcCwgbnRoKCRrZXlzLCAxKSk7XG5cbiAgQGlmICRsZW5ndGggPiAxIHtcbiAgICBAZm9yICRpIGZyb20gMiB0aHJvdWdoICRsZW5ndGgge1xuICAgICAgQGlmICRnZXQgIT0gbnVsbCBhbmQgdHlwZS1vZigkZ2V0KSA9PSAnbWFwJyB7XG4gICAgICAgICR3YXJuOiAkd2FybiArICctPiN7bnRoKCRrZXlzLCAkaSl9JztcbiAgICAgICAgJGdldDogbWFwLWdldCgkZ2V0LCBudGgoJGtleXMsICRpKSk7XG5cbiAgICAgICAgQGlmICRnZXQgPT0gbnVsbCB7XG4gICAgICAgICAgQHJldHVybiBtYXAtZ2V0LWRlZXAtd2FybmluZygkd2FybiwgJGdldCwgbnRoKCRrZXlzLCAkaSkpO1xuICAgICAgICB9XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgQHJldHVybiBtYXAtZ2V0LWRlZXAtd2FybmluZygkd2FybiwgJGdldCwgbnRoKCRrZXlzLCAkaSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGdldDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIEdldCBLZXlzXG5AZnVuY3Rpb24gZ2V0LWtleXMoJGtleXMsICRjb3VudGVyKSB7XG4gICRyZXR1cm46ICgpO1xuXG4gIEBmb3IgJGkgZnJvbSAxIHRvICRjb3VudGVyIHtcbiAgICAkcmV0dXJuOiBhcHBlbmQoJHJldHVybiwgbnRoKCRrZXlzLCAkaSkpO1xuICB9XG5cbiAgQHJldHVybiAkcmV0dXJuO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IFByZXZpb3VzIEtleVxuQGZ1bmN0aW9uIG1hcC1nZXQtcHJldi1rZXkoJG1hcCwgJGtleSkge1xuICAkaW5kZXg6IGluZGV4KCRtYXAsICRrZXkpO1xuICAkcHJldjogJGluZGV4IC0gMTtcbiAgJHJlc3VsdDogaWYoJHByZXYgPiAwLCBudGgoJG1hcCwgJHByZXYpLCBudWxsKTtcblxuICBAcmV0dXJuICRyZXN1bHQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBTZXRcbkBmdW5jdGlvbiBtYXAtc2V0KCRtYXAsICRrZXksICR2YWx1ZSkge1xuICBAcmV0dXJuIG1hcC1tZXJnZShcbiAgICAkbWFwLFxuICAgIChcbiAgICAgICRrZXk6ICR2YWx1ZVxuICAgIClcbiAgKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIFNldCBEZWVwXG5AZnVuY3Rpb24gbWFwLXNldC1kZWVwKCRtYXAsICRrZXlzLCAkdmFsdWUpIHtcbiAgJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5nczogdHJ1ZSAhZ2xvYmFsO1xuICAkbGVuZ3RoOiBsZW5ndGgoJGtleXMpO1xuICAkZ2V0LWtleXM6ICgpO1xuICAkbWFwLWxldmVsOiAoKTtcblxuICBAaWYgJGxlbmd0aCA+IDEge1xuICAgICRnZXQta2V5czogZ2V0LWtleXMoJGtleXMsICRsZW5ndGgpO1xuICAgICRtYXAtbGV2ZWw6IG1hcC1nZXQtZGVlcCgkbWFwLCAkZ2V0LWtleXMpO1xuICB9XG5cbiAgJG1lcmdlOiAoXG4gICAgbnRoKCRrZXlzLCAkbGVuZ3RoKTogJHZhbHVlXG4gICk7XG5cbiAgQGlmICRtYXAtbGV2ZWwge1xuICAgICRtZXJnZTogbWFwLW1lcmdlKCRtYXAtbGV2ZWwsICRtZXJnZSk7XG4gIH1cblxuICBAZm9yICRpIGZyb20gKCRsZW5ndGggKiAtMSArIDEpIHRocm91Z2ggLTEge1xuICAgICRqOiBhYnMoJGkpO1xuICAgICRrZXk6IG50aCgka2V5cywgJGopO1xuXG4gICAgLy8gQGRlYnVnICRnZXQta2V5cztcblxuICAgIEBpZiAkaiA+IDEge1xuICAgICAgJGdldC1rZXlzOiBnZXQta2V5cygka2V5cywgJGopO1xuICAgICAgJG1hcC1sZXZlbDogbWFwLWdldC1kZWVwKCRtYXAsICRnZXQta2V5cyk7XG5cbiAgICAgIEBpZiAkbWFwLWxldmVsIHtcbiAgICAgICAgJG1lcmdlOiBtYXAtbWVyZ2UoXG4gICAgICAgICAgJG1hcC1sZXZlbCxcbiAgICAgICAgICAoXG4gICAgICAgICAgICAka2V5OiAkbWVyZ2VcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgJG1lcmdlOiAoXG4gICAgICAgICAgJGtleTogJG1lcmdlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBAZWxzZSB7XG4gICAgICAkbWVyZ2U6IChcbiAgICAgICAgJGtleTogJG1lcmdlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gICRtYXA6IG1hcC1tZXJnZSgkbWFwLCAkbWVyZ2UpO1xuXG4gICRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3M6IGZhbHNlICFnbG9iYWw7XG5cbiAgQHJldHVybiAkbWFwO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IFVOSVRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFByb2dyZXNzaXZlIGNhbGNcbkBmdW5jdGlvbiBnZXQtcHJvZ3Jlc3NpdmUtY2FsYyhcbiAgJG1pbi1vYmotc2l6ZSxcbiAgJG1heC1vYmotc2l6ZSxcbiAgJG1pbi12cCxcbiAgJG1heC12cCxcbiAgJHZwLXVuaXQ6IHZ3XG4pIHtcbiAgQHJldHVybiBjYWxjKFxuICAgICN7JG1pbi1vYmotc2l6ZX0gKyAje3N0cmlwLXVuaXQoJG1heC1vYmotc2l6ZSAtICRtaW4tb2JqLXNpemUpfSAqXG4gICAgICAoKDEwMCN7JHZwLXVuaXR9IC0gI3skbWluLXZwfSkgLyAje3N0cmlwLXVuaXQoJG1heC12cCAtICRtaW4tdnApfSlcbiAgKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBVTklUU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTdHJpcCB1bml0XG5AZnVuY3Rpb24gc3RyaXAtdW5pdCgkbnVtYmVyKSB7XG4gIEBpZiB0eXBlLW9mKCRudW1iZXIpID09ICdudW1iZXInIGFuZCBub3QgdW5pdGxlc3MoJG51bWJlcikge1xuICAgIEByZXR1cm4gJG51bWJlciAvICgkbnVtYmVyICogMCArIDEpO1xuICB9XG5cbiAgQHJldHVybiAkbnVtYmVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgZW0vcmVtIHVuaXRcbkBmdW5jdGlvbiBlbSgkbnVtLCAkZm9udC1zaXplOiBmYWxzZSkge1xuICBAcmV0dXJuIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgZW0pO1xufVxuXG5AZnVuY3Rpb24gcmVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCByZW0pO1xufVxuXG5AZnVuY3Rpb24gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCAkdW5pdCkge1xuICAkZnM6IDEwcHg7XG5cbiAgQGlmICRmb250LXNpemUge1xuICAgICRmczogJGZvbnQtc2l6ZTtcbiAgfVxuICBAZWxzZSBpZiAkYmFzZS1odG1sLWZvbnQtc2l6ZSB7IC8vIG1ha2Ugc3VyZSB0byBkZWZpbmUgdGhpcyB2YXJpYWJsZSBvbiB5b3VyIG93blxuICAgICRmczogJGJhc2UtaHRtbC1mb250LXNpemU7XG4gIH1cblxuICBAcmV0dXJuICN7c3RyaXAtdW5pdCgkbnVtKSAvIHN0cmlwLXVuaXQoJGZzKX0jeyR1bml0fTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IHNjcmVlbiBwZXJjZW50XG5AZnVuY3Rpb24gZ2V0LXNjcmVlbi1wZXJjZW50KCR3aWR0aCwgJHNjcmVlbikge1xuICBAcmV0dXJuIHVucXVvdGUoJyN7JHdpZHRoICogMTAwIC8gJHNjcmVlbn0lJyk7XG59XG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogWi1JTkRFWEVTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdlbmVyYXRvclxuQGZ1bmN0aW9uIHotaW5kZXgoJG1hcCwgJGtleXMpIHtcbiAgJGZvdW5kLWluZGV4OiBudWxsO1xuXG4gIEBlYWNoICRrZXkgaW4gJGtleXMge1xuICAgIEBpZiAodHlwZS1vZigkbWFwKSA9PSAnbWFwJykge1xuICAgICAgJGZvdW5kLWluZGV4OiBpbmRleChtYXAta2V5cygkbWFwKSwgJGtleSk7XG4gICAgICAkbWFwOiBtYXAtZ2V0KCRtYXAsICRrZXkpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJGZvdW5kLWluZGV4OiBpbmRleCgkbWFwLCAka2V5KTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRmb3VuZC1pbmRleDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU2VydmVyXG5AZnVuY3Rpb24geigkbWFwLCAka2V5cy4uLikge1xuICBAcmV0dXJuIHotaW5kZXgoJG1hcCwgJGtleXMpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IEZPUk1TXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IElucHV0IHBsYWNlaG9sZGVyXG5AbWl4aW4gaW5wdXQtcGxhY2Vob2xkZXIoJGNvbCwgJHN0eWxlOiBpdGFsaWMpIHtcbiAgJjotbW96LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbiAgJjo6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2w7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICB9XG4gICY6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbiAgJjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2w7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICB9XG59XG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogUE9TSVRJT05TXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEFic29sdXRlIGNlbnRlcmVkXG5AbWl4aW4gYWJzb2x1dGUtY2VudGVyZWQoJHR5cGU6IGFic29sdXRlLCAkcG9zOiA1MCUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICB0b3A6ICRwb3M7XG4gIGxlZnQ6ICRwb3M7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBBYnNvbHV0ZSBjZW50ZXJlZCBYXG5AbWl4aW4gYWJzb2x1dGUtY2VudGVyZWQteCgkdHlwZTogYWJzb2x1dGUsICRwb3M6IDUwJSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIGxlZnQ6ICRwb3M7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQWJzb2x1dGUgY2VudGVyZWQgWVxuQG1peGluIGFic29sdXRlLWNlbnRlcmVkLXkoJHR5cGU6IGFic29sdXRlLCAkcG9zOiA1MCUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICB0b3A6ICRwb3M7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBTSE9SVEhBTkRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFBvc2l0aW9uc1xuQG1peGluIHBvc2l0aW9uLXN0cmV0Y2hlZCgkdHlwZTogYWJzb2x1dGUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IERpbWVuc2lvbnNcbkBtaXhpbiBkaW1lbnNpb25zLXNxdWFyZSgkdmFsdWUpIHtcbiAgd2lkdGg6ICR2YWx1ZTtcbiAgaGVpZ2h0OiAkdmFsdWU7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFBhZGRpbmdcbkBtaXhpbiBwYWRkaW5nLXYoJHZhbHVlKSB7XG4gIHBhZGRpbmctdG9wOiAkdmFsdWU7XG4gIHBhZGRpbmctYm90dG9tOiAkdmFsdWU7XG59XG5cbkBtaXhpbiBwYWRkaW5nLWgoJHZhbHVlKSB7XG4gIHBhZGRpbmctcmlnaHQ6ICR2YWx1ZTtcbiAgcGFkZGluZy1sZWZ0OiAkdmFsdWU7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcmdpblxuQG1peGluIG1hcmdpbi12KCR2YWx1ZSkge1xuICBtYXJnaW4tdG9wOiAkdmFsdWU7XG4gIG1hcmdpbi1ib3R0b206ICR2YWx1ZTtcbn1cblxuQG1peGluIG1hcmdpbi1oKCR2YWx1ZSkge1xuICBtYXJnaW4tcmlnaHQ6ICR2YWx1ZTtcbiAgbWFyZ2luLWxlZnQ6ICR2YWx1ZTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQm9yZGVyXG5AbWl4aW4gYm9yZGVyLXYoJHZhbHVlKSB7XG4gIGJvcmRlci10b3A6ICR2YWx1ZTtcbiAgYm9yZGVyLWJvdHRvbTogJHZhbHVlO1xufVxuXG5AbWl4aW4gYm9yZGVyLWgoJHZhbHVlKSB7XG4gIGJvcmRlci1yaWdodDogJHZhbHVlO1xuICBib3JkZXItbGVmdDogJHZhbHVlO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IFRZUE9HUkFQSFlcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRm9udCBzbW9vdGhpbmdcbkBtaXhpbiBmb250LXNtb290aGluZygkdmFsdWU6IGFudGlhbGlhc2VkKSB7XG4gIEBpZiAkdmFsdWUgPT0gYW50aWFsaWFzZWQge1xuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG4gIH0gQGVsc2Uge1xuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IHN1YnBpeGVsLWFudGlhbGlhc2VkO1xuICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBhdXRvO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFRleHQgdXBwZXJjYXNlXG5AbWl4aW4gdGV4dC11cHBlcmNhc2UoKSB7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIC1tb3otZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnY2FzZSc7XG4gIC13ZWJraXQtZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnY2FzZSc7XG4gIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2Nhc2UnIG9uO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTZWxlY3Rpb25cbkBtaXhpbiBzZWxlY3Rpb24oJGNvbCkge1xuICAkYmdyOiBpZigkY29sICE9IHRyYW5zcGFyZW50LCByZ2JhKCRjb2wsIDAuNSksIHJnYmEoMCwgMCwgMCwgMCkpO1xuXG4gICY6Oi1tb3otc2VsZWN0aW9uIHtcbiAgICBiYWNrZ3JvdW5kOiAkYmdyO1xuICB9XG5cbiAgJjo6c2VsZWN0aW9uIHtcbiAgICBiYWNrZ3JvdW5kOiAkYmdyO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEJBU0VcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgSW1wb3J0c1xuQGltcG9ydCAnLi4vLi4vZGVmcy9icmFuZC5qcyc7XG5AaW1wb3J0ICcuLi8uLi9kZWZzL3dlYnNpdGUuanMnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBGb250IHNpemVcbkBmdW5jdGlvbiByb2xlKCRtYXAsICR2YWx1ZSkge1xuICAkci1tYXA6IG1hcC1nZXQoJHZhbHVlLCAnbWFwJyk7XG4gICRyLXZhbHVlOiBtYXAtZ2V0KCR2YWx1ZSwgJ3ZhbHVlJyk7XG4gIEByZXR1cm4gbWFwLWdldCgkci1tYXAsICRyLXZhbHVlKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zID4gQ0FMQ1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCB2YWx1ZSBiYXNlZCBvbiB0aGUgYmFzZSBmb250IHNpemVcbkBmdW5jdGlvbiBiYXNlKCR2YWx1ZSkge1xuICBAcmV0dXJuIG1hdGguZGl2KCR2YWx1ZSwgbWFwLWdldCgkcm9sZXMtcmF0aW9zLCAnbGF5b3V0LWdyb3d0aCcpKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUHJvZ3Jlc3NpdmUgY2FsY1xuQGZ1bmN0aW9uIGdldC1wcm9ncmVzc2l2ZS1jYWxjKFxuICAkbWluLW9iai1zaXplLFxuICAkbWF4LW9iai1zaXplLFxuICAkbWluLXZwLFxuICAkbWF4LXZwLFxuICAkdnAtdW5pdDogdndcbikge1xuICBAcmV0dXJuIGNhbGMoXG4gICAgI3twaXhlbGF0ZSgkbWluLW9iai1zaXplKX0gKyAje3N0cmlwLXVuaXQoJG1heC1vYmotc2l6ZSAtICRtaW4tb2JqLXNpemUpfSAqXG4gICAgICAoXG4gICAgICAgICgxMDAjeyR2cC11bml0fSAtICN7cGl4ZWxhdGUoJG1pbi12cCl9KSAvICN7c3RyaXAtdW5pdChcbiAgICAgICAgICAgICRtYXgtdnAgLSAkbWluLXZwXG4gICAgICAgICAgKX1cbiAgICAgIClcbiAgKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zID4gVU5JVFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTdHJpcCB1bml0XG5AZnVuY3Rpb24gc3RyaXAtdW5pdCgkbnVtYmVyKSB7XG4gIEBpZiB0eXBlLW9mKCRudW1iZXIpID09ICdudW1iZXInIGFuZCBub3QgdW5pdGxlc3MoJG51bWJlcikge1xuICAgIEByZXR1cm4gbWF0aC5kaXYoJG51bWJlciwgKCRudW1iZXIgKiAwICsgMSkpO1xuICB9XG5cbiAgQHJldHVybiAkbnVtYmVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgUHggdW5pdFxuQGZ1bmN0aW9uIHBpeGVsYXRlKCR2YWx1ZSkge1xuICBAcmV0dXJuICN7c3RyaXAtdW5pdCgkdmFsdWUpfVB4O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgZW0vcmVtIHVuaXRcbkBmdW5jdGlvbiBlbSgkbnVtLCAkZm9udC1zaXplOiBmYWxzZSkge1xuICBAcmV0dXJuIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgZW0pO1xufVxuXG5AZnVuY3Rpb24gcmVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCByZW0pO1xufVxuXG5AZnVuY3Rpb24gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCAkdW5pdCkge1xuICAkZnM6IDEwcHg7XG5cbiAgQGlmICRmb250LXNpemUge1xuICAgICRmczogJGZvbnQtc2l6ZTtcbiAgfSBAZWxzZSB7XG4gICAgJGZzOiBtYXAtZ2V0KCR0eXBvZ3JhcGh5LCAnYmFzZV9mb250X3NpemUnKTtcbiAgfVxuXG4gIEByZXR1cm4gI3ttYXRoLmRpdihzdHJpcC11bml0KCRudW0pLCBzdHJpcC11bml0KCRmcykpfSN7JHVuaXR9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBEYXRhID4gU1dBVENIRVNcblxuQGltcG9ydCAnLi4vLi4vZGVmcy9zd2F0Y2hlcy9pbmRleC5qcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19icmVha3BvaW50cyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19yYXRpb3MnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvc3dhdGNoZXMvc3dhdGNoZXNfc2NyZWVucyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19zcGFjZXMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBEYXRhID4gUk9MRVNcblxuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfYm9yZGVycyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19icmVha3BvaW50cyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19jb2xvcnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfZGltZW5zaW9ucyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19yYXRpb3MnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfc2NyZWVucyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19zaGFkb3dzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3NwYWNlcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc190eXBvZ3JhcGh5JztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zID4gU0NBTEFCSUxJVFlcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTY2FsZXJcbkBtaXhpbiBzY2FsZXIoXG4gICRwcm9wZXJ0eSxcbiAgJG1pbi1zaXplLFxuICAkbWF4LXNpemUsXG4gICRtaW4tdnc6IG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtaW4nKSxcbiAgJG1heC12dzogbWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21heCcpXG4pIHtcbiAgI3skcHJvcGVydHl9OiAje3N0cmlwLXVuaXQobWF0aC5kaXYoKCRtaW4tdncgKiAwLjk3OTYpICogJG1pbi1zaXplLCAxMDAwKSl9dnc7IC8vIDAuOTc5NiBmaXhlcyB3cm9uZyBjYWxjdWxhdGlvbnMgaW4gQ2hyb21lXG5cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogJG1pbi12dykge1xuICAgICN7JHByb3BlcnR5fTogZ2V0LXByb2dyZXNzaXZlLWNhbGMoJG1pbi1zaXplLCAkbWF4LXNpemUsICRtaW4tdncsICRtYXgtdncpO1xuICB9XG5cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogJG1heC12dykge1xuICAgICN7JHByb3BlcnR5fTogcGl4ZWxhdGUoJG1heC1zaXplKTtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBQbGFjZWhvbGRlcnMgPiBTQ0FMQUJJTElUWVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE5lZ2F0aXZlXG4lcGgtbmVnYXRpdmUge1xuICBoMSxcbiAgaDIsXG4gIGgzLFxuICBoNCxcbiAgaDUsXG4gIGg2LFxuICBwIHtcbiAgICBjb2xvcjogbWFwLWdldCgkcm9sZXMtY29sLXRleHRzLCAnbmVnYXRpdmUnKTtcbiAgfVxuXG4gIC5tZXRhIHtcbiAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRzd2F0Y2hlcy1jb2xvcnMsICdob25leS15ZWxsb3cnLCAnbGlnaHQnKTtcbiAgfVxuXG4gIC50ZXh0LWxpbmsge1xuICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ25vcm1hbCcpO1xuICAgIGJvcmRlci1ib3R0b206IHBpeGVsYXRlKDFweCkgZG90dGVkXG4gICAgICByZ2JhKG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnbm9ybWFsJyksIDAuMzMpO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdob3ZlcicpO1xuICAgIH1cblxuICAgICY6YWN0aXZlIHtcbiAgICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2FjdGl2ZScpO1xuICAgIH1cbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBXYXZlXG4lcGgtd2F2ZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogNTAlO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLXdpZHRoOiBtYXRoLmRpdihtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWF4JyksIDIpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG5cbiAgPiBzdmcge1xuICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKDEwMCUpO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEhlYWQgd2F2ZVxuJXBoLWhlYWQtd2F2ZSB7XG4gICR3YXZlLWhlaWdodDogYmFzZShtYXAtZ2V0KCRyb2xlcy1kaW1lbnNpb25zLXdhdmVzLCAnaGVhZGVyJykpO1xuXG4gIC53YXZlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgdG9wOiBjYWxjKDEwMCUgLSAxUHgpO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogZW0oJHdhdmUtaGVpZ2h0KTtcblxuICAgIC5pbm5lciB7XG4gICAgICBAaW5jbHVkZSBkaW1lbnNpb25zLXNxdWFyZSgxMDAlKTtcblxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgICAgc3ZnIHtcbiAgICAgICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG5cbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIG1pbi13aWR0aDogbWF0aC5kaXYobWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21heCcpLCAyKTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBrZXlmcmFtZXMgc2xpZGUge1xuICAgIGZyb20ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgfVxuXG4gICAgdG8ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgMCk7XG4gICAgfVxuICB9XG5cbiAgLnNjcm9sbC1idG4ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3R0b206IDIwcHg7XG4gICAgbGVmdDogNTAlO1xuICAgIHotaW5kZXg6IDE7XG4gICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRzd2F0Y2hlcy1jb2xvcnMsICdjb3JuZmxvd2VyJywgJ2Jhc2UnKTtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICBhbmltYXRpb246IHNsaWRlIDFzIGVhc2UtaW4tb3V0IGluZmluaXRlIGFsdGVybmF0ZTtcblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdob3ZlcicpO1xuICAgIH1cblxuICAgICY6YWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnYWN0aXZlJyk7XG4gICAgfVxuXG4gICAgc3ZnIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gICAgfVxuXG4gICAgYm9keTpub3QoLnNjcm9sbGFibGUpICYge1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBUZXh0IGxpbmtcbi5wb3N0LWJvZHkgYSxcbi50ZXh0LWxpbmsge1xuICBjb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICdiYXNlJywgJ25vcm1hbCcpO1xuICBib3JkZXItYm90dG9tOiBwaXhlbGF0ZSgxcHgpIGRvdHRlZFxuICAgIHJnYmEobWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICdiYXNlJywgJ25vcm1hbCcpLCAwLjMzKTtcblxuICAmLFxuICAqIHtcbiAgICB0cmFuc2l0aW9uOiBib3JkZXItYm90dG9tIDAuMDVzIGVhc2UtaW4tb3V0LCBjb2xvciAwLjA1cyBlYXNlLWluLW91dDtcbiAgfVxuXG4gICY6aG92ZXIge1xuICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ2Jhc2UnLCAnaG92ZXInKTtcbiAgICBib3JkZXItYm90dG9tOiBwaXhlbGF0ZSgxcHgpIGRvdHRlZCB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuICB9XG5cbiAgJjphY3RpdmUge1xuICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ2Jhc2UnLCAnYWN0aXZlJyk7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUmVmZXJlbmNlIGxpbmtcbi5yZWYtbGluayB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LXNpemU6IG1hcC1nZXQoJHJvbGVzLXR5cG8tZm9udC1zaXplcywgJ3JlZi1saW5rJyk7XG5cbiAgYTo6YWZ0ZXIge1xuICAgIEBpbmNsdWRlIHBhZGRpbmctaChtYXAtZ2V0KCRzd2F0Y2hlcy1zcGFjZXMsICc1JykpO1xuXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDEwMCU7XG4gICAgY29udGVudDogJ+KGkic7XG4gIH1cbn1cbiIsIi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIENvbXBvbmVudHMgPiBQTEFURk9STVNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuQHVzZSAnc2FzczptYXRoJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBDT0xPUlNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTGlnaHRcbkBmdW5jdGlvbiBsaWdodCgkY29sb3IsICRwZXJjZW50KSB7XG4gIEByZXR1cm4gbWl4KCNmZmYsICRjb2xvciwgJHBlcmNlbnQpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBEYXJrXG5AZnVuY3Rpb24gZGFyaygkY29sb3IsICRwZXJjZW50KSB7XG4gIEByZXR1cm4gbWl4KCMwMDAsICRjb2xvciwgJHBlcmNlbnQpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IE1BUFNcblxuJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5nczogZmFsc2UgIWRlZmF1bHQ7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgRGVlcCBXYXJuaW5nXG4vLyBEaXNwbGF5cyBhIHdhcm5pbmcgaWYgdGhlIHJldHJpZXZlZCB2YWx1ZSBpcyBgbnVsbGBcbkBmdW5jdGlvbiBtYXAtZ2V0LWRlZXAtd2FybmluZygkd2FybiwgJGdldCwgJGtleSkge1xuICBAaWYgbm90ICRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3Mge1xuICAgIEBpZiAkZ2V0ID09IG51bGwge1xuICAgICAgQHdhcm4gJ01hcCBoYXMgbm8gdmFsdWUgZm9yIGtleSBzZWFyY2ggYCN7JHdhcm59YCc7XG4gICAgfSBAZWxzZSBpZiB0eXBlLW9mKCRnZXQpICE9ICdtYXAnIHtcbiAgICAgIEB3YXJuICdOb24tbWFwIHZhbHVlIGZvdW5kIGZvciBrZXkgc2VhcmNoIGAjeyR3YXJufWAsIGNhbm5vdCBzZWFyY2ggZm9yIGtleSBgI3ska2V5fWAnO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gbnVsbDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIEdldCBEZWVwXG4vLyBHaXZlbiBhIG1hcCBhbmQgYSBsaXN0IG9mIGtleXMsIGZpbmQgdGhlIHZhbHVlIGF0IHRoZSBnaXZlbiBrZXlcbkBmdW5jdGlvbiBtYXAtZ2V0LWRlZXAoJG1hcCwgJGtleXMuLi4pIHtcbiAgQGlmIGxlbmd0aCgka2V5cykgPT0gMSB7XG4gICAgJGtleXM6IG50aCgka2V5cywgMSk7XG4gIH1cblxuICAkd2FybjogJyN7bnRoKCRrZXlzLCAxKX0nO1xuICAkbGVuZ3RoOiBsZW5ndGgoJGtleXMpO1xuICAkZ2V0OiBtYXAtZ2V0KCRtYXAsIG50aCgka2V5cywgMSkpO1xuXG4gIEBpZiAkbGVuZ3RoID4gMSB7XG4gICAgQGZvciAkaSBmcm9tIDIgdGhyb3VnaCAkbGVuZ3RoIHtcbiAgICAgIEBpZiAkZ2V0ICE9IG51bGwgYW5kIHR5cGUtb2YoJGdldCkgPT0gJ21hcCcge1xuICAgICAgICAkd2FybjogJHdhcm4gKyAnLT4je250aCgka2V5cywgJGkpfSc7XG4gICAgICAgICRnZXQ6IG1hcC1nZXQoJGdldCwgbnRoKCRrZXlzLCAkaSkpO1xuXG4gICAgICAgIEBpZiAkZ2V0ID09IG51bGwge1xuICAgICAgICAgIEByZXR1cm4gbWFwLWdldC1kZWVwLXdhcm5pbmcoJHdhcm4sICRnZXQsIG50aCgka2V5cywgJGkpKTtcbiAgICAgICAgfVxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIEByZXR1cm4gbWFwLWdldC1kZWVwLXdhcm5pbmcoJHdhcm4sICRnZXQsIG50aCgka2V5cywgJGkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRnZXQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgS2V5c1xuQGZ1bmN0aW9uIGdldC1rZXlzKCRrZXlzLCAkY291bnRlcikge1xuICAkcmV0dXJuOiAoKTtcblxuICBAZm9yICRpIGZyb20gMSB0byAkY291bnRlciB7XG4gICAgJHJldHVybjogYXBwZW5kKCRyZXR1cm4sIG50aCgka2V5cywgJGkpKTtcbiAgfVxuXG4gIEByZXR1cm4gJHJldHVybjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIEdldCBQcmV2aW91cyBLZXlcbkBmdW5jdGlvbiBtYXAtZ2V0LXByZXYta2V5KCRtYXAsICRrZXkpIHtcbiAgJGluZGV4OiBpbmRleCgkbWFwLCAka2V5KTtcbiAgJHByZXY6ICRpbmRleCAtIDE7XG4gICRyZXN1bHQ6IGlmKCRwcmV2ID4gMCwgbnRoKCRtYXAsICRwcmV2KSwgbnVsbCk7XG5cbiAgQHJldHVybiAkcmVzdWx0O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgU2V0XG5AZnVuY3Rpb24gbWFwLXNldCgkbWFwLCAka2V5LCAkdmFsdWUpIHtcbiAgQHJldHVybiBtYXAtbWVyZ2UoXG4gICAgJG1hcCxcbiAgICAoXG4gICAgICAka2V5OiAkdmFsdWVcbiAgICApXG4gICk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBTZXQgRGVlcFxuQGZ1bmN0aW9uIG1hcC1zZXQtZGVlcCgkbWFwLCAka2V5cywgJHZhbHVlKSB7XG4gICRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3M6IHRydWUgIWdsb2JhbDtcbiAgJGxlbmd0aDogbGVuZ3RoKCRrZXlzKTtcbiAgJGdldC1rZXlzOiAoKTtcbiAgJG1hcC1sZXZlbDogKCk7XG5cbiAgQGlmICRsZW5ndGggPiAxIHtcbiAgICAkZ2V0LWtleXM6IGdldC1rZXlzKCRrZXlzLCAkbGVuZ3RoKTtcbiAgICAkbWFwLWxldmVsOiBtYXAtZ2V0LWRlZXAoJG1hcCwgJGdldC1rZXlzKTtcbiAgfVxuXG4gICRtZXJnZTogKFxuICAgIG50aCgka2V5cywgJGxlbmd0aCk6ICR2YWx1ZVxuICApO1xuXG4gIEBpZiAkbWFwLWxldmVsIHtcbiAgICAkbWVyZ2U6IG1hcC1tZXJnZSgkbWFwLWxldmVsLCAkbWVyZ2UpO1xuICB9XG5cbiAgQGZvciAkaSBmcm9tICgkbGVuZ3RoICogLTEgKyAxKSB0aHJvdWdoIC0xIHtcbiAgICAkajogYWJzKCRpKTtcbiAgICAka2V5OiBudGgoJGtleXMsICRqKTtcblxuICAgIC8vIEBkZWJ1ZyAkZ2V0LWtleXM7XG5cbiAgICBAaWYgJGogPiAxIHtcbiAgICAgICRnZXQta2V5czogZ2V0LWtleXMoJGtleXMsICRqKTtcbiAgICAgICRtYXAtbGV2ZWw6IG1hcC1nZXQtZGVlcCgkbWFwLCAkZ2V0LWtleXMpO1xuXG4gICAgICBAaWYgJG1hcC1sZXZlbCB7XG4gICAgICAgICRtZXJnZTogbWFwLW1lcmdlKFxuICAgICAgICAgICRtYXAtbGV2ZWwsXG4gICAgICAgICAgKFxuICAgICAgICAgICAgJGtleTogJG1lcmdlXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSBAZWxzZSB7XG4gICAgICAgICRtZXJnZTogKFxuICAgICAgICAgICRrZXk6ICRtZXJnZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gQGVsc2Uge1xuICAgICAgJG1lcmdlOiAoXG4gICAgICAgICRrZXk6ICRtZXJnZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAkbWFwOiBtYXAtbWVyZ2UoJG1hcCwgJG1lcmdlKTtcblxuICAkcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzOiBmYWxzZSAhZ2xvYmFsO1xuXG4gIEByZXR1cm4gJG1hcDtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBVTklUU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBQcm9ncmVzc2l2ZSBjYWxjXG5AZnVuY3Rpb24gZ2V0LXByb2dyZXNzaXZlLWNhbGMoXG4gICRtaW4tb2JqLXNpemUsXG4gICRtYXgtb2JqLXNpemUsXG4gICRtaW4tdnAsXG4gICRtYXgtdnAsXG4gICR2cC11bml0OiB2d1xuKSB7XG4gIEByZXR1cm4gY2FsYyhcbiAgICAjeyRtaW4tb2JqLXNpemV9ICsgI3tzdHJpcC11bml0KCRtYXgtb2JqLXNpemUgLSAkbWluLW9iai1zaXplKX0gKlxuICAgICAgKCgxMDAjeyR2cC11bml0fSAtICN7JG1pbi12cH0pIC8gI3tzdHJpcC11bml0KCRtYXgtdnAgLSAkbWluLXZwKX0pXG4gICk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogVU5JVFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU3RyaXAgdW5pdFxuQGZ1bmN0aW9uIHN0cmlwLXVuaXQoJG51bWJlcikge1xuICBAaWYgdHlwZS1vZigkbnVtYmVyKSA9PSAnbnVtYmVyJyBhbmQgbm90IHVuaXRsZXNzKCRudW1iZXIpIHtcbiAgICBAcmV0dXJuICRudW1iZXIgLyAoJG51bWJlciAqIDAgKyAxKTtcbiAgfVxuXG4gIEByZXR1cm4gJG51bWJlcjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IGVtL3JlbSB1bml0XG5AZnVuY3Rpb24gZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIGVtKTtcbn1cblxuQGZ1bmN0aW9uIHJlbSgkbnVtLCAkZm9udC1zaXplOiBmYWxzZSkge1xuICBAcmV0dXJuIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgcmVtKTtcbn1cblxuQGZ1bmN0aW9uIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgJHVuaXQpIHtcbiAgJGZzOiAxMHB4O1xuXG4gIEBpZiAkZm9udC1zaXplIHtcbiAgICAkZnM6ICRmb250LXNpemU7XG4gIH1cbiAgQGVsc2UgaWYgJGJhc2UtaHRtbC1mb250LXNpemUgeyAvLyBtYWtlIHN1cmUgdG8gZGVmaW5lIHRoaXMgdmFyaWFibGUgb24geW91ciBvd25cbiAgICAkZnM6ICRiYXNlLWh0bWwtZm9udC1zaXplO1xuICB9XG5cbiAgQHJldHVybiAje3N0cmlwLXVuaXQoJG51bSkgLyBzdHJpcC11bml0KCRmcyl9I3skdW5pdH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBzY3JlZW4gcGVyY2VudFxuQGZ1bmN0aW9uIGdldC1zY3JlZW4tcGVyY2VudCgkd2lkdGgsICRzY3JlZW4pIHtcbiAgQHJldHVybiB1bnF1b3RlKCcjeyR3aWR0aCAqIDEwMCAvICRzY3JlZW59JScpO1xufVxuXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IFotSU5ERVhFU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZW5lcmF0b3JcbkBmdW5jdGlvbiB6LWluZGV4KCRtYXAsICRrZXlzKSB7XG4gICRmb3VuZC1pbmRleDogbnVsbDtcblxuICBAZWFjaCAka2V5IGluICRrZXlzIHtcbiAgICBAaWYgKHR5cGUtb2YoJG1hcCkgPT0gJ21hcCcpIHtcbiAgICAgICRmb3VuZC1pbmRleDogaW5kZXgobWFwLWtleXMoJG1hcCksICRrZXkpO1xuICAgICAgJG1hcDogbWFwLWdldCgkbWFwLCAka2V5KTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRmb3VuZC1pbmRleDogaW5kZXgoJG1hcCwgJGtleSk7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkZm91bmQtaW5kZXg7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFNlcnZlclxuQGZ1bmN0aW9uIHooJG1hcCwgJGtleXMuLi4pIHtcbiAgQHJldHVybiB6LWluZGV4KCRtYXAsICRrZXlzKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBGT1JNU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBJbnB1dCBwbGFjZWhvbGRlclxuQG1peGluIGlucHV0LXBsYWNlaG9sZGVyKCRjb2wsICRzdHlsZTogaXRhbGljKSB7XG4gICY6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2w7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICB9XG4gICY6Oi1tb3otcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxuICAmOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2w7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICB9XG4gICY6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxufVxuXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IFBPU0lUSU9OU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBBYnNvbHV0ZSBjZW50ZXJlZFxuQG1peGluIGFic29sdXRlLWNlbnRlcmVkKCR0eXBlOiBhYnNvbHV0ZSwgJHBvczogNTAlKSB7XG4gIHBvc2l0aW9uOiAkdHlwZTtcbiAgdG9wOiAkcG9zO1xuICBsZWZ0OiAkcG9zO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQWJzb2x1dGUgY2VudGVyZWQgWFxuQG1peGluIGFic29sdXRlLWNlbnRlcmVkLXgoJHR5cGU6IGFic29sdXRlLCAkcG9zOiA1MCUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICBsZWZ0OiAkcG9zO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEFic29sdXRlIGNlbnRlcmVkIFlcbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXJlZC15KCR0eXBlOiBhYnNvbHV0ZSwgJHBvczogNTAlKSB7XG4gIHBvc2l0aW9uOiAkdHlwZTtcbiAgdG9wOiAkcG9zO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogU0hPUlRIQU5EU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBQb3NpdGlvbnNcbkBtaXhpbiBwb3NpdGlvbi1zdHJldGNoZWQoJHR5cGU6IGFic29sdXRlKSB7XG4gIHBvc2l0aW9uOiAkdHlwZTtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBEaW1lbnNpb25zXG5AbWl4aW4gZGltZW5zaW9ucy1zcXVhcmUoJHZhbHVlKSB7XG4gIHdpZHRoOiAkdmFsdWU7XG4gIGhlaWdodDogJHZhbHVlO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBQYWRkaW5nXG5AbWl4aW4gcGFkZGluZy12KCR2YWx1ZSkge1xuICBwYWRkaW5nLXRvcDogJHZhbHVlO1xuICBwYWRkaW5nLWJvdHRvbTogJHZhbHVlO1xufVxuXG5AbWl4aW4gcGFkZGluZy1oKCR2YWx1ZSkge1xuICBwYWRkaW5nLXJpZ2h0OiAkdmFsdWU7XG4gIHBhZGRpbmctbGVmdDogJHZhbHVlO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXJnaW5cbkBtaXhpbiBtYXJnaW4tdigkdmFsdWUpIHtcbiAgbWFyZ2luLXRvcDogJHZhbHVlO1xuICBtYXJnaW4tYm90dG9tOiAkdmFsdWU7XG59XG5cbkBtaXhpbiBtYXJnaW4taCgkdmFsdWUpIHtcbiAgbWFyZ2luLXJpZ2h0OiAkdmFsdWU7XG4gIG1hcmdpbi1sZWZ0OiAkdmFsdWU7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEJvcmRlclxuQG1peGluIGJvcmRlci12KCR2YWx1ZSkge1xuICBib3JkZXItdG9wOiAkdmFsdWU7XG4gIGJvcmRlci1ib3R0b206ICR2YWx1ZTtcbn1cblxuQG1peGluIGJvcmRlci1oKCR2YWx1ZSkge1xuICBib3JkZXItcmlnaHQ6ICR2YWx1ZTtcbiAgYm9yZGVyLWxlZnQ6ICR2YWx1ZTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBUWVBPR1JBUEhZXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEZvbnQgc21vb3RoaW5nXG5AbWl4aW4gZm9udC1zbW9vdGhpbmcoJHZhbHVlOiBhbnRpYWxpYXNlZCkge1xuICBAaWYgJHZhbHVlID09IGFudGlhbGlhc2VkIHtcbiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICB9IEBlbHNlIHtcbiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBzdWJwaXhlbC1hbnRpYWxpYXNlZDtcbiAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogYXV0bztcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBUZXh0IHVwcGVyY2FzZVxuQG1peGluIHRleHQtdXBwZXJjYXNlKCkge1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAtbW96LWZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2Nhc2UnO1xuICAtd2Via2l0LWZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2Nhc2UnO1xuICBmb250LWZlYXR1cmUtc2V0dGluZ3M6ICdjYXNlJyBvbjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU2VsZWN0aW9uXG5AbWl4aW4gc2VsZWN0aW9uKCRjb2wpIHtcbiAgJGJncjogaWYoJGNvbCAhPSB0cmFuc3BhcmVudCwgcmdiYSgkY29sLCAwLjUpLCByZ2JhKDAsIDAsIDAsIDApKTtcblxuICAmOjotbW96LXNlbGVjdGlvbiB7XG4gICAgYmFja2dyb3VuZDogJGJncjtcbiAgfVxuXG4gICY6OnNlbGVjdGlvbiB7XG4gICAgYmFja2dyb3VuZDogJGJncjtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBCQVNFXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEltcG9ydHNcbkBpbXBvcnQgJy4uLy4uL2RlZnMvYnJhbmQuanMnO1xuQGltcG9ydCAnLi4vLi4vZGVmcy93ZWJzaXRlLmpzJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRm9udCBzaXplXG5AZnVuY3Rpb24gcm9sZSgkbWFwLCAkdmFsdWUpIHtcbiAgJHItbWFwOiBtYXAtZ2V0KCR2YWx1ZSwgJ21hcCcpO1xuICAkci12YWx1ZTogbWFwLWdldCgkdmFsdWUsICd2YWx1ZScpO1xuICBAcmV0dXJuIG1hcC1nZXQoJHItbWFwLCAkci12YWx1ZSk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9ucyA+IENBTENcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgdmFsdWUgYmFzZWQgb24gdGhlIGJhc2UgZm9udCBzaXplXG5AZnVuY3Rpb24gYmFzZSgkdmFsdWUpIHtcbiAgQHJldHVybiBtYXRoLmRpdigkdmFsdWUsIG1hcC1nZXQoJHJvbGVzLXJhdGlvcywgJ2xheW91dC1ncm93dGgnKSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFByb2dyZXNzaXZlIGNhbGNcbkBmdW5jdGlvbiBnZXQtcHJvZ3Jlc3NpdmUtY2FsYyhcbiAgJG1pbi1vYmotc2l6ZSxcbiAgJG1heC1vYmotc2l6ZSxcbiAgJG1pbi12cCxcbiAgJG1heC12cCxcbiAgJHZwLXVuaXQ6IHZ3XG4pIHtcbiAgQHJldHVybiBjYWxjKFxuICAgICN7cGl4ZWxhdGUoJG1pbi1vYmotc2l6ZSl9ICsgI3tzdHJpcC11bml0KCRtYXgtb2JqLXNpemUgLSAkbWluLW9iai1zaXplKX0gKlxuICAgICAgKFxuICAgICAgICAoMTAwI3skdnAtdW5pdH0gLSAje3BpeGVsYXRlKCRtaW4tdnApfSkgLyAje3N0cmlwLXVuaXQoXG4gICAgICAgICAgICAkbWF4LXZwIC0gJG1pbi12cFxuICAgICAgICAgICl9XG4gICAgICApXG4gICk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9ucyA+IFVOSVRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU3RyaXAgdW5pdFxuQGZ1bmN0aW9uIHN0cmlwLXVuaXQoJG51bWJlcikge1xuICBAaWYgdHlwZS1vZigkbnVtYmVyKSA9PSAnbnVtYmVyJyBhbmQgbm90IHVuaXRsZXNzKCRudW1iZXIpIHtcbiAgICBAcmV0dXJuIG1hdGguZGl2KCRudW1iZXIsICgkbnVtYmVyICogMCArIDEpKTtcbiAgfVxuXG4gIEByZXR1cm4gJG51bWJlcjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IFB4IHVuaXRcbkBmdW5jdGlvbiBwaXhlbGF0ZSgkdmFsdWUpIHtcbiAgQHJldHVybiAje3N0cmlwLXVuaXQoJHZhbHVlKX1QeDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IGVtL3JlbSB1bml0XG5AZnVuY3Rpb24gZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIGVtKTtcbn1cblxuQGZ1bmN0aW9uIHJlbSgkbnVtLCAkZm9udC1zaXplOiBmYWxzZSkge1xuICBAcmV0dXJuIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgcmVtKTtcbn1cblxuQGZ1bmN0aW9uIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgJHVuaXQpIHtcbiAgJGZzOiAxMHB4O1xuXG4gIEBpZiAkZm9udC1zaXplIHtcbiAgICAkZnM6ICRmb250LXNpemU7XG4gIH0gQGVsc2Uge1xuICAgICRmczogbWFwLWdldCgkdHlwb2dyYXBoeSwgJ2Jhc2VfZm9udF9zaXplJyk7XG4gIH1cblxuICBAcmV0dXJuICN7bWF0aC5kaXYoc3RyaXAtdW5pdCgkbnVtKSwgc3RyaXAtdW5pdCgkZnMpKX0jeyR1bml0fTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRGF0YSA+IFNXQVRDSEVTXG5cbkBpbXBvcnQgJy4uLy4uL2RlZnMvc3dhdGNoZXMvaW5kZXguanMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvc3dhdGNoZXMvc3dhdGNoZXNfYnJlYWtwb2ludHMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvc3dhdGNoZXMvc3dhdGNoZXNfcmF0aW9zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX3NjcmVlbnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvc3dhdGNoZXMvc3dhdGNoZXNfc3BhY2VzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRGF0YSA+IFJPTEVTXG5cbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2JvcmRlcnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfYnJlYWtwb2ludHMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfY29sb3JzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2RpbWVuc2lvbnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfcmF0aW9zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3NjcmVlbnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfc2hhZG93cyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19zcGFjZXMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfdHlwb2dyYXBoeSc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGlucyA+IFNDQUxBQklMSVRZXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU2NhbGVyXG5AbWl4aW4gc2NhbGVyKFxuICAkcHJvcGVydHksXG4gICRtaW4tc2l6ZSxcbiAgJG1heC1zaXplLFxuICAkbWluLXZ3OiBtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWluJyksXG4gICRtYXgtdnc6IG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtYXgnKVxuKSB7XG4gICN7JHByb3BlcnR5fTogI3tzdHJpcC11bml0KG1hdGguZGl2KCgkbWluLXZ3ICogMC45Nzk2KSAqICRtaW4tc2l6ZSwgMTAwMCkpfXZ3OyAvLyAwLjk3OTYgZml4ZXMgd3JvbmcgY2FsY3VsYXRpb25zIGluIENocm9tZVxuXG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6ICRtaW4tdncpIHtcbiAgICAjeyRwcm9wZXJ0eX06IGdldC1wcm9ncmVzc2l2ZS1jYWxjKCRtaW4tc2l6ZSwgJG1heC1zaXplLCAkbWluLXZ3LCAkbWF4LXZ3KTtcbiAgfVxuXG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6ICRtYXgtdncpIHtcbiAgICAjeyRwcm9wZXJ0eX06IHBpeGVsYXRlKCRtYXgtc2l6ZSk7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gUGxhY2Vob2xkZXJzID4gU0NBTEFCSUxJVFlcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBOZWdhdGl2ZVxuJXBoLW5lZ2F0aXZlIHtcbiAgaDEsXG4gIGgyLFxuICBoMyxcbiAgaDQsXG4gIGg1LFxuICBoNixcbiAgcCB7XG4gICAgY29sb3I6IG1hcC1nZXQoJHJvbGVzLWNvbC10ZXh0cywgJ25lZ2F0aXZlJyk7XG4gIH1cblxuICAubWV0YSB7XG4gICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkc3dhdGNoZXMtY29sb3JzLCAnaG9uZXkteWVsbG93JywgJ2xpZ2h0Jyk7XG4gIH1cblxuICAudGV4dC1saW5rIHtcbiAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdub3JtYWwnKTtcbiAgICBib3JkZXItYm90dG9tOiBwaXhlbGF0ZSgxcHgpIGRvdHRlZFxuICAgICAgcmdiYShtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ25vcm1hbCcpLCAwLjMzKTtcblxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnaG92ZXInKTtcbiAgICB9XG5cbiAgICAmOmFjdGl2ZSB7XG4gICAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdhY3RpdmUnKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgV2F2ZVxuJXBoLXdhdmUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDUwJTtcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi13aWR0aDogbWF0aC5kaXYobWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21heCcpLCAyKTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuXG4gID4gc3ZnIHtcbiAgICBAaW5jbHVkZSBkaW1lbnNpb25zLXNxdWFyZSgxMDAlKTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBIZWFkIHdhdmVcbiVwaC1oZWFkLXdhdmUge1xuICAkd2F2ZS1oZWlnaHQ6IGJhc2UobWFwLWdldCgkcm9sZXMtZGltZW5zaW9ucy13YXZlcywgJ2hlYWRlcicpKTtcblxuICAud2F2ZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgIHRvcDogY2FsYygxMDAlIC0gMVB4KTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IGVtKCR3YXZlLWhlaWdodCk7XG5cbiAgICAuaW5uZXIge1xuICAgICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG5cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAgIHN2ZyB7XG4gICAgICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKDEwMCUpO1xuXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICBtaW4td2lkdGg6IG1hdGguZGl2KG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtYXgnKSwgMik7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAa2V5ZnJhbWVzIHNsaWRlIHtcbiAgICBmcm9tIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgIH1cblxuICAgIHRvIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIDApO1xuICAgIH1cbiAgfVxuXG4gIC5zY3JvbGwtYnRuIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm90dG9tOiAyMHB4O1xuICAgIGxlZnQ6IDUwJTtcbiAgICB6LWluZGV4OiAxO1xuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQtZGVlcCgkc3dhdGNoZXMtY29sb3JzLCAnY29ybmZsb3dlcicsICdiYXNlJyk7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgYW5pbWF0aW9uOiBzbGlkZSAxcyBlYXNlLWluLW91dCBpbmZpbml0ZSBhbHRlcm5hdGU7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnaG92ZXInKTtcbiAgICB9XG5cbiAgICAmOmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2FjdGl2ZScpO1xuICAgIH1cblxuICAgIHN2ZyB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuICAgIH1cblxuICAgIGJvZHk6bm90KC5zY3JvbGxhYmxlKSAmIHtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUm9vdFxuLnBsYXRmb3JtcyB7XG4gIC50cmFpbGVyLXBsYXllciB7XG4gICAgbWFyZ2luLWJvdHRvbTogbWFwLWdldCgkc3dhdGNoZXMtc3BhY2VzLCAnMTUnKTtcbiAgfVxuXG4gIHVsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGxpbmUtaGVpZ2h0OiAwO1xuICB9XG5cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogbWFwLWdldCgkcm9sZXMtYnJlYWtwb2ludHMsICdwb2RjYXN0LWJhbm5lcnMnKSkge1xuICAgIHVsIHtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIH1cblxuICAgIGxpIHtcbiAgICAgIG1hcmdpbjogbWFwLWdldCgkcm9sZXMtc3BhY2VzLCAnYmFubmVyJykgMDtcbiAgICB9XG4gIH1cblxuICB1bCxcbiAgbGkge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbWFyZ2luOiAwO1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIH1cblxuICBsaSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luOiAwIG1hcC1nZXQoJHJvbGVzLXNwYWNlcywgJ2Jhbm5lcicpO1xuICB9XG5cbiAgYSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuICBzdmcge1xuICAgIGhlaWdodDogYmFzZSg4MHB4KTtcbiAgfVxufVxuIiwiLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gQ29tcG9uZW50cyA+IFBMQVlFUlxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5AdXNlICdzYXNzOm1hdGgnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IENPTE9SU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBMaWdodFxuQGZ1bmN0aW9uIGxpZ2h0KCRjb2xvciwgJHBlcmNlbnQpIHtcbiAgQHJldHVybiBtaXgoI2ZmZiwgJGNvbG9yLCAkcGVyY2VudCk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IERhcmtcbkBmdW5jdGlvbiBkYXJrKCRjb2xvciwgJHBlcmNlbnQpIHtcbiAgQHJldHVybiBtaXgoIzAwMCwgJGNvbG9yLCAkcGVyY2VudCk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogTUFQU1xuXG4kcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzOiBmYWxzZSAhZGVmYXVsdDtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIEdldCBEZWVwIFdhcm5pbmdcbi8vIERpc3BsYXlzIGEgd2FybmluZyBpZiB0aGUgcmV0cmlldmVkIHZhbHVlIGlzIGBudWxsYFxuQGZ1bmN0aW9uIG1hcC1nZXQtZGVlcC13YXJuaW5nKCR3YXJuLCAkZ2V0LCAka2V5KSB7XG4gIEBpZiBub3QgJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5ncyB7XG4gICAgQGlmICRnZXQgPT0gbnVsbCB7XG4gICAgICBAd2FybiAnTWFwIGhhcyBubyB2YWx1ZSBmb3Iga2V5IHNlYXJjaCBgI3skd2Fybn1gJztcbiAgICB9IEBlbHNlIGlmIHR5cGUtb2YoJGdldCkgIT0gJ21hcCcge1xuICAgICAgQHdhcm4gJ05vbi1tYXAgdmFsdWUgZm91bmQgZm9yIGtleSBzZWFyY2ggYCN7JHdhcm59YCwgY2Fubm90IHNlYXJjaCBmb3Iga2V5IGAjeyRrZXl9YCc7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiBudWxsO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IERlZXBcbi8vIEdpdmVuIGEgbWFwIGFuZCBhIGxpc3Qgb2Yga2V5cywgZmluZCB0aGUgdmFsdWUgYXQgdGhlIGdpdmVuIGtleVxuQGZ1bmN0aW9uIG1hcC1nZXQtZGVlcCgkbWFwLCAka2V5cy4uLikge1xuICBAaWYgbGVuZ3RoKCRrZXlzKSA9PSAxIHtcbiAgICAka2V5czogbnRoKCRrZXlzLCAxKTtcbiAgfVxuXG4gICR3YXJuOiAnI3tudGgoJGtleXMsIDEpfSc7XG4gICRsZW5ndGg6IGxlbmd0aCgka2V5cyk7XG4gICRnZXQ6IG1hcC1nZXQoJG1hcCwgbnRoKCRrZXlzLCAxKSk7XG5cbiAgQGlmICRsZW5ndGggPiAxIHtcbiAgICBAZm9yICRpIGZyb20gMiB0aHJvdWdoICRsZW5ndGgge1xuICAgICAgQGlmICRnZXQgIT0gbnVsbCBhbmQgdHlwZS1vZigkZ2V0KSA9PSAnbWFwJyB7XG4gICAgICAgICR3YXJuOiAkd2FybiArICctPiN7bnRoKCRrZXlzLCAkaSl9JztcbiAgICAgICAgJGdldDogbWFwLWdldCgkZ2V0LCBudGgoJGtleXMsICRpKSk7XG5cbiAgICAgICAgQGlmICRnZXQgPT0gbnVsbCB7XG4gICAgICAgICAgQHJldHVybiBtYXAtZ2V0LWRlZXAtd2FybmluZygkd2FybiwgJGdldCwgbnRoKCRrZXlzLCAkaSkpO1xuICAgICAgICB9XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgQHJldHVybiBtYXAtZ2V0LWRlZXAtd2FybmluZygkd2FybiwgJGdldCwgbnRoKCRrZXlzLCAkaSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGdldDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIEdldCBLZXlzXG5AZnVuY3Rpb24gZ2V0LWtleXMoJGtleXMsICRjb3VudGVyKSB7XG4gICRyZXR1cm46ICgpO1xuXG4gIEBmb3IgJGkgZnJvbSAxIHRvICRjb3VudGVyIHtcbiAgICAkcmV0dXJuOiBhcHBlbmQoJHJldHVybiwgbnRoKCRrZXlzLCAkaSkpO1xuICB9XG5cbiAgQHJldHVybiAkcmV0dXJuO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IFByZXZpb3VzIEtleVxuQGZ1bmN0aW9uIG1hcC1nZXQtcHJldi1rZXkoJG1hcCwgJGtleSkge1xuICAkaW5kZXg6IGluZGV4KCRtYXAsICRrZXkpO1xuICAkcHJldjogJGluZGV4IC0gMTtcbiAgJHJlc3VsdDogaWYoJHByZXYgPiAwLCBudGgoJG1hcCwgJHByZXYpLCBudWxsKTtcblxuICBAcmV0dXJuICRyZXN1bHQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBTZXRcbkBmdW5jdGlvbiBtYXAtc2V0KCRtYXAsICRrZXksICR2YWx1ZSkge1xuICBAcmV0dXJuIG1hcC1tZXJnZShcbiAgICAkbWFwLFxuICAgIChcbiAgICAgICRrZXk6ICR2YWx1ZVxuICAgIClcbiAgKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIFNldCBEZWVwXG5AZnVuY3Rpb24gbWFwLXNldC1kZWVwKCRtYXAsICRrZXlzLCAkdmFsdWUpIHtcbiAgJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5nczogdHJ1ZSAhZ2xvYmFsO1xuICAkbGVuZ3RoOiBsZW5ndGgoJGtleXMpO1xuICAkZ2V0LWtleXM6ICgpO1xuICAkbWFwLWxldmVsOiAoKTtcblxuICBAaWYgJGxlbmd0aCA+IDEge1xuICAgICRnZXQta2V5czogZ2V0LWtleXMoJGtleXMsICRsZW5ndGgpO1xuICAgICRtYXAtbGV2ZWw6IG1hcC1nZXQtZGVlcCgkbWFwLCAkZ2V0LWtleXMpO1xuICB9XG5cbiAgJG1lcmdlOiAoXG4gICAgbnRoKCRrZXlzLCAkbGVuZ3RoKTogJHZhbHVlXG4gICk7XG5cbiAgQGlmICRtYXAtbGV2ZWwge1xuICAgICRtZXJnZTogbWFwLW1lcmdlKCRtYXAtbGV2ZWwsICRtZXJnZSk7XG4gIH1cblxuICBAZm9yICRpIGZyb20gKCRsZW5ndGggKiAtMSArIDEpIHRocm91Z2ggLTEge1xuICAgICRqOiBhYnMoJGkpO1xuICAgICRrZXk6IG50aCgka2V5cywgJGopO1xuXG4gICAgLy8gQGRlYnVnICRnZXQta2V5cztcblxuICAgIEBpZiAkaiA+IDEge1xuICAgICAgJGdldC1rZXlzOiBnZXQta2V5cygka2V5cywgJGopO1xuICAgICAgJG1hcC1sZXZlbDogbWFwLWdldC1kZWVwKCRtYXAsICRnZXQta2V5cyk7XG5cbiAgICAgIEBpZiAkbWFwLWxldmVsIHtcbiAgICAgICAgJG1lcmdlOiBtYXAtbWVyZ2UoXG4gICAgICAgICAgJG1hcC1sZXZlbCxcbiAgICAgICAgICAoXG4gICAgICAgICAgICAka2V5OiAkbWVyZ2VcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgJG1lcmdlOiAoXG4gICAgICAgICAgJGtleTogJG1lcmdlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBAZWxzZSB7XG4gICAgICAkbWVyZ2U6IChcbiAgICAgICAgJGtleTogJG1lcmdlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gICRtYXA6IG1hcC1tZXJnZSgkbWFwLCAkbWVyZ2UpO1xuXG4gICRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3M6IGZhbHNlICFnbG9iYWw7XG5cbiAgQHJldHVybiAkbWFwO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IFVOSVRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFByb2dyZXNzaXZlIGNhbGNcbkBmdW5jdGlvbiBnZXQtcHJvZ3Jlc3NpdmUtY2FsYyhcbiAgJG1pbi1vYmotc2l6ZSxcbiAgJG1heC1vYmotc2l6ZSxcbiAgJG1pbi12cCxcbiAgJG1heC12cCxcbiAgJHZwLXVuaXQ6IHZ3XG4pIHtcbiAgQHJldHVybiBjYWxjKFxuICAgICN7JG1pbi1vYmotc2l6ZX0gKyAje3N0cmlwLXVuaXQoJG1heC1vYmotc2l6ZSAtICRtaW4tb2JqLXNpemUpfSAqXG4gICAgICAoKDEwMCN7JHZwLXVuaXR9IC0gI3skbWluLXZwfSkgLyAje3N0cmlwLXVuaXQoJG1heC12cCAtICRtaW4tdnApfSlcbiAgKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBVTklUU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTdHJpcCB1bml0XG5AZnVuY3Rpb24gc3RyaXAtdW5pdCgkbnVtYmVyKSB7XG4gIEBpZiB0eXBlLW9mKCRudW1iZXIpID09ICdudW1iZXInIGFuZCBub3QgdW5pdGxlc3MoJG51bWJlcikge1xuICAgIEByZXR1cm4gJG51bWJlciAvICgkbnVtYmVyICogMCArIDEpO1xuICB9XG5cbiAgQHJldHVybiAkbnVtYmVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgZW0vcmVtIHVuaXRcbkBmdW5jdGlvbiBlbSgkbnVtLCAkZm9udC1zaXplOiBmYWxzZSkge1xuICBAcmV0dXJuIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgZW0pO1xufVxuXG5AZnVuY3Rpb24gcmVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCByZW0pO1xufVxuXG5AZnVuY3Rpb24gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCAkdW5pdCkge1xuICAkZnM6IDEwcHg7XG5cbiAgQGlmICRmb250LXNpemUge1xuICAgICRmczogJGZvbnQtc2l6ZTtcbiAgfVxuICBAZWxzZSBpZiAkYmFzZS1odG1sLWZvbnQtc2l6ZSB7IC8vIG1ha2Ugc3VyZSB0byBkZWZpbmUgdGhpcyB2YXJpYWJsZSBvbiB5b3VyIG93blxuICAgICRmczogJGJhc2UtaHRtbC1mb250LXNpemU7XG4gIH1cblxuICBAcmV0dXJuICN7c3RyaXAtdW5pdCgkbnVtKSAvIHN0cmlwLXVuaXQoJGZzKX0jeyR1bml0fTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IHNjcmVlbiBwZXJjZW50XG5AZnVuY3Rpb24gZ2V0LXNjcmVlbi1wZXJjZW50KCR3aWR0aCwgJHNjcmVlbikge1xuICBAcmV0dXJuIHVucXVvdGUoJyN7JHdpZHRoICogMTAwIC8gJHNjcmVlbn0lJyk7XG59XG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogWi1JTkRFWEVTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdlbmVyYXRvclxuQGZ1bmN0aW9uIHotaW5kZXgoJG1hcCwgJGtleXMpIHtcbiAgJGZvdW5kLWluZGV4OiBudWxsO1xuXG4gIEBlYWNoICRrZXkgaW4gJGtleXMge1xuICAgIEBpZiAodHlwZS1vZigkbWFwKSA9PSAnbWFwJykge1xuICAgICAgJGZvdW5kLWluZGV4OiBpbmRleChtYXAta2V5cygkbWFwKSwgJGtleSk7XG4gICAgICAkbWFwOiBtYXAtZ2V0KCRtYXAsICRrZXkpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJGZvdW5kLWluZGV4OiBpbmRleCgkbWFwLCAka2V5KTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRmb3VuZC1pbmRleDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU2VydmVyXG5AZnVuY3Rpb24geigkbWFwLCAka2V5cy4uLikge1xuICBAcmV0dXJuIHotaW5kZXgoJG1hcCwgJGtleXMpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IEZPUk1TXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IElucHV0IHBsYWNlaG9sZGVyXG5AbWl4aW4gaW5wdXQtcGxhY2Vob2xkZXIoJGNvbCwgJHN0eWxlOiBpdGFsaWMpIHtcbiAgJjotbW96LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbiAgJjo6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2w7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICB9XG4gICY6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbiAgJjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2w7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICB9XG59XG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogUE9TSVRJT05TXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEFic29sdXRlIGNlbnRlcmVkXG5AbWl4aW4gYWJzb2x1dGUtY2VudGVyZWQoJHR5cGU6IGFic29sdXRlLCAkcG9zOiA1MCUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICB0b3A6ICRwb3M7XG4gIGxlZnQ6ICRwb3M7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBBYnNvbHV0ZSBjZW50ZXJlZCBYXG5AbWl4aW4gYWJzb2x1dGUtY2VudGVyZWQteCgkdHlwZTogYWJzb2x1dGUsICRwb3M6IDUwJSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIGxlZnQ6ICRwb3M7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQWJzb2x1dGUgY2VudGVyZWQgWVxuQG1peGluIGFic29sdXRlLWNlbnRlcmVkLXkoJHR5cGU6IGFic29sdXRlLCAkcG9zOiA1MCUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICB0b3A6ICRwb3M7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBTSE9SVEhBTkRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFBvc2l0aW9uc1xuQG1peGluIHBvc2l0aW9uLXN0cmV0Y2hlZCgkdHlwZTogYWJzb2x1dGUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IERpbWVuc2lvbnNcbkBtaXhpbiBkaW1lbnNpb25zLXNxdWFyZSgkdmFsdWUpIHtcbiAgd2lkdGg6ICR2YWx1ZTtcbiAgaGVpZ2h0OiAkdmFsdWU7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFBhZGRpbmdcbkBtaXhpbiBwYWRkaW5nLXYoJHZhbHVlKSB7XG4gIHBhZGRpbmctdG9wOiAkdmFsdWU7XG4gIHBhZGRpbmctYm90dG9tOiAkdmFsdWU7XG59XG5cbkBtaXhpbiBwYWRkaW5nLWgoJHZhbHVlKSB7XG4gIHBhZGRpbmctcmlnaHQ6ICR2YWx1ZTtcbiAgcGFkZGluZy1sZWZ0OiAkdmFsdWU7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcmdpblxuQG1peGluIG1hcmdpbi12KCR2YWx1ZSkge1xuICBtYXJnaW4tdG9wOiAkdmFsdWU7XG4gIG1hcmdpbi1ib3R0b206ICR2YWx1ZTtcbn1cblxuQG1peGluIG1hcmdpbi1oKCR2YWx1ZSkge1xuICBtYXJnaW4tcmlnaHQ6ICR2YWx1ZTtcbiAgbWFyZ2luLWxlZnQ6ICR2YWx1ZTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQm9yZGVyXG5AbWl4aW4gYm9yZGVyLXYoJHZhbHVlKSB7XG4gIGJvcmRlci10b3A6ICR2YWx1ZTtcbiAgYm9yZGVyLWJvdHRvbTogJHZhbHVlO1xufVxuXG5AbWl4aW4gYm9yZGVyLWgoJHZhbHVlKSB7XG4gIGJvcmRlci1yaWdodDogJHZhbHVlO1xuICBib3JkZXItbGVmdDogJHZhbHVlO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IFRZUE9HUkFQSFlcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRm9udCBzbW9vdGhpbmdcbkBtaXhpbiBmb250LXNtb290aGluZygkdmFsdWU6IGFudGlhbGlhc2VkKSB7XG4gIEBpZiAkdmFsdWUgPT0gYW50aWFsaWFzZWQge1xuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG4gIH0gQGVsc2Uge1xuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IHN1YnBpeGVsLWFudGlhbGlhc2VkO1xuICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBhdXRvO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFRleHQgdXBwZXJjYXNlXG5AbWl4aW4gdGV4dC11cHBlcmNhc2UoKSB7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIC1tb3otZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnY2FzZSc7XG4gIC13ZWJraXQtZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnY2FzZSc7XG4gIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2Nhc2UnIG9uO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTZWxlY3Rpb25cbkBtaXhpbiBzZWxlY3Rpb24oJGNvbCkge1xuICAkYmdyOiBpZigkY29sICE9IHRyYW5zcGFyZW50LCByZ2JhKCRjb2wsIDAuNSksIHJnYmEoMCwgMCwgMCwgMCkpO1xuXG4gICY6Oi1tb3otc2VsZWN0aW9uIHtcbiAgICBiYWNrZ3JvdW5kOiAkYmdyO1xuICB9XG5cbiAgJjo6c2VsZWN0aW9uIHtcbiAgICBiYWNrZ3JvdW5kOiAkYmdyO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEJBU0VcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgSW1wb3J0c1xuQGltcG9ydCAnLi4vLi4vZGVmcy9icmFuZC5qcyc7XG5AaW1wb3J0ICcuLi8uLi9kZWZzL3dlYnNpdGUuanMnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBGb250IHNpemVcbkBmdW5jdGlvbiByb2xlKCRtYXAsICR2YWx1ZSkge1xuICAkci1tYXA6IG1hcC1nZXQoJHZhbHVlLCAnbWFwJyk7XG4gICRyLXZhbHVlOiBtYXAtZ2V0KCR2YWx1ZSwgJ3ZhbHVlJyk7XG4gIEByZXR1cm4gbWFwLWdldCgkci1tYXAsICRyLXZhbHVlKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zID4gQ0FMQ1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCB2YWx1ZSBiYXNlZCBvbiB0aGUgYmFzZSBmb250IHNpemVcbkBmdW5jdGlvbiBiYXNlKCR2YWx1ZSkge1xuICBAcmV0dXJuIG1hdGguZGl2KCR2YWx1ZSwgbWFwLWdldCgkcm9sZXMtcmF0aW9zLCAnbGF5b3V0LWdyb3d0aCcpKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUHJvZ3Jlc3NpdmUgY2FsY1xuQGZ1bmN0aW9uIGdldC1wcm9ncmVzc2l2ZS1jYWxjKFxuICAkbWluLW9iai1zaXplLFxuICAkbWF4LW9iai1zaXplLFxuICAkbWluLXZwLFxuICAkbWF4LXZwLFxuICAkdnAtdW5pdDogdndcbikge1xuICBAcmV0dXJuIGNhbGMoXG4gICAgI3twaXhlbGF0ZSgkbWluLW9iai1zaXplKX0gKyAje3N0cmlwLXVuaXQoJG1heC1vYmotc2l6ZSAtICRtaW4tb2JqLXNpemUpfSAqXG4gICAgICAoXG4gICAgICAgICgxMDAjeyR2cC11bml0fSAtICN7cGl4ZWxhdGUoJG1pbi12cCl9KSAvICN7c3RyaXAtdW5pdChcbiAgICAgICAgICAgICRtYXgtdnAgLSAkbWluLXZwXG4gICAgICAgICAgKX1cbiAgICAgIClcbiAgKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zID4gVU5JVFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTdHJpcCB1bml0XG5AZnVuY3Rpb24gc3RyaXAtdW5pdCgkbnVtYmVyKSB7XG4gIEBpZiB0eXBlLW9mKCRudW1iZXIpID09ICdudW1iZXInIGFuZCBub3QgdW5pdGxlc3MoJG51bWJlcikge1xuICAgIEByZXR1cm4gbWF0aC5kaXYoJG51bWJlciwgKCRudW1iZXIgKiAwICsgMSkpO1xuICB9XG5cbiAgQHJldHVybiAkbnVtYmVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgUHggdW5pdFxuQGZ1bmN0aW9uIHBpeGVsYXRlKCR2YWx1ZSkge1xuICBAcmV0dXJuICN7c3RyaXAtdW5pdCgkdmFsdWUpfVB4O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgZW0vcmVtIHVuaXRcbkBmdW5jdGlvbiBlbSgkbnVtLCAkZm9udC1zaXplOiBmYWxzZSkge1xuICBAcmV0dXJuIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgZW0pO1xufVxuXG5AZnVuY3Rpb24gcmVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCByZW0pO1xufVxuXG5AZnVuY3Rpb24gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCAkdW5pdCkge1xuICAkZnM6IDEwcHg7XG5cbiAgQGlmICRmb250LXNpemUge1xuICAgICRmczogJGZvbnQtc2l6ZTtcbiAgfSBAZWxzZSB7XG4gICAgJGZzOiBtYXAtZ2V0KCR0eXBvZ3JhcGh5LCAnYmFzZV9mb250X3NpemUnKTtcbiAgfVxuXG4gIEByZXR1cm4gI3ttYXRoLmRpdihzdHJpcC11bml0KCRudW0pLCBzdHJpcC11bml0KCRmcykpfSN7JHVuaXR9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBEYXRhID4gU1dBVENIRVNcblxuQGltcG9ydCAnLi4vLi4vZGVmcy9zd2F0Y2hlcy9pbmRleC5qcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19icmVha3BvaW50cyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19yYXRpb3MnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvc3dhdGNoZXMvc3dhdGNoZXNfc2NyZWVucyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19zcGFjZXMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBEYXRhID4gUk9MRVNcblxuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfYm9yZGVycyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19icmVha3BvaW50cyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19jb2xvcnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfZGltZW5zaW9ucyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19yYXRpb3MnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfc2NyZWVucyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19zaGFkb3dzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3NwYWNlcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc190eXBvZ3JhcGh5JztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zID4gU0NBTEFCSUxJVFlcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTY2FsZXJcbkBtaXhpbiBzY2FsZXIoXG4gICRwcm9wZXJ0eSxcbiAgJG1pbi1zaXplLFxuICAkbWF4LXNpemUsXG4gICRtaW4tdnc6IG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtaW4nKSxcbiAgJG1heC12dzogbWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21heCcpXG4pIHtcbiAgI3skcHJvcGVydHl9OiAje3N0cmlwLXVuaXQobWF0aC5kaXYoKCRtaW4tdncgKiAwLjk3OTYpICogJG1pbi1zaXplLCAxMDAwKSl9dnc7IC8vIDAuOTc5NiBmaXhlcyB3cm9uZyBjYWxjdWxhdGlvbnMgaW4gQ2hyb21lXG5cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogJG1pbi12dykge1xuICAgICN7JHByb3BlcnR5fTogZ2V0LXByb2dyZXNzaXZlLWNhbGMoJG1pbi1zaXplLCAkbWF4LXNpemUsICRtaW4tdncsICRtYXgtdncpO1xuICB9XG5cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogJG1heC12dykge1xuICAgICN7JHByb3BlcnR5fTogcGl4ZWxhdGUoJG1heC1zaXplKTtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBQbGFjZWhvbGRlcnMgPiBTQ0FMQUJJTElUWVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE5lZ2F0aXZlXG4lcGgtbmVnYXRpdmUge1xuICBoMSxcbiAgaDIsXG4gIGgzLFxuICBoNCxcbiAgaDUsXG4gIGg2LFxuICBwIHtcbiAgICBjb2xvcjogbWFwLWdldCgkcm9sZXMtY29sLXRleHRzLCAnbmVnYXRpdmUnKTtcbiAgfVxuXG4gIC5tZXRhIHtcbiAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRzd2F0Y2hlcy1jb2xvcnMsICdob25leS15ZWxsb3cnLCAnbGlnaHQnKTtcbiAgfVxuXG4gIC50ZXh0LWxpbmsge1xuICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ25vcm1hbCcpO1xuICAgIGJvcmRlci1ib3R0b206IHBpeGVsYXRlKDFweCkgZG90dGVkXG4gICAgICByZ2JhKG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnbm9ybWFsJyksIDAuMzMpO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdob3ZlcicpO1xuICAgIH1cblxuICAgICY6YWN0aXZlIHtcbiAgICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2FjdGl2ZScpO1xuICAgIH1cbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBXYXZlXG4lcGgtd2F2ZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogNTAlO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLXdpZHRoOiBtYXRoLmRpdihtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWF4JyksIDIpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG5cbiAgPiBzdmcge1xuICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKDEwMCUpO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEhlYWQgd2F2ZVxuJXBoLWhlYWQtd2F2ZSB7XG4gICR3YXZlLWhlaWdodDogYmFzZShtYXAtZ2V0KCRyb2xlcy1kaW1lbnNpb25zLXdhdmVzLCAnaGVhZGVyJykpO1xuXG4gIC53YXZlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgdG9wOiBjYWxjKDEwMCUgLSAxUHgpO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogZW0oJHdhdmUtaGVpZ2h0KTtcblxuICAgIC5pbm5lciB7XG4gICAgICBAaW5jbHVkZSBkaW1lbnNpb25zLXNxdWFyZSgxMDAlKTtcblxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgICAgc3ZnIHtcbiAgICAgICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG5cbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIG1pbi13aWR0aDogbWF0aC5kaXYobWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21heCcpLCAyKTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBrZXlmcmFtZXMgc2xpZGUge1xuICAgIGZyb20ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgfVxuXG4gICAgdG8ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgMCk7XG4gICAgfVxuICB9XG5cbiAgLnNjcm9sbC1idG4ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3R0b206IDIwcHg7XG4gICAgbGVmdDogNTAlO1xuICAgIHotaW5kZXg6IDE7XG4gICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRzd2F0Y2hlcy1jb2xvcnMsICdjb3JuZmxvd2VyJywgJ2Jhc2UnKTtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICBhbmltYXRpb246IHNsaWRlIDFzIGVhc2UtaW4tb3V0IGluZmluaXRlIGFsdGVybmF0ZTtcblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdob3ZlcicpO1xuICAgIH1cblxuICAgICY6YWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnYWN0aXZlJyk7XG4gICAgfVxuXG4gICAgc3ZnIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gICAgfVxuXG4gICAgYm9keTpub3QoLnNjcm9sbGFibGUpICYge1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBSb290XG4ucGxheWVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gID4gKiB7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjFzIGVhc2UtaW4tb3V0O1xuICB9XG5cbiAgaWZyYW1lIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogMTtcbiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tYm90dG9tOiBtYXAtZ2V0KCRyb2xlcy1zcGFjZXMsICdwYW5lbCcpO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgYm9yZGVyOiBwaXhlbGF0ZSgxcHgpIHNvbGlkXG4gICAgICBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1ib3JkZXJzLCAncGxheWVyJywgJ25vcm1hbCcpO1xuICAgIGJvcmRlci1yYWRpdXM6IG1hcC1nZXQoJHJvbGVzLWJvcmRlcnMtcmFkaXVzZXMsICdibG9jaycpO1xuICAgIGJveC1zaGFkb3c6IG1hcC1nZXQoJHJvbGVzLXNoYWRvd3MsICdwbGF5ZXInKTtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG5cbiAgOmdsb2JhbCguc3Bpbm5lcikge1xuICAgIEBpbmNsdWRlIGFic29sdXRlLWNlbnRlcmVkKCk7XG4gIH1cbn1cbiIsIi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIENvbXBvbmVudHMgPiBSaWJib25cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuQHVzZSAnc2FzczptYXRoJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBDT0xPUlNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTGlnaHRcbkBmdW5jdGlvbiBsaWdodCgkY29sb3IsICRwZXJjZW50KSB7XG4gIEByZXR1cm4gbWl4KCNmZmYsICRjb2xvciwgJHBlcmNlbnQpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBEYXJrXG5AZnVuY3Rpb24gZGFyaygkY29sb3IsICRwZXJjZW50KSB7XG4gIEByZXR1cm4gbWl4KCMwMDAsICRjb2xvciwgJHBlcmNlbnQpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IE1BUFNcblxuJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5nczogZmFsc2UgIWRlZmF1bHQ7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgRGVlcCBXYXJuaW5nXG4vLyBEaXNwbGF5cyBhIHdhcm5pbmcgaWYgdGhlIHJldHJpZXZlZCB2YWx1ZSBpcyBgbnVsbGBcbkBmdW5jdGlvbiBtYXAtZ2V0LWRlZXAtd2FybmluZygkd2FybiwgJGdldCwgJGtleSkge1xuICBAaWYgbm90ICRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3Mge1xuICAgIEBpZiAkZ2V0ID09IG51bGwge1xuICAgICAgQHdhcm4gJ01hcCBoYXMgbm8gdmFsdWUgZm9yIGtleSBzZWFyY2ggYCN7JHdhcm59YCc7XG4gICAgfSBAZWxzZSBpZiB0eXBlLW9mKCRnZXQpICE9ICdtYXAnIHtcbiAgICAgIEB3YXJuICdOb24tbWFwIHZhbHVlIGZvdW5kIGZvciBrZXkgc2VhcmNoIGAjeyR3YXJufWAsIGNhbm5vdCBzZWFyY2ggZm9yIGtleSBgI3ska2V5fWAnO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gbnVsbDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIEdldCBEZWVwXG4vLyBHaXZlbiBhIG1hcCBhbmQgYSBsaXN0IG9mIGtleXMsIGZpbmQgdGhlIHZhbHVlIGF0IHRoZSBnaXZlbiBrZXlcbkBmdW5jdGlvbiBtYXAtZ2V0LWRlZXAoJG1hcCwgJGtleXMuLi4pIHtcbiAgQGlmIGxlbmd0aCgka2V5cykgPT0gMSB7XG4gICAgJGtleXM6IG50aCgka2V5cywgMSk7XG4gIH1cblxuICAkd2FybjogJyN7bnRoKCRrZXlzLCAxKX0nO1xuICAkbGVuZ3RoOiBsZW5ndGgoJGtleXMpO1xuICAkZ2V0OiBtYXAtZ2V0KCRtYXAsIG50aCgka2V5cywgMSkpO1xuXG4gIEBpZiAkbGVuZ3RoID4gMSB7XG4gICAgQGZvciAkaSBmcm9tIDIgdGhyb3VnaCAkbGVuZ3RoIHtcbiAgICAgIEBpZiAkZ2V0ICE9IG51bGwgYW5kIHR5cGUtb2YoJGdldCkgPT0gJ21hcCcge1xuICAgICAgICAkd2FybjogJHdhcm4gKyAnLT4je250aCgka2V5cywgJGkpfSc7XG4gICAgICAgICRnZXQ6IG1hcC1nZXQoJGdldCwgbnRoKCRrZXlzLCAkaSkpO1xuXG4gICAgICAgIEBpZiAkZ2V0ID09IG51bGwge1xuICAgICAgICAgIEByZXR1cm4gbWFwLWdldC1kZWVwLXdhcm5pbmcoJHdhcm4sICRnZXQsIG50aCgka2V5cywgJGkpKTtcbiAgICAgICAgfVxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIEByZXR1cm4gbWFwLWdldC1kZWVwLXdhcm5pbmcoJHdhcm4sICRnZXQsIG50aCgka2V5cywgJGkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRnZXQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgS2V5c1xuQGZ1bmN0aW9uIGdldC1rZXlzKCRrZXlzLCAkY291bnRlcikge1xuICAkcmV0dXJuOiAoKTtcblxuICBAZm9yICRpIGZyb20gMSB0byAkY291bnRlciB7XG4gICAgJHJldHVybjogYXBwZW5kKCRyZXR1cm4sIG50aCgka2V5cywgJGkpKTtcbiAgfVxuXG4gIEByZXR1cm4gJHJldHVybjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIEdldCBQcmV2aW91cyBLZXlcbkBmdW5jdGlvbiBtYXAtZ2V0LXByZXYta2V5KCRtYXAsICRrZXkpIHtcbiAgJGluZGV4OiBpbmRleCgkbWFwLCAka2V5KTtcbiAgJHByZXY6ICRpbmRleCAtIDE7XG4gICRyZXN1bHQ6IGlmKCRwcmV2ID4gMCwgbnRoKCRtYXAsICRwcmV2KSwgbnVsbCk7XG5cbiAgQHJldHVybiAkcmVzdWx0O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgU2V0XG5AZnVuY3Rpb24gbWFwLXNldCgkbWFwLCAka2V5LCAkdmFsdWUpIHtcbiAgQHJldHVybiBtYXAtbWVyZ2UoXG4gICAgJG1hcCxcbiAgICAoXG4gICAgICAka2V5OiAkdmFsdWVcbiAgICApXG4gICk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBTZXQgRGVlcFxuQGZ1bmN0aW9uIG1hcC1zZXQtZGVlcCgkbWFwLCAka2V5cywgJHZhbHVlKSB7XG4gICRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3M6IHRydWUgIWdsb2JhbDtcbiAgJGxlbmd0aDogbGVuZ3RoKCRrZXlzKTtcbiAgJGdldC1rZXlzOiAoKTtcbiAgJG1hcC1sZXZlbDogKCk7XG5cbiAgQGlmICRsZW5ndGggPiAxIHtcbiAgICAkZ2V0LWtleXM6IGdldC1rZXlzKCRrZXlzLCAkbGVuZ3RoKTtcbiAgICAkbWFwLWxldmVsOiBtYXAtZ2V0LWRlZXAoJG1hcCwgJGdldC1rZXlzKTtcbiAgfVxuXG4gICRtZXJnZTogKFxuICAgIG50aCgka2V5cywgJGxlbmd0aCk6ICR2YWx1ZVxuICApO1xuXG4gIEBpZiAkbWFwLWxldmVsIHtcbiAgICAkbWVyZ2U6IG1hcC1tZXJnZSgkbWFwLWxldmVsLCAkbWVyZ2UpO1xuICB9XG5cbiAgQGZvciAkaSBmcm9tICgkbGVuZ3RoICogLTEgKyAxKSB0aHJvdWdoIC0xIHtcbiAgICAkajogYWJzKCRpKTtcbiAgICAka2V5OiBudGgoJGtleXMsICRqKTtcblxuICAgIC8vIEBkZWJ1ZyAkZ2V0LWtleXM7XG5cbiAgICBAaWYgJGogPiAxIHtcbiAgICAgICRnZXQta2V5czogZ2V0LWtleXMoJGtleXMsICRqKTtcbiAgICAgICRtYXAtbGV2ZWw6IG1hcC1nZXQtZGVlcCgkbWFwLCAkZ2V0LWtleXMpO1xuXG4gICAgICBAaWYgJG1hcC1sZXZlbCB7XG4gICAgICAgICRtZXJnZTogbWFwLW1lcmdlKFxuICAgICAgICAgICRtYXAtbGV2ZWwsXG4gICAgICAgICAgKFxuICAgICAgICAgICAgJGtleTogJG1lcmdlXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSBAZWxzZSB7XG4gICAgICAgICRtZXJnZTogKFxuICAgICAgICAgICRrZXk6ICRtZXJnZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gQGVsc2Uge1xuICAgICAgJG1lcmdlOiAoXG4gICAgICAgICRrZXk6ICRtZXJnZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAkbWFwOiBtYXAtbWVyZ2UoJG1hcCwgJG1lcmdlKTtcblxuICAkcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzOiBmYWxzZSAhZ2xvYmFsO1xuXG4gIEByZXR1cm4gJG1hcDtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBVTklUU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBQcm9ncmVzc2l2ZSBjYWxjXG5AZnVuY3Rpb24gZ2V0LXByb2dyZXNzaXZlLWNhbGMoXG4gICRtaW4tb2JqLXNpemUsXG4gICRtYXgtb2JqLXNpemUsXG4gICRtaW4tdnAsXG4gICRtYXgtdnAsXG4gICR2cC11bml0OiB2d1xuKSB7XG4gIEByZXR1cm4gY2FsYyhcbiAgICAjeyRtaW4tb2JqLXNpemV9ICsgI3tzdHJpcC11bml0KCRtYXgtb2JqLXNpemUgLSAkbWluLW9iai1zaXplKX0gKlxuICAgICAgKCgxMDAjeyR2cC11bml0fSAtICN7JG1pbi12cH0pIC8gI3tzdHJpcC11bml0KCRtYXgtdnAgLSAkbWluLXZwKX0pXG4gICk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogVU5JVFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU3RyaXAgdW5pdFxuQGZ1bmN0aW9uIHN0cmlwLXVuaXQoJG51bWJlcikge1xuICBAaWYgdHlwZS1vZigkbnVtYmVyKSA9PSAnbnVtYmVyJyBhbmQgbm90IHVuaXRsZXNzKCRudW1iZXIpIHtcbiAgICBAcmV0dXJuICRudW1iZXIgLyAoJG51bWJlciAqIDAgKyAxKTtcbiAgfVxuXG4gIEByZXR1cm4gJG51bWJlcjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IGVtL3JlbSB1bml0XG5AZnVuY3Rpb24gZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIGVtKTtcbn1cblxuQGZ1bmN0aW9uIHJlbSgkbnVtLCAkZm9udC1zaXplOiBmYWxzZSkge1xuICBAcmV0dXJuIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgcmVtKTtcbn1cblxuQGZ1bmN0aW9uIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgJHVuaXQpIHtcbiAgJGZzOiAxMHB4O1xuXG4gIEBpZiAkZm9udC1zaXplIHtcbiAgICAkZnM6ICRmb250LXNpemU7XG4gIH1cbiAgQGVsc2UgaWYgJGJhc2UtaHRtbC1mb250LXNpemUgeyAvLyBtYWtlIHN1cmUgdG8gZGVmaW5lIHRoaXMgdmFyaWFibGUgb24geW91ciBvd25cbiAgICAkZnM6ICRiYXNlLWh0bWwtZm9udC1zaXplO1xuICB9XG5cbiAgQHJldHVybiAje3N0cmlwLXVuaXQoJG51bSkgLyBzdHJpcC11bml0KCRmcyl9I3skdW5pdH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBzY3JlZW4gcGVyY2VudFxuQGZ1bmN0aW9uIGdldC1zY3JlZW4tcGVyY2VudCgkd2lkdGgsICRzY3JlZW4pIHtcbiAgQHJldHVybiB1bnF1b3RlKCcjeyR3aWR0aCAqIDEwMCAvICRzY3JlZW59JScpO1xufVxuXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IFotSU5ERVhFU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZW5lcmF0b3JcbkBmdW5jdGlvbiB6LWluZGV4KCRtYXAsICRrZXlzKSB7XG4gICRmb3VuZC1pbmRleDogbnVsbDtcblxuICBAZWFjaCAka2V5IGluICRrZXlzIHtcbiAgICBAaWYgKHR5cGUtb2YoJG1hcCkgPT0gJ21hcCcpIHtcbiAgICAgICRmb3VuZC1pbmRleDogaW5kZXgobWFwLWtleXMoJG1hcCksICRrZXkpO1xuICAgICAgJG1hcDogbWFwLWdldCgkbWFwLCAka2V5KTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRmb3VuZC1pbmRleDogaW5kZXgoJG1hcCwgJGtleSk7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkZm91bmQtaW5kZXg7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFNlcnZlclxuQGZ1bmN0aW9uIHooJG1hcCwgJGtleXMuLi4pIHtcbiAgQHJldHVybiB6LWluZGV4KCRtYXAsICRrZXlzKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBGT1JNU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBJbnB1dCBwbGFjZWhvbGRlclxuQG1peGluIGlucHV0LXBsYWNlaG9sZGVyKCRjb2wsICRzdHlsZTogaXRhbGljKSB7XG4gICY6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2w7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICB9XG4gICY6Oi1tb3otcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxuICAmOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2w7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICB9XG4gICY6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxufVxuXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IFBPU0lUSU9OU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBBYnNvbHV0ZSBjZW50ZXJlZFxuQG1peGluIGFic29sdXRlLWNlbnRlcmVkKCR0eXBlOiBhYnNvbHV0ZSwgJHBvczogNTAlKSB7XG4gIHBvc2l0aW9uOiAkdHlwZTtcbiAgdG9wOiAkcG9zO1xuICBsZWZ0OiAkcG9zO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQWJzb2x1dGUgY2VudGVyZWQgWFxuQG1peGluIGFic29sdXRlLWNlbnRlcmVkLXgoJHR5cGU6IGFic29sdXRlLCAkcG9zOiA1MCUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICBsZWZ0OiAkcG9zO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEFic29sdXRlIGNlbnRlcmVkIFlcbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXJlZC15KCR0eXBlOiBhYnNvbHV0ZSwgJHBvczogNTAlKSB7XG4gIHBvc2l0aW9uOiAkdHlwZTtcbiAgdG9wOiAkcG9zO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogU0hPUlRIQU5EU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBQb3NpdGlvbnNcbkBtaXhpbiBwb3NpdGlvbi1zdHJldGNoZWQoJHR5cGU6IGFic29sdXRlKSB7XG4gIHBvc2l0aW9uOiAkdHlwZTtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBEaW1lbnNpb25zXG5AbWl4aW4gZGltZW5zaW9ucy1zcXVhcmUoJHZhbHVlKSB7XG4gIHdpZHRoOiAkdmFsdWU7XG4gIGhlaWdodDogJHZhbHVlO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBQYWRkaW5nXG5AbWl4aW4gcGFkZGluZy12KCR2YWx1ZSkge1xuICBwYWRkaW5nLXRvcDogJHZhbHVlO1xuICBwYWRkaW5nLWJvdHRvbTogJHZhbHVlO1xufVxuXG5AbWl4aW4gcGFkZGluZy1oKCR2YWx1ZSkge1xuICBwYWRkaW5nLXJpZ2h0OiAkdmFsdWU7XG4gIHBhZGRpbmctbGVmdDogJHZhbHVlO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXJnaW5cbkBtaXhpbiBtYXJnaW4tdigkdmFsdWUpIHtcbiAgbWFyZ2luLXRvcDogJHZhbHVlO1xuICBtYXJnaW4tYm90dG9tOiAkdmFsdWU7XG59XG5cbkBtaXhpbiBtYXJnaW4taCgkdmFsdWUpIHtcbiAgbWFyZ2luLXJpZ2h0OiAkdmFsdWU7XG4gIG1hcmdpbi1sZWZ0OiAkdmFsdWU7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEJvcmRlclxuQG1peGluIGJvcmRlci12KCR2YWx1ZSkge1xuICBib3JkZXItdG9wOiAkdmFsdWU7XG4gIGJvcmRlci1ib3R0b206ICR2YWx1ZTtcbn1cblxuQG1peGluIGJvcmRlci1oKCR2YWx1ZSkge1xuICBib3JkZXItcmlnaHQ6ICR2YWx1ZTtcbiAgYm9yZGVyLWxlZnQ6ICR2YWx1ZTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBUWVBPR1JBUEhZXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEZvbnQgc21vb3RoaW5nXG5AbWl4aW4gZm9udC1zbW9vdGhpbmcoJHZhbHVlOiBhbnRpYWxpYXNlZCkge1xuICBAaWYgJHZhbHVlID09IGFudGlhbGlhc2VkIHtcbiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICB9IEBlbHNlIHtcbiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBzdWJwaXhlbC1hbnRpYWxpYXNlZDtcbiAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogYXV0bztcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBUZXh0IHVwcGVyY2FzZVxuQG1peGluIHRleHQtdXBwZXJjYXNlKCkge1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAtbW96LWZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2Nhc2UnO1xuICAtd2Via2l0LWZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2Nhc2UnO1xuICBmb250LWZlYXR1cmUtc2V0dGluZ3M6ICdjYXNlJyBvbjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU2VsZWN0aW9uXG5AbWl4aW4gc2VsZWN0aW9uKCRjb2wpIHtcbiAgJGJncjogaWYoJGNvbCAhPSB0cmFuc3BhcmVudCwgcmdiYSgkY29sLCAwLjUpLCByZ2JhKDAsIDAsIDAsIDApKTtcblxuICAmOjotbW96LXNlbGVjdGlvbiB7XG4gICAgYmFja2dyb3VuZDogJGJncjtcbiAgfVxuXG4gICY6OnNlbGVjdGlvbiB7XG4gICAgYmFja2dyb3VuZDogJGJncjtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBCQVNFXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEltcG9ydHNcbkBpbXBvcnQgJy4uLy4uL2RlZnMvYnJhbmQuanMnO1xuQGltcG9ydCAnLi4vLi4vZGVmcy93ZWJzaXRlLmpzJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRm9udCBzaXplXG5AZnVuY3Rpb24gcm9sZSgkbWFwLCAkdmFsdWUpIHtcbiAgJHItbWFwOiBtYXAtZ2V0KCR2YWx1ZSwgJ21hcCcpO1xuICAkci12YWx1ZTogbWFwLWdldCgkdmFsdWUsICd2YWx1ZScpO1xuICBAcmV0dXJuIG1hcC1nZXQoJHItbWFwLCAkci12YWx1ZSk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9ucyA+IENBTENcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgdmFsdWUgYmFzZWQgb24gdGhlIGJhc2UgZm9udCBzaXplXG5AZnVuY3Rpb24gYmFzZSgkdmFsdWUpIHtcbiAgQHJldHVybiBtYXRoLmRpdigkdmFsdWUsIG1hcC1nZXQoJHJvbGVzLXJhdGlvcywgJ2xheW91dC1ncm93dGgnKSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFByb2dyZXNzaXZlIGNhbGNcbkBmdW5jdGlvbiBnZXQtcHJvZ3Jlc3NpdmUtY2FsYyhcbiAgJG1pbi1vYmotc2l6ZSxcbiAgJG1heC1vYmotc2l6ZSxcbiAgJG1pbi12cCxcbiAgJG1heC12cCxcbiAgJHZwLXVuaXQ6IHZ3XG4pIHtcbiAgQHJldHVybiBjYWxjKFxuICAgICN7cGl4ZWxhdGUoJG1pbi1vYmotc2l6ZSl9ICsgI3tzdHJpcC11bml0KCRtYXgtb2JqLXNpemUgLSAkbWluLW9iai1zaXplKX0gKlxuICAgICAgKFxuICAgICAgICAoMTAwI3skdnAtdW5pdH0gLSAje3BpeGVsYXRlKCRtaW4tdnApfSkgLyAje3N0cmlwLXVuaXQoXG4gICAgICAgICAgICAkbWF4LXZwIC0gJG1pbi12cFxuICAgICAgICAgICl9XG4gICAgICApXG4gICk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9ucyA+IFVOSVRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU3RyaXAgdW5pdFxuQGZ1bmN0aW9uIHN0cmlwLXVuaXQoJG51bWJlcikge1xuICBAaWYgdHlwZS1vZigkbnVtYmVyKSA9PSAnbnVtYmVyJyBhbmQgbm90IHVuaXRsZXNzKCRudW1iZXIpIHtcbiAgICBAcmV0dXJuIG1hdGguZGl2KCRudW1iZXIsICgkbnVtYmVyICogMCArIDEpKTtcbiAgfVxuXG4gIEByZXR1cm4gJG51bWJlcjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IFB4IHVuaXRcbkBmdW5jdGlvbiBwaXhlbGF0ZSgkdmFsdWUpIHtcbiAgQHJldHVybiAje3N0cmlwLXVuaXQoJHZhbHVlKX1QeDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IGVtL3JlbSB1bml0XG5AZnVuY3Rpb24gZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIGVtKTtcbn1cblxuQGZ1bmN0aW9uIHJlbSgkbnVtLCAkZm9udC1zaXplOiBmYWxzZSkge1xuICBAcmV0dXJuIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgcmVtKTtcbn1cblxuQGZ1bmN0aW9uIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgJHVuaXQpIHtcbiAgJGZzOiAxMHB4O1xuXG4gIEBpZiAkZm9udC1zaXplIHtcbiAgICAkZnM6ICRmb250LXNpemU7XG4gIH0gQGVsc2Uge1xuICAgICRmczogbWFwLWdldCgkdHlwb2dyYXBoeSwgJ2Jhc2VfZm9udF9zaXplJyk7XG4gIH1cblxuICBAcmV0dXJuICN7bWF0aC5kaXYoc3RyaXAtdW5pdCgkbnVtKSwgc3RyaXAtdW5pdCgkZnMpKX0jeyR1bml0fTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRGF0YSA+IFNXQVRDSEVTXG5cbkBpbXBvcnQgJy4uLy4uL2RlZnMvc3dhdGNoZXMvaW5kZXguanMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvc3dhdGNoZXMvc3dhdGNoZXNfYnJlYWtwb2ludHMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvc3dhdGNoZXMvc3dhdGNoZXNfcmF0aW9zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX3NjcmVlbnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvc3dhdGNoZXMvc3dhdGNoZXNfc3BhY2VzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRGF0YSA+IFJPTEVTXG5cbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2JvcmRlcnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfYnJlYWtwb2ludHMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfY29sb3JzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2RpbWVuc2lvbnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfcmF0aW9zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3NjcmVlbnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfc2hhZG93cyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19zcGFjZXMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfdHlwb2dyYXBoeSc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGlucyA+IFNDQUxBQklMSVRZXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU2NhbGVyXG5AbWl4aW4gc2NhbGVyKFxuICAkcHJvcGVydHksXG4gICRtaW4tc2l6ZSxcbiAgJG1heC1zaXplLFxuICAkbWluLXZ3OiBtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWluJyksXG4gICRtYXgtdnc6IG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtYXgnKVxuKSB7XG4gICN7JHByb3BlcnR5fTogI3tzdHJpcC11bml0KG1hdGguZGl2KCgkbWluLXZ3ICogMC45Nzk2KSAqICRtaW4tc2l6ZSwgMTAwMCkpfXZ3OyAvLyAwLjk3OTYgZml4ZXMgd3JvbmcgY2FsY3VsYXRpb25zIGluIENocm9tZVxuXG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6ICRtaW4tdncpIHtcbiAgICAjeyRwcm9wZXJ0eX06IGdldC1wcm9ncmVzc2l2ZS1jYWxjKCRtaW4tc2l6ZSwgJG1heC1zaXplLCAkbWluLXZ3LCAkbWF4LXZ3KTtcbiAgfVxuXG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6ICRtYXgtdncpIHtcbiAgICAjeyRwcm9wZXJ0eX06IHBpeGVsYXRlKCRtYXgtc2l6ZSk7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gUGxhY2Vob2xkZXJzID4gU0NBTEFCSUxJVFlcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBOZWdhdGl2ZVxuJXBoLW5lZ2F0aXZlIHtcbiAgaDEsXG4gIGgyLFxuICBoMyxcbiAgaDQsXG4gIGg1LFxuICBoNixcbiAgcCB7XG4gICAgY29sb3I6IG1hcC1nZXQoJHJvbGVzLWNvbC10ZXh0cywgJ25lZ2F0aXZlJyk7XG4gIH1cblxuICAubWV0YSB7XG4gICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkc3dhdGNoZXMtY29sb3JzLCAnaG9uZXkteWVsbG93JywgJ2xpZ2h0Jyk7XG4gIH1cblxuICAudGV4dC1saW5rIHtcbiAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdub3JtYWwnKTtcbiAgICBib3JkZXItYm90dG9tOiBwaXhlbGF0ZSgxcHgpIGRvdHRlZFxuICAgICAgcmdiYShtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ25vcm1hbCcpLCAwLjMzKTtcblxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnaG92ZXInKTtcbiAgICB9XG5cbiAgICAmOmFjdGl2ZSB7XG4gICAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdhY3RpdmUnKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgV2F2ZVxuJXBoLXdhdmUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDUwJTtcbiAgd2lkdGg6IDEwMCU7XG4gIG1pbi13aWR0aDogbWF0aC5kaXYobWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21heCcpLCAyKTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuXG4gID4gc3ZnIHtcbiAgICBAaW5jbHVkZSBkaW1lbnNpb25zLXNxdWFyZSgxMDAlKTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBIZWFkIHdhdmVcbiVwaC1oZWFkLXdhdmUge1xuICAkd2F2ZS1oZWlnaHQ6IGJhc2UobWFwLWdldCgkcm9sZXMtZGltZW5zaW9ucy13YXZlcywgJ2hlYWRlcicpKTtcblxuICAud2F2ZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgIHRvcDogY2FsYygxMDAlIC0gMVB4KTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IGVtKCR3YXZlLWhlaWdodCk7XG5cbiAgICAuaW5uZXIge1xuICAgICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG5cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAgIHN2ZyB7XG4gICAgICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKDEwMCUpO1xuXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICBtaW4td2lkdGg6IG1hdGguZGl2KG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtYXgnKSwgMik7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAa2V5ZnJhbWVzIHNsaWRlIHtcbiAgICBmcm9tIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgIH1cblxuICAgIHRvIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIDApO1xuICAgIH1cbiAgfVxuXG4gIC5zY3JvbGwtYnRuIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm90dG9tOiAyMHB4O1xuICAgIGxlZnQ6IDUwJTtcbiAgICB6LWluZGV4OiAxO1xuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQtZGVlcCgkc3dhdGNoZXMtY29sb3JzLCAnY29ybmZsb3dlcicsICdiYXNlJyk7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgYW5pbWF0aW9uOiBzbGlkZSAxcyBlYXNlLWluLW91dCBpbmZpbml0ZSBhbHRlcm5hdGU7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnaG92ZXInKTtcbiAgICB9XG5cbiAgICAmOmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2FjdGl2ZScpO1xuICAgIH1cblxuICAgIHN2ZyB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuICAgIH1cblxuICAgIGJvZHk6bm90KC5zY3JvbGxhYmxlKSAmIHtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgVmFyaWFibGVzXG4kb2Zmc2V0OiAxMHB4O1xuJHNpemU6IDEwMHB4O1xuJGJnci1jb2xvcjogbWFwLWdldC1kZWVwKCRzd2F0Y2hlcy1jb2xvcnMsICdob25leS15ZWxsb3cnLCAnYmFzZScpO1xuJHRleHQtY29sb3I6IG1hcC1nZXQoJHJvbGVzLWNvbC10ZXh0cywgJ25lZ2F0aXZlJyk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFJvb3Rcbi5yaWJib24ge1xuICBAaW5jbHVkZSBkaW1lbnNpb25zLXNxdWFyZSgkc2l6ZSk7XG5cbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IC0kb2Zmc2V0O1xuICByaWdodDogLSRvZmZzZXQ7XG4gIHotaW5kZXg6IDI7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuXG4gICY6OmJlZm9yZSxcbiAgJjo6YWZ0ZXIge1xuICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKCRvZmZzZXQpO1xuXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHotaW5kZXg6IDA7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgY29udGVudDogJyAnO1xuICAgIGJhY2tncm91bmQ6IGRhcmtlbigkYmdyLWNvbG9yLCAxNSUpO1xuICB9XG5cbiAgJjo6YmVmb3JlIHtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgfVxuXG4gICY6OmFmdGVyIHtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7XG4gIH1cblxuICA+IGRpdiB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDE7XG4gICAgd2lkdGg6IDE0MS41JTsgLy8gQmFzZWQgb24gcHl0aGFnb3JlYW4gdGhlb3JlbSB+IHNxcnQoMmNeMilcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwMCUpO1xuXG4gICAgPiBzcGFuIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgcGFkZGluZzogbWFwLWdldCgkc3dhdGNoZXMtc3BhY2VzLCAnNScpIDIwJTtcbiAgICAgIGNvbG9yOiAkdGV4dC1jb2xvcjtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIGJhY2tncm91bmQ6ICRiZ3ItY29sb3I7XG4gICAgICBib3gtc2hhZG93OiAwIDJweCAxMHB4IC04cHggZGFya2VuKCRiZ3ItY29sb3IsIDUwJSk7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XG4gICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b20gbGVmdDtcbiAgICB9XG4gIH1cbn1cbiIsIi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIENvbXBvbmVudHMgPiBTQ1JPTEwgQlVUVE9OXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcbkB1c2UgJ3Nhc3M6bWF0aCc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogQ09MT1JTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IExpZ2h0XG5AZnVuY3Rpb24gbGlnaHQoJGNvbG9yLCAkcGVyY2VudCkge1xuICBAcmV0dXJuIG1peCgjZmZmLCAkY29sb3IsICRwZXJjZW50KTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRGFya1xuQGZ1bmN0aW9uIGRhcmsoJGNvbG9yLCAkcGVyY2VudCkge1xuICBAcmV0dXJuIG1peCgjMDAwLCAkY29sb3IsICRwZXJjZW50KTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBNQVBTXG5cbiRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3M6IGZhbHNlICFkZWZhdWx0O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IERlZXAgV2FybmluZ1xuLy8gRGlzcGxheXMgYSB3YXJuaW5nIGlmIHRoZSByZXRyaWV2ZWQgdmFsdWUgaXMgYG51bGxgXG5AZnVuY3Rpb24gbWFwLWdldC1kZWVwLXdhcm5pbmcoJHdhcm4sICRnZXQsICRrZXkpIHtcbiAgQGlmIG5vdCAkcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzIHtcbiAgICBAaWYgJGdldCA9PSBudWxsIHtcbiAgICAgIEB3YXJuICdNYXAgaGFzIG5vIHZhbHVlIGZvciBrZXkgc2VhcmNoIGAjeyR3YXJufWAnO1xuICAgIH0gQGVsc2UgaWYgdHlwZS1vZigkZ2V0KSAhPSAnbWFwJyB7XG4gICAgICBAd2FybiAnTm9uLW1hcCB2YWx1ZSBmb3VuZCBmb3Iga2V5IHNlYXJjaCBgI3skd2Fybn1gLCBjYW5ub3Qgc2VhcmNoIGZvciBrZXkgYCN7JGtleX1gJztcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuIG51bGw7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgRGVlcFxuLy8gR2l2ZW4gYSBtYXAgYW5kIGEgbGlzdCBvZiBrZXlzLCBmaW5kIHRoZSB2YWx1ZSBhdCB0aGUgZ2l2ZW4ga2V5XG5AZnVuY3Rpb24gbWFwLWdldC1kZWVwKCRtYXAsICRrZXlzLi4uKSB7XG4gIEBpZiBsZW5ndGgoJGtleXMpID09IDEge1xuICAgICRrZXlzOiBudGgoJGtleXMsIDEpO1xuICB9XG5cbiAgJHdhcm46ICcje250aCgka2V5cywgMSl9JztcbiAgJGxlbmd0aDogbGVuZ3RoKCRrZXlzKTtcbiAgJGdldDogbWFwLWdldCgkbWFwLCBudGgoJGtleXMsIDEpKTtcblxuICBAaWYgJGxlbmd0aCA+IDEge1xuICAgIEBmb3IgJGkgZnJvbSAyIHRocm91Z2ggJGxlbmd0aCB7XG4gICAgICBAaWYgJGdldCAhPSBudWxsIGFuZCB0eXBlLW9mKCRnZXQpID09ICdtYXAnIHtcbiAgICAgICAgJHdhcm46ICR3YXJuICsgJy0+I3tudGgoJGtleXMsICRpKX0nO1xuICAgICAgICAkZ2V0OiBtYXAtZ2V0KCRnZXQsIG50aCgka2V5cywgJGkpKTtcblxuICAgICAgICBAaWYgJGdldCA9PSBudWxsIHtcbiAgICAgICAgICBAcmV0dXJuIG1hcC1nZXQtZGVlcC13YXJuaW5nKCR3YXJuLCAkZ2V0LCBudGgoJGtleXMsICRpKSk7XG4gICAgICAgIH1cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICBAcmV0dXJuIG1hcC1nZXQtZGVlcC13YXJuaW5nKCR3YXJuLCAkZ2V0LCBudGgoJGtleXMsICRpKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkZ2V0O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IEtleXNcbkBmdW5jdGlvbiBnZXQta2V5cygka2V5cywgJGNvdW50ZXIpIHtcbiAgJHJldHVybjogKCk7XG5cbiAgQGZvciAkaSBmcm9tIDEgdG8gJGNvdW50ZXIge1xuICAgICRyZXR1cm46IGFwcGVuZCgkcmV0dXJuLCBudGgoJGtleXMsICRpKSk7XG4gIH1cblxuICBAcmV0dXJuICRyZXR1cm47XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgUHJldmlvdXMgS2V5XG5AZnVuY3Rpb24gbWFwLWdldC1wcmV2LWtleSgkbWFwLCAka2V5KSB7XG4gICRpbmRleDogaW5kZXgoJG1hcCwgJGtleSk7XG4gICRwcmV2OiAkaW5kZXggLSAxO1xuICAkcmVzdWx0OiBpZigkcHJldiA+IDAsIG50aCgkbWFwLCAkcHJldiksIG51bGwpO1xuXG4gIEByZXR1cm4gJHJlc3VsdDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIFNldFxuQGZ1bmN0aW9uIG1hcC1zZXQoJG1hcCwgJGtleSwgJHZhbHVlKSB7XG4gIEByZXR1cm4gbWFwLW1lcmdlKFxuICAgICRtYXAsXG4gICAgKFxuICAgICAgJGtleTogJHZhbHVlXG4gICAgKVxuICApO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgU2V0IERlZXBcbkBmdW5jdGlvbiBtYXAtc2V0LWRlZXAoJG1hcCwgJGtleXMsICR2YWx1ZSkge1xuICAkcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzOiB0cnVlICFnbG9iYWw7XG4gICRsZW5ndGg6IGxlbmd0aCgka2V5cyk7XG4gICRnZXQta2V5czogKCk7XG4gICRtYXAtbGV2ZWw6ICgpO1xuXG4gIEBpZiAkbGVuZ3RoID4gMSB7XG4gICAgJGdldC1rZXlzOiBnZXQta2V5cygka2V5cywgJGxlbmd0aCk7XG4gICAgJG1hcC1sZXZlbDogbWFwLWdldC1kZWVwKCRtYXAsICRnZXQta2V5cyk7XG4gIH1cblxuICAkbWVyZ2U6IChcbiAgICBudGgoJGtleXMsICRsZW5ndGgpOiAkdmFsdWVcbiAgKTtcblxuICBAaWYgJG1hcC1sZXZlbCB7XG4gICAgJG1lcmdlOiBtYXAtbWVyZ2UoJG1hcC1sZXZlbCwgJG1lcmdlKTtcbiAgfVxuXG4gIEBmb3IgJGkgZnJvbSAoJGxlbmd0aCAqIC0xICsgMSkgdGhyb3VnaCAtMSB7XG4gICAgJGo6IGFicygkaSk7XG4gICAgJGtleTogbnRoKCRrZXlzLCAkaik7XG5cbiAgICAvLyBAZGVidWcgJGdldC1rZXlzO1xuXG4gICAgQGlmICRqID4gMSB7XG4gICAgICAkZ2V0LWtleXM6IGdldC1rZXlzKCRrZXlzLCAkaik7XG4gICAgICAkbWFwLWxldmVsOiBtYXAtZ2V0LWRlZXAoJG1hcCwgJGdldC1rZXlzKTtcblxuICAgICAgQGlmICRtYXAtbGV2ZWwge1xuICAgICAgICAkbWVyZ2U6IG1hcC1tZXJnZShcbiAgICAgICAgICAkbWFwLWxldmVsLFxuICAgICAgICAgIChcbiAgICAgICAgICAgICRrZXk6ICRtZXJnZVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICAkbWVyZ2U6IChcbiAgICAgICAgICAka2V5OiAkbWVyZ2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IEBlbHNlIHtcbiAgICAgICRtZXJnZTogKFxuICAgICAgICAka2V5OiAkbWVyZ2VcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgJG1hcDogbWFwLW1lcmdlKCRtYXAsICRtZXJnZSk7XG5cbiAgJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5nczogZmFsc2UgIWdsb2JhbDtcblxuICBAcmV0dXJuICRtYXA7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogVU5JVFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUHJvZ3Jlc3NpdmUgY2FsY1xuQGZ1bmN0aW9uIGdldC1wcm9ncmVzc2l2ZS1jYWxjKFxuICAkbWluLW9iai1zaXplLFxuICAkbWF4LW9iai1zaXplLFxuICAkbWluLXZwLFxuICAkbWF4LXZwLFxuICAkdnAtdW5pdDogdndcbikge1xuICBAcmV0dXJuIGNhbGMoXG4gICAgI3skbWluLW9iai1zaXplfSArICN7c3RyaXAtdW5pdCgkbWF4LW9iai1zaXplIC0gJG1pbi1vYmotc2l6ZSl9ICpcbiAgICAgICgoMTAwI3skdnAtdW5pdH0gLSAjeyRtaW4tdnB9KSAvICN7c3RyaXAtdW5pdCgkbWF4LXZwIC0gJG1pbi12cCl9KVxuICApO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IFVOSVRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFN0cmlwIHVuaXRcbkBmdW5jdGlvbiBzdHJpcC11bml0KCRudW1iZXIpIHtcbiAgQGlmIHR5cGUtb2YoJG51bWJlcikgPT0gJ251bWJlcicgYW5kIG5vdCB1bml0bGVzcygkbnVtYmVyKSB7XG4gICAgQHJldHVybiAkbnVtYmVyIC8gKCRudW1iZXIgKiAwICsgMSk7XG4gIH1cblxuICBAcmV0dXJuICRudW1iZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBlbS9yZW0gdW5pdFxuQGZ1bmN0aW9uIGVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCBlbSk7XG59XG5cbkBmdW5jdGlvbiByZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIHJlbSk7XG59XG5cbkBmdW5jdGlvbiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsICR1bml0KSB7XG4gICRmczogMTBweDtcblxuICBAaWYgJGZvbnQtc2l6ZSB7XG4gICAgJGZzOiAkZm9udC1zaXplO1xuICB9XG4gIEBlbHNlIGlmICRiYXNlLWh0bWwtZm9udC1zaXplIHsgLy8gbWFrZSBzdXJlIHRvIGRlZmluZSB0aGlzIHZhcmlhYmxlIG9uIHlvdXIgb3duXG4gICAgJGZzOiAkYmFzZS1odG1sLWZvbnQtc2l6ZTtcbiAgfVxuXG4gIEByZXR1cm4gI3tzdHJpcC11bml0KCRudW0pIC8gc3RyaXAtdW5pdCgkZnMpfSN7JHVuaXR9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgc2NyZWVuIHBlcmNlbnRcbkBmdW5jdGlvbiBnZXQtc2NyZWVuLXBlcmNlbnQoJHdpZHRoLCAkc2NyZWVuKSB7XG4gIEByZXR1cm4gdW5xdW90ZSgnI3skd2lkdGggKiAxMDAgLyAkc2NyZWVufSUnKTtcbn1cblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBaLUlOREVYRVNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2VuZXJhdG9yXG5AZnVuY3Rpb24gei1pbmRleCgkbWFwLCAka2V5cykge1xuICAkZm91bmQtaW5kZXg6IG51bGw7XG5cbiAgQGVhY2ggJGtleSBpbiAka2V5cyB7XG4gICAgQGlmICh0eXBlLW9mKCRtYXApID09ICdtYXAnKSB7XG4gICAgICAkZm91bmQtaW5kZXg6IGluZGV4KG1hcC1rZXlzKCRtYXApLCAka2V5KTtcbiAgICAgICRtYXA6IG1hcC1nZXQoJG1hcCwgJGtleSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkZm91bmQtaW5kZXg6IGluZGV4KCRtYXAsICRrZXkpO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGZvdW5kLWluZGV4O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTZXJ2ZXJcbkBmdW5jdGlvbiB6KCRtYXAsICRrZXlzLi4uKSB7XG4gIEByZXR1cm4gei1pbmRleCgkbWFwLCAka2V5cyk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogRk9STVNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgSW5wdXQgcGxhY2Vob2xkZXJcbkBtaXhpbiBpbnB1dC1wbGFjZWhvbGRlcigkY29sLCAkc3R5bGU6IGl0YWxpYykge1xuICAmOi1tb3otcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxuICAmOjotbW96LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbiAgJjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxuICAmOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbn1cblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBQT1NJVElPTlNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQWJzb2x1dGUgY2VudGVyZWRcbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXJlZCgkdHlwZTogYWJzb2x1dGUsICRwb3M6IDUwJSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIHRvcDogJHBvcztcbiAgbGVmdDogJHBvcztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEFic29sdXRlIGNlbnRlcmVkIFhcbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXJlZC14KCR0eXBlOiBhYnNvbHV0ZSwgJHBvczogNTAlKSB7XG4gIHBvc2l0aW9uOiAkdHlwZTtcbiAgbGVmdDogJHBvcztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBBYnNvbHV0ZSBjZW50ZXJlZCBZXG5AbWl4aW4gYWJzb2x1dGUtY2VudGVyZWQteSgkdHlwZTogYWJzb2x1dGUsICRwb3M6IDUwJSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIHRvcDogJHBvcztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IFNIT1JUSEFORFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUG9zaXRpb25zXG5AbWl4aW4gcG9zaXRpb24tc3RyZXRjaGVkKCR0eXBlOiBhYnNvbHV0ZSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRGltZW5zaW9uc1xuQG1peGluIGRpbWVuc2lvbnMtc3F1YXJlKCR2YWx1ZSkge1xuICB3aWR0aDogJHZhbHVlO1xuICBoZWlnaHQ6ICR2YWx1ZTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUGFkZGluZ1xuQG1peGluIHBhZGRpbmctdigkdmFsdWUpIHtcbiAgcGFkZGluZy10b3A6ICR2YWx1ZTtcbiAgcGFkZGluZy1ib3R0b206ICR2YWx1ZTtcbn1cblxuQG1peGluIHBhZGRpbmctaCgkdmFsdWUpIHtcbiAgcGFkZGluZy1yaWdodDogJHZhbHVlO1xuICBwYWRkaW5nLWxlZnQ6ICR2YWx1ZTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFyZ2luXG5AbWl4aW4gbWFyZ2luLXYoJHZhbHVlKSB7XG4gIG1hcmdpbi10b3A6ICR2YWx1ZTtcbiAgbWFyZ2luLWJvdHRvbTogJHZhbHVlO1xufVxuXG5AbWl4aW4gbWFyZ2luLWgoJHZhbHVlKSB7XG4gIG1hcmdpbi1yaWdodDogJHZhbHVlO1xuICBtYXJnaW4tbGVmdDogJHZhbHVlO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBCb3JkZXJcbkBtaXhpbiBib3JkZXItdigkdmFsdWUpIHtcbiAgYm9yZGVyLXRvcDogJHZhbHVlO1xuICBib3JkZXItYm90dG9tOiAkdmFsdWU7XG59XG5cbkBtaXhpbiBib3JkZXItaCgkdmFsdWUpIHtcbiAgYm9yZGVyLXJpZ2h0OiAkdmFsdWU7XG4gIGJvcmRlci1sZWZ0OiAkdmFsdWU7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogVFlQT0dSQVBIWVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBGb250IHNtb290aGluZ1xuQG1peGluIGZvbnQtc21vb3RoaW5nKCR2YWx1ZTogYW50aWFsaWFzZWQpIHtcbiAgQGlmICR2YWx1ZSA9PSBhbnRpYWxpYXNlZCB7XG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbiAgfSBAZWxzZSB7XG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogc3VicGl4ZWwtYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGF1dG87XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgVGV4dCB1cHBlcmNhc2VcbkBtaXhpbiB0ZXh0LXVwcGVyY2FzZSgpIHtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgLW1vei1mb250LWZlYXR1cmUtc2V0dGluZ3M6ICdjYXNlJztcbiAgLXdlYmtpdC1mb250LWZlYXR1cmUtc2V0dGluZ3M6ICdjYXNlJztcbiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnY2FzZScgb247XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFNlbGVjdGlvblxuQG1peGluIHNlbGVjdGlvbigkY29sKSB7XG4gICRiZ3I6IGlmKCRjb2wgIT0gdHJhbnNwYXJlbnQsIHJnYmEoJGNvbCwgMC41KSwgcmdiYSgwLCAwLCAwLCAwKSk7XG5cbiAgJjo6LW1vei1zZWxlY3Rpb24ge1xuICAgIGJhY2tncm91bmQ6ICRiZ3I7XG4gIH1cblxuICAmOjpzZWxlY3Rpb24ge1xuICAgIGJhY2tncm91bmQ6ICRiZ3I7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gQkFTRVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBJbXBvcnRzXG5AaW1wb3J0ICcuLi8uLi9kZWZzL2JyYW5kLmpzJztcbkBpbXBvcnQgJy4uLy4uL2RlZnMvd2Vic2l0ZS5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEZvbnQgc2l6ZVxuQGZ1bmN0aW9uIHJvbGUoJG1hcCwgJHZhbHVlKSB7XG4gICRyLW1hcDogbWFwLWdldCgkdmFsdWUsICdtYXAnKTtcbiAgJHItdmFsdWU6IG1hcC1nZXQoJHZhbHVlLCAndmFsdWUnKTtcbiAgQHJldHVybiBtYXAtZ2V0KCRyLW1hcCwgJHItdmFsdWUpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnMgPiBDQUxDXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IHZhbHVlIGJhc2VkIG9uIHRoZSBiYXNlIGZvbnQgc2l6ZVxuQGZ1bmN0aW9uIGJhc2UoJHZhbHVlKSB7XG4gIEByZXR1cm4gbWF0aC5kaXYoJHZhbHVlLCBtYXAtZ2V0KCRyb2xlcy1yYXRpb3MsICdsYXlvdXQtZ3Jvd3RoJykpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBQcm9ncmVzc2l2ZSBjYWxjXG5AZnVuY3Rpb24gZ2V0LXByb2dyZXNzaXZlLWNhbGMoXG4gICRtaW4tb2JqLXNpemUsXG4gICRtYXgtb2JqLXNpemUsXG4gICRtaW4tdnAsXG4gICRtYXgtdnAsXG4gICR2cC11bml0OiB2d1xuKSB7XG4gIEByZXR1cm4gY2FsYyhcbiAgICAje3BpeGVsYXRlKCRtaW4tb2JqLXNpemUpfSArICN7c3RyaXAtdW5pdCgkbWF4LW9iai1zaXplIC0gJG1pbi1vYmotc2l6ZSl9ICpcbiAgICAgIChcbiAgICAgICAgKDEwMCN7JHZwLXVuaXR9IC0gI3twaXhlbGF0ZSgkbWluLXZwKX0pIC8gI3tzdHJpcC11bml0KFxuICAgICAgICAgICAgJG1heC12cCAtICRtaW4tdnBcbiAgICAgICAgICApfVxuICAgICAgKVxuICApO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnMgPiBVTklUU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFN0cmlwIHVuaXRcbkBmdW5jdGlvbiBzdHJpcC11bml0KCRudW1iZXIpIHtcbiAgQGlmIHR5cGUtb2YoJG51bWJlcikgPT0gJ251bWJlcicgYW5kIG5vdCB1bml0bGVzcygkbnVtYmVyKSB7XG4gICAgQHJldHVybiBtYXRoLmRpdigkbnVtYmVyLCAoJG51bWJlciAqIDAgKyAxKSk7XG4gIH1cblxuICBAcmV0dXJuICRudW1iZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBQeCB1bml0XG5AZnVuY3Rpb24gcGl4ZWxhdGUoJHZhbHVlKSB7XG4gIEByZXR1cm4gI3tzdHJpcC11bml0KCR2YWx1ZSl9UHg7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBlbS9yZW0gdW5pdFxuQGZ1bmN0aW9uIGVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCBlbSk7XG59XG5cbkBmdW5jdGlvbiByZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIHJlbSk7XG59XG5cbkBmdW5jdGlvbiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsICR1bml0KSB7XG4gICRmczogMTBweDtcblxuICBAaWYgJGZvbnQtc2l6ZSB7XG4gICAgJGZzOiAkZm9udC1zaXplO1xuICB9IEBlbHNlIHtcbiAgICAkZnM6IG1hcC1nZXQoJHR5cG9ncmFwaHksICdiYXNlX2ZvbnRfc2l6ZScpO1xuICB9XG5cbiAgQHJldHVybiAje21hdGguZGl2KHN0cmlwLXVuaXQoJG51bSksIHN0cmlwLXVuaXQoJGZzKSl9I3skdW5pdH07XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIERhdGEgPiBTV0FUQ0hFU1xuXG5AaW1wb3J0ICcuLi8uLi9kZWZzL3N3YXRjaGVzL2luZGV4LmpzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX2JyZWFrcG9pbnRzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX3JhdGlvcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19zY3JlZW5zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX3NwYWNlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIERhdGEgPiBST0xFU1xuXG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19ib3JkZXJzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2JyZWFrcG9pbnRzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2NvbG9ycyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19kaW1lbnNpb25zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3JhdGlvcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19zY3JlZW5zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3NoYWRvd3MnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfc3BhY2VzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3R5cG9ncmFwaHknO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnMgPiBTQ0FMQUJJTElUWVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFNjYWxlclxuQG1peGluIHNjYWxlcihcbiAgJHByb3BlcnR5LFxuICAkbWluLXNpemUsXG4gICRtYXgtc2l6ZSxcbiAgJG1pbi12dzogbWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21pbicpLFxuICAkbWF4LXZ3OiBtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWF4Jylcbikge1xuICAjeyRwcm9wZXJ0eX06ICN7c3RyaXAtdW5pdChtYXRoLmRpdigoJG1pbi12dyAqIDAuOTc5NikgKiAkbWluLXNpemUsIDEwMDApKX12dzsgLy8gMC45Nzk2IGZpeGVzIHdyb25nIGNhbGN1bGF0aW9ucyBpbiBDaHJvbWVcblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAkbWluLXZ3KSB7XG4gICAgI3skcHJvcGVydHl9OiBnZXQtcHJvZ3Jlc3NpdmUtY2FsYygkbWluLXNpemUsICRtYXgtc2l6ZSwgJG1pbi12dywgJG1heC12dyk7XG4gIH1cblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAkbWF4LXZ3KSB7XG4gICAgI3skcHJvcGVydHl9OiBwaXhlbGF0ZSgkbWF4LXNpemUpO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIFBsYWNlaG9sZGVycyA+IFNDQUxBQklMSVRZXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTmVnYXRpdmVcbiVwaC1uZWdhdGl2ZSB7XG4gIGgxLFxuICBoMixcbiAgaDMsXG4gIGg0LFxuICBoNSxcbiAgaDYsXG4gIHAge1xuICAgIGNvbG9yOiBtYXAtZ2V0KCRyb2xlcy1jb2wtdGV4dHMsICduZWdhdGl2ZScpO1xuICB9XG5cbiAgLm1ldGEge1xuICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHN3YXRjaGVzLWNvbG9ycywgJ2hvbmV5LXllbGxvdycsICdsaWdodCcpO1xuICB9XG5cbiAgLnRleHQtbGluayB7XG4gICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnbm9ybWFsJyk7XG4gICAgYm9yZGVyLWJvdHRvbTogcGl4ZWxhdGUoMXB4KSBkb3R0ZWRcbiAgICAgIHJnYmEobWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdub3JtYWwnKSwgMC4zMyk7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2hvdmVyJyk7XG4gICAgfVxuXG4gICAgJjphY3RpdmUge1xuICAgICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnYWN0aXZlJyk7XG4gICAgfVxuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFdhdmVcbiVwaC13YXZlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiA1MCU7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4td2lkdGg6IG1hdGguZGl2KG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtYXgnKSwgMik7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcblxuICA+IHN2ZyB7XG4gICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgSGVhZCB3YXZlXG4lcGgtaGVhZC13YXZlIHtcbiAgJHdhdmUtaGVpZ2h0OiBiYXNlKG1hcC1nZXQoJHJvbGVzLWRpbWVuc2lvbnMtd2F2ZXMsICdoZWFkZXInKSk7XG5cbiAgLndhdmUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICB0b3A6IGNhbGMoMTAwJSAtIDFQeCk7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiBlbSgkd2F2ZS1oZWlnaHQpO1xuXG4gICAgLmlubmVyIHtcbiAgICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKDEwMCUpO1xuXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgICBzdmcge1xuICAgICAgICBAaW5jbHVkZSBkaW1lbnNpb25zLXNxdWFyZSgxMDAlKTtcblxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgbWluLXdpZHRoOiBtYXRoLmRpdihtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWF4JyksIDIpO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQGtleWZyYW1lcyBzbGlkZSB7XG4gICAgZnJvbSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICB9XG5cbiAgICB0byB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAwKTtcbiAgICB9XG4gIH1cblxuICAuc2Nyb2xsLWJ0biB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvdHRvbTogMjBweDtcbiAgICBsZWZ0OiA1MCU7XG4gICAgei1pbmRleDogMTtcbiAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0LWRlZXAoJHN3YXRjaGVzLWNvbG9ycywgJ2Nvcm5mbG93ZXInLCAnYmFzZScpO1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgIGFuaW1hdGlvbjogc2xpZGUgMXMgZWFzZS1pbi1vdXQgaW5maW5pdGUgYWx0ZXJuYXRlO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2hvdmVyJyk7XG4gICAgfVxuXG4gICAgJjphY3RpdmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdhY3RpdmUnKTtcbiAgICB9XG5cbiAgICBzdmcge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgICB9XG5cbiAgICBib2R5Om5vdCguc2Nyb2xsYWJsZSkgJiB7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFJvb3Rcbi5zY3JvbGwtYnRuIHtcbiAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUocGl4ZWxhdGUoNDBweCkpO1xuXG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgcmlnaHQ6IDEwcHg7XG4gIGJvdHRvbTogMTBweDtcbiAgei1pbmRleDogMTA7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICdiYXNlJywgJ25vcm1hbCcpO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4wNXMgZWFzZS1pbi1vdXQsIGJhY2tncm91bmQtY29sb3IgMC4wNXMgZWFzZS1pbi1vdXQ7XG5cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICdiYXNlJywgJ2hvdmVyJyk7XG4gIH1cblxuICAmOmFjdGl2ZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICdiYXNlJywgJ2FjdGl2ZScpO1xuICB9XG5cbiAgc3ZnIHtcbiAgICBAaW5jbHVkZSBkaW1lbnNpb25zLXNxdWFyZSg1MCUpO1xuXG4gICAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lICovXG4gICAgZmlsbDogbWFwLWdldC1kZWVwKCRzd2F0Y2hlcy1jb2xvcnMsICdtb25vY2hyb21lJywgd2hpdGUpO1xuICB9XG5cbiAgJi5hY3RpdmUge1xuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cbiIsIi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIENvbXBvbmVudHMgPiBTSEhFVFxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5AdXNlICdzYXNzOm1hdGgnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IENPTE9SU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBMaWdodFxuQGZ1bmN0aW9uIGxpZ2h0KCRjb2xvciwgJHBlcmNlbnQpIHtcbiAgQHJldHVybiBtaXgoI2ZmZiwgJGNvbG9yLCAkcGVyY2VudCk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IERhcmtcbkBmdW5jdGlvbiBkYXJrKCRjb2xvciwgJHBlcmNlbnQpIHtcbiAgQHJldHVybiBtaXgoIzAwMCwgJGNvbG9yLCAkcGVyY2VudCk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogTUFQU1xuXG4kcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzOiBmYWxzZSAhZGVmYXVsdDtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIEdldCBEZWVwIFdhcm5pbmdcbi8vIERpc3BsYXlzIGEgd2FybmluZyBpZiB0aGUgcmV0cmlldmVkIHZhbHVlIGlzIGBudWxsYFxuQGZ1bmN0aW9uIG1hcC1nZXQtZGVlcC13YXJuaW5nKCR3YXJuLCAkZ2V0LCAka2V5KSB7XG4gIEBpZiBub3QgJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5ncyB7XG4gICAgQGlmICRnZXQgPT0gbnVsbCB7XG4gICAgICBAd2FybiAnTWFwIGhhcyBubyB2YWx1ZSBmb3Iga2V5IHNlYXJjaCBgI3skd2Fybn1gJztcbiAgICB9IEBlbHNlIGlmIHR5cGUtb2YoJGdldCkgIT0gJ21hcCcge1xuICAgICAgQHdhcm4gJ05vbi1tYXAgdmFsdWUgZm91bmQgZm9yIGtleSBzZWFyY2ggYCN7JHdhcm59YCwgY2Fubm90IHNlYXJjaCBmb3Iga2V5IGAjeyRrZXl9YCc7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiBudWxsO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IERlZXBcbi8vIEdpdmVuIGEgbWFwIGFuZCBhIGxpc3Qgb2Yga2V5cywgZmluZCB0aGUgdmFsdWUgYXQgdGhlIGdpdmVuIGtleVxuQGZ1bmN0aW9uIG1hcC1nZXQtZGVlcCgkbWFwLCAka2V5cy4uLikge1xuICBAaWYgbGVuZ3RoKCRrZXlzKSA9PSAxIHtcbiAgICAka2V5czogbnRoKCRrZXlzLCAxKTtcbiAgfVxuXG4gICR3YXJuOiAnI3tudGgoJGtleXMsIDEpfSc7XG4gICRsZW5ndGg6IGxlbmd0aCgka2V5cyk7XG4gICRnZXQ6IG1hcC1nZXQoJG1hcCwgbnRoKCRrZXlzLCAxKSk7XG5cbiAgQGlmICRsZW5ndGggPiAxIHtcbiAgICBAZm9yICRpIGZyb20gMiB0aHJvdWdoICRsZW5ndGgge1xuICAgICAgQGlmICRnZXQgIT0gbnVsbCBhbmQgdHlwZS1vZigkZ2V0KSA9PSAnbWFwJyB7XG4gICAgICAgICR3YXJuOiAkd2FybiArICctPiN7bnRoKCRrZXlzLCAkaSl9JztcbiAgICAgICAgJGdldDogbWFwLWdldCgkZ2V0LCBudGgoJGtleXMsICRpKSk7XG5cbiAgICAgICAgQGlmICRnZXQgPT0gbnVsbCB7XG4gICAgICAgICAgQHJldHVybiBtYXAtZ2V0LWRlZXAtd2FybmluZygkd2FybiwgJGdldCwgbnRoKCRrZXlzLCAkaSkpO1xuICAgICAgICB9XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgQHJldHVybiBtYXAtZ2V0LWRlZXAtd2FybmluZygkd2FybiwgJGdldCwgbnRoKCRrZXlzLCAkaSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGdldDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIEdldCBLZXlzXG5AZnVuY3Rpb24gZ2V0LWtleXMoJGtleXMsICRjb3VudGVyKSB7XG4gICRyZXR1cm46ICgpO1xuXG4gIEBmb3IgJGkgZnJvbSAxIHRvICRjb3VudGVyIHtcbiAgICAkcmV0dXJuOiBhcHBlbmQoJHJldHVybiwgbnRoKCRrZXlzLCAkaSkpO1xuICB9XG5cbiAgQHJldHVybiAkcmV0dXJuO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IFByZXZpb3VzIEtleVxuQGZ1bmN0aW9uIG1hcC1nZXQtcHJldi1rZXkoJG1hcCwgJGtleSkge1xuICAkaW5kZXg6IGluZGV4KCRtYXAsICRrZXkpO1xuICAkcHJldjogJGluZGV4IC0gMTtcbiAgJHJlc3VsdDogaWYoJHByZXYgPiAwLCBudGgoJG1hcCwgJHByZXYpLCBudWxsKTtcblxuICBAcmV0dXJuICRyZXN1bHQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBTZXRcbkBmdW5jdGlvbiBtYXAtc2V0KCRtYXAsICRrZXksICR2YWx1ZSkge1xuICBAcmV0dXJuIG1hcC1tZXJnZShcbiAgICAkbWFwLFxuICAgIChcbiAgICAgICRrZXk6ICR2YWx1ZVxuICAgIClcbiAgKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIFNldCBEZWVwXG5AZnVuY3Rpb24gbWFwLXNldC1kZWVwKCRtYXAsICRrZXlzLCAkdmFsdWUpIHtcbiAgJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5nczogdHJ1ZSAhZ2xvYmFsO1xuICAkbGVuZ3RoOiBsZW5ndGgoJGtleXMpO1xuICAkZ2V0LWtleXM6ICgpO1xuICAkbWFwLWxldmVsOiAoKTtcblxuICBAaWYgJGxlbmd0aCA+IDEge1xuICAgICRnZXQta2V5czogZ2V0LWtleXMoJGtleXMsICRsZW5ndGgpO1xuICAgICRtYXAtbGV2ZWw6IG1hcC1nZXQtZGVlcCgkbWFwLCAkZ2V0LWtleXMpO1xuICB9XG5cbiAgJG1lcmdlOiAoXG4gICAgbnRoKCRrZXlzLCAkbGVuZ3RoKTogJHZhbHVlXG4gICk7XG5cbiAgQGlmICRtYXAtbGV2ZWwge1xuICAgICRtZXJnZTogbWFwLW1lcmdlKCRtYXAtbGV2ZWwsICRtZXJnZSk7XG4gIH1cblxuICBAZm9yICRpIGZyb20gKCRsZW5ndGggKiAtMSArIDEpIHRocm91Z2ggLTEge1xuICAgICRqOiBhYnMoJGkpO1xuICAgICRrZXk6IG50aCgka2V5cywgJGopO1xuXG4gICAgLy8gQGRlYnVnICRnZXQta2V5cztcblxuICAgIEBpZiAkaiA+IDEge1xuICAgICAgJGdldC1rZXlzOiBnZXQta2V5cygka2V5cywgJGopO1xuICAgICAgJG1hcC1sZXZlbDogbWFwLWdldC1kZWVwKCRtYXAsICRnZXQta2V5cyk7XG5cbiAgICAgIEBpZiAkbWFwLWxldmVsIHtcbiAgICAgICAgJG1lcmdlOiBtYXAtbWVyZ2UoXG4gICAgICAgICAgJG1hcC1sZXZlbCxcbiAgICAgICAgICAoXG4gICAgICAgICAgICAka2V5OiAkbWVyZ2VcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgJG1lcmdlOiAoXG4gICAgICAgICAgJGtleTogJG1lcmdlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBAZWxzZSB7XG4gICAgICAkbWVyZ2U6IChcbiAgICAgICAgJGtleTogJG1lcmdlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gICRtYXA6IG1hcC1tZXJnZSgkbWFwLCAkbWVyZ2UpO1xuXG4gICRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3M6IGZhbHNlICFnbG9iYWw7XG5cbiAgQHJldHVybiAkbWFwO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IFVOSVRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFByb2dyZXNzaXZlIGNhbGNcbkBmdW5jdGlvbiBnZXQtcHJvZ3Jlc3NpdmUtY2FsYyhcbiAgJG1pbi1vYmotc2l6ZSxcbiAgJG1heC1vYmotc2l6ZSxcbiAgJG1pbi12cCxcbiAgJG1heC12cCxcbiAgJHZwLXVuaXQ6IHZ3XG4pIHtcbiAgQHJldHVybiBjYWxjKFxuICAgICN7JG1pbi1vYmotc2l6ZX0gKyAje3N0cmlwLXVuaXQoJG1heC1vYmotc2l6ZSAtICRtaW4tb2JqLXNpemUpfSAqXG4gICAgICAoKDEwMCN7JHZwLXVuaXR9IC0gI3skbWluLXZwfSkgLyAje3N0cmlwLXVuaXQoJG1heC12cCAtICRtaW4tdnApfSlcbiAgKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBVTklUU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTdHJpcCB1bml0XG5AZnVuY3Rpb24gc3RyaXAtdW5pdCgkbnVtYmVyKSB7XG4gIEBpZiB0eXBlLW9mKCRudW1iZXIpID09ICdudW1iZXInIGFuZCBub3QgdW5pdGxlc3MoJG51bWJlcikge1xuICAgIEByZXR1cm4gJG51bWJlciAvICgkbnVtYmVyICogMCArIDEpO1xuICB9XG5cbiAgQHJldHVybiAkbnVtYmVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgZW0vcmVtIHVuaXRcbkBmdW5jdGlvbiBlbSgkbnVtLCAkZm9udC1zaXplOiBmYWxzZSkge1xuICBAcmV0dXJuIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgZW0pO1xufVxuXG5AZnVuY3Rpb24gcmVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCByZW0pO1xufVxuXG5AZnVuY3Rpb24gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCAkdW5pdCkge1xuICAkZnM6IDEwcHg7XG5cbiAgQGlmICRmb250LXNpemUge1xuICAgICRmczogJGZvbnQtc2l6ZTtcbiAgfVxuICBAZWxzZSBpZiAkYmFzZS1odG1sLWZvbnQtc2l6ZSB7IC8vIG1ha2Ugc3VyZSB0byBkZWZpbmUgdGhpcyB2YXJpYWJsZSBvbiB5b3VyIG93blxuICAgICRmczogJGJhc2UtaHRtbC1mb250LXNpemU7XG4gIH1cblxuICBAcmV0dXJuICN7c3RyaXAtdW5pdCgkbnVtKSAvIHN0cmlwLXVuaXQoJGZzKX0jeyR1bml0fTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IHNjcmVlbiBwZXJjZW50XG5AZnVuY3Rpb24gZ2V0LXNjcmVlbi1wZXJjZW50KCR3aWR0aCwgJHNjcmVlbikge1xuICBAcmV0dXJuIHVucXVvdGUoJyN7JHdpZHRoICogMTAwIC8gJHNjcmVlbn0lJyk7XG59XG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogWi1JTkRFWEVTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdlbmVyYXRvclxuQGZ1bmN0aW9uIHotaW5kZXgoJG1hcCwgJGtleXMpIHtcbiAgJGZvdW5kLWluZGV4OiBudWxsO1xuXG4gIEBlYWNoICRrZXkgaW4gJGtleXMge1xuICAgIEBpZiAodHlwZS1vZigkbWFwKSA9PSAnbWFwJykge1xuICAgICAgJGZvdW5kLWluZGV4OiBpbmRleChtYXAta2V5cygkbWFwKSwgJGtleSk7XG4gICAgICAkbWFwOiBtYXAtZ2V0KCRtYXAsICRrZXkpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJGZvdW5kLWluZGV4OiBpbmRleCgkbWFwLCAka2V5KTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRmb3VuZC1pbmRleDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgU2VydmVyXG5AZnVuY3Rpb24geigkbWFwLCAka2V5cy4uLikge1xuICBAcmV0dXJuIHotaW5kZXgoJG1hcCwgJGtleXMpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IEZPUk1TXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IElucHV0IHBsYWNlaG9sZGVyXG5AbWl4aW4gaW5wdXQtcGxhY2Vob2xkZXIoJGNvbCwgJHN0eWxlOiBpdGFsaWMpIHtcbiAgJjotbW96LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbiAgJjo6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2w7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICB9XG4gICY6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbiAgJjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICRjb2w7XG4gICAgZm9udC1zdHlsZTogJHN0eWxlO1xuICB9XG59XG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogUE9TSVRJT05TXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEFic29sdXRlIGNlbnRlcmVkXG5AbWl4aW4gYWJzb2x1dGUtY2VudGVyZWQoJHR5cGU6IGFic29sdXRlLCAkcG9zOiA1MCUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICB0b3A6ICRwb3M7XG4gIGxlZnQ6ICRwb3M7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBBYnNvbHV0ZSBjZW50ZXJlZCBYXG5AbWl4aW4gYWJzb2x1dGUtY2VudGVyZWQteCgkdHlwZTogYWJzb2x1dGUsICRwb3M6IDUwJSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIGxlZnQ6ICRwb3M7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQWJzb2x1dGUgY2VudGVyZWQgWVxuQG1peGluIGFic29sdXRlLWNlbnRlcmVkLXkoJHR5cGU6IGFic29sdXRlLCAkcG9zOiA1MCUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICB0b3A6ICRwb3M7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBTSE9SVEhBTkRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFBvc2l0aW9uc1xuQG1peGluIHBvc2l0aW9uLXN0cmV0Y2hlZCgkdHlwZTogYWJzb2x1dGUpIHtcbiAgcG9zaXRpb246ICR0eXBlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IERpbWVuc2lvbnNcbkBtaXhpbiBkaW1lbnNpb25zLXNxdWFyZSgkdmFsdWUpIHtcbiAgd2lkdGg6ICR2YWx1ZTtcbiAgaGVpZ2h0OiAkdmFsdWU7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFBhZGRpbmdcbkBtaXhpbiBwYWRkaW5nLXYoJHZhbHVlKSB7XG4gIHBhZGRpbmctdG9wOiAkdmFsdWU7XG4gIHBhZGRpbmctYm90dG9tOiAkdmFsdWU7XG59XG5cbkBtaXhpbiBwYWRkaW5nLWgoJHZhbHVlKSB7XG4gIHBhZGRpbmctcmlnaHQ6ICR2YWx1ZTtcbiAgcGFkZGluZy1sZWZ0OiAkdmFsdWU7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcmdpblxuQG1peGluIG1hcmdpbi12KCR2YWx1ZSkge1xuICBtYXJnaW4tdG9wOiAkdmFsdWU7XG4gIG1hcmdpbi1ib3R0b206ICR2YWx1ZTtcbn1cblxuQG1peGluIG1hcmdpbi1oKCR2YWx1ZSkge1xuICBtYXJnaW4tcmlnaHQ6ICR2YWx1ZTtcbiAgbWFyZ2luLWxlZnQ6ICR2YWx1ZTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQm9yZGVyXG5AbWl4aW4gYm9yZGVyLXYoJHZhbHVlKSB7XG4gIGJvcmRlci10b3A6ICR2YWx1ZTtcbiAgYm9yZGVyLWJvdHRvbTogJHZhbHVlO1xufVxuXG5AbWl4aW4gYm9yZGVyLWgoJHZhbHVlKSB7XG4gIGJvcmRlci1yaWdodDogJHZhbHVlO1xuICBib3JkZXItbGVmdDogJHZhbHVlO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IFRZUE9HUkFQSFlcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRm9udCBzbW9vdGhpbmdcbkBtaXhpbiBmb250LXNtb290aGluZygkdmFsdWU6IGFudGlhbGlhc2VkKSB7XG4gIEBpZiAkdmFsdWUgPT0gYW50aWFsaWFzZWQge1xuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG4gIH0gQGVsc2Uge1xuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IHN1YnBpeGVsLWFudGlhbGlhc2VkO1xuICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBhdXRvO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFRleHQgdXBwZXJjYXNlXG5AbWl4aW4gdGV4dC11cHBlcmNhc2UoKSB7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIC1tb3otZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnY2FzZSc7XG4gIC13ZWJraXQtZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnY2FzZSc7XG4gIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2Nhc2UnIG9uO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTZWxlY3Rpb25cbkBtaXhpbiBzZWxlY3Rpb24oJGNvbCkge1xuICAkYmdyOiBpZigkY29sICE9IHRyYW5zcGFyZW50LCByZ2JhKCRjb2wsIDAuNSksIHJnYmEoMCwgMCwgMCwgMCkpO1xuXG4gICY6Oi1tb3otc2VsZWN0aW9uIHtcbiAgICBiYWNrZ3JvdW5kOiAkYmdyO1xuICB9XG5cbiAgJjo6c2VsZWN0aW9uIHtcbiAgICBiYWNrZ3JvdW5kOiAkYmdyO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEJBU0VcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgSW1wb3J0c1xuQGltcG9ydCAnLi4vLi4vZGVmcy9icmFuZC5qcyc7XG5AaW1wb3J0ICcuLi8uLi9kZWZzL3dlYnNpdGUuanMnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBGb250IHNpemVcbkBmdW5jdGlvbiByb2xlKCRtYXAsICR2YWx1ZSkge1xuICAkci1tYXA6IG1hcC1nZXQoJHZhbHVlLCAnbWFwJyk7XG4gICRyLXZhbHVlOiBtYXAtZ2V0KCR2YWx1ZSwgJ3ZhbHVlJyk7XG4gIEByZXR1cm4gbWFwLWdldCgkci1tYXAsICRyLXZhbHVlKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zID4gQ0FMQ1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCB2YWx1ZSBiYXNlZCBvbiB0aGUgYmFzZSBmb250IHNpemVcbkBmdW5jdGlvbiBiYXNlKCR2YWx1ZSkge1xuICBAcmV0dXJuIG1hdGguZGl2KCR2YWx1ZSwgbWFwLWdldCgkcm9sZXMtcmF0aW9zLCAnbGF5b3V0LWdyb3d0aCcpKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUHJvZ3Jlc3NpdmUgY2FsY1xuQGZ1bmN0aW9uIGdldC1wcm9ncmVzc2l2ZS1jYWxjKFxuICAkbWluLW9iai1zaXplLFxuICAkbWF4LW9iai1zaXplLFxuICAkbWluLXZwLFxuICAkbWF4LXZwLFxuICAkdnAtdW5pdDogdndcbikge1xuICBAcmV0dXJuIGNhbGMoXG4gICAgI3twaXhlbGF0ZSgkbWluLW9iai1zaXplKX0gKyAje3N0cmlwLXVuaXQoJG1heC1vYmotc2l6ZSAtICRtaW4tb2JqLXNpemUpfSAqXG4gICAgICAoXG4gICAgICAgICgxMDAjeyR2cC11bml0fSAtICN7cGl4ZWxhdGUoJG1pbi12cCl9KSAvICN7c3RyaXAtdW5pdChcbiAgICAgICAgICAgICRtYXgtdnAgLSAkbWluLXZwXG4gICAgICAgICAgKX1cbiAgICAgIClcbiAgKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zID4gVU5JVFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTdHJpcCB1bml0XG5AZnVuY3Rpb24gc3RyaXAtdW5pdCgkbnVtYmVyKSB7XG4gIEBpZiB0eXBlLW9mKCRudW1iZXIpID09ICdudW1iZXInIGFuZCBub3QgdW5pdGxlc3MoJG51bWJlcikge1xuICAgIEByZXR1cm4gbWF0aC5kaXYoJG51bWJlciwgKCRudW1iZXIgKiAwICsgMSkpO1xuICB9XG5cbiAgQHJldHVybiAkbnVtYmVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgUHggdW5pdFxuQGZ1bmN0aW9uIHBpeGVsYXRlKCR2YWx1ZSkge1xuICBAcmV0dXJuICN7c3RyaXAtdW5pdCgkdmFsdWUpfVB4O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgZW0vcmVtIHVuaXRcbkBmdW5jdGlvbiBlbSgkbnVtLCAkZm9udC1zaXplOiBmYWxzZSkge1xuICBAcmV0dXJuIGdldC1mb250LXVuaXQoJG51bSwgJGZvbnQtc2l6ZSwgZW0pO1xufVxuXG5AZnVuY3Rpb24gcmVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCByZW0pO1xufVxuXG5AZnVuY3Rpb24gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCAkdW5pdCkge1xuICAkZnM6IDEwcHg7XG5cbiAgQGlmICRmb250LXNpemUge1xuICAgICRmczogJGZvbnQtc2l6ZTtcbiAgfSBAZWxzZSB7XG4gICAgJGZzOiBtYXAtZ2V0KCR0eXBvZ3JhcGh5LCAnYmFzZV9mb250X3NpemUnKTtcbiAgfVxuXG4gIEByZXR1cm4gI3ttYXRoLmRpdihzdHJpcC11bml0KCRudW0pLCBzdHJpcC11bml0KCRmcykpfSN7JHVuaXR9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBEYXRhID4gU1dBVENIRVNcblxuQGltcG9ydCAnLi4vLi4vZGVmcy9zd2F0Y2hlcy9pbmRleC5qcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19icmVha3BvaW50cyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19yYXRpb3MnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvc3dhdGNoZXMvc3dhdGNoZXNfc2NyZWVucyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19zcGFjZXMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBEYXRhID4gUk9MRVNcblxuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfYm9yZGVycyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19icmVha3BvaW50cyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19jb2xvcnMnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfZGltZW5zaW9ucyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19yYXRpb3MnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfc2NyZWVucyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19zaGFkb3dzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3NwYWNlcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc190eXBvZ3JhcGh5JztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zID4gU0NBTEFCSUxJVFlcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTW9kdWxlc1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTY2FsZXJcbkBtaXhpbiBzY2FsZXIoXG4gICRwcm9wZXJ0eSxcbiAgJG1pbi1zaXplLFxuICAkbWF4LXNpemUsXG4gICRtaW4tdnc6IG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtaW4nKSxcbiAgJG1heC12dzogbWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21heCcpXG4pIHtcbiAgI3skcHJvcGVydHl9OiAje3N0cmlwLXVuaXQobWF0aC5kaXYoKCRtaW4tdncgKiAwLjk3OTYpICogJG1pbi1zaXplLCAxMDAwKSl9dnc7IC8vIDAuOTc5NiBmaXhlcyB3cm9uZyBjYWxjdWxhdGlvbnMgaW4gQ2hyb21lXG5cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogJG1pbi12dykge1xuICAgICN7JHByb3BlcnR5fTogZ2V0LXByb2dyZXNzaXZlLWNhbGMoJG1pbi1zaXplLCAkbWF4LXNpemUsICRtaW4tdncsICRtYXgtdncpO1xuICB9XG5cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogJG1heC12dykge1xuICAgICN7JHByb3BlcnR5fTogcGl4ZWxhdGUoJG1heC1zaXplKTtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBQbGFjZWhvbGRlcnMgPiBTQ0FMQUJJTElUWVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE5lZ2F0aXZlXG4lcGgtbmVnYXRpdmUge1xuICBoMSxcbiAgaDIsXG4gIGgzLFxuICBoNCxcbiAgaDUsXG4gIGg2LFxuICBwIHtcbiAgICBjb2xvcjogbWFwLWdldCgkcm9sZXMtY29sLXRleHRzLCAnbmVnYXRpdmUnKTtcbiAgfVxuXG4gIC5tZXRhIHtcbiAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRzd2F0Y2hlcy1jb2xvcnMsICdob25leS15ZWxsb3cnLCAnbGlnaHQnKTtcbiAgfVxuXG4gIC50ZXh0LWxpbmsge1xuICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ25vcm1hbCcpO1xuICAgIGJvcmRlci1ib3R0b206IHBpeGVsYXRlKDFweCkgZG90dGVkXG4gICAgICByZ2JhKG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnbm9ybWFsJyksIDAuMzMpO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdob3ZlcicpO1xuICAgIH1cblxuICAgICY6YWN0aXZlIHtcbiAgICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2FjdGl2ZScpO1xuICAgIH1cbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBXYXZlXG4lcGgtd2F2ZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogNTAlO1xuICB3aWR0aDogMTAwJTtcbiAgbWluLXdpZHRoOiBtYXRoLmRpdihtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWF4JyksIDIpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG5cbiAgPiBzdmcge1xuICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKDEwMCUpO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEhlYWQgd2F2ZVxuJXBoLWhlYWQtd2F2ZSB7XG4gICR3YXZlLWhlaWdodDogYmFzZShtYXAtZ2V0KCRyb2xlcy1kaW1lbnNpb25zLXdhdmVzLCAnaGVhZGVyJykpO1xuXG4gIC53YXZlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgdG9wOiBjYWxjKDEwMCUgLSAxUHgpO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogZW0oJHdhdmUtaGVpZ2h0KTtcblxuICAgIC5pbm5lciB7XG4gICAgICBAaW5jbHVkZSBkaW1lbnNpb25zLXNxdWFyZSgxMDAlKTtcblxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgICAgc3ZnIHtcbiAgICAgICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG5cbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIG1pbi13aWR0aDogbWF0aC5kaXYobWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21heCcpLCAyKTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBrZXlmcmFtZXMgc2xpZGUge1xuICAgIGZyb20ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgfVxuXG4gICAgdG8ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgMCk7XG4gICAgfVxuICB9XG5cbiAgLnNjcm9sbC1idG4ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3R0b206IDIwcHg7XG4gICAgbGVmdDogNTAlO1xuICAgIHotaW5kZXg6IDE7XG4gICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRzd2F0Y2hlcy1jb2xvcnMsICdjb3JuZmxvd2VyJywgJ2Jhc2UnKTtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICBhbmltYXRpb246IHNsaWRlIDFzIGVhc2UtaW4tb3V0IGluZmluaXRlIGFsdGVybmF0ZTtcblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdob3ZlcicpO1xuICAgIH1cblxuICAgICY6YWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnYWN0aXZlJyk7XG4gICAgfVxuXG4gICAgc3ZnIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gICAgfVxuXG4gICAgYm9keTpub3QoLnNjcm9sbGFibGUpICYge1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBWYXJpYWJsZXNcbiRyYWRpdXM6IG1hcC1nZXQoJHJvbGVzLWJvcmRlcnMtcmFkaXVzZXMsICdibG9jaycpO1xuJGhlYWRpbmctY29sb3I6IG1hcC1nZXQtZGVlcCgkc3dhdGNoZXMtY29sb3JzLCAnYmx1ZS1ncmVlbicsICdkYXJrJyk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFJvb3Rcbi5zaGVldCB7XG4gIC8vIEFwcGx5IG9mZnNldCAoYmFzZWQgb24gdGhlIGhlYWRlcidzIGhlaWdodCkgdG8gYWxsIGFuY2hvcnMgaW4gYSBwb3N0XG4gICpbaWRdIHtcbiAgICAkb2Zmc2V0OiBiYXNlKG1hcC1nZXQoJHJvbGVzLWRpbWVuc2lvbnMtd2F2ZXMsICdoZWFkZXInKSkgKiAxLjI7XG5cbiAgICBwYWRkaW5nLXRvcDogJG9mZnNldDtcbiAgICBtYXJnaW4tdG9wOiAkb2Zmc2V0ICogLTE7XG4gIH1cblxuICBmaWdjYXB0aW9uIHtcbiAgICAkbWluLWZvbnQtc2l6ZTogbWFwLWdldCgkcm9sZXMtdHlwby1mb250LXNpemVzLCAnZmlnY2FwdGlvbicpO1xuICAgICRtYXgtZm9udC1zaXplOiAkbWluLWZvbnQtc2l6ZSAqIG1hcC1nZXQoJHJvbGVzLXJhdGlvcywgJ3RleHQtZ3Jvd3RoJyk7XG5cbiAgICBAaW5jbHVkZSBzY2FsZXIoZm9udC1zaXplLCAkbWluLWZvbnQtc2l6ZSwgJG1heC1mb250LXNpemUpO1xuXG4gICAgbWFyZ2luLXRvcDogbWFwLWdldCgkc3dhdGNoZXMtc3BhY2VzLCAnNScpO1xuICAgIGZvbnQtZmFtaWx5OiBtYXAtZ2V0KCRyb2xlcy10eXBvLWZvbnQtZmFtaWxpZXMsICdmaWdjYXB0aW9uJyk7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG5cbiAgLnBvc3QtYm9keSB7XG4gICAgJG1pbi1mb250LXNpemU6IG1hcC1nZXQoJHJvbGVzLXR5cG8tZm9udC1zaXplcy1iYXNlLCAnbWluJyk7XG4gICAgJG1heC1mb250LXNpemU6ICRtaW4tZm9udC1zaXplICogbWFwLWdldCgkcm9sZXMtcmF0aW9zLCAndGV4dC1ncm93dGgnKTtcbiAgICAkaGVhZGluZy1vZmZzZXQ6IGJhc2UobWFwLWdldCgkcm9sZXMtZGltZW5zaW9ucy13YXZlcywgJ2hlYWRlcicpKSAqIDEuMjtcblxuICAgIEBpbmNsdWRlIHNjYWxlcihmb250LXNpemUsICRtaW4tZm9udC1zaXplLCAkbWF4LWZvbnQtc2l6ZSk7XG5cbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbGluZS1oZWlnaHQ6IG1hcC1nZXQoJHJvbGVzLXR5cG8tbGluZS1oZWlnaHRzLCAndGV4dCcpO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG5cbiAgICBoMSxcbiAgICBoMixcbiAgICBoMyxcbiAgICBoNCxcbiAgICBoNSxcbiAgICBoNiB7XG4gICAgICAmOm5vdCg6Z2xvYmFsKC5zZC10aXRsZSkpIHtcbiAgICAgICAgcGFkZGluZy10b3A6ICRoZWFkaW5nLW9mZnNldDtcbiAgICAgICAgbWFyZ2luLXRvcDogLSRoZWFkaW5nLW9mZnNldCAqIDAuODtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7XG4gICAgICAgIGNvbG9yOiAkaGVhZGluZy1jb2xvcjtcbiAgICAgIH1cblxuICAgICAgKyBwLFxuICAgICAgKyA6bm90KHApICsgcCB7XG4gICAgICAgIHRleHQtaW5kZW50OiBtYXAtZ2V0KCRyb2xlcy10eXBvLWluZGVudGF0aW9ucywgJ3Bvc3QnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICA+IGgyOmZpcnN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi10b3A6IC0kaGVhZGluZy1vZmZzZXQ7XG4gICAgfVxuXG4gICAgPiBwOmZpcnN0LW9mLXR5cGU6bm90KFtjbGFzc10pIHtcbiAgICAgIHRleHQtaW5kZW50OiAwO1xuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgIH1cblxuICAgICAgJjo6Zmlyc3QtbGV0dGVyIHtcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgIHBhZGRpbmc6IDAgMC4wNWVtO1xuICAgICAgICBtYXJnaW4tdG9wOiAxcHg7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMC4xZW07XG4gICAgICAgIG1hcmdpbi1ib3R0b206IC0ycHg7XG4gICAgICAgIGZvbnQtc2l6ZTogNC41ZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBtYXAtZ2V0KCRyb2xlcy10eXBvLWZvbnQtd2VpZ2h0cywgJ2hlYWRpbmdzJyk7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAwLjk7XG4gICAgICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHN3YXRjaGVzLWNvbG9ycywgJ3BydXNzaWFuLWJsdWUnLCAnYmFzZScpO1xuICAgICAgICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgKi9cbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRzd2F0Y2hlcy1jb2xvcnMsICdwYWxlJywgYmx1ZSk7XG4gICAgICAgIGJvcmRlcjogcGl4ZWxhdGUoMXB4KSBzb2xpZCAkaGVhZGluZy1jb2xvcjtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC4wNWVtO1xuICAgICAgICBib3gtc2hhZG93OiBwaXhlbGF0ZSgtMnB4KSBwaXhlbGF0ZSgtMnB4KSAwIHJnYmEoJGhlYWRpbmctY29sb3IsIDAuMzMpO1xuICAgICAgfVxuXG4gICAgICBALW1vei1kb2N1bWVudCB1cmwtcHJlZml4KCcnKSB7XG4gICAgICAgICY6OmZpcnN0LWxldHRlciB7XG4gICAgICAgICAgcGFkZGluZzogMC4wNWVtO1xuICAgICAgICAgIG1hcmdpbi10b3A6IDRweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGgyIHtcbiAgICAgIGZvbnQtc2l6ZTogMS40ZW07XG4gICAgfVxuXG4gICAgaDMge1xuICAgICAgZm9udC1zaXplOiAxLjJlbTtcbiAgICB9XG5cbiAgICBibG9ja3F1b3RlIHtcbiAgICAgIEBpbmNsdWRlIGZvbnQtc21vb3RoaW5nKCk7XG5cbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgcGFkZGluZzogbWFwLWdldCgkc3dhdGNoZXMtc3BhY2VzLCAnMTUnKSBtYXAtZ2V0KCRzd2F0Y2hlcy1zcGFjZXMsICczMCcpO1xuICAgICAgZm9udC1mYW1pbHk6IG1hcC1nZXQoJHJvbGVzLXR5cG8tZm9udC1mYW1pbGllcywgJ3F1b3RlJyk7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBiYWNrZ3JvdW5kOiBtYXAtZ2V0KCRyb2xlcy1jb2wtYmFja2dyb3VuZHMsICdibG9ja3F1b3RlJyk7XG4gICAgICBib3JkZXI6IDA7XG4gICAgICBib3JkZXItcmFkaXVzOiAwICRyYWRpdXMgJHJhZGl1cyAkcmFkaXVzO1xuICAgICAgYm94LXNoYWRvdzogcGl4ZWxhdGUoLTFweCkgcGl4ZWxhdGUoLTFweCkgMFxuICAgICAgICBkYXJrKG1hcC1nZXQoJHJvbGVzLWNvbC1iYWNrZ3JvdW5kcywgJ2Jsb2NrcXVvdGUnKSwgMTAlKTtcblxuICAgICAgZW0ge1xuICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICB9XG5cbiAgICAgIHAge1xuICAgICAgICBtYXJnaW4tdG9wOiAwO1xuXG4gICAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjaXRlIHtcbiAgICAgICAgQGluY2x1ZGUgZm9udC1zbW9vdGhpbmcoYXV0byk7XG5cbiAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICBjb250ZW50OiAn4oCUICc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICA6Z2xvYmFsKC5oYXMtYmFja2dyb3VuZCkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICA6Z2xvYmFsKC53cC1ibG9jay1pbWFnZSksXG4gICAgOmdsb2JhbCgud3AtYmxvY2stZW1iZWQpIHtcbiAgICAgIGZpZ2NhcHRpb24ge1xuICAgICAgICBjb2xvcjogbWFwLWdldCgkcm9sZXMtY29sLXRleHRzLCAnbWV0YScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIDpnbG9iYWwoLndwLWJsb2NrLXF1b3RlKSxcbiAgICA6Z2xvYmFsKC53cC1ibG9jay1lbWJlZCkge1xuICAgICAgY2xlYXI6IGJvdGg7XG4gICAgfVxuXG4gICAgOmdsb2JhbCgud3AtYmxvY2stamV0cGFjay1zbGlkZXNob3cpIHtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBib3JkZXItcmFkaXVzOiAkcmFkaXVzICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgLyogc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lICovXG4gICAgOmdsb2JhbCgud3AtYmxvY2stamV0cGFjay1zbGlkZXNob3cgLndwLWJsb2NrLWpldHBhY2stc2xpZGVzaG93X3NsaWRlKVxuICAgICAgZmlndXJlIHtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0LWRlZXAoJHN3YXRjaGVzLWNvbG9ycywgJ3BydXNzaWFuLWJsdWUnLCAnYmFzZScpO1xuICAgICAgYm9yZGVyLXJhZGl1czogJHJhZGl1cyAhaW1wb3J0YW50O1xuXG4gICAgICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgKi9cbiAgICAgIDpnbG9iYWwoLndwLWJsb2NrLWpldHBhY2stc2xpZGVzaG93X2ltYWdlKSB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiBtYXAtZ2V0KCRyb2xlcy1icmVha3BvaW50cywgJ3NoZWV0JykgLSAxKSB7XG4gICAgICA6Z2xvYmFsIHtcbiAgICAgICAgLndwLWJsb2NrLWNvbHVtbiAud3AtYmxvY2staW1hZ2UsXG4gICAgICAgIC5hbGlnbmxlZnQsXG4gICAgICAgIC5hbGlnbnJpZ2h0IHtcbiAgICAgICAgICBmbG9hdDogbm9uZTtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBtYXgtd2lkdGg6IG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtaW4nKSAtXG4gICAgICAgICAgICAobWFwLWdldCgkcm9sZXMtc3BhY2VzLCAnbGF5b3V0JykpO1xuICAgICAgICAgIG1hcmdpbi1pbmxpbmU6IGF1dG87XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBociB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiA1MCUgIWltcG9ydGFudDtcbiAgICAgIG1pbi13aWR0aDogMjAwcHg7XG4gICAgICBtYXJnaW46IDFyZW0gYXV0bztcbiAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgIGJvcmRlcjogMDtcbiAgICAgIGJvcmRlci1ib3R0b206IHBpeGVsYXRlKDFweCkgZG90dGVkXG4gICAgICAgIG1hcC1nZXQtZGVlcCgkc3dhdGNoZXMtY29sb3JzLCAnYmx1ZS1ncmVlbicsICdiYXNlJyk7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cblxuICAgIGZpZ3VyZSB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgICAgIGltZyB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIGJvcmRlci1yYWRpdXM6ICRyYWRpdXMgIWltcG9ydGFudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICA6Z2xvYmFsKC53cC1ibG9jay1lbWJlZC5pcy10eXBlLXZpZGVvKSB7XG4gICAgICAvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgKi9cbiAgICAgIDpnbG9iYWwoLndwLWJsb2NrLWVtYmVkX193cmFwcGVyKSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMDtcbiAgICAgICAgcGFkZGluZy10b3A6IG1hdGguZGl2KDksIDE2KSAqIDEwMCU7XG5cbiAgICAgICAgaWZyYW1lIHtcbiAgICAgICAgICBAaW5jbHVkZSBkaW1lbnNpb25zLXNxdWFyZSgxMDAlKTtcblxuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmcmFtZSB7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgYm9yZGVyLXJhZGl1czogJHJhZGl1cztcbiAgICB9XG5cbiAgICA6Z2xvYmFsKC53cC1ibG9jay10YWJsZSkge1xuICAgICAgZm9udC1zaXplOiAwLjhlbTtcblxuICAgICAgdGgsXG4gICAgICB0ZCB7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBpbml0aWFsO1xuICAgICAgfVxuXG4gICAgICAmOmdsb2JhbCguaXMtc3R5bGUtc3RyaXBlcykge1xuICAgICAgICBib3JkZXItYm90dG9tOiAwO1xuXG4gICAgICAgIHRib2R5IHRyOm50aC1jaGlsZChvZGQpIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0LWRlZXAoXG4gICAgICAgICAgICAkc3dhdGNoZXMtY29sb3JzLFxuICAgICAgICAgICAgJ2NvbHVtYmlhLWJsdWUnLFxuICAgICAgICAgICAgJ2xpZ2h0J1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGQge1xuICAgICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogJHJhZGl1cyAwIDAgJHJhZGl1cztcbiAgICAgICAgfVxuXG4gICAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAkcmFkaXVzICRyYWRpdXMgMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gQ29tcG9uZW50cyA+IFRSQUlMRVIgUExBWUVSXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcbkB1c2UgJ3Nhc3M6bWF0aCc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogQ09MT1JTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IExpZ2h0XG5AZnVuY3Rpb24gbGlnaHQoJGNvbG9yLCAkcGVyY2VudCkge1xuICBAcmV0dXJuIG1peCgjZmZmLCAkY29sb3IsICRwZXJjZW50KTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRGFya1xuQGZ1bmN0aW9uIGRhcmsoJGNvbG9yLCAkcGVyY2VudCkge1xuICBAcmV0dXJuIG1peCgjMDAwLCAkY29sb3IsICRwZXJjZW50KTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBNQVBTXG5cbiRwcml2YXRlLXNhc3N5LW1hcHMtc3VwcHJlc3Mtd2FybmluZ3M6IGZhbHNlICFkZWZhdWx0O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IERlZXAgV2FybmluZ1xuLy8gRGlzcGxheXMgYSB3YXJuaW5nIGlmIHRoZSByZXRyaWV2ZWQgdmFsdWUgaXMgYG51bGxgXG5AZnVuY3Rpb24gbWFwLWdldC1kZWVwLXdhcm5pbmcoJHdhcm4sICRnZXQsICRrZXkpIHtcbiAgQGlmIG5vdCAkcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzIHtcbiAgICBAaWYgJGdldCA9PSBudWxsIHtcbiAgICAgIEB3YXJuICdNYXAgaGFzIG5vIHZhbHVlIGZvciBrZXkgc2VhcmNoIGAjeyR3YXJufWAnO1xuICAgIH0gQGVsc2UgaWYgdHlwZS1vZigkZ2V0KSAhPSAnbWFwJyB7XG4gICAgICBAd2FybiAnTm9uLW1hcCB2YWx1ZSBmb3VuZCBmb3Iga2V5IHNlYXJjaCBgI3skd2Fybn1gLCBjYW5ub3Qgc2VhcmNoIGZvciBrZXkgYCN7JGtleX1gJztcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuIG51bGw7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgRGVlcFxuLy8gR2l2ZW4gYSBtYXAgYW5kIGEgbGlzdCBvZiBrZXlzLCBmaW5kIHRoZSB2YWx1ZSBhdCB0aGUgZ2l2ZW4ga2V5XG5AZnVuY3Rpb24gbWFwLWdldC1kZWVwKCRtYXAsICRrZXlzLi4uKSB7XG4gIEBpZiBsZW5ndGgoJGtleXMpID09IDEge1xuICAgICRrZXlzOiBudGgoJGtleXMsIDEpO1xuICB9XG5cbiAgJHdhcm46ICcje250aCgka2V5cywgMSl9JztcbiAgJGxlbmd0aDogbGVuZ3RoKCRrZXlzKTtcbiAgJGdldDogbWFwLWdldCgkbWFwLCBudGgoJGtleXMsIDEpKTtcblxuICBAaWYgJGxlbmd0aCA+IDEge1xuICAgIEBmb3IgJGkgZnJvbSAyIHRocm91Z2ggJGxlbmd0aCB7XG4gICAgICBAaWYgJGdldCAhPSBudWxsIGFuZCB0eXBlLW9mKCRnZXQpID09ICdtYXAnIHtcbiAgICAgICAgJHdhcm46ICR3YXJuICsgJy0+I3tudGgoJGtleXMsICRpKX0nO1xuICAgICAgICAkZ2V0OiBtYXAtZ2V0KCRnZXQsIG50aCgka2V5cywgJGkpKTtcblxuICAgICAgICBAaWYgJGdldCA9PSBudWxsIHtcbiAgICAgICAgICBAcmV0dXJuIG1hcC1nZXQtZGVlcC13YXJuaW5nKCR3YXJuLCAkZ2V0LCBudGgoJGtleXMsICRpKSk7XG4gICAgICAgIH1cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICBAcmV0dXJuIG1hcC1nZXQtZGVlcC13YXJuaW5nKCR3YXJuLCAkZ2V0LCBudGgoJGtleXMsICRpKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkZ2V0O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgR2V0IEtleXNcbkBmdW5jdGlvbiBnZXQta2V5cygka2V5cywgJGNvdW50ZXIpIHtcbiAgJHJldHVybjogKCk7XG5cbiAgQGZvciAkaSBmcm9tIDEgdG8gJGNvdW50ZXIge1xuICAgICRyZXR1cm46IGFwcGVuZCgkcmV0dXJuLCBudGgoJGtleXMsICRpKSk7XG4gIH1cblxuICBAcmV0dXJuICRyZXR1cm47XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1hcCBHZXQgUHJldmlvdXMgS2V5XG5AZnVuY3Rpb24gbWFwLWdldC1wcmV2LWtleSgkbWFwLCAka2V5KSB7XG4gICRpbmRleDogaW5kZXgoJG1hcCwgJGtleSk7XG4gICRwcmV2OiAkaW5kZXggLSAxO1xuICAkcmVzdWx0OiBpZigkcHJldiA+IDAsIG50aCgkbWFwLCAkcHJldiksIG51bGwpO1xuXG4gIEByZXR1cm4gJHJlc3VsdDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFwIFNldFxuQGZ1bmN0aW9uIG1hcC1zZXQoJG1hcCwgJGtleSwgJHZhbHVlKSB7XG4gIEByZXR1cm4gbWFwLW1lcmdlKFxuICAgICRtYXAsXG4gICAgKFxuICAgICAgJGtleTogJHZhbHVlXG4gICAgKVxuICApO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNYXAgU2V0IERlZXBcbkBmdW5jdGlvbiBtYXAtc2V0LWRlZXAoJG1hcCwgJGtleXMsICR2YWx1ZSkge1xuICAkcHJpdmF0ZS1zYXNzeS1tYXBzLXN1cHByZXNzLXdhcm5pbmdzOiB0cnVlICFnbG9iYWw7XG4gICRsZW5ndGg6IGxlbmd0aCgka2V5cyk7XG4gICRnZXQta2V5czogKCk7XG4gICRtYXAtbGV2ZWw6ICgpO1xuXG4gIEBpZiAkbGVuZ3RoID4gMSB7XG4gICAgJGdldC1rZXlzOiBnZXQta2V5cygka2V5cywgJGxlbmd0aCk7XG4gICAgJG1hcC1sZXZlbDogbWFwLWdldC1kZWVwKCRtYXAsICRnZXQta2V5cyk7XG4gIH1cblxuICAkbWVyZ2U6IChcbiAgICBudGgoJGtleXMsICRsZW5ndGgpOiAkdmFsdWVcbiAgKTtcblxuICBAaWYgJG1hcC1sZXZlbCB7XG4gICAgJG1lcmdlOiBtYXAtbWVyZ2UoJG1hcC1sZXZlbCwgJG1lcmdlKTtcbiAgfVxuXG4gIEBmb3IgJGkgZnJvbSAoJGxlbmd0aCAqIC0xICsgMSkgdGhyb3VnaCAtMSB7XG4gICAgJGo6IGFicygkaSk7XG4gICAgJGtleTogbnRoKCRrZXlzLCAkaik7XG5cbiAgICAvLyBAZGVidWcgJGdldC1rZXlzO1xuXG4gICAgQGlmICRqID4gMSB7XG4gICAgICAkZ2V0LWtleXM6IGdldC1rZXlzKCRrZXlzLCAkaik7XG4gICAgICAkbWFwLWxldmVsOiBtYXAtZ2V0LWRlZXAoJG1hcCwgJGdldC1rZXlzKTtcblxuICAgICAgQGlmICRtYXAtbGV2ZWwge1xuICAgICAgICAkbWVyZ2U6IG1hcC1tZXJnZShcbiAgICAgICAgICAkbWFwLWxldmVsLFxuICAgICAgICAgIChcbiAgICAgICAgICAgICRrZXk6ICRtZXJnZVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICAkbWVyZ2U6IChcbiAgICAgICAgICAka2V5OiAkbWVyZ2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IEBlbHNlIHtcbiAgICAgICRtZXJnZTogKFxuICAgICAgICAka2V5OiAkbWVyZ2VcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgJG1hcDogbWFwLW1lcmdlKCRtYXAsICRtZXJnZSk7XG5cbiAgJHByaXZhdGUtc2Fzc3ktbWFwcy1zdXBwcmVzcy13YXJuaW5nczogZmFsc2UgIWdsb2JhbDtcblxuICBAcmV0dXJuICRtYXA7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIEZ1bmN0aW9uczogVU5JVFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUHJvZ3Jlc3NpdmUgY2FsY1xuQGZ1bmN0aW9uIGdldC1wcm9ncmVzc2l2ZS1jYWxjKFxuICAkbWluLW9iai1zaXplLFxuICAkbWF4LW9iai1zaXplLFxuICAkbWluLXZwLFxuICAkbWF4LXZwLFxuICAkdnAtdW5pdDogdndcbikge1xuICBAcmV0dXJuIGNhbGMoXG4gICAgI3skbWluLW9iai1zaXplfSArICN7c3RyaXAtdW5pdCgkbWF4LW9iai1zaXplIC0gJG1pbi1vYmotc2l6ZSl9ICpcbiAgICAgICgoMTAwI3skdnAtdW5pdH0gLSAjeyRtaW4tdnB9KSAvICN7c3RyaXAtdW5pdCgkbWF4LXZwIC0gJG1pbi12cCl9KVxuICApO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnM6IFVOSVRTXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFN0cmlwIHVuaXRcbkBmdW5jdGlvbiBzdHJpcC11bml0KCRudW1iZXIpIHtcbiAgQGlmIHR5cGUtb2YoJG51bWJlcikgPT0gJ251bWJlcicgYW5kIG5vdCB1bml0bGVzcygkbnVtYmVyKSB7XG4gICAgQHJldHVybiAkbnVtYmVyIC8gKCRudW1iZXIgKiAwICsgMSk7XG4gIH1cblxuICBAcmV0dXJuICRudW1iZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBlbS9yZW0gdW5pdFxuQGZ1bmN0aW9uIGVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCBlbSk7XG59XG5cbkBmdW5jdGlvbiByZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIHJlbSk7XG59XG5cbkBmdW5jdGlvbiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsICR1bml0KSB7XG4gICRmczogMTBweDtcblxuICBAaWYgJGZvbnQtc2l6ZSB7XG4gICAgJGZzOiAkZm9udC1zaXplO1xuICB9XG4gIEBlbHNlIGlmICRiYXNlLWh0bWwtZm9udC1zaXplIHsgLy8gbWFrZSBzdXJlIHRvIGRlZmluZSB0aGlzIHZhcmlhYmxlIG9uIHlvdXIgb3duXG4gICAgJGZzOiAkYmFzZS1odG1sLWZvbnQtc2l6ZTtcbiAgfVxuXG4gIEByZXR1cm4gI3tzdHJpcC11bml0KCRudW0pIC8gc3RyaXAtdW5pdCgkZnMpfSN7JHVuaXR9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBHZXQgc2NyZWVuIHBlcmNlbnRcbkBmdW5jdGlvbiBnZXQtc2NyZWVuLXBlcmNlbnQoJHdpZHRoLCAkc2NyZWVuKSB7XG4gIEByZXR1cm4gdW5xdW90ZSgnI3skd2lkdGggKiAxMDAgLyAkc2NyZWVufSUnKTtcbn1cblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gRnVuY3Rpb25zOiBaLUlOREVYRVNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2VuZXJhdG9yXG5AZnVuY3Rpb24gei1pbmRleCgkbWFwLCAka2V5cykge1xuICAkZm91bmQtaW5kZXg6IG51bGw7XG5cbiAgQGVhY2ggJGtleSBpbiAka2V5cyB7XG4gICAgQGlmICh0eXBlLW9mKCRtYXApID09ICdtYXAnKSB7XG4gICAgICAkZm91bmQtaW5kZXg6IGluZGV4KG1hcC1rZXlzKCRtYXApLCAka2V5KTtcbiAgICAgICRtYXA6IG1hcC1nZXQoJG1hcCwgJGtleSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkZm91bmQtaW5kZXg6IGluZGV4KCRtYXAsICRrZXkpO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGZvdW5kLWluZGV4O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBTZXJ2ZXJcbkBmdW5jdGlvbiB6KCRtYXAsICRrZXlzLi4uKSB7XG4gIEByZXR1cm4gei1pbmRleCgkbWFwLCAka2V5cyk7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogRk9STVNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgSW5wdXQgcGxhY2Vob2xkZXJcbkBtaXhpbiBpbnB1dC1wbGFjZWhvbGRlcigkY29sLCAkc3R5bGU6IGl0YWxpYykge1xuICAmOi1tb3otcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxuICAmOjotbW96LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbiAgJjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sO1xuICAgIGZvbnQtc3R5bGU6ICRzdHlsZTtcbiAgfVxuICAmOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbDtcbiAgICBmb250LXN0eWxlOiAkc3R5bGU7XG4gIH1cbn1cblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gTWl4aW5zOiBQT1NJVElPTlNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgQWJzb2x1dGUgY2VudGVyZWRcbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXJlZCgkdHlwZTogYWJzb2x1dGUsICRwb3M6IDUwJSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIHRvcDogJHBvcztcbiAgbGVmdDogJHBvcztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEFic29sdXRlIGNlbnRlcmVkIFhcbkBtaXhpbiBhYnNvbHV0ZS1jZW50ZXJlZC14KCR0eXBlOiBhYnNvbHV0ZSwgJHBvczogNTAlKSB7XG4gIHBvc2l0aW9uOiAkdHlwZTtcbiAgbGVmdDogJHBvcztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBBYnNvbHV0ZSBjZW50ZXJlZCBZXG5AbWl4aW4gYWJzb2x1dGUtY2VudGVyZWQteSgkdHlwZTogYWJzb2x1dGUsICRwb3M6IDUwJSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIHRvcDogJHBvcztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnM6IFNIT1JUSEFORFNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUG9zaXRpb25zXG5AbWl4aW4gcG9zaXRpb24tc3RyZXRjaGVkKCR0eXBlOiBhYnNvbHV0ZSkge1xuICBwb3NpdGlvbjogJHR5cGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgRGltZW5zaW9uc1xuQG1peGluIGRpbWVuc2lvbnMtc3F1YXJlKCR2YWx1ZSkge1xuICB3aWR0aDogJHZhbHVlO1xuICBoZWlnaHQ6ICR2YWx1ZTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgUGFkZGluZ1xuQG1peGluIHBhZGRpbmctdigkdmFsdWUpIHtcbiAgcGFkZGluZy10b3A6ICR2YWx1ZTtcbiAgcGFkZGluZy1ib3R0b206ICR2YWx1ZTtcbn1cblxuQG1peGluIHBhZGRpbmctaCgkdmFsdWUpIHtcbiAgcGFkZGluZy1yaWdodDogJHZhbHVlO1xuICBwYWRkaW5nLWxlZnQ6ICR2YWx1ZTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTWFyZ2luXG5AbWl4aW4gbWFyZ2luLXYoJHZhbHVlKSB7XG4gIG1hcmdpbi10b3A6ICR2YWx1ZTtcbiAgbWFyZ2luLWJvdHRvbTogJHZhbHVlO1xufVxuXG5AbWl4aW4gbWFyZ2luLWgoJHZhbHVlKSB7XG4gIG1hcmdpbi1yaWdodDogJHZhbHVlO1xuICBtYXJnaW4tbGVmdDogJHZhbHVlO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBCb3JkZXJcbkBtaXhpbiBib3JkZXItdigkdmFsdWUpIHtcbiAgYm9yZGVyLXRvcDogJHZhbHVlO1xuICBib3JkZXItYm90dG9tOiAkdmFsdWU7XG59XG5cbkBtaXhpbiBib3JkZXItaCgkdmFsdWUpIHtcbiAgYm9yZGVyLXJpZ2h0OiAkdmFsdWU7XG4gIGJvcmRlci1sZWZ0OiAkdmFsdWU7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIE1peGluczogVFlQT0dSQVBIWVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBGb250IHNtb290aGluZ1xuQG1peGluIGZvbnQtc21vb3RoaW5nKCR2YWx1ZTogYW50aWFsaWFzZWQpIHtcbiAgQGlmICR2YWx1ZSA9PSBhbnRpYWxpYXNlZCB7XG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbiAgfSBAZWxzZSB7XG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogc3VicGl4ZWwtYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGF1dG87XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgVGV4dCB1cHBlcmNhc2VcbkBtaXhpbiB0ZXh0LXVwcGVyY2FzZSgpIHtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgLW1vei1mb250LWZlYXR1cmUtc2V0dGluZ3M6ICdjYXNlJztcbiAgLXdlYmtpdC1mb250LWZlYXR1cmUtc2V0dGluZ3M6ICdjYXNlJztcbiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnY2FzZScgb247XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFNlbGVjdGlvblxuQG1peGluIHNlbGVjdGlvbigkY29sKSB7XG4gICRiZ3I6IGlmKCRjb2wgIT0gdHJhbnNwYXJlbnQsIHJnYmEoJGNvbCwgMC41KSwgcmdiYSgwLCAwLCAwLCAwKSk7XG5cbiAgJjo6LW1vei1zZWxlY3Rpb24ge1xuICAgIGJhY2tncm91bmQ6ICRiZ3I7XG4gIH1cblxuICAmOjpzZWxlY3Rpb24ge1xuICAgIGJhY2tncm91bmQ6ICRiZ3I7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09fFxuLy8gQkFTRVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBJbXBvcnRzXG5AaW1wb3J0ICcuLi8uLi9kZWZzL2JyYW5kLmpzJztcbkBpbXBvcnQgJy4uLy4uL2RlZnMvd2Vic2l0ZS5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEZvbnQgc2l6ZVxuQGZ1bmN0aW9uIHJvbGUoJG1hcCwgJHZhbHVlKSB7XG4gICRyLW1hcDogbWFwLWdldCgkdmFsdWUsICdtYXAnKTtcbiAgJHItdmFsdWU6IG1hcC1nZXQoJHZhbHVlLCAndmFsdWUnKTtcbiAgQHJldHVybiBtYXAtZ2V0KCRyLW1hcCwgJHItdmFsdWUpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnMgPiBDQUxDXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgR2V0IHZhbHVlIGJhc2VkIG9uIHRoZSBiYXNlIGZvbnQgc2l6ZVxuQGZ1bmN0aW9uIGJhc2UoJHZhbHVlKSB7XG4gIEByZXR1cm4gbWF0aC5kaXYoJHZhbHVlLCBtYXAtZ2V0KCRyb2xlcy1yYXRpb3MsICdsYXlvdXQtZ3Jvd3RoJykpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBQcm9ncmVzc2l2ZSBjYWxjXG5AZnVuY3Rpb24gZ2V0LXByb2dyZXNzaXZlLWNhbGMoXG4gICRtaW4tb2JqLXNpemUsXG4gICRtYXgtb2JqLXNpemUsXG4gICRtaW4tdnAsXG4gICRtYXgtdnAsXG4gICR2cC11bml0OiB2d1xuKSB7XG4gIEByZXR1cm4gY2FsYyhcbiAgICAje3BpeGVsYXRlKCRtaW4tb2JqLXNpemUpfSArICN7c3RyaXAtdW5pdCgkbWF4LW9iai1zaXplIC0gJG1pbi1vYmotc2l6ZSl9ICpcbiAgICAgIChcbiAgICAgICAgKDEwMCN7JHZwLXVuaXR9IC0gI3twaXhlbGF0ZSgkbWluLXZwKX0pIC8gI3tzdHJpcC11bml0KFxuICAgICAgICAgICAgJG1heC12cCAtICRtaW4tdnBcbiAgICAgICAgICApfVxuICAgICAgKVxuICApO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBGdW5jdGlvbnMgPiBVTklUU1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFN0cmlwIHVuaXRcbkBmdW5jdGlvbiBzdHJpcC11bml0KCRudW1iZXIpIHtcbiAgQGlmIHR5cGUtb2YoJG51bWJlcikgPT0gJ251bWJlcicgYW5kIG5vdCB1bml0bGVzcygkbnVtYmVyKSB7XG4gICAgQHJldHVybiBtYXRoLmRpdigkbnVtYmVyLCAoJG51bWJlciAqIDAgKyAxKSk7XG4gIH1cblxuICBAcmV0dXJuICRudW1iZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBQeCB1bml0XG5AZnVuY3Rpb24gcGl4ZWxhdGUoJHZhbHVlKSB7XG4gIEByZXR1cm4gI3tzdHJpcC11bml0KCR2YWx1ZSl9UHg7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IEdldCBlbS9yZW0gdW5pdFxuQGZ1bmN0aW9uIGVtKCRudW0sICRmb250LXNpemU6IGZhbHNlKSB7XG4gIEByZXR1cm4gZ2V0LWZvbnQtdW5pdCgkbnVtLCAkZm9udC1zaXplLCBlbSk7XG59XG5cbkBmdW5jdGlvbiByZW0oJG51bSwgJGZvbnQtc2l6ZTogZmFsc2UpIHtcbiAgQHJldHVybiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsIHJlbSk7XG59XG5cbkBmdW5jdGlvbiBnZXQtZm9udC11bml0KCRudW0sICRmb250LXNpemUsICR1bml0KSB7XG4gICRmczogMTBweDtcblxuICBAaWYgJGZvbnQtc2l6ZSB7XG4gICAgJGZzOiAkZm9udC1zaXplO1xuICB9IEBlbHNlIHtcbiAgICAkZnM6IG1hcC1nZXQoJHR5cG9ncmFwaHksICdiYXNlX2ZvbnRfc2l6ZScpO1xuICB9XG5cbiAgQHJldHVybiAje21hdGguZGl2KHN0cmlwLXVuaXQoJG51bSksIHN0cmlwLXVuaXQoJGZzKSl9I3skdW5pdH07XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIERhdGEgPiBTV0FUQ0hFU1xuXG5AaW1wb3J0ICcuLi8uLi9kZWZzL3N3YXRjaGVzL2luZGV4LmpzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX2JyZWFrcG9pbnRzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX3JhdGlvcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9zd2F0Y2hlcy9zd2F0Y2hlc19zY3JlZW5zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3N3YXRjaGVzL3N3YXRjaGVzX3NwYWNlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIERhdGEgPiBST0xFU1xuXG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19ib3JkZXJzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2JyZWFrcG9pbnRzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX2NvbG9ycyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19kaW1lbnNpb25zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3JhdGlvcyc7XG5AaW1wb3J0ICcuLi9yZXNvdXJjZXMvZGF0YS9yb2xlcy9yb2xlc19zY3JlZW5zJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3NoYWRvd3MnO1xuQGltcG9ydCAnLi4vcmVzb3VyY2VzL2RhdGEvcm9sZXMvcm9sZXNfc3BhY2VzJztcbkBpbXBvcnQgJy4uL3Jlc291cmNlcy9kYXRhL3JvbGVzL3JvbGVzX3R5cG9ncmFwaHknO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT18XG4vLyBNaXhpbnMgPiBTQ0FMQUJJTElUWVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCBNb2R1bGVzXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFNjYWxlclxuQG1peGluIHNjYWxlcihcbiAgJHByb3BlcnR5LFxuICAkbWluLXNpemUsXG4gICRtYXgtc2l6ZSxcbiAgJG1pbi12dzogbWFwLWdldCgkcm9sZXMtc2NyZWVucywgJ21pbicpLFxuICAkbWF4LXZ3OiBtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWF4Jylcbikge1xuICAjeyRwcm9wZXJ0eX06ICN7c3RyaXAtdW5pdChtYXRoLmRpdigoJG1pbi12dyAqIDAuOTc5NikgKiAkbWluLXNpemUsIDEwMDApKX12dzsgLy8gMC45Nzk2IGZpeGVzIHdyb25nIGNhbGN1bGF0aW9ucyBpbiBDaHJvbWVcblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAkbWluLXZ3KSB7XG4gICAgI3skcHJvcGVydHl9OiBnZXQtcHJvZ3Jlc3NpdmUtY2FsYygkbWluLXNpemUsICRtYXgtc2l6ZSwgJG1pbi12dywgJG1heC12dyk7XG4gIH1cblxuICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAkbWF4LXZ3KSB7XG4gICAgI3skcHJvcGVydHl9OiBwaXhlbGF0ZSgkbWF4LXNpemUpO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PXxcbi8vIFBsYWNlaG9sZGVycyA+IFNDQUxBQklMSVRZXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IE1vZHVsZXNcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgTmVnYXRpdmVcbiVwaC1uZWdhdGl2ZSB7XG4gIGgxLFxuICBoMixcbiAgaDMsXG4gIGg0LFxuICBoNSxcbiAgaDYsXG4gIHAge1xuICAgIGNvbG9yOiBtYXAtZ2V0KCRyb2xlcy1jb2wtdGV4dHMsICduZWdhdGl2ZScpO1xuICB9XG5cbiAgLm1ldGEge1xuICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHN3YXRjaGVzLWNvbG9ycywgJ2hvbmV5LXllbGxvdycsICdsaWdodCcpO1xuICB9XG5cbiAgLnRleHQtbGluayB7XG4gICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnbm9ybWFsJyk7XG4gICAgYm9yZGVyLWJvdHRvbTogcGl4ZWxhdGUoMXB4KSBkb3R0ZWRcbiAgICAgIHJnYmEobWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdub3JtYWwnKSwgMC4zMyk7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2hvdmVyJyk7XG4gICAgfVxuXG4gICAgJjphY3RpdmUge1xuICAgICAgY29sb3I6IG1hcC1nZXQtZGVlcCgkcm9sZXMtY29sLWxpbmtzLCAnbmVnYXRpdmUnLCAnYWN0aXZlJyk7XG4gICAgfVxuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFdhdmVcbiVwaC13YXZlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiA1MCU7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4td2lkdGg6IG1hdGguZGl2KG1hcC1nZXQoJHJvbGVzLXNjcmVlbnMsICdtYXgnKSwgMik7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcblxuICA+IHN2ZyB7XG4gICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgSGVhZCB3YXZlXG4lcGgtaGVhZC13YXZlIHtcbiAgJHdhdmUtaGVpZ2h0OiBiYXNlKG1hcC1nZXQoJHJvbGVzLWRpbWVuc2lvbnMtd2F2ZXMsICdoZWFkZXInKSk7XG5cbiAgLndhdmUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICB0b3A6IGNhbGMoMTAwJSAtIDFQeCk7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiBlbSgkd2F2ZS1oZWlnaHQpO1xuXG4gICAgLmlubmVyIHtcbiAgICAgIEBpbmNsdWRlIGRpbWVuc2lvbnMtc3F1YXJlKDEwMCUpO1xuXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgICBzdmcge1xuICAgICAgICBAaW5jbHVkZSBkaW1lbnNpb25zLXNxdWFyZSgxMDAlKTtcblxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgbWluLXdpZHRoOiBtYXRoLmRpdihtYXAtZ2V0KCRyb2xlcy1zY3JlZW5zLCAnbWF4JyksIDIpO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQGtleWZyYW1lcyBzbGlkZSB7XG4gICAgZnJvbSB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICB9XG5cbiAgICB0byB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAwKTtcbiAgICB9XG4gIH1cblxuICAuc2Nyb2xsLWJ0biB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvdHRvbTogMjBweDtcbiAgICBsZWZ0OiA1MCU7XG4gICAgei1pbmRleDogMTtcbiAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0LWRlZXAoJHN3YXRjaGVzLWNvbG9ycywgJ2Nvcm5mbG93ZXInLCAnYmFzZScpO1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgIGFuaW1hdGlvbjogc2xpZGUgMXMgZWFzZS1pbi1vdXQgaW5maW5pdGUgYWx0ZXJuYXRlO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0LWRlZXAoJHJvbGVzLWNvbC1saW5rcywgJ25lZ2F0aXZlJywgJ2hvdmVyJyk7XG4gICAgfVxuXG4gICAgJjphY3RpdmUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogbWFwLWdldC1kZWVwKCRyb2xlcy1jb2wtbGlua3MsICduZWdhdGl2ZScsICdhY3RpdmUnKTtcbiAgICB9XG5cbiAgICBzdmcge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgICB9XG5cbiAgICBib2R5Om5vdCguc2Nyb2xsYWJsZSkgJiB7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IFJvb3Rcbi50cmFpbGVyLXBsYXllciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXG4gIGF1ZGlvIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgYSB7XG4gICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoNTZweCk7XG5cbiAgICBtYXJnaW4tYm90dG9tOiBtYXAtZ2V0KCRzd2F0Y2hlcy1zcGFjZXMsICc1Jyk7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBtYXAtZ2V0KCRyb2xlcy1jb2wtdGV4dHMsICduZWdhdGl2ZScpO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcblxuICAgIEBtZWRpYSAoaG92ZXI6IGhvdmVyKSB7XG4gICAgICBzdmcge1xuICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xcyBlYXNlLWluLW91dDtcbiAgICAgIH1cblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIHN2ZyB7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3BhbiB7XG4gICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoMTAwJSk7XG5cbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cbiAgICBzdmcge1xuICAgICAgQGluY2x1ZGUgZGltZW5zaW9ucy1zcXVhcmUoNTAlKTtcblxuICAgICAgZmlsbDogY3VycmVudENvbG9yO1xuICAgIH1cbiAgfVxuXG4gIGxhYmVsIHtcbiAgICBmb250LWZhbWlseTogbWFwLWdldCgkcm9sZXMtdHlwby1mb250LWZhbWlsaWVzLCAndGV4dCcpO1xuICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICBjb2xvcjogbWFwLWdldCgkcm9sZXMtY29sLXRleHRzLCAnbmVnYXRpdmUnKTtcbiAgfVxuXG4gIFtkYXRhLXN0YXRlPSdwbGF5J10gLnBsYXksXG4gIFtkYXRhLXN0YXRlPSdwYXVzZSddIC5zdG9wIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=*/