/*!***************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-4.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/Modal.vue?vue&type=style&index=0&id=7c7e838e&scoped=true&lang=css ***!
  \***************************************************************************************************************************************************************************************************************************************************************************************************************************************************/

/* Можеш да добавиш стилове тук */

/*!********************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-4.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/InputModal.vue?vue&type=style&index=0&id=3a09ca1c&scoped=true&lang=css ***!
  \********************************************************************************************************************************************************************************************************************************************************************************************************************************************************/

/* Може да добавим допълнителни стилове тук */

/*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-4.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/TeamModal.vue?vue&type=style&index=0&id=6a6da59e&scoped=true&lang=css ***!
  \*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************/

.option-btn[data-v-6a6da59e] {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  padding: 15px;
  border-radius: 8px;
  font-size: 16px;
  font-weight: bold;
  text-align: center;
  transition: transform 0.2s ease, background-color 0.2s ease;
}
.option-btn[data-v-6a6da59e]:hover {
  transform: scale(1.05);
}
.icon[data-v-6a6da59e] {
  font-size: 20px;
}
.btn[data-v-6a6da59e] {
  padding: 10px 15px;
  border-radius: 8px;
  font-weight: bold;
  text-align: center;
  color: white;
}
/*скрол и ограничение за модала кога да се появява скрола*/
.modal-content[data-v-6a6da59e] {
  max-height: 500px; /* Примерно ограничение */
  overflow-y: auto;
}

/*!*******************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-4.use[2]!./assets/styles/app.css ***!
  \*******************************************************************************************************************************************************************/
*, ::before, ::after {
  --tw-border-spacing-x: 0;
  --tw-border-spacing-y: 0;
  --tw-translate-x: 0;
  --tw-translate-y: 0;
  --tw-rotate: 0;
  --tw-skew-x: 0;
  --tw-skew-y: 0;
  --tw-scale-x: 1;
  --tw-scale-y: 1;
  --tw-pan-x:  ;
  --tw-pan-y:  ;
  --tw-pinch-zoom:  ;
  --tw-scroll-snap-strictness: proximity;
  --tw-gradient-from-position:  ;
  --tw-gradient-via-position:  ;
  --tw-gradient-to-position:  ;
  --tw-ordinal:  ;
  --tw-slashed-zero:  ;
  --tw-numeric-figure:  ;
  --tw-numeric-spacing:  ;
  --tw-numeric-fraction:  ;
  --tw-ring-inset:  ;
  --tw-ring-offset-width: 0px;
  --tw-ring-offset-color: #fff;
  --tw-ring-color: rgb(59 130 246 / 0.5);
  --tw-ring-offset-shadow: 0 0 #0000;
  --tw-ring-shadow: 0 0 #0000;
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  --tw-blur:  ;
  --tw-brightness:  ;
  --tw-contrast:  ;
  --tw-grayscale:  ;
  --tw-hue-rotate:  ;
  --tw-invert:  ;
  --tw-saturate:  ;
  --tw-sepia:  ;
  --tw-drop-shadow:  ;
  --tw-backdrop-blur:  ;
  --tw-backdrop-brightness:  ;
  --tw-backdrop-contrast:  ;
  --tw-backdrop-grayscale:  ;
  --tw-backdrop-hue-rotate:  ;
  --tw-backdrop-invert:  ;
  --tw-backdrop-opacity:  ;
  --tw-backdrop-saturate:  ;
  --tw-backdrop-sepia:  ;
  --tw-contain-size:  ;
  --tw-contain-layout:  ;
  --tw-contain-paint:  ;
  --tw-contain-style:  ;
}

::backdrop {
  --tw-border-spacing-x: 0;
  --tw-border-spacing-y: 0;
  --tw-translate-x: 0;
  --tw-translate-y: 0;
  --tw-rotate: 0;
  --tw-skew-x: 0;
  --tw-skew-y: 0;
  --tw-scale-x: 1;
  --tw-scale-y: 1;
  --tw-pan-x:  ;
  --tw-pan-y:  ;
  --tw-pinch-zoom:  ;
  --tw-scroll-snap-strictness: proximity;
  --tw-gradient-from-position:  ;
  --tw-gradient-via-position:  ;
  --tw-gradient-to-position:  ;
  --tw-ordinal:  ;
  --tw-slashed-zero:  ;
  --tw-numeric-figure:  ;
  --tw-numeric-spacing:  ;
  --tw-numeric-fraction:  ;
  --tw-ring-inset:  ;
  --tw-ring-offset-width: 0px;
  --tw-ring-offset-color: #fff;
  --tw-ring-color: rgb(59 130 246 / 0.5);
  --tw-ring-offset-shadow: 0 0 #0000;
  --tw-ring-shadow: 0 0 #0000;
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  --tw-blur:  ;
  --tw-brightness:  ;
  --tw-contrast:  ;
  --tw-grayscale:  ;
  --tw-hue-rotate:  ;
  --tw-invert:  ;
  --tw-saturate:  ;
  --tw-sepia:  ;
  --tw-drop-shadow:  ;
  --tw-backdrop-blur:  ;
  --tw-backdrop-brightness:  ;
  --tw-backdrop-contrast:  ;
  --tw-backdrop-grayscale:  ;
  --tw-backdrop-hue-rotate:  ;
  --tw-backdrop-invert:  ;
  --tw-backdrop-opacity:  ;
  --tw-backdrop-saturate:  ;
  --tw-backdrop-sepia:  ;
  --tw-contain-size:  ;
  --tw-contain-layout:  ;
  --tw-contain-paint:  ;
  --tw-contain-style:  ;
}/*
! tailwindcss v3.4.14 | MIT License | https://tailwindcss.com
*//*
1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
*/

*,
::before,
::after {
  box-sizing: border-box; /* 1 */
  border-width: 0; /* 2 */
  border-style: solid; /* 2 */
  border-color: #e5e7eb; /* 2 */
}

::before,
::after {
  --tw-content: '';
}

/*
1. Use a consistent sensible line-height in all browsers.
2. Prevent adjustments of font size after orientation changes in iOS.
3. Use a more readable tab size.
4. Use the user's configured `sans` font-family by default.
5. Use the user's configured `sans` font-feature-settings by default.
6. Use the user's configured `sans` font-variation-settings by default.
7. Disable tap highlights on iOS
*/

html,
:host {
  line-height: 1.5; /* 1 */
  -webkit-text-size-adjust: 100%; /* 2 */
  -moz-tab-size: 4; /* 3 */
  -o-tab-size: 4;
     tab-size: 4; /* 3 */
  font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 4 */
  font-feature-settings: normal; /* 5 */
  font-variation-settings: normal; /* 6 */
  -webkit-tap-highlight-color: transparent; /* 7 */
}

/*
1. Remove the margin in all browsers.
2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
*/

body {
  margin: 0; /* 1 */
  line-height: inherit; /* 2 */
}

/*
1. Add the correct height in Firefox.
2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
3. Ensure horizontal rules are visible by default.
*/

hr {
  height: 0; /* 1 */
  color: inherit; /* 2 */
  border-top-width: 1px; /* 3 */
}

/*
Add the correct text decoration in Chrome, Edge, and Safari.
*/

abbr:where([title]) {
  -webkit-text-decoration: underline dotted;
          text-decoration: underline dotted;
}

/*
Remove the default font size and weight for headings.
*/

h1,
h2,
h3,
h4,
h5,
h6 {
  font-size: inherit;
  font-weight: inherit;
}

/*
Reset links to optimize for opt-in styling instead of opt-out.
*/

a {
  color: inherit;
  text-decoration: inherit;
}

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

b,
strong {
  font-weight: bolder;
}

/*
1. Use the user's configured `mono` font-family by default.
2. Use the user's configured `mono` font-feature-settings by default.
3. Use the user's configured `mono` font-variation-settings by default.
4. Correct the odd `em` font sizing in all browsers.
*/

code,
kbd,
samp,
pre {
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; /* 1 */
  font-feature-settings: normal; /* 2 */
  font-variation-settings: normal; /* 3 */
  font-size: 1em; /* 4 */
}

/*
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;
}

/*
1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
3. Remove gaps between table borders by default.
*/

table {
  text-indent: 0; /* 1 */
  border-color: inherit; /* 2 */
  border-collapse: collapse; /* 3 */
}

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

button,
input,
optgroup,
select,
textarea {
  font-family: inherit; /* 1 */
  font-feature-settings: inherit; /* 1 */
  font-variation-settings: inherit; /* 1 */
  font-size: 100%; /* 1 */
  font-weight: inherit; /* 1 */
  line-height: inherit; /* 1 */
  letter-spacing: inherit; /* 1 */
  color: inherit; /* 1 */
  margin: 0; /* 2 */
  padding: 0; /* 3 */
}

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

button,
select {
  text-transform: none;
}

/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Remove default button styles.
*/

button,
input:where([type='button']),
input:where([type='reset']),
input:where([type='submit']) {
  -webkit-appearance: button; /* 1 */
  background-color: transparent; /* 2 */
  background-image: none; /* 2 */
}

/*
Use the modern Firefox focus style for all focusable elements.
*/

:-moz-focusring {
  outline: auto;
}

/*
Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
*/

:-moz-ui-invalid {
  box-shadow: none;
}

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

progress {
  vertical-align: baseline;
}

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

::-webkit-inner-spin-button,
::-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.
*/

::-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 */
}

/*
Add the correct display in Chrome and Safari.
*/

summary {
  display: list-item;
}

/*
Removes the default spacing and border for appropriate elements.
*/

blockquote,
dl,
dd,
h1,
h2,
h3,
h4,
h5,
h6,
hr,
figure,
p,
pre {
  margin: 0;
}

fieldset {
  margin: 0;
  padding: 0;
}

legend {
  padding: 0;
}

ol,
ul,
menu {
  list-style: none;
  margin: 0;
  padding: 0;
}

/*
Reset default styling for dialogs.
*/
dialog {
  padding: 0;
}

/*
Prevent resizing textareas horizontally by default.
*/

textarea {
  resize: vertical;
}

/*
1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
2. Set the default placeholder color to the user's configured gray 400 color.
*/

input::-moz-placeholder, textarea::-moz-placeholder {
  opacity: 1; /* 1 */
  color: #9ca3af; /* 2 */
}

input::placeholder,
textarea::placeholder {
  opacity: 1; /* 1 */
  color: #9ca3af; /* 2 */
}

/*
Set the default cursor for buttons.
*/

button,
[role="button"] {
  cursor: pointer;
}

/*
Make sure disabled buttons don't get the pointer cursor.
*/
:disabled {
  cursor: default;
}

/*
1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
   This can trigger a poorly considered lint error in some tools but is included by design.
*/

img,
svg,
video,
canvas,
audio,
iframe,
embed,
object {
  display: block; /* 1 */
  vertical-align: middle; /* 2 */
}

/*
Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
*/

img,
video {
  max-width: 100%;
  height: auto;
}

/* Make elements with the HTML hidden attribute stay hidden by default */
[hidden]:where(:not([hidden="until-found"])) {
  display: none;
}
.\!container {
  width: 100% !important;
}
.container {
  width: 100%;
}
@media (min-width: 640px) {

  .\!container {
    max-width: 640px !important;
  }

  .container {
    max-width: 640px;
  }
}
@media (min-width: 768px) {

  .\!container {
    max-width: 768px !important;
  }

  .container {
    max-width: 768px;
  }
}
@media (min-width: 1024px) {

  .\!container {
    max-width: 1024px !important;
  }

  .container {
    max-width: 1024px;
  }
}
@media (min-width: 1280px) {

  .\!container {
    max-width: 1280px !important;
  }

  .container {
    max-width: 1280px;
  }
}
@media (min-width: 1536px) {

  .\!container {
    max-width: 1536px !important;
  }

  .container {
    max-width: 1536px;
  }
}
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border-width: 0;
}
.pointer-events-none {
  pointer-events: none;
}
.visible {
  visibility: visible;
}
.invisible {
  visibility: hidden;
}
.collapse {
  visibility: collapse;
}
.static {
  position: static;
}
.fixed {
  position: fixed;
}
.absolute {
  position: absolute;
}
.relative {
  position: relative;
}
.sticky {
  position: sticky;
}
.-inset-1 {
  inset: -0.25rem;
}
.inset-0 {
  inset: 0px;
}
.-bottom-2 {
  bottom: -0.5rem;
}
.bottom-0 {
  bottom: 0px;
}
.bottom-\[60px\] {
  bottom: 60px;
}
.left-0 {
  left: 0px;
}
.left-10 {
  left: 2.5rem;
}
.right-0 {
  right: 0px;
}
.top-0 {
  top: 0px;
}
.z-10 {
  z-index: 10;
}
.z-20 {
  z-index: 20;
}
.z-30 {
  z-index: 30;
}
.z-40 {
  z-index: 40;
}
.z-50 {
  z-index: 50;
}
.col-span-2 {
  grid-column: span 2 / span 2;
}
.m-4 {
  margin: 1rem;
}
.mx-auto {
  margin-left: auto;
  margin-right: auto;
}
.my-4 {
  margin-top: 1rem;
  margin-bottom: 1rem;
}
.my-6 {
  margin-top: 1.5rem;
  margin-bottom: 1.5rem;
}
.-mt-8 {
  margin-top: -2rem;
}
.mb-1 {
  margin-bottom: 0.25rem;
}
.mb-2 {
  margin-bottom: 0.5rem;
}
.mb-3 {
  margin-bottom: 0.75rem;
}
.mb-4 {
  margin-bottom: 1rem;
}
.mb-5 {
  margin-bottom: 1.25rem;
}
.mb-6 {
  margin-bottom: 1.5rem;
}
.mb-8 {
  margin-bottom: 2rem;
}
.ml-1 {
  margin-left: 0.25rem;
}
.ml-2 {
  margin-left: 0.5rem;
}
.ml-3 {
  margin-left: 0.75rem;
}
.ml-4 {
  margin-left: 1rem;
}
.ml-6 {
  margin-left: 1.5rem;
}
.mr-2 {
  margin-right: 0.5rem;
}
.mt-0 {
  margin-top: 0px;
}
.mt-0\.5 {
  margin-top: 0.125rem;
}
.mt-1 {
  margin-top: 0.25rem;
}
.mt-10 {
  margin-top: 2.5rem;
}
.mt-2 {
  margin-top: 0.5rem;
}
.mt-3 {
  margin-top: 0.75rem;
}
.mt-4 {
  margin-top: 1rem;
}
.mt-5 {
  margin-top: 1.25rem;
}
.mt-6 {
  margin-top: 1.5rem;
}
.mt-8 {
  margin-top: 2rem;
}
.mt-auto {
  margin-top: auto;
}
.block {
  display: block;
}
.inline-block {
  display: inline-block;
}
.inline {
  display: inline;
}
.flex {
  display: flex;
}
.inline-flex {
  display: inline-flex;
}
.table {
  display: table;
}
.grid {
  display: grid;
}
.hidden {
  display: none;
}
.aspect-\[1\/1\] {
  aspect-ratio: 1/1;
}
.h-1\.5 {
  height: 0.375rem;
}
.h-10 {
  height: 2.5rem;
}
.h-16 {
  height: 4rem;
}
.h-2 {
  height: 0.5rem;
}
.h-20 {
  height: 5rem;
}
.h-24 {
  height: 6rem;
}
.h-36 {
  height: 9rem;
}
.h-4 {
  height: 1rem;
}
.h-5 {
  height: 1.25rem;
}
.h-6 {
  height: 1.5rem;
}
.h-9 {
  height: 2.25rem;
}
.h-auto {
  height: auto;
}
.h-full {
  height: 100%;
}
.max-h-80 {
  max-height: 20rem;
}
.max-h-\[300px\] {
  max-height: 300px;
}
.max-h-\[400px\] {
  max-height: 400px;
}
.max-h-\[520px\] {
  max-height: 520px;
}
.max-h-\[70vh\] {
  max-height: 70vh;
}
.min-h-\[2\.25rem\] {
  min-height: 2.25rem;
}
.min-h-full {
  min-height: 100%;
}
.min-h-screen {
  min-height: 100vh;
}
.w-1\/2 {
  width: 50%;
}
.w-1\/3 {
  width: 33.333333%;
}
.w-1\/5 {
  width: 20%;
}
.w-10 {
  width: 2.5rem;
}
.w-14 {
  width: 3.5rem;
}
.w-16 {
  width: 4rem;
}
.w-2 {
  width: 0.5rem;
}
.w-20 {
  width: 5rem;
}
.w-24 {
  width: 6rem;
}
.w-28 {
  width: 7rem;
}
.w-32 {
  width: 8rem;
}
.w-4 {
  width: 1rem;
}
.w-5 {
  width: 1.25rem;
}
.w-64 {
  width: 16rem;
}
.w-\[12\%\] {
  width: 12%;
}
.w-\[20\%\] {
  width: 20%;
}
.w-\[200px\] {
  width: 200px;
}
.w-\[4\%\] {
  width: 4%;
}
.w-\[6\%\] {
  width: 6%;
}
.w-\[8\%\] {
  width: 8%;
}
.w-full {
  width: 100%;
}
.w-max {
  width: -moz-max-content;
  width: max-content;
}
.min-w-\[200px\] {
  min-width: 200px;
}
.min-w-\[260px\] {
  min-width: 260px;
}
.min-w-\[800px\] {
  min-width: 800px;
}
.min-w-\[9\.5rem\] {
  min-width: 9.5rem;
}
.min-w-full {
  min-width: 100%;
}
.max-w-2xl {
  max-width: 42rem;
}
.max-w-3xl {
  max-width: 48rem;
}
.max-w-4xl {
  max-width: 56rem;
}
.max-w-6xl {
  max-width: 72rem;
}
.max-w-7xl {
  max-width: 80rem;
}
.max-w-\[52rem\] {
  max-width: 52rem;
}
.max-w-\[720px\] {
  max-width: 720px;
}
.max-w-\[80px\] {
  max-width: 80px;
}
.max-w-full {
  max-width: 100%;
}
.max-w-lg {
  max-width: 32rem;
}
.max-w-md {
  max-width: 28rem;
}
.max-w-sm {
  max-width: 24rem;
}
.max-w-xs {
  max-width: 20rem;
}
.max-w-5xl {
  max-width: 64rem;
}
.flex-1 {
  flex: 1 1 0%;
}
.flex-shrink {
  flex-shrink: 1;
}
.shrink-0 {
  flex-shrink: 0;
}
.table-auto {
  table-layout: auto;
}
.table-fixed {
  table-layout: fixed;
}
.border-collapse {
  border-collapse: collapse;
}
.-translate-x-full {
  --tw-translate-x: -100%;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.-translate-y-full {
  --tw-translate-y: -100%;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.translate-x-0 {
  --tw-translate-x: 0px;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.translate-x-full {
  --tw-translate-x: 100%;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.translate-y-full {
  --tw-translate-y: 100%;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.-rotate-45 {
  --tw-rotate: -45deg;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.rotate-180 {
  --tw-rotate: 180deg;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.rotate-45 {
  --tw-rotate: 45deg;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.transform {
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.transform-none {
  transform: none;
}
.cursor-default {
  cursor: default;
}
.cursor-not-allowed {
  cursor: not-allowed;
}
.cursor-pointer {
  cursor: pointer;
}
.select-none {
  -webkit-user-select: none;
     -moz-user-select: none;
          user-select: none;
}
.resize {
  resize: both;
}
.list-inside {
  list-style-position: inside;
}
.list-disc {
  list-style-type: disc;
}
.appearance-none {
  -webkit-appearance: none;
     -moz-appearance: none;
          appearance: none;
}
.grid-cols-1 {
  grid-template-columns: repeat(1, minmax(0, 1fr));
}
.grid-cols-2 {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}
.grid-cols-3 {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}
.grid-cols-4 {
  grid-template-columns: repeat(4, minmax(0, 1fr));
}
.grid-cols-7 {
  grid-template-columns: repeat(7, minmax(0, 1fr));
}
.flex-col {
  flex-direction: column;
}
.flex-wrap {
  flex-wrap: wrap;
}
.items-start {
  align-items: flex-start;
}
.items-end {
  align-items: flex-end;
}
.items-center {
  align-items: center;
}
.justify-start {
  justify-content: flex-start;
}
.justify-end {
  justify-content: flex-end;
}
.justify-center {
  justify-content: center;
}
.justify-between {
  justify-content: space-between;
}
.gap-1 {
  gap: 0.25rem;
}
.gap-2 {
  gap: 0.5rem;
}
.gap-3 {
  gap: 0.75rem;
}
.gap-4 {
  gap: 1rem;
}
.gap-6 {
  gap: 1.5rem;
}
.gap-x-4 {
  -moz-column-gap: 1rem;
       column-gap: 1rem;
}
.gap-y-1 {
  row-gap: 0.25rem;
}
.space-x-2 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-x-reverse: 0;
  margin-right: calc(0.5rem * var(--tw-space-x-reverse));
  margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
}
.space-x-4 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-x-reverse: 0;
  margin-right: calc(1rem * var(--tw-space-x-reverse));
  margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
}
.space-x-5 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-x-reverse: 0;
  margin-right: calc(1.25rem * var(--tw-space-x-reverse));
  margin-left: calc(1.25rem * calc(1 - var(--tw-space-x-reverse)));
}
.space-y-0\.5 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(0.125rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(0.125rem * var(--tw-space-y-reverse));
}
.space-y-10 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(2.5rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(2.5rem * var(--tw-space-y-reverse));
}
.space-y-2 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));
}
.space-y-3 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));
}
.space-y-4 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(1rem * var(--tw-space-y-reverse));
}
.space-y-6 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));
}
.divide-x > :not([hidden]) ~ :not([hidden]) {
  --tw-divide-x-reverse: 0;
  border-right-width: calc(1px * var(--tw-divide-x-reverse));
  border-left-width: calc(1px * calc(1 - var(--tw-divide-x-reverse)));
}
.divide-y > :not([hidden]) ~ :not([hidden]) {
  --tw-divide-y-reverse: 0;
  border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
  border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
}
.divide-gray-100 > :not([hidden]) ~ :not([hidden]) {
  --tw-divide-opacity: 1;
  border-color: rgb(243 244 246 / var(--tw-divide-opacity));
}
.divide-slate-100 > :not([hidden]) ~ :not([hidden]) {
  --tw-divide-opacity: 1;
  border-color: rgb(241 245 249 / var(--tw-divide-opacity));
}
.divide-slate-800\/60 > :not([hidden]) ~ :not([hidden]) {
  border-color: rgb(30 41 59 / 0.6);
}
.divide-slate-200 > :not([hidden]) ~ :not([hidden]) {
  --tw-divide-opacity: 1;
  border-color: rgb(226 232 240 / var(--tw-divide-opacity));
}
.overflow-auto {
  overflow: auto;
}
.overflow-hidden {
  overflow: hidden;
}
.overflow-x-auto {
  overflow-x: auto;
}
.overflow-y-auto {
  overflow-y: auto;
}
.truncate {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.whitespace-nowrap {
  white-space: nowrap;
}
.rounded {
  border-radius: 0.25rem;
}
.rounded-2xl {
  border-radius: 1rem;
}
.rounded-\[1\.5rem\] {
  border-radius: 1.5rem;
}
.rounded-\[1\.75rem\] {
  border-radius: 1.75rem;
}
.rounded-full {
  border-radius: 9999px;
}
.rounded-lg {
  border-radius: 0.5rem;
}
.rounded-md {
  border-radius: 0.375rem;
}
.rounded-xl {
  border-radius: 0.75rem;
}
.rounded-b-2xl {
  border-bottom-right-radius: 1rem;
  border-bottom-left-radius: 1rem;
}
.rounded-e-lg {
  border-start-end-radius: 0.5rem;
  border-end-end-radius: 0.5rem;
}
.rounded-l-lg {
  border-top-left-radius: 0.5rem;
  border-bottom-left-radius: 0.5rem;
}
.rounded-r-lg {
  border-top-right-radius: 0.5rem;
  border-bottom-right-radius: 0.5rem;
}
.rounded-s-lg {
  border-start-start-radius: 0.5rem;
  border-end-start-radius: 0.5rem;
}
.rounded-t-md {
  border-top-left-radius: 0.375rem;
  border-top-right-radius: 0.375rem;
}
.border {
  border-width: 1px;
}
.border-0 {
  border-width: 0px;
}
.border-b {
  border-bottom-width: 1px;
}
.border-l {
  border-left-width: 1px;
}
.border-l-4 {
  border-left-width: 4px;
}
.border-t {
  border-top-width: 1px;
}
.border-blue-300 {
  --tw-border-opacity: 1;
  border-color: rgb(147 197 253 / var(--tw-border-opacity));
}
.border-blue-600 {
  --tw-border-opacity: 1;
  border-color: rgb(37 99 235 / var(--tw-border-opacity));
}
.border-blue-700 {
  --tw-border-opacity: 1;
  border-color: rgb(29 78 216 / var(--tw-border-opacity));
}
.border-gray-100 {
  --tw-border-opacity: 1;
  border-color: rgb(243 244 246 / var(--tw-border-opacity));
}
.border-gray-200 {
  --tw-border-opacity: 1;
  border-color: rgb(229 231 235 / var(--tw-border-opacity));
}
.border-gray-300 {
  --tw-border-opacity: 1;
  border-color: rgb(209 213 219 / var(--tw-border-opacity));
}
.border-gray-400 {
  --tw-border-opacity: 1;
  border-color: rgb(156 163 175 / var(--tw-border-opacity));
}
.border-gray-600 {
  --tw-border-opacity: 1;
  border-color: rgb(75 85 99 / var(--tw-border-opacity));
}
.border-gray-700 {
  --tw-border-opacity: 1;
  border-color: rgb(55 65 81 / var(--tw-border-opacity));
}
.border-indigo-200 {
  --tw-border-opacity: 1;
  border-color: rgb(199 210 254 / var(--tw-border-opacity));
}
.border-slate-200 {
  --tw-border-opacity: 1;
  border-color: rgb(226 232 240 / var(--tw-border-opacity));
}
.border-slate-300 {
  --tw-border-opacity: 1;
  border-color: rgb(203 213 225 / var(--tw-border-opacity));
}
.border-slate-700 {
  --tw-border-opacity: 1;
  border-color: rgb(51 65 85 / var(--tw-border-opacity));
}
.border-slate-800 {
  --tw-border-opacity: 1;
  border-color: rgb(30 41 59 / var(--tw-border-opacity));
}
.border-slate-800\/60 {
  border-color: rgb(30 41 59 / 0.6);
}
.border-stone-400\/70 {
  border-color: rgb(168 162 158 / 0.7);
}
.border-stone-500\/80 {
  border-color: rgb(120 113 108 / 0.8);
}
.border-transparent {
  border-color: transparent;
}
.border-yellow-500 {
  --tw-border-opacity: 1;
  border-color: rgb(234 179 8 / var(--tw-border-opacity));
}
.\!bg-gray-50 {
  --tw-bg-opacity: 1 !important;
  background-color: rgb(249 250 251 / var(--tw-bg-opacity)) !important;
}
.bg-amber-400 {
  --tw-bg-opacity: 1;
  background-color: rgb(251 191 36 / var(--tw-bg-opacity));
}
.bg-amber-600 {
  --tw-bg-opacity: 1;
  background-color: rgb(217 119 6 / var(--tw-bg-opacity));
}
.bg-black\/60 {
  background-color: rgb(0 0 0 / 0.6);
}
.bg-blue-100 {
  --tw-bg-opacity: 1;
  background-color: rgb(219 234 254 / var(--tw-bg-opacity));
}
.bg-blue-50 {
  --tw-bg-opacity: 1;
  background-color: rgb(239 246 255 / var(--tw-bg-opacity));
}
.bg-blue-500 {
  --tw-bg-opacity: 1;
  background-color: rgb(59 130 246 / var(--tw-bg-opacity));
}
.bg-blue-600 {
  --tw-bg-opacity: 1;
  background-color: rgb(37 99 235 / var(--tw-bg-opacity));
}
.bg-blue-700 {
  --tw-bg-opacity: 1;
  background-color: rgb(29 78 216 / var(--tw-bg-opacity));
}
.bg-emerald-600 {
  --tw-bg-opacity: 1;
  background-color: rgb(5 150 105 / var(--tw-bg-opacity));
}
.bg-gray-100 {
  --tw-bg-opacity: 1;
  background-color: rgb(243 244 246 / var(--tw-bg-opacity));
}
.bg-gray-200 {
  --tw-bg-opacity: 1;
  background-color: rgb(229 231 235 / var(--tw-bg-opacity));
}
.bg-gray-300 {
  --tw-bg-opacity: 1;
  background-color: rgb(209 213 219 / var(--tw-bg-opacity));
}
.bg-gray-400 {
  --tw-bg-opacity: 1;
  background-color: rgb(156 163 175 / var(--tw-bg-opacity));
}
.bg-gray-50 {
  --tw-bg-opacity: 1;
  background-color: rgb(249 250 251 / var(--tw-bg-opacity));
}
.bg-gray-600 {
  --tw-bg-opacity: 1;
  background-color: rgb(75 85 99 / var(--tw-bg-opacity));
}
.bg-gray-700 {
  --tw-bg-opacity: 1;
  background-color: rgb(55 65 81 / var(--tw-bg-opacity));
}
.bg-gray-800 {
  --tw-bg-opacity: 1;
  background-color: rgb(31 41 55 / var(--tw-bg-opacity));
}
.bg-gray-900 {
  --tw-bg-opacity: 1;
  background-color: rgb(17 24 39 / var(--tw-bg-opacity));
}
.bg-gray-900\/50 {
  background-color: rgb(17 24 39 / 0.5);
}
.bg-green-100 {
  --tw-bg-opacity: 1;
  background-color: rgb(220 252 231 / var(--tw-bg-opacity));
}
.bg-green-200 {
  --tw-bg-opacity: 1;
  background-color: rgb(187 247 208 / var(--tw-bg-opacity));
}
.bg-green-400 {
  --tw-bg-opacity: 1;
  background-color: rgb(74 222 128 / var(--tw-bg-opacity));
}
.bg-green-500 {
  --tw-bg-opacity: 1;
  background-color: rgb(34 197 94 / var(--tw-bg-opacity));
}
.bg-indigo-50 {
  --tw-bg-opacity: 1;
  background-color: rgb(238 242 255 / var(--tw-bg-opacity));
}
.bg-indigo-600 {
  --tw-bg-opacity: 1;
  background-color: rgb(79 70 229 / var(--tw-bg-opacity));
}
.bg-indigo-600\/95 {
  background-color: rgb(79 70 229 / 0.95);
}
.bg-purple-100 {
  --tw-bg-opacity: 1;
  background-color: rgb(243 232 255 / var(--tw-bg-opacity));
}
.bg-red-100 {
  --tw-bg-opacity: 1;
  background-color: rgb(254 226 226 / var(--tw-bg-opacity));
}
.bg-red-500 {
  --tw-bg-opacity: 1;
  background-color: rgb(239 68 68 / var(--tw-bg-opacity));
}
.bg-red-700 {
  --tw-bg-opacity: 1;
  background-color: rgb(185 28 28 / var(--tw-bg-opacity));
}
.bg-slate-100 {
  --tw-bg-opacity: 1;
  background-color: rgb(241 245 249 / var(--tw-bg-opacity));
}
.bg-slate-400 {
  --tw-bg-opacity: 1;
  background-color: rgb(148 163 184 / var(--tw-bg-opacity));
}
.bg-slate-50 {
  --tw-bg-opacity: 1;
  background-color: rgb(248 250 252 / var(--tw-bg-opacity));
}
.bg-slate-800 {
  --tw-bg-opacity: 1;
  background-color: rgb(30 41 59 / var(--tw-bg-opacity));
}
.bg-slate-800\/70 {
  background-color: rgb(30 41 59 / 0.7);
}
.bg-slate-900 {
  --tw-bg-opacity: 1;
  background-color: rgb(15 23 42 / var(--tw-bg-opacity));
}
.bg-slate-900\/50 {
  background-color: rgb(15 23 42 / 0.5);
}
.bg-slate-900\/60 {
  background-color: rgb(15 23 42 / 0.6);
}
.bg-white {
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity));
}
.bg-white\/50 {
  background-color: rgb(255 255 255 / 0.5);
}
.bg-yellow-100 {
  --tw-bg-opacity: 1;
  background-color: rgb(254 249 195 / var(--tw-bg-opacity));
}
.bg-yellow-400 {
  --tw-bg-opacity: 1;
  background-color: rgb(250 204 21 / var(--tw-bg-opacity));
}
.bg-yellow-500 {
  --tw-bg-opacity: 1;
  background-color: rgb(234 179 8 / var(--tw-bg-opacity));
}
.bg-yellow-600 {
  --tw-bg-opacity: 1;
  background-color: rgb(202 138 4 / var(--tw-bg-opacity));
}
.bg-gradient-to-b {
  background-image: linear-gradient(to bottom, var(--tw-gradient-stops));
}
.bg-gradient-to-br {
  background-image: linear-gradient(to bottom right, var(--tw-gradient-stops));
}
.from-slate-800 {
  --tw-gradient-from: #1e293b var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(30 41 59 / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
}
.from-stone-200 {
  --tw-gradient-from: #e7e5e4 var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(231 229 228 / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
}
.via-stone-300 {
  --tw-gradient-to: rgb(214 211 209 / 0)  var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), #d6d3d1 var(--tw-gradient-via-position), var(--tw-gradient-to);
}
.to-slate-700 {
  --tw-gradient-to: #334155 var(--tw-gradient-to-position);
}
.to-stone-400 {
  --tw-gradient-to: #a8a29e var(--tw-gradient-to-position);
}
.object-cover {
  -o-object-fit: cover;
     object-fit: cover;
}
.p-0 {
  padding: 0px;
}
.p-0\.5 {
  padding: 0.125rem;
}
.p-1 {
  padding: 0.25rem;
}
.p-1\.5 {
  padding: 0.375rem;
}
.p-2 {
  padding: 0.5rem;
}
.p-2\.5 {
  padding: 0.625rem;
}
.p-3 {
  padding: 0.75rem;
}
.p-4 {
  padding: 1rem;
}
.p-5 {
  padding: 1.25rem;
}
.p-6 {
  padding: 1.5rem;
}
.px-1 {
  padding-left: 0.25rem;
  padding-right: 0.25rem;
}
.px-2 {
  padding-left: 0.5rem;
  padding-right: 0.5rem;
}
.px-3 {
  padding-left: 0.75rem;
  padding-right: 0.75rem;
}
.px-4 {
  padding-left: 1rem;
  padding-right: 1rem;
}
.px-5 {
  padding-left: 1.25rem;
  padding-right: 1.25rem;
}
.px-6 {
  padding-left: 1.5rem;
  padding-right: 1.5rem;
}
.px-8 {
  padding-left: 2rem;
  padding-right: 2rem;
}
.py-1 {
  padding-top: 0.25rem;
  padding-bottom: 0.25rem;
}
.py-1\.5 {
  padding-top: 0.375rem;
  padding-bottom: 0.375rem;
}
.py-10 {
  padding-top: 2.5rem;
  padding-bottom: 2.5rem;
}
.py-2 {
  padding-top: 0.5rem;
  padding-bottom: 0.5rem;
}
.py-2\.5 {
  padding-top: 0.625rem;
  padding-bottom: 0.625rem;
}
.py-3 {
  padding-top: 0.75rem;
  padding-bottom: 0.75rem;
}
.py-4 {
  padding-top: 1rem;
  padding-bottom: 1rem;
}
.py-5 {
  padding-top: 1.25rem;
  padding-bottom: 1.25rem;
}
.py-6 {
  padding-top: 1.5rem;
  padding-bottom: 1.5rem;
}
.py-8 {
  padding-top: 2rem;
  padding-bottom: 2rem;
}
.pl-4 {
  padding-left: 1rem;
}
.pl-5 {
  padding-left: 1.25rem;
}
.pr-4 {
  padding-right: 1rem;
}
.pt-16 {
  padding-top: 4rem;
}
.pt-2 {
  padding-top: 0.5rem;
}
.pt-5 {
  padding-top: 1.25rem;
}
.text-left {
  text-align: left;
}
.text-center {
  text-align: center;
}
.text-right {
  text-align: right;
}
.align-middle {
  vertical-align: middle;
}
.text-2xl {
  font-size: 1.5rem;
  line-height: 2rem;
}
.text-3xl {
  font-size: 1.875rem;
  line-height: 2.25rem;
}
.text-4xl {
  font-size: 2.25rem;
  line-height: 2.5rem;
}
.text-\[10px\] {
  font-size: 10px;
}
.text-\[11px\] {
  font-size: 11px;
}
.text-base {
  font-size: 1rem;
  line-height: 1.5rem;
}
.text-lg {
  font-size: 1.125rem;
  line-height: 1.75rem;
}
.text-sm {
  font-size: 0.875rem;
  line-height: 1.25rem;
}
.text-xl {
  font-size: 1.25rem;
  line-height: 1.75rem;
}
.text-xs {
  font-size: 0.75rem;
  line-height: 1rem;
}
.font-bold {
  font-weight: 700;
}
.font-extrabold {
  font-weight: 800;
}
.font-medium {
  font-weight: 500;
}
.font-semibold {
  font-weight: 600;
}
.uppercase {
  text-transform: uppercase;
}
.italic {
  font-style: italic;
}
.leading-6 {
  line-height: 1.5rem;
}
.leading-9 {
  line-height: 2.25rem;
}
.leading-relaxed {
  line-height: 1.625;
}
.leading-snug {
  line-height: 1.375;
}
.leading-tight {
  line-height: 1.25;
}
.tracking-\[0\.25em\] {
  letter-spacing: 0.25em;
}
.tracking-tight {
  letter-spacing: -0.025em;
}
.text-amber-700 {
  --tw-text-opacity: 1;
  color: rgb(180 83 9 / var(--tw-text-opacity));
}
.text-black {
  --tw-text-opacity: 1;
  color: rgb(0 0 0 / var(--tw-text-opacity));
}
.text-blue-400 {
  --tw-text-opacity: 1;
  color: rgb(96 165 250 / var(--tw-text-opacity));
}
.text-blue-500 {
  --tw-text-opacity: 1;
  color: rgb(59 130 246 / var(--tw-text-opacity));
}
.text-blue-600 {
  --tw-text-opacity: 1;
  color: rgb(37 99 235 / var(--tw-text-opacity));
}
.text-blue-700 {
  --tw-text-opacity: 1;
  color: rgb(29 78 216 / var(--tw-text-opacity));
}
.text-blue-800 {
  --tw-text-opacity: 1;
  color: rgb(30 64 175 / var(--tw-text-opacity));
}
.text-emerald-700 {
  --tw-text-opacity: 1;
  color: rgb(4 120 87 / var(--tw-text-opacity));
}
.text-gray-100 {
  --tw-text-opacity: 1;
  color: rgb(243 244 246 / var(--tw-text-opacity));
}
.text-gray-300 {
  --tw-text-opacity: 1;
  color: rgb(209 213 219 / var(--tw-text-opacity));
}
.text-gray-400 {
  --tw-text-opacity: 1;
  color: rgb(156 163 175 / var(--tw-text-opacity));
}
.text-gray-500 {
  --tw-text-opacity: 1;
  color: rgb(107 114 128 / var(--tw-text-opacity));
}
.text-gray-600 {
  --tw-text-opacity: 1;
  color: rgb(75 85 99 / var(--tw-text-opacity));
}
.text-gray-700 {
  --tw-text-opacity: 1;
  color: rgb(55 65 81 / var(--tw-text-opacity));
}
.text-gray-800 {
  --tw-text-opacity: 1;
  color: rgb(31 41 55 / var(--tw-text-opacity));
}
.text-gray-900 {
  --tw-text-opacity: 1;
  color: rgb(17 24 39 / var(--tw-text-opacity));
}
.text-green-600 {
  --tw-text-opacity: 1;
  color: rgb(22 163 74 / var(--tw-text-opacity));
}
.text-green-700 {
  --tw-text-opacity: 1;
  color: rgb(21 128 61 / var(--tw-text-opacity));
}
.text-green-800 {
  --tw-text-opacity: 1;
  color: rgb(22 101 52 / var(--tw-text-opacity));
}
.text-indigo-300 {
  --tw-text-opacity: 1;
  color: rgb(165 180 252 / var(--tw-text-opacity));
}
.text-indigo-600 {
  --tw-text-opacity: 1;
  color: rgb(79 70 229 / var(--tw-text-opacity));
}
.text-indigo-700 {
  --tw-text-opacity: 1;
  color: rgb(67 56 202 / var(--tw-text-opacity));
}
.text-indigo-900 {
  --tw-text-opacity: 1;
  color: rgb(49 46 129 / var(--tw-text-opacity));
}
.text-indigo-900\/90 {
  color: rgb(49 46 129 / 0.9);
}
.text-purple-700 {
  --tw-text-opacity: 1;
  color: rgb(126 34 206 / var(--tw-text-opacity));
}
.text-red-500 {
  --tw-text-opacity: 1;
  color: rgb(239 68 68 / var(--tw-text-opacity));
}
.text-red-600 {
  --tw-text-opacity: 1;
  color: rgb(220 38 38 / var(--tw-text-opacity));
}
.text-red-700 {
  --tw-text-opacity: 1;
  color: rgb(185 28 28 / var(--tw-text-opacity));
}
.text-red-800 {
  --tw-text-opacity: 1;
  color: rgb(153 27 27 / var(--tw-text-opacity));
}
.text-sky-400 {
  --tw-text-opacity: 1;
  color: rgb(56 189 248 / var(--tw-text-opacity));
}
.text-slate-100 {
  --tw-text-opacity: 1;
  color: rgb(241 245 249 / var(--tw-text-opacity));
}
.text-slate-200 {
  --tw-text-opacity: 1;
  color: rgb(226 232 240 / var(--tw-text-opacity));
}
.text-slate-300 {
  --tw-text-opacity: 1;
  color: rgb(203 213 225 / var(--tw-text-opacity));
}
.text-slate-400 {
  --tw-text-opacity: 1;
  color: rgb(148 163 184 / var(--tw-text-opacity));
}
.text-slate-500 {
  --tw-text-opacity: 1;
  color: rgb(100 116 139 / var(--tw-text-opacity));
}
.text-slate-600 {
  --tw-text-opacity: 1;
  color: rgb(71 85 105 / var(--tw-text-opacity));
}
.text-slate-700 {
  --tw-text-opacity: 1;
  color: rgb(51 65 85 / var(--tw-text-opacity));
}
.text-slate-800 {
  --tw-text-opacity: 1;
  color: rgb(30 41 59 / var(--tw-text-opacity));
}
.text-slate-900 {
  --tw-text-opacity: 1;
  color: rgb(15 23 42 / var(--tw-text-opacity));
}
.text-white {
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity));
}
.text-yellow-400 {
  --tw-text-opacity: 1;
  color: rgb(250 204 21 / var(--tw-text-opacity));
}
.text-yellow-600 {
  --tw-text-opacity: 1;
  color: rgb(202 138 4 / var(--tw-text-opacity));
}
.text-yellow-700 {
  --tw-text-opacity: 1;
  color: rgb(161 98 7 / var(--tw-text-opacity));
}
.text-sky-600 {
  --tw-text-opacity: 1;
  color: rgb(2 132 199 / var(--tw-text-opacity));
}
.underline {
  text-decoration-line: underline;
}
.placeholder-gray-500::-moz-placeholder {
  --tw-placeholder-opacity: 1;
  color: rgb(107 114 128 / var(--tw-placeholder-opacity));
}
.placeholder-gray-500::placeholder {
  --tw-placeholder-opacity: 1;
  color: rgb(107 114 128 / var(--tw-placeholder-opacity));
}
.opacity-0 {
  opacity: 0;
}
.opacity-100 {
  opacity: 1;
}
.opacity-90 {
  opacity: 0.9;
}
.shadow {
  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.shadow-\[0_16px_40px_rgba\(0\2c 0\2c 0\2c 0\.55\)\] {
  --tw-shadow: 0 16px 40px rgba(0,0,0,0.55);
  --tw-shadow-colored: 0 16px 40px var(--tw-shadow-color);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.shadow-lg {
  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.shadow-md {
  --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
  --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.shadow-sm {
  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.shadow-xl {
  --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
  --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.shadow-black\/40 {
  --tw-shadow-color: rgb(0 0 0 / 0.4);
  --tw-shadow: var(--tw-shadow-colored);
}
.outline {
  outline-style: solid;
}
.ring-1 {
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
}
.ring-black\/10 {
  --tw-ring-color: rgb(0 0 0 / 0.1);
}
.ring-black\/5 {
  --tw-ring-color: rgb(0 0 0 / 0.05);
}
.ring-indigo-300\/30 {
  --tw-ring-color: rgb(165 180 252 / 0.3);
}
.ring-slate-200 {
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(226 232 240 / var(--tw-ring-opacity));
}
.blur {
  --tw-blur: blur(8px);
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}
.blur-md {
  --tw-blur: blur(12px);
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}
.filter {
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}
.transition {
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}
.transition-opacity {
  transition-property: opacity;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}
.transition-transform {
  transition-property: transform;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}
.duration-200 {
  transition-duration: 200ms;
}
.duration-300 {
  transition-duration: 300ms;
}
.ease-in {
  transition-timing-function: cubic-bezier(0.4, 0, 1, 1);
}
.ease-in-out {
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}
.ease-out {
  transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
}

/*  fix на основните несъответствия 
html {
  font-size: 16px;
  line-height: 1.5;
}

*,
*::before,
*::after {
  box-sizing: border-box;
}

body {
  margin: 0;
  padding: 0;
  font-family: theme("fontFamily.sans"); /* Така ползваш Tailwind шрифта 
}*/

/* Default: mobile layout visible, desktop hidden */
.nav-desktop {
  display: none;
}
.nav-mobile {
  display: grid;
}

/* Desktop: show desktop layout, hide mobile layout */
@media (min-width: 768px) {
  .nav-desktop {
    display: flex;
    flex-direction: column;
  }
  .nav-mobile {
    display: none;
  }
}
.default-avatar {
  border-radius: 50%;
  background-color: #ccc;
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 18px;
  color: #fff;
}
.logo-desktop {
  display: none;
} /* по подразбиране скрито */
.logo {
  width: 250px; /* Определи ширината */
  height: 140px; /* Автоматично изчислява височината според пропорциите */
}

.logo-symbol {
  width: 80px; /* Можеш да увеличиш или намалиш */
  height: 60px;
  border-radius: 50%; /* Това го прави кръгло */
  -o-object-fit: cover;
     object-fit: cover; /* Запазва пропорциите без разтягане */
  display: block;
  margin: auto;
  margin-top: 30px;
  margin-bottom: 30px;
}

@media (max-width: 1100px) {
  .book-text {
    font-size: clamp(
      13px,
      2vw,
      0.5px
    ); /* Динамично намалява на много малки екрани */
    padding-top: 5px;
  }
  .book-text-owl-intro {
    font-size: 16px !important;
  }
}
@media (max-width: 900px) {
  .book-text {
    font-size: clamp(
      11px,
      2vw,
      0.5px
    ); /* Динамично намалява на много малки екрани */
    padding-top: 5px;
  }
  .book-text-owl-intro {
    font-size: 12px !important;
  }
  .owl-intro-bnt-grup {
    //display: flex;
    -moz-column-gap: 3px;
         column-gap: 3px;
    margin-left: 35px !important; /* леко изместване, да следва текста */
  }
  .owl-intro-checkbox {
    font-size: 0.6rem !important;
    margin-left: 40px !important;
  }
}
@media (max-width: 768px) {
  .logo-symbol {
    display: none !important;
  }
  .book-container {
    width: 90vw !important; /* Увеличаваме ширината на книгата */
    max-width: none !important; /* Премахваме ограниченията */
    //margin-left: 5% !important; /* Центрираме */
    //padding-top: 20px !important; /* Намаляваме отстоянието отгоре */
  }

  .book-image {
    width: 100%; /* Оставяме изображението да запълва контейнера */
    height: auto;
  }

  .book-text-container {
    top: 20%; /* Позиционираме текста по-добре */
    right: 5%;
    width: 50%; /* Увеличаваме малко зоната за текста */
    font-size: 1.2rem; /* Малко по-голям текст за мобилни */
  }
  .book-text-owl-intro {
    font-size: clamp(
      7px,
      2vw,
      18px
    ) !important; /*Динамично намалява на много малки екрани */
    padding-top: 5px !important;
    line-height: 1.15 !important;
  }
  .book-text {
    /* font-size: clamp(
      7px,
      2vw,
      18px
    ) !important;  Динамично намалява на много малки екрани */
    padding-top: 5px !important;
    line-height: 1.15 !important;
    margin: 0 0 4px 15% !important; /* махаме top/bottom margin, оставяме само малко отдолу */
  }
  .owl-intro-bnt-grup {
    //display: flex;
    -moz-column-gap: 3px;
         column-gap: 3px;
    margin-top: 5px !important;
    margin-left: 40px !important; /* леко изместване, да следва текста */
  }
  .owl-intro-btn {
    //padding: 0 4px !important; /* почти няма вертикален padding */
    font-size: 0.55rem; /* още по-дребен шрифт */
    line-height: 1; /* без допълнителна височина */
    border-radius: 9999px;
  }
  .owl-intro-btn-label {
    font-size: clamp(12px, 2vw, 0.5px);
  }
  .owl-intro-checkbox {
    margin-left: 40px !important;
    margin-top: 10px !important;
  }
  .owl-intro-checkbox input[type="checkbox"] {
    transform: scale(0.7); /* смаляваме квадратчето */
    transform-origin: center; /* да се „свива“ към средата */
    margin-right: 0px; /* малко място до текста */
  }
}
@media (max-width: 450px) {
  .book-text {
    font-size: clamp(
      10px,
      2vw,
      12px
    ) !important; /* Динамично намалява на много малки екрани */
    font-weight: 300 !important;
    padding-top: 5px !important;
    line-height: 1 !important;
    margin: 0 0 4px 15% !important; /* махаме top/bottom margin, оставяме само малко отдолу */
  }
  .owl-intro-bnt-grup {
    //display: flex;
    -moz-column-gap: 3px;
         column-gap: 3px;
    margin-left: 25px !important; /* леко изместване, да следва текста */
  }
  .owl-intro-btn {
    //padding: 0 4px !important; /* почти няма вертикален padding */
    font-size: 0.55rem; /* още по-дребен шрифт */
    line-height: 1; /* без допълнителна височина */
    border-radius: 9999px;
  }
  .owl-intro-btn-label {
    font-size: clamp(7px, 2vw, 0.5px) !important;
  }
  .owl-intro-checkbox {
    font-size: 0.3rem !important;
    margin-left: 30px !important;
    margin-top: 5px !important;
  }
}
/* Основни стилове за body */
body {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
  font-family: Arial, sans-serif;
}

.book-container {
  display: flex;
  justify-content: center;
  align-items: center;
  //position: relative;
  width: 70vw;
  max-width: 800px;
}

.book-image {
  position: relative; /* Важно! Това позволява вътрешно absolute позициониране */
  width: 100%;
  height: auto;
  display: block;
}
.book-image--intro::after {
  content: "";
  position: absolute;
  inset: 0; /* покрива целия видео-контейнер */
  pointer-events: none; /* да не пречи на кликове */

  /* Винетка: прозрачно в центъра, тъмно по краищата */
  background: radial-gradient(
    circle at center,
    rgba(15, 23, 42, 0) 55%,
    /* прозрачно в средата */ rgba(15, 23, 42, 0.85) 100%
      /* тъмно по периферията */
  );
}

/* ОБЩО – и за началната, и за видеото с бухала */
.book-text-container {
  position: absolute;
  top: 15%; /* Регулирай това за да пасне на страницата */
  right: 7%; /* Позиция от дясната страна на книгата */
  width: 40%; /* Текстът заема 40% от ширината на книгата */
  height: 60%; /* Текстът заема 60% от височината на книгата */
  display: flex;
  //justify-content: center;
  align-items: center;
  text-align: center;
}

/* САМО за екрана с видеото с бухала */
.book-text-container--intro {
  opacity: 0;
  overflow: hidden;
  transform: translateY(4px);
  filter: blur(6px);
  transition:
    opacity 2.9s ease-out,
    filter 2.9s ease-out,
    transform 2.9s ease-out;
}

/* видимо състояние – пак само за интрото */
.book-text-container--intro.book-text-container--visible {
  opacity: 1;
  filter: blur(0);
  transform: translateY(0);
}
/* текс за книгата с бухала след логин*/
.book-text-owl-intro {
  font-style: Italic;
  font-size: clamp(14px, 2vw, 18px); /* Динамичен шрифт */
  //line-height: 1.6;
  font-weight: bold;
  color: #3b2716;
  margin-left: 15%;
  line-height: 1.2;
}
.book-text {
  font-style: Italic;
  font-size: clamp(14px, 2vw, 22px); /* Динамичен шрифт */
  //line-height: 1.6;
  font-weight: bold;
  color: #3b2716;
  margin-left: 15%;
  line-height: 1.2;
  /*background-color: rgba(250, 235, 215, 0.7);*/
  /*padding: 15px;*/
  /*border-radius: 5px;*/
  /*word-wrap: break-word; /* Принудително пренасяне на дълги думи */
  /*max-width: 100%; /* Гарантира, че текстът остава в контейнера */
  /*text-align: center;*/
}
.book-image video {
  display: block;
  width: 100%;
}

/* първото балонче до бухала */
.owl-speech-bubble-first {
  position: absolute;
  /* тези проценти може да ги донагласим да сочат точно към човката :) */
  left: 37%;
  top: 10%;
  max-width: 260px;

  background: #f3f3ebff;
  color: #111827;
  padding: 0.45rem 0.75rem;
  border-radius: 9999px;
  box-shadow: 0 10px 25px rgba(0, 0, 0, 0.45);
  font-size: 1rem;
  font-weight: 600;
  opacity: 0;
  transform: translateY(10px);
  transition:
    opacity 0.4s ease,
    transform 0.4s ease;
}

/* опашката на първия балон */
.owl-speech-bubble-first::after {
  //background: #d8d8d6ff;
  content: "";
  position: absolute;
  left: 8%; /* посока към устата */
  bottom: -10px;
  border-width: 10px 10px 0 10px;
  border-style: solid;
  border-color: rgba(11, 11, 11, 1) transparent transparent transparent;
}

/* когато е видим */
.owl-speech-bubble-first--visible {
  opacity: 1;
  transform: translateY(0);
}
/* балончето до бухала */
.owl-speech-bubble {
  position: absolute;
  /* тези проценти може да ги донагласим да сочат точно към човката :) */
  left: 67%;
  top: 10%;
  max-width: 260px;

  background: #dadad6ff;
  color: #111827;
  padding: 0.45rem 0.75rem;
  border-radius: 9999px;
  box-shadow: 0 10px 25px rgba(0, 0, 0, 0.45);
  font-size: 1rem;
  font-weight: 600;

  opacity: 0;
  transform: translateY(10px);
  transition:
    opacity 0.4s ease,
    transform 0.4s ease;
}

/* опашката на балона */
.owl-speech-bubble::after {
  //background: #eded13ff;
  content: "";
  position: absolute;
  left: 8%; /* посока към устата */
  bottom: -10px;
  border-width: 10px 10px 0 10px;
  border-style: solid;
  border-color: rgba(11, 11, 11, 1) transparent transparent transparent;
}

/* когато е видим */
.owl-speech-bubble--visible {
  opacity: 1;
  transform: translateY(0);
}

/* формата вместо прост текст */
.owl-intro-form {
  font-family: "Garamond", serif;
  color: #3b2a12;
  text-align: center;
  /* без плътен бял фон, за да изглежда като върху страницата */
  background: transparent;
}
.owl-intro-bnt-grup {
  margin-top: 0.45rem;
  margin-bottom: 0.35rem;
  margin-left: 4px;
}

/* бутоните – да изглеждат като „печатани“ върху страницата */
.owl-intro-btn {
  /*display: block;
  width: 100%;
  margin-bottom: 0.6rem;*/
  position: relative;
  overflow: hidden;
  padding: 0.5rem 0.95rem;
  border-radius: 9999px;
  border: 1px solid rgba(92, 58, 12, 0.45);
  font-size: 0.85rem;
  font-weight: 700;
  cursor: pointer;
  background: linear-gradient(135deg, #f8d46a 0%, #d99222 52%, #8a5218 100%);
  color: #241505;
  text-shadow: 0 1px 0 rgba(255, 246, 201, 0.55);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.45),
    0 5px 12px rgba(55, 32, 6, 0.34);
  /* анимация и плавни преходи */
  transition:
    transform 0.2s ease-out,
    box-shadow 0.2s ease-out,
    background 0.2s ease-out;
  animation: owl-pulse 2.4s ease-in-out infinite;
}
/* hover ефект – леко повдигане и по-ярък цвят */
.owl-intro-btn:hover {
  transform: translateY(-2px) scale(1.04);
  background: linear-gradient(135deg, #ffe58a 0%, #e8a52f 55%, #9a611f 100%);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.55),
    0 8px 16px rgba(55, 32, 6, 0.38);
}

.owl-intro-btn::after {
  content: "";
  position: absolute;
  inset: 2px 8px auto 8px;
  height: 38%;
  border-radius: inherit;
  background: linear-gradient(
    180deg,
    rgba(255, 255, 255, 0.42),
    rgba(255, 255, 255, 0)
  );
  pointer-events: none;
}
/* pulse анимацията – „дишащ“ ореол около бутона */
@keyframes owl-pulse {
  0%,
  100% {
    box-shadow:
      inset 0 1px 0 rgba(255, 255, 255, 0.45),
      0 5px 12px rgba(55, 32, 6, 0.34),
      0 0 0 0 rgba(217, 146, 34, 0.42);
  }
  50% {
    box-shadow:
      inset 0 1px 0 rgba(255, 255, 255, 0.45),
      0 5px 12px rgba(55, 32, 6, 0.34),
      0 0 0 8px rgba(217, 146, 34, 0);
  }
}

/* за хора с изключени анимации – спираме пулса */
@media (prefers-reduced-motion: reduce) {
  .owl-intro-btn {
    animation: none;
  }
}
.owl-intro-btn-label {
  position: relative;
  z-index: 1;
  display: block;
  margin-top: -2px;
  letter-spacing: 0.02em;
}

/* чекбоксът долу */
.owl-intro-checkbox {
  display: flex;
  align-items: center;
  width: -moz-fit-content;
  width: fit-content;
  gap: 0.28rem;
  font-size: 0.8rem;
  margin-top: 0.45rem;
  margin-left: 70px;
  padding: 0.12rem 0.42rem;
  border: 1px solid rgba(59, 42, 18, 0.18);
  border-radius: 9999px;
  background: rgba(59, 42, 18, 0.12);
  color: #3b2716;
}

.owl-intro-checkbox input[type="checkbox"] {
  -webkit-appearance: none;
     -moz-appearance: none;
          appearance: none;
  display: grid;
  place-content: center;
  width: 0.82rem;
  height: 0.82rem;
  margin: 0;
  border: 1px solid rgba(59, 42, 18, 0.45);
  border-radius: 3px;
  background:
    linear-gradient(135deg, rgba(94, 66, 31, 0.18), rgba(244, 222, 177, 0.28)),
    rgba(196, 167, 105, 0.46);
  box-shadow:
    inset 0 1px 2px rgba(59, 42, 18, 0.24),
    0 1px 0 rgba(255, 246, 201, 0.28);
}

.owl-intro-checkbox input[type="checkbox"]::before {
  content: "";
  width: 0.48rem;
  height: 0.48rem;
  transform: scale(0);
  transition: transform 0.12s ease-in-out;
  clip-path: polygon(14% 44%, 0 62%, 38% 100%, 100% 18%, 82% 0, 34% 62%);
  background: #3b2716;
}

.owl-intro-checkbox input[type="checkbox"]:checked::before {
  transform: scale(1);
}

.bg-homepage {
  display: flex;
  background-color: #374151;
  height: 92vh;
  justify-content: center; /* Центрира по хоризонтала */
  align-items: center; /* Центрира по вертикала */
  /*width: 100%;*/
}
/* само за страниците на лудата загадка */
.bg-homepage.crazy-puzzle {
  align-items: flex-start;
}
.no-season-message {
  padding: 1rem;
  max-width: 90%;
}

/*
.book-text {
  position: absolute;
  top: 40%;
  left: 55%;
  width: 35%;
  background-color: rgba(250, 235, 215, 0.7); /* Лек кремав фон с прозрачност */
/* padding: 15px;
  border-radius: 5px;
  font-family: "Garamond", serif; /* По-стара елегантна визия */
/* font-size: 18px;
  line-height: 1.6;
  color:rgb(14, 12, 10); 
}*/

/* Стилове за footer */
footer {
  margin-top: auto; /* Позиционира footer на дъното */
  background-color: #333;
  color: white;
  text-align: center;
  padding: 20px;
}

.cursor-not-allowed {
  cursor: not-allowed !important;
}

#playerDetailsModal .relative {
  position: absolute !important;
  top: 50% !important;
  left: 50% !important;
  transform: translate(-50%, -50%) !important;
  width: auto; /* или зададен размер */
}

/* Общ контейнер за блока над кръстословицата при режим B*/
.info-container {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 20px;
  width: 100%;
  padding: 20px;
  min-height: 150px; /* Ограничаваме минималната височина */
  align-items: stretch;
}

/* Общ стил за блоковете */
.season-box,
.round-box,
.cup-box {
  color: white;
  padding: 15px;
  text-align: center;
  border-radius: 10px;
  width: 90%;
  max-width: 400px;
  box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.3);
  transition: transform 0.2s ease-in-out; /* Минимална височина за еднакви размери */
  /* Добавяме тези нови */
  min-height: 180px; /* Може и 200, ако имаш дълги имена */
  display: flex;
  flex-direction: column;
  justify-content: space-between;
}
.season-title,
.round-title,
.cup-title {
  flex: 1;
  font-family: "Playfair Display", serif;
  font-size: 24px;
  font-weight: bold;
  text-transform: uppercase;
  letter-spacing: 2px;
  text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);
}
.season-number,
.round-number {
  flex: 1;
  font-family: "Playfair Display", serif;
  font-size: 32px; /* Достатъчно голям за да изпъква */
  font-weight: bold;
}
.season-container {
  display: flex;
  align-items: center; /* Центрира елементите по височина */
  justify-content: space-between; /* Разделя ги равномерно */
  width: 100%; /* Запълва родителския контейнер */
  gap: 10px; /* Разстояние между "SEASON" и номера */
  box-shadow: 2px 2px 8px rgba(0, 0, 0, 0.3); /* Лека сянка за 3D ефект */
  margin-bottom: 10px;
}

/* Различни цветове за всеки блок */
.season-box,
.round-box,
.cup-box {
  background: linear-gradient(
    135deg,
    #a8a8a8,
    #c4af48
  ); /* Основен градиент за ефект на камък */
  background-size: cover;
  box-shadow: inset -1px 1px 20px 20px rgb(56 56 80 / 54%); /* Вътрешна сянка за релеф */
  border: 2px solid #5e5e5e; /* По-тъмен контур за каменен ефект */
  border-radius: 10px; /* Заоблени ръбове */
} /* Син */
/*.round-box {
  background: linear-gradient(to bottom, #48c774, #3a9d50);
} /* Зелен */
/*.cup-box {
  background: linear-gradient(to bottom, #ffcc00, #d4a400);
} /* Златисто-жълт */

/* Подреждане на един ред при по-големи екрани */
@media (min-width: 768px) {
  .logo-desktop {
    display: flex;
  } /* показва се на desktop */
  .info-container {
    flex-direction: row;
    justify-content: space-between; /* Разпределя блоковете равномерно */
    width: 90%;
    max-width: 1200px; /* Максимална ширина */
  }

  .season-box,
  .round-box,
  .cup-box {
    width: 32%; /* Всеки блок заема 1/3 от пространството */
    max-width: none;
  }
}
@media (max-width: 768px) {
  .info-container {
    align-items: center;
    padding: 1px;
  }
  .season-box,
  .round-box,
  .cup-box {
    max-width: none;
    padding: 1px;
    min-height: 100px;
  }
  .season-title,
  .season-number,
  .round-title,
  .round-number,
  .cup-title {
    font-size: 18px;
  }
  .gradient-sendButton {
    padding: 0px;
    font-weight: bold;
    font-size: 1.2rem;
  }
}
@media (min-width: 768px) and (max-width: 1199px) {
  .season-title,
  .round-title,
  .cup-title {
    font-size: 18px;
  }
  .season-number,
  .round-number {
    font-size: 24px;
  }
}
.hover\:border-gray-300:hover {
  --tw-border-opacity: 1;
  border-color: rgb(209 213 219 / var(--tw-border-opacity));
}
.hover\:bg-amber-500:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(245 158 11 / var(--tw-bg-opacity));
}
.hover\:bg-blue-100:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(219 234 254 / var(--tw-bg-opacity));
}
.hover\:bg-blue-200:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(191 219 254 / var(--tw-bg-opacity));
}
.hover\:bg-blue-600:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(37 99 235 / var(--tw-bg-opacity));
}
.hover\:bg-blue-700:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(29 78 216 / var(--tw-bg-opacity));
}
.hover\:bg-blue-800:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(30 64 175 / var(--tw-bg-opacity));
}
.hover\:bg-gray-100:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(243 244 246 / var(--tw-bg-opacity));
}
.hover\:bg-gray-50:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(249 250 251 / var(--tw-bg-opacity));
}
.hover\:bg-gray-600:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(75 85 99 / var(--tw-bg-opacity));
}
.hover\:bg-gray-700:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(55 65 81 / var(--tw-bg-opacity));
}
.hover\:bg-green-200:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(187 247 208 / var(--tw-bg-opacity));
}
.hover\:bg-green-600:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(22 163 74 / var(--tw-bg-opacity));
}
.hover\:bg-indigo-500:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(99 102 241 / var(--tw-bg-opacity));
}
.hover\:bg-indigo-700:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(67 56 202 / var(--tw-bg-opacity));
}
.hover\:bg-purple-200:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(233 213 255 / var(--tw-bg-opacity));
}
.hover\:bg-red-600:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(220 38 38 / var(--tw-bg-opacity));
}
.hover\:bg-slate-100:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(241 245 249 / var(--tw-bg-opacity));
}
.hover\:bg-slate-50:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(248 250 252 / var(--tw-bg-opacity));
}
.hover\:bg-slate-800:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(30 41 59 / var(--tw-bg-opacity));
}
.hover\:bg-white:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity));
}
.hover\:bg-yellow-200:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(254 240 138 / var(--tw-bg-opacity));
}
.hover\:bg-yellow-600:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(202 138 4 / var(--tw-bg-opacity));
}
.hover\:bg-yellow-700:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(161 98 7 / var(--tw-bg-opacity));
}
.hover\:text-blue-300:hover {
  --tw-text-opacity: 1;
  color: rgb(147 197 253 / var(--tw-text-opacity));
}
.hover\:text-blue-500:hover {
  --tw-text-opacity: 1;
  color: rgb(59 130 246 / var(--tw-text-opacity));
}
.hover\:text-blue-600:hover {
  --tw-text-opacity: 1;
  color: rgb(37 99 235 / var(--tw-text-opacity));
}
.hover\:text-blue-700:hover {
  --tw-text-opacity: 1;
  color: rgb(29 78 216 / var(--tw-text-opacity));
}
.hover\:text-blue-800:hover {
  --tw-text-opacity: 1;
  color: rgb(30 64 175 / var(--tw-text-opacity));
}
.hover\:text-gray-200:hover {
  --tw-text-opacity: 1;
  color: rgb(229 231 235 / var(--tw-text-opacity));
}
.hover\:text-gray-600:hover {
  --tw-text-opacity: 1;
  color: rgb(75 85 99 / var(--tw-text-opacity));
}
.hover\:text-gray-900:hover {
  --tw-text-opacity: 1;
  color: rgb(17 24 39 / var(--tw-text-opacity));
}
.hover\:text-sky-300:hover {
  --tw-text-opacity: 1;
  color: rgb(125 211 252 / var(--tw-text-opacity));
}
.hover\:text-slate-800:hover {
  --tw-text-opacity: 1;
  color: rgb(30 41 59 / var(--tw-text-opacity));
}
.hover\:text-slate-900:hover {
  --tw-text-opacity: 1;
  color: rgb(15 23 42 / var(--tw-text-opacity));
}
.hover\:text-white:hover {
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity));
}
.hover\:text-sky-800:hover {
  --tw-text-opacity: 1;
  color: rgb(7 89 133 / var(--tw-text-opacity));
}
.hover\:underline:hover {
  text-decoration-line: underline;
}
.focus\:z-10:focus {
  z-index: 10;
}
.focus\:border-blue-500:focus {
  --tw-border-opacity: 1;
  border-color: rgb(59 130 246 / var(--tw-border-opacity));
}
.focus\:border-indigo-500:focus {
  --tw-border-opacity: 1;
  border-color: rgb(99 102 241 / var(--tw-border-opacity));
}
.focus\:outline-none:focus {
  outline: 2px solid transparent;
  outline-offset: 2px;
}
.focus\:ring-2:focus {
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
}
.focus\:ring-4:focus {
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
}
.focus\:ring-blue-300:focus {
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity));
}
.focus\:ring-blue-500:focus {
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity));
}
.focus\:ring-gray-200:focus {
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(229 231 235 / var(--tw-ring-opacity));
}
.focus\:ring-green-300:focus {
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(134 239 172 / var(--tw-ring-opacity));
}
.focus\:ring-indigo-400:focus {
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(129 140 248 / var(--tw-ring-opacity));
}
.focus\:ring-indigo-500:focus {
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity));
}
.focus\:ring-red-300:focus {
  --tw-ring-opacity: 1;
  --tw-ring-color: rgb(252 165 165 / var(--tw-ring-opacity));
}
.focus\:ring-offset-2:focus {
  --tw-ring-offset-width: 2px;
}
.focus\:ring-offset-blue-200:focus {
  --tw-ring-offset-color: #bfdbfe;
}
@media (min-width: 640px) {

  .sm\:mx-auto {
    margin-left: auto;
    margin-right: auto;
  }

  .sm\:w-1\/2 {
    width: 50%;
  }

  .sm\:w-auto {
    width: auto;
  }

  .sm\:w-full {
    width: 100%;
  }

  .sm\:max-w-md {
    max-width: 28rem;
  }

  .sm\:flex-none {
    flex: none;
  }

  .sm\:grid-cols-2 {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .sm\:grid-cols-3 {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }

  .sm\:flex-row {
    flex-direction: row;
  }

  .sm\:space-x-4 > :not([hidden]) ~ :not([hidden]) {
    --tw-space-x-reverse: 0;
    margin-right: calc(1rem * var(--tw-space-x-reverse));
    margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
  }

  .sm\:rounded-lg {
    border-radius: 0.5rem;
  }

  .sm\:px-10 {
    padding-left: 2.5rem;
    padding-right: 2.5rem;
  }

  .sm\:px-4 {
    padding-left: 1rem;
    padding-right: 1rem;
  }

  .sm\:py-2 {
    padding-top: 0.5rem;
    padding-bottom: 0.5rem;
  }

  .sm\:py-5 {
    padding-top: 1.25rem;
    padding-bottom: 1.25rem;
  }

  .sm\:text-3xl {
    font-size: 1.875rem;
    line-height: 2.25rem;
  }

  .sm\:text-base {
    font-size: 1rem;
    line-height: 1.5rem;
  }

  .sm\:text-sm {
    font-size: 0.875rem;
    line-height: 1.25rem;
  }

  .sm\:text-xl {
    font-size: 1.25rem;
    line-height: 1.75rem;
  }
}
@media (min-width: 768px) {

  .md\:fixed {
    position: fixed;
  }

  .md\:ml-64 {
    margin-left: 16rem;
  }

  .md\:mt-0 {
    margin-top: 0px;
  }

  .md\:mt-1 {
    margin-top: 0.25rem;
  }

  .md\:mt-3 {
    margin-top: 0.75rem;
  }

  .md\:mt-6 {
    margin-top: 1.5rem;
  }

  .md\:flex {
    display: flex;
  }

  .md\:h-screen {
    height: 100vh;
  }

  .md\:max-h-96 {
    max-height: 24rem;
  }

  .md\:w-64 {
    width: 16rem;
  }

  .md\:w-full {
    width: 100%;
  }

  .md\:grid-cols-2 {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .md\:grid-cols-3 {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }

  .md\:flex-row {
    flex-direction: row;
  }

  .md\:flex-col {
    flex-direction: column;
  }

  .md\:items-stretch {
    align-items: stretch;
  }

  .md\:p-5 {
    padding: 1.25rem;
  }

  .md\:p-6 {
    padding: 1.5rem;
  }

  .md\:px-4 {
    padding-left: 1rem;
    padding-right: 1rem;
  }

  .md\:px-8 {
    padding-left: 2rem;
    padding-right: 2rem;
  }

  .md\:py-10 {
    padding-top: 2.5rem;
    padding-bottom: 2.5rem;
  }

  .md\:py-12 {
    padding-top: 3rem;
    padding-bottom: 3rem;
  }

  .md\:py-2 {
    padding-top: 0.5rem;
    padding-bottom: 0.5rem;
  }

  .md\:pl-56 {
    padding-left: 14rem;
  }

  .md\:text-3xl {
    font-size: 1.875rem;
    line-height: 2.25rem;
  }

  .md\:text-4xl {
    font-size: 2.25rem;
    line-height: 2.5rem;
  }

  .md\:text-base {
    font-size: 1rem;
    line-height: 1.5rem;
  }

  .md\:text-lg {
    font-size: 1.125rem;
    line-height: 1.75rem;
  }
}
@media (min-width: 1024px) {

  .lg\:col-span-2 {
    grid-column: span 2 / span 2;
  }

  .lg\:max-w-6xl {
    max-width: 72rem;
  }

  .lg\:grid-cols-3 {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }

  .lg\:grid-cols-4 {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }

  .lg\:px-8 {
    padding-left: 2rem;
    padding-right: 2rem;
  }
}
@media (min-width: 1280px) {

  .xl\:grid-cols-4 {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }
}
.rtl\:rotate-180:where([dir="rtl"], [dir="rtl"] *) {
  --tw-rotate: 180deg;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.rtl\:space-x-reverse:where([dir="rtl"], [dir="rtl"] *) > :not([hidden]) ~ :not([hidden]) {
  --tw-space-x-reverse: 1;
}
.rtl\:text-right:where([dir="rtl"], [dir="rtl"] *) {
  text-align: right;
}
@media (prefers-color-scheme: dark) {

  .dark\:border-blue-500 {
    --tw-border-opacity: 1;
    border-color: rgb(59 130 246 / var(--tw-border-opacity));
  }

  .dark\:border-gray-600 {
    --tw-border-opacity: 1;
    border-color: rgb(75 85 99 / var(--tw-border-opacity));
  }

  .dark\:border-gray-700 {
    --tw-border-opacity: 1;
    border-color: rgb(55 65 81 / var(--tw-border-opacity));
  }

  .dark\:border-transparent {
    border-color: transparent;
  }

  .dark\:\!bg-gray-700 {
    --tw-bg-opacity: 1 !important;
    background-color: rgb(55 65 81 / var(--tw-bg-opacity)) !important;
  }

  .dark\:bg-blue-500 {
    --tw-bg-opacity: 1;
    background-color: rgb(59 130 246 / var(--tw-bg-opacity));
  }

  .dark\:bg-blue-600 {
    --tw-bg-opacity: 1;
    background-color: rgb(37 99 235 / var(--tw-bg-opacity));
  }

  .dark\:bg-gray-600 {
    --tw-bg-opacity: 1;
    background-color: rgb(75 85 99 / var(--tw-bg-opacity));
  }

  .dark\:bg-gray-700 {
    --tw-bg-opacity: 1;
    background-color: rgb(55 65 81 / var(--tw-bg-opacity));
  }

  .dark\:bg-gray-800 {
    --tw-bg-opacity: 1;
    background-color: rgb(31 41 55 / var(--tw-bg-opacity));
  }

  .dark\:bg-gray-800\/50 {
    background-color: rgb(31 41 55 / 0.5);
  }

  .dark\:bg-gray-900\/80 {
    background-color: rgb(17 24 39 / 0.8);
  }

  .dark\:bg-green-600 {
    --tw-bg-opacity: 1;
    background-color: rgb(22 163 74 / var(--tw-bg-opacity));
  }

  .dark\:bg-red-600 {
    --tw-bg-opacity: 1;
    background-color: rgb(220 38 38 / var(--tw-bg-opacity));
  }

  .dark\:text-blue-300 {
    --tw-text-opacity: 1;
    color: rgb(147 197 253 / var(--tw-text-opacity));
  }

  .dark\:text-blue-500 {
    --tw-text-opacity: 1;
    color: rgb(59 130 246 / var(--tw-text-opacity));
  }

  .dark\:text-gray-300 {
    --tw-text-opacity: 1;
    color: rgb(209 213 219 / var(--tw-text-opacity));
  }

  .dark\:text-gray-400 {
    --tw-text-opacity: 1;
    color: rgb(156 163 175 / var(--tw-text-opacity));
  }

  .dark\:text-gray-500 {
    --tw-text-opacity: 1;
    color: rgb(107 114 128 / var(--tw-text-opacity));
  }

  .dark\:text-red-500 {
    --tw-text-opacity: 1;
    color: rgb(239 68 68 / var(--tw-text-opacity));
  }

  .dark\:text-white {
    --tw-text-opacity: 1;
    color: rgb(255 255 255 / var(--tw-text-opacity));
  }

  .dark\:placeholder-gray-400::-moz-placeholder {
    --tw-placeholder-opacity: 1;
    color: rgb(156 163 175 / var(--tw-placeholder-opacity));
  }

  .dark\:placeholder-gray-400::placeholder {
    --tw-placeholder-opacity: 1;
    color: rgb(156 163 175 / var(--tw-placeholder-opacity));
  }

  .dark\:hover\:bg-blue-600:hover {
    --tw-bg-opacity: 1;
    background-color: rgb(37 99 235 / var(--tw-bg-opacity));
  }

  .dark\:hover\:bg-blue-700:hover {
    --tw-bg-opacity: 1;
    background-color: rgb(29 78 216 / var(--tw-bg-opacity));
  }

  .dark\:hover\:bg-gray-600:hover {
    --tw-bg-opacity: 1;
    background-color: rgb(75 85 99 / var(--tw-bg-opacity));
  }

  .dark\:hover\:bg-gray-800:hover {
    --tw-bg-opacity: 1;
    background-color: rgb(31 41 55 / var(--tw-bg-opacity));
  }

  .dark\:hover\:bg-green-700:hover {
    --tw-bg-opacity: 1;
    background-color: rgb(21 128 61 / var(--tw-bg-opacity));
  }

  .dark\:hover\:bg-red-700:hover {
    --tw-bg-opacity: 1;
    background-color: rgb(185 28 28 / var(--tw-bg-opacity));
  }

  .dark\:hover\:text-blue-100:hover {
    --tw-text-opacity: 1;
    color: rgb(219 234 254 / var(--tw-text-opacity));
  }

  .dark\:hover\:text-blue-500:hover {
    --tw-text-opacity: 1;
    color: rgb(59 130 246 / var(--tw-text-opacity));
  }

  .dark\:hover\:text-gray-300:hover {
    --tw-text-opacity: 1;
    color: rgb(209 213 219 / var(--tw-text-opacity));
  }

  .dark\:hover\:text-white:hover {
    --tw-text-opacity: 1;
    color: rgb(255 255 255 / var(--tw-text-opacity));
  }

  .dark\:focus\:border-blue-500:focus {
    --tw-border-opacity: 1;
    border-color: rgb(59 130 246 / var(--tw-border-opacity));
  }

  .dark\:focus\:ring-blue-500:focus {
    --tw-ring-opacity: 1;
    --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity));
  }

  .dark\:focus\:ring-blue-700:focus {
    --tw-ring-opacity: 1;
    --tw-ring-color: rgb(29 78 216 / var(--tw-ring-opacity));
  }

  .dark\:focus\:ring-blue-800:focus {
    --tw-ring-opacity: 1;
    --tw-ring-color: rgb(30 64 175 / var(--tw-ring-opacity));
  }

  .dark\:focus\:ring-green-900:focus {
    --tw-ring-opacity: 1;
    --tw-ring-color: rgb(20 83 45 / var(--tw-ring-opacity));
  }

  .dark\:focus\:ring-red-900:focus {
    --tw-ring-opacity: 1;
    --tw-ring-color: rgb(127 29 29 / var(--tw-ring-opacity));
  }
}

/*!*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-4.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/CrazyPuzzle.vue?vue&type=style&index=0&id=6f302d50&scoped=true&lang=css ***!
  \*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************/

.dot-typing[data-v-6f302d50]::after {
  content: "...";
  animation: dots-6f302d50 1.2s steps(3, end) infinite;
}
@keyframes dots-6f302d50 {
0% {
    content: "";
}
33% {
    content: ".";
}
66% {
    content: "..";
}
100% {
    content: "...";
}
}

/*!***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-4.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/CrosswordFeedback.vue?vue&type=style&index=0&id=0afd5750&scoped=true&lang=css ***!
  \***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/

.success-animation[data-v-0afd5750] {
  animation: confetti 2s ease-out;
}
.error-animation[data-v-0afd5750] {
  animation: shake 0.5s;
}
.feedback[data-v-0afd5750] {
  display: flex;
  margin-top: 10px;
}
.feedback-message[data-v-0afd5750] {
  padding: 10px 15px;
  border-radius: 8px;
  font-weight: bold;
  text-align: center;
  width: -moz-fit-content;
  width: fit-content;
  min-width: 200px;
}

/* Успешно решение */
.success[data-v-0afd5750] {
  background-color: #d4edda;
  color: #155724;
  border: 2px solid #c3e6cb;
}

/* Грешно решение */
.error[data-v-0afd5750] {
  background-color: #f8d7da;
  color: #721c24;
  border: 2px solid #f5c6cb;
}

/*!***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-4.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/CrosswordGrid.vue?vue&type=style&index=0&id=3017ffde&scoped=true&lang=css ***!
  \***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************/

#crossword-template[data-v-3017ffde] {
  max-width: 100%;
  margin: auto;
}
.grid[data-v-3017ffde] {
  display: grid;
}
.grid-cols-25[data-v-3017ffde] {
  grid-template-columns: repeat(25, 1fr);
  /*gap: 2px; /* Добавяне на малко разстояние между полетата */
}
.grid-rows-25[data-v-3017ffde] {
  grid-template-rows: repeat(25, 1fr);
}
.inactive-cell[data-v-3017ffde] {
  border-color: red; /* Можеш да използваш различен цвят или стил */
  cursor: pointer; /* Променя курсора в режим 'Запис' */
}
.inactive-cell-selected[data-v-3017ffde] {
  background-color: yellow; /* Можеш да настроиш различен стил за маркираните клетки */
}
.absolute[data-v-3017ffde] {
  position: absolute;
}
.top-0[data-v-3017ffde] {
  top: 2px;
}
.left-0[data-v-3017ffde] {
  left: 2px;
}
.text-xs[data-v-3017ffde] {
  font-size: 0.75rem;
}
.font-bold[data-v-3017ffde] {
  font-weight: bold;
}
.text-gray-700[data-v-3017ffde] {
  color: #4a5568;
}

/*!*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-4.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/CrosswordHeader.vue?vue&type=style&index=0&id=463cdb18&scoped=true&lang=css ***!
  \*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/

.header-container[data-v-463cdb18] {
  margin-bottom: 20px;
}
.question-field[data-v-463cdb18] {
  margin-bottom: 15px;
}
.answer-field[data-v-463cdb18] {
  display: flex;
  align-items: center;
  gap: 10px;
}
.mode-selection[data-v-463cdb18] {
  display: flex;
  align-items: center;
  gap: 1rem;
}

/*!************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-4.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/CrosswordJoker.vue?vue&type=style&index=0&id=0ad4a138&scoped=true&lang=css ***!
  \************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/

/* Може да добавим стилове за бутона и съобщението */

/*!***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-4.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/ExplanationsModal.vue?vue&type=style&index=0&id=4b0251b4&scoped=true&lang=css ***!
  \***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/

@keyframes pop-4b0251b4 {
0% {
    opacity: 0;
    transform: translateY(8px) scale(0.98);
}
100% {
    opacity: 1;
    transform: translateY(0) scale(1);
}
}
.animate-pop[data-v-4b0251b4] {
  animation: pop-4b0251b4 0.18s ease-out;
}
.btn-x[data-v-4b0251b4] {
  right: 0.75rem !important;
  left: auto !important;
}

/*!*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-4.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/CrosswordRender.vue?vue&type=style&index=0&id=178a8da1&scoped=true&lang=css ***!
  \*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/

.crossword-renderer[data-v-178a8da1] {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: 24px;
  /*max-width: 1200px; /* Или някаква друга разумна граница 
  margin-left: auto;
  margin-right: auto;*/
}
.questions-row[data-v-178a8da1] {
  width: 100%;
  display: flex;
  justify-content: center;
  padding: 0 10px;
}
.questions[data-v-178a8da1] {
  display: flex;
  flex-wrap: wrap;
  width: 100%;
  max-width: 1100px; /* можеш да го увеличиш/намалиш */
  margin: 0 auto;
  gap: 16px;
  /* магията: */
  grid-template-columns: repeat(auto-fit, minmax(260px, 260px));
  /* центрираме целия „блок“ от колони */
  justify-content: center;
}
.question[data-v-178a8da1] {
  flex: 1 1 260px; /* базово ~240px, може да се свива/разширява */
  max-width: 260px; /* да не става прекалено широка на голям екран */
  background: linear-gradient(to bottom, #f5e3c0, #e0c797);
  padding: 15px;
  font-family: "Garamond", serif;
  border: 5px solid #c4a484;
  border-radius: 5px;
  white-space: pre-line;
}
.question-number[data-v-178a8da1] {
  font-size: 1.2rem;
  font-weight: bold;
  margin-bottom: 5px; /* Разстояние между "Въпрос №" и текста на въпроса */
}
.question-text[data-v-178a8da1] {
  margin: 0;
  color: #5a3e1b;
  font-size: 1.3rem;
  /*font-style: italic;*/
  font-weight: 600;
}
.line-clamp[data-v-178a8da1] {
  max-height: 120px;
  overflow: hidden;
  position: relative;
}
.board-row[data-v-178a8da1] {
  width: 100%;
  display: flex;
  gap: 24px;
  justify-content: center;
  align-items: flex-start;
  flex-wrap: wrap; /* на малък екран бутоните могат да паднат под кръстословицата */
  margin-bottom: 8px;
}
.grid[data-v-178a8da1] {
  display: grid;
  /*width: 100%; /* Разпъва решетката */
  width: -moz-fit-content;
  width: fit-content;
  /*max-width: 700px; /* Ограничаваме максималната ширина */
  /*aspect-ratio: var(--cols) / var(--rows); /* Запазваме пропорциите на решетката */
  grid-template-rows: repeat(var(--rows), 45px);
  grid-template-columns: repeat(var(--cols), 45px);
  gap: 0; /* Премахваме празнините между клетките */
  /*overflow-x: auto; /* Появява се скрол при нужда */
  overflow-y: hidden;
  box-sizing: border-box;
}
.cell-input[data-v-178a8da1] {
  /* border: 1px solid #ddd;*/
  text-align: center;
  width: 100%;
  height: 100%;
  text-transform: uppercase; /* Визуално принуждава главни букви */
  border: 1px solid #aaa;
  box-shadow:
    inset 2px 2px 5px rgba(0, 0, 0, 0.2),
    /* Вътрешна сянка за релеф */ 2px 2px 5px rgba(0, 0, 0, 0.2); /* Външна сянка за изпъкнал ефект */
  transition: all 0.2s ease-in-out; /* Плавност при промени */
  caret-color: transparent; /* Скрива мигащия курсор */
}
.cell[data-v-178a8da1] {
  width: 45px;
  height: 45px;
  display: flex;
  align-items: center;
  justify-content: center;
  /*border: 1px solid #ddd; /* Граници за всяка клетка */
  aspect-ratio: 1; /* Гарантира квадратна форма */
  box-sizing: border-box; /* Гарантира, че бордерът не променя размера */
  position: relative; /* Позволява поставяне на номера спрямо клетката */
}
.cell-input[data-v-178a8da1]:focus {
  border-color: #aaa;
  background-color: rgb(93, 251, 101);
}

/* Показваме активните клетки */
.cell .cell-input[data-v-178a8da1] {
  display: block;
}
.cell-number[data-v-178a8da1] {
  position: absolute;
  top: 2px; /* Разстояние отгоре */
  left: 2px; /* Разстояние отляво */
  font-size: 0.9rem; /* Намаляване на размера на шрифта */
  color: #555; /* Цветът на номера */
  pointer-events: none; /* Предотвратява номера да пречи на кликовете */
}
/*Ховър ефект когато мишката е върху клетката*/
.cell[data-v-178a8da1]:hover {
  transform: scale(1.05); /* Леко уголемяване */
  transition: transform 0.1s ease-in-out;
}
/* следим дали клетката е попълнена и спрямо това й променяме цвета*/
.filled-cell[data-v-178a8da1] {
  background-color: #ffeb3b;
  font-weight: bold;
  font-size: 130%;
  /*color: white;*/
}
/* ново: ако е разкрито от жокер → зелено */
.joker-cell[data-v-178a8da1] {
  background-color: #168a20;
  color: #fff;
}

/* ако клетката има и двата класа, запази зеленото */
/*.filled-cell.joker-cell {
  background-color: #168a20;
  color: #fff;
}*/
.joker-button[data-v-178a8da1] {
  background: linear-gradient(to bottom, #f5e3c0, #e0c797);
  border: 2px solid #c4a77d;
  padding: 10px 20px;
  font-size: 18px;
  font-weight: bold;
  border-radius: 12px; /* Заоблени ъгли */
  text-align: center;
  display: flex;
  flex-direction: column; /* Разделя "Жокер" и подзаглавието */
  align-items: center;
  justify-content: center;
  box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.3);
  cursor: pointer;
  transition:
    transform 0.2s ease-in-out,
    box-shadow 0.2s ease-in-out;
  width: 180px; /* Фиксирана ширина, за да остане в правилна форма */
  height: 70px; /* Фиксирана височина */
  margin-top: 13px;
}

/* Ефект при ховър */
.joker-button[data-v-178a8da1]:hover {
  transform: scale(1.1); /* Леко увеличение */
  box-shadow: 0px 6px 12px rgba(0, 0, 0, 0.4);
}

/* По-малък текст за описанието */
.joker-subtext[data-v-178a8da1] {
  font-size: 16px;
  font-weight: normal;
  color: #654321;
  margin-top: 2px;
}
.joker-note[data-v-178a8da1] {
  font-weight: bold;
  color: #d2c6c6;
  font-size: 14px;
  opacity: 0.7;
  margin-top: 2px !important;
}
.actions[data-v-178a8da1] {
  display: flex;
  flex-direction: column;
  align-items: center; /* Центрираме бутона и текста спрямо родителя */
  gap: 10px; /* Разстояние между бутона и текста */
  min-width: 150px; /* Фиксирана ширина, за да не променя размера */
  position: relative; /* За позициониране на вътрешни елементи */
}
.actions .feedback[data-v-178a8da1] {
  text-align: center; /* Центрираме текста */
  word-wrap: break-word; /* Пренасяне на дълги думи */
  max-width: 150px; /* Ограничаваме ширината */
  white-space: pre-wrap; /* Позволяваме пренасяне на нови редове */
  position: static; /* Няма нужда от абсолютно позициониране */
}
.alert-message[data-v-178a8da1] {
  background-color: #f9c2c2;
  padding: 10px;
  border-radius: 5px;
  color: #d32f2f;
  font-weight: bold;
}
button[data-v-178a8da1] {
  padding: 10px 20px;
  font-size: 1rem;
  cursor: pointer;
}
.cell.animate[data-v-178a8da1] {
  background-color: yellow !important; /* Тестово оцветяване за проверка */
  border: 2px solid red; /* Допълнителен акцент */
}
.cell-input.animate[data-v-178a8da1] {
  animation: pulse-178a8da1 1.5s infinite alternate; /* Анимация с плавен преход */
  transition: background-color 0.5s ease-in-out; /* Плавен преход на цветовете */
}
/*оцветяване клетка при жокер */
.highlighted[data-v-178a8da1] {
  background-color: rgb(22, 138, 32); /* Пример за оцветяване */
}
/* Клас за премигване */
.blink[data-v-178a8da1] {
  animation: blinkAnimation-178a8da1 1s infinite !important;
}
.button-block[data-v-178a8da1] {
  display: flex;
  flex-direction: column;
  gap: 1rem;
  align-items: center;
  justify-content: center;
  flex-wrap: nowrap;
}
.button-container[data-v-178a8da1] {
  flex: 1 1 300px; /* Позволява да се свие, но не под 300px */
  min-width: 300px;
  max-width: 400px;
  display: flex;
  gap: 10px;
  align-items: stretch; /* Уеднаквява височината на бутоните */
  justify-content: center;
}
.button-container button[data-v-178a8da1] {
  flex-grow: 1; /* Всеки бутон се разширява равномерно */
  flex-basis: 50%; /* Принуждава бутоните да заемат равни части от контейнера */
  min-width: 180px; /* Минимална ширина */
  max-width: 200px; /* Опционално – за да не стават прекалено големи */
  min-height: 80px; /* Минимална височина */
  /*height: 100%; /* Всички бутони ще се разтеглят до височината на най-големия */
  display: flex;
  flex-direction: column;
  justify-content: center;
  text-align: center;
}
/*градиен*/
.gradient-sendButton[data-v-178a8da1] {
  background: linear-gradient(270deg, #2196f3, #73bcd7);
  padding: 1px 2px;
  border-radius: 8px;
  color: white;
  font-weight: bold;
  transition: transform 0.2s ease-in-out;
}
.gradient-verifyButton[data-v-178a8da1] {
  background: linear-gradient(270deg, #303acb, #2339b6);
  padding: 1px 1px;
  border-radius: 8px;
  color: white;
  font-weight: bold;
  transition: transform 0.2s ease-in-out;
}
.gradient-sendButton[data-v-178a8da1]:hover {
  transform: scale(1.05);
}
.gradient-verifyButton[data-v-178a8da1]:hover {
  transform: scale(1.05);
}
/*.sent-answer {
  box-shadow: -1px 3px 20px 4px #ffeb3b, var(--tw-ring-shadow, 0 0 #cddc39d6),
    var(--tw-shadow);
}*/
@keyframes blinkAnimation-178a8da1 {
0% {
    background-color: yellow;
}
50% {
    background-color: transparent;
}
100% {
    background-color: yellow;
}
}
@keyframes pulse-178a8da1 {
0% {
    background-color: #fffacb; /* Бледожълто */
}
50% {
    background-color: #ffeb3b; /* По-яркожълто */
}
100% {
    background-color: #fffacb; /* Бледожълто */
}
}
@media (max-width: 1500px) {
.button-block[data-v-178a8da1] {
    display: flex;
    flex-direction: row;
    /*flex-wrap: wrap;*/
}
}
@media (max-width: 768px) {
  /* .grid-container {
    max-width: 100%;
    flex-direction: column; /* Кръстословицата отива над бутона 
    align-items: center; /* Центрираме всичко хоризонтално 
    overflow-x: auto; /* Появява се скрол при нужда 
  }*/
.grid[data-v-178a8da1] {
    max-width: 100vw;
    grid-template-columns: repeat(var(--cols), 25px);
    grid-template-rows: repeat(var(--rows), 25px);
    overflow-x: auto;
    overflow-y: auto;
    box-sizing: border-box;
}
.cell[data-v-178a8da1] {
    width: 25px;
    height: 25px;
}
.filled-cell[data-v-178a8da1] {
    font-size: 90%;
}
.cell-number[data-v-178a8da1] {
    top: 1px; /* Разстояние отгоре */
    left: 1px; /* Разстояние отляво */
    font-size: 0.7rem; /* Намаляване на размера на шрифта */
}
.actions[data-v-178a8da1] {
    align-items: center;
    margin-top: 10px;
    width: auto;
}
.question-image[data-v-178a8da1] {
    max-width: 200px;
    height: auto;
    margin-top: 1rem;
}
.question-text[data-v-178a8da1] {
    font-size: 1.2rem;
}
.gradient-sendButton[data-v-178a8da1] {
    padding: 0px;
    min-height: 64px;
}
.gradient-verifyButton[data-v-178a8da1] {
    padding: 0px;
    font-weight: bold;
}
  /* Заглавието "SEND #1" */
.gradient-sendButton .text-lg[data-v-178a8da1] {
    font-size: 0.95rem; /* по-малък от 1.125rem */
    line-height: 1.3rem;
}
  /* Най-долният ред (N/A или отговор), ако и него искаш по-дребен */
.gradient-sendButton .text-sm[data-v-178a8da1] {
    font-size: 0.8rem;
    font-weight: normal;
    line-height: 1.3rem;
}
.gradient-verifyButton .text-lg[data-v-178a8da1] {
    font-size: 0.95rem; /* по-малък от 1.125rem */
    line-height: 1.3rem;
}
  /* Най-долният ред (N/A или отговор), ако и него искаш по-дребен */
.gradient-verifyButton .text-sm[data-v-178a8da1] {
    font-size: 0.8rem;
    font-weight: normal;
    line-height: 1rem;
}
}
@media (max-width: 580px) {
.question[data-v-178a8da1] {
    flex: 1 1 100%;
    max-width: 100%; /* всяка карта – цяла ширина */
}
}
@media (min-width: 768px) {
  /* .content {
    display: flex;
    flex-wrap: wrap;
    gap: 20px;
    justify-content: center;
  }

  /*  .grid {
    flex: 1;
    margin-left: 0; /* премахваме този маргин, защото вече компенсираме с calc 
    max-width: calc(100vw - 256px);
    grid-template-columns: repeat(var(--cols), 50px);
    grid-template-rows: repeat(var(--rows), 50px);
    overflow-x: auto;
    overflow-y: hidden;
    box-sizing: border-box;
  }
  .cell {
    width: 50px;
    height: 50px;
  }*/
}
@media (min-width: 768px) and (max-width: 1150px) {
.grid[data-v-178a8da1] {
    max-width: calc(100vw - 256px);
    margin-left: 20px;
}
.button-block[data-v-178a8da1] {
    display: flex;
    flex-direction: row;
}
}
/*стилове за модала*/
.modal-overlay[data-v-178a8da1] {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(0, 0, 0, 0.5);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 1000;
}
.modal-content[data-v-178a8da1] {
  background: white;
  padding: 20px;
  border-radius: 10px;
  text-align: center;
  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
}
.btn-confirm[data-v-178a8da1] {
  background-color: green;
  color: white;
  padding: 10px 20px;
  margin-right: 10px;
  border-radius: 5px;
  cursor: pointer;
}
.btn-cancel[data-v-178a8da1] {
  background-color: red;
  color: white;
  padding: 10px 20px;
  border-radius: 5px;
  cursor: pointer;
}
/* до тук са стиловете за модала*/
/* за замразените клетки*/
.frozen-cell[data-v-178a8da1] {
  background-color: #9e9e9e !important;
  color: black !important;
  font-weight: normal;
}
/*за пулсиращи бутони при избор на жокер*/
@keyframes blink-178a8da1 {
0% {
    opacity: 1;
}
50% {
    opacity: 0.5;
}
100% {
    opacity: 1;
}
}
.blinking[data-v-178a8da1] {
  animation: blink-178a8da1 1.5s infinite ease-in-out;
}

/*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-4.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/TeamChat.vue?vue&type=style&index=0&id=36f2be04&scoped=true&lang=css ***!
  \******************************************************************************************************************************************************************************************************************************************************************************************************************************************************/

.chat-container[data-v-36f2be04] {
  max-height: 300px;
  display: flex;
  flex-direction: column;
}
.messages[data-v-36f2be04] {
  overflow-y: auto;
  max-height: 250px;
  border-bottom: 1px solid gray;
  padding: 5px;
}
.message[data-v-36f2be04] {
  margin-bottom: 5px;
}
.chat-input[data-v-36f2be04] {
  display: flex;
  gap: 5px;
}
.chat-input input[data-v-36f2be04] {
  flex-grow: 1;
  padding: 5px;
  color: black;
  border: 1px solid gray;
}
.chat-input button[data-v-36f2be04] {
  background: #1e40af;
  color: rgb(12, 12, 12);
  padding: 5px 10px;
  border: none;
  cursor: pointer;
}
.user-status[data-v-36f2be04] {
  display: inline-block;
  width: 10px;
  height: 10px;
  border-radius: 50%;
  margin-right: 5px;
}
.online[data-v-36f2be04] {
  background-color: green;
}
.offline[data-v-36f2be04] {
  background-color: red;
}

/*!***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-4.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/TeamCrossword.vue?vue&type=style&index=0&id=49c4c54e&scoped=true&lang=css ***!
  \***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************/

.crossword-renderer[data-v-49c4c54e] {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 20px;
}
.content[data-v-49c4c54e] {
  display: flex;
  gap: 20px;
}
.questions[data-v-49c4c54e] {
  flex: 1;
  text-align: left;
}
.question[data-v-49c4c54e] {
  margin-bottom: 10px; /* Разстояние между въпросите */
}
.question-number[data-v-49c4c54e] {
  font-weight: bold;
  margin-bottom: 5px; /* Разстояние между "Въпрос №" и текста на въпроса */
}
.question-text[data-v-49c4c54e] {
  margin: 0;
}
.grid[data-v-49c4c54e] {
  display: grid;
  width: 100%; /* Разпъва решетката */
  max-width: 600px; /* Ограничаваме максималната ширина */
  aspect-ratio: var(--cols) / var(--rows); /* Запазваме пропорциите на решетката */
  grid-template-rows: repeat(var(--rows), 1fr);
  grid-template-columns: repeat(var(--cols), 1fr);
  gap: 0; /* Премахваме празнините между клетките */
}
.cell-input[data-v-49c4c54e] {
  border: 1px solid #ddd;
  text-align: center;
  width: 100%;
  height: 100%;
}
.cell[data-v-49c4c54e] {
  display: flex;
  align-items: center;
  justify-content: center;
  /*border: 1px solid #ddd; /* Граници за всяка клетка */
  aspect-ratio: 1; /* Гарантира квадратна форма */
  box-sizing: border-box; /* Гарантира, че бордерът не променя размера */
  position: relative; /* Позволява поставяне на номера спрямо клетката */
}
.cell-input[data-v-49c4c54e]:focus {
  border-color: #aaa;
  /*background-color: rgb(251, 238, 93);*/
}

/* Показваме активните клетки */
.cell .cell-input[data-v-49c4c54e] {
  display: block;
}
.cell-input[data-v-49c4c54e] {
  text-transform: uppercase; /* Визуално принуждава главни букви */
}
.cell-number[data-v-49c4c54e] {
  position: absolute;
  top: 2px; /* Разстояние отгоре */
  left: 2px; /* Разстояние отляво */
  font-size: 0.9rem; /* Намаляване на размера на шрифта */
  color: #555; /* Цветът на номера */
  pointer-events: none; /* Предотвратява номера да пречи на кликовете */
}
.actions[data-v-49c4c54e] {
  display: flex;
  flex-direction: column;
  align-items: center; /* Центрираме бутона и текста спрямо родителя */
  gap: 10px; /* Разстояние между бутона и текста */
  min-width: 150px; /* Фиксирана ширина, за да не променя размера */
  position: relative; /* За позициониране на вътрешни елементи */
}
.actions .feedback[data-v-49c4c54e] {
  text-align: center; /* Центрираме текста */
  word-wrap: break-word; /* Пренасяне на дълги думи */
  max-width: 150px; /* Ограничаваме ширината */
  white-space: pre-wrap; /* Позволяваме пренасяне на нови редове */
  position: static; /* Няма нужда от абсолютно позициониране */
}
.alert-message[data-v-49c4c54e] {
  background-color: #f9c2c2;
  padding: 10px;
  border-radius: 5px;
  color: #d32f2f;
  font-weight: bold;
}
button[data-v-49c4c54e] {
  padding: 10px 20px;
  font-size: 1rem;
  cursor: pointer;
}
.cell.animate[data-v-49c4c54e] {
  background-color: yellow !important; /* Тестово оцветяване за проверка */
  border: 2px solid red; /* Допълнителен акцент */
}
.cell-input.animate[data-v-49c4c54e] {
  animation: pulse-49c4c54e 1.5s infinite alternate; /* Анимация с плавен преход */
  transition: background-color 0.5s ease-in-out; /* Плавен преход на цветовете */
}
/*оцветяваче клетка при жокер за съвпадаща буква */
.highlighted[data-v-49c4c54e] {
  background-color: yellow; /* Пример за оцветяване */
}
/* Клас за премигване */
.blink[data-v-49c4c54e] {
  animation: blinkAnimation-49c4c54e 1s infinite !important;
}
@keyframes blinkAnimation-49c4c54e {
0% {
    background-color: yellow;
}
50% {
    background-color: transparent;
}
100% {
    background-color: yellow;
}
}
@keyframes pulse-49c4c54e {
0% {
    background-color: #fffacb; /* Бледожълто */
}
50% {
    background-color: #ffeb3b; /* По-яркожълто */
}
100% {
    background-color: #fffacb; /* Бледожълто */
}
}
@media (max-width: 768px) {
.content[data-v-49c4c54e] {
    flex-direction: column;
}
.grid-container[data-v-49c4c54e] {
    flex-direction: column; /* Кръстословицата отива над бутона */
    align-items: center; /* Центрираме всичко хоризонтално */
}
.actions[data-v-49c4c54e] {
    align-items: center;
    margin-top: 10px;
    width: auto;
}
.question-image[data-v-49c4c54e] {
    max-width: 200px;
    height: auto;
    margin-top: 1rem;
}
}
/*стилове за модала*/
.modal-overlay[data-v-49c4c54e] {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(0, 0, 0, 0.5);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 1000;
}
.modal-content[data-v-49c4c54e] {
  background: white;
  padding: 20px;
  border-radius: 10px;
  text-align: center;
  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
}
.btn-confirm[data-v-49c4c54e] {
  background-color: green;
  color: white;
  padding: 10px 20px;
  margin-right: 10px;
  border-radius: 5px;
  cursor: pointer;
}
.btn-cancel[data-v-49c4c54e] {
  background-color: red;
  color: white;
  padding: 10px 20px;
  border-radius: 5px;
  cursor: pointer;
}
/* до тук са стиловете за модала*/
/* за замразените клетки*/
.frozen-cell[data-v-49c4c54e] {
  background-color: yellow !important;
  color: black !important;
  font-weight: normal;
}

/*!*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-4.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/TeamInviteModal.vue?vue&type=style&index=0&id=e55511b0&scoped=true&lang=css ***!
  \*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/

.modal[data-v-e55511b0] {
  background-color: rgba(0, 0, 0, 0.5);
}


/*# sourceMappingURL=data:application/json;charset=utf-8;base64,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QWQsTUFBYztFQUFkLFNBQWMsRUFBZCxNQUFjO0VBQWQsVUFBYyxFQUFkLE1BQWM7QUFBQTs7QUFBZDs7Q0FBYzs7QUFBZDs7RUFBQSxvQkFBYztBQUFBOztBQUFkOzs7Q0FBYzs7QUFBZDs7OztFQUFBLDBCQUFjLEVBQWQsTUFBYztFQUFkLDZCQUFjLEVBQWQsTUFBYztFQUFkLHNCQUFjLEVBQWQsTUFBYztBQUFBOztBQUFkOztDQUFjOztBQUFkO0VBQUEsYUFBYztBQUFBOztBQUFkOztDQUFjOztBQUFkO0VBQUEsZ0JBQWM7QUFBQTs7QUFBZDs7Q0FBYzs7QUFBZDtFQUFBLHdCQUFjO0FBQUE7O0FBQWQ7O0NBQWM7O0FBQWQ7O0VBQUEsWUFBYztBQUFBOztBQUFkOzs7Q0FBYzs7QUFBZDtFQUFBLDZCQUFjLEVBQWQsTUFBYztFQUFkLG9CQUFjLEVBQWQsTUFBYztBQUFBOztBQUFkOztDQUFjOztBQUFkO0VBQUEsd0JBQWM7QUFBQTs7QUFBZDs7O0NBQWM7O0FBQWQ7RUFBQSwwQkFBYyxFQUFkLE1BQWM7RUFBZCxhQUFjLEVBQWQsTUFBYztBQUFBOztBQUFkOztDQUFjOztBQUFkO0VBQUEsa0JBQWM7QUFBQTs7QUFBZDs7Q0FBYzs7QUFBZDs7Ozs7Ozs7Ozs7OztFQUFBLFNBQWM7QUFBQTs7QUFBZDtFQUFBLFNBQWM7RUFBZCxVQUFjO0FBQUE7O0FBQWQ7RUFBQSxVQUFjO0FBQUE7O0FBQWQ7OztFQUFBLGdCQUFjO0VBQWQsU0FBYztFQUFkLFVBQWM7QUFBQTs7QUFBZDs7Q0FBYztBQUFkO0VBQUEsVUFBYztBQUFBOztBQUFkOztDQUFjOztBQUFkO0VBQUEsZ0JBQWM7QUFBQTs7QUFBZDs7O0NBQWM7O0FBQWQ7RUFBQSxVQUFjLEVBQWQsTUFBYztFQUFkLGNBQWMsRUFBZCxNQUFjO0FBQUE7O0FBQWQ7O0VBQUEsVUFBYyxFQUFkLE1BQWM7RUFBZCxjQUFjLEVBQWQsTUFBYztBQUFBOztBQUFkOztDQUFjOztBQUFkOztFQUFBLGVBQWM7QUFBQTs7QUFBZDs7Q0FBYztBQUFkO0VBQUEsZUFBYztBQUFBOztBQUFkOzs7O0NBQWM7O0FBQWQ7Ozs7Ozs7O0VBQUEsY0FBYyxFQUFkLE1BQWM7RUFBZCxzQkFBYyxFQUFkLE1BQWM7QUFBQTs7QUFBZDs7Q0FBYzs7QUFBZDs7RUFBQSxlQUFjO0VBQWQsWUFBYztBQUFBOztBQUFkLHdFQUFjO0FBQWQ7RUFBQSxhQUFjO0FBQUE7QUFDZDtFQUFBO0FBQW9CO0FBQXBCO0VBQUE7QUFBb0I7QUFBcEI7O0VBQUE7SUFBQTtFQUFvQjs7RUFBcEI7SUFBQTtFQUFvQjtBQUFBO0FBQXBCOztFQUFBO0lBQUE7RUFBb0I7O0VBQXBCO0lBQUE7RUFBb0I7QUFBQTtBQUFwQjs7RUFBQTtJQUFBO0VBQW9COztFQUFwQjtJQUFBO0VBQW9CO0FBQUE7QUFBcEI7O0VBQUE7SUFBQTtFQUFvQjs7RUFBcEI7SUFBQTtFQUFvQjtBQUFBO0FBQXBCOztFQUFBO0lBQUE7RUFBb0I7O0VBQXBCO0lBQUE7RUFBb0I7QUFBQTtBQUNwQjtFQUFBLGtCQUFtQjtFQUFuQixVQUFtQjtFQUFuQixXQUFtQjtFQUFuQixVQUFtQjtFQUFuQixZQUFtQjtFQUFuQixnQkFBbUI7RUFBbkIsc0JBQW1CO0VBQW5CLG1CQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUEsaUJBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsZ0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsa0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQSx1QkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBLHVCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLHVCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLHFCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLHNCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLHNCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLG1CQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLG1CQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQSx5QkFBbUI7S0FBbkIsc0JBQW1CO1VBQW5CO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUEsd0JBQW1CO0tBQW5CLHFCQUFtQjtVQUFuQjtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUEscUJBQW1CO09BQW5CO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQSx1QkFBbUI7RUFBbkIsc0RBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsdUJBQW1CO0VBQW5CLG9EQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLHVCQUFtQjtFQUFuQix1REFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSx1QkFBbUI7RUFBbkIsZ0VBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsdUJBQW1CO0VBQW5CLDhEQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLHVCQUFtQjtFQUFuQiw4REFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSx1QkFBbUI7RUFBbkIsK0RBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsdUJBQW1CO0VBQW5CLDREQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLHVCQUFtQjtFQUFuQiw4REFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSx3QkFBbUI7RUFBbkIsMERBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsd0JBQW1CO0VBQW5CLGtFQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLHNCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLHNCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUEsc0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQSxnQkFBbUI7RUFBbkIsdUJBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUEsZ0NBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsK0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsOEJBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsK0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsaUNBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsZ0NBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUEsc0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsc0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsc0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsc0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsc0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsc0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsc0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsc0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsc0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsc0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsc0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsc0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsc0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsc0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQSxzQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSw2QkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxrQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxrQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUEsa0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsa0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsa0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsa0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsa0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsa0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQSxrQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxrQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxrQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxrQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxrQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxrQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxrQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxrQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQSxrQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQSw0REFBbUI7RUFBbkIsa0VBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsNERBQW1CO0VBQW5CLHFFQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLHNFQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQSxvQkFBbUI7S0FBbkI7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBLHFCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLG9CQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLHFCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLHFCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLG9CQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGtCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLG9CQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLHFCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLG1CQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLG1CQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLHFCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLG9CQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGlCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLG9CQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLG1CQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLGlCQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUEsaUJBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsbUJBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsa0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBLGVBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsbUJBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsbUJBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsa0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUEsa0JBQW1CO0VBQW5CO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBO0FBQW1CO0FBQW5CO0VBQUE7QUFBbUI7QUFBbkI7RUFBQSxvQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxvQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxvQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxvQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxvQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxvQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxvQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxvQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxvQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxvQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxvQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxvQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxvQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxvQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxvQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxvQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxvQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxvQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxvQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxvQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxvQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxvQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQSxvQkFBbUI7RUFBbkI7QUFBbUI7QUFBbkI7RUFBQTtBQUFtQjtBQUFuQjtFQUFBLG9CQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLG9CQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLG9CQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLG9CQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLG9CQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLG9CQUFtQjtFQUFuQjtBQUFtQjtBQUFuQjtFQUFBLG9CQUFtQjtFQUFuQjtBQUFt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QW9zQkE7QUFwc0JBO0VBQUEsa0JBb3NCQTtFQXBzQkE7QUFvc0JBO0FBcHNCQTtFQUFBLGtCQW9zQkE7RUFwc0JBO0FBb3NCQTtBQXBzQkE7RUFBQSxrQkFvc0JBO0VBcHNCQTtBQW9zQkE7QUFwc0JBO0VBQUEsa0JBb3NCQTtFQXBzQkE7QUFvc0JBO0FBcHNCQTtFQUFBLGtCQW9zQkE7RUFwc0JBO0FBb3NCQTtBQXBzQkE7RUFBQSxrQkFvc0JBO0VBcHNCQTtBQW9zQkE7QUFwc0JBO0VBQUEsa0JBb3NCQTtFQXBzQkE7QUFvc0JBO0FBcHNCQTtFQUFBLGtCQW9zQkE7RUFwc0JBO0FBb3NCQTtBQXBzQkE7RUFBQSxrQkFvc0JBO0VBcHNCQTtBQW9zQkE7QUFwc0JBO0VBQUEsa0JBb3NCQTtFQXBzQkE7QUFvc0JBO0FBcHNCQTtFQUFBLGtCQW9zQkE7RUFwc0JBO0FBb3NCQTtBQXBzQkE7RUFBQSxrQkFvc0JBO0VBcHNCQTtBQW9zQkE7QUFwc0JBO0VBQUEsb0JBb3NCQTtFQXBzQkE7QUFvc0JBO0FBcHNCQTtFQUFBLG9CQW9zQkE7RUFwc0JBO0FBb3NCQTtBQXBzQkE7RUFBQSxvQkFvc0JBO0VBcHNCQTtBQW9zQkE7QUFwc0JBO0VBQUEsb0JBb3NCQTtFQXBzQkE7QUFvc0JBO0FBcHNCQTtFQUFBLG9CQW9zQkE7RUFwc0JBO0FBb3NCQTtBQXBzQkE7RUFBQSxvQkFvc0JBO0VBcHNCQTtBQW9zQkE7QUFwc0JBO0VBQUEsb0JBb3NCQTtFQXBzQkE7QUFvc0JBO0FBcHNCQTtFQUFBLG9CQW9zQkE7RUFwc0JBO0FBb3NCQTtBQXBzQkE7RUFBQSxvQkFvc0JBO0VBcHNCQTtBQW9zQkE7QUFwc0JBO0VBQUEsb0JBb3NCQTtFQXBzQkE7QUFvc0JBO0FBcHNCQTtFQUFBLG9CQW9zQkE7RUFwc0JBO0FBb3NCQTtBQXBzQkE7RUFBQSxvQkFvc0JBO0VBcHNCQTtBQW9zQkE7QUFwc0JBO0VBQUEsb0JBb3NCQTtFQXBzQkE7QUFvc0JBO0FBcHNCQTtFQUFBO0FBb3NCQTtBQXBzQkE7RUFBQTtBQW9zQkE7QUFwc0JBO0VBQUEsc0JBb3NCQTtFQXBzQkE7QUFvc0JBO0FBcHNCQTtFQUFBLHNCQW9zQkE7RUFwc0JBO0FBb3NCQTtBQXBzQkE7RUFBQSw4QkFvc0JBO0VBcHNCQTtBQW9zQkE7QUFwc0JBO0VBQUEsMkdBb3NCQTtFQXBzQkEseUdBb3NCQTtFQXBzQkE7QUFvc0JBO0FBcHNCQTtFQUFBLDJHQW9zQkE7RUFwc0JBLHlHQW9zQkE7RUFwc0JBO0FBb3NCQTtBQXBzQkE7RUFBQSxvQkFvc0JBO0VBcHNCQTtBQW9zQkE7QUFwc0JBO0VBQUEsb0JBb3NCQTtFQXBzQkE7QUFvc0JBO0FBcHNCQTtFQUFBLG9CQW9zQkE7RUFwc0JBO0FBb3NCQTtBQXBzQkE7RUFBQSxvQkFvc0JBO0VBcHNCQTtBQW9zQkE7QUFwc0JBO0VBQUEsb0JBb3NCQTtFQXBzQkE7QUFvc0JBO0FBcHNCQTtFQUFBLG9CQW9zQkE7RUFwc0JBO0FBb3NCQTtBQXBzQkE7RUFBQSxvQkFvc0JBO0VBcHNCQTtBQW9zQkE7QUFwc0JBO0VBQUE7QUFvc0JBO0FBcHNCQTtFQUFBO0FBb3NCQTtBQXBzQkE7O0VBQUE7SUFBQSxpQkFvc0JBO0lBcHNCQTtFQW9zQkE7O0VBcHNCQTtJQUFBO0VBb3NCQTs7RUFwc0JBO0lBQUE7RUFvc0JBOztFQXBzQkE7SUFBQTtFQW9zQkE7O0VBcHNCQTtJQUFBO0VBb3NCQTs7RUFwc0JBO0lBQUE7RUFvc0JBOztFQXBzQkE7SUFBQTtFQW9zQkE7O0VBcHNCQTtJQUFBO0VBb3NCQTs7RUFwc0JBO0lBQUE7RUFvc0JBOztFQXBzQkE7SUFBQSx1QkFvc0JBO0lBcHNCQSxvREFvc0JBO0lBcHNCQTtFQW9zQkE7O0VBcHNCQTtJQUFBO0VBb3NCQTs7RUFwc0JBO0lBQUEsb0JBb3NCQTtJQXBzQkE7RUFvc0JBOztFQXBzQkE7SUFBQSxrQkFvc0JBO0lBcHNCQTtFQW9zQkE7O0VBcHNCQTtJQUFBLG1CQW9zQkE7SUFwc0JBO0VBb3NCQTs7RUFwc0JBO0lBQUEsb0JBb3NCQTtJQXBzQkE7RUFvc0JBOztFQXBzQkE7SUFBQSxtQkFvc0JBO0lBcHNCQTtFQW9zQkE7O0VBcHNCQTtJQUFBLGVBb3NCQTtJQXBzQkE7RUFvc0JBOztFQXBzQkE7SUFBQSxtQkFvc0JBO0lBcHNCQTtFQW9zQkE7O0VBcHNCQTtJQUFBLGtCQW9zQkE7SUFwc0JBO0VBb3NCQTtBQUFBO0FBcHNCQTs7RUFBQTtJQUFBO0VBb3NCQTs7RUFwc0JBO0lBQUE7RUFvc0JBOztFQXBzQkE7SUFBQTtFQW9zQkE7O0VBcHNCQTtJQUFBO0VBb3NCQTs7RUFwc0JBO0lBQUE7RUFvc0JBOztFQXBzQkE7SUFBQTtFQW9zQkE7O0VBcHNCQTtJQUFBO0VBb3NCQTs7RUFwc0JBO0lBQUE7RUFvc0JBOztFQXBzQkE7SUFBQTtFQW9zQkE7O0VBcHNCQTtJQUFBO0VBb3NCQTs7RUFwc0JBO0lBQUE7RUFvc0JBOztFQXBzQkE7SUFBQTtFQW9zQkE7O0VBcHNCQTtJQUFBO0VBb3NCQTs7RUFwc0JBO0lBQUE7RUFvc0JBOztFQXBzQkE7SUFBQTtFQW9zQkE7O0VBcHNCQTtJQUFBO0VBb3NCQTs7RUFwc0JBO0lBQUE7RUFvc0JBOztFQXBzQkE7SUFBQTtFQW9zQkE7O0VBcHNCQTtJQUFBLGtCQW9zQkE7SUFwc0JBO0VBb3NCQTs7RUFwc0JBO0lBQUEsa0JBb3NCQTtJQXBzQkE7RUFvc0JBOztFQXBzQkE7SUFBQSxtQkFvc0JBO0lBcHNCQTtFQW9zQkE7O0VBcHNCQTtJQUFBLGlCQW9zQkE7SUFwc0JBO0VBb3NCQTs7RUFwc0JBO0lBQUEsbUJBb3NCQTtJQXBzQkE7RUFvc0JBOztFQXBzQkE7SUFBQTtFQW9zQkE7O0VBcHNCQTtJQUFBLG1CQW9zQkE7SUFwc0JBO0VBb3NCQTs7RUFwc0JBO0lBQUEsa0JBb3NCQTtJQXBzQkE7RUFvc0JBOztFQXBzQkE7SUFBQSxlQW9zQkE7SUFwc0JBO0VBb3NCQTs7RUFwc0JBO0lBQUEsbUJBb3NCQTtJQXBzQkE7RUFvc0JBO0FBQUE7QUFwc0JBOztFQUFBO0lBQUE7RUFvc0JBOztFQXBzQkE7SUFBQTtFQW9zQkE7O0VBcHNCQTtJQUFBO0VBb3NCQTs7RUFwc0JBO0lBQUE7RUFvc0JBOztFQXBzQkE7SUFBQSxrQkFvc0JBO0lBcHNCQTtFQW9zQkE7QUFBQTtBQXBzQkE7O0VBQUE7SUFBQTtFQW9zQkE7QUFBQTtBQXBzQkE7RUFBQSxtQkFvc0JBO0VBcHNCQTtBQW9zQkE7QUFwc0JBO0VBQUE7QUFvc0JBO0FBcHNCQTtFQUFBO0FBb3NCQTtBQXBzQkE7O0VBQUE7SUFBQSxzQkFvc0JBO0lBcHNCQTtFQW9zQkE7O0VBcHNCQTtJQUFBLHNCQW9zQkE7SUFwc0JBO0VBb3NCQTs7RUFwc0JBO0lBQUEsc0JBb3NCQTtJQXBzQkE7RUFvc0JBOztFQXBzQkE7SUFBQTtFQW9zQkE7O0VBcHNCQTtJQUFBLDZCQW9zQkE7SUFwc0JBO0VBb3NCQTs7RUFwc0JBO0lBQUEsa0JBb3NCQTtJQXBzQkE7RUFvc0JBOztFQXBzQkE7SUFBQSxrQkFvc0JBO0lBcHNCQTtFQW9zQkE7O0VBcHNCQTtJQUFBLGtCQW9zQkE7SUFwc0JBO0VBb3NCQTs7RUFwc0JBO0lBQUEsa0JBb3NCQTtJQXBzQkE7RUFvc0JBOztFQXBzQkE7SUFBQSxrQkFvc0JBO0lBcHNCQTtFQW9zQkE7O0VBcHNCQTtJQUFBO0VBb3NCQTs7RUFwc0JBO0lBQUE7RUFvc0JBOztFQXBzQkE7SUFBQSxrQkFvc0JBO0lBcHNCQTtFQW9zQkE7O0VBcHNCQTtJQUFBLGtCQW9zQkE7SUFwc0JBO0VBb3NCQTs7RUFwc0JBO0lBQUEsb0JBb3NCQTtJQXBzQkE7RUFvc0JBOztFQXBzQkE7SUFBQSxvQkFvc0JBO0lBcHNCQTtFQW9zQkE7O0VBcHNCQTtJQUFBLG9CQW9zQkE7SUFwc0JBO0VBb3NCQTs7RUFwc0JBO0lBQUEsb0JBb3NCQTtJQXBzQkE7RUFvc0JBOztFQXBzQkE7SUFBQSxvQkFvc0JBO0lBcHNCQTtFQW9zQkE7O0VBcHNCQTtJQUFBLG9CQW9zQkE7SUFwc0JBO0VBb3NCQTs7RUFwc0JBO0lBQUEsb0JBb3NCQTtJQXBzQkE7RUFvc0JBOztFQXBzQkE7SUFBQSwyQkFvc0JBO0lBcHNCQTtFQW9zQkE7O0VBcHNCQTtJQUFBLDJC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QUNFLHFCQUFxQjtFQUNyQixZQUFZO0VBQ1osa0JBQWtCO0VBQ2xCLGtCQUFrQjtFQUNsQixlQUFlO0FBQ2pCO0FBQ0EsaUNBQWlDO0FBQ2pDLHlCQUF5QjtBQUN6QjtFQUNFLG1DQUFtQztFQUNuQyx1QkFBdUI7RUFDdkIsbUJBQW1CO0FBQ3JCOzs7Ozs7QUM3OEJBO0VBQ0Usb0NBQW9DO0FBQ3RDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3Jvc3N3b3JkLy4vYXNzZXRzL3Z1ZS9jb250cm9sbGVycy9Nb2RhbC52dWUiLCJ3ZWJwYWNrOi8vY3Jvc3N3b3JkLy4vYXNzZXRzL3Z1ZS9jb250cm9sbGVycy9JbnB1dE1vZGFsLnZ1ZSIsIndlYnBhY2s6Ly9jcm9zc3dvcmQvLi9hc3NldHMvdnVlL2NvbnRyb2xsZXJzL1RlYW1Nb2RhbC52dWUiLCJ3ZWJwYWNrOi8vY3Jvc3N3b3JkLy4vYXNzZXRzL3N0eWxlcy9hcHAuY3NzIiwid2VicGFjazovL2Nyb3Nzd29yZC8uL2Fzc2V0cy92dWUvY29udHJvbGxlcnMvQ3JhenlQdXp6bGUudnVlIiwid2VicGFjazovL2Nyb3Nzd29yZC8uL2Fzc2V0cy92dWUvY29udHJvbGxlcnMvQ3Jvc3N3b3JkRmVlZGJhY2sudnVlIiwid2VicGFjazovL2Nyb3Nzd29yZC8uL2Fzc2V0cy92dWUvY29udHJvbGxlcnMvQ3Jvc3N3b3JkR3JpZC52dWUiLCJ3ZWJwYWNrOi8vY3Jvc3N3b3JkLy4vYXNzZXRzL3Z1ZS9jb250cm9sbGVycy9Dcm9zc3dvcmRIZWFkZXIudnVlIiwid2VicGFjazovL2Nyb3Nzd29yZC8uL2Fzc2V0cy92dWUvY29udHJvbGxlcnMvQ3Jvc3N3b3JkSm9rZXIudnVlIiwid2VicGFjazovL2Nyb3Nzd29yZC8uL2Fzc2V0cy92dWUvY29udHJvbGxlcnMvRXhwbGFuYXRpb25zTW9kYWwudnVlIiwid2VicGFjazovL2Nyb3Nzd29yZC8uL2Fzc2V0cy92dWUvY29udHJvbGxlcnMvQ3Jvc3N3b3JkUmVuZGVyLnZ1ZSIsIndlYnBhY2s6Ly9jcm9zc3dvcmQvLi9hc3NldHMvdnVlL2NvbnRyb2xsZXJzL1RlYW1DaGF0LnZ1ZSIsIndlYnBhY2s6Ly9jcm9zc3dvcmQvLi9hc3NldHMvdnVlL2NvbnRyb2xsZXJzL1RlYW1Dcm9zc3dvcmQudnVlIiwid2VicGFjazovL2Nyb3Nzd29yZC8uL2Fzc2V0cy92dWUvY29udHJvbGxlcnMvVGVhbUludml0ZU1vZGFsLnZ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XHJcbiAgPGRpdlxyXG4gICAgdi1pZj1cInZpc2libGVcIlxyXG4gICAgdGFiaW5kZXg9XCItMVwiXHJcbiAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgY2xhc3M9XCJmaXhlZCBpbnNldC0wIHotNTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctb3BhY2l0eS0xMFwiXHJcbiAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KVwiXHJcbiAgICBAY2xpY2suc2VsZj1cImNsb3NlTW9kYWxcIlxyXG4gID5cclxuICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBwLTQgdy0xMS8xMiBtYXgtdy0yeGwgbWF4LWgtZnVsbFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgYmctd2hpdGUgcm91bmRlZC1sZyBzaGFkb3ctbGcgZGFyazpiZy1ncmF5LTcwMFwiPlxyXG4gICAgICAgIDwhLS0gTW9kYWwgaGVhZGVyIC0tPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHAtNCBtZDpwLTUgYm9yZGVyLWIgcm91bmRlZC10IGRhcms6Ym9yZGVyLWdyYXktNjAwXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8aDMgY2xhc3M9XCJ0ZXh0LXhsIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGVcIj5cclxuICAgICAgICAgICAge3sgdGl0bGUgfX1cclxuICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICA8IS0tINCh0LvQvtGCINC30LAg0YHRitC00YrRgNC20LDQvdC40LUgLS0+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIEBjbGljaz1cImNsb3NlTW9kYWxcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtZ3JheS00MDAgYmctdHJhbnNwYXJlbnQgaG92ZXI6YmctZ3JheS0yMDAgaG92ZXI6dGV4dC1ncmF5LTkwMCByb3VuZGVkLWxnIHRleHQtc20gdy04IGgtOCBtcy1hdXRvIGlubGluZS1mbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBkYXJrOmhvdmVyOmJnLWdyYXktNjAwIGRhcms6aG92ZXI6dGV4dC13aGl0ZVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzdmdcclxuICAgICAgICAgICAgICBjbGFzcz1cInctNCBoLTRcIlxyXG4gICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTQgMTRcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXHJcbiAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgZD1cIm0xIDEgNiA2bTAgMCA2IDZNNyA3bDYtNk03IDdsLTYgNlwiXHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkNsb3NlPC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSBNb2RhbCBib2R5IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwLTQgbWQ6cC01IHNwYWNlLXktNFwiPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWJhc2UgbGVhZGluZy1yZWxheGVkIHRleHQtZ3JheS01MDAgZGFyazp0ZXh0LWdyYXktNDAwXCI+XHJcbiAgICAgICAgICAgIHt7IGNvbnRlbnQgfX1cclxuICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIE1vZGFsIGZvb3RlciAtLT5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXIgcC00IG1kOnAtNSBib3JkZXItdCBib3JkZXItZ3JheS0yMDAgcm91bmRlZC1iIGRhcms6Ym9yZGVyLWdyYXktNjAwXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIEBjbGljaz1cImNsb3NlTW9kYWxcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtd2hpdGUgYmctYmx1ZS03MDAgaG92ZXI6YmctYmx1ZS04MDAgZm9jdXM6cmluZy00IGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLWJsdWUtMzAwIGZvbnQtbWVkaXVtIHJvdW5kZWQtbGcgdGV4dC1zbSBweC01IHB5LTIuNSBkYXJrOmJnLWJsdWUtNjAwIGRhcms6aG92ZXI6YmctYmx1ZS03MDAgZGFyazpmb2N1czpyaW5nLWJsdWUtODAwXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgT0tcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHNjcmlwdD5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIHByb3BzOiB7XHJcbiAgICB0aXRsZToge1xyXG4gICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgIGRlZmF1bHQ6IFwiQ29uZmlybWF0aW9uXCIsXHJcbiAgICB9LFxyXG4gICAgY29udGVudDoge1xyXG4gICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgIGRlZmF1bHQ6IFwiXCIsXHJcbiAgICB9LFxyXG4gICAgdmlzaWJsZToge1xyXG4gICAgICB0eXBlOiBCb29sZWFuLFxyXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcclxuICAgIH0sXHJcbiAgfSxcclxuICBlbWl0czogW1wiY2xvc2VcIl0sIC8vINCU0L7QsdCw0LLQuNGF0LzQtSDQvtC/0YbQuNGP0YLQsCBlbWl0c1xyXG4gIG1ldGhvZHM6IHtcclxuICAgIGNsb3NlTW9kYWwoKSB7XHJcbiAgICAgIHRoaXMuJGVtaXQoXCJjbG9zZVwiKTtcclxuICAgIH0sXHJcbiAgfSxcclxufTtcclxuPC9zY3JpcHQ+XHJcblxyXG48c3R5bGUgc2NvcGVkPlxyXG4vKiDQnNC+0LbQtdGIINC00LAg0LTQvtCx0LDQstC40Ygg0YHRgtC40LvQvtCy0LUg0YLRg9C6ICovXHJcbjwvc3R5bGU+XHJcbiIsIjx0ZW1wbGF0ZT5cclxuICA8ZGl2XHJcbiAgICB2LWlmPVwidmlzaWJsZVwiXHJcbiAgICB0YWJpbmRleD1cIi0xXCJcclxuICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICBjbGFzcz1cImZpeGVkIGluc2V0LTAgei01MCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy1vcGFjaXR5LTEwXCJcclxuICAgIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpXCJcclxuICAgIEBjbGljay5zZWxmPVwiY2xvc2VNb2RhbFwiXHJcbiAgPlxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cInJlbGF0aXZlIHAtNiB3LTExLzEyIG1heC13LTJ4bCBtYXgtaC1mdWxsIGJnLXdoaXRlIHJvdW5kZWQtbGcgc2hhZG93LWxnIGRhcms6YmctZ3JheS03MDBcIlxyXG4gICAgPlxyXG4gICAgICA8IS0tIE1vZGFsIEhlYWRlciAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTRcIj5cclxuICAgICAgICA8aDIgY2xhc3M9XCJ0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGVcIj5cclxuICAgICAgICAgIHt7IHRpdGxlIH19XHJcbiAgICAgICAgPC9oMj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIE1vZGFsIENvbnRlbnQgKElucHV0IEZpZWxkKSAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTZcIj5cclxuICAgICAgICA8c2xvdCBuYW1lPVwiY29udGVudFwiPjwvc2xvdD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgdi1pZj1cImVycm9yTWVzc2FnZVwiIGNsYXNzPVwidGV4dC1yZWQtNTAwIG1iLTRcIj5cclxuICAgICAgICB7eyBlcnJvck1lc3NhZ2UgfX1cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIE1vZGFsIEZvb3RlciAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmQgc3BhY2UteC00XCI+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgQGNsaWNrPVwiJGVtaXQoJ2Nsb3NlJylcIlxyXG4gICAgICAgICAgY2xhc3M9XCJiZy1yZWQtNTAwIHRleHQtd2hpdGUgcHgtNCBweS0yIHJvdW5kZWQgaG92ZXI6YmctZ3JheS02MDBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIENhbmNlbFxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIEBjbGljaz1cIiRlbWl0KCdzdWJtaXQnKVwiXHJcbiAgICAgICAgICBjbGFzcz1cImJnLWJsdWUtNTAwIHRleHQtd2hpdGUgcHgtNCBweS0yIHJvdW5kZWQgaG92ZXI6YmctYmx1ZS02MDBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIENvbmZpcm1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBwcm9wczoge1xyXG4gICAgdGl0bGU6IHtcclxuICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICBkZWZhdWx0OiBcIkVudGVyIERhdGFcIixcclxuICAgIH0sXHJcbiAgICB2aXNpYmxlOiB7XHJcbiAgICAgIHR5cGU6IEJvb2xlYW4sXHJcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxyXG4gICAgfSxcclxuICAgIGVycm9yTWVzc2FnZToge1xyXG4gICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgIGRlZmF1bHQ6IFwiXCIsXHJcbiAgICB9LFxyXG4gIH0sXHJcbiAgZW1pdHM6IFtcImNsb3NlXCIsIFwic3VibWl0XCJdLFxyXG4gIG1ldGhvZHM6IHtcclxuICAgIGNsb3NlTW9kYWwoKSB7XHJcbiAgICAgIHRoaXMuJGVtaXQoXCJjbG9zZVwiKTtcclxuICAgIH0sXHJcbiAgfSxcclxufTtcclxuPC9zY3JpcHQ+XHJcblxyXG48c3R5bGUgc2NvcGVkPlxyXG4vKiDQnNC+0LbQtSDQtNCwINC00L7QsdCw0LLQuNC8INC00L7Qv9GK0LvQvdC40YLQtdC70L3QuCDRgdGC0LjQu9C+0LLQtSDRgtGD0LogKi9cclxuPC9zdHlsZT5cclxuIiwiPHRlbXBsYXRlPlxyXG4gIDxkaXZcclxuICAgIHYtaWY9XCJpc09wZW5cIlxyXG4gICAgY2xhc3M9XCJmaXhlZCBpbnNldC0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLWdyYXktOTAwIGJnLW9wYWNpdHktNTBcIlxyXG4gID5cclxuICAgIDxkaXYgY2xhc3M9XCJiZy13aGl0ZSBwLTYgcm91bmRlZC1sZyBzaGFkb3ctbGcgbWF4LXctbWQgdy1mdWxsIHJlbGF0aXZlXCI+XHJcbiAgICAgIDwhLS0g0JHRg9GC0L7QvSDQt9CwINC30LDRgtCy0LDRgNGP0L3QtSAtLT5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIEBjbGljaz1cImNsb3NlTW9kYWxcIlxyXG4gICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgdG9wLTIgcmlnaHQtMiB0ZXh0LWdyYXktNTAwIGhvdmVyOnRleHQtZ3JheS04MDBcIlxyXG4gICAgICA+XHJcbiAgICAgICAg4pyWXHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGgyIGNsYXNzPVwidGV4dC14bCBmb250LWJvbGQgdGV4dC1jZW50ZXIgbWItNFwiPtCY0LfQsdC10YDQuCDQvtC/0YbQuNGPPC9oMj5cclxuXHJcbiAgICAgIDwhLS0g8J+MnyDQntC/0YbQuNC4INC30LAg0LjQt9Cx0L7RgCAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZ3JpZC1jb2xzLTEgZ2FwLTRcIj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICBAY2xpY2s9XCJjcmVhdGVUZWFtTW9kYWxcIlxyXG4gICAgICAgICAgY2xhc3M9XCJvcHRpb24tYnRuIGJnLWJsdWUtNTAwIGhvdmVyOmJnLWJsdWUtNjAwXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICDwn4+GINCh0YrQt9C00LDQuSDQvtGC0LHQvtGAXHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIEBjbGljaz1cInNlbGVjdFRlYW1cIlxyXG4gICAgICAgICAgY2xhc3M9XCJvcHRpb24tYnRuIGJnLWdyZWVuLTUwMCBob3ZlcjpiZy1ncmVlbi02MDBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiPvCfk5w8L3NwYW4+INCY0LfQsdC10YDQuCDQvtGC0LHQvtGAXHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIEBjbGljaz1cImF1dG9Bc3NpZ25UZWFtXCJcclxuICAgICAgICAgIGNsYXNzPVwib3B0aW9uLWJ0biBiZy15ZWxsb3ctNTAwIGhvdmVyOmJnLXllbGxvdy02MDBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiPvCflIA8L3NwYW4+INCh0LvRg9C20LXQsdC90L4g0YDQsNC30L/RgNC10LTQtdC70LXQvdC40LVcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIPCfjJ8g0KTQvtGA0LzQsCDQt9CwINGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC+0YLQsdC+0YAgXHJcbiAgICAgIDxkaXYgdi1pZj1cImlzQ3JlYXRpbmdUZWFtXCI+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICB2LW1vZGVsPVwidGVhbU5hbWVcIlxyXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCLQmNC80LUg0L3QsCDQvtGC0LHQvtGA0LBcIlxyXG4gICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgcC0yIGJvcmRlciByb3VuZGVkLW1kIG1iLTNcIlxyXG4gICAgICAgIC8+XHJcblxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiBtYi00XCI+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgdi1tb2RlbD1cImlzTG9ja2VkXCIgY2xhc3M9XCJ3LTUgaC01XCIgLz5cclxuICAgICAgICAgIDxzcGFuPtCX0LDQutC70Y7Rh9C10L0g0L7RgtCx0L7RgCAo0YHQsNC80L4g0YEg0L/QvtC60LDQvdC4KTwvc3Bhbj5cclxuICAgICAgICA8L2xhYmVsPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW5cIj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgQGNsaWNrPVwiaXNDcmVhdGluZ1RlYW0gPSBmYWxzZVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJnLWJsdWUtNTAwIGhvdmVyOmJnLWdyYXktNjAwXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAg8J+UmSDQndCw0LfQsNC0XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImNyZWF0ZVRlYW1cIiBjbGFzcz1cImJ0biBiZy1ibHVlLTUwMCBob3ZlcjpiZy1ibHVlLTYwMFwiPlxyXG4gICAgICAgICAgICDinIUg0KHRitC30LTQsNC5XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICA8IS0tINCQ0LrQviDQv9C+0YLRgNC10LHQuNGC0LXQu9GP0YIg0LjRgdC60LAg0LTQsCDQuNC30LHQtdGA0LUg0L7RgtCx0L7RgCAtLT5cclxuICAgICAgPGRpdiB2LWlmPVwiaXNTZWxlY3RpbmdUZWFtXCI+XHJcbiAgICAgICAgPGRpdiB2LWlmPVwidGVhbXMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgPGgzIGNsYXNzPVwidGV4dC1sZyBmb250LWJvbGQgbWItMlwiPtCY0LfQsdC10YDQuCDQvtGC0LHQvtGAOjwvaDM+XHJcbiAgICAgICAgICA8dGFibGVcclxuICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgdGV4dC1zbSB0ZXh0LWxlZnQgdGV4dC1ncmF5LTYwMCBib3JkZXItY29sbGFwc2UgYm9yZGVyIGJvcmRlci1ncmF5LTMwMFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDx0aGVhZCBjbGFzcz1cInRleHQteHMgdGV4dC1ncmF5LTcwMCB1cHBlcmNhc2UgYmctZ3JheS0xMDBcIj5cclxuICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJib3JkZXIgcHgtNCBweS0yXCI+0J7RgtCx0L7RgDwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJib3JkZXIgcHgtNCBweS0yXCI+0JrQsNC/0LjRgtCw0L08L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiYm9yZGVyIHB4LTQgcHktMlwiPtCY0LPRgNCw0YfQuNGC0LU8L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiYm9yZGVyIHB4LTQgcHktMlwiPtCU0LXQudGB0YLQstC40LU8L3RoPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICA8dHIgdi1mb3I9XCJ0ZWFtIGluIHRlYW1zXCIgOmtleT1cInRlYW0uaWRcIiBjbGFzcz1cImJvcmRlci1iXCI+XHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXIgcHgtNCBweS0yXCI+e3sgdGVhbS5uYW1lIH19PC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvcmRlciBweC00IHB5LTJcIj57eyB0ZWFtLmNhcHRhaW4gfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9yZGVyIHB4LTQgcHktMlwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwidGVhbS5tZW1iZXJzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyB0ZWFtLm1lbWJlcnMuam9pbihcIiwgXCIpIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gdi1lbHNlIGNsYXNzPVwidGV4dC1ncmF5LTQwMFwiPtCd0Y/QvNCwINC40LPRgNCw0YfQuDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXIgcHgtNCBweS0yIHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJnLWJsdWUtNTAwIHRleHQtd2hpdGUgcHgtNCBweS0xIHJvdW5kZWQgaG92ZXI6YmctYmx1ZS03MDBcIlxyXG4gICAgICAgICAgICAgICAgICAgIEBjbGljaz1cImpvaW5UZWFtKHRlYW0uaWQpXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgINCS0LvQtdC3XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIPCfm5Eg0JDQutC+INC90Y/QvNCwINC90LDQu9C40YfQvdC4INC+0YLQsdC+0YDQuCwg0L/QvtC60LDQt9Cy0LDQvNC1INGB0YrQvtCx0YnQtdC90LjQtSAtLT5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICB2LWVsc2VcclxuICAgICAgICAgIGNsYXNzPVwidGV4dC1jZW50ZXIgcC00IGJnLXllbGxvdy0xMDAgdGV4dC15ZWxsb3ctODAwIHJvdW5kZWQtbGdcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxwPjxzdHJvbmc+0J3Rj9C80LAg0L3QsNC70LjRh9C90Lgg0L7RgtCx0L7RgNC4INGBINC80LXRgdGC0LAuPC9zdHJvbmc+PC9wPlxyXG4gICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgINCc0L7QttC10YLQtSDQtNCwXHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ibHVlLTYwMCBjdXJzb3ItcG9pbnRlclwiIEBjbGljaz1cImNyZWF0ZVRlYW1Nb2RhbFwiXHJcbiAgICAgICAgICAgICAgPtGB0YrQt9C00LDQtNC10YLQtSDRgdC+0LHRgdGC0LLQtdC9INC+0YLQsdC+0YA8L3NwYW5cclxuICAgICAgICAgICAgPi5cclxuICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC90ZW1wbGF0ZT5cclxuPHNjcmlwdD5cclxuaW1wb3J0IFN3YWwgZnJvbSBcInN3ZWV0YWxlcnQyXCI7XHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBkYXRhKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaXNPcGVuOiBmYWxzZSwgLy/Qt9CwINC/0L7QutCw0LfQstCw0L3QtSDQvdCwINC80L7QtNCw0LvQsFxyXG4gICAgICAvL2lzQ3JlYXRpbmdUZWFtOiBmYWxzZSwgLy8g0KHQu9C10LTQuCDQtNCw0LvQuCDRgdC80LUg0LIg0YDQtdC20LjQvNCwINC30LAg0YHRitC30LTQsNCy0LDQvdC1INC90LAg0L7RgtCx0L7RgFxyXG4gICAgICBpc1NlbGVjdGluZ1RlYW06IGZhbHNlLCAvLyDQodC70LXQtNC4INC00LDQu9C4INGB0LzQtSDQsiDRgNC10LbQuNC80LAg0LfQsCDQuNC30LHQvtGAINC90LAg0L7RgtCx0L7RgFxyXG4gICAgICB0ZWFtTmFtZTogXCJcIiwgLy8g0J/QvtC70LUg0LfQsCDQuNC80LUg0L3QsCDQvtGC0LHQvtGA0LBcclxuICAgICAgaXNMb2NrZWQ6IGZhbHNlLCAvLyDQp9C10LrQsdC+0LrRgSDQt9CwINC30LDQutC70Y7Rh9C10L0v0L7RgtC60LvRjtGH0LXQvSDQvtGC0LHQvtGAXHJcbiAgICAgIHRlYW1zOiBbXSwgLy8g0KLRg9C6INGJ0LUg0YHRitGF0YDQsNC90Y/QstCw0LzQtSDQvtGC0LHQvtGA0LjRgtC1XHJcbiAgICB9O1xyXG4gIH0sXHJcbiAgbW91bnRlZCgpIHtcclxuICAgIHRoaXMub3Blbk1vZGFsKCk7XHJcbiAgICBjb25zb2xlLmxvZyhcIlRlYW1Nb2RhbCBjb21wb25lbnQgbG9hZGVkXCIpO1xyXG4gIH0sXHJcbiAgd2F0Y2g6IHtcclxuICAgIGlzT3BlbihuZXdWYWwpIHtcclxuICAgICAgaWYgKG5ld1ZhbCkge1xyXG4gICAgICAgIHRoaXMuZmV0Y2hPcGVuVGVhbXMoKTsgLy8g0JjQt9Cy0LvQuNGH0LDQvNC1INC+0YLQsdC+0YDQuNGC0LUg0L/RgNC4INC+0YLQstCw0YDRj9C90LUg0L3QsCDQvNC+0LTQsNC70LBcclxuICAgICAgfVxyXG4gICAgfSxcclxuICB9LFxyXG4gIGNvbXB1dGVkOiB7XHJcbiAgICBzb3J0ZWRUZWFtcygpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudGVhbXMuc2xpY2UoKS5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcclxuICAgIH0sXHJcbiAgfSxcclxuICBtZXRob2RzOiB7XHJcbiAgICBvcGVuTW9kYWwoKSB7XHJcbiAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgICAgLy90aGlzLmlzQ3JlYXRpbmdUZWFtID0gZmFsc2U7IC8vINCS0LjQvdCw0LPQuCDQt9Cw0L/QvtGH0LLQsNC80LUg0L7RgiDQvtC/0YbQuNC40YLQtVxyXG4gICAgfSxcclxuICAgIGNsb3NlTW9kYWwoKSB7XHJcbiAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgICAgIC8vdGhpcy5pc0NyZWF0aW5nVGVhbSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLiRlbWl0KFwiY2xvc2VcIik7XHJcbiAgICB9LFxyXG4gICAgYXN5bmMgY3JlYXRlVGVhbU1vZGFsKCkge1xyXG4gICAgICBjb25zdCB7IHZhbHVlOiBmb3JtVmFsdWVzIH0gPSBhd2FpdCBTd2FsLmZpcmUoe1xyXG4gICAgICAgIHRpdGxlOiBcItCh0YrQt9C00LDQuSDQvtGC0LHQvtGAXCIsXHJcbiAgICAgICAgaHRtbDogYFxyXG4gICAgICAgICAgPGlucHV0IGlkPVwidGVhbS1uYW1lXCIgY2xhc3M9XCJzd2FsMi1pbnB1dFwiIHBsYWNlaG9sZGVyPVwi0JjQvNC1INC90LAg0L7RgtCx0L7RgNCwXCI+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzd2FsMi1jaGVja2JveFwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJpcy1sb2NrZWRcIj4g0JfQsNC60LvRjtGH0LXQvSDQvtGC0LHQvtGAICjRgdCw0LzQviDRgSDQv9C+0LrQsNC90LgpXHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIGAsXHJcbiAgICAgICAgZm9jdXNDb25maXJtOiBmYWxzZSxcclxuICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiBcIuKchSDQodGK0LfQtNCw0LlcIixcclxuICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiBcIvCflJkg0J3QsNC30LDQtFwiLFxyXG4gICAgICAgIHByZUNvbmZpcm06ICgpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHRlYW1OYW1lOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInRlYW0tbmFtZVwiKS52YWx1ZS50cmltKCksXHJcbiAgICAgICAgICAgIGlzTG9ja2VkOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImlzLWxvY2tlZFwiKS5jaGVja2VkLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChmb3JtVmFsdWVzKSB7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVUZWFtKGZvcm1WYWx1ZXMudGVhbU5hbWUsIGZvcm1WYWx1ZXMuaXNMb2NrZWQpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgYXN5bmMgY3JlYXRlVGVhbSh0ZWFtTmFtZSwgaXNMb2NrZWQpIHtcclxuICAgICAgaWYgKCF0ZWFtTmFtZSkge1xyXG4gICAgICAgIFN3YWwuZmlyZShcItCT0YDQtdGI0LrQsFwiLCBcItCc0L7Qu9GPLCDQstGK0LLQtdC00LXRgtC1INC40LzQtSDQvdCwINC+0YLQsdC+0YDQsCFcIiwgXCJlcnJvclwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChcIi9jcmVhdGUtdGVhbVwiLCB7XHJcbiAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgICAgaGVhZGVyczogeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxyXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBuYW1lOiB0ZWFtTmFtZSwgaXNMb2NrZWQgfSksXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuXHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XHJcbiAgICAgICAgICBTd2FsLmZpcmUoXCLQo9GB0L/QtdGI0L3QviFcIiwgXCLQntGC0LHQvtGA0YrRgiDQtSDRgdGK0LfQtNCw0LTQtdC9IVwiLCBcInN1Y2Nlc3NcIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIFN3YWwuZmlyZShcclxuICAgICAgICAgICAgXCLQk9GA0LXRiNC60LBcIixcclxuICAgICAgICAgICAgcmVzdWx0LmVycm9yIHx8IFwi0J3QtdGD0YHQv9C10YjQvdC+INGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC+0YLQsdC+0YDQsC5cIixcclxuICAgICAgICAgICAgXCJlcnJvclwiXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBTd2FsLmZpcmUoXCLQk9GA0LXRiNC60LBcIiwgXCLQktGK0LfQvdC40LrQvdCwINC/0YDQvtCx0LvQtdC8INGBINCy0YDRitC30LrQsNGC0LAuXCIsIFwiZXJyb3JcIik7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyogY3JlYXRlVGVhbSgpIHtcclxuICAgICAgaWYgKCF0aGlzLnRlYW1OYW1lLnRyaW0oKSkge1xyXG4gICAgICAgIGFsZXJ0KFwi0JzQvtC70Y8sINCy0YrQstC10LTQtdGC0LUg0LjQvNC1INC90LAg0L7RgtCx0L7RgNCwIVwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgLy8g8J+boCDQmNC30L/RgNCw0YnQsNC80LUg0LfQsNGP0LLQutCwINC30LAg0YHRitC30LTQsNCy0LDQvdC1INC90LAg0L7RgtCx0L7RgFxyXG4gICAgICBmZXRjaChcIi9jcmVhdGUtdGVhbVwiLCB7XHJcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXHJcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBuYW1lOiB0aGlzLnRlYW1OYW1lLCBpc0xvY2tlZDogdGhpcy5pc0xvY2tlZCB9KSxcclxuICAgICAgfSlcclxuICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmpzb24oKSlcclxuICAgICAgICAudGhlbigoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGRhdGEuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICBhbGVydChcItCe0YLQsdC+0YDRitGCINC1INGB0YrQt9C00LDQtNC10L0g0YPRgdC/0LXRiNC90L4hXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlTW9kYWwoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGFsZXJ0KFwi0JPRgNC10YjQutCwOiBcIiArIGRhdGEubWVzc2FnZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiBjb25zb2xlLmVycm9yKFwi0JPRgNC10YjQutCwINC/0YDQuCDRgdGK0LfQtNCw0LLQsNC90LU6XCIsIGVycm9yKSk7XHJcbiAgICB9LCovXHJcbiAgICBzZWxlY3RUZWFtKCkge1xyXG4gICAgICAvL3RoaXMuaXNDcmVhdGluZ1RlYW0gPSBmYWxzZTsgLy8g0JjQt9C60LvRjtGH0LLQsNC80LUg0YDQtdC20LjQvNCwINC30LAg0YHRitC30LTQsNCy0LDQvdC1INC90LAg0L7RgtCx0L7RgFxyXG4gICAgICB0aGlzLmlzU2VsZWN0aW5nVGVhbSA9IHRydWU7IC8vINCS0LrQu9GO0YfQstCw0LzQtSDRgNC10LbQuNC80LAg0LfQsCDQuNC30LHQvtGAINC90LAg0L7RgtCx0L7RgFxyXG4gICAgICB0aGlzLmZldGNoT3BlblRlYW1zKCk7IC8vINCX0LDRgNC10LbQtNCw0LzQtSDRgdC/0LjRgdGK0LrQsCDRgSDQvtGC0LHQvtGA0LhcclxuICAgIH0sXHJcbiAgICBhc3luYyBqb2luVGVhbSh0ZWFtSWQpIHtcclxuICAgICAgY29uc29sZS5sb2coXCLQmNCz0YDQsNGH0YrRgiDQuNGB0LrQsCDQtNCwINCy0LvQtdC30LUg0LIg0L7RgtCx0L7RgCDRgSBJRDpcIiwgdGVhbUlkKTtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAvdGVhbS9qb2luYCwge1xyXG4gICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICB0ZWFtSWQ6IHRlYW1JZCxcclxuICAgICAgICAgICAgLy91c2VySWQ6IHRoaXMudXNlcklkLCAvLyDQmNC30L/RgNCw0YnQsNC80LUgdXNlcklkXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuXHJcbiAgICAgICAgaWYgKGRhdGEuc3VjY2Vzcykge1xyXG4gICAgICAgICAgYWxlcnQoXCLQo9GB0L/QtdGI0L3QviDRgdC1INC/0YDQuNGB0YrQtdC00LjQvdC40YXRgtC1INC60YrQvCDQvtGC0LHQvtGA0LAhXCIpO1xyXG4gICAgICAgICAgdGhpcy5pc1NlbGVjdGluZ1RlYW0gPSBmYWxzZTsgLy8g0JfQsNGC0LLQsNGA0Y/QvNC1INC80L7QtNCw0LvQsFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhbGVydChcItCT0YDQtdGI0LrQsDogXCIgKyBkYXRhLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwi0JPRgNC10YjQutCwINC/0YDQuCDQstC70LjQt9Cw0L3QtSDQsiDQvtGC0LHQvtGA0LA6XCIsIGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGZldGNoT3BlblRlYW1zKCkge1xyXG4gICAgICBmZXRjaChcIi90ZWFtcy9vcGVuXCIpXHJcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5qc29uKCkpXHJcbiAgICAgICAgLnRoZW4oKGRhdGEpID0+IHtcclxuICAgICAgICAgIHRoaXMudGVhbXMgPSBkYXRhO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT5cclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCLQk9GA0LXRiNC60LAg0L/RgNC4INC30LDRgNC10LbQtNCw0L3QtSDQvdCwINC+0YLQsdC+0YDQuNGC0LU6XCIsIGVycm9yKVxyXG4gICAgICAgICk7XHJcbiAgICB9LFxyXG5cclxuICAgIGF1dG9Bc3NpZ24oKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwi0KHQu9GD0LbQtdCx0L3QviDRgNCw0LfQv9GA0LXQtNC10LvQtdC90LjQtS4uLlwiKTtcclxuICAgIH0sXHJcbiAgfSxcclxufTtcclxuPC9zY3JpcHQ+XHJcbjxzdHlsZSBzY29wZWQ+XHJcbi5vcHRpb24tYnRuIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgZ2FwOiAxMHB4O1xyXG4gIHBhZGRpbmc6IDE1cHg7XHJcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xyXG4gIGZvbnQtc2l6ZTogMTZweDtcclxuICBmb250LXdlaWdodDogYm9sZDtcclxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZSwgYmFja2dyb3VuZC1jb2xvciAwLjJzIGVhc2U7XHJcbn1cclxuXHJcbi5vcHRpb24tYnRuOmhvdmVyIHtcclxuICB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpO1xyXG59XHJcblxyXG4uaWNvbiB7XHJcbiAgZm9udC1zaXplOiAyMHB4O1xyXG59XHJcbi5idG4ge1xyXG4gIHBhZGRpbmc6IDEwcHggMTVweDtcclxuICBib3JkZXItcmFkaXVzOiA4cHg7XHJcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIGNvbG9yOiB3aGl0ZTtcclxufVxyXG4vKtGB0LrRgNC+0Lsg0Lgg0L7Qs9GA0LDQvdC40YfQtdC90LjQtSDQt9CwINC80L7QtNCw0LvQsCDQutC+0LPQsCDQtNCwINGB0LUg0L/QvtGP0LLRj9Cy0LAg0YHQutGA0L7Qu9CwKi9cclxuLm1vZGFsLWNvbnRlbnQge1xyXG4gIG1heC1oZWlnaHQ6IDUwMHB4OyAvKiDQn9GA0LjQvNC10YDQvdC+INC+0LPRgNCw0L3QuNGH0LXQvdC40LUgKi9cclxuICBvdmVyZmxvdy15OiBhdXRvO1xyXG59XHJcbjwvc3R5bGU+XHJcbiIsIkB0YWlsd2luZCBiYXNlO1xuQHRhaWx3aW5kIGNvbXBvbmVudHM7XG5AdGFpbHdpbmQgdXRpbGl0aWVzO1xuXG4vKiAgZml4INC90LAg0L7RgdC90L7QstC90LjRgtC1INC90LXRgdGK0L7RgtCy0LXRgtGB0YLQstC40Y8gXG5odG1sIHtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBsaW5lLWhlaWdodDogMS41O1xufVxuXG4qLFxuKjo6YmVmb3JlLFxuKjo6YWZ0ZXIge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG5ib2R5IHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBmb250LWZhbWlseTogdGhlbWUoXCJmb250RmFtaWx5LnNhbnNcIik7IC8qINCi0LDQutCwINC/0L7Qu9C30LLQsNGIIFRhaWx3aW5kINGI0YDQuNGE0YLQsCBcbn0qL1xuXG4vKiBEZWZhdWx0OiBtb2JpbGUgbGF5b3V0IHZpc2libGUsIGRlc2t0b3AgaGlkZGVuICovXG4ubmF2LWRlc2t0b3Age1xuICBkaXNwbGF5OiBub25lO1xufVxuLm5hdi1tb2JpbGUge1xuICBkaXNwbGF5OiBncmlkO1xufVxuXG4vKiBEZXNrdG9wOiBzaG93IGRlc2t0b3AgbGF5b3V0LCBoaWRlIG1vYmlsZSBsYXlvdXQgKi9cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAubmF2LWRlc2t0b3Age1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgfVxuICAubmF2LW1vYmlsZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuLmRlZmF1bHQtYXZhdGFyIHtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2NjO1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBjb2xvcjogI2ZmZjtcbn1cbi5sb2dvLWRlc2t0b3Age1xuICBkaXNwbGF5OiBub25lO1xufSAvKiDQv9C+INC/0L7QtNGA0LDQt9Cx0LjRgNCw0L3QtSDRgdC60YDQuNGC0L4gKi9cbi5sb2dvIHtcbiAgd2lkdGg6IDI1MHB4OyAvKiDQntC/0YDQtdC00LXQu9C4INGI0LjRgNC40L3QsNGC0LAgKi9cbiAgaGVpZ2h0OiAxNDBweDsgLyog0JDQstGC0L7QvNCw0YLQuNGH0L3QviDQuNC30YfQuNGB0LvRj9Cy0LAg0LLQuNGB0L7Rh9C40L3QsNGC0LAg0YHQv9C+0YDQtdC0INC/0YDQvtC/0L7RgNGG0LjQuNGC0LUgKi9cbn1cblxuLmxvZ28tc3ltYm9sIHtcbiAgd2lkdGg6IDgwcHg7IC8qINCc0L7QttC10Ygg0LTQsCDRg9Cy0LXQu9C40YfQuNGIINC40LvQuCDQvdCw0LzQsNC70LjRiCAqL1xuICBoZWlnaHQ6IDYwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTsgLyog0KLQvtCy0LAg0LPQviDQv9GA0LDQstC4INC60YDRitCz0LvQviAqL1xuICBvYmplY3QtZml0OiBjb3ZlcjsgLyog0JfQsNC/0LDQt9Cy0LAg0L/RgNC+0L/QvtGA0YbQuNC40YLQtSDQsdC10Lcg0YDQsNC30YLRj9Cz0LDQvdC1ICovXG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW46IGF1dG87XG4gIG1hcmdpbi10b3A6IDMwcHg7XG4gIG1hcmdpbi1ib3R0b206IDMwcHg7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiAxMTAwcHgpIHtcbiAgLmJvb2stdGV4dCB7XG4gICAgZm9udC1zaXplOiBjbGFtcChcbiAgICAgIDEzcHgsXG4gICAgICAydncsXG4gICAgICAwLjVweFxuICAgICk7IC8qINCU0LjQvdCw0LzQuNGH0L3QviDQvdCw0LzQsNC70Y/QstCwINC90LAg0LzQvdC+0LPQviDQvNCw0LvQutC4INC10LrRgNCw0L3QuCAqL1xuICAgIHBhZGRpbmctdG9wOiA1cHg7XG4gIH1cbiAgLmJvb2stdGV4dC1vd2wtaW50cm8ge1xuICAgIGZvbnQtc2l6ZTogMTZweCAhaW1wb3J0YW50O1xuICB9XG59XG5AbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHtcbiAgLmJvb2stdGV4dCB7XG4gICAgZm9udC1zaXplOiBjbGFtcChcbiAgICAgIDExcHgsXG4gICAgICAydncsXG4gICAgICAwLjVweFxuICAgICk7IC8qINCU0LjQvdCw0LzQuNGH0L3QviDQvdCw0LzQsNC70Y/QstCwINC90LAg0LzQvdC+0LPQviDQvNCw0LvQutC4INC10LrRgNCw0L3QuCAqL1xuICAgIHBhZGRpbmctdG9wOiA1cHg7XG4gIH1cbiAgLmJvb2stdGV4dC1vd2wtaW50cm8ge1xuICAgIGZvbnQtc2l6ZTogMTJweCAhaW1wb3J0YW50O1xuICB9XG4gIC5vd2wtaW50cm8tYm50LWdydXAge1xuICAgIC8vZGlzcGxheTogZmxleDtcbiAgICBjb2x1bW4tZ2FwOiAzcHg7XG4gICAgbWFyZ2luLWxlZnQ6IDM1cHggIWltcG9ydGFudDsgLyog0LvQtdC60L4g0LjQt9C80LXRgdGC0LLQsNC90LUsINC00LAg0YHQu9C10LTQstCwINGC0LXQutGB0YLQsCAqL1xuICB9XG4gIC5vd2wtaW50cm8tY2hlY2tib3gge1xuICAgIGZvbnQtc2l6ZTogMC42cmVtICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luLWxlZnQ6IDQwcHggIWltcG9ydGFudDtcbiAgfVxufVxuQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gIC5sb2dvLXN5bWJvbCB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG4gIC5ib29rLWNvbnRhaW5lciB7XG4gICAgd2lkdGg6IDkwdncgIWltcG9ydGFudDsgLyog0KPQstC10LvQuNGH0LDQstCw0LzQtSDRiNC40YDQuNC90LDRgtCwINC90LAg0LrQvdC40LPQsNGC0LAgKi9cbiAgICBtYXgtd2lkdGg6IG5vbmUgIWltcG9ydGFudDsgLyog0J/RgNC10LzQsNGF0LLQsNC80LUg0L7Qs9GA0LDQvdC40YfQtdC90LjRj9GC0LAgKi9cbiAgICAvL21hcmdpbi1sZWZ0OiA1JSAhaW1wb3J0YW50OyAvKiDQptC10L3RgtGA0LjRgNCw0LzQtSAqL1xuICAgIC8vcGFkZGluZy10b3A6IDIwcHggIWltcG9ydGFudDsgLyog0J3QsNC80LDQu9GP0LLQsNC80LUg0L7RgtGB0YLQvtGP0L3QuNC10YLQviDQvtGC0LPQvtGA0LUgKi9cbiAgfVxuXG4gIC5ib29rLWltYWdlIHtcbiAgICB3aWR0aDogMTAwJTsgLyog0J7RgdGC0LDQstGP0LzQtSDQuNC30L7QsdGA0LDQttC10L3QuNC10YLQviDQtNCwINC30LDQv9GK0LvQstCwINC60L7QvdGC0LXQudC90LXRgNCwICovXG4gICAgaGVpZ2h0OiBhdXRvO1xuICB9XG5cbiAgLmJvb2stdGV4dC1jb250YWluZXIge1xuICAgIHRvcDogMjAlOyAvKiDQn9C+0LfQuNGG0LjQvtC90LjRgNCw0LzQtSDRgtC10LrRgdGC0LAg0L/Qvi3QtNC+0LHRgNC1ICovXG4gICAgcmlnaHQ6IDUlO1xuICAgIHdpZHRoOiA1MCU7IC8qINCj0LLQtdC70LjRh9Cw0LLQsNC80LUg0LzQsNC70LrQviDQt9C+0L3QsNGC0LAg0LfQsCDRgtC10LrRgdGC0LAgKi9cbiAgICBmb250LXNpemU6IDEuMnJlbTsgLyog0JzQsNC70LrQviDQv9C+LdCz0L7Qu9GP0Lwg0YLQtdC60YHRgiDQt9CwINC80L7QsdC40LvQvdC4ICovXG4gIH1cbiAgLmJvb2stdGV4dC1vd2wtaW50cm8ge1xuICAgIGZvbnQtc2l6ZTogY2xhbXAoXG4gICAgICA3cHgsXG4gICAgICAydncsXG4gICAgICAxOHB4XG4gICAgKSAhaW1wb3J0YW50OyAvKtCU0LjQvdCw0LzQuNGH0L3QviDQvdCw0LzQsNC70Y/QstCwINC90LAg0LzQvdC+0LPQviDQvNCw0LvQutC4INC10LrRgNCw0L3QuCAqL1xuICAgIHBhZGRpbmctdG9wOiA1cHggIWltcG9ydGFudDtcbiAgICBsaW5lLWhlaWdodDogMS4xNSAhaW1wb3J0YW50O1xuICB9XG4gIC5ib29rLXRleHQge1xuICAgIC8qIGZvbnQtc2l6ZTogY2xhbXAoXG4gICAgICA3cHgsXG4gICAgICAydncsXG4gICAgICAxOHB4XG4gICAgKSAhaW1wb3J0YW50OyAg0JTQuNC90LDQvNC40YfQvdC+INC90LDQvNCw0LvRj9Cy0LAg0L3QsCDQvNC90L7Qs9C+INC80LDQu9C60Lgg0LXQutGA0LDQvdC4ICovXG4gICAgcGFkZGluZy10b3A6IDVweCAhaW1wb3J0YW50O1xuICAgIGxpbmUtaGVpZ2h0OiAxLjE1ICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luOiAwIDAgNHB4IDE1JSAhaW1wb3J0YW50OyAvKiDQvNCw0YXQsNC80LUgdG9wL2JvdHRvbSBtYXJnaW4sINC+0YHRgtCw0LLRj9C80LUg0YHQsNC80L4g0LzQsNC70LrQviDQvtGC0LTQvtC70YMgKi9cbiAgfVxuICAub3dsLWludHJvLWJudC1ncnVwIHtcbiAgICAvL2Rpc3BsYXk6IGZsZXg7XG4gICAgY29sdW1uLWdhcDogM3B4O1xuICAgIG1hcmdpbi10b3A6IDVweCAhaW1wb3J0YW50O1xuICAgIG1hcmdpbi1sZWZ0OiA0MHB4ICFpbXBvcnRhbnQ7IC8qINC70LXQutC+INC40LfQvNC10YHRgtCy0LDQvdC1LCDQtNCwINGB0LvQtdC00LLQsCDRgtC10LrRgdGC0LAgKi9cbiAgfVxuICAub3dsLWludHJvLWJ0biB7XG4gICAgLy9wYWRkaW5nOiAwIDRweCAhaW1wb3J0YW50OyAvKiDQv9C+0YfRgtC4INC90Y/QvNCwINCy0LXRgNGC0LjQutCw0LvQtdC9IHBhZGRpbmcgKi9cbiAgICBmb250LXNpemU6IDAuNTVyZW07IC8qINC+0YnQtSDQv9C+LdC00YDQtdCx0LXQvSDRiNGA0LjRhNGCICovXG4gICAgbGluZS1oZWlnaHQ6IDE7IC8qINCx0LXQtyDQtNC+0L/RitC70L3QuNGC0LXQu9C90LAg0LLQuNGB0L7Rh9C40L3QsCAqL1xuICAgIGJvcmRlci1yYWRpdXM6IDk5OTlweDtcbiAgfVxuICAub3dsLWludHJvLWJ0bi1sYWJlbCB7XG4gICAgZm9udC1zaXplOiBjbGFtcCgxMnB4LCAydncsIDAuNXB4KTtcbiAgfVxuICAub3dsLWludHJvLWNoZWNrYm94IHtcbiAgICBtYXJnaW4tbGVmdDogNDBweCAhaW1wb3J0YW50O1xuICAgIG1hcmdpbi10b3A6IDEwcHggIWltcG9ydGFudDtcbiAgfVxuICAub3dsLWludHJvLWNoZWNrYm94IGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjcpOyAvKiDRgdC80LDQu9GP0LLQsNC80LUg0LrQstCw0LTRgNCw0YLRh9C10YLQviAqL1xuICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjsgLyog0LTQsCDRgdC1IOKAntGB0LLQuNCy0LDigJwg0LrRitC8INGB0YDQtdC00LDRgtCwICovXG4gICAgbWFyZ2luLXJpZ2h0OiAwcHg7IC8qINC80LDQu9C60L4g0LzRj9GB0YLQviDQtNC+INGC0LXQutGB0YLQsCAqL1xuICB9XG59XG5AbWVkaWEgKG1heC13aWR0aDogNDUwcHgpIHtcbiAgLmJvb2stdGV4dCB7XG4gICAgZm9udC1zaXplOiBjbGFtcChcbiAgICAgIDEwcHgsXG4gICAgICAydncsXG4gICAgICAxMnB4XG4gICAgKSAhaW1wb3J0YW50OyAvKiDQlNC40L3QsNC80LjRh9C90L4g0L3QsNC80LDQu9GP0LLQsCDQvdCwINC80L3QvtCz0L4g0LzQsNC70LrQuCDQtdC60YDQsNC90LggKi9cbiAgICBmb250LXdlaWdodDogMzAwICFpbXBvcnRhbnQ7XG4gICAgcGFkZGluZy10b3A6IDVweCAhaW1wb3J0YW50O1xuICAgIGxpbmUtaGVpZ2h0OiAxICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luOiAwIDAgNHB4IDE1JSAhaW1wb3J0YW50OyAvKiDQvNCw0YXQsNC80LUgdG9wL2JvdHRvbSBtYXJnaW4sINC+0YHRgtCw0LLRj9C80LUg0YHQsNC80L4g0LzQsNC70LrQviDQvtGC0LTQvtC70YMgKi9cbiAgfVxuICAub3dsLWludHJvLWJudC1ncnVwIHtcbiAgICAvL2Rpc3BsYXk6IGZsZXg7XG4gICAgY29sdW1uLWdhcDogM3B4O1xuICAgIG1hcmdpbi1sZWZ0OiAyNXB4ICFpbXBvcnRhbnQ7IC8qINC70LXQutC+INC40LfQvNC10YHRgtCy0LDQvdC1LCDQtNCwINGB0LvQtdC00LLQsCDRgtC10LrRgdGC0LAgKi9cbiAgfVxuICAub3dsLWludHJvLWJ0biB7XG4gICAgLy9wYWRkaW5nOiAwIDRweCAhaW1wb3J0YW50OyAvKiDQv9C+0YfRgtC4INC90Y/QvNCwINCy0LXRgNGC0LjQutCw0LvQtdC9IHBhZGRpbmcgKi9cbiAgICBmb250LXNpemU6IDAuNTVyZW07IC8qINC+0YnQtSDQv9C+LdC00YDQtdCx0LXQvSDRiNGA0LjRhNGCICovXG4gICAgbGluZS1oZWlnaHQ6IDE7IC8qINCx0LXQtyDQtNC+0L/RitC70L3QuNGC0LXQu9C90LAg0LLQuNGB0L7Rh9C40L3QsCAqL1xuICAgIGJvcmRlci1yYWRpdXM6IDk5OTlweDtcbiAgfVxuICAub3dsLWludHJvLWJ0bi1sYWJlbCB7XG4gICAgZm9udC1zaXplOiBjbGFtcCg3cHgsIDJ2dywgMC41cHgpICFpbXBvcnRhbnQ7XG4gIH1cbiAgLm93bC1pbnRyby1jaGVja2JveCB7XG4gICAgZm9udC1zaXplOiAwLjNyZW0gIWltcG9ydGFudDtcbiAgICBtYXJnaW4tbGVmdDogMzBweCAhaW1wb3J0YW50O1xuICAgIG1hcmdpbi10b3A6IDVweCAhaW1wb3J0YW50O1xuICB9XG59XG4vKiDQntGB0L3QvtCy0L3QuCDRgdGC0LjQu9C+0LLQtSDQt9CwIGJvZHkgKi9cbmJvZHkge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBtaW4taGVpZ2h0OiAxMDB2aDtcbiAgZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmO1xufVxuXG4uYm9vay1jb250YWluZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgLy9wb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiA3MHZ3O1xuICBtYXgtd2lkdGg6IDgwMHB4O1xufVxuXG4uYm9vay1pbWFnZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTsgLyog0JLQsNC20L3QviEg0KLQvtCy0LAg0L/QvtC30LLQvtC70Y/QstCwINCy0YrRgtGA0LXRiNC90L4gYWJzb2x1dGUg0L/QvtC30LjRhtC40L7QvdC40YDQsNC90LUgKi9cbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogYXV0bztcbiAgZGlzcGxheTogYmxvY2s7XG59XG4uYm9vay1pbWFnZS0taW50cm86OmFmdGVyIHtcbiAgY29udGVudDogXCJcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBpbnNldDogMDsgLyog0L/QvtC60YDQuNCy0LAg0YbQtdC70LjRjyDQstC40LTQtdC+LdC60L7QvdGC0LXQudC90LXRgCAqL1xuICBwb2ludGVyLWV2ZW50czogbm9uZTsgLyog0LTQsCDQvdC1INC/0YDQtdGH0Lgg0L3QsCDQutC70LjQutC+0LLQtSAqL1xuXG4gIC8qINCS0LjQvdC10YLQutCwOiDQv9GA0L7Qt9GA0LDRh9C90L4g0LIg0YbQtdC90YLRitGA0LAsINGC0YrQvNC90L4g0L/QviDQutGA0LDQuNGJ0LDRgtCwICovXG4gIGJhY2tncm91bmQ6IHJhZGlhbC1ncmFkaWVudChcbiAgICBjaXJjbGUgYXQgY2VudGVyLFxuICAgIHJnYmEoMTUsIDIzLCA0MiwgMCkgNTUlLFxuICAgIC8qINC/0YDQvtC30YDQsNGH0L3QviDQsiDRgdGA0LXQtNCw0YLQsCAqLyByZ2JhKDE1LCAyMywgNDIsIDAuODUpIDEwMCVcbiAgICAgIC8qINGC0YrQvNC90L4g0L/QviDQv9C10YDQuNGE0LXRgNC40Y/RgtCwICovXG4gICk7XG59XG5cbi8qINCe0JHQqdCeIOKAkyDQuCDQt9CwINC90LDRh9Cw0LvQvdCw0YLQsCwg0Lgg0LfQsCDQstC40LTQtdC+0YLQviDRgSDQsdGD0YXQsNC70LAgKi9cbi5ib29rLXRleHQtY29udGFpbmVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDE1JTsgLyog0KDQtdCz0YPQu9C40YDQsNC5INGC0L7QstCwINC30LAg0LTQsCDQv9Cw0YHQvdC1INC90LAg0YHRgtGA0LDQvdC40YbQsNGC0LAgKi9cbiAgcmlnaHQ6IDclOyAvKiDQn9C+0LfQuNGG0LjRjyDQvtGCINC00Y/RgdC90LDRgtCwINGB0YLRgNCw0L3QsCDQvdCwINC60L3QuNCz0LDRgtCwICovXG4gIHdpZHRoOiA0MCU7IC8qINCi0LXQutGB0YLRitGCINC30LDQtdC80LAgNDAlINC+0YIg0YjQuNGA0LjQvdCw0YLQsCDQvdCwINC60L3QuNCz0LDRgtCwICovXG4gIGhlaWdodDogNjAlOyAvKiDQotC10LrRgdGC0YrRgiDQt9Cw0LXQvNCwIDYwJSDQvtGCINCy0LjRgdC+0YfQuNC90LDRgtCwINC90LAg0LrQvdC40LPQsNGC0LAgKi9cbiAgZGlzcGxheTogZmxleDtcbiAgLy9qdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4vKiDQodCQ0JzQniDQt9CwINC10LrRgNCw0L3QsCDRgSDQstC40LTQtdC+0YLQviDRgSDQsdGD0YXQsNC70LAgKi9cbi5ib29rLXRleHQtY29udGFpbmVyLS1pbnRybyB7XG4gIG9wYWNpdHk6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg0cHgpO1xuICBmaWx0ZXI6IGJsdXIoNnB4KTtcbiAgdHJhbnNpdGlvbjpcbiAgICBvcGFjaXR5IDIuOXMgZWFzZS1vdXQsXG4gICAgZmlsdGVyIDIuOXMgZWFzZS1vdXQsXG4gICAgdHJhbnNmb3JtIDIuOXMgZWFzZS1vdXQ7XG59XG5cbi8qINCy0LjQtNC40LzQviDRgdGK0YHRgtC+0Y/QvdC40LUg4oCTINC/0LDQuiDRgdCw0LzQviDQt9CwINC40L3RgtGA0L7RgtC+ICovXG4uYm9vay10ZXh0LWNvbnRhaW5lci0taW50cm8uYm9vay10ZXh0LWNvbnRhaW5lci0tdmlzaWJsZSB7XG4gIG9wYWNpdHk6IDE7XG4gIGZpbHRlcjogYmx1cigwKTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xufVxuLyog0YLQtdC60YEg0LfQsCDQutC90LjQs9Cw0YLQsCDRgSDQsdGD0YXQsNC70LAg0YHQu9C10LQg0LvQvtCz0LjQvSovXG4uYm9vay10ZXh0LW93bC1pbnRybyB7XG4gIGZvbnQtc3R5bGU6IEl0YWxpYztcbiAgZm9udC1zaXplOiBjbGFtcCgxNHB4LCAydncsIDE4cHgpOyAvKiDQlNC40L3QsNC80LjRh9C10L0g0YjRgNC40YTRgiAqL1xuICAvL2xpbmUtaGVpZ2h0OiAxLjY7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogIzNiMjcxNjtcbiAgbWFyZ2luLWxlZnQ6IDE1JTtcbiAgbGluZS1oZWlnaHQ6IDEuMjtcbn1cbi5ib29rLXRleHQge1xuICBmb250LXN0eWxlOiBJdGFsaWM7XG4gIGZvbnQtc2l6ZTogY2xhbXAoMTRweCwgMnZ3LCAyMnB4KTsgLyog0JTQuNC90LDQvNC40YfQtdC9INGI0YDQuNGE0YIgKi9cbiAgLy9saW5lLWhlaWdodDogMS42O1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgY29sb3I6ICMzYjI3MTY7XG4gIG1hcmdpbi1sZWZ0OiAxNSU7XG4gIGxpbmUtaGVpZ2h0OiAxLjI7XG4gIC8qYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTAsIDIzNSwgMjE1LCAwLjcpOyovXG4gIC8qcGFkZGluZzogMTVweDsqL1xuICAvKmJvcmRlci1yYWRpdXM6IDVweDsqL1xuICAvKndvcmQtd3JhcDogYnJlYWstd29yZDsgLyog0J/RgNC40L3Rg9C00LjRgtC10LvQvdC+INC/0YDQtdC90LDRgdGP0L3QtSDQvdCwINC00YrQu9Cz0Lgg0LTRg9C80LggKi9cbiAgLyptYXgtd2lkdGg6IDEwMCU7IC8qINCT0LDRgNCw0L3RgtC40YDQsCwg0YfQtSDRgtC10LrRgdGC0YrRgiDQvtGB0YLQsNCy0LAg0LIg0LrQvtC90YLQtdC50L3QtdGA0LAgKi9cbiAgLyp0ZXh0LWFsaWduOiBjZW50ZXI7Ki9cbn1cbi5ib29rLWltYWdlIHZpZGVvIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4vKiDQv9GK0YDQstC+0YLQviDQsdCw0LvQvtC90YfQtSDQtNC+INCx0YPRhdCw0LvQsCAqL1xuLm93bC1zcGVlY2gtYnViYmxlLWZpcnN0IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICAvKiDRgtC10LfQuCDQv9GA0L7RhtC10L3RgtC4INC80L7QttC1INC00LAg0LPQuCDQtNC+0L3QsNCz0LvQsNGB0LjQvCDQtNCwINGB0L7Rh9Cw0YIg0YLQvtGH0L3QviDQutGK0Lwg0YfQvtCy0LrQsNGC0LAgOikgKi9cbiAgbGVmdDogMzclO1xuICB0b3A6IDEwJTtcbiAgbWF4LXdpZHRoOiAyNjBweDtcblxuICBiYWNrZ3JvdW5kOiAjZjNmM2ViZmY7XG4gIGNvbG9yOiAjMTExODI3O1xuICBwYWRkaW5nOiAwLjQ1cmVtIDAuNzVyZW07XG4gIGJvcmRlci1yYWRpdXM6IDk5OTlweDtcbiAgYm94LXNoYWRvdzogMCAxMHB4IDI1cHggcmdiYSgwLCAwLCAwLCAwLjQ1KTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBmb250LXdlaWdodDogNjAwO1xuICBvcGFjaXR5OiAwO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTBweCk7XG4gIHRyYW5zaXRpb246XG4gICAgb3BhY2l0eSAwLjRzIGVhc2UsXG4gICAgdHJhbnNmb3JtIDAuNHMgZWFzZTtcbn1cblxuLyog0L7Qv9Cw0YjQutCw0YLQsCDQvdCwINC/0YrRgNCy0LjRjyDQsdCw0LvQvtC9ICovXG4ub3dsLXNwZWVjaC1idWJibGUtZmlyc3Q6OmFmdGVyIHtcbiAgLy9iYWNrZ3JvdW5kOiAjZDhkOGQ2ZmY7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogOCU7IC8qINC/0L7RgdC+0LrQsCDQutGK0Lwg0YPRgdGC0LDRgtCwICovXG4gIGJvdHRvbTogLTEwcHg7XG4gIGJvcmRlci13aWR0aDogMTBweCAxMHB4IDAgMTBweDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKDExLCAxMSwgMTEsIDEpIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O1xufVxuXG4vKiDQutC+0LPQsNGC0L4g0LUg0LLQuNC00LjQvCAqL1xuLm93bC1zcGVlY2gtYnViYmxlLWZpcnN0LS12aXNpYmxlIHtcbiAgb3BhY2l0eTogMTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xufVxuLyog0LHQsNC70L7QvdGH0LXRgtC+INC00L4g0LHRg9GF0LDQu9CwICovXG4ub3dsLXNwZWVjaC1idWJibGUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIC8qINGC0LXQt9C4INC/0YDQvtGG0LXQvdGC0Lgg0LzQvtC20LUg0LTQsCDQs9C4INC00L7QvdCw0LPQu9Cw0YHQuNC8INC00LAg0YHQvtGH0LDRgiDRgtC+0YfQvdC+INC60YrQvCDRh9C+0LLQutCw0YLQsCA6KSAqL1xuICBsZWZ0OiA2NyU7XG4gIHRvcDogMTAlO1xuICBtYXgtd2lkdGg6IDI2MHB4O1xuXG4gIGJhY2tncm91bmQ6ICNkYWRhZDZmZjtcbiAgY29sb3I6ICMxMTE4Mjc7XG4gIHBhZGRpbmc6IDAuNDVyZW0gMC43NXJlbTtcbiAgYm9yZGVyLXJhZGl1czogOTk5OXB4O1xuICBib3gtc2hhZG93OiAwIDEwcHggMjVweCByZ2JhKDAsIDAsIDAsIDAuNDUpO1xuICBmb250LXNpemU6IDFyZW07XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG5cbiAgb3BhY2l0eTogMDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwcHgpO1xuICB0cmFuc2l0aW9uOlxuICAgIG9wYWNpdHkgMC40cyBlYXNlLFxuICAgIHRyYW5zZm9ybSAwLjRzIGVhc2U7XG59XG5cbi8qINC+0L/QsNGI0LrQsNGC0LAg0L3QsCDQsdCw0LvQvtC90LAgKi9cbi5vd2wtc3BlZWNoLWJ1YmJsZTo6YWZ0ZXIge1xuICAvL2JhY2tncm91bmQ6ICNlZGVkMTNmZjtcbiAgY29udGVudDogXCJcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiA4JTsgLyog0L/QvtGB0L7QutCwINC60YrQvCDRg9GB0YLQsNGC0LAgKi9cbiAgYm90dG9tOiAtMTBweDtcbiAgYm9yZGVyLXdpZHRoOiAxMHB4IDEwcHggMCAxMHB4O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItY29sb3I6IHJnYmEoMTEsIDExLCAxMSwgMSkgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQ7XG59XG5cbi8qINC60L7Qs9Cw0YLQviDQtSDQstC40LTQuNC8ICovXG4ub3dsLXNwZWVjaC1idWJibGUtLXZpc2libGUge1xuICBvcGFjaXR5OiAxO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG59XG5cbi8qINGE0L7RgNC80LDRgtCwINCy0LzQtdGB0YLQviDQv9GA0L7RgdGCINGC0LXQutGB0YIgKi9cbi5vd2wtaW50cm8tZm9ybSB7XG4gIGZvbnQtZmFtaWx5OiBcIkdhcmFtb25kXCIsIHNlcmlmO1xuICBjb2xvcjogIzNiMmExMjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAvKiDQsdC10Lcg0L/Qu9GK0YLQtdC9INCx0Y/QuyDRhNC+0L0sINC30LAg0LTQsCDQuNC30LPQu9C10LbQtNCwINC60LDRgtC+INCy0YrRgNGF0YMg0YHRgtGA0LDQvdC40YbQsNGC0LAgKi9cbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG59XG4ub3dsLWludHJvLWJudC1ncnVwIHtcbiAgbWFyZ2luLXRvcDogMC40NXJlbTtcbiAgbWFyZ2luLWJvdHRvbTogMC4zNXJlbTtcbiAgbWFyZ2luLWxlZnQ6IDRweDtcbn1cblxuLyog0LHRg9GC0L7QvdC40YLQtSDigJMg0LTQsCDQuNC30LPQu9C10LbQtNCw0YIg0LrQsNGC0L4g4oCe0L/QtdGH0LDRgtCw0L3QuOKAnCDQstGK0YDRhdGDINGB0YLRgNCw0L3QuNGG0LDRgtCwICovXG4ub3dsLWludHJvLWJ0biB7XG4gIC8qZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW4tYm90dG9tOiAwLjZyZW07Ki9cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwYWRkaW5nOiAwLjVyZW0gMC45NXJlbTtcbiAgYm9yZGVyLXJhZGl1czogOTk5OXB4O1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDkyLCA1OCwgMTIsIDAuNDUpO1xuICBmb250LXNpemU6IDAuODVyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgI2Y4ZDQ2YSAwJSwgI2Q5OTIyMiA1MiUsICM4YTUyMTggMTAwJSk7XG4gIGNvbG9yOiAjMjQxNTA1O1xuICB0ZXh0LXNoYWRvdzogMCAxcHggMCByZ2JhKDI1NSwgMjQ2LCAyMDEsIDAuNTUpO1xuICBib3gtc2hhZG93OlxuICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQ1KSxcbiAgICAwIDVweCAxMnB4IHJnYmEoNTUsIDMyLCA2LCAwLjM0KTtcbiAgLyog0LDQvdC40LzQsNGG0LjRjyDQuCDQv9C70LDQstC90Lgg0L/RgNC10YXQvtC00LggKi9cbiAgdHJhbnNpdGlvbjpcbiAgICB0cmFuc2Zvcm0gMC4ycyBlYXNlLW91dCxcbiAgICBib3gtc2hhZG93IDAuMnMgZWFzZS1vdXQsXG4gICAgYmFja2dyb3VuZCAwLjJzIGVhc2Utb3V0O1xuICBhbmltYXRpb246IG93bC1wdWxzZSAyLjRzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xufVxuLyogaG92ZXIg0LXRhNC10LrRgiDigJMg0LvQtdC60L4g0L/QvtCy0LTQuNCz0LDQvdC1INC4INC/0L4t0Y/RgNGK0Log0YbQstGP0YIgKi9cbi5vd2wtaW50cm8tYnRuOmhvdmVyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpIHNjYWxlKDEuMDQpO1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjZmZlNThhIDAlLCAjZThhNTJmIDU1JSwgIzlhNjExZiAxMDAlKTtcbiAgYm94LXNoYWRvdzpcbiAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NSksXG4gICAgMCA4cHggMTZweCByZ2JhKDU1LCAzMiwgNiwgMC4zOCk7XG59XG5cbi5vd2wtaW50cm8tYnRuOjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgaW5zZXQ6IDJweCA4cHggYXV0byA4cHg7XG4gIGhlaWdodDogMzglO1xuICBib3JkZXItcmFkaXVzOiBpbmhlcml0O1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoXG4gICAgMTgwZGVnLFxuICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40MiksXG4gICAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwKVxuICApO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cbi8qIHB1bHNlINCw0L3QuNC80LDRhtC40Y/RgtCwIOKAkyDigJ7QtNC40YjQsNGJ4oCcINC+0YDQtdC+0Lsg0L7QutC+0LvQviDQsdGD0YLQvtC90LAgKi9cbkBrZXlmcmFtZXMgb3dsLXB1bHNlIHtcbiAgMCUsXG4gIDEwMCUge1xuICAgIGJveC1zaGFkb3c6XG4gICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40NSksXG4gICAgICAwIDVweCAxMnB4IHJnYmEoNTUsIDMyLCA2LCAwLjM0KSxcbiAgICAgIDAgMCAwIDAgcmdiYSgyMTcsIDE0NiwgMzQsIDAuNDIpO1xuICB9XG4gIDUwJSB7XG4gICAgYm94LXNoYWRvdzpcbiAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQ1KSxcbiAgICAgIDAgNXB4IDEycHggcmdiYSg1NSwgMzIsIDYsIDAuMzQpLFxuICAgICAgMCAwIDAgOHB4IHJnYmEoMjE3LCAxNDYsIDM0LCAwKTtcbiAgfVxufVxuXG4vKiDQt9CwINGF0L7RgNCwINGBINC40LfQutC70Y7Rh9C10L3QuCDQsNC90LjQvNCw0YbQuNC4IOKAkyDRgdC/0LjRgNCw0LzQtSDQv9GD0LvRgdCwICovXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuICAub3dsLWludHJvLWJ0biB7XG4gICAgYW5pbWF0aW9uOiBub25lO1xuICB9XG59XG4ub3dsLWludHJvLWJ0bi1sYWJlbCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi10b3A6IC0ycHg7XG4gIGxldHRlci1zcGFjaW5nOiAwLjAyZW07XG59XG5cbi8qINGH0LXQutCx0L7QutGB0YrRgiDQtNC+0LvRgyAqL1xuLm93bC1pbnRyby1jaGVja2JveCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHdpZHRoOiBmaXQtY29udGVudDtcbiAgZ2FwOiAwLjI4cmVtO1xuICBmb250LXNpemU6IDAuOHJlbTtcbiAgbWFyZ2luLXRvcDogMC40NXJlbTtcbiAgbWFyZ2luLWxlZnQ6IDcwcHg7XG4gIHBhZGRpbmc6IDAuMTJyZW0gMC40MnJlbTtcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSg1OSwgNDIsIDE4LCAwLjE4KTtcbiAgYm9yZGVyLXJhZGl1czogOTk5OXB4O1xuICBiYWNrZ3JvdW5kOiByZ2JhKDU5LCA0MiwgMTgsIDAuMTIpO1xuICBjb2xvcjogIzNiMjcxNjtcbn1cblxuLm93bC1pbnRyby1jaGVja2JveCBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICBhcHBlYXJhbmNlOiBub25lO1xuICBkaXNwbGF5OiBncmlkO1xuICBwbGFjZS1jb250ZW50OiBjZW50ZXI7XG4gIHdpZHRoOiAwLjgycmVtO1xuICBoZWlnaHQ6IDAuODJyZW07XG4gIG1hcmdpbjogMDtcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSg1OSwgNDIsIDE4LCAwLjQ1KTtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBiYWNrZ3JvdW5kOlxuICAgIGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHJnYmEoOTQsIDY2LCAzMSwgMC4xOCksIHJnYmEoMjQ0LCAyMjIsIDE3NywgMC4yOCkpLFxuICAgIHJnYmEoMTk2LCAxNjcsIDEwNSwgMC40Nik7XG4gIGJveC1zaGFkb3c6XG4gICAgaW5zZXQgMCAxcHggMnB4IHJnYmEoNTksIDQyLCAxOCwgMC4yNCksXG4gICAgMCAxcHggMCByZ2JhKDI1NSwgMjQ2LCAyMDEsIDAuMjgpO1xufVxuXG4ub3dsLWludHJvLWNoZWNrYm94IGlucHV0W3R5cGU9XCJjaGVja2JveFwiXTo6YmVmb3JlIHtcbiAgY29udGVudDogXCJcIjtcbiAgd2lkdGg6IDAuNDhyZW07XG4gIGhlaWdodDogMC40OHJlbTtcbiAgdHJhbnNmb3JtOiBzY2FsZSgwKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMTJzIGVhc2UtaW4tb3V0O1xuICBjbGlwLXBhdGg6IHBvbHlnb24oMTQlIDQ0JSwgMCA2MiUsIDM4JSAxMDAlLCAxMDAlIDE4JSwgODIlIDAsIDM0JSA2MiUpO1xuICBiYWNrZ3JvdW5kOiAjM2IyNzE2O1xufVxuXG4ub3dsLWludHJvLWNoZWNrYm94IGlucHV0W3R5cGU9XCJjaGVja2JveFwiXTpjaGVja2VkOjpiZWZvcmUge1xuICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xufVxuXG4uYmctaG9tZXBhZ2Uge1xuICBkaXNwbGF5OiBmbGV4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzc0MTUxO1xuICBoZWlnaHQ6IDkydmg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyOyAvKiDQptC10L3RgtGA0LjRgNCwINC/0L4g0YXQvtGA0LjQt9C+0L3RgtCw0LvQsCAqL1xuICBhbGlnbi1pdGVtczogY2VudGVyOyAvKiDQptC10L3RgtGA0LjRgNCwINC/0L4g0LLQtdGA0YLQuNC60LDQu9CwICovXG4gIC8qd2lkdGg6IDEwMCU7Ki9cbn1cbi8qINGB0LDQvNC+INC30LAg0YHRgtGA0LDQvdC40YbQuNGC0LUg0L3QsCDQu9GD0LTQsNGC0LAg0LfQsNCz0LDQtNC60LAgKi9cbi5iZy1ob21lcGFnZS5jcmF6eS1wdXp6bGUge1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbn1cbi5uby1zZWFzb24tbWVzc2FnZSB7XG4gIHBhZGRpbmc6IDFyZW07XG4gIG1heC13aWR0aDogOTAlO1xufVxuXG4vKlxuLmJvb2stdGV4dCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiA0MCU7XG4gIGxlZnQ6IDU1JTtcbiAgd2lkdGg6IDM1JTtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTAsIDIzNSwgMjE1LCAwLjcpOyAvKiDQm9C10Log0LrRgNC10LzQsNCyINGE0L7QvSDRgSDQv9GA0L7Qt9GA0LDRh9C90L7RgdGCICovXG4vKiBwYWRkaW5nOiAxNXB4O1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG4gIGZvbnQtZmFtaWx5OiBcIkdhcmFtb25kXCIsIHNlcmlmOyAvKiDQn9C+LdGB0YLQsNGA0LAg0LXQu9C10LPQsNC90YLQvdCwINCy0LjQt9C40Y8gKi9cbi8qIGZvbnQtc2l6ZTogMThweDtcbiAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgY29sb3I6cmdiKDE0LCAxMiwgMTApOyBcbn0qL1xuXG4vKiDQodGC0LjQu9C+0LLQtSDQt9CwIGZvb3RlciAqL1xuZm9vdGVyIHtcbiAgbWFyZ2luLXRvcDogYXV0bzsgLyog0J/QvtC30LjRhtC40L7QvdC40YDQsCBmb290ZXIg0L3QsCDQtNGK0L3QvtGC0L4gKi9cbiAgYmFja2dyb3VuZC1jb2xvcjogIzMzMztcbiAgY29sb3I6IHdoaXRlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDIwcHg7XG59XG5cbi5jdXJzb3Itbm90LWFsbG93ZWQge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkICFpbXBvcnRhbnQ7XG59XG5cbiNwbGF5ZXJEZXRhaWxzTW9kYWwgLnJlbGF0aXZlIHtcbiAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XG4gIHRvcDogNTAlICFpbXBvcnRhbnQ7XG4gIGxlZnQ6IDUwJSAhaW1wb3J0YW50O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSAhaW1wb3J0YW50O1xuICB3aWR0aDogYXV0bzsgLyog0LjQu9C4INC30LDQtNCw0LTQtdC9INGA0LDQt9C80LXRgCAqL1xufVxuXG4vKiDQntCx0Ykg0LrQvtC90YLQtdC50L3QtdGAINC30LAg0LHQu9C+0LrQsCDQvdCw0LQg0LrRgNGK0YHRgtC+0YHQu9C+0LLQuNGG0LDRgtCwINC/0YDQuCDRgNC10LbQuNC8IEIqL1xuLmluZm8tY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiAyMHB4O1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMjBweDtcbiAgbWluLWhlaWdodDogMTUwcHg7IC8qINCe0LPRgNCw0L3QuNGH0LDQstCw0LzQtSDQvNC40L3QuNC80LDQu9C90LDRgtCwINCy0LjRgdC+0YfQuNC90LAgKi9cbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG59XG5cbi8qINCe0LHRiSDRgdGC0LjQuyDQt9CwINCx0LvQvtC60L7QstC10YLQtSAqL1xuLnNlYXNvbi1ib3gsXG4ucm91bmQtYm94LFxuLmN1cC1ib3gge1xuICBjb2xvcjogd2hpdGU7XG4gIHBhZGRpbmc6IDE1cHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgd2lkdGg6IDkwJTtcbiAgbWF4LXdpZHRoOiA0MDBweDtcbiAgYm94LXNoYWRvdzogMHB4IDVweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4zKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZS1pbi1vdXQ7XG4gIG1pbi1oZWlnaHQ6IDE1NnB4OyAvKiDQnNC40L3QuNC80LDQu9C90LAg0LLQuNGB0L7Rh9C40L3QsCDQt9CwINC10LTQvdCw0LrQstC4INGA0LDQt9C80LXRgNC4ICovXG4gIC8qINCU0L7QsdCw0LLRj9C80LUg0YLQtdC30Lgg0L3QvtCy0LggKi9cbiAgbWluLWhlaWdodDogMTgwcHg7IC8qINCc0L7QttC1INC4IDIwMCwg0LDQutC+INC40LzQsNGIINC00YrQu9Cz0Lgg0LjQvNC10L3QsCAqL1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG59XG4uc2Vhc29uLXRpdGxlLFxuLnJvdW5kLXRpdGxlLFxuLmN1cC10aXRsZSB7XG4gIGZsZXg6IDE7XG4gIGZvbnQtZmFtaWx5OiBcIlBsYXlmYWlyIERpc3BsYXlcIiwgc2VyaWY7XG4gIGZvbnQtc2l6ZTogMjRweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGxldHRlci1zcGFjaW5nOiAycHg7XG4gIHRleHQtc2hhZG93OiAycHggMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMyk7XG59XG4uc2Vhc29uLW51bWJlcixcbi5yb3VuZC1udW1iZXIge1xuICBmbGV4OiAxO1xuICBmb250LWZhbWlseTogXCJQbGF5ZmFpciBEaXNwbGF5XCIsIHNlcmlmO1xuICBmb250LXNpemU6IDMycHg7IC8qINCU0L7RgdGC0LDRgtGK0YfQvdC+INCz0L7Qu9GP0Lwg0LfQsCDQtNCwINC40LfQv9GK0LrQstCwICovXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuLnNlYXNvbi1jb250YWluZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyOyAvKiDQptC10L3RgtGA0LjRgNCwINC10LvQtdC80LXQvdGC0LjRgtC1INC/0L4g0LLQuNGB0L7Rh9C40L3QsCAqL1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IC8qINCg0LDQt9C00LXQu9GPINCz0Lgg0YDQsNCy0L3QvtC80LXRgNC90L4gKi9cbiAgd2lkdGg6IDEwMCU7IC8qINCX0LDQv9GK0LvQstCwINGA0L7QtNC40YLQtdC70YHQutC40Y8g0LrQvtC90YLQtdC50L3QtdGAICovXG4gIGdhcDogMTBweDsgLyog0KDQsNC30YHRgtC+0Y/QvdC40LUg0LzQtdC20LTRgyBcIlNFQVNPTlwiINC4INC90L7QvNC10YDQsCAqL1xuICBib3gtc2hhZG93OiAycHggMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMyk7IC8qINCb0LXQutCwINGB0Y/QvdC60LAg0LfQsCAzRCDQtdGE0LXQutGCICovXG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG59XG5cbi8qINCg0LDQt9C70LjRh9C90Lgg0YbQstC10YLQvtCy0LUg0LfQsCDQstGB0LXQutC4INCx0LvQvtC6ICovXG4uc2Vhc29uLWJveCxcbi5yb3VuZC1ib3gsXG4uY3VwLWJveCB7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudChcbiAgICAxMzVkZWcsXG4gICAgI2E4YThhOCxcbiAgICAjYzRhZjQ4XG4gICk7IC8qINCe0YHQvdC+0LLQtdC9INCz0YDQsNC00LjQtdC90YIg0LfQsCDQtdGE0LXQutGCINC90LAg0LrQsNC80YrQuiAqL1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICBib3gtc2hhZG93OiBpbnNldCAtMXB4IDFweCAyMHB4IDIwcHggcmdiKDU2IDU2IDgwIC8gNTQlKTsgLyog0JLRitGC0YDQtdGI0L3QsCDRgdGP0L3QutCwINC30LAg0YDQtdC70LXRhCAqL1xuICBib3JkZXI6IDJweCBzb2xpZCAjNWU1ZTVlOyAvKiDQn9C+LdGC0YrQvNC10L0g0LrQvtC90YLRg9GAINC30LAg0LrQsNC80LXQvdC10L0g0LXRhNC10LrRgiAqL1xuICBib3JkZXItcmFkaXVzOiAxMHB4OyAvKiDQl9Cw0L7QsdC70LXQvdC4INGA0YrQsdC+0LLQtSAqL1xufSAvKiDQodC40L0gKi9cbi8qLnJvdW5kLWJveCB7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICM0OGM3NzQsICMzYTlkNTApO1xufSAvKiDQl9C10LvQtdC9ICovXG4vKi5jdXAtYm94IHtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI2ZmY2MwMCwgI2Q0YTQwMCk7XG59IC8qINCX0LvQsNGC0LjRgdGC0L4t0LbRitC70YIgKi9cblxuLyog0J/QvtC00YDQtdC20LTQsNC90LUg0L3QsCDQtdC00LjQvSDRgNC10LQg0L/RgNC4INC/0L4t0LPQvtC70LXQvNC4INC10LrRgNCw0L3QuCAqL1xuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5sb2dvLWRlc2t0b3Age1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gIH0gLyog0L/QvtC60LDQt9Cy0LAg0YHQtSDQvdCwIGRlc2t0b3AgKi9cbiAgLmluZm8tY29udGFpbmVyIHtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgLyog0KDQsNC30L/RgNC10LTQtdC70Y8g0LHQu9C+0LrQvtCy0LXRgtC1INGA0LDQstC90L7QvNC10YDQvdC+ICovXG4gICAgd2lkdGg6IDkwJTtcbiAgICBtYXgtd2lkdGg6IDEyMDBweDsgLyog0JzQsNC60YHQuNC80LDQu9C90LAg0YjQuNGA0LjQvdCwICovXG4gIH1cblxuICAuc2Vhc29uLWJveCxcbiAgLnJvdW5kLWJveCxcbiAgLmN1cC1ib3gge1xuICAgIHdpZHRoOiAzMiU7IC8qINCS0YHQtdC60Lgg0LHQu9C+0Log0LfQsNC10LzQsCAxLzMg0L7RgiDQv9GA0L7RgdGC0YDQsNC90YHRgtCy0L7RgtC+ICovXG4gICAgbWF4LXdpZHRoOiBub25lO1xuICB9XG59XG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgLmluZm8tY29udGFpbmVyIHtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHBhZGRpbmc6IDFweDtcbiAgfVxuICAuc2Vhc29uLWJveCxcbiAgLnJvdW5kLWJveCxcbiAgLmN1cC1ib3gge1xuICAgIG1heC13aWR0aDogbm9uZTtcbiAgICBwYWRkaW5nOiAxcHg7XG4gICAgbWluLWhlaWdodDogMTAwcHg7XG4gIH1cbiAgLnNlYXNvbi10aXRsZSxcbiAgLnNlYXNvbi1udW1iZXIsXG4gIC5yb3VuZC10aXRsZSxcbiAgLnJvdW5kLW51bWJlcixcbiAgLmN1cC10aXRsZSB7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICB9XG4gIC5ncmFkaWVudC1zZW5kQnV0dG9uIHtcbiAgICBwYWRkaW5nOiAwcHg7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgZm9udC1zaXplOiAxLjJyZW07XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgYW5kIChtYXgtd2lkdGg6IDExOTlweCkge1xuICAuc2Vhc29uLXRpdGxlLFxuICAucm91bmQtdGl0bGUsXG4gIC5jdXAtdGl0bGUge1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgfVxuICAuc2Vhc29uLW51bWJlcixcbiAgLnJvdW5kLW51bWJlciB7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICB9XG59XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJtYXgtdy0zeGwgbXgtYXV0byBiZy13aGl0ZSBwLTYgcm91bmRlZCBzaGFkb3dcIj5cbiAgICA8aDEgY2xhc3M9XCJ0ZXh0LTJ4bCBmb250LWJvbGQgdGV4dC1jZW50ZXIgbWItNFwiPvCfp6AgQ3JhenkgUmlkZGxlPC9oMT5cblxuICAgIDwhLS0g0J/QvtC60LDQt9Cy0LDQvNC1INC30LDQs9Cw0LTQutCw0YLQsCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibWItNCBwLTQgYmcteWVsbG93LTEwMCBib3JkZXIgYm9yZGVyLXllbGxvdy0zMDAgcm91bmRlZFwiPlxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgbWItMlwiPlJpZGRsZTo8L3A+XG4gICAgICA8cCBjbGFzcz1cIml0YWxpY1wiPnt7IHB1enpsZVF1ZXN0aW9uIH19PC9wPlxuICAgIDwvZGl2PlxuICAgIDwhLS0g0JLRitCy0LXQttC00LDQvdC1INC90LAg0LLRitC/0YDQvtGBIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0yIG1iLTRcIj5cbiAgICAgIDwhLS0g0KfQtdC60LHQvtC60YEg0LfQsCDRhNC40L3QsNC70LXQvSDQvtGC0LPQvtCy0L7RgCAtLT5cbiAgICAgIDxkaXYgdi1pZj1cInB1enpsZUFuc3dlci50cmltKCkgIT09ICcnXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiB2LW1vZGVsPVwiaXNGaW5hbEd1ZXNzXCIgY2xhc3M9XCJtci0yXCIgLz5cbiAgICAgICAgICA8c3Bhbj5TdWJtaXQgZmluYWwgYW5zd2VyPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0g0JTQuNC90LDQvNC40YfQvdC+INC/0L7Qu9C1INC30LAg0LLRitC/0YDQvtGBINC40LvQuCDQv9GA0LXQtNC/0L7Qu9C+0LbQtdC90LjQtSAtLT5cbiAgICAgIDx0ZXh0YXJlYVxuICAgICAgICB2LW1vZGVsPVwidXNlcklucHV0XCJcbiAgICAgICAgQGtleXVwLmVudGVyLmV4YWN0PVwiYXNrUXVlc3Rpb25cIlxuICAgICAgICA6cGxhY2Vob2xkZXI9XCJcbiAgICAgICAgICBpc0ZpbmFsR3Vlc3NcbiAgICAgICAgICAgID8gJ0VudGVyIHlvdXIgaHlwb3RoZXNpcywgZGVzY3JpYmluZyB0aGUgZnVsbCBjYXVzZS1hbmQtZWZmZWN0IHJlYXNvbmluZy4uLidcbiAgICAgICAgICAgIDogJ2FzayBhIHF1ZXN0aW9uLi4uJ1xuICAgICAgICBcIlxuICAgICAgICA6bWF4bGVuZ3RoPVwiaXNGaW5hbEd1ZXNzID8gMzAwIDogODBcIlxuICAgICAgICA6cm93cz1cImlzRmluYWxHdWVzcyA/IDQgOiAxXCJcbiAgICAgICAgY2xhc3M9XCJib3JkZXIgcC0yIHJvdW5kZWQgcmVzaXplLW5vbmUgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwXCJcbiAgICAgICAgOmNsYXNzPVwiaXNGaW5hbEd1ZXNzID8gJ2JvcmRlci1ibHVlLTUwMCBiZy1ibHVlLTUwJyA6ICcnXCJcbiAgICAgID48L3RleHRhcmVhPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBAY2xpY2s9XCJhc2tRdWVzdGlvblwiXG4gICAgICAgIGNsYXNzPVwiYmctYmx1ZS01MDAgdGV4dC13aGl0ZSBweC00IHB5LTIgcm91bmRlZCBob3ZlcjpiZy1ibHVlLTYwMFwiXG4gICAgICA+XG4gICAgICAgIHt7IGlzRmluYWxHdWVzcyA/IFwiU3VibWl0IGFuc3dlclwiIDogXCJBc2tcIiB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tINCf0L7QutCw0LfQstCw0LzQtSDQvtGC0LPQvtCy0L7RgNCwIC0tPlxuICAgIDxkaXYgdi1pZj1cImFuc3dlclwiIGNsYXNzPVwiYmctZ3JlZW4tMTAwIHAtMyByb3VuZGVkIGJvcmRlciBib3JkZXItZ3JlZW4tMzAwXCI+XG4gICAgICA8c3Ryb25nPkFuc3dlcjo8L3N0cm9uZz4ge3sgYW5zd2VyIH19XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IHJlZj1cImhpc3RvcnlcIiBjbGFzcz1cIm92ZXJmbG93LXktYXV0byBtYXgtaC05NiBzcGFjZS15LTRcIj5cbiAgICA8aDMgY2xhc3M9XCJ0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgbXQtMiB0ZXh0LWdyYXktNDAwXCI+SGlzdG9yeTo8L2gzPlxuICAgIDx1bCBjbGFzcz1cInNwYWNlLXktMlwiPlxuICAgICAgPGxpXG4gICAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBoaXN0b3J5XCJcbiAgICAgICAgOmtleT1cImluZGV4XCJcbiAgICAgICAgY2xhc3M9XCJiZy13aGl0ZSBwLTIgcm91bmRlZCBzaGFkb3dcIlxuICAgICAgPlxuICAgICAgICA8c3Ryb25nPvCfp6AgUXVlc3Rpb246PC9zdHJvbmc+IHt7IGl0ZW0ucXVlc3Rpb24gfX0gPGJyIC8+XG4gICAgICAgIDxzdHJvbmc+8J+kliBBbnN3ZXI6PC9zdHJvbmc+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgdi1pZj1cIml0ZW0uYW5zd2VyID09PSAnLi4udHlwaW5nLi4uJ1wiXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LWdyYXktNTAwIGl0YWxpYyBhbmltYXRlLXB1bHNlXCJcbiAgICAgICAgPlxuICAgICAgICAgIPCfpJYgdHlwaW5nPHNwYW4gY2xhc3M9XCJkb3QtdHlwaW5nIG1sLTFcIj4uLi48L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gdi1lbHNlPnt7IGl0ZW0uYW5zd2VyIH19PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc20gdGV4dC1ncmF5LTQwMFwiPih7eyBpdGVtLnRpbWUgfX0pPC9zcGFuPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4vL9CU0L7QsdCw0LLQtdC80LUg4oCe0LPQtdC50YLigJwg0Lgg0LjQt9GA0LjRh9C90L4g0LPQviDQstC40LrQsNC80LUg0L/RgNC10LTQuCDQtNCwINGB0YLQsNGA0YLQuNGA0LDRgtC1INGA0LXQutC70LDQvNCw0YLQsC4g0KLQsNC60LAg0L3Rj9C80LAg0LTQsCDQuNC80LAg0YDQsNC90L3QuCDRh9C10YLQtdC90LjRjyDQvdCwIGNvbnNlbnQ6XG5mdW5jdGlvbiB3YWl0Rm9yVXNlckNvbnNlbnQodGltZW91dE1zID0gODAwMCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHQwID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoIXdpbmRvdy5fX3RjZmFwaSkgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoXCJfX3RjZmFwaSBtaXNzaW5nXCIpKTtcblxuICAgIGNvbnN0IG9rU3RhdHVzZXMgPSBuZXcgU2V0KFtcInVzZXJhY3Rpb25jb21wbGV0ZVwiLCBcInRjbG9hZGVkXCJdKTtcbiAgICBjb25zdCBjaGVjayA9ICgpID0+IHtcbiAgICAgIHdpbmRvdy5fX3RjZmFwaShcImdldFRDRGF0YVwiLCAyLCAoZGF0YSwgb2spID0+IHtcbiAgICAgICAgaWYgKCFvayB8fCAhZGF0YSkgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoXCJnZXRUQ0RhdGEgbm90IG9rXCIpKTtcbiAgICAgICAgLy8g0LDQutC+IEdEUFIg0L3QtSDRgdC1INC/0YDQuNC70LDQs9CwIOKAkyDQvdGP0LzQsCDQutCw0LrQstC+INC00LAg0YfQsNC60LDQvNC1XG4gICAgICAgIGlmIChkYXRhLmdkcHJBcHBsaWVzID09PSBmYWxzZSkgcmV0dXJuIHJlc29sdmUoZGF0YSk7XG5cbiAgICAgICAgLy8g0L/RgNC10LTQv9C+0YfQuNGC0LDQvNC1IHVzZXJhY3Rpb25jb21wbGV0ZSwg0L3QviDQv9GA0LjQtdC80LDQvNC1INC4IHRjbG9hZGVkXG4gICAgICAgIGlmIChva1N0YXR1c2VzLmhhcyhkYXRhLmV2ZW50U3RhdHVzKSkgcmV0dXJuIHJlc29sdmUoZGF0YSk7XG5cbiAgICAgICAgaWYgKERhdGUubm93KCkgLSB0MCA+IHRpbWVvdXRNcylcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihcIlRDRiB0aW1lb3V0XCIpKTtcbiAgICAgICAgc2V0VGltZW91dChjaGVjaywgMTUwKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyDQt9CwINC00LAg0YXQstCw0L3QtdC8INC/0YDQvtC80Y/QvdCw0YLQsCDQstC10LTQvdCw0LPQsCwg0LfQsNC60LDRh9Cw0LzQtSDQuCBsaXN0ZW5lclxuICAgIHRyeSB7XG4gICAgICB3aW5kb3cuX190Y2ZhcGkoXCJhZGRFdmVudExpc3RlbmVyXCIsIDIsIChkLCBvaykgPT4ge1xuICAgICAgICBpZiAob2sgJiYgZD8uZXZlbnRTdGF0dXMgPT09IFwidXNlcmFjdGlvbmNvbXBsZXRlXCIpIHJlc29sdmUoZCk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIHt9XG4gICAgY2hlY2soKTtcbiAgfSk7XG59XG5pbXBvcnQgU3dhbCBmcm9tIFwic3dlZXRhbGVydDJcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwdXp6bGVUaXRsZTogXCJcIixcbiAgICAgIHB1enpsZVF1ZXN0aW9uOiBcIlwiLFxuICAgICAgdXNlcklucHV0OiBcIlwiLFxuICAgICAgYW5zd2VyOiBcIlwiLFxuICAgICAgcHV6emxlQW5zd2VyOiBcIlwiLFxuICAgICAgYXBwTW9kZWw6IFwiXCIsXG4gICAgICBhcHBUZW1wZXJhdHVyZTogXCJcIixcbiAgICAgIGhpc3Rvcnk6IFtdLFxuICAgICAgcHV6emxlSWQ6IFwiXCIsXG4gICAgICBpc0ZpbmFsR3Vlc3M6IGZhbHNlLFxuICAgIH07XG4gIH0sXG4gIGFzeW5jIG1vdW50ZWQoKSB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNyYXp5LXB1enpsZS1hcHBcIik7XG4gICAgaWYgKGVsKSB7XG4gICAgICB0aGlzLnB1enpsZVRpdGxlID0gZWwuZGF0YXNldC50aXRsZTtcbiAgICAgIHRoaXMucHV6emxlUXVlc3Rpb24gPSBlbC5kYXRhc2V0LnF1ZXN0aW9uO1xuICAgICAgdGhpcy5wdXp6bGVJZCA9IGVsLmRhdGFzZXQucHV6emxlSWQ7XG4gICAgICB0aGlzLnB1enpsZUFuc3dlciA9IGVsLmRhdGFzZXQucHV6emxlQW5zd2VyO1xuICAgICAgdGhpcy5hcHBNb2RlbCA9IGVsLmRhdGFzZXQuYXBwTW9kZWw7XG4gICAgICB0aGlzLmFwcFRlbXBlcmF0dXJlID0gZWwuZGF0YXNldC5hcHBUZW1wZXJhdHVyZTtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgL2FwaS9wdXp6bGUtaGlzdG9yeS8ke3RoaXMucHV6emxlSWR9YCk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAvL9C/0YDQtdC+0LHRgNCw0LfRg9Cy0LDQvNC1IHV0YyDQstGA0LXQvNC10YLQviDQstC40L3QsNCz0Lgg0LIg0LvQvtC60LDQu9C10L0g0YTQvtGA0LzQsNGCXG4gICAgdGhpcy5oaXN0b3J5ID0gZGF0YS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLml0ZW0sXG4gICAgICAgIHRpbWU6IG5ldyBEYXRlKGl0ZW0udGltZSkudG9Mb2NhbGVUaW1lU3RyaW5nKFwiZW4tR0JcIiwge1xuICAgICAgICAgIGhvdXI6IFwiMi1kaWdpdFwiLFxuICAgICAgICAgIG1pbnV0ZTogXCIyLWRpZ2l0XCIsXG4gICAgICAgIH0pLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgYXN5bmMgYXNrUXVlc3Rpb24oKSB7XG4gICAgICAvL2lmICghdGhpcy51c2VySW5wdXQudHJpbSgpKSByZXR1cm47XG4gICAgICBjb25zdCB0cmltbWVkSW5wdXQgPSB0aGlzLnVzZXJJbnB1dC50cmltKCk7XG5cbiAgICAgIC8vIDEuINCf0YDQvtCy0LXRgNC60LAg0LfQsCDQv9GA0LDQt9C10L0g0YHRgtGA0LjQvdCzXG4gICAgICBpZiAoIXRyaW1tZWRJbnB1dCkge1xuICAgICAgICBhbGVydChcIlRoZSBmaWVsZCBjYW5ub3QgYmUgZW1wdHkuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIOKchSDQn9GA0L7QstC10YDQutCwINC30LAg0LTRitC70LbQuNC90LAg0LIg0LfQsNCy0LjRgdC40LzQvtGB0YIg0L7RgiDRgNC10LbQuNC80LBcbiAgICAgIGNvbnN0IG1heExlbmd0aCA9IHRoaXMuaXNGaW5hbEd1ZXNzID8gMzAwIDogODA7XG4gICAgICBpZiAodHJpbW1lZElucHV0Lmxlbmd0aCA+IG1heExlbmd0aCkge1xuICAgICAgICBhbGVydChgUGxlYXNlIGVudGVyIGEgbWVzc2FnZSBvZiB1cCB0byAke21heExlbmd0aH0gY2hhcmFjdGVycy5gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8g4pyFINCU0L7QsdCw0LLRj9C80LUgXCJGSU5BTDpcIiDQsNC60L4g0LUg0LzQsNGA0LrQuNGA0LDQvdC+XG4gICAgICBjb25zdCBxdWVzdGlvblRleHQgPSB0aGlzLmlzRmluYWxHdWVzc1xuICAgICAgICA/IGBGSU5BTDogJHt0cmltbWVkSW5wdXR9YFxuICAgICAgICA6IHRyaW1tZWRJbnB1dDtcblxuICAgICAgdGhpcy51c2VySW5wdXQgPSBcIlwiOyAvLyDQvdGD0LvQuNGA0LDQvNC1INC40L3Qv9GD0YLQsFxuICAgICAgdGhpcy5pc0ZpbmFsR3Vlc3MgPSBmYWxzZTsgLy8g0LfQsNC90YPQu9GP0LLQsNC80LUg0YfQtdC60LHQvtC60YHQsFxuXG4gICAgICAvLyDQlNC+0LHQsNCy0Y/QvNC1INGB0LDQvNC+INCy0YrQv9GA0L7RgdCwINCyINC40YHRgtC+0YDQuNGP0YLQsCAo0LLRgNC10LzQtdC90L3QviDQsdC10Lcg0L7RgtCz0L7QstC+0YApXG4gICAgICBjb25zdCBoaXN0b3J5RW50cnkgPSB7XG4gICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvblRleHQsXG4gICAgICAgIGFuc3dlcjogXCIuLi50eXBpbmcuLi5cIixcbiAgICAgICAgdGltZTogbmV3IERhdGUoKS50b0xvY2FsZVRpbWVTdHJpbmcoXCJiZy1CR1wiLCB7XG4gICAgICAgICAgaG91cjogXCIyLWRpZ2l0XCIsXG4gICAgICAgICAgbWludXRlOiBcIjItZGlnaXRcIixcbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgICAgdGhpcy5oaXN0b3J5LnVuc2hpZnQoaGlzdG9yeUVudHJ5KTtcblxuICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICBjb25zdCBoaXN0b3J5QmxvY2sgPSB0aGlzLiRyZWZzLmhpc3Rvcnk7XG4gICAgICAgIGlmIChoaXN0b3J5QmxvY2spIHtcbiAgICAgICAgICBoaXN0b3J5QmxvY2suc2Nyb2xsVG9wID0gaGlzdG9yeUJsb2NrLnNjcm9sbEhlaWdodDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvL3RoaXMuaGlzdG9yeS5wdXNoKGhpc3RvcnlFbnRyeSk7XG4gICAgICAvL9C/0YPRgdC60LDQvNC1INGC0LDQudC80LXRgCwg0LfQsCDQtNCwINGB0L/RgNC10LwgXCLQvNC40YHQu9C10L3QtdGC0L4g0Lgg0L/QuNGB0LDQvdC10YLQvlwiINC90LAg0LzQvtC00LXQu9CwLCDQsNC60L4g0LzQuNC90LUg0L/RgNC10LrQsNC70LXQvdC+INC80L3QvtCz0L4g0LLRgNC10LzQtSDQuCDQvdGP0LzQsCDQvtGC0LPQvtCy0L7RgFxuICAgICAgLy8g4o+wINCh0YLQsNGA0YLQuNGA0LDQvNC1INGC0LDQudC80LXRgFxuICAgICAgY29uc3QgZmFsbGJhY2tUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChoaXN0b3J5RW50cnkuYW5zd2VyID09PSBcIi4uLnR5cGluZy4uLlwiKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVBbnN3ZXJJbkhpc3RvcnkoaGlzdG9yeUVudHJ5LCBcIuKaoO+4jyBObyByZXNwb25zZS4gVHJ5IGFnYWluXCIpO1xuICAgICAgICB9XG4gICAgICB9LCAzNTAwMCk7XG4gICAgICAvLyDQodC10LPQsCDQv9GA0LDQstC40Lwg0LfQsNGP0LLQutCw0YLQsFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChcIi9hcGkvY2hhdFwiLCB7XG4gICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uVGV4dCxcbiAgICAgICAgICAgIHB1enpsZUlkOiB0aGlzLnB1enpsZUlkLFxuICAgICAgICAgICAgcHV6emxlQW5zd2VyOiB0aGlzLnB1enpsZUFuc3dlcixcbiAgICAgICAgICAgIGFwcE1vZGVsOiB0aGlzLmFwcE1vZGVsLFxuICAgICAgICAgICAgYXBwVGVtcGVyYXR1cmU6IHBhcnNlRmxvYXQodGhpcy5hcHBUZW1wZXJhdHVyZSksXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIC8vINCd0Y/QvNCwINGA0LXQutC70LDQvNCwIC0+INC00LjRgNC10LrRgtC90L4g0L7RgtCz0L7QstC+0YDQsFxuICAgICAgICBpZiAoIWRhdGEuYWRfcmVjbGFtZSkge1xuICAgICAgICAgIHRoaXMudXBkYXRlQW5zd2VySW5IaXN0b3J5KGhpc3RvcnlFbnRyeSwgZGF0YS5hbnN3ZXIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0b2tlbiA9IGRhdGEuYWRUb2tlbjtcbiAgICAgICAgaWYgKCF0b2tlbikge1xuICAgICAgICAgIHRoaXMuJGVtaXQoXG4gICAgICAgICAgICBcInNob3ctbWVzc2FnZVwiLFxuICAgICAgICAgICAgXCJUZW1wb3JhcnkgZXJyb3IgKG1pc3NpbmcgaW5mbykuIFBsZWFzZSB0cnkgYWdhaW4uLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gLS0tINCg0LXQutC70LDQvNC90LjRj9GCINCx0LvQvtC6IC0tLVxuICAgICAgICBsZXQgYWRSZXM7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYWRSZXMgPSBhd2FpdCB0aGlzLnBsYXlSZXdhcmRlZFdpdGhDb25zZW50KFwiYWlcIik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zdCBjb2RlID0gU3RyaW5nKGU/Lm1lc3NhZ2UgfHwgXCJcIik7XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiW0FJXSBhZCBleGNlcHRpb246XCIsIGNvZGUsIGUpO1xuXG4gICAgICAgICAgaWYgKGNvZGUgPT09IFwiY29uc2VudF91bmF2YWlsYWJsZVwiKSB7XG4gICAgICAgICAgICB0aGlzLiRlbWl0KFxuICAgICAgICAgICAgICBcInNob3ctbWVzc2FnZVwiLFxuICAgICAgICAgICAgICBcItCX0LAg0LTQsCDQv9C+0LvRg9GH0LjRgtC1INC+0YLQs9C+0LLQvtGALCDQv9GA0LjQtdC80LXRgtC1IOKAntCc0LDRgNC60LXRgtC40L3Qs+KAnCDQsdC40YHQutCy0LjRgtC60LguXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB3aW5kb3cuQ29va2llYm90Py5zaG93Py4oKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIG5vX2ZpbGwsIGFkX2Vycm9yLCBhZF90aW1lb3V0LCDQtNGALlxuICAgICAgICAgICAgdGhpcy4kZW1pdChcbiAgICAgICAgICAgICAgXCJzaG93LW1lc3NhZ2VcIixcbiAgICAgICAgICAgICAgXCLQndGP0LzQsCDQvdCw0LvQuNGH0L3QsCDRgNC10LrQu9Cw0LzQsCDQsiDQvNC+0LzQtdC90YLQsC4g0J7Qv9C40YLQsNC50YLQtSDRgdC70LXQtCDQvNCw0LvQutC+LlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47IC8vINCx0LXQtyDRgNC10LrQu9Cw0LzQsCAtPiDQsdC10LcgQUkg0L7RgtCz0L7QstC+0YBcbiAgICAgICAgfVxuXG4gICAgICAgIC8vINCg0LXQutC70LDQvNCw0YLQsCDQtSDQuNC30LPQu9C10LTQsNC90LAv0YHQuNC80YPQu9C40YDQsNC90LAg0LTQvtC60YDQsNC5P1xuICAgICAgICBpZiAoIWFkUmVzIHx8ICghYWRSZXMuY29tcGxldGVkICYmICFhZFJlcy5zaW11bGF0ZWQpKSB7XG4gICAgICAgICAgdGhpcy4kZW1pdChcInNob3ctbWVzc2FnZVwiLCBcItCg0LXQutC70LDQvNCw0YLQsCDQvdC1INCx0LXRiNC1INC40LfQs9C70LXQtNCw0L3QsCDQtNC+0LrRgNCw0LkuXCIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIPCfkYkgMSkg0JjQt9GH0LDQutCw0LkgdW5sb2NrLdCwLCDQt9CwINC00LAg0L3Rj9C80LAgcmFjZVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHVubG9ja1Jlc3AgPSBhd2FpdCBmZXRjaChcbiAgICAgICAgICAgIGAvYXBpL2FkLXVubG9jaz90b2tlbj0ke2VuY29kZVVSSUNvbXBvbmVudCh0b2tlbil9YCxcbiAgICAgICAgICAgIHsgbWV0aG9kOiBcIlBPU1RcIiB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIXVubG9ja1Jlc3Aub2spIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIltBSV0gYWQtdW5sb2NrIG5vdCBPSzpcIiwgdW5sb2NrUmVzcC5zdGF0dXMpO1xuICAgICAgICAgICAgLy8g0L/RgNC+0LTRitC70LbQsNCy0LDQvNC1INCy0YrQv9GA0LXQutC4INGC0L7QstCwLCDQsNC60L4g0LHQtdC60LXQvdC00YrRgiDQtNC+0L/Rg9GB0LrQsFxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcIltBSV0gYWQtdW5sb2NrIG5ldHdvcmsgZXJyb3I6XCIsIGUpO1xuICAgICAgICAgIC8vINC/0LDQuiDQv9GA0L7QtNGK0LvQttCw0LLQsNC80LUg4oCTINCx0LXQutC10L3QtNGK0YIg0LzQvtC20LUg0LTQsCDQstCw0LvQuNC00LjRgNCwINGC0L7QutC10L3QsCDQuCDQv9C+IC9hcGkvY2hhdFxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQUkg0LfQsNGP0LLQutCw0YLQsCDigJMg0LLQtdGH0LUg0YEgYWRUb2tlblxuICAgICAgICBjb25zdCByZXNwMiA9IGF3YWl0IGZldGNoKFwiL2FwaS9jaGF0XCIsIHtcbiAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgIGhlYWRlcnM6IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb25UZXh0LFxuICAgICAgICAgICAgcHV6emxlSWQ6IHRoaXMucHV6emxlSWQsXG4gICAgICAgICAgICBwdXp6bGVBbnN3ZXI6IHRoaXMucHV6emxlQW5zd2VyLFxuICAgICAgICAgICAgYXBwTW9kZWw6IHRoaXMuYXBwTW9kZWwsXG4gICAgICAgICAgICBhcHBUZW1wZXJhdHVyZTogcGFyc2VGbG9hdCh0aGlzLmFwcFRlbXBlcmF0dXJlKSxcbiAgICAgICAgICAgIGFkVG9rZW46IHRva2VuLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc29sZS5sb2coXCJyZXNwMlwiLCByZXNwMik7XG4gICAgICAgIGNvbnN0IGRhdGEyID0gYXdhaXQgcmVzcDIuanNvbigpLmNhdGNoKCgpID0+ICh7fSkpO1xuICAgICAgICBjb25zb2xlLmxvZyhcIkRBVEFcIiwgZGF0YTIpO1xuICAgICAgICBpZiAoIXJlc3AyLm9rIHx8ICFkYXRhMi5hbnN3ZXIpIHtcbiAgICAgICAgICB0aGlzLiRlbWl0KFwic2hvdy1tZXNzYWdlXCIsIGRhdGEyLmVycm9yIHx8IFwi0J/RgNC+0LHQu9C10Lwg0L/RgNC4IEFJINC+0YLQs9C+0LLQvtGALlwiKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZUFuc3dlckluSGlzdG9yeShoaXN0b3J5RW50cnksIGRhdGEyLmFuc3dlcik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiW0FJXSByZXF1ZXN0IGZhaWxlZDpcIiwgZXJyb3IpO1xuICAgICAgICAvLyDQotC+0LLQsCDQtSDigJ7QstGK0L3RiNC90LjRj9GC4oCcIGNhdGNoIOKAkyDQvNGA0LXQttC+0LLQuC/QvdC10L7Rh9Cw0LrQstCw0L3QuCDQs9GA0LXRiNC60LhcbiAgICAgICAgaGlzdG9yeUVudHJ5LmFuc3dlciA9IFwi4pqg77iPINCS0YrQt9C90LjQutC90LAg0LLRgNC10LzQtdC90L3QsCDQs9GA0LXRiNC60LAuXCI7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5zcGxpY2UoXG4gICAgICAgICAgdGhpcy5oaXN0b3J5LmluZGV4T2YoaGlzdG9yeUVudHJ5KSxcbiAgICAgICAgICAxLFxuICAgICAgICAgIGhpc3RvcnlFbnRyeVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVBbnN3ZXJJbkhpc3RvcnkoZW50cnksIGFuc3dlcikge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmhpc3RvcnkuaW5kZXhPZihlbnRyeSk7XG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIC8vINCh0YrQt9C00LDQuSDQvdC+0LIg0L7QsdC10LrRgiDRgdGK0YEg0YHRitGJ0LjRgtC1INGB0YLQvtC50L3QvtGB0YLQuCwg0L3QviDQvtCx0L3QvtCy0LXQvSDQvtGC0LPQvtCy0L7RgFxuICAgICAgICB0aGlzLmhpc3Rvcnkuc3BsaWNlKGluZGV4LCAxLCB7XG4gICAgICAgICAgLi4uZW50cnksXG4gICAgICAgICAgYW5zd2VyOiBhbnN3ZXIsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvL9C00L7Qv9GK0LvQvdC40YLQtdC70L3QuCDQvNC10YLQvtC00Lgg0LfQsCDQuNC30LHRj9Cz0LDQvdC1INC90LAg0LjRgdC60LDQvdC1INC90LAg0L/QvtGB0YLQvtGP0L3QvdC+INGB0YrQs9C70LDRgdC40LUg0YHQu9C10LQg0YDQtdC60LvQsNC80LBcbiAgICBnZXRUQ1N0cmluZygpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBpZiAoIXdpbmRvdy5fX3RjZmFwaSlcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh7IHRjU3RyaW5nOiBudWxsLCBnZHByQXBwbGllczogbnVsbCB9KTtcbiAgICAgICAgd2luZG93Ll9fdGNmYXBpKFwiZ2V0VENEYXRhXCIsIDIsIChkYXRhLCBvaykgPT4ge1xuICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgdGNTdHJpbmc6IG9rID8gZGF0YT8udGNTdHJpbmcgfHwgbnVsbCA6IG51bGwsXG4gICAgICAgICAgICBnZHByQXBwbGllczogb2sgPyAhIWRhdGE/LmdkcHJBcHBsaWVzIDogbnVsbCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgcGxheVJld2FyZGVkV2l0aENvbnNlbnQocGxhY2VtZW50ID0gXCJhaVwiKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIltBRF0gd3JhcHBlcjogZW50ZXJcIiwgeyBwbGFjZW1lbnQgfSk7XG4gICAgICBjb25zdCB7IHRjU3RyaW5nLCBnZHByQXBwbGllcyB9ID0gYXdhaXQgdGhpcy5nZXRUQ1N0cmluZygpO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiW0FEXSB3cmFwcGVyOiB0Y1N0cmluZz1cIixcbiAgICAgICAgdGNTdHJpbmcsXG4gICAgICAgIFwiZ2RwckFwcGxpZXM9XCIsXG4gICAgICAgIGdkcHJBcHBsaWVzXG4gICAgICApO1xuICAgICAgLy8g0J3Rj9C60L7QuCBTREsg0YfQtdGC0LDRgiDRgtC10LfQuCDQs9C70L7QsdCw0LvQuCDQsNCy0YLQvtC80LDRgtC40YfQvdC+OlxuICAgICAgd2luZG93LklBQlRDRl9UQ1N0cmluZyA9IHRjU3RyaW5nIHx8IFwiXCI7XG4gICAgICBjb25zb2xlLmxvZyhcIltBRF0gd3JhcHBlcjogc2V0IElBQlRDRl9UQ1N0cmluZ1wiKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIltBRF0gd3JhcHBlcjogd2luZG93LnBsYXlSZXdhcmRlZCA9XCIsXG4gICAgICAgIHR5cGVvZiB3aW5kb3cucGxheVJld2FyZGVkXG4gICAgICApO1xuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB3aW5kb3cucGxheVJld2FyZGVkPy4ocGxhY2VtZW50KTtcbiAgICAgIGNvbnNvbGUubG9nKFwiW0FEXSB3cmFwcGVyOiByZXN1bHQgPVwiLCByZXMpO1xuICAgICAgLy8g0KHQu9C10LQg0YDQtdC60LvQsNC80LDRgtCwIOKAkyDQsdGK0YDQt9CwINC/0YDQvtCy0LXRgNC60LAv0YHRgtCw0LHQuNC70LjQt9Cw0YbQuNGPICjQsdC10Lcg0LTQsCDQv9C+0LrQsNC30LLQsNC80LUg0L3QuNGJ0L4g0L3QsCDQv9C+0YLRgNC10LHQuNGC0LXQu9GPKVxuICAgICAgdGhpcy5yZWNoZWNrQ29uc2VudEFmdGVyQWQoKTtcbiAgICAgIGNvbnNvbGUubG9nKFwiW0FEXSB3cmFwcGVyOiBhZnRlciByZWNoZWNrXCIpO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9LFxuXG4gICAgcmVjaGVja0NvbnNlbnRBZnRlckFkKCkge1xuICAgICAgaWYgKCF3aW5kb3cuX190Y2ZhcGkpIHJldHVybjtcbiAgICAgIHdpbmRvdy5fX3RjZmFwaShcImdldFRDRGF0YVwiLCAyLCAoZGF0YSwgb2spID0+IHtcbiAgICAgICAgLy8g0YLRg9C6INC/0L4t0YHQutC+0YDQviDRgdCw0LzQviDQu9C+0LMv0LTQuNCw0LPQvdC+0YHRgtC40LrQsCDQv9GA0Lgg0L3Rg9C20LTQsFxuICAgICAgICBjb25zb2xlLmRlYnVnKFxuICAgICAgICAgIFwiW0NNUF0gYWZ0ZXItYWRcIixcbiAgICAgICAgICBvayxcbiAgICAgICAgICBkYXRhPy5ldmVudFN0YXR1cyxcbiAgICAgICAgICAhIWRhdGE/LnRjU3RyaW5nXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9LFxuICB9LFxufTtcbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuLmRvdC10eXBpbmc6OmFmdGVyIHtcbiAgY29udGVudDogXCIuLi5cIjtcbiAgYW5pbWF0aW9uOiBkb3RzIDEuMnMgc3RlcHMoMywgZW5kKSBpbmZpbml0ZTtcbn1cblxuQGtleWZyYW1lcyBkb3RzIHtcbiAgMCUge1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gIH1cbiAgMzMlIHtcbiAgICBjb250ZW50OiBcIi5cIjtcbiAgfVxuICA2NiUge1xuICAgIGNvbnRlbnQ6IFwiLi5cIjtcbiAgfVxuICAxMDAlIHtcbiAgICBjb250ZW50OiBcIi4uLlwiO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlPlxyXG4gIDxkaXYgY2xhc3M9XCJmZWVkYmFja1wiPlxyXG4gICAgPGRpdlxyXG4gICAgICB2LWlmPVwic3RhdHVzID09PSAnc3VjY2VzcydcIlxyXG4gICAgICBjbGFzcz1cInN1Y2Nlc3MtYW5pbWF0aW9uLCBmZWVkYmFjay1tZXNzYWdlIHN1Y2Nlc3NcIlxyXG4gICAgPlxyXG4gICAgICDwn46JIHt7IG1lc3NhZ2UgfX1cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdlxyXG4gICAgICB2LWVsc2UtaWY9XCJzdGF0dXMgPT09ICdlcnJvcidcIlxyXG4gICAgICBjbGFzcz1cImVycm9yLWFuaW1hdGlvbiwgZmVlZGJhY2stbWVzc2FnZSBlcnJvclwiXHJcbiAgICA+XHJcbiAgICAgIOKdjCB7eyBtZXNzYWdlIH19XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBwcm9wczoge1xyXG4gICAgc3RhdHVzOiB7XHJcbiAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWUsXHJcbiAgICB9LFxyXG4gICAgbWVzc2FnZToge1xyXG4gICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgfSxcclxuICB9LFxyXG59O1xyXG48L3NjcmlwdD5cclxuXHJcbjxzdHlsZSBzY29wZWQ+XHJcbi5zdWNjZXNzLWFuaW1hdGlvbiB7XHJcbiAgYW5pbWF0aW9uOiBjb25mZXR0aSAycyBlYXNlLW91dDtcclxufVxyXG4uZXJyb3ItYW5pbWF0aW9uIHtcclxuICBhbmltYXRpb246IHNoYWtlIDAuNXM7XHJcbn1cclxuLmZlZWRiYWNrIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIG1hcmdpbi10b3A6IDEwcHg7XHJcbn1cclxuXHJcbi5mZWVkYmFjay1tZXNzYWdlIHtcclxuICBwYWRkaW5nOiAxMHB4IDE1cHg7XHJcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xyXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICB3aWR0aDogZml0LWNvbnRlbnQ7XHJcbiAgbWluLXdpZHRoOiAyMDBweDtcclxufVxyXG5cclxuLyog0KPRgdC/0LXRiNC90L4g0YDQtdGI0LXQvdC40LUgKi9cclxuLnN1Y2Nlc3Mge1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNkNGVkZGE7XHJcbiAgY29sb3I6ICMxNTU3MjQ7XHJcbiAgYm9yZGVyOiAycHggc29saWQgI2MzZTZjYjtcclxufVxyXG5cclxuLyog0JPRgNC10YjQvdC+INGA0LXRiNC10L3QuNC1ICovXHJcbi5lcnJvciB7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZDdkYTtcclxuICBjb2xvcjogIzcyMWMyNDtcclxuICBib3JkZXI6IDJweCBzb2xpZCAjZjVjNmNiO1xyXG59XHJcbjwvc3R5bGU+XHJcbiIsIjx0ZW1wbGF0ZT5cclxuICA8ZGl2IGlkPVwiY3Jvc3N3b3JkLXRlbXBsYXRlXCIgY2xhc3M9XCJncmlkIGdyaWQtY29scy0yNSBncmlkLXJvd3MtMjUgZ2FwLTFcIj5cclxuICAgIDwhLS0gSW5wdXQgRmllbGRzIGZvciAyNXgyNSBHcmlkIC0tPlxyXG4gICAgPHRlbXBsYXRlIHYtZm9yPVwicm93IGluIDI1XCIgOmtleT1cIidyb3ctJyArIHJvd1wiPlxyXG4gICAgICA8dGVtcGxhdGUgdi1mb3I9XCJjb2wgaW4gMjVcIiA6a2V5PVwiJ2NvbC0nICsgY29sXCI+XHJcbiAgICAgICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTsgZGlzcGxheTogaW5saW5lLWJsb2NrXCI+XHJcbiAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgOmlkPVwiJ2NlbGwtJyArIHJvdyArICctJyArIGNvbFwiXHJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC1jZW50ZXIgYm9yZGVyIHJvdW5kZWQtc20gZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLWJsdWUtNTAwXCJcclxuICAgICAgICAgICAgOmNsYXNzPVwie1xyXG4gICAgICAgICAgICAgICdpbmFjdGl2ZS1jZWxsJzogIWlzRWRpdE1vZGUsXHJcbiAgICAgICAgICAgICAgJ2luYWN0aXZlLWNlbGwtc2VsZWN0ZWQnOiAhaXNFZGl0TW9kZSAmJiBpc0NlbGxTZWxlY3RlZChyb3csIGNvbCksXHJcbiAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICBzdHlsZT1cIlxyXG4gICAgICAgICAgICAgIHdpZHRoOiA0MHB4O1xyXG4gICAgICAgICAgICAgIGhlaWdodDogNDBweDtcclxuICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDJweDtcclxuICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAycHg7XHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiXCJcclxuICAgICAgICAgICAgQGlucHV0PVwidXBkYXRlR3JpZChyb3csIGNvbCwgJGV2ZW50LnRhcmdldC52YWx1ZS50b1VwcGVyQ2FzZSgpKVwiXHJcbiAgICAgICAgICAgIEBjbGljaz1cImhhbmRsZUNlbGxDbGljayhyb3csIGNvbClcIlxyXG4gICAgICAgICAgICA6cmVhZG9ubHk9XCIhaXNFZGl0TW9kZVwiXHJcbiAgICAgICAgICAgIEBrZXlkb3duPVwiaGFuZGxlQXJyb3dOYXZpZ2F0aW9uKCRldmVudCwgcm93LCBjb2wpXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8IS0tINCf0L7QutCw0LfQstCw0LzQtSDQvdC+0LzQtdGA0LAg0LIg0L/RitGA0LLQsNGC0LAg0LrQu9C10YLQutCwIC0tPlxyXG4gICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgdi1pZj1cIndvcmROdW1iZXJzW2Ake3Jvd30tJHtjb2x9YF1cIlxyXG4gICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHRvcC0wIGxlZnQtMCB0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LWdyYXktNzAwXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJ0cmFuc2Zvcm06IHRyYW5zbGF0ZSgzcHgsIC0zcHgpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3sgd29yZE51bWJlcnNbYCR7cm93fS0ke2NvbH1gXSB9fVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L3RlbXBsYXRlPlxyXG4gICAgPC90ZW1wbGF0ZT5cclxuICA8L2Rpdj5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBuYW1lOiBcIkNyb3Nzd29yZEdyaWRcIixcclxuICBwcm9wczoge1xyXG4gICAgaXNFZGl0TW9kZToge1xyXG4gICAgICB0eXBlOiBCb29sZWFuLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgIH0sXHJcbiAgICB3b3JkSW5kZXg6IHtcclxuICAgICAgdHlwZTogTnVtYmVyLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgIH0sXHJcbiAgfSxcclxuICBkYXRhKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgY3Jvc3N3b3JkR3JpZDogQXJyYXkoMjUpXHJcbiAgICAgICAgLmZpbGwoKVxyXG4gICAgICAgIC5tYXAoKCkgPT4gQXJyYXkoMjUpLmZpbGwoXCJcIikpLFxyXG4gICAgICBjdXJyZW50V29yZEluZGV4OiB0aGlzLndvcmRJbmRleCwgLy8g0JvQvtC60LDQu9C90L4g0LrQvtC/0LjQtSDQvdCwINC40L3QtNC10LrRgdCwXHJcbiAgICAgIHNlbGVjdGVkQ2VsbHM6IFtdLCAvLyDQotGD0Log0YHRitGF0YDQsNC90Y/QstCw0LzQtSDQvNCw0YDQutC40YDQsNC90LjRgtC1INC60LvQtdGC0LrQuFxyXG4gICAgICBzZWxlY3RlZENlbGxzUGVyV29yZDoge30sIC8vINCY0LfQv9C+0LvQt9Cy0LDQvNC1INC+0LHQtdC60YIg0LLQvNC10YHRgtC+INC80LDRgdC40LIg0LfQsCDQv9C+LdCz0YrQstC60LDQstC+INGD0L/RgNCw0LLQu9C10L3QuNC1XHJcbiAgICAgIHdvcmROdW1iZXJzOiB7fSwgLy8g0KHRitGF0YDQsNC90Y/QstCw0LzQtSDQvdC+0LzQtdGA0LDRgtCwINC4INC60LvQtdGC0LrQuNGC0LVcclxuICAgIH07XHJcbiAgfSxcclxuICB3YXRjaDoge1xyXG4gICAgaXNFZGl0TW9kZShuZXdNb2RlKSB7XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCLQoNC10LbQuNC80YrRgiDQsiBDcm9zc3dvcmRHcmlkINC1INC/0YDQvtC80LXQvdC10L0g0L3QsDpcIiwgbmV3TW9kZSk7XHJcbiAgICB9LFxyXG4gICAgd29yZEluZGV4KG5ld1ZhbCkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRXb3JkSW5kZXggPSBuZXdWYWw7IC8vINCQ0LrRgtGD0LDQu9C40LfQuNGA0LAg0LvQvtC60LDQu9C90LDRgtCwINGB0YLQvtC50L3QvtGB0YJcclxuICAgICAgLy9vbnNvbGUubG9nKFwi0KHQuNC90YXRgNC+0L3QuNC30LjRgNCw0L0g0LvQvtC60LDQu9C10L0g0LjQvdC00LXQutGBOlwiLCB0aGlzLmN1cnJlbnRXb3JkSW5kZXgpO1xyXG4gICAgfSxcclxuICB9LFxyXG4gIG1vdW50ZWQoKSB7XHJcbiAgICAvL2NvbnNvbGUubG9nKFwi0JjQvdC40YbQuNCw0LvQuNC30LjRgNCw0L0gd29yZEluZGV4INCyIENyb3Nzd29yZEdyaWQ6XCIsIHRoaXMud29yZEluZGV4KTtcclxuICB9LFxyXG5cclxuICBtZXRob2RzOiB7XHJcbiAgICB1cGRhdGVHcmlkKHJvdywgY29sLCB2YWx1ZSkge1xyXG4gICAgICBpZiAodGhpcy5pc0VkaXRNb2RlKSB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coYNCa0LvQuNC6INCy0YrRgNGF0YMg0LrQu9C10YLQutCwOiDQoNC10LQgJHtyb3d9LCDQmtC+0LvQvtC90LAgJHtjb2x9YCk7XHJcbiAgICAgICAgdGhpcy5jcm9zc3dvcmRHcmlkW3JvdyAtIDFdW2NvbCAtIDFdID0gdmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBpc0NlbGxTZWxlY3RlZChyb3csIGNvbCkge1xyXG4gICAgICBjb25zdCBjZWxsS2V5ID0gYCR7cm93fS0ke2NvbH1gO1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZENlbGxzLnNvbWUoKGNlbGwpID0+IGNlbGwua2V5ID09PSBjZWxsS2V5KTtcclxuICAgIH0sXHJcbiAgICBoYW5kbGVDZWxsQ2xpY2socm93LCBjb2wpIHtcclxuICAgICAgaWYgKCF0aGlzLmlzRWRpdE1vZGUpIHtcclxuICAgICAgICB0aGlzLnRvZ2dsZUNlbGxTZWxlY3Rpb24ocm93LCBjb2wpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHRvZ2dsZUNlbGxTZWxlY3Rpb24ocm93LCBjb2wpIHtcclxuICAgICAgY29uc3Qgd29yZEluZGV4ID0gdGhpcy5jdXJyZW50V29yZEluZGV4OyAvLyDQktC30LXQvNCw0LzQtSDQu9C+0LrQsNC70L3QuNGPINC40L3QtNC10LrRgVxyXG4gICAgICAvL2NvbnNvbGUubG9nKFwiV09SRElOREVYXCIsIHdvcmRJbmRleCk7XHJcbiAgICAgIGNvbnN0IGNlbGxLZXkgPSBgJHtyb3d9LSR7Y29sfWA7XHJcbiAgICAgIGNvbnN0IGNlbGxWYWx1ZSA9IHRoaXMuY3Jvc3N3b3JkR3JpZFtyb3cgLSAxXVtjb2wgLSAxXTtcclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDZWxscy5wdXNoKHsga2V5OiBjZWxsS2V5LCB2YWx1ZTogY2VsbFZhbHVlIH0pO1xyXG4gICAgICAvLyDQo9Cy0LXRgNGP0LLQsNC80LUg0YHQtSwg0YfQtSDQvNCw0YHQuNCy0YrRgiDQt9CwINGC0LXQutGD0YnQsNGC0LAg0LTRg9C80LAg0LUg0LjQvdC40YbQuNCw0LvQuNC30LjRgNCw0L1cclxuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQ2VsbHNQZXJXb3JkW3dvcmRJbmRleF0pIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ2VsbHNQZXJXb3JkW3dvcmRJbmRleF0gPSBuZXcgU2V0KCk7IC8vINCY0L3QuNGG0LjQsNC70LjQt9C40YDQsNC80LUg0LrQsNGC0L4gU2V0LCDQt9CwINC00LAg0LjQt9Cx0LXQs9C90LXQvCDQtNGD0LHQu9C40YDQsNC90LVcclxuICAgICAgfVxyXG4gICAgICAvLyDQn9GA0L7QstC10YDRj9Cy0LDQvNC1INC4INC00L7QsdCw0LLRj9C80LUg0LrQu9C10YLQutCw0YLQsCDQt9CwINC60L7QvdC60YDQtdGC0L3QsNGC0LAg0LTRg9C80LBcclxuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQ2VsbHNQZXJXb3JkW3dvcmRJbmRleF0uaGFzKGNlbGxLZXkpKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENlbGxzUGVyV29yZFt3b3JkSW5kZXhdLmFkZChjZWxsS2V5KTtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKFwiU0VMRUNURURDRUxMU1BFUndvcmQ6XCIsIHRoaXMuc2VsZWN0ZWRDZWxsc1BlcldvcmQpO1xyXG4gICAgICAgIHRoaXMuJGVtaXQoXCJzZWxlY3RlZC1jZWxsc1wiLCB0aGlzLnNlbGVjdGVkQ2VsbHNQZXJXb3JkKTtcclxuICAgICAgICB0aGlzLiRlbWl0KFwiYWRkLWxldHRlclwiLCB7IGxldHRlcjogY2VsbFZhbHVlLCBpZDogY2VsbEtleSwgd29yZEluZGV4IH0pO1xyXG4gICAgICAgIC8qIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgYNCc0LDRgNC60LjRgNCw0L3QsCDQutC70LXRgtC60LAg0LfQsCDQtNGD0LzQsCAke3dvcmRJbmRleH06ICR7Y2VsbEtleX0g0YHRitGBINGB0YLQvtC50L3QvtGB0YI6ICR7Y2VsbFZhbHVlfWBcclxuICAgICAgICApOyovXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICBg0JrQu9C10YLQutCw0YLQsCAke2NlbGxLZXl9INCy0LXRh9C1INC1INC80LDRgNC60LjRgNCw0L3QsCDQt9CwINC00YPQvNCwICR7d29yZEluZGV4fS5gXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjbGVhckFsbE1hcmtlZENlbGxzKCkge1xyXG4gICAgICAvL2NvbnNvbGUubG9nKFwi0L7QsdGJINC80LDRgdC40LIg0L/RgNC10LTQuCDQuNC30YLRgNC40LLQsNC90LVcIiwgdGhpcy5zZWxlY3RlZENlbGxzKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZENlbGxzID0gW107IC8vINCd0YPQu9C40YDQsNC80LUg0L7QsdGJ0LjRjyDQvNCw0YHQuNCyXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDZWxsc1BlcldvcmQgPSB7fTtcclxuICAgICAgdGhpcy53b3JkTnVtYmVycyA9IHt9OyAvLyDQndGD0LvQuNGA0LDQvNC1INC90L7QvNC10YDQsNGC0LAg0L3QsCDQutC70LXRgtC60LjRgtC1XHJcbiAgICB9LFxyXG4gICAgLy/QvNC10YLQvtC0INC30LAg0L/QvtGB0YLQsNCy0Y/QvdC1INC90LAg0L3QvtC80LXRgCDQsiDQv9GK0YDQstCw0YLQsCDQutC70LXRgtC60LAg0LfQsCDQvtGC0LPQvtCy0L7RgNCwXHJcbiAgICBhZGRXb3JkTnVtYmVyKGluZGV4LCBjZWxsKSB7XHJcbiAgICAgIHRoaXMud29yZE51bWJlcnNbY2VsbF0gPSBpbmRleDsgLy8g0KHQstGK0YDQt9Cy0LDQvNC1INC60LvQtdGC0LrQsNGC0LAg0YEg0L3QvtC80LXRgNCwXHJcbiAgICAgIC8vY29uc29sZS5sb2coYNCd0L7QvNC10YAgJHtpbmRleH0g0LUg0LTQvtCx0LDQstC10L0g0LrRitC8INC60LvQtdGC0LrQsCAke2NlbGx9YCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8v0YTRg9C90LrRhtC40L7QvdCw0LvQvdC+0YHRgiDQt9CwINC/0YDQtdC80LjQvdCw0LLQsNC90LUg0L7RgiDQutC70LXRgtC60LAg0LIg0LrQu9C10YLQutCwINGH0YDQtdC3INC60LvQsNCy0LjRiNC90LjRgtC1INGB0YLRgNC10LvQutC4XHJcbiAgICBoYW5kbGVBcnJvd05hdmlnYXRpb24oZXZlbnQsIHJvdywgY29sKSB7XHJcbiAgICAgIGNvbnN0IHRvdGFsUm93cyA9IDI1OyAvLyDQkdGA0L7QuSDRgNC10LTQvtCy0LVcclxuICAgICAgY29uc3QgdG90YWxDb2xzID0gMjU7IC8vINCR0YDQvtC5INC60L7Qu9C+0L3QuFxyXG4gICAgICBsZXQgbmV4dFJvdyA9IHJvdztcclxuICAgICAgbGV0IG5leHRDb2wgPSBjb2w7XHJcblxyXG4gICAgICAvLyDQn9GA0L7QstC10YDRj9Cy0LDQvNC1INC60L7QuSDQutC70LDQstC40Ygg0LUg0L3QsNGC0LjRgdC90LDRglxyXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSBcIkFycm93UmlnaHRcIikge1xyXG4gICAgICAgIG5leHRDb2wgPSBjb2wgPCB0b3RhbENvbHMgPyBjb2wgKyAxIDogY29sO1xyXG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gXCJBcnJvd0xlZnRcIikge1xyXG4gICAgICAgIG5leHRDb2wgPSBjb2wgPiAxID8gY29sIC0gMSA6IGNvbDtcclxuICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09IFwiQXJyb3dEb3duXCIpIHtcclxuICAgICAgICBuZXh0Um93ID0gcm93IDwgdG90YWxSb3dzID8gcm93ICsgMSA6IHJvdztcclxuICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09IFwiQXJyb3dVcFwiKSB7XHJcbiAgICAgICAgbmV4dFJvdyA9IHJvdyA+IDEgPyByb3cgLSAxIDogcm93O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyDQpNC+0LrRg9GB0LjRgNCw0LzQtSDRgdC70LXQtNCy0LDRidCw0YLQsCDQutC70LXRgtC60LBcclxuICAgICAgY29uc3QgbmV4dENlbGwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgY2VsbC0ke25leHRSb3d9LSR7bmV4dENvbH1gKTtcclxuICAgICAgaWYgKG5leHRDZWxsKSB7XHJcbiAgICAgICAgbmV4dENlbGwuZm9jdXMoKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICB9LFxyXG59O1xyXG48L3NjcmlwdD5cclxuXHJcbjxzdHlsZSBzY29wZWQ+XHJcbiNjcm9zc3dvcmQtdGVtcGxhdGUge1xyXG4gIG1heC13aWR0aDogMTAwJTtcclxuICBtYXJnaW46IGF1dG87XHJcbn1cclxuXHJcbi5ncmlkIHtcclxuICBkaXNwbGF5OiBncmlkO1xyXG59XHJcblxyXG4uZ3JpZC1jb2xzLTI1IHtcclxuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyNSwgMWZyKTtcclxuICAvKmdhcDogMnB4OyAvKiDQlNC+0LHQsNCy0Y/QvdC1INC90LAg0LzQsNC70LrQviDRgNCw0LfRgdGC0L7Rj9C90LjQtSDQvNC10LbQtNGDINC/0L7Qu9C10YLQsNGC0LAgKi9cclxufVxyXG5cclxuLmdyaWQtcm93cy0yNSB7XHJcbiAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiByZXBlYXQoMjUsIDFmcik7XHJcbn1cclxuLmluYWN0aXZlLWNlbGwge1xyXG4gIGJvcmRlci1jb2xvcjogcmVkOyAvKiDQnNC+0LbQtdGIINC00LAg0LjQt9C/0L7Qu9C30LLQsNGIINGA0LDQt9C70LjRh9C10L0g0YbQstGP0YIg0LjQu9C4INGB0YLQuNC7ICovXHJcbiAgY3Vyc29yOiBwb2ludGVyOyAvKiDQn9GA0L7QvNC10L3RjyDQutGD0YDRgdC+0YDQsCDQsiDRgNC10LbQuNC8ICfQl9Cw0L/QuNGBJyAqL1xyXG59XHJcbi5pbmFjdGl2ZS1jZWxsLXNlbGVjdGVkIHtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7IC8qINCc0L7QttC10Ygg0LTQsCDQvdCw0YHRgtGA0L7QuNGIINGA0LDQt9C70LjRh9C10L0g0YHRgtC40Lsg0LfQsCDQvNCw0YDQutC40YDQsNC90LjRgtC1INC60LvQtdGC0LrQuCAqL1xyXG59XHJcbi5hYnNvbHV0ZSB7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG59XHJcbi50b3AtMCB7XHJcbiAgdG9wOiAycHg7XHJcbn1cclxuLmxlZnQtMCB7XHJcbiAgbGVmdDogMnB4O1xyXG59XHJcbi50ZXh0LXhzIHtcclxuICBmb250LXNpemU6IDAuNzVyZW07XHJcbn1cclxuLmZvbnQtYm9sZCB7XHJcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbn1cclxuLnRleHQtZ3JheS03MDAge1xyXG4gIGNvbG9yOiAjNGE1NTY4O1xyXG59XHJcbjwvc3R5bGU+XHJcbiIsIjx0ZW1wbGF0ZT5cclxuICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWNvbnRhaW5lclwiPlxyXG4gICAgPCEtLSDQndC+0LzQtdGAINC90LAg0LrRgNGK0YHRgtC+0YHQu9C+0LLQuNGG0LDRgtCwIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNyb3Nzd29yZC1udW1iZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwidGV4dC0zeGwgZm9udC1ib2xkIHRleHQtYmx1ZS03MDAgbWItNCB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgINCh0YrQt9C00LDQstCw0L3QtSDQvdCwINC60YDRitGB0YLQvtGB0LvQvtCy0LjRhtCwIOKElnt7IG5ld051bWJlciB9fVxyXG4gICAgICA8L2gxPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSDQmNC30LHQvtGAINC90LAg0YDQtdC20LjQvCAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RlLXNlbGVjdGlvbiBtYi02XCI+XHJcbiAgICAgIDxsYWJlbFxyXG4gICAgICAgIGZvcj1cImNyb3Nzd29yZC1tb2RlXCJcclxuICAgICAgICBjbGFzcz1cImJsb2NrIHRleHQtbGcgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCBtYi0yXCJcclxuICAgICAgICA+0JjQt9Cx0LXRgNC4INGA0LXQttC40Lw6PC9sYWJlbFxyXG4gICAgICA+XHJcbiAgICAgIDxzZWxlY3RcclxuICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRNb2RlXCJcclxuICAgICAgICBpZD1cImNyb3Nzd29yZC1tb2RlXCJcclxuICAgICAgICBjbGFzcz1cImJsb2NrIHctMS80IHAtMiBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQtbWQgc2hhZG93LXNtIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1ibHVlLTUwMCBmb2N1czpib3JkZXItYmx1ZS01MDBcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG9wdGlvbiB2LWZvcj1cIm1vZGUgaW4gYXZhaWxhYmxlTW9kZXNcIiA6a2V5PVwibW9kZS5pZFwiIDp2YWx1ZT1cIm1vZGVcIj5cclxuICAgICAgICAgIHt7IG1vZGUubmFtZSB9fVxyXG4gICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICA8L3NlbGVjdD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXZcclxuICAgICAgdi1mb3I9XCIocXVlc3Rpb24sIGluZGV4KSBpbiBxdWVzdGlvbnNcIlxyXG4gICAgICA6a2V5PVwiaW5kZXhcIlxyXG4gICAgICBjbGFzcz1cInF1ZXN0aW9uLWZpZWxkXCJcclxuICAgID5cclxuICAgICAgPCEtLSDQn9C+0LvQtSDQt9CwINCy0YrQv9GA0L7RgSAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtNCBtYi0yXCI+XHJcbiAgICAgICAgPGxhYmVsIDpmb3I9XCIncXVlc3Rpb24tJyArIChpbmRleCArIDEpXCIgY2xhc3M9XCJ0ZXh0LWxnIGZvbnQtbWVkaXVtXCJcclxuICAgICAgICAgID7QktGK0L/RgNC+0YEge3sgaW5kZXggKyAxIH19OjwvbGFiZWxcclxuICAgICAgICA+XHJcbiAgICAgICAgPGxhYmVsIDpmb3I9XCIncXVlc3Rpb24taW1hZ2UtJyArIChpbmRleCArIDEpXCI+0JrQsNGH0Lgg0YTQsNC50Ls6PC9sYWJlbD5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgIHR5cGU9XCJmaWxlXCJcclxuICAgICAgICAgIDppZD1cIidxdWVzdGlvbi1pbWFnZS0nICsgKGluZGV4ICsgMSlcIlxyXG4gICAgICAgICAgQGNoYW5nZT1cImhhbmRsZUZpbGVDaGFuZ2UoJGV2ZW50LCBpbmRleClcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgQGNsaWNrPVwidXBsb2FkSW1hZ2UoaW5kZXggKyAxKVwiXHJcbiAgICAgICAgICBjbGFzcz1cImJnLWJsdWUtNTAwIGhvdmVyOmJnLWJsdWUtNzAwIHRleHQtd2hpdGUgZm9udC1ib2xkIHB5LTIgcHgtNCByb3VuZGVkXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICBVcGxvYWRcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZ3JheS02MDBcIj57eyBxdWVzdGlvbnNbaW5kZXhdLnVwbG9hZFN0YXR1cyB9fTwvc3Bhbj5cclxuXHJcbiAgICAgICAgPCEtLSDQmNC30LHQvtGAINC90LAg0LfQsNCz0LDQtNC60LAgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIGlubGluZS1ibG9ja1wiPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgQGNsaWNrPVwidG9nZ2xlRHJvcGRvd24oaW5kZXgpXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJiZy1ibHVlLTUwMCBob3ZlcjpiZy1ibHVlLTcwMCB0ZXh0LXdoaXRlIGZvbnQtYm9sZCBweS0yIHB4LTQgcm91bmRlZFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgINCY0LfQsdC10YDQuCDQt9Cw0LPQsNC00LrQsFxyXG4gICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICB2LWlmPVwiYWN0aXZlRHJvcGRvd24gPT09IGluZGV4XCJcclxuICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSB6LTIwIG10LTEgdy02NCBtYXgtaC02NCBvdmVyZmxvdy15LWF1dG8gYmctcHVycGxlLTUwMCBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQgc2hhZG93LWxnXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgIDxsaVxyXG4gICAgICAgICAgICAgICAgdi1mb3I9XCJyaWRkbGUgaW4gcmlkZGxlc1wiXHJcbiAgICAgICAgICAgICAgICA6a2V5PVwicmlkZGxlLmlkXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwicHgtNCBweS0yIGhvdmVyOmJnLWdyYXktMTAwIGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdFJpZGRsZShyaWRkbGUsIGluZGV4KVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3sgcmlkZGxlLnRpdGxlIH19XHJcbiAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIHYtaWY9XCJxdWVzdGlvbi50eXBlID09PSAncmlkZGxlJ1wiXHJcbiAgICAgICAgICBAY2xpY2s9XCJjbGVhclJpZGRsZShpbmRleClcIlxyXG4gICAgICAgICAgY2xhc3M9XCJiZy1yZWQtNTAwIGhvdmVyOmJnLXJlZC03MDAgdGV4dC13aGl0ZSBmb250LWJvbGQgcHktMSBweC0zIHJvdW5kZWQgbWwtMlwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAg0JjQt9GH0LjRgdGC0Lgg0LfQsNCz0LDQtNC60LBcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS0gPGlucHV0XHJcbiAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgIDppZD1cIidxdWVzdGlvbi0nICsgKGluZGV4ICsgMSlcIlxyXG4gICAgICAgIHYtbW9kZWw9XCJxdWVzdGlvbi50ZXh0XCJcclxuICAgICAgICBjbGFzcz1cInctZnVsbCBwLTIgYm9yZGVyIHJvdW5kZWRcIlxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwi0JLRitCy0LXQtNC10YLQtSDQstGK0L/RgNC+0YEuLi5cIlxyXG4gICAgICAgIDpkaXNhYmxlZD1cInF1ZXN0aW9uLnR5cGUgPT09ICdyaWRkbGUnXCJcclxuICAgICAgLz4tLT5cclxuICAgICAgPCEtLSDQotCe0JLQkCDQlSDQndCe0JLQmNCv0KIg0JHQm9Ce0JogKNC30LDQvNC10L3Rj9GI0LUg0LTQvtGB0LXQs9Cw0YjQvdC40Y8g0LXQtNC40L3QuNGH0LXQvSA8dGV4dGFyZWE+INC30LAg0LLRitC/0YDQvtGBKSAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgbWQ6ZmxleC1yb3cgZ2FwLTQgaXRlbXMtc3RhcnRcIj5cclxuICAgICAgICA8IS0tINCS0KrQn9Cg0J7QoSDigJMgMi8zIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgbWQ6dy0yLzMgbWluLXctMFwiPlxyXG4gICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgIDpmb3I9XCIncXVlc3Rpb24tJyArIChpbmRleCArIDEpXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJibG9jayB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDAgbWItMVwiXHJcbiAgICAgICAgICAgID7QktGK0L/RgNC+0YE8L2xhYmVsXHJcbiAgICAgICAgICA+XHJcblxyXG4gICAgICAgICAgPHRleHRhcmVhXHJcbiAgICAgICAgICAgIDppZD1cIidxdWVzdGlvbi0nICsgKGluZGV4ICsgMSlcIlxyXG4gICAgICAgICAgICB2LW1vZGVsPVwicXVlc3Rpb24udGV4dFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsIHAtMiBib3JkZXIgcm91bmRlZFwiXHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwi0JLRitCy0LXQtNC10YLQtSDQstGK0L/RgNC+0YEuLi5cIlxyXG4gICAgICAgICAgICA6ZGlzYWJsZWQ9XCJxdWVzdGlvbi50eXBlID09PSAncmlkZGxlJ1wiXHJcbiAgICAgICAgICAgIHJvd3M9XCIzXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSDQntCR0K/QodCd0JXQndCY0JUg4oCTIDEvMyAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIG1kOnctMS8zXCI+XHJcbiAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgOmZvcj1cIidleHBsYW5hdGlvbi0nICsgKGluZGV4ICsgMSlcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCBtYi0xXCJcclxuICAgICAgICAgICAgPtCe0LHRj9GB0L3QtdC90LjQtSAo0L/QviDQuNC30LHQvtGAKTwvbGFiZWxcclxuICAgICAgICAgID5cclxuICAgICAgICAgIDx0ZXh0YXJlYVxyXG4gICAgICAgICAgICA6aWQ9XCInZXhwbGFuYXRpb24tJyArIChpbmRleCArIDEpXCJcclxuICAgICAgICAgICAgdi1tb2RlbD1cInF1ZXN0aW9uLmV4cGxhbmF0aW9uXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgcC0yIGJvcmRlciByb3VuZGVkXCJcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLQmtGA0LDRgtC60L4g0L7QsdGP0YHQvdC10L3QuNC1LCDQv9C+0LrQsNC30LLQsCDRgdC1INGB0LvQtdC0INGA0LXRiNCw0LLQsNC90LXigKZcIlxyXG4gICAgICAgICAgICByb3dzPVwiM1wiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0g0J/QvtC70LUg0LfQsCDQvtGC0LPQvtCy0L7RgCDQuCDRh9C10LrQsdC+0LrRgSDQt9Cw0LXQtNC90L4sINC60L7QuNGC0L4g0YHQtSDQv9C+0LrQsNC30LLQsNGCINGB0LDQvNC+INC60L7Qs9Cw0YLQviDQv9GA0LXQtNC40YjQvdC40Y/RgiDQstGK0L/RgNC+0YEg0LUg0LfQsNCy0YrRgNGI0LXQvSAtLT5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIHYtaWY9XCJpbmRleCA9PT0gMCB8fCBxdWVzdGlvbnNbaW5kZXggLSAxXS5pc0NvbXBsZXRlXCJcclxuICAgICAgICBjbGFzcz1cImFuc3dlci1maWVsZFwiXHJcbiAgICAgID5cclxuICAgICAgICA8bGFiZWxcclxuICAgICAgICAgIDpmb3I9XCInYW5zd2VyLScgKyAoaW5kZXggKyAxKVwiXHJcbiAgICAgICAgICBjbGFzcz1cImJsb2NrIG1iLTIgdGV4dC1zbSBmb250LW1lZGl1bSBtdC0yXCJcclxuICAgICAgICAgID7QntGC0LPQvtCy0L7RgDo8L2xhYmVsXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgOmlkPVwiJ2Fuc3dlci0nICsgKGluZGV4ICsgMSlcIlxyXG4gICAgICAgICAgdi1tb2RlbD1cImFuc3dlcnNbaW5kZXhdXCJcclxuICAgICAgICAgIGNsYXNzPVwidy1mdWxsIHAtMiBib3JkZXIgcm91bmRlZCBiZy1ncmF5LTEwMFwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cItCh0LXQu9C10LrRgtC40YDQsNC50YLQtSDQsdGD0LrQstC4INC+0YIg0YDQtdGI0LXRgtC60LDRgtCwXCJcclxuICAgICAgICAgIHJlYWRvbmx5XHJcbiAgICAgICAgLz5cclxuICAgICAgICA8IS0tINCn0LXQutCx0L7QutGBIFwi0JPQvtGC0L7QstC+XCIg0LTQviDQv9C+0LvQtdGC0L4g0LfQsCDQvtGC0LPQvtCy0L7RgCAtLT5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgbXQtMlwiPlxyXG4gICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgIHYtbW9kZWw9XCJxdWVzdGlvbi5pc0NvbXBsZXRlXCJcclxuICAgICAgICAgICAgQGNoYW5nZT1cImFjdGl2YXRlTmV4dEFuc3dlcihpbmRleCksIGNvbXBsZXRlQW5zd2VyKGluZGV4KVwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0yIHRleHQtc21cIj7Qk9C+0YLQvtCy0L48L3NwYW4+XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0g0JHRg9GC0L7QvSDQt9CwINC/0YDQvtC80Y/QvdCwINC90LAg0YDQtdC20LjQvNCwINC4INC00L7QsdCw0LLRj9C90LUg0L3QsCDQvdC+0LLQuCDQstGK0L/RgNC+0YHQuCAtLT5cclxuICAgIDxidXR0b25cclxuICAgICAgQGNsaWNrPVwidG9nZ2xlTW9kZVwiXHJcbiAgICAgIGNsYXNzPVwibXQtMiBiZy1ncmVlbi01MDAgdGV4dC13aGl0ZSBweC00IHB5LTIgcm91bmRlZFwiXHJcbiAgICA+XHJcbiAgICAgIHt7IG1vZGVUZXh0IH19XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b25cclxuICAgICAgQGNsaWNrPVwiYWRkUXVlc3Rpb25cIlxyXG4gICAgICBjbGFzcz1cIm10LTIgYmctYmx1ZS01MDAgdGV4dC13aGl0ZSBweC00IHB5LTIgcm91bmRlZFwiXHJcbiAgICA+XHJcbiAgICAgINCU0L7QsdCw0LLQuCDQstGK0L/RgNC+0YFcclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICBAY2xpY2s9XCJzdWJtaXRDcm9zc3dvcmREYXRhXCJcclxuICAgICAgY2xhc3M9XCJtdC0yIGJnLWdyZWVuLTUwMCB0ZXh0LXdoaXRlIHB4LTQgcHktMiByb3VuZGVkXCJcclxuICAgID5cclxuICAgICAg0JfQsNC/0LDQt9C4INC60YDRitGB0YLQvtGB0LvQvtCy0LjRhtCw0YLQsFxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c2NyaXB0PlxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgbmFtZTogXCJDcm9zc3dvcmRIZWFkZXJcIixcclxuICBwcm9wczoge1xyXG4gICAgbGV0dGVyVG9BZGQ6IE9iamVjdCxcclxuICAgIHNlbGVjdGVkQ2VsbHNQZXJXb3JkOiB7XHJcbiAgICAgIHR5cGU6IE9iamVjdCxcclxuICAgICAgcmVxdWlyZWQ6IHRydWUsXHJcbiAgICB9LFxyXG4gICAgbmV3TnVtYmVyOiB7XHJcbiAgICAgIHR5cGU6IE51bWJlcixcclxuICAgICAgcmVxdWlyZWQ6IHRydWUsXHJcbiAgICB9LFxyXG4gICAgYXZhaWxhYmxlTW9kZXM6IHtcclxuICAgICAgdHlwZTogQXJyYXksXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgfSxcclxuICB9LFxyXG4gIHdhdGNoOiB7XHJcbiAgICBsZXR0ZXJUb0FkZChuZXdEYXRhKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwi0J/QvtC70YPRh9C10L3QuCDQvdC+0LLQuCDQtNCw0L3QvdC4OlwiLCBuZXdEYXRhKTsgLy8g0J/RgNC+0LLQtdGA0LrQsCDQvdCwINCx0YPQutCy0LDRgtCwINC4IElEXHJcbiAgICAgIGlmIChuZXdEYXRhICYmIG5ld0RhdGEubGV0dGVyKSB7XHJcbiAgICAgICAgdGhpcy5hZGRMZXR0ZXJUb0Fuc3dlcihuZXdEYXRhLmxldHRlcik7IC8vINCf0YDQtdC00LDQstCw0L3QtSDQvdCwINCx0YPQutCy0LDRgtCwINC60YrQvCDQvNC10YLQvtC00LBcclxuICAgICAgfVxyXG4gICAgfSxcclxuICB9LFxyXG4gIGRhdGEoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzZWxlY3RlZE1vZGU6IG51bGwsIC8vINCX0LDQv9Cw0LfQstCw0LzQtSDQuNC30LHRgNCw0L3QuNGPINGA0LXQttC40LxcclxuICAgICAgcXVlc3Rpb25zOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGV4dDogXCJcIixcclxuICAgICAgICAgIGV4cGxhbmF0aW9uOiBcIlwiLFxyXG4gICAgICAgICAgaW1hZ2VQYXRoOiBcIlwiLFxyXG4gICAgICAgICAgdXBsb2FkU3RhdHVzOiBcIlwiLFxyXG4gICAgICAgICAgaXNDb21wbGV0ZTogZmFsc2UsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0ZXh0OiBcIlwiLFxyXG4gICAgICAgICAgZXhwbGFuYXRpb246IFwiXCIsXHJcbiAgICAgICAgICBpbWFnZVBhdGg6IFwiXCIsXHJcbiAgICAgICAgICB1cGxvYWRTdGF0dXM6IFwiXCIsXHJcbiAgICAgICAgICBpc0NvbXBsZXRlOiBmYWxzZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRleHQ6IFwiXCIsXHJcbiAgICAgICAgICBleHBsYW5hdGlvbjogXCJcIixcclxuICAgICAgICAgIGltYWdlUGF0aDogXCJcIixcclxuICAgICAgICAgIHVwbG9hZFN0YXR1czogXCJcIixcclxuICAgICAgICAgIGlzQ29tcGxldGU6IGZhbHNlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGV4dDogXCJcIixcclxuICAgICAgICAgIGV4cGxhbmF0aW9uOiBcIlwiLFxyXG4gICAgICAgICAgaW1hZ2VQYXRoOiBcIlwiLFxyXG4gICAgICAgICAgdXBsb2FkU3RhdHVzOiBcIlwiLFxyXG4gICAgICAgICAgaXNDb21wbGV0ZTogZmFsc2UsXHJcbiAgICAgICAgfSxcclxuICAgICAgXSwgLy8g0J3QsNGH0LDQu9C90Lgg0LLRitC/0YDQvtGB0LhcclxuICAgICAgYW5zd2VyczogW1wiXCIsIFwiXCIsIFwiXCIsIFwiXCJdLCAvLyDQn9C+0LvQtdGC0LAg0LfQsCDQvtGC0LPQvtCy0L7RgNC40YLQtSwg0YHQstGK0YDQt9Cw0L3QuCDRgSDQstGK0L/RgNC+0YHQuNGC0LVcclxuICAgICAgaXNFZGl0TW9kZTogdHJ1ZSwgLy8g0KHQu9C10LTQuCDRgtC10LrRg9GJ0LjRjyDRgNC10LbQuNC8XHJcbiAgICAgIHJlY29yZGVkQW5zd2VyczogW10sIC8vINCd0L7QsiDQvNCw0YHQuNCyINC30LAg0YHRitGF0YDQsNC90LXQvdC40LUg0L3QsCDQvtGC0LPQvtCy0L7RgNC40YLQtVxyXG4gICAgICBzdGFydFBvc2l0aW9uOiBudWxsLCAvLyDQndCw0YfQsNC70L3QsCDQv9C+0LfQuNGG0LjRj1xyXG4gICAgICBjdXJyZW50TGV0dGVyOiBcIlwiLCAvLyDQm9C+0LrQsNC70L3QsCDQv9GA0L7QvNC10L3Qu9C40LLQsCDQt9CwINCx0YPQutCy0LDRgtCwXHJcbiAgICAgIGN1cnJlbnRXb3JkSW5kZXg6IDAsIC8vINCd0LDRh9Cw0LvQtdC9INC40L3QtNC10LrRgVxyXG4gICAgICBjdXJyZW50UXVlc3Rpb246IHsgdGV4dDogXCJcIiwgaW1hZ2VQYXRoOiBcIlwiIH0sIC8vINCi0LXQutGD0YnQuNGP0YIg0LLRitC/0YDQvtGBXHJcbiAgICAgIHNlbGVjdGVkRmlsZTogbnVsbCwgLy8g0JjQt9Cx0YDQsNC90LjRj9GCINGE0LDQudC7XHJcbiAgICAgIGF0dGFjaG1lbnRGaWxlUGF0aDoge1xyXG4gICAgICAgIDE6IG51bGwsXHJcbiAgICAgICAgMjogbnVsbCxcclxuICAgICAgICAzOiBudWxsLFxyXG4gICAgICAgIDQ6IG51bGwsXHJcbiAgICAgIH0sXHJcbiAgICAgIGNyb3Nzd29yZERhdGE6IHtcclxuICAgICAgICBjcm9zc3dvcmROdW1iZXI6IG51bGwsXHJcbiAgICAgICAgZW50cmllczogW10sIC8vINCS0YrQv9GA0L7RgdC4LCDQvtGC0LPQvtCy0L7RgNC4INC4INC60L7QvtGA0LTQuNC90LDRgtC4XHJcbiAgICAgIH0sXHJcbiAgICAgIHF1ZXN0aW9uTnVtYmVyOiBcIlwiLCAvL9C/0YDQvtC80LXQvdC70LjQstCwINC30LAg0L3QvtC80LXRgNCwINC90LAg0LLRitC/0YDQvtGB0LAg0LIg0LrRgNGK0YHRgtC+0YHQu9C+0LLQuNGG0LDRgtCwXHJcbiAgICAgIG5ld0Nyb3Nzd29yZE51bWJlcjogdGhpcy5uZXdOdW1iZXIsIC8vINCh0YrRhdGA0LDQvdGP0LLQsNC80LUg0L3QvtCy0LjRjyDQvdC+0LzQtdGAINCyINC70L7QutCw0LvQvdCwINC/0YDQvtC80LXQvdC70LjQstCwXHJcbiAgICAgIHJpZGRsZXM6IFtdLCAvL9C30LDQs9Cw0LTQutC40YLQtVxyXG4gICAgICBhY3RpdmVEcm9wZG93bjogbnVsbCwgLy8g0LjQvdC00LXQutGBINC90LAg0L7RgtCy0L7RgNC10L3QvtGC0L4g0LzQtdC90Y4g0LfQsCDQt9Cw0LPQsNC00LrQuNGC0LVcclxuICAgIH07XHJcbiAgfSxcclxuICBjcmVhdGVkKCkge1xyXG4gICAgY29uc29sZS5sb2coXCJQcm9wcyAtIGF2YWlsYWJsZU1vZGVzOlwiLCB0aGlzLmF2YWlsYWJsZU1vZGVzKTtcclxuICAgIHRoaXMuYXZhaWxhYmxlTW9kZXMuZm9yRWFjaCgobW9kZSwgaW5kZXgpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coYE1vZGUgJHtpbmRleCArIDF9OmAsIG1vZGUpO1xyXG4gICAgfSk7XHJcbiAgfSxcclxuICBtb3VudGVkKCkge1xyXG4gICAgaWYgKHdpbmRvdy5yaWRkbGVzKSB7XHJcbiAgICAgIHRoaXMucmlkZGxlcyA9IHdpbmRvdy5yaWRkbGVzO1xyXG4gICAgICBjb25zb2xlLmxvZyhcItCX0LDRgNC10LTQtdC90Lgg0LfQsNCz0LDQtNC60Lg6XCIsIHRoaXMucmlkZGxlcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCLQndGP0LzQsCDQv9C+0LTQsNC00LXQvdC4INC30LDQs9Cw0LTQutC4IChyaWRkbGVzKSDQvtGCIHdpbmRvdy5cIik7XHJcbiAgICB9XHJcbiAgfSxcclxuICBjb21wdXRlZDoge1xyXG4gICAgbW9kZVRleHQoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmlzRWRpdE1vZGUgPyBcItCX0LDQv9C+0YfQvdC4INC30LDQv9C40YFcIiA6IFwi0JLRitGA0L3QuCDQsiDRh9C10YDQvdC+0LLQsFwiO1xyXG4gICAgfSxcclxuICB9LFxyXG4gIG1ldGhvZHM6IHtcclxuICAgIGFkZFF1ZXN0aW9uKCkge1xyXG4gICAgICB0aGlzLnF1ZXN0aW9ucy5wdXNoKHsgdGV4dDogXCJcIiwgaXNDb21wbGV0ZTogZmFsc2UgfSk7XHJcbiAgICAgIHRoaXMuYW5zd2Vycy5wdXNoKFwiXCIpOyAvLyDQlNC+0LHQsNCy0Y8g0L/RgNCw0LfQvdC+INC/0L7Qu9C1INC30LAg0L7RgtCz0L7QstC+0YAg0LfQsCDQvdC+0LLQuNGPINCy0YrQv9GA0L7RgVxyXG4gICAgICBpZiAoIXRoaXMuaXNFZGl0TW9kZSkge1xyXG4gICAgICAgIHRoaXMuY2xlYXJBbnN3ZXJzKCk7IC8vINCd0YPQu9C40YDQsNC80LUg0L7RgtCz0L7QstC+0YDQuNGC0LUg0Lgg0YfQtdC60LHQvtC60YHQvtCy0LXRgtC1XHJcbiAgICAgICAgdGhpcy4kZW1pdChcImNsZWFyLWFsbC1tYXJrZWQtY2VsbHNcIik7IC8vINCY0LfQv9GA0LDRidCw0LzQtSDRgdGK0LHQuNGC0LjQtSDQt9CwINC40LfRh9C40YHRgtCy0LDQvdC1INC90LAg0LzQsNGA0LrQuNGA0L7QstC60LjRgtC1XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICB0b2dnbGVNb2RlKCkge1xyXG4gICAgICB0aGlzLmlzRWRpdE1vZGUgPSAhdGhpcy5pc0VkaXRNb2RlO1xyXG4gICAgICBjb25zb2xlLmxvZyhcItCd0L7QsiDRgNC10LbQuNC8IChpc0VkaXRNb2RlKTpcIiwgdGhpcy5pc0VkaXRNb2RlKTsgLy8g0J/QvtC60LDQt9Cy0LAg0YLQtdC60YPRidC+0YLQviDRgdGK0YHRgtC+0Y/QvdC40LVcclxuICAgICAgdGhpcy4kZW1pdChcImNoYW5nZS1tb2RlXCIsIHRoaXMuaXNFZGl0TW9kZSk7XHJcbiAgICAgIGlmICh0aGlzLmlzRWRpdE1vZGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcItCy0LvQuNC30LDQvNC1INCyIGlmXCIpO1xyXG4gICAgICAgIHRoaXMuY2xlYXJBbnN3ZXJzKCk7IC8vINCY0LfRh9C40YHRgtCy0LDQvNC1INC+0YLQs9C+0LLQvtGA0LjRgtC1INC/0YDQuCDQstGA0YrRidCw0L3QtSDQsiBcItGH0LXRgNC90L7QstCwXCJcclxuICAgICAgICBjb25zb2xlLmxvZyhcItGB0LvQtdC0IGNsZWFyXCIpO1xyXG4gICAgICAgIHRoaXMuJGVtaXQoXCJjbGVhci1hbGwtbWFya2VkLWNlbGxzXCIpOyAvLyDQmNC30L/RgNCw0YnQsNC80LUg0YHRitCx0LjRgtC40LUg0LrRitC8IGFwcC5qc1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGFjdGl2YXRlTmV4dEFuc3dlcihpbmRleCkge1xyXG4gICAgICAvLyDQnNC10YLQvtC00YrRgiDRidC1INGB0LUg0LPRgNC40LbQuCDQt9CwINCw0LrRgtC40LLQuNGA0LDQvdC10YLQviDQvdCwINGB0LvQtdC00LLQsNGJ0L7RgtC+INC/0L7Qu9C1INC30LAg0L7RgtCz0L7QstC+0YBcclxuICAgICAgaWYgKHRoaXMucXVlc3Rpb25zW2luZGV4XS5pc0NvbXBsZXRlICYmIGluZGV4IDwgdGhpcy5hbnN3ZXJzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uc1tpbmRleCArIDFdLmlzQ29tcGxldGUgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5jdXJyZW50V29yZEluZGV4IDwgdGhpcy5xdWVzdGlvbnMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFdvcmRJbmRleCArPSAxO1xyXG4gICAgICAgIHRoaXMuJGVtaXQoXCJ1cGRhdGUtd29yZC1pbmRleFwiLCB0aGlzLmN1cnJlbnRXb3JkSW5kZXgpOyAvLyDQmNC30L/RgNCw0YnQsNC90LUg0LrRitC8IGFwcC5qc1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiV09SRElOREVYOlwiLCB0aGlzLmN1cnJlbnRXb3JkSW5kZXgpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHRvZ2dsZURyb3Bkb3duKGluZGV4KSB7XHJcbiAgICAgIGlmICh0aGlzLmFjdGl2ZURyb3Bkb3duID09PSBpbmRleCkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlRHJvcGRvd24gPSBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlRHJvcGRvd24gPSBpbmRleDtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIHNlbGVjdFJpZGRsZShyaWRkbGUsIGluZGV4KSB7XHJcbiAgICAgIHRoaXMucXVlc3Rpb25zW2luZGV4XS50ZXh0ID0gcmlkZGxlLnF1ZXN0aW9uO1xyXG4gICAgICB0aGlzLnF1ZXN0aW9uc1tpbmRleF0ucmlkZGxlSWQgPSByaWRkbGUuaWQ7XHJcbiAgICAgIHRoaXMucXVlc3Rpb25zW2luZGV4XS50eXBlID0gXCJyaWRkbGVcIjtcclxuICAgICAgdGhpcy5hY3RpdmVEcm9wZG93biA9IG51bGw7XHJcbiAgICAgIGNvbnNvbGUubG9nKGDQmNC30LHRgNCw0L3QsCDQt9Cw0LPQsNC00LrQsDogJHtyaWRkbGUudGl0bGV9YCk7XHJcbiAgICB9LFxyXG4gICAgY2xlYXJSaWRkbGUoaW5kZXgpIHtcclxuICAgICAgdGhpcy5xdWVzdGlvbnNbaW5kZXhdLnJpZGRsZUlkID0gbnVsbDtcclxuICAgICAgdGhpcy5xdWVzdGlvbnNbaW5kZXhdLnR5cGUgPSBcInRleHRcIjtcclxuICAgICAgdGhpcy5xdWVzdGlvbnNbaW5kZXhdLnRleHQgPSBcIlwiO1xyXG4gICAgICB0aGlzLnF1ZXN0aW9uc1tpbmRleF0uZXhwbGFuYXRpb24gPSBcIlwiO1xyXG4gICAgfSxcclxuICAgIGFkZExldHRlclRvQW5zd2VyKGxldHRlcikge1xyXG4gICAgICBjb25zdCBhY3RpdmVBbnN3ZXJJbmRleCA9IHRoaXMucXVlc3Rpb25zLmZpbmRJbmRleCgocSkgPT4gIXEuaXNDb21wbGV0ZSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwi0KLQtdC60YPRiSDQuNC90LTQtdC60YEg0LfQsCDQtNC+0LHQsNCy0Y/QvdC1OlwiLCBhY3RpdmVBbnN3ZXJJbmRleCk7XHJcbiAgICAgIGlmIChhY3RpdmVBbnN3ZXJJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICB0aGlzLmFuc3dlcnNbYWN0aXZlQW5zd2VySW5kZXhdICs9IGxldHRlcjtcclxuICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgIGDQlNC+0LHQsNCy0LXQvdCwINCx0YPQutCy0LAgJyR7bGV0dGVyfScg0LrRitC8INC+0YLQs9C+0LLQvtGAICR7YWN0aXZlQW5zd2VySW5kZXh9YFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBjb21wbGV0ZUFuc3dlcihpbmRleCkge1xyXG4gICAgICB0aGlzLnF1ZXN0aW9uc1tpbmRleF0uaXNDb21wbGV0ZSA9IHRydWU7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwicXVlc3Rpb24taW5kZXhcIiwgdGhpcy5xdWVzdGlvbnNbaW5kZXhdKTtcclxuICAgICAgLy8g0J/RgNC+0LLQtdGA0Y/QstCw0LzQtSDQtNCw0LvQuCDQuNC80LAg0LzQsNGA0LrQuNGA0LDQvdC4INC60LvQtdGC0LrQuCDQt9CwINGC0LXQutGD0YnQsNGC0LAg0LTRg9C80LBcclxuICAgICAgY29uc3Qgd29yZENlbGxzID0gdGhpcy5zZWxlY3RlZENlbGxzUGVyV29yZFtpbmRleF07XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiV09SRENFTEw6XCIsIHdvcmRDZWxscyk7XHJcbiAgICAgIGlmICh3b3JkQ2VsbHMgJiYgd29yZENlbGxzLnNpemUgPiAwKSB7XHJcbiAgICAgICAgY29uc3QgZmlyc3RDZWxsRm9yV29yZCA9IEFycmF5LmZyb20od29yZENlbGxzKVswXTsgLy8g0J/RitGA0LLQsNGC0LAg0LrQu9C10YLQutCwINC30LAg0YLQtdC60YPRidC40Y8g0L7RgtCz0L7QstC+0YBcclxuICAgICAgICB0aGlzLnN0YXJ0UG9zaXRpb24gPSBmaXJzdENlbGxGb3JXb3JkOyAvLyDQl9Cw0L/QsNC30Lgg0Y8g0LIgYGRhdGEoKWBcclxuICAgICAgICB0aGlzLiRlbWl0KFwiYWRkLXdvcmQtbnVtYmVyXCIsIHtcclxuICAgICAgICAgIGluZGV4OiBpbmRleCArIDEsXHJcbiAgICAgICAgICBjZWxsOiBmaXJzdENlbGxGb3JXb3JkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgYNCY0LfQv9GA0LDRidCw0LzQtSDQvdC+0LzQtdGAICR7aW5kZXggKyAxfSDQt9CwINC60LvQtdGC0LrQsCAke2ZpcnN0Q2VsbEZvcldvcmR9YFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKGDQndGP0LzQsCDQvNCw0YDQutC40YDQsNC90Lgg0LrQu9C10YLQutC4INC30LAg0L7RgtCz0L7QstC+0YAg0YEg0LjQvdC00LXQutGBICR7aW5kZXh9YCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vINCa0L7Qs9Cw0YLQviDQsNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgNGK0YIg0L7RgtCx0LXQu9C10LbQuCDigJ7Qk9C+0YLQvtCy0L7igJwsINC30LDQv9C40YHQstCw0LzQtSDQvtGC0LPQvtCy0L7RgNCwINC4INCy0YrQv9GA0L7RgdCwXHJcbiAgICAgIGNvbnN0IGFuc3dlclRleHQgPSB0aGlzLmFuc3dlcnNbaW5kZXhdO1xyXG4gICAgICBjb25zdCBxdWVzdGlvblRleHQgPSB0aGlzLnF1ZXN0aW9uc1tpbmRleF0udGV4dDtcclxuICAgICAgY29uc3QgZXhwbGFuYXRpb25UZXh0ID1cclxuICAgICAgICAodGhpcy5xdWVzdGlvbnNbaW5kZXhdLmV4cGxhbmF0aW9uIHx8IFwiXCIpLnRyaW0oKSB8fCBudWxsO1xyXG4gICAgICBjb25zb2xlLmxvZyhcIkFUVEFDSE1FTlQ6XCIsIHRoaXMuYXR0YWNobWVudEZpbGVQYXRoKTtcclxuICAgICAgaWYgKGFuc3dlclRleHQgJiYgcXVlc3Rpb25UZXh0KSB7XHJcbiAgICAgICAgLy8g0J7Qv9GA0LXQtNC10LvRj9C90LUg0L3QsCDQv9C+0YHQvtC60LDRgtCwXHJcbiAgICAgICAgY29uc3QgY29vcmRpbmF0ZXNBcnJheSA9IEFycmF5LmZyb20od29yZENlbGxzKTtcclxuICAgICAgICBsZXQgZGlyZWN0aW9uID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgY29vcmRpbmF0ZXNBcnJheS5ldmVyeShcclxuICAgICAgICAgICAgKGNvb3JkKSA9PiBjb29yZC5zcGxpdChcIi1cIilbMF0gPT09IGNvb3JkaW5hdGVzQXJyYXlbMF0uc3BsaXQoXCItXCIpWzBdXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBkaXJlY3Rpb24gPSBcImhvcml6b250YWxcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgY29vcmRpbmF0ZXNBcnJheS5ldmVyeShcclxuICAgICAgICAgICAgKGNvb3JkKSA9PiBjb29yZC5zcGxpdChcIi1cIilbMV0gPT09IGNvb3JkaW5hdGVzQXJyYXlbMF0uc3BsaXQoXCItXCIpWzFdXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBkaXJlY3Rpb24gPSBcInZlcnRpY2FsXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8v0L/QvtC/0YrQu9Cy0LDQvNC1INC80LDRgdC40LLQsCDRgdC70LXQtCDQstGB0Y/QutC+INC90LDRgtC40YHQutCw0L3QtSDQvdCwIFwi0JPQvtGC0L7QstC+XCIg0YEg0LLRgdC40YfQutC4INC00LDQvdC90Lgg0LfQsCDQv9C+0LTQsNCy0LDQvdC1INC60YrQvCDQkdCUXHJcbiAgICAgICAgY29uc3QgcmVjb3JkID0ge1xyXG4gICAgICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uVGV4dCxcclxuICAgICAgICAgIGV4cGxhbmF0aW9uOiBleHBsYW5hdGlvblRleHQsXHJcbiAgICAgICAgICBhbnN3ZXI6IGFuc3dlclRleHQsXHJcbiAgICAgICAgICBjb29yZGluYXRlczogQXJyYXkuZnJvbSh3b3JkQ2VsbHMpLFxyXG4gICAgICAgICAgcXVlc3Rpb25OdW1iZXI6IGluZGV4ICsgMSxcclxuICAgICAgICAgIGF0dGFjaG1lbnRGaWxlUGF0aDogdGhpcy5hdHRhY2htZW50RmlsZVBhdGhbaW5kZXggKyAxXSxcclxuICAgICAgICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uLFxyXG4gICAgICAgICAgc3RhcnRQb3NpdGlvbjogdGhpcy5zdGFydFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vINCU0L7QsdCw0LLRj9C80LUg0YHQsNC80L4g0LDQutC+INC1INC30LDQs9Cw0LTQutCwXHJcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25zW2luZGV4XS50eXBlID09PSBcInJpZGRsZVwiKSB7XHJcbiAgICAgICAgICByZWNvcmQucmlkZGxlSWQgPSB0aGlzLnF1ZXN0aW9uc1tpbmRleF0ucmlkZGxlSWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlY29yZGVkQW5zd2Vycy5wdXNoKHJlY29yZCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCLQl9Cw0L/QuNGB0LDQvdC4INC+0YLQs9C+0LLQvtGA0Lg6XCIsIHRoaXMucmVjb3JkZWRBbnN3ZXJzKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIHVwZGF0ZUFuc3dlcihpbmRleCwgbGV0dGVyKSB7XHJcbiAgICAgIHRoaXMuYW5zd2Vyc1tpbmRleF0gKz0gbGV0dGVyOyAvLyDQlNC+0LHQsNCy0Y8g0LjQt9Cx0YDQsNC90LDRgtCwINCx0YPQutCy0LAg0LrRitC8INC+0YLQs9C+0LLQvtGA0LBcclxuICAgIH0sXHJcbiAgICBjbGVhckFuc3dlcnMoKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwi0KLQtdC60YPRidC+INGB0YrRgdGC0L7Rj9C90LjQtSDQvdCwIGFuc3dlcnM6XCIsIHRoaXMuYW5zd2Vycyk7XHJcbiAgICAgIHRoaXMuYW5zd2VycyA9IHRoaXMuYW5zd2Vycy5tYXAoKCkgPT4gXCJcIik7IC8vINCd0YPQu9C40YDQsNC80LUg0LLRgdC40YfQutC4INC+0YLQs9C+0LLQvtGA0LhcclxuICAgICAgdGhpcy5yZWNvcmRlZEFuc3dlcnMgPSBbXTtcclxuICAgICAgY29uc29sZS5sb2coXCLQotC10LrRg9GJ0L4g0YHRitGB0YLQvtGP0L3QuNC1INC90LAgcXVlc3Rpb25zOlwiLCB0aGlzLnF1ZXN0aW9ucyk7XHJcbiAgICAgIHRoaXMucXVlc3Rpb25zLmZvckVhY2goKHEpID0+IChxLmlzQ29tcGxldGUgPSBmYWxzZSkpOyAvLyDQndGD0LvQuNGA0LDQvNC1INGH0LXQutCx0L7QutGB0L7QstC10YLQtVxyXG4gICAgICB0aGlzLmN1cnJlbnRXb3JkSW5kZXggPSAwOyAvLyDQktGA0YrRidCw0LzQtSDQuNC90LTQtdC60YHQsCDQvdCwINC/0YrRgNCy0LjRjyDQstGK0L/RgNC+0YFcclxuICAgICAgY29uc29sZS5sb2coXCLQmNC30L/RgNCw0YnQsNC80LUgcmVzZXQtd29yZC1pbmRleC5cIik7XHJcbiAgICAgIHRoaXMuJGVtaXQoXCJyZXNldC13b3JkLWluZGV4XCIsIDApOyAvLyDQmNC30L/RgNCw0YnQsNC80LUg0L3QvtCy0LjRjyDQuNC90LTQtdC60YEg0LrRitC8INGA0L7QtNC40YLQtdC70Y9cclxuICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgXCLQndGD0LvQuNGA0LDQvSBjdXJyZW50V29yZEluZGV4INCyIENyb3Nzd29yZEhlYWRlcjpcIixcclxuICAgICAgICB0aGlzLmN1cnJlbnRXb3JkSW5kZXhcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5jdXJyZW50V29yZEluZGV4ID0gMDsgLy8g0JDQutGC0YPQsNC70LjQt9C40YDQsCDQuNC90LTQuNC60LDRgtC+0YDQsFxyXG4gICAgfSxcclxuICAgIGhhbmRsZUZpbGVDaGFuZ2UoZXZlbnQsIGluZGV4KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xyXG4gICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbkluZGV4ID0gaW5kZXg7XHJcbiAgICB9LFxyXG4gICAgaGFuZGxlSW1hZ2VVcGxvYWQoaW5kZXgpIHtcclxuICAgICAgLy8g0KLRg9C6INGB0LUg0L7QsdGA0LDQsdC+0YLQstCwINC60LDRh9Cy0LDQvdC10YLQviDQvdCwINC40LfQvtCx0YDQsNC20LXQvdC40LXRgtC+XHJcbiAgICAgIGNvbnNvbGUubG9nKFwi0KTQsNC50LvRitGCINC1INC40LfQsdGA0LDQvSDQt9CwINCy0YrQv9GA0L7RgSDRgSDQuNC90LTQtdC60YE6XCIsIGluZGV4KTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XHJcbiAgICB9LFxyXG4gICAgLyogcHJlcGFyZURhdGFGb3JTYXZlKCkge1xyXG4gICAgICB0aGlzLmNyb3Nzd29yZERhdGEuZW50cmllcyA9IHRoaXMucXVlc3Rpb25zLm1hcCgocSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBxdWVzdGlvbjogcS50ZXh0LCAvLyDQktGK0L/RgNC+0YHRitGCXHJcbiAgICAgICAgICBhbnN3ZXI6IHEuYW5zd2VyLCAvLyDQntGC0LPQvtCy0L7RgNGK0YJcclxuICAgICAgICAgIHN0YXJ0Q29vcmRpbmF0ZXM6IHEuc3RhcnRDb29yZGluYXRlcywgLy8g0J3QsNGH0LDQu9C90LAg0L/QvtC30LjRhtC40Y9cclxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBxLmNvb3JkaW5hdGVzLCAvLyDQktGB0LjRh9C60Lgg0LrQvtC+0YDQtNC40L3QsNGC0LhcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgICAgY29uc29sZS5sb2coXCLQlNCw0L3QvdC4INC30LAg0LfQsNC/0LjRgTpcIiwgdGhpcy5jcm9zc3dvcmREYXRhKTtcclxuICAgIH0sKi9cclxuICAgIGFzeW5jIHN1Ym1pdENyb3Nzd29yZERhdGEoKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChcIi9hZG1pbi9zYXZlX2Nyb3Nzd29yZFwiLCB7XHJcbiAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIHJlY29yZGVkQW5zd2VyczogdGhpcy5yZWNvcmRlZEFuc3dlcnMsXHJcbiAgICAgICAgICAgIGNyb3Nzd29yZE51bWJlcjogdGhpcy5uZXdDcm9zc3dvcmROdW1iZXIsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkTW9kZTogdGhpcy5zZWxlY3RlZE1vZGUsXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi0J3QtdGD0YHQv9C10YjQvdC+INC30LDQv9Cw0LfQstCw0L3QtSDQvdCwINC60YDRitGB0YLQvtGB0LvQvtCy0LjRhtCw0YLQsC5cIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcbiAgICAgICAgYWxlcnQoXCLQmtGA0YrRgdGC0L7RgdC70L7QstC40YbQsNGC0LAg0LUg0YPRgdC/0LXRiNC90L4g0LfQsNC/0LDQt9C10L3QsCFcIik7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCLQoNC10LfRg9C70YLQsNGCOlwiLCByZXN1bHQpO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCLQk9GA0LXRiNC60LAg0L/RgNC4INC30LDQv9C40YHQstCw0L3QtdGC0L46XCIsIGVycm9yKTtcclxuICAgICAgICBhbGVydChcItCS0YrQt9C90LjQutC90LAg0LPRgNC10YjQutCwINC/0YDQuCDQt9Cw0L/QsNC30LLQsNC90LXRgtC+LlwiKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGFzeW5jIHVwbG9hZEltYWdlKGlkKSB7XHJcbiAgICAgIGlmICghdGhpcy5zZWxlY3RlZEZpbGUpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uc1tpZCAtIDFdLnVwbG9hZFN0YXR1cyA9IFwi0JzQvtC70Y8sINC40LfQsdC10YDQtdGC0LUg0YTQsNC50LshXCI7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoXCJpbWFnZVwiLCB0aGlzLnNlbGVjdGVkRmlsZSk7XHJcblxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXCIvYWRtaW4vdXBsb2FkXCIsIHtcclxuICAgICAgICAgIC8vINCj0LLQtdGA0LXRgtC1INGB0LUsINGH0LUg0L/RitGC0Y/RgiDRgdGK0LLQv9Cw0LTQsCDRgSDRgtC+0LfQuCDQsiDQutC+0L3RgtGA0L7Qu9C10YDQsFxyXG4gICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XHJcbiAgICAgICAgICAvLyDQkNC60L4g0LrQvtC90YLRgNC+0LvQtdGA0YrRgiDQstGA0YrRidCwINGB0YLQsNGC0YPRgSDQutC+0LQg0LfQsCDQs9GA0LXRiNC60LBcclxuICAgICAgICAgIGNvbnN0IGVycm9yUmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpOyAvLyDQktC30LXQvNC4INGB0YrQvtCx0YnQtdC90LjQtdGC0L4g0LfQsCDQs9GA0LXRiNC60LBcclxuICAgICAgICAgIHRoaXMucXVlc3Rpb25zW2lkIC0gMV0udXBsb2FkU3RhdHVzID0gYNCT0YDQtdGI0LrQsCDQv9GA0Lgg0LrQsNGH0LLQsNC90LXRgtC+OiAke1xyXG4gICAgICAgICAgICBlcnJvclJlc3VsdC5tZXNzYWdlIHx8IHJlc3BvbnNlLnN0YXR1c1RleHRcclxuICAgICAgICAgIH1gO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG5cclxuICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcclxuICAgICAgICAgIHRoaXMucXVlc3Rpb25zW2lkIC0gMV0udXBsb2FkU3RhdHVzID0gXCLQpNCw0LnQu9GK0YIg0LUg0LrQsNGH0LXQvSDRg9GB0L/QtdGI0L3QviFcIjtcclxuICAgICAgICAgIHRoaXMucXVlc3Rpb25zW2lkIC0gMV0uaW1hZ2VQYXRoID1cclxuICAgICAgICAgICAgXCIvdXBsb2Fkcy9xdWVzdGlvbl9pbWFnZXMvXCIgKyByZXN1bHQuZmlsZW5hbWU7IC8vINCX0LDQv9Cw0LfQstCw0LzQtSDQv9GK0YLRjyDQutGK0Lwg0LrQsNGH0LXQvdC40Y8g0YTQsNC50LtcclxuICAgICAgICAgIHRoaXMuYXR0YWNobWVudEZpbGVQYXRoW2lkXSA9IHJlc3VsdC5wYXRoOyAvLyDQl9Cw0LTQsNCy0LDQvNC1INC/0YrRgtGPINC60YrQvCDRhNCw0LnQu9CwXHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIk3Qn9Cq0KJcIiwgdGhpcy5xdWVzdGlvbnNbaWQgLSAxXS5pbWFnZVBhdGgpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCLQmtCw0YfQtdC9INGE0LDQudC7OlwiLCB0aGlzLmF0dGFjaG1lbnRGaWxlUGF0aCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucXVlc3Rpb25zW2lkIC0gMV0udXBsb2FkU3RhdHVzID1cclxuICAgICAgICAgICAgXCLQk9GA0LXRiNC60LAg0L/RgNC4INC60LDRh9Cy0LDQvdC10YLQvjogXCIgKyByZXN1bHQubWVzc2FnZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnNbaWQgLSAxXS51cGxvYWRTdGF0dXMgPVxyXG4gICAgICAgICAgXCLQndC10YPRgdC/0LXRiNC90L4g0LrQsNGH0LLQsNC90LU6IFwiICsgZXJyb3IubWVzc2FnZTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICB9LFxyXG59O1xyXG48L3NjcmlwdD5cclxuXHJcbjxzdHlsZSBzY29wZWQ+XHJcbi5oZWFkZXItY29udGFpbmVyIHtcclxuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xyXG59XHJcbi5xdWVzdGlvbi1maWVsZCB7XHJcbiAgbWFyZ2luLWJvdHRvbTogMTVweDtcclxufVxyXG4uYW5zd2VyLWZpZWxkIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgZ2FwOiAxMHB4O1xyXG59XHJcbi5tb2RlLXNlbGVjdGlvbiB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIGdhcDogMXJlbTtcclxufVxyXG48L3N0eWxlPlxyXG4iLCI8dGVtcGxhdGU+XHJcbiAgPGRpdj48L2Rpdj5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBuYW1lOiBcIkNyb3Nzd29yZEpva2VyXCIsXHJcbiAgcHJvcHM6IHtcclxuICAgIGNyb3Nzd29yZElkOiB7XHJcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgfSxcclxuICAgIGdyaWREYXRhOiBPYmplY3QsIC8vINCf0L7Qu9GD0YfQsNCy0LDQvNC1IGdyaWREYXRhINC+0YIg0YDQvtC00LjRgtC10LvRgdC60LjRjyDQutC+0LzQv9C+0L3QtdC90YJcclxuICB9LFxyXG4gIGRhdGEoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBqb2tlck1lc3NhZ2U6IG51bGwsXHJcbiAgICB9O1xyXG4gIH0sXHJcbiAgbWV0aG9kczoge1xyXG4gICAgLy/QnNC10YLQvtC0INC30LAg0LjQt9C/0YDQsNGJ0LDQvdC1INC90LAg0LfQsNGP0LLQutCwINC30LAg0LLQtdGA0YLQuNC60LDQu9C10L0g0L7RgtCz0L7QstC+0YBcclxuICAgIGFzeW5jIHJlcXVlc3RKb2tlcih7XHJcbiAgICAgIGNyb3Nzd29yZElkLFxyXG4gICAgICBncmlkRGF0YSxcclxuICAgICAgcXVlc3Rpb25OdW1iZXIsXHJcbiAgICAgIHF1ZXN0aW9uQ29vcmRpbmF0ZXMsXHJcbiAgICAgIGVuZFBvaW50LFxyXG4gICAgfSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goZW5kUG9pbnQsIHtcclxuICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgY3Jvc3N3b3JkSWQ6IGNyb3Nzd29yZElkLFxyXG4gICAgICAgICAgICBncmlkRGF0YTogZ3JpZERhdGEsXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uTnVtYmVyOiBxdWVzdGlvbk51bWJlcixcclxuICAgICAgICAgICAgcXVlc3Rpb25Db29yZGluYXRlczogcXVlc3Rpb25Db29yZGluYXRlcyxcclxuICAgICAgICAgICAgam9rZXJJZDogMixcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcblxyXG4gICAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcclxuICAgICAgICAgIC8vINCQ0LrQviDQuNC80LAg0LPRgNC10YjQutCwINC+0YIg0YHRitGA0LLRitGA0LAg4oCUINC/0L7QutCw0LfQstCw0LzQtSDRgdGK0L7QsdGJ0LXQvdC40LVcclxuICAgICAgICAgIHRoaXMuJGVtaXQoXCJzaG93LW1lc3NhZ2VcIiwgcmVzdWx0LmVycm9yKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcImluZm9cIikge1xyXG4gICAgICAgICAgdGhpcy4kZW1pdChcInNob3ctbWVzc2FnZVwiLCByZXN1bHQubWVzc2FnZSk7IC8vINCY0LfQv9GA0LDRidCw0LzQtSDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC60YrQvCDRgNC+0LTQuNGC0LXQu9GPXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmpva2VyTWVzc2FnZSA9IFwiVGhlIEpva2VyIHdhcyBzdWNjZXNzZnVsbHkgZGlzcGxheWVkIVwiO1xyXG4gICAgICAgIHRoaXMuJGVtaXQoXCJyZXZlYWwtbGV0dGVyc1wiLCByZXN1bHQuY29vcmRpbmF0ZXMsIHJlc3VsdC5sZXR0ZXJzKTtcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICB0aGlzLmpva2VyTWVzc2FnZSA9IFwiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVxdWVzdGluZyBhIGpva2VyLlwiO1xyXG4gICAgICAgIC8vICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvL9Cc0LXRgtC+0LQg0LfQsCDQuNC30L/RgNCw0YnQsNC90LUg0L3QsCDQt9Cw0Y/QstC60LAg0LfQsCDRgdGK0LLQv9Cw0LTQsNGJ0LjRgtC1INCx0YPQutCy0LhcclxuICAgIGFzeW5jIHJldmVhbE1hdGNoaW5nTGV0dGVycyh3b3JkcywgY3Jvc3N3b3JkSWQsIGZpbGxlZExldHRlcnMsIGVuZFBvaW50KSB7XHJcbiAgICAgIC8qY29uc29sZS5sb2coXCLQn9C+0LvRg9GH0LXQvdC4INC00YPQvNC4INC30LAg0YHQstC10YDRj9Cy0LDQvdC1OlwiLCB3b3Jkcyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwi0JrQoNCq0KHQotCe0KHQm9Ce0JLQmNCm0JA6XCIsIGNyb3Nzd29yZElkKTtcclxuICAgICAgY29uc29sZS5sb2coXCLQsdGD0LrQstC4INC60L7QvtGA0LTQuNC90LDRgtC4OlwiLCBmaWxsZWRMZXR0ZXJzKTsqL1xyXG4gICAgICAvLyDQmNC30L/RgNCw0YnQsNC80LUg0LTRg9C80LjRgtC1INC60YrQvCDRgdGK0YDQstGK0YDQsCDQt9CwINC/0YDQvtCy0LXRgNC60LBcclxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChlbmRQb2ludCwge1xyXG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICB3b3Jkczogd29yZHMsXHJcbiAgICAgICAgICBjcm9zc3dvcmRJZDogY3Jvc3N3b3JkSWQsXHJcbiAgICAgICAgICBmaWxsZWRMZXR0ZXJzOiBmaWxsZWRMZXR0ZXJzLFxyXG4gICAgICAgICAgam9rZXJJZDogMSxcclxuICAgICAgICB9KSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcclxuICAgICAgICB0aGlzLiRlbWl0KFwic2hvdy1tZXNzYWdlXCIsIHJlc3VsdC5lcnJvcik7IC8vINCY0LfQv9GA0LDRidCw0LzQtSDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC60YrQvCDRgNC+0LTQuNGC0LXQu9GB0LrQuNGPINC60L7QvNC/0L7QvdC10L3RglxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiUkVTVUxUXCIsIHJlc3VsdC5tYXRjaGluZ0xldHRlcnMpO1xyXG4gICAgICAgIC8vINCd0L7RgNC80LDQu9C40LfQuNGA0LDQvdC1INC90LAgbWF0Y2hpbmdMZXR0ZXJzIC0+IFtjb29yZHNdLCBbbGV0dGVyc11cclxuICAgICAgICBjb25zdCBjb29yZHMgPSBbXTtcclxuICAgICAgICBjb25zdCBsZXR0ZXJzID0gW107XHJcbiAgICAgICAgY29uc3QgbSA9IHJlc3VsdC5tYXRjaGluZ0xldHRlcnMgPz8gW107XHJcblxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG0pKSB7XHJcbiAgICAgICAgICAvLyDQvtGH0LDQutCy0LDQvSDRhNC+0YDQvNCw0YI6IFt7IGNvb3JkOiBcInItY1wiLCBsZXR0ZXI6IFwiQVwiIH0sIC4uLl1cclxuICAgICAgICAgIGZvciAoY29uc3QgaXQgb2YgbSkge1xyXG4gICAgICAgICAgICBjb25zdCBjb29yZCA9IGl0LmNvb3JkID8/IGl0LmNvb3JkaW5hdGVzID8/IGl0LnBvcztcclxuICAgICAgICAgICAgY29uc3QgbGV0dGVyID0gaXQubGV0dGVyID8/IGl0LnZhbHVlO1xyXG4gICAgICAgICAgICBpZiAoY29vcmQgJiYgbGV0dGVyKSB7XHJcbiAgICAgICAgICAgICAgY29vcmRzLnB1c2goY29vcmQpO1xyXG4gICAgICAgICAgICAgIGxldHRlcnMucHVzaChsZXR0ZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChtICYmIHR5cGVvZiBtID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAvLyDRhNC+0YDQvNCw0YI6IHsgXCJyLWNcIjogXCJBXCIsIC4uLiB9XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IFtjb29yZCwgbGV0dGVyXSBvZiBPYmplY3QuZW50cmllcyhtKSkge1xyXG4gICAgICAgICAgICBpZiAoY29vcmQgJiYgbGV0dGVyKSB7XHJcbiAgICAgICAgICAgICAgY29vcmRzLnB1c2goY29vcmQpO1xyXG4gICAgICAgICAgICAgIGxldHRlcnMucHVzaChsZXR0ZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDQodGC0LDQvdC00LDRgNGC0L3QvtGC0L4g0YHRitCx0LjRgtC40LUg0LfQsCDQvtGG0LLQtdGC0Y/QstCw0L3QtS/RgNCw0LfQutGA0LjQstCw0L3QtVxyXG4gICAgICAgIHRoaXMuJGVtaXQoXCJyZXZlYWwtbGV0dGVyc1wiLCBjb29yZHMsIGxldHRlcnMpO1xyXG4gICAgICAgIHRoaXMuJGVtaXQoXCJzaG93LW1hdGNoaW5nLWxldHRlcnNcIiwgcmVzdWx0Lm1hdGNoaW5nTGV0dGVycyk7XHJcbiAgICAgIH1cclxuICAgICAgLyogaWYgKHJlc3VsdC5lcnJvcikge1xyXG4gICAgICAgIHRoaXMuJGVtaXQoXCJzaG93LW1lc3NhZ2VcIiwgcmVzdWx0LmVycm9yKTsgLy8g0JjQt9C/0YDQsNGJ0LDQvNC1INGB0YrQvtCx0YnQtdC90LjQtdGC0L4g0LrRitC8INGA0L7QtNC40YLQtdC70YHQutC40Y8g0LrQvtC80L/QvtC90LXQvdGCXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJSRVNVTFRcIiwgcmVzdWx0Lm1hdGNoaW5nTGV0dGVycyk7XHJcbiAgICAgICAgdGhpcy4kZW1pdChcInNob3ctbWF0Y2hpbmctbGV0dGVyc1wiLCByZXN1bHQubWF0Y2hpbmdMZXR0ZXJzKTtcclxuICAgICAgfSovXHJcbiAgICB9LFxyXG4gICAgLy/QnNC10YLQvtC0INC30LAg0LjQt9C/0YDQsNGJ0LDQvdC1INC90LAg0LfQsNGP0LLQutCwINC30LAg0YHQu9GD0YfQsNC50L3QsCDQsdGD0LrQstCwXHJcbiAgICBhc3luYyByYW5kb21MZXR0ZXJKb2tlcihkYXRhKSB7XHJcbiAgICAgIGxldCBlbmRQb2ludCA9IGRhdGEuZW5kUG9pbnQ7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChlbmRQb2ludCwge1xyXG4gICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoZGF0YSksXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuXHJcbiAgICAgICAgaWYgKHJlc3VsdC5lcnJvcikge1xyXG4gICAgICAgICAgLy8g0JDQutC+INC40LzQsCDQs9GA0LXRiNC60LAg0L7RgiDRgdGK0YDQstGK0YDQsCDigJQg0L/QvtC60LDQt9Cy0LDQvNC1INGB0YrQvtCx0YnQtdC90LjQtVxyXG4gICAgICAgICAgdGhpcy4kZW1pdChcInNob3ctbWVzc2FnZVwiLCByZXN1bHQuZXJyb3IpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlc3VsdC5yYW5kb21MZXR0ZXIgJiYgcmVzdWx0LmNvb3JkKSB7XHJcbiAgICAgICAgICAvLyDQkNC60L4g0LLRgdC40YfQutC+INC1INC90LDRgNC10LQg4oCUINC60LDQt9Cy0LDQvNC1INC90LAg0YDQvtC00LjRgtC10LvRjyDQtNCwINC/0L7QutCw0LbQtSDQsdGD0LrQstCw0YLQsFxyXG4gICAgICAgICAgdGhpcy4kZW1pdChcInJldmVhbC1sZXR0ZXJzXCIsIFtyZXN1bHQuY29vcmRdLCBbcmVzdWx0LnJhbmRvbUxldHRlcl0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyDQkNC60L4g0L3QtdGJ0L4g0LvQuNC/0YHQstCwINCyINC+0YLQs9C+0LLQvtGA0LBcclxuICAgICAgICAgIHRoaXMuJGVtaXQoXCJzaG93LW1lc3NhZ2VcIiwgXCJGYWlsZWQgdG8gZ2V0IHJhbmRvbSBsZXR0ZXIuXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgcmVxdWVzdGluZyByYW5kb20gbGV0dGVyOlwiKTtcclxuICAgICAgICB0aGlzLiRlbWl0KFwic2hvdy1tZXNzYWdlXCIsIFwiVGhlcmUgd2FzIGEgcHJvYmxlbSB3aXRoIHRoZSByZXF1ZXN0LlwiKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICB9LFxyXG59O1xyXG48L3NjcmlwdD5cclxuXHJcbjxzdHlsZSBzY29wZWQ+XHJcbi8qINCc0L7QttC1INC00LAg0LTQvtCx0LDQstC40Lwg0YHRgtC40LvQvtCy0LUg0LfQsCDQsdGD0YLQvtC90LAg0Lgg0YHRitC+0LHRidC10L3QuNC10YLQviAqL1xyXG48L3N0eWxlPlxyXG4iLCI8dGVtcGxhdGU+XHJcbiAgPGRpdlxyXG4gICAgdi1pZj1cIm9wZW5cIlxyXG4gICAgY2xhc3M9XCJmaXhlZCBpbnNldC0wIHotNTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctYmxhY2svNjAgYmFja2Ryb3AtYmx1ci1zbSBzbTpwLTRcIlxyXG4gICAgQGtleWRvd24uZXNjPVwiJGVtaXQoJ2Nsb3NlJylcIlxyXG4gICAgQGNvcHkucHJldmVudD1cInByZXZlbnRDb3B5XCJcclxuICAgIEBjdXQucHJldmVudD1cInByZXZlbnRDb3B5XCJcclxuICAgIEBwYXN0ZS5wcmV2ZW50PVwicHJldmVudENvcHlcIlxyXG4gID5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJiZy13aGl0ZSB3LVs5MCVdIG1heC13LTN4bCBtYXgtaC1bODB2aF0gcm91bmRlZC0yeGwgc2hhZG93LXhsIHAtNiBvdmVyZmxvdy1oaWRkZW4gYW5pbWF0ZS1wb3BcIlxyXG4gICAgICByb2xlPVwiZGlhbG9nXCJcclxuICAgICAgYXJpYS1tb2RhbD1cInRydWVcIlxyXG4gICAgICA6YXJpYS1sYWJlbD1cInRpdGxlXCJcclxuICAgICAgQGNvbnRleHRtZW51LnByZXZlbnQ9XCJwcmV2ZW50Q29weSAmJiB0cnVlXCJcclxuICAgID5cclxuICAgICAgPCEtLSBvdmVybGF5INGB0LUg0YHQutGA0L7Qu9Cy0LAgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSBpbnNldC0wIG92ZXJmbG93LXktYXV0b1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteC1hdXRvIG15LTggdy1mdWxsIG1heC13LTN4bCBweC00XCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwicmVsYXRpdmUgcm91bmRlZC0yeGwgYmctd2hpdGUgc2hhZG93LXhsIHJpbmctMSByaW5nLWJsYWNrLzEwXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPCEtLSBYINCx0YPRgtC+0L0gLS0+XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBjbGFzcz1cInJlbGF0aXZlIHJvdW5kZWQtMnhsIGJnLXdoaXRlIHJpZ2h0LTMhaW1wb3J0YW50IHNoYWRvdy14bCByaW5nLTEgcmluZy1ibGFjay8xMFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCIkZW1pdCgnY2xvc2UnKVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIGJ0bi14ICFyaWdodC0zICFsZWZ0LWF1dG8gdG9wLTMgei0xMCBpbmxpbmUtZmxleCBoLTkgdy05IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgYmctd2hpdGUvOTAgc2hhZG93IHJpbmctMSByaW5nLWJsYWNrLzEwIGhvdmVyOmJnLXdoaXRlIGhvdmVyOnNoYWRvdy1tZCBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctYmxhY2svMzAgYWN0aXZlOnNjYWxlLTk1IHRyYW5zaXRpb25cIlxyXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cItCX0LDRgtCy0L7RgNC4INC80L7QtNCw0LvQsFwiXHJcbiAgICAgICAgICAgICAgICB0aXRsZT1cItCX0LDRgtCy0L7RgNC4XCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8c3ZnXHJcbiAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcclxuICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoLTUgdy01XCJcclxuICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk02IDZsMTIgMTJNMTggNmwtMTIgMTJcIlxyXG4gICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGhlYWRlciBjbGFzcz1cIm1iLTQgZmxleCBpdGVtcy1zdGFydCBnYXAtM1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaHJpbmstMCBzZWxlY3Qtbm9uZSB0ZXh0LTN4bFwiPvCfp6k8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidGV4dC14bCBmb250LXNlbWlib2xkIGxlYWRpbmctdGlnaHRcIj57eyB0aXRsZSB9fTwvaDM+XHJcbiAgICAgICAgICAgICAgICA8cCB2LWlmPVwic3VidGl0bGVcIiBjbGFzcz1cInRleHQtc20gdGV4dC1ncmF5LTUwMCBtdC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHN1YnRpdGxlIH19XHJcbiAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvaGVhZGVyPlxyXG5cclxuICAgICAgICAgICAgPCEtLSDQodGK0LTRitGA0LbQsNC90LjQtSAtLT5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIHJlZj1cInNjcm9sbEFyZWFcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwicmVsYXRpdmUgb3ZlcmZsb3cteS1hdXRvIHNwYWNlLXktNCBwci0xXCJcclxuICAgICAgICAgICAgICA6Y2xhc3M9XCJ7ICdzZWxlY3Qtbm9uZSc6IHByZXZlbnRDb3B5IH1cIlxyXG4gICAgICAgICAgICAgIDpzdHlsZT1cIlt3YXRlcm1hcmtTdHlsZSwgeyBtYXhIZWlnaHQ6ICc2MHZoJyB9XVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8IS0tINCh0YLRitC60LvQtdC90LjRj9GCINGJ0LjRgiAo0YHQsNC80L4g0LfQsCDQtNC10YHQutGC0L7Qvykg0L7RgdGC0LDQstCwINC30LAg0LLQuNC30YPQsNC70LXQvSDQtdGE0LXQutGCLFxyXG4gICAgICAgICAgICAgICAgICAg0L3QviDQstC10YfQtSDQvdC1INCx0LvQvtC60LjRgNCwINC60LvQuNC60L7QstC1L9C70LjQvdC60L7QstC1LCDQt9CwINC00LAg0LzQvtC20LUg0LTQsCDRgdC1INC+0YLQstCw0YDRj9GCIFVSTC3QuCAtLT5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICB2LWlmPVwicHJldmVudENvcHkgJiYgIWlzVG91Y2hEZXZpY2VcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcG9pbnRlci1ldmVudHMtbm9uZVwiXHJcbiAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICAgICAgICAgID48L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgdi1mb3I9XCJpdGVtIGluIGxpc3RcIlxyXG4gICAgICAgICAgICAgICAgOmtleT1cIml0ZW0ubnVtYmVyXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYm9yZGVyIHJvdW5kZWQtbGcgcC0zIGJnLXdoaXRlLzgwXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC14cyB0ZXh0LWdyYXktNTAwIG1iLTFcIj5cclxuICAgICAgICAgICAgICAgICAgUXVlc3Rpb24ge3sgaXRlbS5udW1iZXIgfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtbWVkaXVtIG1iLTFcIj57eyBpdGVtLnF1ZXN0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ncmVlbi03MDAgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICBBbnN3ZXI6XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZFwiPnt7IGl0ZW0uYW5zd2VyIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1ncmF5LTgwMCB3aGl0ZXNwYWNlLXByZS1saW5lXCJcclxuICAgICAgICAgICAgICAgICAgdi1odG1sPVwicmVuZGVyZWRFeHBsYW5hdGlvbihpdGVtLmV4cGxhbmF0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBTdGlja3kgZm9vdGVyIC0tPlxyXG4gICAgICAgICAgICA8Zm9vdGVyIGNsYXNzPVwiYm9yZGVyLXQgcHgtNiBweS00IHN0aWNreSBib3R0b20tMCBiZy13aGl0ZVwiPlxyXG4gICAgICAgICAgICAgIDxzbG90IG5hbWU9XCJmb290ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJweC00IHB5LTIgcm91bmRlZCBiZy1pbmRpZ28tNjAwIHRleHQtd2hpdGUgaG92ZXI6YmctaW5kaWdvLTcwMCB0cmFuc2l0aW9uIHctZnVsbCBzbTp3LWF1dG9cIlxyXG4gICAgICAgICAgICAgICAgICBAY2xpY2s9XCIkZW1pdCgnY2xvc2UnKVwiXHJcbiAgICAgICAgICAgICAgICAgIGF1dG9mb2N1c1xyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICBPS1xyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9zbG90PlxyXG4gICAgICAgICAgICA8L2Zvb3Rlcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHNjcmlwdD5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIG5hbWU6IFwiRXhwbGFuYXRpb25zTW9kYWxcIixcclxuICBwcm9wczoge1xyXG4gICAgb3BlbjogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxyXG4gICAgbGlzdDogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogKCkgPT4gW10gfSxcclxuICAgIHRpdGxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogXCJJbnRlcmVzdGluZyBmYWN0cyBhYm91dCB0aGUgYW5zd2Vyc1wiIH0sXHJcbiAgICBzdWJ0aXRsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IFwiXCIgfSxcclxuICAgIHByZXZlbnRDb3B5OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcclxuICAgIHdhdGVybWFya1RleHQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBcImNsYWlyZXF1aXouY29tXCIgfSxcclxuICAgIHdhdGVybWFya09wYWNpdHk6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwLjE2IH0sXHJcbiAgICB3YXRlcm1hcmtTaXplOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMjQwIH0sXHJcbiAgICB3YXRlcm1hcmtBbmdsZTogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDMwIH0sXHJcbiAgfSxcclxuICBkYXRhKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaXNUb3VjaERldmljZTogZmFsc2UsXHJcbiAgICB9O1xyXG4gIH0sXHJcbiAgbW91bnRlZCgpIHtcclxuICAgIHRoaXMuaXNUb3VjaERldmljZSA9XHJcbiAgICAgIFwib250b3VjaHN0YXJ0XCIgaW4gd2luZG93IHx8IG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDA7XHJcbiAgfSxcclxuICBjb21wdXRlZDoge1xyXG4gICAgd2F0ZXJtYXJrU3R5bGUoKSB7XHJcbiAgICAgIGlmICghdGhpcy53YXRlcm1hcmtUZXh0KSByZXR1cm4ge307XHJcbiAgICAgIGNvbnN0IHNpemUgPSB0aGlzLndhdGVybWFya1NpemU7XHJcbiAgICAgIGNvbnN0IG9wYWNpdHkgPSB0aGlzLndhdGVybWFya09wYWNpdHk7XHJcbiAgICAgIGNvbnN0IGFuZ2xlID0gdGhpcy53YXRlcm1hcmtBbmdsZTtcclxuICAgICAgY29uc3QgdGV4dCA9IHRoaXMud2F0ZXJtYXJrVGV4dFxyXG4gICAgICAgIC5yZXBsYWNlKC8mL2csIFwiJmFtcDtcIilcclxuICAgICAgICAucmVwbGFjZSgvXCIvZywgXCImcXVvdDtcIilcclxuICAgICAgICAucmVwbGFjZSgvPC9nLCBcIiZsdDtcIilcclxuICAgICAgICAucmVwbGFjZSgvPi9nLCBcIiZndDtcIik7XHJcbiAgICAgIGNvbnN0IHN2ZyA9IGBcclxuPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIke3NpemV9XCIgaGVpZ2h0PVwiJHtzaXplfVwiIHZpZXdCb3g9XCIwIDAgJHtzaXplfSAke3NpemV9XCI+XHJcbiAgPGRlZnM+XHJcbiAgICA8cGF0dGVybiBpZD1cInBcIiBwYXR0ZXJuVW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiIHdpZHRoPVwiJHtzaXplfVwiIGhlaWdodD1cIiR7c2l6ZX1cIj5cclxuICAgICAgPGcgdHJhbnNmb3JtPVwicm90YXRlKCR7YW5nbGV9ICR7c2l6ZSAvIDJ9ICR7XHJcbiAgICAgICAgc2l6ZSAvIDJcclxuICAgICAgfSlcIiBvcGFjaXR5PVwiJHtvcGFjaXR5fVwiPlxyXG4gICAgICAgIDx0ZXh0IHg9XCIke3NpemUgLyAxMH1cIiB5PVwiJHtcclxuICAgICAgICAgIHNpemUgLyAyXHJcbiAgICAgICAgfVwiIGZvbnQtZmFtaWx5PVwic2Fucy1zZXJpZlwiIGZvbnQtc2l6ZT1cIiR7TWF0aC5mbG9vcihcclxuICAgICAgICAgIHNpemUgLyA2LFxyXG4gICAgICAgICl9XCIgZmlsbD1cIiMwMDBcIj4ke3RleHR9PC90ZXh0PlxyXG4gICAgICA8L2c+XHJcbiAgICA8L3BhdHRlcm4+XHJcbiAgPC9kZWZzPlxyXG4gIDxyZWN0IHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIiBmaWxsPVwidXJsKCNwKVwiLz5cclxuPC9zdmc+YDtcclxuICAgICAgY29uc3QgdXJpID0gYHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCR7ZW5jb2RlVVJJQ29tcG9uZW50KHN2Zyl9XCIpYDtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6IHVyaSxcclxuICAgICAgICBiYWNrZ3JvdW5kUmVwZWF0OiBcInJlcGVhdFwiLFxyXG4gICAgICAgIGJhY2tncm91bmRTaXplOiBgJHtzaXplfXB4ICR7c2l6ZX1weGAsXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG4gIH0sXHJcbiAgbWV0aG9kczoge1xyXG4gICAgZm9yd2FyZFdoZWVsKGUpIHtcclxuICAgICAgY29uc3QgYm94ID0gdGhpcy4kcmVmcy5zY3JvbGxBcmVhO1xyXG4gICAgICBpZiAoIWJveCkgcmV0dXJuO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGJveC5zY3JvbGxUb3AgKz0gZS5kZWx0YVk7XHJcbiAgICAgIH0gY2F0Y2ggKF8pIHt9XHJcbiAgICB9LFxyXG5cclxuICAgIGVzY2FwZUh0bWwoc3RyKSB7XHJcbiAgICAgIHJldHVybiBTdHJpbmcoc3RyKVxyXG4gICAgICAgIC5yZXBsYWNlKC8mL2csIFwiJmFtcDtcIilcclxuICAgICAgICAucmVwbGFjZSgvPC9nLCBcIiZsdDtcIilcclxuICAgICAgICAucmVwbGFjZSgvPi9nLCBcIiZndDtcIilcclxuICAgICAgICAucmVwbGFjZSgvXCIvZywgXCImcXVvdDtcIilcclxuICAgICAgICAucmVwbGFjZSgvJy9nLCBcIiYjMzk7XCIpO1xyXG4gICAgfSxcclxuXHJcbiAgICBsaW5raWZ5KHRleHQpIHtcclxuICAgICAgY29uc3QgZXNjYXBlZCA9IHRoaXMuZXNjYXBlSHRtbCh0ZXh0KTtcclxuICAgICAgY29uc3QgdXJsUmVnZXggPSAvKChodHRwcz86XFwvXFwvfHd3d1xcLilbXlxcczxdKykvZ2k7XHJcbiAgICAgIHJldHVybiBlc2NhcGVkLnJlcGxhY2UodXJsUmVnZXgsICh1cmwpID0+IHtcclxuICAgICAgICBjb25zdCBocmVmID0gdXJsLnN0YXJ0c1dpdGgoXCJ3d3cuXCIpID8gYGh0dHBzOi8vJHt1cmx9YCA6IHVybDtcclxuICAgICAgICByZXR1cm4gYDxhIGhyZWY9XCIke2hyZWZ9XCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiIGNsYXNzPVwidGV4dC1pbmRpZ28tNjAwIGhvdmVyOnVuZGVybGluZVwiPiR7dXJsfTwvYT5gO1xyXG4gICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgcmVuZGVyZWRFeHBsYW5hdGlvbih0ZXh0KSB7XHJcbiAgICAgIGlmICghdGV4dCkgcmV0dXJuIFwiXCI7XHJcbiAgICAgIHJldHVybiB0aGlzLmxpbmtpZnkodGV4dCk7XHJcbiAgICB9LFxyXG4gIH0sXHJcbn07XHJcbjwvc2NyaXB0PlxyXG5cclxuPHN0eWxlIHNjb3BlZD5cclxuQGtleWZyYW1lcyBwb3Age1xyXG4gIDAlIHtcclxuICAgIG9wYWNpdHk6IDA7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoOHB4KSBzY2FsZSgwLjk4KTtcclxuICB9XHJcbiAgMTAwJSB7XHJcbiAgICBvcGFjaXR5OiAxO1xyXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApIHNjYWxlKDEpO1xyXG4gIH1cclxufVxyXG4uYW5pbWF0ZS1wb3Age1xyXG4gIGFuaW1hdGlvbjogcG9wIDAuMThzIGVhc2Utb3V0O1xyXG59XHJcbi5idG4teCB7XHJcbiAgcmlnaHQ6IDAuNzVyZW0gIWltcG9ydGFudDtcclxuICBsZWZ0OiBhdXRvICFpbXBvcnRhbnQ7XHJcbn1cclxuPC9zdHlsZT5cclxuIiwiPHRlbXBsYXRlPlxuICA8YXVkaW8gcmVmPVwic3VjY2Vzc1NvdW5kXCIgc3JjPVwiL3NvdW5kcy9zdWNjZXNzLndhdlwiPjwvYXVkaW8+XG4gIDxkaXYgY2xhc3M9XCJjcm9zc3dvcmQtcmVuZGVyZXJcIj5cbiAgICA8IS0tINCS0YrQv9GA0L7RgdC40YLQtSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwicXVlc3Rpb25zLXJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cInF1ZXN0aW9uc1wiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgdi1mb3I9XCJpdGVtIGluIGNyb3Nzd29yZERhdGFcIlxuICAgICAgICAgIDprZXk9XCJpdGVtLm51bWJlclF1ZXN0aW9uXCJcbiAgICAgICAgICBjbGFzcz1cInF1ZXN0aW9uXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwIGNsYXNzPVwicXVlc3Rpb24tbnVtYmVyXCI+UXVlc3Rpb24g4oSWe3sgaXRlbS5udW1iZXJRdWVzdGlvbiB9fTwvcD5cblxuICAgICAgICAgIDwhLS0g0JDQutC+INCy0YrQv9GA0L7RgdGK0YIg0LUg0LfQsNCz0LDQtNC60LAgLS0+XG4gICAgICAgICAgPGRpdiB2LWlmPVwiaXRlbS5wdXp6bGVJZFwiPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJxdWVzdGlvbi10ZXh0IGZvbnQtc2VtaWJvbGQgaXRhbGljIHRleHQtcHVycGxlLTgwMFwiPlxuICAgICAgICAgICAgICDwn5STIFNvbHZlIHRoZSBCZWF0IENsYWlyZSByaWRkbGVcbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgQGNsaWNrPVwib3BlblJpZGRsZShpdGVtLnB1enpsZUlkKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYmctcHVycGxlLTYwMCBob3ZlcjpiZy1wdXJwbGUtODAwIHRleHQtd2hpdGUgZm9udC1ib2xkIHB5LTEgcHgtMyByb3VuZGVkIG10LTJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBPcGVuIFJpZGRsZVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0t0LTQvtCx0LDQstGP0L3QtSDQvdCwINCx0YPRgtC+0L0g0LfQsCDRgNCw0LfQs9GA0YrRidCw0L3QtSDQvdCwINCy0YrQv9GA0L7RgdCwLS0+XG4gICAgICAgICAgPCEtLSDQkNC60L4g0LUg0YHRgtCw0L3QtNCw0YDRgtC10L0g0LLRitC/0YDQvtGBIC0tPlxuICAgICAgICAgIDxkaXYgdi1lbHNlPlxuICAgICAgICAgICAgPCEtLSDQsdC70L7RgSDQt9CwINC/0L7QutCw0LfQstCw0L3QtSDQvdCwIFwi0LLQuNC2INC/0L7QstC10YfQtVwiINC4IFwi0L/Qvi3QvNCw0LvQutC+XCIg0L7RgiDQstGK0L/RgNC+0YHQsC4g0JIg0LzQvtC80LXQvdGC0LAg0LjQt9C60LvRjtGH0LXQvVxuICAgICAgICAgICAgICDQl9CwINC00LAg0YDQsNCx0L7RgtC4INC80LDRhdCw0LzQtSDQutC+0LzQtdC90YLQsNGA0LAg0Lgg0L/RitGA0LLQuNGP0YIg0YDQtdC0ICDQv9C+0LQg0LrQvtC80LXQvdGC0LDRgNCwIC0+IDxwIGNsYXNzPVwicXVlc3Rpb24tdGV4dFwiPnt7IGl0ZW0ucXVlc3Rpb24gfX08L3A+XG4gICAgICAgICAgICAgIDxkaXYgdi1pZj1cIiFpdGVtLmV4cGFuZGVkXCI+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJxdWVzdGlvbi10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICBpdGVtLnF1ZXN0aW9uLmxlbmd0aCA+IDUwXG4gICAgICAgICAgICAgICAgICAgICAgPyBpdGVtLnF1ZXN0aW9uLnNsaWNlKDAsIDUwKSArIFwiLi4uXCJcbiAgICAgICAgICAgICAgICAgICAgICA6IGl0ZW0ucXVlc3Rpb25cbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHYtaWY9XCJpdGVtLnF1ZXN0aW9uLmxlbmd0aCA+IDUwXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1ibHVlLTcwMCB1bmRlcmxpbmUgdGV4dC1zbSBtdC0yXCJcbiAgICAgICAgICAgICAgICAgIEBjbGljaz1cIml0ZW0uZXhwYW5kZWQgPSB0cnVlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBtb3JlXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IHYtZWxzZT5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInF1ZXN0aW9uLXRleHRcIj57eyBpdGVtLnF1ZXN0aW9uIH19PC9wPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1yZWQtNjAwIHVuZGVybGluZSB0ZXh0LXNtIG10LTJcIlxuICAgICAgICAgICAgICAgICAgQGNsaWNrPVwiaXRlbS5leHBhbmRlZCA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBoaWRlXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2Pi0tPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJxdWVzdGlvbi10ZXh0XCI+e3sgaXRlbS5xdWVzdGlvbiB9fTwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tINCf0YDQvtCy0LXRgNC60LAg0LTQsNC70Lgg0LjQvNCwIGF0dGFjaG1lbnQg0Lgg0L/QvtC60LDQt9Cy0LDQvdC1INC90LAg0LjQt9C+0LHRgNCw0LbQtdC90LjQtdGC0L4gLS0+XG4gICAgICAgICAgPGRpdiB2LWlmPVwiaXRlbS5hdHRhY2htZW50XCI+XG4gICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgIDpzcmM9XCJpdGVtLmF0dGFjaG1lbnRcIlxuICAgICAgICAgICAgICBhbHQ9XCJpbWFnZSBmb3IgcXVlc3Rpb25cIlxuICAgICAgICAgICAgICBjbGFzcz1cInF1ZXN0aW9uLWltYWdlXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2hvd0Z1bGxJbWFnZShnZXRGdWxsSW1hZ2VVcmwoaXRlbS5hdHRhY2htZW50KSlcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tINCa0YDRitGB0YLQvtGB0LvQvtCy0LjRhtCw0YLQsCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiYm9hcmQtcm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiIDpzdHlsZT1cInsgJy0tcm93cyc6IHJvd3MsICctLWNvbHMnOiBjb2xzIH1cIj5cbiAgICAgICAgPHRlbXBsYXRlXG4gICAgICAgICAgdi1mb3I9XCJyb3cgaW4gcmFuZ2UoZ3JpZERpbWVuc2lvbnMubWluUm93LCBncmlkRGltZW5zaW9ucy5tYXhSb3cpXCJcbiAgICAgICAgICA6a2V5PVwiJ3Jvdy0nICsgcm93XCJcbiAgICAgICAgICBjbGFzcz1cInJvd1wiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICB2LWZvcj1cImNvbCBpbiBjb2xzXCJcbiAgICAgICAgICAgIDprZXk9XCInY2VsbC0nICsgcm93ICsgJy0nICsgY29sXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY2VsbFwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJ7XG4gICAgICAgICAgICAgIGFjdGl2ZTogZ3JpZERhdGFbYCR7cm93fS0ke2NvbH1gXSAhPT0gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBhbmltYXRlOiBpc1NvbHZlZCAmJiAhIWdyaWREYXRhW2Ake3Jvd30tJHtjb2x9YF0sXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8IS0tINCQ0LrQviDQutC70LXRgtC60LDRgtCwINC1INC90LDRh9Cw0LvQvdCwLCDQv9C+0LrQsNC30LLQsNC80LUg0L3QvtC80LXRgNCwIC0tPlxuICAgICAgICAgICAgPHNwYW4gdi1pZj1cImdyaWREYXRhW2Ake3Jvd30tJHtjb2x9YF0/Lm51bWJlclwiIGNsYXNzPVwiY2VsbC1udW1iZXJcIj5cbiAgICAgICAgICAgICAge3sgZ3JpZERhdGFbYCR7cm93fS0ke2NvbH1gXS5udW1iZXIgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHYtaWY9XCJncmlkRGF0YVtgJHtyb3d9LSR7Y29sfWBdICE9PSB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICB2LW1vZGVsPVwiZ3JpZERhdGFbYCR7cm93fS0ke2NvbH1gXS52YWx1ZVwiXG4gICAgICAgICAgICAgIDpkYXRhLWNvb3JkaW5hdGVzPVwiYCR7cm93fS0ke2NvbH1gXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjZWxsLWlucHV0XCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwie1xuICAgICAgICAgICAgICAgIGFuaW1hdGU6IGlzU29sdmVkLFxuICAgICAgICAgICAgICAgIGhpZ2hsaWdodGVkOiBncmlkRGF0YVtgJHtyb3d9LSR7Y29sfWBdLmhpZ2hsaWdodGVkLFxuICAgICAgICAgICAgICAgIGJsaW5rOiBncmlkRGF0YVtgJHtyb3d9LSR7Y29sfWBdLmJsaW5rLFxuICAgICAgICAgICAgICAgICdmcm96ZW4tY2VsbCc6IGlzQ2VsbEZyb3plbihgJHtyb3d9LSR7Y29sfWApLFxuICAgICAgICAgICAgICAgICdmaWxsZWQtY2VsbCc6XG4gICAgICAgICAgICAgICAgICBncmlkRGF0YVtgJHtyb3d9LSR7Y29sfWBdLnZhbHVlICYmXG4gICAgICAgICAgICAgICAgICBncmlkRGF0YVtgJHtyb3d9LSR7Y29sfWBdLnZhbHVlLnRyaW0oKSAhPT0gJycsXG4gICAgICAgICAgICAgICAgJ2pva2VyLWNlbGwnOiAhIWdyaWREYXRhW2Ake3Jvd30tJHtjb2x9YF0uam9rZXIsXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIG1heGxlbmd0aD1cIjFcIlxuICAgICAgICAgICAgICBAZm9jdXM9XCJoYW5kbGVGb2N1cyhgJHtyb3d9LSR7Y29sfWAsICRldmVudClcIlxuICAgICAgICAgICAgICBAa2V5ZG93bj1cImhhbmRsZUNlbGxLZXlkb3duKGAke3Jvd30tJHtjb2x9YCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgIEBpbnB1dD1cIlxuICAgICAgICAgICAgICAgIHVwZGF0ZUNlbGwoYCR7cm93fS0ke2NvbH1gLCAkZXZlbnQudGFyZ2V0LnZhbHVlLnRvVXBwZXJDYXNlKCkpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIDpkaXNhYmxlZD1cImlzQ2VsbEZyb3plbihgJHtyb3d9LSR7Y29sfWApXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSDQntCx0LXQtNC40L3QtdC9INCx0LvQvtC6INC30LAg0LbQvtC60LXRgNCwINC4INCx0YPRgtC+0L3QuNGC0LUgLS0+XG4gICAgICA8IS0tICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBzcGFjZS15LTQgaXRlbXMtY2VudGVyXCI+LS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLWJsb2NrXCI+XG4gICAgICAgIDwhLS3QkdC70L7QuiDQt9CwINCy0LXRgNC40YTQuNC60LDRhtC40Y8gLS0+XG4gICAgICAgIDxkaXYgdi1pZj1cIm1vZGUgPT09ICdCJ1wiIGNsYXNzPVwidy1mdWxsIGZsZXggZmxleC1jb2wgc3BhY2UteS00XCI+XG4gICAgICAgICAgPCEtLSDQptC40LrRitC7INC30LAg0YDQtdC90LTQuNGA0LDQvdC1INC90LAg0LHRg9GC0L7QvdC40YLQtSAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICB2LWZvcj1cIml0ZW0gaW4gY3Jvc3N3b3JkRGF0YVwiXG4gICAgICAgICAgICA6a2V5PVwiaXRlbS5udW1iZXJRdWVzdGlvblwiXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPCEtLSDQkdGD0YLQvtC9INC30LAg0LjQt9C/0YDQsNGJ0LDQvdC1INC90LAg0L7RgtCz0L7QstC+0YAgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwic3VibWl0QW5zd2VyKGl0ZW0ubnVtYmVyUXVlc3Rpb24pXCJcbiAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJcbiAgICAgICAgICAgICAgICAgICFyb3VuZEFjdGl2ZSB8fFxuICAgICAgICAgICAgICAgICAgKGl0ZW0ucG9pbnRzID4gMCAmJiBpdGVtLnZlcmlmaWVkID09IGl0ZW0uYW5zd2VyKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgOnRpdGxlPVwiXG4gICAgICAgICAgICAgICAgICAhKGl0ZW0ucG9pbnRzID4gMCAmJiBpdGVtLnZlcmlmaWVkID09IGl0ZW0uYW5zd2VyKVxuICAgICAgICAgICAgICAgICAgICA/ICdTZW5kIGFuc3dlciEgVGhlIGFuc3dlciBjYW4gYmUgY2hhbmdlZCBhbmQgc2VudCBhZ2Fpbi4nXG4gICAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIDpjbGFzcz1cIntcbiAgICAgICAgICAgICAgICAgICdiZy1ncmF5LTQwMCBjdXJzb3Itbm90LWFsbG93ZWQnOlxuICAgICAgICAgICAgICAgICAgICBpdGVtLnBvaW50cyA+IDAgJiYgaXRlbS52ZXJpZmllZCA9PSBpdGVtLmFuc3dlcixcbiAgICAgICAgICAgICAgICAgICdncmFkaWVudC1zZW5kQnV0dG9uJzpcbiAgICAgICAgICAgICAgICAgICAgIWl0ZW0udmVyaWZpZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5wb2ludHMgPT0gMCB8fFxuICAgICAgICAgICAgICAgICAgICAoaXRlbS5wb2ludHMgPiAwICYmIGl0ZW0udmVyaWZpZWQgIT0gaXRlbS5hbnN3ZXIpLFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPCEtLSDQoNC10LQgMTog0J3QsNC00L/QuNGBIFwiU0VORCAjXCIgLS0+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJibG9jayB0ZXh0LWxnIGZvbnQtYm9sZFwiXG4gICAgICAgICAgICAgICAgICA+U0VORCAje3sgaXRlbS5udW1iZXJRdWVzdGlvbiB9fTwvc3BhblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgdi1pZj1cIml0ZW0uYW5zd2VyXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmxvY2sgdGV4dC1zbSBib2xkIHRleHQtZ3JheS0zMDBcIlxuICAgICAgICAgICAgICAgICAgPkxhc3QgU2VudDo8L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPCEtLSDQoNC10LQgMzog0KHQsNC80LjRj9GCINC+0YLQs9C+0LLQvtGAICjQuNC70LggTi9BKSAtLT5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJibG9jayB0ZXh0LXNtXCJcbiAgICAgICAgICAgICAgICAgIDpjbGFzcz1cIlxuICAgICAgICAgICAgICAgICAgICBpdGVtLmFuc3dlclxuICAgICAgICAgICAgICAgICAgICAgID8gJ3NlbnQtYW5zd2VyIGJnLWdyZWVuLTkwMCB0ZXh0LWdyYXktODAwJ1xuICAgICAgICAgICAgICAgICAgICAgIDogJ3RleHQtZ3JheS04MDAgaXRhbGljJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBpdGVtLmFuc3dlciA/IGl0ZW0uYW5zd2VyIDogXCJcIiB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgPCEtLSDQkdGD0YLQvtC9INC30LAg0LLQtdGA0LjRhNC40LrQsNGG0LjRjyAtLT5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIEBjbGljaz1cInZlcmlmeUFuc3dlcihpdGVtLm51bWJlclF1ZXN0aW9uKVwiXG4gICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiIXJvdW5kQWN0aXZlIHx8IGl0ZW0udmVyaWZpZWRcIlxuICAgICAgICAgICAgICAgIDp0aXRsZT1cIlxuICAgICAgICAgICAgICAgICAgIWl0ZW0udmVyaWZpZWRcbiAgICAgICAgICAgICAgICAgICAgPyAnVmVyaWZ5IHRoZSBhbnN3ZXIuIFlvdSBoYXZlIG9ubHkgb25lIHZlcmlmaWNhdGlvbiEnXG4gICAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgICAgICAgICAgICdyb3VuZGVkIGdyYWRpZW50LXZlcmlmeUJ1dHRvbicsXG4gICAgICAgICAgICAgICAgICBpdGVtLnZlcmlmaWVkID8gJ2JnLWdyYXktNDAwIGN1cnNvci1ub3QtYWxsb3dlZCcgOiAnJyxcbiAgICAgICAgICAgICAgICBdXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCIhaXRlbS52ZXJpZmllZFwiPlxuICAgICAgICAgICAgICAgICAgVmVyaWZ5ICN7eyBpdGVtLm51bWJlclF1ZXN0aW9uIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIHYtZWxzZSBjbGFzcz1cImJsb2NrIHRleHQtbGcgYm9sZCB0ZXh0LWdyYXktMzAwIG10LTFcIj5cbiAgICAgICAgICAgICAgICAgIFZlcmlmaWNhdGlvbiB1c2VkOlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgdi1zaG93PVwiaXRlbS52ZXJpZmllZFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImJsb2NrIHRleHQtc20gbm9ybWFsIG10LTEgcC0xIHJvdW5kZWQtbWQgc2hhZG93LW1kIHRleHQtd2hpdGVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IGl0ZW0udmVyaWZpZWQgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0g0JHQu9C+0Log0LfQsCDQttC+0LrQtdGA0LAgLS0+XG4gICAgICAgIDxkaXYgdi1lbHNlIGNsYXNzPVwidy1mdWxsIGZsZXggZmxleC1jb2wgc3BhY2UteS00XCI+XG4gICAgICAgICAgPGNyb3Nzd29yZC1qb2tlclxuICAgICAgICAgICAgcmVmPVwiam9rZXJcIlxuICAgICAgICAgICAgOmNyb3Nzd29yZC1pZD1cIk51bWJlcihjcm9zc3dvcmRJZClcIlxuICAgICAgICAgICAgOmdyaWQtZGF0YT1cImdyaWREYXRhXCJcbiAgICAgICAgICAgIEByZXZlYWwtbGV0dGVycz1cImhhbmRsZVJldmVhbExldHRlcnNcIlxuICAgICAgICAgICAgQHNob3ctbWF0Y2hpbmctbGV0dGVycz1cImhhbmRsZU1hdGNoaW5nTGV0dGVyc0pva2VyXCJcbiAgICAgICAgICAgIEBzaG93LW1lc3NhZ2U9XCJkaXNwbGF5TWVzc2FnZVwiXG4gICAgICAgICAgPjwvY3Jvc3N3b3JkLWpva2VyPlxuICAgICAgICAgIDwhLS0g0J/QvtC60LDQt9Cy0LDQvNC1INGB0YrQvtCx0YnQtdC90LjQtdGC0L4gLS0+XG4gICAgICAgICAgPGRpdiB2LWlmPVwiam9rZXJNZXNzYWdlXCIgY2xhc3M9XCJhbGVydC1tZXNzYWdlXCI+XG4gICAgICAgICAgICA8cD57eyBqb2tlck1lc3NhZ2UgfX08L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSBcInJlcXVlc3RKb2tlclwiIC0tPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHYtaWY9XCJtb2RlID09PSAnQScgJiYgTnVtYmVyKGNyb3Nzd29yZExldmVsKSA9PT0gMTFcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBAY2xpY2s9XCJ0b2dnbGVKb2tlck9wdGlvbnNcIlxuICAgICAgICAgICAgOmRpc2FibGVkPVwibW9kZSA9PT0gJ2RlbW8nXCJcbiAgICAgICAgICAgIGNsYXNzPVwiam9rZXItYnV0dG9uXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBKb2tlciA8c3BhbiBjbGFzcz1cImpva2VyLXN1YnRleHRcIj5TaG93IHZlcnRpY2FsIHdvcmQ8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8IS0tINCf0L7QutCw0LfQstCw0L3QtSDQvdCwINC+0L/RhtC40Y/RgtCwINC30LAg0LjQt9Cx0L7RgCDQvdCwINCy0YrQv9GA0L7RgSDQt9CwINC20L7QutC10YAg0LLQtdGA0YLQuNC60LDQu9C90LAg0LTRg9C80LAgLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgdi1pZj1cInNob3dKb2tlck9wdGlvbnNcIlxuICAgICAgICAgICAgY2xhc3M9XCJqb2tlci1vcHRpb25zIGJnLWdyYXktODAwIHAtNCByb3VuZGVkLWxnIHNoYWRvdy1tZCB0ZXh0LXdoaXRlIG10LTRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWItMiB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICBDaG9vc2UgZm9yIHdoaWNoIHF1ZXN0aW9uIHlvdSB3YW50IHRvIHVzZSB0aGUgam9rZXI6XG4gICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGp1c3RpZnktY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB2LWZvcj1cIihxdWVzdGlvbiwgaW5kZXgpIGluIHZlcnRpY2FsUXVlc3Rpb25zXCJcbiAgICAgICAgICAgICAgICA6a2V5PVwiaW5kZXhcIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdFF1ZXN0aW9uRm9ySm9rZXIocXVlc3Rpb24pXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInB5LTIgcHgtNCByb3VuZGVkLWxnIHRyYW5zaXRpb24gZHVyYXRpb24tMjAwIGJnLWdyYXktNjAwIGhvdmVyOmJnLWdyYXktNzAwIHRleHQtd2hpdGUgYmxpbmtpbmdcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgUXVlc3Rpb24ge3sgcXVlc3Rpb24ubnVtYmVyIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSDQkdGD0YLQvtC90YrRgiDRidC1INGB0LUg0L/QvtC60LDQt9Cy0LAg0YHQsNC80L4g0LDQutC+INGA0LXQttC40LzRitGCINC90LUg0LUgZGVtbyAtLT5cbiAgICAgICAgICA8IS0t0JHRg9GC0L7QvSDQt9CwINGB0YrQstC/0LDQtNCw0YnQuCDQsdGD0LrQstC4LS0+XG4gICAgICAgICAgPCEtLSAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIEBjbGljaz1cInVzZU1hdGNoaW5nTGV0dGVyc0pva2VyXCJcbiAgICAgICAgICAgICAgOmRpc2FibGVkPVwibW9kZSA9PT0gJ2RlbSdcIlxuICAgICAgICAgICAgICBjbGFzcz1cInB4LTMgcHktMiBqb2tlci1idXR0b25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBKb2tlciA8c3BhbiBjbGFzcz1cImpva2VyLXN1YnRleHRcIj5NYXRjaGluZyBsZXR0ZXJzKjwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImpva2VyLW5vdGVcIj4qZnJvbSBmaWxsZWQgaW4gY29ycmVjdCB3b3JkczwvZGl2PiAgLS0+XG5cbiAgICAgICAgICA8IS0t0JHRg9GC0L7QvSDQt9CwINC20L7QutC10YAg0YHQu9GD0YfQsNC50L3QsCDQsdGD0LrQstCwLS0+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIEBjbGljaz1cInJhbmRvbUxldHRlclwiXG4gICAgICAgICAgICA6ZGlzYWJsZWQ9XCJtb2RlID09PSAnZGVtJ1wiXG4gICAgICAgICAgICBjbGFzcz1cImpva2VyLWJ1dHRvblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgSm9rZXIgPHNwYW4gY2xhc3M9XCJqb2tlci1zdWJ0ZXh0XCI+U2hvdyByYW5kb20gbGV0dGVyPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPCEtLSDQn9C+0LrQsNC30LLQsNC90LUg0L3QsCDQvtC/0YbQuNGP0YLQsCDQt9CwINC40LfQsdC+0YAg0L3QsCDQstGK0L/RgNC+0YEg0LfQsCDQttC+0LrQtdGAINC30LAg0YHQu9GD0YfQsNC50L3QsCDQsdGD0LrQstCwIC0tPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHYtaWY9XCJzaG93UXVlc3Rpb25zSm9rZXJcIlxuICAgICAgICAgICAgY2xhc3M9XCJqb2tlci1vcHRpb25zIGJnLWdyYXktODAwIHAtNCByb3VuZGVkLWxnIHNoYWRvdy1tZCB0ZXh0LXdoaXRlIG10LTRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWItMiB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICBDaG9vc2UgZm9yIHdoaWNoIHF1ZXN0aW9uIHlvdSB3YW50IHRvIHVzZSB0aGUgam9rZXI6XG4gICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGp1c3RpZnktY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB2LWZvcj1cIihxdWVzdGlvbiwgaW5kZXgpIGluIGFsbFF1ZXN0aW9uc1wiXG4gICAgICAgICAgICAgICAgOmtleT1cImluZGV4XCJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3RRdWVzdGlvbkZvclJhbmRvbUxldHRlcihxdWVzdGlvbilcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicHktMiBweC00IHJvdW5kZWQtbGcgdHJhbnNpdGlvbiBkdXJhdGlvbi0yMDAgYmctZ3JheS02MDAgaG92ZXI6YmctZ3JheS03MDAgdGV4dC13aGl0ZSBibGlua2luZ1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBRdWVzdGlvbiB7eyBxdWVzdGlvbi5udW1iZXIgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tINCf0L7QutCw0LfQstCw0LzQtSDRgdGK0L7QsdGJ0LXQvdC40LUsINC60L7Qs9Cw0YLQviDQsdGD0YLQvtC90YrRgiDQtSDQtNC10LDQutGC0LjQstC40YDQsNC9IC0tPlxuICAgICAgICAgIDwhLS08cFxuICAgICAgICAgICAgICB2LWlmPVwibW9kZSA9PT0gJ2RlbW8nXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWxnIGJnLWJsYWNrIHRleHQtd2hpdGUgcHgtMyBweS0yIHJvdW5kZWQtbGcgbXQtMiBmbGV4IGl0ZW1zLWNlbnRlciBnYXAteC0yXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4+4pqg77iPPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1sLTJcIlxuICAgICAgICAgICAgICAgID5UaGUgam9rZXJzIGFyZSBhY3RpdmUgb25seSBmb3IgcmVnaXN0ZXJlZCB1c2Vyczwvc3BhblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3A+LS0+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0g0JHQu9C+0Log0LfQsCDQtNC10LnRgdGC0LLQuNC1INGBINCx0YPRgtC+0L3QsCDQt9CwINC/0YDQvtCy0LXRgNC60LAgLS0+XG4gICAgICAgIDxkaXYgdi1pZj1cIm1vZGUgIT09ICdCJ1wiIGNsYXNzPVwidy1mdWxsIGZsZXggZmxleC1jb2wgc3BhY2UteS00XCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgQGNsaWNrPVwiaGFuZGxlQnV0dG9uQ2xpY2tcIlxuICAgICAgICAgICAgOmNsYXNzPVwiW1xuICAgICAgICAgICAgICBpc0Nyb3Nzd29yZFN1Ym1pdHRlZFxuICAgICAgICAgICAgICAgID8gJ2JnLWdyYXktNDAwIGN1cnNvci1ub3QtYWxsb3dlZCdcbiAgICAgICAgICAgICAgICA6IGJ1dHRvblN0eWxlLFxuICAgICAgICAgICAgICAnam9rZXItYnV0dG9uJyxcbiAgICAgICAgICAgIF1cIlxuICAgICAgICAgICAgOmRpc2FibGVkPVwiaXNDcm9zc3dvcmRTdWJtaXR0ZWRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGJ1dHRvbkxhYmVsIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPENyb3Nzd29yZEZlZWRiYWNrXG4gICAgICAgICAgICB2LWlmPVwiZmVlZGJhY2tcIlxuICAgICAgICAgICAgOnN0YXR1cz1cImZlZWRiYWNrLnN0YXR1c1wiXG4gICAgICAgICAgICA6bWVzc2FnZT1cImZlZWRiYWNrLm1lc3NhZ2VcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8IS0tINCc0L7QtNCw0Lsg0LfQsCDQv9C+0YLQstGK0YDQttC00LXQvdC40LUgLS0+XG4gICAgICAgIDxkaXYgdi1pZj1cInNob3dDb25maXJtYXRpb25cIiBjbGFzcz1cIm1vZGFsLW92ZXJsYXlcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICAgICAgPGgzPtCh0LjQs9GD0YDQvdC4INC70Lgg0YHRgtC1LCDRh9C1INC40YHQutCw0YLQtSDQtNCwINC40LfQv9GA0LDRgtC40YLQtSDQutGA0YrRgdGC0L7RgdC70L7QstC40YbQsNGC0LA/PC9oMz5cbiAgICAgICAgICAgIDxwPtCh0LvQtdC0INC40LfQv9GA0LDRidCw0L3QtdGC0L4g0L3Rj9C80LAg0LTQsCDQvNC+0LbQtdGC0LUg0LTQsCDQv9GA0LDQstC40YLQtSDQv9GA0L7QvNC10L3QuC48L3A+XG4gICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImNvbmZpcm1TdWJtaXNzaW9uXCIgY2xhc3M9XCJidG4tY29uZmlybVwiPlxuICAgICAgICAgICAgICDQlNCwLCDQuNC30L/RgNCw0YLQuFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIEBjbGljaz1cImNhbmNlbFN1Ym1pc3Npb25cIiBjbGFzcz1cImJ0bi1jYW5jZWxcIj7QntGC0LrQsNC20Lg8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxFeHBsYW5hdGlvbnNNb2RhbFxuICAgIDpvcGVuPVwic2hvd0V4cGxhbmF0aW9uc01vZGFsXCJcbiAgICA6bGlzdD1cImV4cGxhbmF0aW9uc0xpc3RcIlxuICAgIDpzdWJ0aXRsZT1cIicnXCJcbiAgICBAY2xvc2U9XCJzaG93RXhwbGFuYXRpb25zTW9kYWwgPSBmYWxzZVwiXG4gIC8+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IENyb3Nzd29yZEZlZWRiYWNrIGZyb20gXCIuL0Nyb3Nzd29yZEZlZWRiYWNrLnZ1ZVwiO1xuaW1wb3J0IGNvbmZldHRpIGZyb20gXCJjYW52YXMtY29uZmV0dGlcIjtcbmltcG9ydCBDcm9zc3dvcmRKb2tlciBmcm9tIFwiLi9Dcm9zc3dvcmRKb2tlci52dWVcIjtcbmltcG9ydCBTd2FsIGZyb20gXCJzd2VldGFsZXJ0MlwiO1xuaW1wb3J0IEV4cGxhbmF0aW9uc01vZGFsIGZyb20gXCIuL0V4cGxhbmF0aW9uc01vZGFsLnZ1ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgY3Jvc3N3b3JkRGF0YToge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9LFxuICAgIGNyb3Nzd29yZElkOiB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLCAvLyDQlNC+0L/Rg9GB0LrQsNC80LUg0L3QuNC3INC40LvQuCDRh9C40YHQu9C+XG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9LFxuICAgIGdyaWREaW1lbnNpb25zOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9LFxuICAgIG1vZGU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0sXG4gICAgY3VycmVudExldmVsOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9LFxuICAgIHN1Ym1pdHRlZERhdGE6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0sXG4gICAgY3Jvc3N3b3JkTGV2ZWw6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0sXG4gIH0sXG4gIGNvbXBvbmVudHM6IHtcbiAgICBDcm9zc3dvcmRGZWVkYmFjayxcbiAgICBDcm9zc3dvcmRKb2tlcixcbiAgICBFeHBsYW5hdGlvbnNNb2RhbCxcbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93QW5zd2VyOiBmYWxzZSwgLy8g0JrQvtC90YLRgNC+0Lsg0LTQsNC70Lgg0LTQsCDRgdC1INC/0L7QutCw0LbQsNGCINC+0YLQs9C+0LLQvtGA0LjRgtC1XG4gICAgICBncmlkRGF0YToge30sIC8vINCU0LjQvdCw0LzQuNGH0L3QuCDQtNCw0L3QvdC4INC30LAg0LrQu9C10YLQutC40YLQtVxuICAgICAgYWN0aXZlQ2VsbDogbnVsbCxcbiAgICAgIGZlZWRiYWNrOiBudWxsLFxuICAgICAgaXNTb2x2ZWQ6IGZhbHNlLCAvLyDQlNC10YTQuNC90LjRgNCw0LzQtSDQs9C+INC/0L4g0L/QvtC00YDQsNC30LHQuNGA0LDQvdC1XG4gICAgICBzdGF0dXM6IG51bGwsIC8vINCX0LDQv9Cw0LfQstCwINGC0LXQutGD0YnQuNGPINGB0YLQsNGC0YPRgSAoc3VjY2VzcyDQuNC70LggZXJyb3IpXG4gICAgICBtZXNzYWdlOiBcIlwiLFxuICAgICAgYnV0dG9uTGFiZWw6IFwi8J+UjSBTdWJtaXQgQ3Jvc3N3b3JkXCIsIC8vINCi0LXQutGD0YnQuNGP0YIg0YLQtdC60YHRgiDQvdCwINCx0YPRgtC+0L3QsFxuICAgICAgYnV0dG9uU3R5bGU6IFwiYmctYmx1ZS03MDAgaG92ZXI6YmctYmx1ZS04MDAgXCIsIC8vINCi0LXQutGD0YnQuNGP0YIg0YHRgtC40Lsg0L3QsCDQsdGD0YLQvtC90LBcbiAgICAgIGpva2VyTWVzc2FnZTogXCJcIiwgLy8g0J/RgNC+0LzQtdC90LvQuNCy0LAg0LfQsCDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+XG4gICAgICBzaG93Sm9rZXJPcHRpb25zOiBmYWxzZSwgLy8g0J/QvtC60LDQt9Cy0LDQvNC1L9GB0LrRgNC40LLQsNC80LUg0L7Qv9GG0LjRj9GC0LAg0LfQsCDQuNC30LHQvtGAINC90LAg0LLRitC/0YDQvtGBINC30LAg0LLQtdGA0YLQuNC60LDQu9C10L0g0L7RgtCz0L7QstC+0YBcbiAgICAgIHNob3dRdWVzdGlvbnNKb2tlcjogZmFsc2UsIC8v0J/QvtC60LDQt9Cy0LDQvNC1L9GB0LrRgNC40LLQsNC80LUg0L7Qv9GG0LjRj9GC0LAg0LfQsCDQuNC30LHQvtGAINC90LAg0LLRitC/0YDQvtGBINC30LAg0YHQu9GD0YfQsNC50L3QsCDQsdGD0LrQstCwXG4gICAgICB2ZXJ0aWNhbFF1ZXN0aW9uczogW10sIC8vINCc0LDRgdC40LIg0YEg0LLQtdGA0YLQuNC60LDQu9C90LjRgtC1INCy0YrQv9GA0L7RgdC4XG4gICAgICBzZWxlY3RlZFF1ZXN0aW9uOiBudWxsLCAvLyDQmNC30LHRgNCw0L0g0LLRitC/0YDQvtGBINC30LAg0LbQvtC60LXRgFxuICAgICAgYW5zd2VyOiBudWxsLFxuICAgICAgaXNTdWJtaXR0ZWQ6IGZhbHNlLCAvLyDQnNCw0YDQutC40YDQsCDQtNCw0LvQuCDQutGA0YrRgdGC0L7RgdC70L7QstC40YbQsNGC0LAg0LUg0LjQt9C/0YDQsNGC0LXQvdCwXG4gICAgICBzaG93Q29uZmlybWF0aW9uOiBmYWxzZSwgLy8g0JrQvtC90YLRgNC+0LvQuNGA0LAg0LLQuNC00LjQvNC+0YHRgtGC0LAg0L3QsCDQvNC+0LTQsNC70LBcbiAgICAgIGN1cnJlbnREaXJlY3Rpb246IFwiaG9yaXpvbnRhbFwiLCAvLyDQodGC0LDQvdC00LDRgNGC0L3QsCDQv9C+0YHQvtC60LBcbiAgICAgIG9yaWdpbmFsR3JpZERhdGE6IHt9LFxuICAgICAgYWRUb2tlbjogbnVsbCxcbiAgICAgIHNob3dDb250aW51ZUJ1dHRvbjogdHJ1ZSxcbiAgICAgIGZlZWRiYWNrVGltZW91dElkOiBudWxsLCAvLyA8LS0g0LfQsCBjbGVhclRpbWVvdXRcbiAgICAgIHNob3dFeHBsYW5hdGlvbnNNb2RhbDogZmFsc2UsXG4gICAgICBleHBsYW5hdGlvbnNMaXN0OiBbXSxcbiAgICAgIGV4cGxhbmF0aW9uc1Nob3duT25jZTogZmFsc2UsIC8vINC00LAg0L3QtSDQvtGC0LLQsNGA0Y8g0L/QsNC6INC/0YDQuCDQv9GA0LXQt9Cw0YDQtdC20LTQsNC90LUg0L3QsCDRgdGC0LDRgtGD0YHQsFxuICAgICAgcm91bmRBY3RpdmU6IHRydWUsIC8v0LfQsCDQtNC10LDQutGC0LjQstC40YDQsNC90LUg0L3QsCDQsdGD0YLQvtC90LjRgtC1INC/0YDQuCDQt9Cw0LLRitGA0YjQtdC9INC60YDRitCzXG4gICAgfTtcbiAgfSxcbiAgY3JlYXRlZCgpIHtcbiAgICAvKiAgY29uc29sZS5sb2coXCLQn9GA0L7Qv9GB0L7QstC10YLQtSDRgdCwOlwiLCB0aGlzLmdyaWREYXRhKTsgLy8g0JLQtdC00L3QsNCz0LAg0L3QsNC70LjRh9C90LhcbiAgICBjb25zb2xlLmxvZyhcIkNyb3Nzd29yZERhdGE6XCIsIHRoaXMuY3Jvc3N3b3JkRGF0YSk7XG4gICAgY29uc29sZS5sb2coXCJTdWJtaXR0ZWREYXRhOlwiLCB0aGlzLnN1Ym1pdHRlZERhdGEpO1xuICAgIGNvbnNvbGUubG9nKFwiR3JpZERpbWVuc2lvbnNcIiwgdGhpcy5ncmlkRGltZW5zaW9ucyk7XG4gICAgY29uc29sZS5sb2coXCJtb2RlOlwiLCB0aGlzLm1vZGUpO1xuICAgIGNvbnNvbGUubG9nKFwicG9pbnRzXCIsIHRoaXMucG9pbnRzKTtcbiAgICBjb25zb2xlLmxvZyhcIkV4cGxhbmF0aW9uc01vZGFsIGltcG9ydCA9XCIsIEV4cGxhbmF0aW9uc01vZGFsKTtcbiAgICBjb25zb2xlLmxvZyhcIkxldmVsXCIsIHRoaXMuY3Jvc3N3b3JkTGV2ZWwpOyovXG4gICAgLy8g0J/QvtC00LPQvtGC0LLRj9C80LUgZ3JpZERhdGEg0YEg0LDQutGC0LjQstC90Lgg0LrQu9C10YLQutC4XG4gICAgdGhpcy5jcm9zc3dvcmREYXRhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGl0ZW0uY29vcmRpbmF0ZXMuZm9yRWFjaCgoY29vcmQpID0+IHtcbiAgICAgICAgLy8g0JjQvdC40YbQuNCw0LvQuNC30LjRgNCw0LzQtSDQutC70LXRgtC60LDRgtCwINGBINC/0YDQsNC30L3QviDQv9C+0LvQtSDQt9CwINGB0YLQvtC50L3QvtGB0YJcbiAgICAgICAgaWYgKCF0aGlzLmdyaWREYXRhW2Nvb3JkXSkge1xuICAgICAgICAgIHRoaXMuZ3JpZERhdGFbY29vcmRdID0geyB2YWx1ZTogXCJcIiwgbnVtYmVyOiBudWxsIH07IC8vINCf0L4g0L/QvtC00YDQsNC30LHQuNGA0LDQvdC1INC90Y/QvNCwINC90L7QvNC10YBcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbnN3ZXIgPSBpdGVtLmFuc3dlcjsgLy8g0J7RgtCz0L7QstC+0YDRitGCINC60LDRgtC+INC90LjQtyAo0L3QsNC/0YDQuNC80LXRgCBcItCh0J7QpNCY0K9cIilcbiAgICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPSBpdGVtLmNvb3JkaW5hdGVzOyAvLyDQmtC+0L7RgNC00LjQvdCw0YLQuNGC0LUg0L3QsCDQstGK0L/RgNC+0YHQsCAo0L3QsNC/0YDQuNC80LXRgCBbXCIyLTFcIiwgXCIyLTJcIiwgXCIyLTNcIi4uXSlcblxuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5zdWJtaXR0ZWREYXRhKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgT2JqZWN0LmtleXModGhpcy5zdWJtaXR0ZWREYXRhKS5mb3JFYWNoKChjb29yZCkgPT4ge1xuICAgICAgICAgICAgLy8g0JLQt9C10LzQsNC80LUg0YHRgtC+0LnQvdC+0YHRgtGC0LAg0L7RgiBzdWJtaXR0ZWREYXRhXG4gICAgICAgICAgICBjb25zdCBzdWJtaXR0ZWRWYWx1ZSA9IHRoaXMuc3VibWl0dGVkRGF0YVtjb29yZF0/LnZhbHVlOyAvLyDQn9GA0L7QstC10YDRj9Cy0LDQvNC1INC00LDQu9C4INC40LzQsCBgdmFsdWVgXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKGDQmtC+0L7RgNC00LjQvdCw0YLQsDogJHtjb29yZH0sINCh0YLQvtC50L3QvtGB0YI6ICR7c3VibWl0dGVkVmFsdWV9YCk7XG4gICAgICAgICAgICAvLyDQn9GA0L7QstC10YDRj9Cy0LDQvNC1INC00LDQu9C4INC60L7QvtGA0LTQuNC90LDRgtCw0YLQsCDRgdGK0YnQtdGB0YLQstGD0LLQsCDQsiBncmlkRGF0YVxuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZERhdGFbY29vcmRdKSB7XG4gICAgICAgICAgICAgIC8vINCf0L7RgdGC0LDQstGP0LzQtSDRgdGC0L7QudC90L7RgdGC0YLQsCDQvtGCIHN1Ym1pdHRlZERhdGEg0LIgZ3JpZERhdGFcbiAgICAgICAgICAgICAgdGhpcy5ncmlkRGF0YVtjb29yZF0udmFsdWUgPSBzdWJtaXR0ZWRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyDQlNC+0LHQsNCy0Y/QvNC1INC90L7QvNC10YDQsCDQutGK0Lwg0L3QsNGH0LDQu9C90LDRgtCwINC60LvQtdGC0LrQsFxuICAgICAgY29uc3Qgc3RhcnRDb29yZCA9IGl0ZW0uc3RhcnRQb3NpdGlvbjtcbiAgICAgIGlmICh0aGlzLmdyaWREYXRhW3N0YXJ0Q29vcmRdKSB7XG4gICAgICAgIHRoaXMuZ3JpZERhdGFbc3RhcnRDb29yZF0ubnVtYmVyID0gaXRlbS5udW1iZXJRdWVzdGlvbjsgLy8g0JTQvtCx0LDQstGP0LzQtSDQvdC+0LzQtdGA0LAg0L3QsCDQstGK0L/RgNC+0YHQsFxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMub3JpZ2luYWxHcmlkRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5ncmlkRGF0YSkpO1xuICAgIC8vINCe0L/RgNC10LTQtdC70Y8g0L/RitGA0LLQsNGC0LAg0LDQutGC0LjQstC90LAg0LrQu9C10YLQutCwXG4gICAgY29uc3QgZmlyc3RBY3RpdmVDZWxsID0gT2JqZWN0LmtleXModGhpcy5ncmlkRGF0YSlbMF07XG4gICAgdGhpcy5hY3RpdmVDZWxsID0gZmlyc3RBY3RpdmVDZWxsO1xuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgLy9jb25zb2xlLmxvZyhcIkNyb3Nzd29yZFJlbmRlciBjb21wb25lbnQgaXMgbW91bnRlZCFcIik7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuaGFuZGxlS2V5UHJlc3MpO1xuICAgIHRoaXMuX3JvdW5kRW5kZWRIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMucm91bmRBY3RpdmUpIHtcbiAgICAgICAgLy8g0LTQsCDQvdC1INC/0L7QutCw0LfQstCw0LzQtSDQvdGP0LrQvtC70LrQviDQv9GK0YLQuFxuICAgICAgICB0aGlzLnJvdW5kQWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5zaG93TWVzc2FnZShcbiAgICAgICAgICBcIlRoaXMgcm91bmQgaGFzIGFscmVhZHkgZmluaXNoZWQuIFlvdSBjYW4ndCBzdWJtaXQgYW55IG1vcmUgYW5zd2Vycy5cIixcbiAgICAgICAgICBcImluZm9cIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAvLyDQoNC10YTRgNC10Ygg0YHQu9C10LQgT0tcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGFpcmUtcm91bmQtZW5kZWRcIiwgdGhpcy5fcm91bmRFbmRlZEhhbmRsZXIpO1xuICB9LFxuICBiZWZvcmVVbm1vdW50KCkge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLmhhbmRsZUtleVByZXNzKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsYWlyZS1yb3VuZC1lbmRlZFwiLCB0aGlzLl9yb3VuZEVuZGVkSGFuZGxlcik7XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByb3dzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ3JpZERpbWVuc2lvbnMubWF4Um93O1xuICAgIH0sXG4gICAgY29scygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyaWREaW1lbnNpb25zLm1heENvbDtcbiAgICB9LFxuICAgIGFjdGl2ZUNlbGxzKCkge1xuICAgICAgLy8g0JjQt9Cy0LvQuNGH0LDQvNC1INCw0LrRgtC40LLQvdC40YLQtSDQutC70LXRgtC60Lgg0L7RgiBgY3Jvc3N3b3JkRGF0YWBcbiAgICAgIHJldHVybiB0aGlzLmNyb3Nzd29yZERhdGEubWFwKChpdGVtKSA9PiBpdGVtLmNvb3JkaW5hdGVzKS5mbGF0KCk7XG4gICAgfSxcbiAgICBnZXRDZWxsQ2xhc3MoKSB7XG4gICAgICByZXR1cm4gKGNlbGwpID0+IHtcbiAgICAgICAgcmV0dXJuIGNlbGwuaGlnaGxpZ2h0ZWQgPyBcImhpZ2hsaWdodGVkXCIgOiBcIlwiOyAvLyDQn9GA0LjQu9Cw0LPQsNC80LUg0LrQu9Cw0YEg0LDQutC+INC60LvQtdGC0LrQsNGC0LAg0LUg0LzQsNGA0LrQuNGA0LDQvdCwXG4gICAgICB9O1xuICAgIH0sXG4gICAgLy/Rg9C/0YDQsNCy0LvQtdC90LjQtSDQvdCwINGB0YrRgdGC0L7Rj9C90LjQtdGC0L4g0L3QsCDQsdGD0YLQvtC90LjRgtC1INC30LAg0LLQtdGA0LjRhNC40LrQsNGG0LjRjyDQuCDQuNC30L/RgNCw0YnQsNC90LUg0L3QsCDQutGA0YrRgdGC0L7RgdC70L7QstC40YbQsNGC0LBcbiAgICBpc0Nyb3Nzd29yZFN1Ym1pdHRlZCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICh0aGlzLmlzU3VibWl0dGVkIHx8IE9iamVjdC5rZXlzKHRoaXMuc3VibWl0dGVkRGF0YSkubGVuZ3RoID4gMCkgJiZcbiAgICAgICAgdGhpcy5tb2RlID09PSBcIkJcIlxuICAgICAgKTtcbiAgICB9LFxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBpc0FjdGl2ZUNlbGwocm93LCBjb2wpIHtcbiAgICAgIC8vINCf0YDQvtCy0LXRgNGP0LLQsNC80LUg0LTQsNC70Lgg0LrQu9C10YLQutCw0YLQsCDQtSDQsNC60YLQuNCy0L3QsFxuICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlQ2VsbHMuaW5jbHVkZXMoYCR7cm93fS0ke2NvbH1gKTtcbiAgICB9LFxuICAgIC8v0L3QsNC80LjRgNCw0LzQtSDQvdC+0LzQtdGA0LAg0L3QsCDQstGK0L/RgNC+0YHQsCDQvdCwINC60L7QudGC0L4g0L7RgtCz0L7QstCw0YDRjyDQuNCz0YDQsNGH0LAg0LIg0LzQvtC80LXQvdGC0LBcbiAgICBnZXRRdWVzdGlvbk51bWJlcihjb29yZCkge1xuICAgICAgaWYgKHRoaXMuZ3JpZERhdGFbY29vcmRdKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWREYXRhW2Nvb3JkXS5udW1iZXI7IC8vINCS0YDRitGJ0LDQvNC1INC90L7QvNC10YDQsCDQvdCwINCy0YrQv9GA0L7RgdCwXG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDsgLy8g0JDQutC+INC90Y/QvNCwINC90L7QvNC10YAsINCy0YDRitGJ0LDQvNC1IG51bGxcbiAgICB9LFxuXG4gICAgLy/QvdCw0LzQuNGA0LDQvNC1INC/0L7RgdC+0LrQsNGC0LBcbiAgICBnZXREaXJlY3Rpb24oY29vcmQpIHtcbiAgICAgIGxldCBtYXRjaGluZ1F1ZXN0aW9uID0gbnVsbDtcblxuICAgICAgZm9yIChjb25zdCBxdWVzdGlvbiBvZiB0aGlzLmNyb3Nzd29yZERhdGEpIHtcbiAgICAgICAgaWYgKHF1ZXN0aW9uLmNvb3JkaW5hdGVzLmluY2x1ZGVzKGNvb3JkKSkge1xuICAgICAgICAgIC8vINCQ0LrQviDQvdCw0LzQtdGA0LjQvCDQstGK0L/RgNC+0YEg0YEg0YLQtdC60YPRidCw0YLQsCDQv9C+0YHQvtC60LAsINC40LfQsdC40YDQsNC80LUg0L3QtdCz0L5cbiAgICAgICAgICBpZiAocXVlc3Rpb24uZGlyZWN0aW9uID09PSB0aGlzLmN1cnJlbnREaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIG1hdGNoaW5nUXVlc3Rpb24gPSBxdWVzdGlvbjtcbiAgICAgICAgICAgIGJyZWFrOyAvLyDQodC/0LjRgNCw0LzQtSDRgtGK0YDRgdC10L3QtdGC0L4sINC30LDRidC+0YLQviDQvdCw0LzQtdGA0LjRhdC80LUg0L/RgNC10LTQv9C+0YfQuNGC0LDQvSDQstGK0L/RgNC+0YFcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyDQkNC60L4g0L3Rj9C80LAg0YLQtdC60YPRidCwINC/0L7RgdC+0LrQsCwg0LLQt9C10LzQsNC80LUg0L/RitGA0LLQuNGPINGB0YrQstC/0LDQtNCw0YlcbiAgICAgICAgICBpZiAoIW1hdGNoaW5nUXVlc3Rpb24pIHtcbiAgICAgICAgICAgIG1hdGNoaW5nUXVlc3Rpb24gPSBxdWVzdGlvbjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG1hdGNoaW5nUXVlc3Rpb24pIHtcbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gbWF0Y2hpbmdRdWVzdGlvbi5jb29yZGluYXRlcy5pbmRleE9mKGNvb3JkKTtcblxuICAgICAgICAvLyDQkNC60L4g0LjQvNCwINGB0LvQtdC00LLQsNGJ0LAg0LrQvtC+0YDQtNC40L3QsNGC0LAsINGPINCy0YDRitGJ0LDQvNC1LCDQvdC+INC/0YDQvtC/0YPRgdC60LDQvNC1INC/0L7Qv9GK0LvQvdC10L3QuNGC0LVcbiAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA8IG1hdGNoaW5nUXVlc3Rpb24uY29vcmRpbmF0ZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICBsZXQgaSA9IGN1cnJlbnRJbmRleCArIDE7XG4gICAgICAgICAgICBpIDwgbWF0Y2hpbmdRdWVzdGlvbi5jb29yZGluYXRlcy5sZW5ndGg7XG4gICAgICAgICAgICBpKytcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRDb29yZCA9IG1hdGNoaW5nUXVlc3Rpb24uY29vcmRpbmF0ZXNbaV07XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgIXRoaXMuZ3JpZERhdGFbbmV4dENvb3JkXSB8fFxuICAgICAgICAgICAgICB0aGlzLmdyaWREYXRhW25leHRDb29yZF0udmFsdWUgPT09IFwiXCJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogbWF0Y2hpbmdRdWVzdGlvbi5kaXJlY3Rpb24sXG4gICAgICAgICAgICAgICAgbmV4dENvb3JkOiBuZXh0Q29vcmQsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8g0JDQutC+INCy0YHQuNGH0LrQuCDRgdC70LXQtNCy0LDRidC4INC60LvQtdGC0LrQuCDRgdCwINC/0L7Qv9GK0LvQvdC10L3QuCwg0L3QtSDRgdC1INC/0YDQtdC80LXRgdGC0LLQsFxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkaXJlY3Rpb246IG1hdGNoaW5nUXVlc3Rpb24uZGlyZWN0aW9uLFxuICAgICAgICAgICAgbmV4dENvb3JkOiBudWxsLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyDQkNC60L4g0YHQvNC1INC90LAg0L/QvtGB0LvQtdC00L3QsNGC0LAg0LrQu9C10YLQutCwLCDQvdC1INGB0LUg0L/RgNC10LzQtdGB0YLQstCwXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGlyZWN0aW9uOiBtYXRjaGluZ1F1ZXN0aW9uLmRpcmVjdGlvbixcbiAgICAgICAgICBuZXh0Q29vcmQ6IG51bGwsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vINCQ0LrQviDQvdGP0LzQsCDRgdGK0LLQv9Cw0LTQsNGJINCy0YrQv9GA0L7RgSwg0LLRgNGK0YnQsNC80LUg0YLQtdC60YPRidCw0YLQsCDQv9C+0YHQvtC60LAg0LggbnVsbCDQt9CwIG5leHRDb29yZFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnREaXJlY3Rpb24gfHwgXCJob3Jpem9udGFsXCIsXG4gICAgICAgIG5leHRDb29yZDogbnVsbCxcbiAgICAgIH07XG4gICAgfSxcbiAgICAvL9GE0YPQvdC60YbQuNGPINC30LAg0L/RgNC10LTQuNGI0L3QsCDQutC70LXRgtC60LAv0LfQsCDRgtGA0LjQtdC90LUg0YEg0LHQtdC60YHQv9C10LnRgS3QsFxuICAgIGdldFByZXZEaXJlY3Rpb24oY29vcmQpIHtcbiAgICAgIGxldCBtYXRjaGluZ1F1ZXN0aW9uID0gbnVsbDtcblxuICAgICAgZm9yIChjb25zdCBxdWVzdGlvbiBvZiB0aGlzLmNyb3Nzd29yZERhdGEpIHtcbiAgICAgICAgaWYgKHF1ZXN0aW9uLmNvb3JkaW5hdGVzLmluY2x1ZGVzKGNvb3JkKSkge1xuICAgICAgICAgIGlmIChxdWVzdGlvbi5kaXJlY3Rpb24gPT09IHRoaXMuY3VycmVudERpcmVjdGlvbikge1xuICAgICAgICAgICAgbWF0Y2hpbmdRdWVzdGlvbiA9IHF1ZXN0aW9uO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghbWF0Y2hpbmdRdWVzdGlvbikge1xuICAgICAgICAgICAgbWF0Y2hpbmdRdWVzdGlvbiA9IHF1ZXN0aW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobWF0Y2hpbmdRdWVzdGlvbikge1xuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSBtYXRjaGluZ1F1ZXN0aW9uLmNvb3JkaW5hdGVzLmluZGV4T2YoY29vcmQpO1xuXG4gICAgICAgIC8vINCS0YrRgNCy0LjQvCDQvdCw0LfQsNC0INC00L7QutCw0YLQviDQvdCw0LzQtdGA0LjQvCDQutC70LXRgtC60LAsXG4gICAgICAgIC8vINC60L7Rj9GC0L4g0YHRitGJ0LXRgdGC0LLRg9Cy0LAg0LIgZ3JpZERhdGEg0Lgg0J3QlSDQtSBmcm96ZW5cbiAgICAgICAgZm9yIChsZXQgaSA9IGN1cnJlbnRJbmRleCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgY29uc3QgcHJldkNvb3JkID0gbWF0Y2hpbmdRdWVzdGlvbi5jb29yZGluYXRlc1tpXTtcblxuICAgICAgICAgIGlmICh0aGlzLmdyaWREYXRhW3ByZXZDb29yZF0gPT09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgICAgICAgaWYgKHRoaXMuaXNDZWxsRnJvemVuKHByZXZDb29yZCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbjogbWF0Y2hpbmdRdWVzdGlvbi5kaXJlY3Rpb24sXG4gICAgICAgICAgICBwcmV2Q29vcmQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGlyZWN0aW9uOiBtYXRjaGluZ1F1ZXN0aW9uLmRpcmVjdGlvbixcbiAgICAgICAgICBwcmV2Q29vcmQ6IG51bGwsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpcmVjdGlvbjogdGhpcy5jdXJyZW50RGlyZWN0aW9uIHx8IFwiaG9yaXpvbnRhbFwiLFxuICAgICAgICBwcmV2Q29vcmQ6IG51bGwsXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICAvL9GE0YPQvdC60YbQuNGPINC30LAg0YLRgNC40LXQvdC1INGBINCx0LXQutGB0L/QtdC50YFcbiAgICBoYW5kbGVCYWNrc3BhY2UoY29vcmQsIGV2ZW50KSB7XG4gICAgICBpZiAodGhpcy5pc0NlbGxGcm96ZW4oY29vcmQpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2VsbCA9IHRoaXMuZ3JpZERhdGFbY29vcmRdO1xuICAgICAgaWYgKCFjZWxsKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IFN0cmluZyhjZWxsLnZhbHVlID8/IFwiXCIpLnRyaW0oKTtcblxuICAgICAgLy8gMSkg0JDQutC+INC40LzQsCDQsdGD0LrQstCwIC0+INGC0YDQuNC10Lwg0YHQsNC80L4g0YLQsNC30Lgg0LHRg9C60LLQsFxuICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPT0gXCJcIikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmNsZWFyQ2VsbChjb29yZCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gMikg0JDQutC+INC1INC/0YDQsNC30L3QviAtPiDQstGK0YDQvdC4INC90LDQt9Cw0LQg0L/QviDRgtC10LrRg9GJ0LDRgtCwINC/0L7RgdC+0LrQsC/QstGK0L/RgNC+0YFcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIGNvbnN0IHsgZGlyZWN0aW9uLCBwcmV2Q29vcmQgfSA9IHRoaXMuZ2V0UHJldkRpcmVjdGlvbihjb29yZCk7XG4gICAgICB0aGlzLmN1cnJlbnREaXJlY3Rpb24gPSBkaXJlY3Rpb247XG5cbiAgICAgIGlmICghcHJldkNvb3JkIHx8IHRoaXMuZ3JpZERhdGFbcHJldkNvb3JkXSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cbiAgICAgIHRoaXMuYWN0aXZlQ2VsbCA9IHByZXZDb29yZDtcblxuICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgYGlucHV0W2RhdGEtY29vcmRpbmF0ZXM9XCIke3ByZXZDb29yZH1cIl1gLFxuICAgICAgICApO1xuICAgICAgICBpZiAoaW5wdXQpIGlucHV0LmZvY3VzKCk7XG4gICAgICB9KTtcblxuICAgICAgLy8g4pyFINCQ0LrQviDQuNGB0LrQsNGIIFwi0LDQs9GA0LXRgdC40LLQvdC+XCIg0L/QvtCy0LXQtNC10L3QuNC1OlxuICAgICAgLy8g0L/RgNC4INC/0YDQsNC30L3QsCDQutC70LXRgtC60LAgYmFja3NwYWNlINC00LAg0LjQt9GC0YDQuNC1INC4INC/0YDQtdC00LjRiNC90LDRgtCwOlxuICAgICAgLy9cbiAgICAgIGlmICghdGhpcy5pc0NlbGxGcm96ZW4ocHJldkNvb3JkKSkge1xuICAgICAgICB0aGlzLmNsZWFyQ2VsbChwcmV2Q29vcmQpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBpc0NlbGxGcm96ZW4oY29vcmQpIHtcbiAgICAgIHJldHVybiB0aGlzLmNyb3Nzd29yZERhdGEuc29tZShcbiAgICAgICAgKGl0ZW0pID0+XG4gICAgICAgICAgaXRlbS5jb29yZGluYXRlcy5pbmNsdWRlcyhjb29yZCkgJiZcbiAgICAgICAgICBpdGVtLnBvaW50cyA+IDAgJiZcbiAgICAgICAgICBpdGVtLnZlcmlmaWVkID09PSBpdGVtLmFuc3dlcixcbiAgICAgICk7XG4gICAgfSxcbiAgICBjbGVhckNlbGwoY29vcmQpIHtcbiAgICAgIC8qIGlmICghdGhpcy5ncmlkRGF0YVtjZWxsS2V5XSkgcmV0dXJuO1xuICAgICAgdGhpcy5ncmlkRGF0YVtjZWxsS2V5XS52YWx1ZSA9IFwiXCI7IC8vINCY0LfRgtGA0LjQstCw0LzQtSDQsdGD0LrQstCw0YLQsCovXG5cbiAgICAgIGNvbnN0IGNlbGwgPSB0aGlzLmdyaWREYXRhW2Nvb3JkXTtcbiAgICAgIGlmICghY2VsbCkgcmV0dXJuO1xuICAgICAgY2VsbC52YWx1ZSA9IFwiXCI7XG4gICAgICBjZWxsLmpva2VyID0gZmFsc2U7IC8vINC80LDRhdCw0LzQtSDRgdGC0LDRgtGD0YHQsCDigJ7QttC+0LrQtdGA4oCcXG4gICAgICBjZWxsLmhpZ2hsaWdodGVkID0gZmFsc2U7IC8vINCw0LrQviDQtSDQvtGB0YLQsNC90LDQu1xuICAgICAgY2VsbC5ibGluayA9IGZhbHNlOyAvLyDQsNC60L4g0LUg0L7RgdGC0LDQvdCw0LsqL1xuICAgIH0sXG4gICAgLy/RhNC+0LrRg9GB0LjRgNCw0L3QtSDQvdCwINC40L3Qv9GD0YIg0L/QvtC70LXRgtC+INC30LAg0LLRitCy0LXQttC00LDQvdC1INC90LAg0LHRg9C60LLQsFxuICAgIGhhbmRsZUZvY3VzKGNvb3JkLCBldmVudCkge1xuICAgICAgdGhpcy5hY3RpdmVDZWxsID0gY29vcmQ7XG4gICAgICAvLyDQodC10LvQtdC60YLQuNGA0LDQvNC1INCx0YPQutCy0LDRgtCwLCDQt9CwINC00LAg0YHQtSDQt9Cw0LzQtdC90Lgg0L/RgNC4INGB0LvQtdC00LLQsNGJ0L4g0LLRitCy0LXQttC00LDQvdC1XG4gICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgIGV2ZW50LnRhcmdldC5zZWxlY3QoKTtcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICAvLyDQmNC30YfQuNGB0YLQstCw0LzQtSDRgdGC0L7QudC90L7RgdGC0YLQsCDQvdCwINC60LvQtdGC0LrQsNGC0LBcbiAgICByZXBsYWNlQ2VsbFZhbHVlKGNvb3JkLCBldmVudCkge1xuICAgICAgaWYgKCFldmVudC5rZXkubWF0Y2goL15bYS16QS1a0LAt0Y/QkC3Qr10kLykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyDQn9GA0L7RgdGC0L4g0YHQtdC70LXQutGC0LjRgNCw0LzQtSDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4g4oCTINC90LUg0LPQviDRgtGA0LjQtdC8XG4gICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgIGV2ZW50LnRhcmdldC5zZWxlY3QoKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgLy/Qv9GA0Lgg0LHQtdC60YHQv9C10LnRgSDRgtGA0LjQtdC8LCDQv9GA0Lgg0LTRgNGD0LMg0YHQu9GD0YfQsNC5INC40LfQv9C+0LvQt9Cy0LDQvNC1IHJlcGxhY2VDZWxsVmFsdWVcbiAgICBoYW5kbGVDZWxsS2V5ZG93bihjb29yZCwgZXZlbnQpIHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09IFwiQmFja3NwYWNlXCIpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVCYWNrc3BhY2UoY29vcmQsIGV2ZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSBcIkRlbGV0ZVwiKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlRGVsZXRlKGNvb3JkLCBldmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8g0L7RgdGC0LDQstGP0LzQtSDQu9C+0LPQuNC60LDRgtCwINC30LAg0YHQtdC70LXQutGC0LjRgNCw0L3QtSDQv9GA0Lgg0LHRg9C60LLQsFxuICAgICAgdGhpcy5yZXBsYWNlQ2VsbFZhbHVlKGNvb3JkLCBldmVudCk7XG4gICAgfSxcblxuICAgIGhhbmRsZURlbGV0ZShjb29yZCwgZXZlbnQpIHtcbiAgICAgIGlmICh0aGlzLmlzQ2VsbEZyb3plbihjb29yZCkpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5jbGVhckNlbGwoY29vcmQpO1xuICAgIH0sXG5cbiAgICAvKiB1cGRhdGVDZWxsKGNvb3JkLCB2YWx1ZSkge1xuICAgICAgaWYgKCFjb29yZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwi0JrQvtC+0YDQtNC40L3QsNGC0LjRgtC1INGB0LAg0LvQuNC/0YHQstCw0YnQuC4g0J3QtSDQvNC+0LbQtdC8INC00LAg0L7QsdC90L7QstC40Lwg0LrQu9C10YLQutCw0YLQsC5cIlxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuZ3JpZERhdGFbY29vcmRdKSB7XG4gICAgICAgIC8vINCj0LLQtdGA0Y/QstCw0LzQtSDRgdC1LCDRh9C1INC60LvQtdGC0LrQsNGC0LAg0YHRitGJ0LXRgdGC0LLRg9Cy0LBcbiAgICAgICAgdGhpcy5ncmlkRGF0YVtjb29yZF0gPSB7IHZhbHVlOiBcIlwiLCBudW1iZXI6IG51bGwgfTtcbiAgICAgIH1cblxuICAgICAgLy8g0JDQutC+INGB0YLQvtC50L3QvtGB0YLRgtCwINC1INC/0YDQsNC30L3QsCwg0L3QtSDQv9GA0LXQvNC10YHRgtCy0LDQvNC1INC60YPRgNGB0L7RgNCwINC4INC40LfQu9C40LfQsNC80LUg0L7RgiDQvNC10YLQvtC00LBcbiAgICAgIGlmICh2YWx1ZS50cmltKCkgPT09IFwiXCIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8g0JLQuNC90LDQs9C4INC30LDQvNC10YHRgtCy0LDQvNC1INGB0YLQsNGA0LDRgtCwINCx0YPQutCy0LAg0YEg0L3QvtCy0LDRgtCwXG4gICAgICAvLyDQkNCy0YLQvtC80LDRgtC40YfQvdC+INC/0YDQtdC80LjQvdCw0LLQsNC90LUg0LrRitC8INGB0LvQtdC00LLQsNGJ0L7RgtC+INC/0L7Qu9C1XG4gICAgICAvLyDQktC30LXQvNCw0LzQtSDQv9C+0YHQvtC60LDRgtCwINC4INGB0LvQtdC00LLQsNGJ0LDRgtCwINC60L7QvtGA0LTQuNC90LDRgtCwXG4gICAgICBjb25zdCB7IGRpcmVjdGlvbiwgbmV4dENvb3JkIH0gPSB0aGlzLmdldERpcmVjdGlvbihjb29yZCk7XG4gICAgICAvLyDQl9Cw0L/QsNC30LLQsNC80LUg0L/QvtGB0L7QutCw0YLQsCDQt9CwINCx0YrQtNC10YnQuCDQtNCy0LjQttC10L3QuNGPXG4gICAgICB0aGlzLmN1cnJlbnREaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4gICAgICAvLyDQn9GA0LXQvNC40L3QsNCy0LDQvNC1INC60YrQvCDRgdC70LXQtNCy0LDRidC+0YLQviDQv9C+0LvQtSwg0LDQutC+INGB0YrRidC10YHRgtCy0YPQstCwXG4gICAgICBpZiAobmV4dENvb3JkICYmIHRoaXMuZ3JpZERhdGFbbmV4dENvb3JkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlQ2VsbCA9IG5leHRDb29yZDtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgIGBpbnB1dFtkYXRhLWNvb3JkaW5hdGVzPVwiJHtuZXh0Q29vcmR9XCJdYFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGlucHV0KSBpbnB1dC5mb2N1cygpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNlbGwgPSB0aGlzLmdyaWREYXRhW2Nvb3JkXTtcbiAgICAgIGlmICghY2VsbCkgcmV0dXJuO1xuICAgICAgY2VsbC52YWx1ZSA9IHZhbHVlO1xuICAgICAgaWYgKHZhbHVlKSBjZWxsLmpva2VyID0gZmFsc2U7IC8vINC80LDRhdCw0LzQtSDRgdGC0LDRgtGD0YHQsCDigJ7QttC+0LrQtdGA4oCcXG4gICAgICAvLyDQn9GD0YHQutCw0LzQtSDQt9Cy0YPQutC+0LIg0YHQuNCz0L3QsNC7XG4gICAgICB0aGlzLnBsYXlTb3VuZCgpO1xuICAgICAgdGhpcy5ncmlkRGF0YVtjb29yZF0udmFsdWUgPSB2YWx1ZS50b1VwcGVyQ2FzZSgpOyAvLyDQntCx0L3QvtCy0Y/QstCw0LzQtSDRgdGC0L7QudC90L7RgdGC0YLQsCDQvdCwINC60LvQtdGC0LrQsNGC0LBcbiAgICB9LCovXG4gICAgdXBkYXRlQ2VsbChjb29yZCwgdmFsdWUpIHtcbiAgICAgIGlmICghY29vcmQpIHJldHVybjtcblxuICAgICAgaWYgKCF0aGlzLmdyaWREYXRhW2Nvb3JkXSkge1xuICAgICAgICB0aGlzLmdyaWREYXRhW2Nvb3JkXSA9IHsgdmFsdWU6IFwiXCIsIG51bWJlcjogbnVsbCB9O1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUudHJpbSgpID09PSBcIlwiKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGNlbGwgPSB0aGlzLmdyaWREYXRhW2Nvb3JkXTtcbiAgICAgIGlmICghY2VsbCkgcmV0dXJuO1xuXG4gICAgICBjZWxsLnZhbHVlID0gdmFsdWUudG9VcHBlckNhc2UoKTtcbiAgICAgIGNlbGwuam9rZXIgPSBmYWxzZTtcblxuICAgICAgdGhpcy5wbGF5U291bmQoKTtcblxuICAgICAgY29uc3QgeyBkaXJlY3Rpb24sIG5leHRDb29yZCB9ID0gdGhpcy5nZXREaXJlY3Rpb24oY29vcmQpO1xuICAgICAgdGhpcy5jdXJyZW50RGlyZWN0aW9uID0gZGlyZWN0aW9uO1xuXG4gICAgICBpZiAobmV4dENvb3JkICYmIHRoaXMuZ3JpZERhdGFbbmV4dENvb3JkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlQ2VsbCA9IG5leHRDb29yZDtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgIGBpbnB1dFtkYXRhLWNvb3JkaW5hdGVzPVwiJHtuZXh0Q29vcmR9XCJdYCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChpbnB1dCkgaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBwbGF5U291bmQoKSB7XG4gICAgICAvLyDQnNC+0LbQtdC8INC00LAg0LjQt9C/0L7Qu9C30LLQsNC80LUg0LfQstGD0LosINC60L7QudGC0L4g0YnQtSDRgdC1INC/0YPRgdC60LAg0L/RgNC4INCy0YHRj9C60L4g0LLRitCy0LXQttC00LDQvdC1XG4gICAgICBjb25zdCBzb3VuZCA9IG5ldyBBdWRpbyhcIi9zb3VuZHMvaW5wdXRTZWxsLm1wM1wiKTsgLy8g0J/RitGCINC60YrQvCDQt9Cy0YPQutC+0LLQuNGPINGE0LDQudC7XG4gICAgICBzb3VuZC5wbGF5KCk7XG4gICAgfSxcbiAgICAvL9C80LXRgtC+0LQg0LfQsCDQvtGC0LLQsNGA0Y/QvdC1INC90LAg0L3QvtCyINC/0YDQvtC30L7RgNC10YYg0LfQsCDQu9GD0LTQsNGC0LAg0LfQsNCz0LDQtNC60LAvb3BlbkFJL1xuICAgIG9wZW5SaWRkbGUocmlkZGxlSWQpIHtcbiAgICAgIHdpbmRvdy5vcGVuKGAvY3JhenktcHV6emxlLyR7cmlkZGxlSWR9YCwgXCJfYmxhbmtcIik7XG4gICAgfSxcblxuICAgIC8v0LzQtdGC0L7QtCDQt9CwINCz0LXQvdC10YDQuNGA0L3QsCDQvdC1INC/0YrRgtGPINC30LAg0LbQvtC60LXRgNC40YLQtSDQsiDQtNC10LzQviDQuCDQvdC10LTQtdC80L4g0YDQtdC20LjQvFxuICAgIHBhdGhCeU1vZGUocGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gXCJkZW1vXCJcbiAgICAgICAgPyBwYXRoLnJlcGxhY2UoL15cXC9jcm9zc3dvcmQvLCBcIi9kZW1vY3Jvc3N3b3JkXCIpXG4gICAgICAgIDogcGF0aDtcbiAgICB9LFxuICAgIC8v0LXQvdC00L/QvtC40L3RgiDQt9CwINC20L7QutC10YAg0LIg0LfQsNCy0LjRgdC40LzQvtGB0YIg0LTQsNC70Lgg0YHQvNC1INCyINC00LXQvNC+INGA0LXQttC40LwsINC40LvQuCDQvdC1XG5cbiAgICBnZXRKb2tlckVuZHBvaW50cyhqb2tlclR5cGUpIHtcbiAgICAgIHN3aXRjaCAoam9rZXJUeXBlKSB7XG4gICAgICAgIGNhc2UgXCJ2ZXJ0aWNhbFwiOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjaGVja1BhdGg6IHRoaXMucGF0aEJ5TW9kZShcIi9jcm9zc3dvcmQvam9rZXIvY2hlY2tcIiksXG4gICAgICAgICAgICBncmFudFBhdGg6IHRoaXMucGF0aEJ5TW9kZShcIi9jcm9zc3dvcmQvam9rZXJcIiksXG4gICAgICAgICAgfTtcbiAgICAgICAgY2FzZSBcIm1hdGNoaW5nXCI6IC8vINGB0YrQstC/0LDQtNCw0YnQsCDQsdGD0LrQstCwXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNoZWNrUGF0aDogdGhpcy5wYXRoQnlNb2RlKFwiL2Nyb3Nzd29yZC9jaGVjay12YWxpZC1hbnN3ZXJcIiksXG4gICAgICAgICAgICBncmFudFBhdGg6IHRoaXMucGF0aEJ5TW9kZShcIi9jcm9zc3dvcmQvbGV0cmFzLWNvaW5zaWRlbnRlc1wiKSxcbiAgICAgICAgICB9O1xuICAgICAgICBjYXNlIFwicmFuZG9tTGV0dGVyXCI6IC8vINGB0LvRg9GH0LDQudC90LAg0LHRg9C60LLQsFxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAvLyDQv9C+0LvQt9Cy0LDQvNC1INGB0YrRidC40Y8gcHJlY2hlY2sg0LrQsNGC0L4g0L/RgNC4IHZlcnRpY2FsICjQtNCwINC90LUg0LUg0LLQtdGH0LUg0L/QvtC/0YrQu9C90LXQvdCwINC00YPQvNCw0YLQsClcbiAgICAgICAgICAgIGNoZWNrUGF0aDogdGhpcy5wYXRoQnlNb2RlKFwiL2Nyb3Nzd29yZC9qb2tlci9jaGVja1wiKSxcbiAgICAgICAgICAgIGdyYW50UGF0aDogdGhpcy5wYXRoQnlNb2RlKFwiL2Nyb3Nzd29yZC9yYW5kb20tbGV0dGVyLWpva2VyXCIpLFxuICAgICAgICAgIH07XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8g0L/QviDQsdC10LfQvtC/0LDRgdC90L7RgdGCIOKAkyDRgtGA0LXRgtC40YDQsNC80LUg0LrQsNGC0L4gdmVydGljYWxcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2hlY2tQYXRoOiB0aGlzLnBhdGhCeU1vZGUoXCIvY3Jvc3N3b3JkL2pva2VyL2NoZWNrXCIpLFxuICAgICAgICAgICAgZ3JhbnRQYXRoOiB0aGlzLnBhdGhCeU1vZGUoXCIvY3Jvc3N3b3JkL2pva2VyXCIpLFxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgfSxcbiAgICAvKiBnZXRKb2tlckVuZHBvaW50cygpIHtcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09IFwiZGVtb1wiKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2hlY2s6IFwiL2RlbW9jcm9zc3dvcmQvam9rZXIvY2hlY2tcIixcbiAgICAgICAgICBncmFudDogXCIvZGVtb2Nyb3Nzd29yZC9qb2tlclwiLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgY2hlY2s6IFwiL2Nyb3Nzd29yZC9qb2tlci9jaGVja1wiLCBncmFudDogXCIvY3Jvc3N3b3JkL2pva2VyXCIgfTtcbiAgICB9LCovXG4gICAgLy8g0JzQtdGC0L7QtCDQt9CwINC/0L7QutCw0LfQstCw0L3QtS/RgdC60YDQuNCy0LDQvdC1INC90LAg0L7Qv9GG0LjQuNGC0LUg0LfQsCDQttC+0LrQtdGAXG4gICAgdG9nZ2xlSm9rZXJPcHRpb25zKCkge1xuICAgICAgLypjb25zb2xlLmxvZyhcbiAgICAgICAgXCJbQ3Jvc3N3b3JkUmVuZGVyXSB0b2dnbGVKb2tlck9wdGlvbnMgY2FsbGVkIChtb2RlPVwiLFxuICAgICAgICB0aGlzLm1vZGUsXG4gICAgICAgIFwiLCBjcm9zc3dvcmRMZXZlbD1cIixcbiAgICAgICAgdGhpcy5jcm9zc3dvcmRMZXZlbCxcbiAgICAgICAgXCIpXCIsXG4gICAgICApOyovXG4gICAgICB0aGlzLnNob3dKb2tlck9wdGlvbnMgPSAhdGhpcy5zaG93Sm9rZXJPcHRpb25zO1xuICAgICAgLy8g0JDQutC+INGB0LUg0L/QvtC60LDQt9Cy0LDRgiDQvtC/0YbQuNC40YLQtSwg0LfQsNGA0LXQttC00LDQvNC1INCy0LXRgNGC0LjQutCw0LvQvdC40YLQtSDQstGK0L/RgNC+0YHQuFxuICAgICAgaWYgKHRoaXMuc2hvd0pva2VyT3B0aW9ucykge1xuICAgICAgICB0aGlzLmZldGNoVmVydGljYWxRdWVzdGlvbnMoKTtcbiAgICAgICAgLyogY29uc29sZS5sb2coXG4gICAgICAgICAgXCJbQ3Jvc3N3b3JkUmVuZGVyXSBzaG93Sm9rZXJPcHRpb25zID0gdHJ1ZSwgdmVydGljYWxRdWVzdGlvbnM9XCIsXG4gICAgICAgICAgdGhpcy52ZXJ0aWNhbFF1ZXN0aW9ucyxcbiAgICAgICAgKTsqL1xuICAgICAgfVxuICAgIH0sXG4gICAgLy8g0JfQsNGA0LXQttC00LDQvNC1INCy0LXRgNGC0LjQutCw0LvQvdC40YLQtSDQstGK0L/RgNC+0YHQuFxuICAgIGZldGNoVmVydGljYWxRdWVzdGlvbnMoKSB7XG4gICAgICAvLyDQpNC40LvRgtGA0LjRgNCw0LzQtSDQstC10YDRgtC40LrQsNC70L3QuNGC0LUg0LLRitC/0YDQvtGB0Lgg0L7RgiBjcm9zc3dvcmREYXRhXG4gICAgICB0aGlzLnZlcnRpY2FsUXVlc3Rpb25zID0gdGhpcy5jcm9zc3dvcmREYXRhXG4gICAgICAgIC5maWx0ZXIoKHF1ZXN0aW9uKSA9PiBxdWVzdGlvbi5kaXJlY3Rpb24gPT09IFwidmVydGljYWxcIikgLy8g0KTQuNC70YLRgNC40YDQsNC80LUg0LLQtdGA0YLQuNC60LDQu9C90LjRgtC1INCy0YrQv9GA0L7RgdC4XG4gICAgICAgIC5tYXAoKHF1ZXN0aW9uKSA9PiAoe1xuICAgICAgICAgIG51bWJlcjogcXVlc3Rpb24ubnVtYmVyUXVlc3Rpb24sIC8vINCS0LfQtdC80LDQvNC1INC90L7QvNC10YDQsCDQvdCwINCy0YrQv9GA0L7RgdCwXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IHF1ZXN0aW9uLmNvb3JkaW5hdGVzLCAvLyDQnNC+0LbQtdC8INC00LAg0LfQsNC/0LjRiNC10Lwg0Lgg0LrQvtC+0YDQtNC40L3QsNGC0LjRgtC1LCDQsNC60L4g0YHQsCDQvdGD0LbQvdC4XG4gICAgICAgIH0pKTtcbiAgICB9LFxuXG4gICAgLy8g0JzQtdGC0L7QtCDQt9CwINC40LfQsdC+0YAg0L3QsCDQstGK0L/RgNC+0YEg0LfQsCDQttC+0LrQtdGAINC4INC/0YDQvtCy0LXRgNC60LAg0LTQsNC70Lgg0LTRg9C80LDRgtCwINC1INCy0LXRh9C1INC/0L7Qv9GK0LvQvdC10L3QsFxuICAgIGFzeW5jIHNlbGVjdFF1ZXN0aW9uRm9ySm9rZXIocXVlc3Rpb24pIHtcbiAgICAgIC8vY29uc29sZS5sb2coXCJbQ3Jvc3N3b3JkUmVuZGVyXSBzZWxlY3RRdWVzdGlvbkZvckpva2VyXCIsIHF1ZXN0aW9uKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRRdWVzdGlvbiA9IHF1ZXN0aW9uO1xuICAgICAgdGhpcy5zaG93Sm9rZXJPcHRpb25zID0gZmFsc2U7IC8vINCh0LrRgNC40LLQsNC80LUg0L7Qv9GG0LjQuNGC0LUg0LfQsCDQuNC30LHQvtGAINC90LAg0LLRitC/0YDQvtGBXG5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIGNyb3Nzd29yZElkOiB0aGlzLmNyb3Nzd29yZElkLFxuICAgICAgICBncmlkRGF0YTogdGhpcy5ncmlkRGF0YSxcbiAgICAgICAgcXVlc3Rpb25OdW1iZXI6IHF1ZXN0aW9uLm51bWJlcixcbiAgICAgICAgcXVlc3Rpb25Db29yZGluYXRlczogcXVlc3Rpb24uY29vcmRpbmF0ZXMsXG4gICAgICAgIC8vIGpva2VyVHlwZTogJ3ZlcnRpY2FsJyAvLyDQsNC60L4g0LUg0L3Rg9C20L3QvlxuICAgICAgfTtcbiAgICAgIC8vINC/0YDQvtCy0LXRgNC60LAg0LrRitC8INC/0YDQsNCy0LjQu9C90LjRjyAvY2hlY2tcbiAgICAgIGNvbnN0IHsgY2hlY2tQYXRoLCBncmFudFBhdGggfSA9IHRoaXMuZ2V0Sm9rZXJFbmRwb2ludHMoXCJ2ZXJ0aWNhbFwiKTtcbiAgICAgIC8vIDEpINCR0KrQoNCX0JAg0J/QoNCe0JLQldCg0JrQkCDQn9Cg0JXQlNCYINCg0JXQmtCb0JDQnNCQICjQtNC40YDQtdC60YLQvdC+INGC0YPQuilcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGNoZWNrUGF0aCwge1xuICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgaGVhZGVyczogeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKTtcbiAgICAgICAgLypjb25zb2xlLmxvZyhcbiAgICAgICAgICBcIltDcm9zc3dvcmRSZW5kZXJdIHNlbGVjdFF1ZXN0aW9uRm9ySm9rZXIgY2hlY2sgcmVzcG9uc2VcIixcbiAgICAgICAgICByZXMuc3RhdHVzLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICk7Ki9cbiAgICAgICAgLy8g0LDQutC+INC40LzQsNC80LUgZXJyb3IgKNC90LXQt9Cw0LLQuNGB0LjQvNC+INC+0YIg0YHRgtCw0YLRg9GBINC60L7QtNCwKSDihpIg0L/QvtC60LDQt9Cy0LDQvNC1INC4INCh0J/QmNCg0JDQnNCVXG4gICAgICAgIGlmICghcmVzLm9rIHx8IGRhdGE/LmVycm9yKSB7XG4gICAgICAgICAgdGhpcy5zaG93TWVzc2FnZShkYXRhPy5lcnJvciB8fCBcIlNlcnZlciBlcnJvci5cIik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJbQ3Jvc3N3b3JkUmVuZGVyXSBzZWxlY3RRdWVzdGlvbkZvckpva2VyIGNoZWNrIGZhaWxlZFwiLFxuICAgICAgICAgIGUsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2hvd01lc3NhZ2UoXCJOZXR3b3JrIGVycm9yLiBQbGVhc2UgdHJ5IGFnYWluLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8g0JjQt9C/0YDQsNGJ0LDQvNC1INC40LfQsdGA0LDQvdC40YLQtSDQtNCw0L3QvdC4INC00LjRgNC10LrRgtC90L4g0LrRitC8IHJlcXVlc3RKb2tlciwg0LDQutC+INC90Y/QvNCwINGA0LXQutC70LDQvNCwINC80LDRhdCw0LzQtVxuICAgICAgLy8gINC30LDQutC+0LzQtdC90YLQuNGA0LDQvdC40YLQtSAg0YDQtdC00L7QstC1INC4INC30LDQutC+0LzQtdC90YLQuNGA0LDQvNC1INC80LXRgtC+0LTQsCDQt9CwINGA0LXQutC70LDQvNCwXG4gICAgICAvKiB0aGlzLiRyZWZzLmpva2VyLnJlcXVlc3RKb2tlcih7XG4gICAgICAgIGNyb3Nzd29yZElkOiB0aGlzLmNyb3Nzd29yZElkLFxuICAgICAgICBncmlkRGF0YTogdGhpcy5ncmlkRGF0YSxcbiAgICAgICAgcXVlc3Rpb25OdW1iZXI6IHRoaXMuc2VsZWN0ZWRRdWVzdGlvbi5udW1iZXIsXG4gICAgICAgIHF1ZXN0aW9uQ29vcmRpbmF0ZXM6IHRoaXMuc2VsZWN0ZWRRdWVzdGlvbi5jb29yZGluYXRlcyxcbiAgICAgICAgZW5kUG9pbnQ6IGdyYW50UGF0aCxcbiAgICAgIH0pOyovXG4gICAgICAvL9C60L7Qs9Cw0YLQviDQuNC80LAg0YDQtdC60LvQsNC80LA6XG4gICAgICAvKiBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJbQ3Jvc3N3b3JkUmVuZGVyXSBzZWxlY3RRdWVzdGlvbkZvckpva2VyIGNhbGxpbmcgam9rZXIucmVxdWVzdEpva2VyXCIsXG4gICAgICAgIHsgZ3JhbnRQYXRoLCBxdWVzdGlvbjogdGhpcy5zZWxlY3RlZFF1ZXN0aW9uIH0sXG4gICAgICApOyovXG4gICAgICB0aGlzLiRyZWZzLmpva2VyLnJlcXVlc3RKb2tlcih7XG4gICAgICAgIGNyb3Nzd29yZElkOiB0aGlzLmNyb3Nzd29yZElkLFxuICAgICAgICBncmlkRGF0YTogdGhpcy5ncmlkRGF0YSxcbiAgICAgICAgcXVlc3Rpb25OdW1iZXI6IHRoaXMuc2VsZWN0ZWRRdWVzdGlvbi5udW1iZXIsXG4gICAgICAgIHF1ZXN0aW9uQ29vcmRpbmF0ZXM6IHRoaXMuc2VsZWN0ZWRRdWVzdGlvbi5jb29yZGluYXRlcyxcbiAgICAgICAgZW5kUG9pbnQ6IGdyYW50UGF0aCxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICAvL9C80LXRgtC+0LQg0LfQsCDQttC+0LrQtdGAINGB0YrQstC/0LDQtNCw0YnQuCDQsdGD0LrQstC4XG4gICAgYXN5bmMgdXNlTWF0Y2hpbmdMZXR0ZXJzSm9rZXIoKSB7XG4gICAgICAvLyDQodGK0LHQuNGA0LDQvNC1INC/0L7Qv9GK0LvQvdC10L3QuNGC0LUg0LHRg9C60LLQuCDQt9CwINCy0YHQuNGH0LrQuCDQstGK0L/RgNC+0YHQuFxuICAgICAgY29uc3Qgd29yZHMgPSB0aGlzLmdhdGhlcldvcmRzRnJvbUdyaWREYXRhKCk7XG4gICAgICBjb25zdCB7IGNoZWNrUGF0aCwgZ3JhbnRQYXRoIH0gPSB0aGlzLmdldEpva2VyRW5kcG9pbnRzKFwibWF0Y2hpbmdcIik7XG4gICAgICAvL9C/0YDQvtCy0LXRgNC60LAg0LfQsCDQstGP0YDQvdC+INC/0L7Qv9GK0LvQvdC10L3QsCDQtNGD0LzQsFxuICAgICAgY29uc3QgZWxpZ2liaWxpdHkgPSBhd2FpdCB0aGlzLmNoZWNrTWF0Y2hpbmdKb2tlckVsaWdpYmlsaXR5KFxuICAgICAgICB3b3JkcyxcbiAgICAgICAgdGhpcy5jcm9zc3dvcmRJZCxcbiAgICAgICAgY2hlY2tQYXRoLFxuICAgICAgKTtcblxuICAgICAgaWYgKGVsaWdpYmlsaXR5LmVsaWdpYmxlID09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuZGlzcGxheU1lc3NhZ2UoXG4gICAgICAgICAgZWxpZ2liaWxpdHkubWVzc2FnZSB8fCBcIlRoZXJlIGlzIG5vIGNvcnJlY3RseSBmaWxsZWQgd29yZC5cIixcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuOyAvLyDQodC/0LjRgNCw0LzQtSDRgtGD0Log4oCUINC90Y/QvNCwINGA0LXQutC70LDQvNCwLCDQvdGP0LzQsCDQttC+0LrQtdGAXG4gICAgICB9XG4gICAgICAvL9GB0YrQsdC40YDQsNC80LUg0LLRgdC40YfQutC4INC/0L7Qv9GK0LvQvdC10L3QuCDQsdGD0LrQstC4INC60YrQvCDQvNC+0LzQtdC90YLQsCDRgSDRgtC10YXQvdC40YLQtSDQutC+0L7RgNC00LjQvdCw0YLQuFxuICAgICAgY29uc3QgZmlsbGVkTGV0dGVycyA9IHRoaXMuZ2F0aGVyRmlsbGVkTGV0dGVyc0Zyb21HcmlkRGF0YSgpO1xuXG4gICAgICAvLyDQmNC30L/RgNCw0YnQsNC80LUg0YLQtdC30Lgg0LTRg9C80Lgg0LrRitC8IENyb3Nzd29yZEpva2VyLnZ1ZSDQt9CwINC40LfQv9GA0LDRidCw0L3QtSDQutGK0Lwg0YHRitGA0LLRitGA0LAg0LfQsCDRgdCy0LXRgNGP0LLQsNC90LUg0YEg0LLQtdGA0L3QuNGC0LUg0L7RgtCz0L7QstC+0YDQuFxuICAgICAgLy/QsNC60L4g0L3Rj9C80LAg0LTQsCDQuNC80LAg0YDQtdC60LvQsNC80LAg0YHQtSDQvNCw0YXQsNGCINC60L7QvNC10L3RgtCw0YDQuNGC0LVcbiAgICAgIHRoaXMuJHJlZnMuam9rZXIucmV2ZWFsTWF0Y2hpbmdMZXR0ZXJzKFxuICAgICAgICB3b3JkcyxcbiAgICAgICAgdGhpcy5jcm9zc3dvcmRJZCxcbiAgICAgICAgZmlsbGVkTGV0dGVycyxcbiAgICAgICAgZ3JhbnRQYXRoLFxuICAgICAgKTtcbiAgICAgIC8v0LrQvtCz0LDRgtC+INC40LzQsCDRgNC10LrQu9Cw0LzQsDpcbiAgICAgIC8qIHRoaXMucmVxdWVzdEpva2VyQWQoXCJoaW50XCIsIFwibWF0Y2hpbmdcIiwge1xuICAgICAgICBjcm9zc3dvcmRJZDogdGhpcy5jcm9zc3dvcmRJZCxcbiAgICAgICAgd29yZHM6IHdvcmRzLFxuICAgICAgICBmaWxsZWRMZXR0ZXJzLFxuICAgICAgICBncmFudFBhdGhcbiAgICAgIH0pOyovXG4gICAgfSxcbiAgICAvL9C/0YDQvtCy0LXRgNC60LAg0LfQsCDQstGP0YDQvdC+INC/0L7Qv9GK0LvQvdC10L3QsCDQtNGD0LzQsCDQt9CwINC20L7QutC10YDQsCDRgdGK0LLQv9Cw0LTQsNGJ0Lgg0LHRg9C60LLQuCwg0L/RgNC10LTQuCDQtNCwINC/0YPRgdC90LXQvCDRgNC10LrQu9Cw0LzQsNGC0LBcbiAgICBhc3luYyBjaGVja01hdGNoaW5nSm9rZXJFbGlnaWJpbGl0eSh3b3JkcywgY3Jvc3N3b3JkSWQsIGNoZWNrUGF0aCkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChjaGVja1BhdGgsIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVyczogeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgd29yZHM6IHdvcmRzLFxuICAgICAgICAgIGNyb3Nzd29yZElkOiBjcm9zc3dvcmRJZCxcbiAgICAgICAgICBqb2tlcklkOiAxLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0sXG5cbiAgICByYW5kb21MZXR0ZXIoKSB7XG4gICAgICB0aGlzLnNob3dRdWVzdGlvbnNKb2tlciA9ICF0aGlzLnNob3dRdWVzdGlvbnNKb2tlcjtcbiAgICAgIC8vY29uc29sZS5sb2coXCJDcm9zc3dvcmREYXRhOlwiLCB0aGlzLmNyb3Nzd29yZERhdGEpO1xuICAgICAgLy8g0JDQutC+INGB0LUg0L/QvtC60LDQt9Cy0LDRgiDQvtC/0YbQuNC40YLQtSwg0LfQsNGA0LXQttC00LDQvNC1INCy0YrQv9GA0L7RgdC40YLQtVxuICAgICAgaWYgKHRoaXMuc2hvd1F1ZXN0aW9uc0pva2VyKSB7XG4gICAgICAgIHRoaXMuZmV0Y2hBbGxRdWVzdGlvbnMoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIC8vINCX0LDRgNC10LbQtNCw0LzQtSDQstGB0LjRh9C60Lgg0LLRitC/0YDQvtGB0LhcbiAgICBmZXRjaEFsbFF1ZXN0aW9ucygpIHtcbiAgICAgIHRoaXMuYWxsUXVlc3Rpb25zID0gdGhpcy5jcm9zc3dvcmREYXRhLm1hcCgocXVlc3Rpb24pID0+ICh7XG4gICAgICAgIG51bWJlcjogcXVlc3Rpb24ubnVtYmVyUXVlc3Rpb24sIC8vINCS0LfQtdC80LDQvNC1INC90L7QvNC10YDQsCDQvdCwINCy0YrQv9GA0L7RgdCwXG4gICAgICAgIGNvb3JkaW5hdGVzOiBxdWVzdGlvbi5jb29yZGluYXRlcywgLy8g0JzQvtC20LXQvCDQtNCwINC30LDQv9C40YjQtdC8INC4INC60L7QvtGA0LTQuNC90LDRgtC40YLQtSwg0LDQutC+INGB0LAg0L3Rg9C20L3QuFxuICAgICAgfSkpO1xuICAgIH0sXG4gICAgLy8g0JzQtdGC0L7QtCDQt9CwINC40LfQsdC+0YAg0L3QsCDQstGK0L/RgNC+0YEg0LfQsCDQttC+0LrQtdGAINGB0LvRg9GH0LDQudC90LAg0LHRg9C60LLQsFxuICAgIGFzeW5jIHNlbGVjdFF1ZXN0aW9uRm9yUmFuZG9tTGV0dGVyKHF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLnNob3dRdWVzdGlvbnNKb2tlciA9IGZhbHNlOyAvLyDQodC60YDQuNCy0LDQvNC1INC+0L/RhtC40LjRgtC1INC30LAg0LjQt9Cx0L7RgCDQvdCwINCy0YrQv9GA0L7RgVxuICAgICAgY29uc3QgZmlsbGVkTGV0dGVycyA9IFtdO1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgY3Jvc3N3b3JkSWQ6IHRoaXMuY3Jvc3N3b3JkSWQsXG4gICAgICAgIGdyaWREYXRhOiB0aGlzLmdyaWREYXRhLFxuICAgICAgICBxdWVzdGlvbk51bWJlcjogcXVlc3Rpb24ubnVtYmVyLFxuICAgICAgICBxdWVzdGlvbkNvb3JkaW5hdGVzOiBxdWVzdGlvbi5jb29yZGluYXRlcyxcbiAgICAgICAgLy8gam9rZXJUeXBlOiAndmVydGljYWwnIC8vINCw0LrQviDRgtC4INC1INC90YPQttC90L5cbiAgICAgIH07XG4gICAgICAvLyDQv9GA0L7QstC10YDQutCwINC60YrQvCDQv9GA0LDQstC40LvQvdC40Y8gL2NoZWNrXG4gICAgICBjb25zdCB7IGNoZWNrUGF0aCwgZ3JhbnRQYXRoIH0gPSB0aGlzLmdldEpva2VyRW5kcG9pbnRzKFwicmFuZG9tTGV0dGVyXCIpO1xuICAgICAgLy8gMSkg0JHQqtCg0JfQkCDQn9Cg0J7QktCV0KDQmtCQINCf0KDQldCU0Jgg0KDQldCa0JvQkNCc0JAgKNC00LjRgNC10LrRgtC90L4g0YLRg9C6KVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goY2hlY2tQYXRoLCB7XG4gICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocGF5bG9hZCksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpLmNhdGNoKCgpID0+ICh7fSkpO1xuICAgICAgICAvLyDQsNC60L4g0LjQvNCw0LzQtSBlcnJvciAo0L3QtdC30LDQstC40YHQuNC80L4g0L7RgiDRgdGC0LDRgtGD0YEg0LrQvtC00LApIOKGkiDQv9C+0LrQsNC30LLQsNC80LUg0Lgg0KHQn9CY0KDQkNCc0JVcbiAgICAgICAgaWYgKCFyZXMub2sgfHwgZGF0YT8uZXJyb3IpIHtcbiAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlKGRhdGE/LmVycm9yIHx8IFwiU2VydmVyIGVycm9yLlwiKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5zaG93TWVzc2FnZShcIk5ldHdvcmsgZXJyb3IuIFBsZWFzZSB0cnkgYWdhaW4uXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyDQntCx0YXQvtC20LTQsNC80LUg0LrQvtC+0YDQtNC40L3QsNGC0LjRgtC1INC90LAg0LLRitC/0YDQvtGB0LBcbiAgICAgIHF1ZXN0aW9uLmNvb3JkaW5hdGVzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBjb25zdCBjZWxsRGF0YSA9IHRoaXMuZ3JpZERhdGFba2V5XTtcbiAgICAgICAgaWYgKGNlbGxEYXRhICYmIGNlbGxEYXRhLnZhbHVlKSB7XG4gICAgICAgICAgZmlsbGVkTGV0dGVycy5wdXNoKHtcbiAgICAgICAgICAgIGNvb3JkOiBrZXksXG4gICAgICAgICAgICBsZXR0ZXI6IGNlbGxEYXRhLnZhbHVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8g0JjQt9C/0YDQsNGJ0LDQvNC1INC40LfQsdGA0LDQvdC40YLQtSDQtNCw0L3QvdC4INC00LjRgNC10LrRgtC90L4g0LrRitC8IHJlcXVlc3RKb2tlciwg0LDQutC+INC90Y/QvNCwINGA0LXQutC70LDQvNCwINC80LDRhdCw0LzQtVxuICAgICAgLy8gINC30LDQutC+0LzQtdC90YLQuNGA0LDQvdC40YLQtSAg0YDQtdC00L7QstC1INC4INC30LDQutC+0LzQtdC90YLQuNGA0LDQvNC1INC80LXRgtC+0LTQsCDQt9CwINGA0LXQutC70LDQvNCwXG4gICAgICB0aGlzLiRyZWZzLmpva2VyLnJhbmRvbUxldHRlckpva2VyKHtcbiAgICAgICAgY3Jvc3N3b3JkSWQ6IHRoaXMuY3Jvc3N3b3JkSWQsXG4gICAgICAgIHF1ZXN0aW9uTnVtYmVyOiBxdWVzdGlvbi5udW1iZXIsXG4gICAgICAgIHF1ZXN0aW9uQ29vcmRpbmF0ZXM6IHF1ZXN0aW9uLmNvb3JkaW5hdGVzLFxuICAgICAgICBmaWxsZWRMZXR0ZXJzOiBmaWxsZWRMZXR0ZXJzLFxuICAgICAgICBlbmRQb2ludDogZ3JhbnRQYXRoLFxuICAgICAgfSk7XG4gICAgICAvL9C60L7Qs9Cw0YLQviDQuNC80LAg0YDQtdC60LvQsNC80LA6XG4gICAgICAvKiAgIHRoaXMucmVxdWVzdEpva2VyQWQoXCJoaW50XCIsIFwicmFuZG9tTGV0dGVyXCIsIHtcbiAgICAgICAgY3Jvc3N3b3JkSWQ6IHRoaXMuY3Jvc3N3b3JkSWQsXG4gICAgICAgIHF1ZXN0aW9uTnVtYmVyOiBxdWVzdGlvbi5udW1iZXIsXG4gICAgICAgIHF1ZXN0aW9uQ29vcmRpbmF0ZXM6IHF1ZXN0aW9uLmNvb3JkaW5hdGVzLFxuICAgICAgICBmaWxsZWRMZXR0ZXJzOiBmaWxsZWRMZXR0ZXJzLFxuICAgICAgICBlbmRQb2ludDogZ3JhbnRQYXRoXG4gICAgICB9KTsqL1xuICAgIH0sXG5cbiAgICAvLyDwn5GJINCj0L3QuNCy0LXRgNGB0LDQu9C10L0g0LzQtdGC0L7QtCDQt9CwINC30LDRj9Cy0LrQsCDQt9CwINGA0LXQutC70LDQvNCwXG4gICAgLyphc3luYyByZXF1ZXN0Sm9rZXJBZChwdXJwb3NlLCBqb2tlclR5cGUsIGRhdGEpIHtcbiAgICAgIC8vINC30LDQv9Cw0LfQstCw0LzQtSDQutCw0LrQstC+INC00LAg0LTQsNC00LXQvCDRgdC70LXQtCDRgNC10LrQu9Cw0LzQsNGC0LBcbiAgICAgIHRoaXMucGVuZGluZ0pva2VyID0geyB0eXBlOiBqb2tlclR5cGUsIGRhdGEgfTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gcHVycG9zZSDQvNC+0LbQtdGIINC00LAg0LPQviDQtNGK0YDQttC40Ygg4oCeaGludOKAnCDQt9CwINCy0YHQuNGH0LrQuCDQttC+0LrQtdGA0LhcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgd2luZG93LnBsYXlSZXdhcmRlZD8uKFwiaGludFwiKTtcblxuICAgICAgICBpZiAocmVzICYmIChyZXMuY29tcGxldGVkIHx8IHJlcy5zaW11bGF0ZWQpKSB7XG4gICAgICAgICAgLy8g0KDQtdC60LvQsNC80LDRgtCwINC1INC40LfQs9C70LXQtNCw0L3QsCDQtNC+0LrRgNCw0Lkg4oaSINC/0YDQvtC00YrQu9C20LDQstCw0LzQtSDRgSDQvdCw0LPRgNCw0LTQsNGC0LBcbiAgICAgICAgICB0aGlzLm9uQWRDb21wbGV0ZWQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLiRlbWl0KFwic2hvdy1tZXNzYWdlXCIsIFwi0KDQtdC60LvQsNC80LDRgtCwINC90LUg0LHQtdGI0LUg0LjQt9Cz0LvQtdC00LDQvdCwINC00L7QutGA0LDQuS5cIik7XG4gICAgICAgICAgdGhpcy5wZW5kaW5nSm9rZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCLQk9GA0LXRiNC60LAvTm8tZmlsbCDQv9GA0Lgg0YDQtdC60LvQsNC80LA6XCIsIGUpO1xuICAgICAgICB0aGlzLiRlbWl0KFxuICAgICAgICAgIFwic2hvdy1tZXNzYWdlXCIsXG4gICAgICAgICAgXCLQndGP0LzQsCDQvdCw0LvQuNGH0L3QsCDRgNC10LrQu9Cw0LzQsC4g0J7Qv9C40YLQsNC50YLQtSDRgdC70LXQtCDQvNCw0LvQutC+LlwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucGVuZGluZ0pva2VyID0gbnVsbDtcbiAgICAgIH1cbiAgICB9LCovXG4gICAgLy8g0JjQvNCwINC70Lgg0LzQsNGA0LrQtdGC0LjQvdCz0L7QstC+INGB0YrQs9C70LDRgdC40LUg0L/RgNC10LcgQ29va2llYm90P1xuICAgIGhhc01hcmtldGluZ0NvbnNlbnQoKSB7XG4gICAgICByZXR1cm4gISEoXG4gICAgICAgIHdpbmRvdy5Db29raWVib3QgJiZcbiAgICAgICAgQ29va2llYm90LmNvbnNlbnQgJiZcbiAgICAgICAgQ29va2llYm90LmNvbnNlbnQubWFya2V0aW5nXG4gICAgICApO1xuICAgIH0sXG5cbiAgICAvLyDQmNC90YLQtdGA0LDQutGC0LjQstC90L4g0LjQt9C40YHQutCy0LDQvdC1INC90LAg0YHRitCz0LvQsNGB0LjQtTog0L/QvtC60LDQt9Cy0LAg0L/QsNC90LXQu9CwINC4INC40LfRh9Cw0LrQstCwINC00L4gMjBzXG4gICAgYXN5bmMgZW5zdXJlTWFya2V0aW5nQ29uc2VudEludGVyYWN0aXZlKHRpbWVvdXRNcyA9IDIwMDAwKSB7XG4gICAgICBpZiAodGhpcy5oYXNNYXJrZXRpbmdDb25zZW50KCkpIHJldHVybiB0cnVlO1xuXG4gICAgICB0cnkge1xuICAgICAgICB3aW5kb3cuQ29va2llYm90Py5zaG93Py4oKTtcbiAgICAgIH0gY2F0Y2ggKF8pIHt9XG5cbiAgICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBjb25zdCBkb25lID0gKCkgPT4ge1xuICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgICByZXNvbHZlKHRoaXMuaGFzTWFya2V0aW5nQ29uc2VudCgpKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfSwgdGltZW91dE1zKTtcbiAgICAgICAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIkNvb2tpZWJvdE9uQWNjZXB0XCIsIGRvbmUpO1xuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiQ29va2llYm90T25EZWNsaW5lXCIsIGRvbmUpO1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0KTtcbiAgICAgICAgfVxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIkNvb2tpZWJvdE9uQWNjZXB0XCIsIGRvbmUsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJDb29raWVib3RPbkRlY2xpbmVcIiwgZG9uZSwgeyBvbmNlOiB0cnVlIH0pO1xuICAgICAgfSk7XG4gICAgfSxcblxuICAgIC8vIPCfkYkg0KPQvdC40LLQtdGA0YHQsNC70LXQvSDQvNC10YLQvtC0INC30LAg0LfQsNGP0LLQutCwINC30LAg0YDQtdC60LvQsNC80LAgKNGBINC+0YLQutCw0Lcv0LPQtdC50YIg0L/QviBDb29raWVib3QpXG4gICAgYXN5bmMgcmVxdWVzdEpva2VyQWQocHVycG9zZSA9IFwiaGludFwiLCBqb2tlclR5cGUsIGRhdGEpIHtcbiAgICAgIC8vINC30LDQv9Cw0LfQstCw0LzQtSDQutCw0LrQstC+INC00LAg0LTQsNC00LXQvCDRgdC70LXQtCDRgNC10LrQu9Cw0LzQsNGC0LBcbiAgICAgIHRoaXMucGVuZGluZ0pva2VyID0geyB0eXBlOiBqb2tlclR5cGUsIGRhdGEgfTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8g0LDQutC+INGA0LXQutC70LDQvNC40YLQtSDRgdCwINC40LfQutC70Y7Rh9C10L3QuCDQs9C70L7QsdCw0LvQvdC+IOKAkyDRgdC40LzRg9C70LjRgNCw0Lkv0LTQsNC5INC20L7QutC10YDQsCDQtNC40YDQtdC60YLQvdC+XG4gICAgICAgIGlmICh3aW5kb3cuUkVXQVJEU19FTkFCTEVEID09PSBmYWxzZSkge1xuICAgICAgICAgIHRoaXMub25BZENvbXBsZXRlZCgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDEpINCT0LXQudGCINC/0L4gQ29va2llYm90IOKAkyDQsNC60L4g0L3Rj9C80LAgbWFya2V0aW5nLCDQvdC1INC40LfQstC40LrQstCw0LzQtSBBcHBsaXhpclxuICAgICAgICBjb25zdCBjb25zZW50T2sgPSBhd2FpdCB0aGlzLmVuc3VyZU1hcmtldGluZ0NvbnNlbnRJbnRlcmFjdGl2ZSgyMDAwMCk7XG4gICAgICAgIGlmICghY29uc2VudE9rKSB7XG4gICAgICAgICAgdGhpcy4kZW1pdChcbiAgICAgICAgICAgIFwic2hvdy1tZXNzYWdlXCIsXG4gICAgICAgICAgICBcIlRoZSBqb2tlciBpcyBvbmx5IGF2YWlsYWJsZSB3aXRoIGNvbnNlbnQgZm9yICdNYXJrZXRpbmcnIGNvb2tpZXMuXCIsXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnBlbmRpbmdKb2tlciA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMikg0J/Rg9GB0LrQsNC80LUgcmV3YXJkZWQg0YDQtdC60LvQsNC80LDRgtCwXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHdpbmRvdy5wbGF5UmV3YXJkZWQ/LihwdXJwb3NlIHx8IFwiaGludFwiKTtcblxuICAgICAgICBpZiAocmVzICYmIChyZXMuY29tcGxldGVkIHx8IHJlcy5zaW11bGF0ZWQpKSB7XG4gICAgICAgICAgLy8g0KDQtdC60LvQsNC80LDRgtCwINC1INC40LfQs9C70LXQtNCw0L3QsCDQtNC+0LrRgNCw0Lkg4oaSINC00LDQstCw0LzQtSDQvdCw0LPRgNCw0LTQsNGC0LBcbiAgICAgICAgICB0aGlzLm9uQWRDb21wbGV0ZWQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyDQn9C+0YLRgNC10LHQuNGC0LXQu9GP0YIg0LUg0LfQsNGC0LLQvtGA0LjQuy/Qv9GA0L7Qv9GD0YHQvdCw0Lsg4oaSINC10LTQvdC+INC60YDQsNGC0LrQviDRgdGK0L7QsdGJ0LXQvdC40LUgKNC40LvQuCDQvNCw0YXQvdC4INGA0LXQtNCwLCDQsNC60L4g0LjRgdC60LDRiCDQtNCwINC1INGC0LjRhdC+KVxuICAgICAgICAgIHRoaXMuJGVtaXQoXCJzaG93LW1lc3NhZ2VcIiwgXCJUaGUgYWQgd2FzIG5vdCB3YXRjaGVkIHRvIHRoZSBlbmQuXCIpO1xuICAgICAgICAgIHRoaXMucGVuZGluZ0pva2VyID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyDQotC10YXQvdC40YfQtdGB0LrQuCDQv9GA0L7QsdC70LXQvCAvINC70LjQv9GB0LAg0L3QsCDQuNC90LLQtdC90YLQsNGAIOKGkiDQtNCw0LLQsNC80LUg0LbQvtC60LXRgNCwINCx0LXQtyDRgNC10LrQu9Cw0LzQsFxuICAgICAgICBjb25zdCBjb2RlID0gU3RyaW5nKGU/Lm1lc3NhZ2UgfHwgXCJcIik7XG4gICAgICAgIGNvbnNvbGUud2FybihcIlthZF0gZXhjZXB0aW9uOlwiLCBjb2RlLCBlKTtcblxuICAgICAgICBpZiAoY29kZSA9PT0gXCJjb25zZW50X3VuYXZhaWxhYmxlXCIpIHtcbiAgICAgICAgICAvLyDRg9Cy0LDQttCw0LLQsNC80LUg0L7RgtC60LDQt9CwIOKGkiDQsdC10Lcg0YDQtdC60LvQsNC80LAg0Lgg0LHQtdC3INC20L7QutC10YBcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgd2luZG93LkNvb2tpZWJvdD8uc2hvdz8uKCk7XG4gICAgICAgICAgfSBjYXRjaCAoXykge31cbiAgICAgICAgICB0aGlzLnBlbmRpbmdKb2tlciA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g0JLRgdC40YfQutC4INC00YDRg9Cz0Lgg0LPRgNC10YjQutC4ICh0aW1lb3V0LCBuby1maWxsLCBhZF9lcnJvciwgbWlzc2luZyBrZXksINC4INGCLtC9Likg4oaSIOKAnmNvdXJ0ZXN54oCcINC20L7QutC10YBcbiAgICAgICAgdGhpcy5vbkFkQ29tcGxldGVkKCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIPCfkYkg0KLQvtC30Lgg0LzQtdGC0L7QtCDRgdC1INCy0LjQutCwINGB0LvQtdC0INC60LDRgtC+INGA0LXQutC70LDQvNCw0YLQsCDQv9GA0LjQutC70Y7Rh9C4INGD0YHQv9C10YjQvdC+XG4gICAgb25BZENvbXBsZXRlZCgpIHtcbiAgICAgIGlmICghdGhpcy5wZW5kaW5nSm9rZXIpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwi0J3Rj9C80LAg0L7Rh9Cw0LrQstCw0L0g0LbQvtC60LXRgCDRgdC70LXQtCDRgNC10LrQu9Cw0LzQsNGC0LAuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXdhcmRlZC1hZC13cmFwcGVyXCIpO1xuICAgICAgaWYgKHdyYXBwZXIpIHtcbiAgICAgICAgd3JhcHBlci5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnBlbmRpbmdKb2tlci50eXBlID09PSBcIm1hdGNoaW5nXCIpIHtcbiAgICAgICAgLy8g0KHRgtCw0YDRgtC40YDQsNC80LUg0LfQsNGP0LLQutCw0YLQsCDQt9CwINGB0YrQstC/0LDQtNCw0YnQuCDQsdGD0LrQstC4XG4gICAgICAgIHRoaXMuJHJlZnMuam9rZXIucmV2ZWFsTWF0Y2hpbmdMZXR0ZXJzKFxuICAgICAgICAgIHRoaXMucGVuZGluZ0pva2VyLmRhdGEud29yZHMsXG4gICAgICAgICAgdGhpcy5wZW5kaW5nSm9rZXIuZGF0YS5jcm9zc3dvcmRJZCxcbiAgICAgICAgICB0aGlzLnBlbmRpbmdKb2tlci5kYXRhLmZpbGxlZExldHRlcnMsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucGVuZGluZ0pva2VyLnR5cGUgPT09IFwidmVydGljYWxcIikge1xuICAgICAgICAvLyDQodGC0LDRgNGC0LjRgNCw0LzQtSDQt9Cw0Y/QstC60LDRgtCwINC30LAg0LLQtdGA0YLQuNC60LDQu9C10L0g0LbQvtC60LXRgFxuICAgICAgICB0aGlzLiRyZWZzLmpva2VyLnJlcXVlc3RKb2tlcih0aGlzLnBlbmRpbmdKb2tlci5kYXRhKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wZW5kaW5nSm9rZXIudHlwZSA9PT0gXCJyYW5kb21MZXR0ZXJcIikge1xuICAgICAgICAvL9GB0YLQsNGA0YLQuNGA0LDQvNC1INC30LDRj9Cy0LrQsNGC0LAg0LfQsCDRgdC70YPRh9Cw0LnQvdCwINCx0YPQutCy0LBcbiAgICAgICAgdGhpcy4kcmVmcy5qb2tlci5yYW5kb21MZXR0ZXJKb2tlcih0aGlzLnBlbmRpbmdKb2tlci5kYXRhKTtcbiAgICAgIH1cblxuICAgICAgLy8g0J3Rg9C70LjRgNCw0LzQtSDRgdGK0YHRgtC+0Y/QvdC40LXRgtC+INGB0LvQtdC0INC40LfQv9GK0LvQvdC10L3QuNC1XG4gICAgICB0aGlzLnBlbmRpbmdKb2tlciA9IG51bGw7XG4gICAgICAvL3RoaXMucmVzZXRBZFN0YXRlKCk7IC8vINCy0LDQttC90L4hXG4gICAgfSxcblxuICAgIC8v0JzQtdGC0L7QtCDQt9CwINC40LfQstC70LjRh9Cw0L3QtSDQvdCwINC00LDQvdC90Lgg0LfQsCDQstGK0L/RgNC+0YHQsDpcbiAgICBnZXRRdWVzdGlvbkRhdGEocXVlc3Rpb25OdW1iZXIpIHtcbiAgICAgIC8vINCS0YDRitGJ0LAg0LTQsNC90L3QuCDQt9CwINCy0YrQv9GA0L7RgdCwINC/0L4g0L3QvtC80LXRgCAo0L3QsNC/0YDQuNC80LXRgCwg0LzQvtC20LUg0LTQsCDQs9C+INC90LDQvNC10YDQuNC8INCyIENyb3Nzd29yZERhdGEpXG4gICAgICByZXR1cm4gdGhpcy5jcm9zc3dvcmREYXRhLmZpbmQoXG4gICAgICAgIChxdWVzdGlvbikgPT4gcXVlc3Rpb24ubnVtYmVyUXVlc3Rpb24gPT09IHF1ZXN0aW9uTnVtYmVyLFxuICAgICAgKTtcbiAgICB9LFxuXG4gICAgLy8g0JzQtdGC0L7QtCDQt9CwINGB0YrQsdC40YDQsNC90LUg0L3QsCDQv9C+0L/RitC70L3QtdC90LjRgtC1INC60LvQtdGC0LrQuCDQsiDQtNGD0LzQsFxuICAgIGdldEZpbGxlZENlbGxzKGdyaWREYXRhLCBxdWVzdGlvbk51bWJlcikge1xuICAgICAgbGV0IGFuc3dlciA9IFwiXCI7XG4gICAgICBjb25zdCBxdWVzdGlvbkRhdGEgPSB0aGlzLmdldFF1ZXN0aW9uRGF0YShxdWVzdGlvbk51bWJlcik7IC8vINCY0LfQstC70LjRh9Cw0LzQtSDQtNCw0L3QvdC40YLQtSDQt9CwINCy0YrQv9GA0L7RgdCwXG4gICAgICAvLyDQntCx0YXQvtC20LTQsNC80LUg0LrQvtC+0YDQtNC40L3QsNGC0LjRgtC1INC90LAg0LLRitC/0YDQvtGB0LAg0LIg0L/RgNCw0LLQuNC70L3QuNGPINGA0LXQtFxuICAgICAgZm9yIChjb25zdCBjb29yZGluYXRlIG9mIHF1ZXN0aW9uRGF0YS5jb29yZGluYXRlcykge1xuICAgICAgICAvLyDQktC30LXQvNCw0LzQtSDQsdGD0LrQstCw0YLQsCDQvtGCIGdyaWREYXRhINC/0L4g0LrQvtC+0YDQtNC40L3QsNGC0LBcbiAgICAgICAgY29uc3QgY2VsbCA9IGdyaWREYXRhW2Nvb3JkaW5hdGVdO1xuXG4gICAgICAgIGlmIChjZWxsICYmIGNlbGwudmFsdWUpIHtcbiAgICAgICAgICBhbnN3ZXIgKz0gY2VsbC52YWx1ZTsgLy8g0JTQvtCx0LDQstGP0LzQtSDQsdGD0LrQstCw0YLQsCDQutGK0Lwg0L7RgtCz0L7QstC+0YDQsFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYW5zd2VyO1xuICAgIH0sXG4gICAgLy8g0JzQtdGC0L7QtCDQt9CwINGB0YrQsdC40YDQsNC90LUg0L3QsCDQv9C+0L/RitC70L3QtdC90LjRgtC1INC00YPQvNC4XG4gICAgZ2F0aGVyV29yZHNGcm9tR3JpZERhdGEoKSB7XG4gICAgICBjb25zdCB3b3JkcyA9IFtdO1xuXG4gICAgICAvLyDQntCx0YXQvtC20LTQsNC80LUg0LLRgdC40YfQutC4INCy0YrQv9GA0L7RgdC4INCyIGNyb3Nzd29yZERhdGEg0Lgg0YHRitCx0LjRgNCw0LzQtSDQtNGD0LzQuNGC0LVcbiAgICAgIHRoaXMuY3Jvc3N3b3JkRGF0YS5mb3JFYWNoKChxdWVzdGlvbikgPT4ge1xuICAgICAgICBsZXQgd29yZCA9IFwiXCI7XG4gICAgICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gcXVlc3Rpb24uY29vcmRpbmF0ZXM7XG5cbiAgICAgICAgLy8g0JfQsCDQstGB0Y/QutCwINC60LvQtdGC0LrQsCDQsiDQutC+0L7RgNC00LjQvdCw0YLQuNGC0LUg0L3QsCDQstGK0L/RgNC+0YHQsCwg0LTQvtCx0LDQstGP0LzQtSDQsdGD0LrQstCw0YLQsCDQvtGCIGdyaWREYXRhXG4gICAgICAgIGNvb3JkaW5hdGVzLmZvckVhY2goKGNvb3JkKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2VsbCA9IHRoaXMuZ3JpZERhdGFbY29vcmRdO1xuICAgICAgICAgIGlmIChjZWxsICYmIGNlbGwudmFsdWUpIHtcbiAgICAgICAgICAgIHdvcmQgKz0gY2VsbC52YWx1ZTsgLy8g0JTQvtCx0LDQstGP0LzQtSDRgdGC0L7QudC90L7RgdGC0YLQsCDQvdCwINC60LvQtdGC0LrQsNGC0LBcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vINCQ0LrQviDRgdGK0YnQtdGB0YLQstGD0LLQsCDQv9C+0L/RitC70L3QtdC90LAg0LTRg9C80LAsINC00L7QsdCw0LLRj9C80LUg0Y8g0LIg0LzQsNGB0LjQstCwXG4gICAgICAgIGlmICh3b3JkKSB7XG4gICAgICAgICAgd29yZHMucHVzaCh7IHdvcmQ6IHdvcmQsIHF1ZXN0aW9uTnVtYmVyOiBxdWVzdGlvbi5udW1iZXJRdWVzdGlvbiB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gd29yZHM7XG4gICAgfSxcbiAgICAvL9C80LXRgtC+0LQg0LfQsCDRgdGK0LHQuNGA0LDQvdC1INC90LAg0LLRgdC40YfQutC4INC/0L7Qv9GK0LvQvdC10L3QuCDQsdGD0LrQstC4INC60YrQvCDQvNC+0LzQtdC90YLQsCDQuCDRgtC10YXQvdC40YLQtSDQutC+0L7RgNC00LjQvdCw0YLQuFxuICAgIGdhdGhlckZpbGxlZExldHRlcnNGcm9tR3JpZERhdGEoKSB7XG4gICAgICBjb25zdCBmaWxsZWRMZXR0ZXJzID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgY29vcmQgaW4gdGhpcy5ncmlkRGF0YSkge1xuICAgICAgICBjb25zdCBjZWxsID0gdGhpcy5ncmlkRGF0YVtjb29yZF07XG4gICAgICAgIGlmIChjZWxsICYmIGNlbGwudmFsdWUgJiYgY2VsbC52YWx1ZS50cmltKCkgIT09IFwiXCIpIHtcbiAgICAgICAgICBmaWxsZWRMZXR0ZXJzLnB1c2goe1xuICAgICAgICAgICAgY29vcmQ6IGNvb3JkLFxuICAgICAgICAgICAgbGV0dGVyOiBjZWxsLnZhbHVlLnRvVXBwZXJDYXNlKCksIC8vINC40LvQuCDQsdC10LcgLnRvVXBwZXJDYXNlKCksINGB0L/QvtGA0LXQtCDRgtC+0LLQsCDQutCw0Log0LPQviDQv9GA0LDRidCw0LzQtVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmaWxsZWRMZXR0ZXJzO1xuICAgIH0sXG4gICAgaGFuZGxlTWF0Y2hpbmdMZXR0ZXJzSm9rZXIobWF0Y2hpbmdMZXR0ZXJzKSB7XG4gICAgICAvLyDQodGK0LfQtNCw0LLQsNC80LUgU2V0INGBINCy0YHQuNGH0LrQuCDQv9GA0LDQstC40LvQvdC4INC60L7QvtGA0LTQuNC90LDRgtC4XG4gICAgICBjb25zdCB2YWxpZENvb3JkaW5hdGVzID0gbmV3IFNldChcbiAgICAgICAgbWF0Y2hpbmdMZXR0ZXJzLm1hcCgoZW50cnkpID0+IGVudHJ5LmNvb3JkaW5hdGVzKSxcbiAgICAgICk7XG5cbiAgICAgIC8vINCY0LfRh9C40YHRgtCy0LDQvNC1INGB0LDQvNC+INCz0YDQtdGI0L3QuNGC0LUg0LHRg9C60LLQuFxuICAgICAgT2JqZWN0LmtleXModGhpcy5ncmlkRGF0YSkuZm9yRWFjaCgocG9zaXRpb24pID0+IHtcbiAgICAgICAgaWYgKCF2YWxpZENvb3JkaW5hdGVzLmhhcyhwb3NpdGlvbikpIHtcbiAgICAgICAgICB0aGlzLmdyaWREYXRhW3Bvc2l0aW9uXS52YWx1ZSA9IFwiXCI7IC8vINCY0LfRgtGA0LjQstCw0LzQtSDQs9GA0LXRiNC90LjRgtC1INCx0YPQutCy0LhcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vINCf0L7Qv9GK0LvQstCw0LzQtSDRgdCw0LzQviDQv9GA0LDQstC40LvQvdC40YLQtSDQsdGD0LrQstC4INC4INGB0YrQstC/0LDQtNCw0YnQuNGC0LUg0LHRg9C60LLQuFxuICAgICAgbWF0Y2hpbmdMZXR0ZXJzLmZvckVhY2goKHsgY29vcmRpbmF0ZXMsIGxldHRlciB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGNlbGwgPSB0aGlzLmdyaWREYXRhW2Nvb3JkaW5hdGVzXTtcbiAgICAgICAgaWYgKGNlbGwpIHtcbiAgICAgICAgICBjZWxsLnZhbHVlID0gbGV0dGVyOyAvL9C/0L7Qv9GK0LvQstCw0LzQtSDQutC70LXRgtC60LDRgtCwXG4gICAgICAgICAgLy8g0JTQvtCx0LDQstGP0LzQtSDQutC70LDRgSDQt9CwINC+0YbQstC10YLRj9Cy0LDQvdC1INC4INC/0YDQtdC80LjQs9Cy0LDQvdC1XG4gICAgICAgICAgdGhpcy5ncmlkRGF0YVtjb29yZGluYXRlc10gPSB7XG4gICAgICAgICAgICAuLi5jZWxsLFxuICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IHRydWUsXG4gICAgICAgICAgICBibGluazogdHJ1ZSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIC8vINCh0LvQtdC0IDMg0YHQtdC60YPQvdC00Lgg0L/RgNC10LzQsNGF0LLQsNC80LUg0L7RhtCy0LXRgtGP0LLQsNC90LXRgtC+INC4INC/0YDQtdC80LjQs9Cy0LDQvdC10YLQvlxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ncmlkRGF0YVtjb29yZGluYXRlc10gPSB7XG4gICAgICAgICAgICAgIC4uLmNlbGwsXG4gICAgICAgICAgICAgIGhpZ2hsaWdodGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgYmxpbms6IGZhbHNlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9LCAzMDAwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIC8v0LzQtdGC0L7QtNC4INC30LAg0YPQv9GA0LDQstC70LXQvdC40LUg0L3QsCDQuNC30LrQsNGH0LDRidC40Y8g0L/RgNC+0LfQvtGA0LXRhiDQv9GA0Lgg0LjQt9C/0YDQsNGJ0LDQvdC1INC90LAg0LrRgNGK0YHRgtC+0YHQu9C+0LLQuNGG0LDRgtCwXG4gICAgaGFuZGxlQnV0dG9uQ2xpY2soKSB7XG4gICAgICBpZiAodGhpcy5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHRoaXMucmVkaXJlY3RUb05leHRMZXZlbCgpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT09IFwiZGVtb1wiIHx8IHRoaXMubW9kZSA9PT0gXCJBXCIpIHtcbiAgICAgICAgdGhpcy5jaGVja0Nyb3Nzd29yZCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8g0J7RgtCy0LDRgNGP0LzQtSDQvNC+0LTQsNC70LAg0LfQsCDQv9C+0YLQstGK0YDQttC00LXQvdC40LVcbiAgICAgICAgdGhpcy5zaG93Q29uZmlybWF0aW9uID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNvbmZpcm1TdWJtaXNzaW9uKCkge1xuICAgICAgLy8g0J/QvtGC0LLRitGA0LbQtNC10L3QuNC1INC30LAg0LjQt9C/0YDQsNGJ0LDQvdC1XG4gICAgICB0aGlzLnNob3dDb25maXJtYXRpb24gPSBmYWxzZTtcbiAgICAgIHRoaXMuY2hlY2tDcm9zc3dvcmQoKTsgLy8g0J/RgNC+0LTRitC70LbQsNCy0LDQvNC1INGBINC/0YDQvtCy0LXRgNC60LDRgtCwXG4gICAgICB0aGlzLmlzU3VibWl0dGVkID0gdHJ1ZTsgLy8g0JTQtdCw0LrRgtC40LLQuNGA0LDQvNC1INCx0YPRgtC+0L3QsFxuICAgIH0sXG4gICAgY2FuY2VsU3VibWlzc2lvbigpIHtcbiAgICAgIC8vINCX0LDRgtCy0LDRgNGP0L3QtSDQvdCwINC80L7QtNCw0LvQsCDQsdC10Lcg0LjQt9C/0YDQsNGJ0LDQvdC1XG4gICAgICB0aGlzLnNob3dDb25maXJtYXRpb24gPSBmYWxzZTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY2hlY2tDcm9zc3dvcmQoKSB7XG4gICAgICBpZiAodGhpcy5pc1N1Ym1pdHRlZCkgcmV0dXJuOyAvLyDQkNC60L4g0LLQtdGH0LUg0LUg0LjQt9C/0YDQsNGC0LXQvdCwLCDQv9GA0LXQutGA0LDRgtGP0LLQsNC80LVcbiAgICAgIHRyeSB7XG4gICAgICAgIGxldCBlbmRwb2ludDtcblxuICAgICAgICAvLyDQn9GA0L7QstC10YDQutCwINC30LAg0YDQtdC20LjQvNC4XG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT09IFwiZGVtb1wiKSB7XG4gICAgICAgICAgZW5kcG9pbnQgPSBgL2NoZWNrLyR7dGhpcy5jcm9zc3dvcmRJZH1gO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gXCJCXCIpIHtcbiAgICAgICAgICBlbmRwb2ludCA9IGAvbW9kZUJjaGVja0Nyb3Nzd29yZEFuc3dlckJ5QW5zd2VyLyR7dGhpcy5jcm9zc3dvcmRJZH1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vINCX0LAg0L7RgdGC0LDQvdCw0LvQuNGC0LUg0YHQu9GD0YfQsNC4XG4gICAgICAgICAgZW5kcG9pbnQgPSBgL2Nyb3Nzd29yZC9jaGVjay8ke3RoaXMuY3Jvc3N3b3JkSWR9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vINCY0LfQv9GA0LDRidCw0LzQtSDQt9Cw0Y/QstC60LAg0YEg0LTQsNC90L3QuCDQutGK0Lwg0YHRitGA0LLRitGA0LBcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChlbmRwb2ludCwge1xuICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBncmlkRGF0YTogdGhpcy5ncmlkRGF0YSxcbiAgICAgICAgICAgIGN1cnJlbnRMZXZlbDogdGhpcy5jdXJyZW50TGV2ZWwsIC8vINCU0L7QsdCw0LLRj9C80LUg0YLQtdC60YPRidC+0YLQviDQvdC40LLQvlxuICAgICAgICAgICAgbW9kZTogdGhpcy5tb2RlLCAvL9C00L7QsdCw0LLRj9C80LUg0YDQtdC20LjQvNCwXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICAgICAgICB0aGlzLiRlbWl0KFwiY2hlY2stcmVzdWx0XCIsIHJlc3VsdCk7IC8vINCY0LfQv9GA0LDRidCw0LzQtSDRgNC10LfRg9C70YLQsNGC0LAg0LrRitC8INGA0L7QtNC40YLQtdC70Y8g0LjQu9C4INC00YDRg9CzINC60L7QvNC/0L7QvdC10L3RglxuICAgICAgICB0aGlzLnN0YXR1cyA9IHJlc3VsdC5zdGF0dXM7XG4gICAgICAgIC8vINCX0LDQv9C40YHQstCw0LzQtSDRgNC10LfRg9C70YLQsNGC0LAg0LLRitCyIGZlZWRiYWNrINC30LAg0LLQuNC30YPQsNC70LjQt9Cw0YbQuNGPXG4gICAgICAgIHRoaXMuZmVlZGJhY2sgPSB7XG4gICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLFxuICAgICAgICAgIG1lc3NhZ2U6IHJlc3VsdC5tZXNzYWdlLFxuICAgICAgICB9O1xuICAgICAgICAvLyDQkNC60L4g0LUg0LLRj9GA0L3QsCDQutGA0YrRgdGC0L7RgdC70L7QstC40YbQsNGC0LAsINCw0LrRgtC40LLQuNGA0LDQuSDQsNC90LjQvNCw0YbQuNGPXG4gICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmZlZWRiYWNrVGltZW91dElkKTtcbiAgICAgICAgICB0aGlzLmlzU29sdmVkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmlzU3VibWl0dGVkID0gdHJ1ZTsgLy8g0JTQtdCw0LrRgtC40LLQuNGA0LDQvNC1INCx0YPRgtC+0L3QsCDRgdC70LXQtCDRg9GB0L/QtdGFXG4gICAgICAgICAgLy8g0KHRgtCw0YDRgtC40YDQsNC5INC60L7QvdGE0LXRgtC4XG4gICAgICAgICAgdGhpcy5sYXVuY2hDb25mZXR0aSgpO1xuICAgICAgICAgIC8vINCh0YLQsNGA0YLQuNGA0LDQuSDQt9Cy0YPQutCwINC30LAg0YPRgdC/0LXRhVxuICAgICAgICAgIHRoaXMucGxheVN1Y2Nlc3NTb3VuZCgpO1xuICAgICAgICAgIC8vINCQ0LrQviDQtSDRg9GB0L/QtdGI0L3QviDRgNC10YjQtdC90LAsINC/0YDQvtC80LXQvdGP0LzQtSDRgtC10LrRgdGC0LAg0Lgg0YHRgtC40LvQsCDQvdCwINCx0YPRgtC+0L3QsFxuICAgICAgICAgIHRoaXMuYnV0dG9uTGFiZWwgPSBcIuKchSBHbyB0byBuZXh0IGxldmVsXCI7XG4gICAgICAgICAgdGhpcy5idXR0b25TdHlsZSA9IFwiYmctZ3JlZW4tNTAwIGhvdmVyOmJnLWdyZWVuLTYwMCBhbmltYXRlLXB1bHNlXCI7XG4gICAgICAgICAgLy8g8J+UvSDQndC+0LLQvtGC0L46XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5tb2RlID09PSBcIkFcIiAmJlxuICAgICAgICAgICAgQXJyYXkuaXNBcnJheShyZXN1bHQuZXhwbGFuYXRpb25zKSAmJlxuICAgICAgICAgICAgcmVzdWx0LmV4cGxhbmF0aW9ucy5sZW5ndGggJiZcbiAgICAgICAgICAgICF0aGlzLmV4cGxhbmF0aW9uc1Nob3duT25jZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5leHBsYW5hdGlvbnNMaXN0ID0gcmVzdWx0LmV4cGxhbmF0aW9ucztcbiAgICAgICAgICAgIHRoaXMuc2hvd0V4cGxhbmF0aW9uc01vZGFsID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZXhwbGFuYXRpb25zU2hvd25PbmNlID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8g0LPRgNC10YjQutCwIC0+INCw0LLRgtC+LdGB0LrRgNC40LLQsNC90LUg0YHQu9C10LQgM3NcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5mZWVkYmFja1RpbWVvdXRJZCk7XG4gICAgICAgICAgdGhpcy5mZWVkYmFja1RpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mZWVkYmFjayA9IG51bGw7IC8vINC40LvQuCB7IHN0YXR1czpudWxsLCBtZXNzYWdlOicnIH1cbiAgICAgICAgICB9LCAzMDAwKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcItCT0YDQtdGI0LrQsCDQv9GA0Lgg0L/RgNC+0LLQtdGA0LrQsNGC0LA6XCIpO1xuICAgICAgfVxuICAgIH0sXG4gICAgYXN5bmMgc3VibWl0QW5zd2VyKG51bWJlclF1ZXN0aW9uKSB7XG4gICAgICAvL9CY0LfQstC70LjRh9Cw0LzQtSDQstGB0LjRh9C60Lgg0LrQvtC+0YDQtNC40L3QsNGC0Lgg0L3QsCDQstGK0L/RgNC+0YHQsCwg0LrQvtC50YLQviDRgdC1INC40LfQv9GA0LDRidCwXG4gICAgICBjb25zdCBxdWVzdGlvbiA9IHRoaXMuY3Jvc3N3b3JkRGF0YS5maW5kKFxuICAgICAgICAocSkgPT4gcS5udW1iZXJRdWVzdGlvbiA9PT0gbnVtYmVyUXVlc3Rpb24sXG4gICAgICApO1xuICAgICAgaWYgKCFxdWVzdGlvbikgcmV0dXJuOyAvLyDQkNC60L4g0LLRitC/0YDQvtGB0YrRgiDQvdC1INGB0YrRidC10YHRgtCy0YPQstCwLCDRgdC/0LjRgNCw0LzQtVxuXG4gICAgICBjb25zdCBjb29yZHMgPSBxdWVzdGlvbi5jb29yZGluYXRlcztcblxuICAgICAgLy8g0JLQsNC00LjQvCDQsdGD0LrQstC40YLQtSDQv9C+INC60L7QvtGA0LTQuNC90LDRgtC4XG4gICAgICBjb25zdCBsZXR0ZXJzID0gY29vcmRzLm1hcCgoY29vcmQpID0+IHtcbiAgICAgICAgY29uc3QgY2VsbCA9IHRoaXMuZ3JpZERhdGFbY29vcmRdO1xuICAgICAgICBpZiAoIWNlbGwgfHwgdHlwZW9mIGNlbGwudmFsdWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2VsbC52YWx1ZS50cmltKCk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgd29yZCA9IGxldHRlcnMuam9pbihcIlwiKS50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAvLyDQn9GA0L7QstC10YDQutCwINC30LAg0L/RgNCw0LfQvdC4INC60LvQtdGC0LrQuFxuICAgICAgY29uc3QgaGFzRW1wdHkgPSBjb29yZHMuc29tZSgoY29vcmQpID0+IHtcbiAgICAgICAgY29uc3QgY2VsbCA9IHRoaXMuZ3JpZERhdGFbY29vcmRdO1xuICAgICAgICByZXR1cm4gIWNlbGwgfHwgIWNlbGwudmFsdWUgfHwgY2VsbC52YWx1ZS50cmltKCkgPT09IFwiXCI7XG4gICAgICB9KTtcblxuICAgICAgbGV0IHJlc3VsdDtcblxuICAgICAgaWYgKGhhc0VtcHR5KSB7XG4gICAgICAgIC8vINCf0YrRgNCy0L4g0YHRitC+0LHRidC10L3QuNC1IOKAkyDQt9CwINC90LXQv9GK0LvQtdC9INC+0YLQs9C+0LLQvtGAICjQstC60LsuINCw0LrQviDQvdGP0LzQsCDQvdC40YLQviDQtdC00L3QsCDQsdGD0LrQstCwKVxuICAgICAgICBjb25zdCBodG1sID0gd29yZFxuICAgICAgICAgID8gYFlvdSBoYXZlIG5vdCBmaWxsZWQgYWxsIGNlbGxzIGZvciB0aGlzIGFuc3dlci48YnI+PGJyPmAgK1xuICAgICAgICAgICAgYEN1cnJlbnQgd29yZDo8YnI+PHN0cm9uZz4ke3dvcmR9PC9zdHJvbmc+YFxuICAgICAgICAgIDogYFlvdSBoYXZlIG5vdCBlbnRlcmVkIGFueSBsZXR0ZXJzIGZvciB0aGlzIGFuc3dlciB5ZXQuYDtcblxuICAgICAgICBhd2FpdCBTd2FsLmZpcmUoe1xuICAgICAgICAgIGljb246IFwiaW5mb1wiLFxuICAgICAgICAgIHRpdGxlOiBcIkluY29tcGxldGUgYW5zd2VyXCIsXG4gICAgICAgICAgaHRtbCxcbiAgICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogXCJPS1wiLFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm47IC8vINGB0L/QuNGA0LDQvNC1INGC0YPQulxuICAgICAgfVxuICAgICAgLy8g0JfQsNC/0LDQt9Cy0LDQvNC1INGB0LDQvNC+INGC0LXQt9C4INC60L7QvtGA0LTQuNC90LDRgtC4INC+0YIgZ3JpZERhdGFcbiAgICAgIGNvbnN0IGZpbHRlcmVkR3JpZERhdGEgPSB7fTtcbiAgICAgIHF1ZXN0aW9uLmNvb3JkaW5hdGVzLmZvckVhY2goKGNvb3JkKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmdyaWREYXRhW2Nvb3JkXSkge1xuICAgICAgICAgIGZpbHRlcmVkR3JpZERhdGFbY29vcmRdID0gdGhpcy5ncmlkRGF0YVtjb29yZF07IC8vINCa0L7Qv9C40YDQsNC80LUg0YHQsNC80L4g0L3Rg9C20L3QuNGC0LUg0YHRgtC+0LnQvdC+0YHRgtC4XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgYWN0aW9uID0gXCJzdWJtaXRcIjtcbiAgICAgIGNvbnN0IGVuZHBvaW50ID0gYC9jcm9zc3dvcmQvY2hlY2std29yZC8ke3RoaXMuY3Jvc3N3b3JkSWR9YDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuYW5zd2VyID0gdGhpcy5nZXRGaWxsZWRDZWxscyh0aGlzLmdyaWREYXRhLCBudW1iZXJRdWVzdGlvbik7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goZW5kcG9pbnQsIHtcbiAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgZ3JpZERhdGE6IHRoaXMuZ3JpZERhdGEsXG4gICAgICAgICAgICBmaWx0ZXJlZEdyaWREYXRhOiBmaWx0ZXJlZEdyaWREYXRhLFxuICAgICAgICAgICAgc3VibWl0dGVkQW5zd2VyOiB0aGlzLmFuc3dlcixcbiAgICAgICAgICAgIG51bWJlclF1ZXN0aW9uOiBudW1iZXJRdWVzdGlvbixcbiAgICAgICAgICAgIG1vZGU6IHRoaXMubW9kZSwgLy/QtNC+0LHQsNCy0Y/QvNC1INGA0LXQttC40LzQsFxuICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgICAgICBvcmlnaW5hbEdyaWREYXRhOiB0aGlzLm9yaWdpbmFsR3JpZERhdGEsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgIHRoaXMuc2hvd01lc3NhZ2UoXCJDb3JyZWN0IGFuc3dlciFcIik7XG4gICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFwiZHVwbGljYXRlXCIpIHtcbiAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlKHJlc3VsdC5tZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBcInJlY29yZFwiKSB7XG4gICAgICAgICAgdGhpcy5zaG93TWVzc2FnZShcbiAgICAgICAgICAgIGBZb3VyIEFuc3dlcjogXCIke3RoaXMuYW5zd2VyfVwiIGhhcyBiZWVuIHJlY29yZGVkYCxcbiAgICAgICAgICAgIFwiaW5mb1wiLFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgdGhpcy5zaG93TWVzc2FnZShcbiAgICAgICAgICAgIHJlc3VsdC5tZXNzYWdlIHx8IFwiVGhlIHJvdW5kIGhhcyBhbHJlYWR5IGVuZGVkLlwiLFxuICAgICAgICAgICAgXCJlcnJvclwiLFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zaG93TWVzc2FnZShcIndyb25nIGFuc3dlci5cIik7XG4gICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiV29yZCBjaGVjayBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgdmVyaWZ5QW5zd2VyKG51bWJlclF1ZXN0aW9uKSB7XG4gICAgICAvLyDQndCw0LzQuNGA0LDQvNC1INCy0YrQv9GA0L7RgdCwINC/0L4g0L3QvtC80LXRgFxuICAgICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLmNyb3Nzd29yZERhdGEuZmluZChcbiAgICAgICAgKHEpID0+IHEubnVtYmVyUXVlc3Rpb24gPT09IG51bWJlclF1ZXN0aW9uLFxuICAgICAgKTtcbiAgICAgIGlmICghcXVlc3Rpb24pIHJldHVybjtcblxuICAgICAgY29uc3QgY29vcmRzID0gcXVlc3Rpb24uY29vcmRpbmF0ZXM7XG5cbiAgICAgIC8vINCS0LDQtNC40Lwg0LHRg9C60LLQuNGC0LUg0L/QviDQutC+0L7RgNC00LjQvdCw0YLQuFxuICAgICAgY29uc3QgbGV0dGVycyA9IGNvb3Jkcy5tYXAoKGNvb3JkKSA9PiB7XG4gICAgICAgIGNvbnN0IGNlbGwgPSB0aGlzLmdyaWREYXRhW2Nvb3JkXTtcbiAgICAgICAgaWYgKCFjZWxsIHx8IHR5cGVvZiBjZWxsLnZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNlbGwudmFsdWUudHJpbSgpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHdvcmQgPSBsZXR0ZXJzLmpvaW4oXCJcIikudG9VcHBlckNhc2UoKTtcblxuICAgICAgLy8g0J/RgNC+0LLQtdGA0LrQsCDQt9CwINC/0YDQsNC30L3QuCDQutC70LXRgtC60LhcbiAgICAgIGNvbnN0IGhhc0VtcHR5ID0gY29vcmRzLnNvbWUoKGNvb3JkKSA9PiB7XG4gICAgICAgIGNvbnN0IGNlbGwgPSB0aGlzLmdyaWREYXRhW2Nvb3JkXTtcbiAgICAgICAgcmV0dXJuICFjZWxsIHx8ICFjZWxsLnZhbHVlIHx8IGNlbGwudmFsdWUudHJpbSgpID09PSBcIlwiO1xuICAgICAgfSk7XG5cbiAgICAgIGxldCByZXN1bHQ7XG5cbiAgICAgIGlmIChoYXNFbXB0eSkge1xuICAgICAgICAvLyDQn9GK0YDQstC+INGB0YrQvtCx0YnQtdC90LjQtSDigJMg0LfQsCDQvdC10L/RitC70LXQvSDQvtGC0LPQvtCy0L7RgCAo0LLQutC7LiDQsNC60L4g0L3Rj9C80LAg0L3QuNGC0L4g0LXQtNC90LAg0LHRg9C60LLQsClcbiAgICAgICAgY29uc3QgaHRtbCA9IHdvcmRcbiAgICAgICAgICA/IGBZb3UgaGF2ZSBub3QgZmlsbGVkIGFsbCBjZWxscyBmb3IgdGhpcyBhbnN3ZXIuPGJyPjxicj5gICtcbiAgICAgICAgICAgIGBDdXJyZW50IHdvcmQ6PGJyPjxzdHJvbmc+JHt3b3JkfTwvc3Ryb25nPmBcbiAgICAgICAgICA6IGBZb3UgaGF2ZSBub3QgZW50ZXJlZCBhbnkgbGV0dGVycyBmb3IgdGhpcyBhbnN3ZXIgeWV0LmA7XG5cbiAgICAgICAgYXdhaXQgU3dhbC5maXJlKHtcbiAgICAgICAgICBpY29uOiBcImluZm9cIixcbiAgICAgICAgICB0aXRsZTogXCJJbmNvbXBsZXRlIGFuc3dlclwiLFxuICAgICAgICAgIGh0bWwsXG4gICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IFwiT0tcIixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuOyAvLyDRgdC/0LjRgNCw0LzQtSDRgtGD0LpcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vINCS0YLQvtGA0L4g0YHRitC+0LHRidC10L3QuNC1IOKAkyDQstGB0LjRh9C60L4g0LUg0L/QvtC/0YrQu9C90LXQvdC+XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IFN3YWwuZmlyZSh7XG4gICAgICAgICAgaWNvbjogXCJxdWVzdGlvblwiLFxuICAgICAgICAgIHRpdGxlOiBcIkNvbmZpcm0gdmVyaWZpY2F0aW9uXCIsXG4gICAgICAgICAgaHRtbDpcbiAgICAgICAgICAgIGBZb3UgYXJlIGFib3V0IHRvIHNlbmQgdGhpcyBhbnN3ZXIgZm9yIHZlcmlmaWNhdGlvbjo8YnI+PGJyPmAgK1xuICAgICAgICAgICAgYDxzdHJvbmc+JHt3b3JkfTwvc3Ryb25nPmAsXG4gICAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogXCJTZW5kXCIsXG4gICAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogXCJDYW5jZWxcIixcbiAgICAgICAgICBjb25maXJtQnV0dG9uQ29sb3I6IFwiIzMwODVkNlwiLFxuICAgICAgICAgIGNhbmNlbEJ1dHRvbkNvbG9yOiBcIiNkMzNcIixcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghcmVzdWx0LmlzQ29uZmlybWVkKSB7XG4gICAgICAgIC8vINCd0LDRgtC40YHQvdCw0Lsg0LUg0J7RgtC60LDQt1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vINCQ0LrQviDRgdGC0LjQs9C90LXQvCDQtNC+0YLRg9C6IOKAkyDQt9C90LDRh9C4INC1INC/0L7RgtCy0YrRgNC00LjQuy5cbiAgICAgIC8vINCh0LXQs9CwINC/0YDQsNCy0LjQvCDRhNC40LvRgtGA0LjRgNCw0L3QuNGC0LUg0LTQsNC90L3QuCDQuCBmZXRjaC3QsC5cblxuICAgICAgY29uc3QgZmlsdGVyZWRHcmlkRGF0YSA9IHt9O1xuXG4gICAgICBxdWVzdGlvbi5jb29yZGluYXRlcy5mb3JFYWNoKChjb29yZCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5ncmlkRGF0YVtjb29yZF0pIHtcbiAgICAgICAgICBmaWx0ZXJlZEdyaWREYXRhW2Nvb3JkXSA9IHRoaXMuZ3JpZERhdGFbY29vcmRdO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYWN0aW9uID0gXCJ2ZXJpZnlcIjtcbiAgICAgIGNvbnN0IGVuZHBvaW50ID0gYC9jcm9zc3dvcmQvY2hlY2std29yZC8ke3RoaXMuY3Jvc3N3b3JkSWR9YDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuYW5zd2VyID0gdGhpcy5nZXRGaWxsZWRDZWxscyh0aGlzLmdyaWREYXRhLCBudW1iZXJRdWVzdGlvbik7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goZW5kcG9pbnQsIHtcbiAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgZ3JpZERhdGE6IHRoaXMuZ3JpZERhdGEsXG4gICAgICAgICAgICBmaWx0ZXJlZEdyaWREYXRhOiBmaWx0ZXJlZEdyaWREYXRhLFxuICAgICAgICAgICAgc3VibWl0dGVkQW5zd2VyOiB0aGlzLmFuc3dlcixcbiAgICAgICAgICAgIG51bWJlclF1ZXN0aW9uOiBudW1iZXJRdWVzdGlvbiwgLy8g0JTQvtCx0LDQstGP0LzQtSDRgtC10LrRg9GJ0L7RgtC+INC90LjQstC+XG4gICAgICAgICAgICBtb2RlOiB0aGlzLm1vZGUsIC8v0LTQvtCx0LDQstGP0LzQtSDRgNC10LbQuNC80LBcbiAgICAgICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICAgICAgb3JpZ2luYWxHcmlkRGF0YTogdGhpcy5vcmlnaW5hbEdyaWREYXRhLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlKFwiQ29ycmVjdCBBbnN3ZXIhXCIsIFwic3VjY2Vzc1wiLCAoKSA9PiB7XG4gICAgICAgICAgICAvLyDQn9GA0LXQt9Cw0YDQtdC20LTQsNC80LUg0YHRgtGA0LDQvdC40YbQsNGC0LBcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlKFxuICAgICAgICAgICAgcmVzdWx0Lm1lc3NhZ2UgfHwgXCJUaGUgcm91bmQgaGFzIGFscmVhZHkgZW5kZWQuXCIsXG4gICAgICAgICAgICBcImVycm9yXCIsXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlKFwiV3JvbmcgQW5zd2VyXCIsIFwiZXJyb3JcIiwgKCkgPT4ge1xuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiV29yZCBjaGVjayBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvd01lc3NhZ2UobWVzc2FnZSwgdHlwZSwgY2FsbGJhY2sgPSBudWxsKSB7XG4gICAgICBTd2FsLmZpcmUoe1xuICAgICAgICB0aXRsZTpcbiAgICAgICAgICB0eXBlID09PSBcInN1Y2Nlc3NcIlxuICAgICAgICAgICAgPyBcIlN1Y2Nlc3MhXCJcbiAgICAgICAgICAgIDogdHlwZSA9PT0gXCJlcnJvclwiXG4gICAgICAgICAgICAgID8gXCJNaXN0YWtlIVwiXG4gICAgICAgICAgICAgIDogdHlwZSA9PT0gXCJyZWNvcmRcIlxuICAgICAgICAgICAgICAgID8gXCJJbmZvcm1hdGlvbiFcIlxuICAgICAgICAgICAgICAgIDogXCJJbmZvcm1hdGlvblwiLFxuICAgICAgICB0ZXh0OiBtZXNzYWdlLFxuICAgICAgICBpY29uOiB0eXBlLFxuICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogXCJPS1wiLFxuICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgIGNhbGxiYWNrKCk7IC8vINCY0LfQv9GK0LvQvdGP0LLQsCDQt9Cw0LTQsNC00LXQvdCw0YLQsCDRhNGD0L3QutGG0LjRjyDRgdC70LXQtCDQvdCw0YLQuNGB0LrQsNC90LUg0L3QsCBPS1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGRpc3BsYXlNZXNzYWdlKG1lc3NhZ2UpIHtcbiAgICAgIHRoaXMuam9rZXJNZXNzYWdlID0gbWVzc2FnZTsgLy8g0J/QvtC70YPRh9Cw0LLQsNC80LUg0YHRitC+0LHRidC10L3QuNC10YLQviDQvtGCIENyb3Nzd29yZEpva2VyXG4gICAgICAvLyDQodC60YDQuNCy0LDQvNC1INGB0YrQvtCx0YnQtdC90LjQtdGC0L4g0YHQu9C10LQgMyDRgdC10LrRg9C90LTQuCAoMzAwMCDQvNC40LvQuNGB0LXQutGD0L3QtNC4KVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuam9rZXJNZXNzYWdlID0gXCJcIjtcbiAgICAgIH0sIDMwMDApO1xuICAgIH0sXG5cbiAgICAvL9C80LXRgtC+0LQg0LfQsCDQvNC+0LTQsNC7INC30LAg0L/QvtC60LDQt9Cy0LDQvdC1INC90LAg0LPQvtC70Y/QvNCwINGB0L3QuNC80LrQsC/QvtGCINCy0YrQv9GA0L7RgdCwL1xuICAgIHNob3dGdWxsSW1hZ2UoaW1hZ2VVcmwpIHtcbiAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgIGltYWdlVXJsOiBpbWFnZVVybCxcbiAgICAgICAgaW1hZ2VBbHQ6IFwiSW1hZ2UgZnVsbHNpemVcIixcbiAgICAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlLFxuICAgICAgICBzaG93Q29uZmlybUJ1dHRvbjogZmFsc2UsXG4gICAgICAgIC8vYW5pbWF0aW9uOiBmYWxzZSxcbiAgICAgICAgY3VzdG9tQ2xhc3M6IHtcbiAgICAgICAgICBwb3B1cDogXCJyb3VuZGVkLWxnXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHdpZHRoOiBcIjgwMHB4XCIsIC8vINC80L7QttC1INC4IFwiNjAwcHhcIiwg0LjQu9C4IFwiYXV0b1wiXG4gICAgICAgIHBhZGRpbmc6IFwiMXJlbVwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiNmZmZcIixcbiAgICAgICAgLyogaW1hZ2VXaWR0aDogNjAwLFxuICAgICAgICBpbWFnZUhlaWdodDogNjAwLCovXG4gICAgICB9KTtcbiAgICB9LFxuICAgIGdldEZ1bGxJbWFnZVVybCh0aHVtYlVybCkge1xuICAgICAgcmV0dXJuIHRodW1iVXJsLnJlcGxhY2UoXG4gICAgICAgIFwiL3VwbG9hZHMvcXVlc3Rpb25faW1hZ2VzL1wiLFxuICAgICAgICBcIi91cGxvYWRzL3F1ZXN0aW9uX2ltYWdlcy9mdWxsc2l6ZS9cIixcbiAgICAgICk7XG4gICAgfSxcblxuICAgIHJlZGlyZWN0VG9OZXh0TGV2ZWwoKSB7XG4gICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IFwiY3Jvc3N3b3JkXCI7XG4gICAgfSxcbiAgICBsYXVuY2hDb25mZXR0aSgpIHtcbiAgICAgIGNvbmZldHRpKHtcbiAgICAgICAgcGFydGljbGVDb3VudDogMTUwLFxuICAgICAgICBzcHJlYWQ6IDcwLFxuICAgICAgICBvcmlnaW46IHsgeTogMC42IH0sXG4gICAgICAgIGNvbG9yczogW1wiI2ZmMFwiLCBcIiMwZjBcIiwgXCIjMDBmXCJdLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBwbGF5U3VjY2Vzc1NvdW5kKCkge1xuICAgICAgdGhpcy4kcmVmcy5zdWNjZXNzU291bmQucGxheSgpO1xuICAgIH0sXG4gICAgcmFuZ2Uoc3RhcnQsIGVuZCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgICAgcmVzdWx0LnB1c2goaSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAgcmVxdWVzdEpva2VyKCkge1xuICAgICAgLy8g0JjQt9Cy0LjQutCy0LDQvNC1INC80LXRgtC+0LTQsCDQvtGCIENyb3Nzd29yZEpva2VyXG4gICAgICB0aGlzLiRyZWZzLmpva2VyLnJlcXVlc3RKb2tlcigpO1xuICAgIH0sXG4gICAgLy/QtNCy0LAg0LzQtdGC0L7QtNCwINC30LAg0L/QvtC/0YrQu9Cy0LDQvdC1INC90LAg0L/QvtC70LXRgtCw0YLQsCDQv9GA0Lgg0LjRgdC60LDQvdC1INC90LAg0LbQvtC60LXRgFxuICAgIGhhbmRsZVJldmVhbExldHRlcnMoY29vcmRpbmF0ZXMsIGxldHRlcnMpIHtcbiAgICAgIHRoaXMucmV2ZWFsTGV0dGVycyhjb29yZGluYXRlcywgbGV0dGVycyk7XG4gICAgICAvLyDQn9GD0YHQutCw0LzQtSDQt9Cy0YPQuiDQv9GA0Lgg0YDQsNC30LrRgNC40LLQsNC90LXRgtC+INC90LAg0LHRg9C60LLQuNGC0LVcbiAgICAgIHRoaXMucGxheUpva2VyU291bmQoKTtcbiAgICB9LFxuICAgIHJldmVhbExldHRlcnMoY29vcmRpbmF0ZXMsIGxldHRlcnMpIHtcbiAgICAgIGNvb3JkaW5hdGVzLmZvckVhY2goKGNvb3JkLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBsZXR0ZXIgPSBsZXR0ZXJzW2luZGV4XTtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZERhdGFbY29vcmRdKSB7XG4gICAgICAgICAgdGhpcy5ncmlkRGF0YVtjb29yZF0udmFsdWUgPSBsZXR0ZXI7XG5cbiAgICAgICAgICAvLyDQpNCb0JDQkywg0YfQtSDQsdGD0LrQstCw0YLQsCDQtSDRgNCw0LfQutGA0LjRgtCwINC+0YIg0LbQvtC60LXRgFxuICAgICAgICAgIHRoaXMuZ3JpZERhdGFbY29vcmRdLmpva2VyID0gdHJ1ZTtcblxuICAgICAgICAgIC8vINCU0L7QsdCw0LLRj9C80LUg0LrQu9Cw0YHQvtCy0LUg0LfQsCDQvtGG0LLQtdGC0Y/QstCw0L3QtSDQuCDQv9GA0LXQvNC40LPQstCw0L3QtVxuICAgICAgICAgIHRoaXMuZ3JpZERhdGFbY29vcmRdLmhpZ2hsaWdodGVkID0gdHJ1ZTsgLy8g0J7RhtCy0LXRgtGP0LLQsNC90LUg0L3QsCDQutC70LXRgtC60LDRgtCwXG4gICAgICAgICAgdGhpcy5ncmlkRGF0YVtjb29yZF0uYmxpbmsgPSB0cnVlOyAvLyDQn9GA0LXQvNC40LPQstCw0L3QtSDQvdCwINC60LvQtdGC0LrQsNGC0LBcblxuICAgICAgICAgIC8vINCh0LvQtdC0IDMg0YHQtdC60YPQvdC00Lgg0L/RgNC10LzQsNGF0LLQsNC80LUg0L7RhtCy0LXRgtGP0LLQsNC90LXRgtC+INC4INC/0YDQtdC80LjQs9Cy0LDQvdC10YLQvlxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ncmlkRGF0YVtjb29yZF0uaGlnaGxpZ2h0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZERhdGFbY29vcmRdLmJsaW5rID0gZmFsc2U7XG4gICAgICAgICAgfSwgMzAwMCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgLy8g0JzQtdGC0L7QtCDQt9CwINC/0YPRgdC60LDQvdC1INC90LAg0LfQstGD0LrQsCDQv9GA0Lgg0YDQsNC30LrRgNC40LLQsNC90LUg0L3QsCDQsdGD0LrQstC40YLQtVxuICAgIHBsYXlKb2tlclNvdW5kKCkge1xuICAgICAgY29uc3Qgc291bmQgPSBuZXcgQXVkaW8oXCIvc291bmRzL2pva2VyLm1wM1wiKTsgLy8g0J/RitGCINC60YrQvCDQt9Cy0YPQutC+0LLQuNGPINGE0LDQudC7INC30LAg0LbQvtC60LXRgNCwXG4gICAgICBzb3VuZC5wbGF5KCkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCLQl9Cy0YPQutGK0YIg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YPRgdC90LDRgjpcIik7XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgLy8g0YTRg9C90LrRhtC40Y8g0LfQsCDQv9GA0LXQvNC40L3QsNCy0LDQvdC1INC/0YDQtdC3INC/0L7Qu9C10YLQsNGC0LAg0YHRitGBINGB0YLRgNC10LvQutC40YLQtSDQvtGCINC60LvQsNCy0LjQsNGC0YPRgNCw0YLQsFxuICAgIGhhbmRsZUtleVByZXNzKGV2ZW50KSB7XG4gICAgICBjb25zdCBkaXJlY3Rpb25zID0ge1xuICAgICAgICBBcnJvd1VwOiBbLTEsIDBdLFxuICAgICAgICBBcnJvd0Rvd246IFsxLCAwXSxcbiAgICAgICAgQXJyb3dMZWZ0OiBbMCwgLTFdLFxuICAgICAgICBBcnJvd1JpZ2h0OiBbMCwgMV0sXG4gICAgICB9O1xuICAgICAgLy8g0JDQutC+INC90LDRgtC40YHQutCw0L3QtdGC0L4g0LjQtNCy0LAg0L7RgiDQv9C+0LvQtSDQuNC30LLRitC9INC60YDRitGB0YLQvtGB0LvQvtCy0LjRhtCw0YLQsCDigJMg0LjQs9C90L7RgNC40YDQsNC5INCz0L5cbiAgICAgIC8vINCf0YDQvtCy0LXRgNGP0LLQsNC80LUg0LTQsNC70Lgg0LDQutGC0LjQstC90LjRj9GCINC10LvQtdC80LXQvdGCINCVINC/0L7Qu9C10YLQviDQsiDQutGA0YrRgdGC0L7RgdC70L7QstC40YbQsNGC0LBcbiAgICAgIGlmICghZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5tYXRjaGVzKFwiaW5wdXQuY2VsbC1pbnB1dFwiKSkge1xuICAgICAgICAvL9GE0L7QutGD0YHRitGCINC90LUg0LUg0LIg0LrRgNGK0YHRgtC+0YHQu9C+0LLQuNGG0LDRgtCwLCDQuNCz0L3QvtGA0LjRgNCw0LzQtSDRgdGC0YDQtdC70LrQuNGC0LVcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyZW50Q29vcmQgPSB0aGlzLmFjdGl2ZUNlbGw7XG4gICAgICBpZiAoIWN1cnJlbnRDb29yZCkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBbcm93LCBjb2xdID0gY3VycmVudENvb3JkLnNwbGl0KFwiLVwiKS5tYXAoTnVtYmVyKTtcbiAgICAgIGNvbnN0IFtkUm93LCBkQ29sXSA9IGRpcmVjdGlvbnNbZXZlbnQua2V5XSB8fCBbMCwgMF07XG5cbiAgICAgIGNvbnN0IG5ld1JvdyA9IHJvdyArIGRSb3c7XG4gICAgICBjb25zdCBuZXdDb2wgPSBjb2wgKyBkQ29sO1xuICAgICAgY29uc3QgbmV3Q29vcmQgPSBgJHtuZXdSb3d9LSR7bmV3Q29sfWA7XG5cbiAgICAgIC8vINCf0YDQvtCy0LXRgNC60LAg0LTQsNC70Lgg0L3QvtCy0LDRgtCwINC60LvQtdGC0LrQsCDQtSDQsNC60YLQuNCy0L3QsFxuICAgICAgaWYgKHRoaXMuZ3JpZERhdGFbbmV3Q29vcmRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVDZWxsID0gbmV3Q29vcmQ7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICBgaW5wdXRbZGF0YS1jb29yZGluYXRlcz1cIiR7bmV3Q29vcmR9XCJdYCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChpbnB1dCkgaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgfSxcbn07XG48L3NjcmlwdD5cblxuPHN0eWxlIHNjb3BlZD5cbi5jcm9zc3dvcmQtcmVuZGVyZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgZ2FwOiAyNHB4O1xuICAvKm1heC13aWR0aDogMTIwMHB4OyAvKiDQmNC70Lgg0L3Rj9C60LDQutCy0LAg0LTRgNGD0LPQsCDRgNCw0LfRg9C80L3QsCDQs9GA0LDQvdC40YbQsCBcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIG1hcmdpbi1yaWdodDogYXV0bzsqL1xufVxuXG4ucXVlc3Rpb25zLXJvdyB7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgcGFkZGluZzogMCAxMHB4O1xufVxuLnF1ZXN0aW9ucyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogMTEwMHB4OyAvKiDQvNC+0LbQtdGIINC00LAg0LPQviDRg9Cy0LXQu9C40YfQuNGIL9C90LDQvNCw0LvQuNGIICovXG4gIG1hcmdpbjogMCBhdXRvO1xuICBnYXA6IDE2cHg7XG4gIC8qINC80LDQs9C40Y/RgtCwOiAqL1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDI2MHB4LCAyNjBweCkpO1xuICAvKiDRhtC10L3RgtGA0LjRgNCw0LzQtSDRhtC10LvQuNGPIOKAntCx0LvQvtC64oCcINC+0YIg0LrQvtC70L7QvdC4ICovXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuLnF1ZXN0aW9uIHtcbiAgZmxleDogMSAxIDI2MHB4OyAvKiDQsdCw0LfQvtCy0L4gfjI0MHB4LCDQvNC+0LbQtSDQtNCwINGB0LUg0YHQstC40LLQsC/RgNCw0LfRiNC40YDRj9Cy0LAgKi9cbiAgbWF4LXdpZHRoOiAyNjBweDsgLyog0LTQsCDQvdC1INGB0YLQsNCy0LAg0L/RgNC10LrQsNC70LXQvdC+INGI0LjRgNC+0LrQsCDQvdCwINCz0L7Qu9GP0Lwg0LXQutGA0LDQvSAqL1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjZjVlM2MwLCAjZTBjNzk3KTtcbiAgcGFkZGluZzogMTVweDtcbiAgZm9udC1mYW1pbHk6IFwiR2FyYW1vbmRcIiwgc2VyaWY7XG4gIGJvcmRlcjogNXB4IHNvbGlkICNjNGE0ODQ7XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgd2hpdGUtc3BhY2U6IHByZS1saW5lO1xufVxuLnF1ZXN0aW9uLW51bWJlciB7XG4gIGZvbnQtc2l6ZTogMS4ycmVtO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgbWFyZ2luLWJvdHRvbTogNXB4OyAvKiDQoNCw0LfRgdGC0L7Rj9C90LjQtSDQvNC10LbQtNGDIFwi0JLRitC/0YDQvtGBIOKEllwiINC4INGC0LXQutGB0YLQsCDQvdCwINCy0YrQv9GA0L7RgdCwICovXG59XG4ucXVlc3Rpb24tdGV4dCB7XG4gIG1hcmdpbjogMDtcbiAgY29sb3I6ICM1YTNlMWI7XG4gIGZvbnQtc2l6ZTogMS4zcmVtO1xuICAvKmZvbnQtc3R5bGU6IGl0YWxpYzsqL1xuICBmb250LXdlaWdodDogNjAwO1xufVxuLmxpbmUtY2xhbXAge1xuICBtYXgtaGVpZ2h0OiAxMjBweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLmJvYXJkLXJvdyB7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IDI0cHg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgZmxleC13cmFwOiB3cmFwOyAvKiDQvdCwINC80LDQu9GK0Log0LXQutGA0LDQvSDQsdGD0YLQvtC90LjRgtC1INC80L7Qs9Cw0YIg0LTQsCDQv9Cw0LTQvdCw0YIg0L/QvtC0INC60YDRitGB0YLQvtGB0LvQvtCy0LjRhtCw0YLQsCAqL1xuICBtYXJnaW4tYm90dG9tOiA4cHg7XG59XG4uZ3JpZCB7XG4gIGRpc3BsYXk6IGdyaWQ7XG4gIC8qd2lkdGg6IDEwMCU7IC8qINCg0LDQt9C/0YrQstCwINGA0LXRiNC10YLQutCw0YLQsCAqL1xuICB3aWR0aDogZml0LWNvbnRlbnQ7XG4gIC8qbWF4LXdpZHRoOiA3MDBweDsgLyog0J7Qs9GA0LDQvdC40YfQsNCy0LDQvNC1INC80LDQutGB0LjQvNCw0LvQvdCw0YLQsCDRiNC40YDQuNC90LAgKi9cbiAgLyphc3BlY3QtcmF0aW86IHZhcigtLWNvbHMpIC8gdmFyKC0tcm93cyk7IC8qINCX0LDQv9Cw0LfQstCw0LzQtSDQv9GA0L7Qv9C+0YDRhtC40LjRgtC1INC90LAg0YDQtdGI0LXRgtC60LDRgtCwICovXG4gIGdyaWQtdGVtcGxhdGUtcm93czogcmVwZWF0KHZhcigtLXJvd3MpLCA0NXB4KTtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQodmFyKC0tY29scyksIDQ1cHgpO1xuICBnYXA6IDA7IC8qINCf0YDQtdC80LDRhdCy0LDQvNC1INC/0YDQsNC30L3QuNC90LjRgtC1INC80LXQttC00YMg0LrQu9C10YLQutC40YLQtSAqL1xuICAvKm92ZXJmbG93LXg6IGF1dG87IC8qINCf0L7Rj9Cy0Y/QstCwINGB0LUg0YHQutGA0L7QuyDQv9GA0Lgg0L3Rg9C20LTQsCAqL1xuICBvdmVyZmxvdy15OiBoaWRkZW47XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG4uY2VsbC1pbnB1dCB7XG4gIC8qIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7Ki9cbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyAvKiDQktC40LfRg9Cw0LvQvdC+INC/0YDQuNC90YPQttC00LDQstCwINCz0LvQsNCy0L3QuCDQsdGD0LrQstC4ICovXG4gIGJvcmRlcjogMXB4IHNvbGlkICNhYWE7XG4gIGJveC1zaGFkb3c6XG4gICAgaW5zZXQgMnB4IDJweCA1cHggcmdiYSgwLCAwLCAwLCAwLjIpLFxuICAgIC8qINCS0YrRgtGA0LXRiNC90LAg0YHRj9C90LrQsCDQt9CwINGA0LXQu9C10YQgKi8gMnB4IDJweCA1cHggcmdiYSgwLCAwLCAwLCAwLjIpOyAvKiDQktGK0L3RiNC90LAg0YHRj9C90LrQsCDQt9CwINC40LfQv9GK0LrQvdCw0Lsg0LXRhNC10LrRgiAqL1xuICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluLW91dDsgLyog0J/Qu9Cw0LLQvdC+0YHRgiDQv9GA0Lgg0L/RgNC+0LzQtdC90LggKi9cbiAgY2FyZXQtY29sb3I6IHRyYW5zcGFyZW50OyAvKiDQodC60YDQuNCy0LAg0LzQuNCz0LDRidC40Y8g0LrRg9GA0YHQvtGAICovXG59XG4uY2VsbCB7XG4gIHdpZHRoOiA0NXB4O1xuICBoZWlnaHQ6IDQ1cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAvKmJvcmRlcjogMXB4IHNvbGlkICNkZGQ7IC8qINCT0YDQsNC90LjRhtC4INC30LAg0LLRgdGP0LrQsCDQutC70LXRgtC60LAgKi9cbiAgYXNwZWN0LXJhdGlvOiAxOyAvKiDQk9Cw0YDQsNC90YLQuNGA0LAg0LrQstCw0LTRgNCw0YLQvdCwINGE0L7RgNC80LAgKi9cbiAgYm94LXNpemluZzogYm9yZGVyLWJveDsgLyog0JPQsNGA0LDQvdGC0LjRgNCwLCDRh9C1INCx0L7RgNC00LXRgNGK0YIg0L3QtSDQv9GA0L7QvNC10L3RjyDRgNCw0LfQvNC10YDQsCAqL1xuICBwb3NpdGlvbjogcmVsYXRpdmU7IC8qINCf0L7Qt9Cy0L7Qu9GP0LLQsCDQv9C+0YHRgtCw0LLRj9C90LUg0L3QsCDQvdC+0LzQtdGA0LAg0YHQv9GA0Y/QvNC+INC60LvQtdGC0LrQsNGC0LAgKi9cbn1cbi5jZWxsLWlucHV0OmZvY3VzIHtcbiAgYm9yZGVyLWNvbG9yOiAjYWFhO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoOTMsIDI1MSwgMTAxKTtcbn1cblxuLyog0J/QvtC60LDQt9Cy0LDQvNC1INCw0LrRgtC40LLQvdC40YLQtSDQutC70LXRgtC60LggKi9cbi5jZWxsIC5jZWxsLWlucHV0IHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG4uY2VsbC1udW1iZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMnB4OyAvKiDQoNCw0LfRgdGC0L7Rj9C90LjQtSDQvtGC0LPQvtGA0LUgKi9cbiAgbGVmdDogMnB4OyAvKiDQoNCw0LfRgdGC0L7Rj9C90LjQtSDQvtGC0LvRj9Cy0L4gKi9cbiAgZm9udC1zaXplOiAwLjlyZW07IC8qINCd0LDQvNCw0LvRj9Cy0LDQvdC1INC90LAg0YDQsNC30LzQtdGA0LAg0L3QsCDRiNGA0LjRhNGC0LAgKi9cbiAgY29sb3I6ICM1NTU7IC8qINCm0LLQtdGC0YrRgiDQvdCwINC90L7QvNC10YDQsCAqL1xuICBwb2ludGVyLWV2ZW50czogbm9uZTsgLyog0J/RgNC10LTQvtGC0LLRgNCw0YLRj9Cy0LAg0L3QvtC80LXRgNCwINC00LAg0L/RgNC10YfQuCDQvdCwINC60LvQuNC60L7QstC10YLQtSAqL1xufVxuLyrQpdC+0LLRitGAINC10YTQtdC60YIg0LrQvtCz0LDRgtC+INC80LjRiNC60LDRgtCwINC1INCy0YrRgNGF0YMg0LrQu9C10YLQutCw0YLQsCovXG4uY2VsbDpob3ZlciB7XG4gIHRyYW5zZm9ybTogc2NhbGUoMS4wNSk7IC8qINCb0LXQutC+INGD0LPQvtC70LXQvNGP0LLQsNC90LUgKi9cbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMXMgZWFzZS1pbi1vdXQ7XG59XG4vKiDRgdC70LXQtNC40Lwg0LTQsNC70Lgg0LrQu9C10YLQutCw0YLQsCDQtSDQv9C+0L/RitC70L3QtdC90LAg0Lgg0YHQv9GA0Y/QvNC+INGC0L7QstCwINC5INC/0YDQvtC80LXQvdGP0LzQtSDRhtCy0LXRgtCwKi9cbi5maWxsZWQtY2VsbCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmViM2I7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBmb250LXNpemU6IDEzMCU7XG4gIC8qY29sb3I6IHdoaXRlOyovXG59XG4vKiDQvdC+0LLQvjog0LDQutC+INC1INGA0LDQt9C60YDQuNGC0L4g0L7RgiDQttC+0LrQtdGAIOKGkiDQt9C10LvQtdC90L4gKi9cbi5qb2tlci1jZWxsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzE2OGEyMDtcbiAgY29sb3I6ICNmZmY7XG59XG5cbi8qINCw0LrQviDQutC70LXRgtC60LDRgtCwINC40LzQsCDQuCDQtNCy0LDRgtCwINC60LvQsNGB0LAsINC30LDQv9Cw0LfQuCDQt9C10LvQtdC90L7RgtC+ICovXG4vKi5maWxsZWQtY2VsbC5qb2tlci1jZWxsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzE2OGEyMDtcbiAgY29sb3I6ICNmZmY7XG59Ki9cblxuLmpva2VyLWJ1dHRvbiB7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNmNWUzYzAsICNlMGM3OTcpO1xuICBib3JkZXI6IDJweCBzb2xpZCAjYzRhNzdkO1xuICBwYWRkaW5nOiAxMHB4IDIwcHg7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGJvcmRlci1yYWRpdXM6IDEycHg7IC8qINCX0LDQvtCx0LvQtdC90Lgg0YrQs9C70LggKi9cbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyAvKiDQoNCw0LfQtNC10LvRjyBcItCW0L7QutC10YBcIiDQuCDQv9C+0LTQt9Cw0LPQu9Cw0LLQuNC10YLQviAqL1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYm94LXNoYWRvdzogMHB4IDRweCA2cHggcmdiYSgwLCAwLCAwLCAwLjMpO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRyYW5zaXRpb246XG4gICAgdHJhbnNmb3JtIDAuMnMgZWFzZS1pbi1vdXQsXG4gICAgYm94LXNoYWRvdyAwLjJzIGVhc2UtaW4tb3V0O1xuICB3aWR0aDogMTgwcHg7IC8qINCk0LjQutGB0LjRgNCw0L3QsCDRiNC40YDQuNC90LAsINC30LAg0LTQsCDQvtGB0YLQsNC90LUg0LIg0L/RgNCw0LLQuNC70L3QsCDRhNC+0YDQvNCwICovXG4gIGhlaWdodDogNzBweDsgLyog0KTQuNC60YHQuNGA0LDQvdCwINCy0LjRgdC+0YfQuNC90LAgKi9cbiAgbWFyZ2luLXRvcDogMTNweDtcbn1cblxuLyog0JXRhNC10LrRgiDQv9GA0Lgg0YXQvtCy0YrRgCAqL1xuLmpva2VyLWJ1dHRvbjpob3ZlciB7XG4gIHRyYW5zZm9ybTogc2NhbGUoMS4xKTsgLyog0JvQtdC60L4g0YPQstC10LvQuNGH0LXQvdC40LUgKi9cbiAgYm94LXNoYWRvdzogMHB4IDZweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC40KTtcbn1cblxuLyog0J/Qvi3QvNCw0LvRitC6INGC0LXQutGB0YIg0LfQsCDQvtC/0LjRgdCw0L3QuNC10YLQviAqL1xuLmpva2VyLXN1YnRleHQge1xuICBmb250LXNpemU6IDE2cHg7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGNvbG9yOiAjNjU0MzIxO1xuICBtYXJnaW4tdG9wOiAycHg7XG59XG4uam9rZXItbm90ZSB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogI2QyYzZjNjtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBvcGFjaXR5OiAwLjc7XG4gIG1hcmdpbi10b3A6IDJweCAhaW1wb3J0YW50O1xufVxuXG4uYWN0aW9ucyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7IC8qINCm0LXQvdGC0YDQuNGA0LDQvNC1INCx0YPRgtC+0L3QsCDQuCDRgtC10LrRgdGC0LAg0YHQv9GA0Y/QvNC+INGA0L7QtNC40YLQtdC70Y8gKi9cbiAgZ2FwOiAxMHB4OyAvKiDQoNCw0LfRgdGC0L7Rj9C90LjQtSDQvNC10LbQtNGDINCx0YPRgtC+0L3QsCDQuCDRgtC10LrRgdGC0LAgKi9cbiAgbWluLXdpZHRoOiAxNTBweDsgLyog0KTQuNC60YHQuNGA0LDQvdCwINGI0LjRgNC40L3QsCwg0LfQsCDQtNCwINC90LUg0L/RgNC+0LzQtdC90Y8g0YDQsNC30LzQtdGA0LAgKi9cbiAgcG9zaXRpb246IHJlbGF0aXZlOyAvKiDQl9CwINC/0L7Qt9C40YbQuNC+0L3QuNGA0LDQvdC1INC90LAg0LLRitGC0YDQtdGI0L3QuCDQtdC70LXQvNC10L3RgtC4ICovXG59XG5cbi5hY3Rpb25zIC5mZWVkYmFjayB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjsgLyog0KbQtdC90YLRgNC40YDQsNC80LUg0YLQtdC60YHRgtCwICovXG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDsgLyog0J/RgNC10L3QsNGB0Y/QvdC1INC90LAg0LTRitC70LPQuCDQtNGD0LzQuCAqL1xuICBtYXgtd2lkdGg6IDE1MHB4OyAvKiDQntCz0YDQsNC90LjRh9Cw0LLQsNC80LUg0YjQuNGA0LjQvdCw0YLQsCAqL1xuICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7IC8qINCf0L7Qt9Cy0L7Qu9GP0LLQsNC80LUg0L/RgNC10L3QsNGB0Y/QvdC1INC90LAg0L3QvtCy0Lgg0YDQtdC00L7QstC1ICovXG4gIHBvc2l0aW9uOiBzdGF0aWM7IC8qINCd0Y/QvNCwINC90YPQttC00LAg0L7RgiDQsNCx0YHQvtC70Y7RgtC90L4g0L/QvtC30LjRhtC40L7QvdC40YDQsNC90LUgKi9cbn1cbi5hbGVydC1tZXNzYWdlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y5YzJjMjtcbiAgcGFkZGluZzogMTBweDtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICBjb2xvcjogI2QzMmYyZjtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbmJ1dHRvbiB7XG4gIHBhZGRpbmc6IDEwcHggMjBweDtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4uY2VsbC5hbmltYXRlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogeWVsbG93ICFpbXBvcnRhbnQ7IC8qINCi0LXRgdGC0L7QstC+INC+0YbQstC10YLRj9Cy0LDQvdC1INC30LAg0L/RgNC+0LLQtdGA0LrQsCAqL1xuICBib3JkZXI6IDJweCBzb2xpZCByZWQ7IC8qINCU0L7Qv9GK0LvQvdC40YLQtdC70LXQvSDQsNC60YbQtdC90YIgKi9cbn1cbi5jZWxsLWlucHV0LmFuaW1hdGUge1xuICBhbmltYXRpb246IHB1bHNlIDEuNXMgaW5maW5pdGUgYWx0ZXJuYXRlOyAvKiDQkNC90LjQvNCw0YbQuNGPINGBINC/0LvQsNCy0LXQvSDQv9GA0LXRhdC+0LQgKi9cbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjVzIGVhc2UtaW4tb3V0OyAvKiDQn9C70LDQstC10L0g0L/RgNC10YXQvtC0INC90LAg0YbQstC10YLQvtCy0LXRgtC1ICovXG59XG4vKtC+0YbQstC10YLRj9Cy0LDQvdC1INC60LvQtdGC0LrQsCDQv9GA0Lgg0LbQvtC60LXRgCAqL1xuLmhpZ2hsaWdodGVkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIyLCAxMzgsIDMyKTsgLyog0J/RgNC40LzQtdGAINC30LAg0L7RhtCy0LXRgtGP0LLQsNC90LUgKi9cbn1cbi8qINCa0LvQsNGBINC30LAg0L/RgNC10LzQuNCz0LLQsNC90LUgKi9cbi5ibGluayB7XG4gIGFuaW1hdGlvbjogYmxpbmtBbmltYXRpb24gMXMgaW5maW5pdGUgIWltcG9ydGFudDtcbn1cbi5idXR0b24tYmxvY2sge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDFyZW07XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBmbGV4LXdyYXA6IG5vd3JhcDtcbn1cblxuLmJ1dHRvbi1jb250YWluZXIge1xuICBmbGV4OiAxIDEgMzAwcHg7IC8qINCf0L7Qt9Cy0L7Qu9GP0LLQsCDQtNCwINGB0LUg0YHQstC40LUsINC90L4g0L3QtSDQv9C+0LQgMzAwcHggKi9cbiAgbWluLXdpZHRoOiAzMDBweDtcbiAgbWF4LXdpZHRoOiA0MDBweDtcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiAxMHB4O1xuICBhbGlnbi1pdGVtczogc3RyZXRjaDsgLyog0KPQtdC00L3QsNC60LLRj9Cy0LAg0LLQuNGB0L7Rh9C40L3QsNGC0LAg0L3QsCDQsdGD0YLQvtC90LjRgtC1ICovXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuLmJ1dHRvbi1jb250YWluZXIgYnV0dG9uIHtcbiAgZmxleC1ncm93OiAxOyAvKiDQktGB0LXQutC4INCx0YPRgtC+0L0g0YHQtSDRgNCw0LfRiNC40YDRj9Cy0LAg0YDQsNCy0L3QvtC80LXRgNC90L4gKi9cbiAgZmxleC1iYXNpczogNTAlOyAvKiDQn9GA0LjQvdGD0LbQtNCw0LLQsCDQsdGD0YLQvtC90LjRgtC1INC00LAg0LfQsNC10LzQsNGCINGA0LDQstC90Lgg0YfQsNGB0YLQuCDQvtGCINC60L7QvdGC0LXQudC90LXRgNCwICovXG4gIG1pbi13aWR0aDogMTgwcHg7IC8qINCc0LjQvdC40LzQsNC70L3QsCDRiNC40YDQuNC90LAgKi9cbiAgbWF4LXdpZHRoOiAyMDBweDsgLyog0J7Qv9GG0LjQvtC90LDQu9C90L4g4oCTINC30LAg0LTQsCDQvdC1INGB0YLQsNCy0LDRgiDQv9GA0LXQutCw0LvQtdC90L4g0LPQvtC70LXQvNC4ICovXG4gIG1pbi1oZWlnaHQ6IDgwcHg7IC8qINCc0LjQvdC40LzQsNC70L3QsCDQstC40YHQvtGH0LjQvdCwICovXG4gIC8qaGVpZ2h0OiAxMDAlOyAvKiDQktGB0LjRh9C60Lgg0LHRg9GC0L7QvdC4INGJ0LUg0YHQtSDRgNCw0LfRgtC10LPQu9GP0YIg0LTQviDQstC40YHQvtGH0LjQvdCw0YLQsCDQvdCwINC90LDQuS3Qs9C+0LvQtdC80LjRjyAqL1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLyrQs9GA0LDQtNC40LXQvSovXG4uZ3JhZGllbnQtc2VuZEJ1dHRvbiB7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgyNzBkZWcsICMyMTk2ZjMsICM3M2JjZDcpO1xuICBwYWRkaW5nOiAxcHggMnB4O1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzIGVhc2UtaW4tb3V0O1xufVxuLmdyYWRpZW50LXZlcmlmeUJ1dHRvbiB7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgyNzBkZWcsICMzMDNhY2IsICMyMzM5YjYpO1xuICBwYWRkaW5nOiAxcHggMXB4O1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzIGVhc2UtaW4tb3V0O1xufVxuXG4uZ3JhZGllbnQtc2VuZEJ1dHRvbjpob3ZlciB7XG4gIHRyYW5zZm9ybTogc2NhbGUoMS4wNSk7XG59XG4uZ3JhZGllbnQtdmVyaWZ5QnV0dG9uOmhvdmVyIHtcbiAgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KTtcbn1cbi8qLnNlbnQtYW5zd2VyIHtcbiAgYm94LXNoYWRvdzogLTFweCAzcHggMjBweCA0cHggI2ZmZWIzYiwgdmFyKC0tdHctcmluZy1zaGFkb3csIDAgMCAjY2RkYzM5ZDYpLFxuICAgIHZhcigtLXR3LXNoYWRvdyk7XG59Ki9cblxuQGtleWZyYW1lcyBibGlua0FuaW1hdGlvbiB7XG4gIDAlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7XG4gIH1cbiAgNTAlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxuICAxMDAlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBwdWxzZSB7XG4gIDAlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmYWNiOyAvKiDQkdC70LXQtNC+0LbRitC70YLQviAqL1xuICB9XG4gIDUwJSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZWIzYjsgLyog0J/Qvi3Rj9GA0LrQvtC20YrQu9GC0L4gKi9cbiAgfVxuICAxMDAlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmYWNiOyAvKiDQkdC70LXQtNC+0LbRitC70YLQviAqL1xuICB9XG59XG5AbWVkaWEgKG1heC13aWR0aDogMTUwMHB4KSB7XG4gIC5idXR0b24tYmxvY2sge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAvKmZsZXgtd3JhcDogd3JhcDsqL1xuICB9XG59XG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgLyogLmdyaWQtY29udGFpbmVyIHtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgLyog0JrRgNGK0YHRgtC+0YHQu9C+0LLQuNGG0LDRgtCwINC+0YLQuNCy0LAg0L3QsNC0INCx0YPRgtC+0L3QsCBcbiAgICBhbGlnbi1pdGVtczogY2VudGVyOyAvKiDQptC10L3RgtGA0LjRgNCw0LzQtSDQstGB0LjRh9C60L4g0YXQvtGA0LjQt9C+0L3RgtCw0LvQvdC+IFxuICAgIG92ZXJmbG93LXg6IGF1dG87IC8qINCf0L7Rj9Cy0Y/QstCwINGB0LUg0YHQutGA0L7QuyDQv9GA0Lgg0L3Rg9C20LTQsCBcbiAgfSovXG4gIC5ncmlkIHtcbiAgICBtYXgtd2lkdGg6IDEwMHZ3O1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KHZhcigtLWNvbHMpLCAyNXB4KTtcbiAgICBncmlkLXRlbXBsYXRlLXJvd3M6IHJlcGVhdCh2YXIoLS1yb3dzKSwgMjVweCk7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIH1cblxuICAuY2VsbCB7XG4gICAgd2lkdGg6IDI1cHg7XG4gICAgaGVpZ2h0OiAyNXB4O1xuICB9XG4gIC5maWxsZWQtY2VsbCB7XG4gICAgZm9udC1zaXplOiA5MCU7XG4gIH1cbiAgLmNlbGwtbnVtYmVyIHtcbiAgICB0b3A6IDFweDsgLyog0KDQsNC30YHRgtC+0Y/QvdC40LUg0L7RgtCz0L7RgNC1ICovXG4gICAgbGVmdDogMXB4OyAvKiDQoNCw0LfRgdGC0L7Rj9C90LjQtSDQvtGC0LvRj9Cy0L4gKi9cbiAgICBmb250LXNpemU6IDAuN3JlbTsgLyog0J3QsNC80LDQu9GP0LLQsNC90LUg0L3QsCDRgNCw0LfQvNC10YDQsCDQvdCwINGI0YDQuNGE0YLQsCAqL1xuICB9XG4gIC5hY3Rpb25zIHtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgd2lkdGg6IGF1dG87XG4gIH1cblxuICAucXVlc3Rpb24taW1hZ2Uge1xuICAgIG1heC13aWR0aDogMjAwcHg7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIG1hcmdpbi10b3A6IDFyZW07XG4gIH1cbiAgLnF1ZXN0aW9uLXRleHQge1xuICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xuICB9XG4gIC5ncmFkaWVudC1zZW5kQnV0dG9uIHtcbiAgICBwYWRkaW5nOiAwcHg7XG4gICAgbWluLWhlaWdodDogNjRweDtcbiAgfVxuICAuZ3JhZGllbnQtdmVyaWZ5QnV0dG9uIHtcbiAgICBwYWRkaW5nOiAwcHg7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIH1cbiAgLyog0JfQsNCz0LvQsNCy0LjQtdGC0L4gXCJTRU5EICMxXCIgKi9cbiAgLmdyYWRpZW50LXNlbmRCdXR0b24gLnRleHQtbGcge1xuICAgIGZvbnQtc2l6ZTogMC45NXJlbTsgLyog0L/Qvi3QvNCw0LvRitC6INC+0YIgMS4xMjVyZW0gKi9cbiAgICBsaW5lLWhlaWdodDogMS4zcmVtO1xuICB9XG4gIC8qINCd0LDQuS3QtNC+0LvQvdC40Y/RgiDRgNC10LQgKE4vQSDQuNC70Lgg0L7RgtCz0L7QstC+0YApLCDQsNC60L4g0Lgg0L3QtdCz0L4g0LjRgdC60LDRiCDQv9C+LdC00YDQtdCx0LXQvSAqL1xuICAuZ3JhZGllbnQtc2VuZEJ1dHRvbiAudGV4dC1zbSB7XG4gICAgZm9udC1zaXplOiAwLjhyZW07XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBsaW5lLWhlaWdodDogMS4zcmVtO1xuICB9XG4gIC5ncmFkaWVudC12ZXJpZnlCdXR0b24gLnRleHQtbGcge1xuICAgIGZvbnQtc2l6ZTogMC45NXJlbTsgLyog0L/Qvi3QvNCw0LvRitC6INC+0YIgMS4xMjVyZW0gKi9cbiAgICBsaW5lLWhlaWdodDogMS4zcmVtO1xuICB9XG4gIC8qINCd0LDQuS3QtNC+0LvQvdC40Y/RgiDRgNC10LQgKE4vQSDQuNC70Lgg0L7RgtCz0L7QstC+0YApLCDQsNC60L4g0Lgg0L3QtdCz0L4g0LjRgdC60LDRiCDQv9C+LdC00YDQtdCx0LXQvSAqL1xuICAuZ3JhZGllbnQtdmVyaWZ5QnV0dG9uIC50ZXh0LXNtIHtcbiAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGxpbmUtaGVpZ2h0OiAxcmVtO1xuICB9XG59XG5AbWVkaWEgKG1heC13aWR0aDogNTgwcHgpIHtcbiAgLnF1ZXN0aW9uIHtcbiAgICBmbGV4OiAxIDEgMTAwJTtcbiAgICBtYXgtd2lkdGg6IDEwMCU7IC8qINCy0YHRj9C60LAg0LrQsNGA0YLQsCDigJMg0YbRj9C70LAg0YjQuNGA0LjQvdCwICovXG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAvKiAuY29udGVudCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgZ2FwOiAyMHB4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB9XG5cbiAgLyogIC5ncmlkIHtcbiAgICBmbGV4OiAxO1xuICAgIG1hcmdpbi1sZWZ0OiAwOyAvKiDQv9GA0LXQvNCw0YXQstCw0LzQtSDRgtC+0LfQuCDQvNCw0YDQs9C40L0sINC30LDRidC+0YLQviDQstC10YfQtSDQutC+0LzQv9C10L3RgdC40YDQsNC80LUg0YEgY2FsYyBcbiAgICBtYXgtd2lkdGg6IGNhbGMoMTAwdncgLSAyNTZweCk7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQodmFyKC0tY29scyksIDUwcHgpO1xuICAgIGdyaWQtdGVtcGxhdGUtcm93czogcmVwZWF0KHZhcigtLXJvd3MpLCA1MHB4KTtcbiAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgIG92ZXJmbG93LXk6IGhpZGRlbjtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB9XG4gIC5jZWxsIHtcbiAgICB3aWR0aDogNTBweDtcbiAgICBoZWlnaHQ6IDUwcHg7XG4gIH0qL1xufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSBhbmQgKG1heC13aWR0aDogMTE1MHB4KSB7XG4gIC5ncmlkIHtcbiAgICBtYXgtd2lkdGg6IGNhbGMoMTAwdncgLSAyNTZweCk7XG4gICAgbWFyZ2luLWxlZnQ6IDIwcHg7XG4gIH1cbiAgLmJ1dHRvbi1ibG9jayB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICB9XG59XG4vKtGB0YLQuNC70L7QstC1INC30LAg0LzQvtC00LDQu9CwKi9cbi5tb2RhbC1vdmVybGF5IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC41KTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHotaW5kZXg6IDEwMDA7XG59XG5cbi5tb2RhbC1jb250ZW50IHtcbiAgYmFja2dyb3VuZDogd2hpdGU7XG4gIHBhZGRpbmc6IDIwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYm94LXNoYWRvdzogMCAycHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMik7XG59XG5cbi5idG4tY29uZmlybSB7XG4gIGJhY2tncm91bmQtY29sb3I6IGdyZWVuO1xuICBjb2xvcjogd2hpdGU7XG4gIHBhZGRpbmc6IDEwcHggMjBweDtcbiAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmJ0bi1jYW5jZWwge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgcGFkZGluZzogMTBweCAyMHB4O1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbi8qINC00L4g0YLRg9C6INGB0LAg0YHRgtC40LvQvtCy0LXRgtC1INC30LAg0LzQvtC00LDQu9CwKi9cbi8qINC30LAg0LfQsNC80YDQsNC30LXQvdC40YLQtSDQutC70LXRgtC60LgqL1xuLmZyb3plbi1jZWxsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzllOWU5ZSAhaW1wb3J0YW50O1xuICBjb2xvcjogYmxhY2sgIWltcG9ydGFudDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbn1cbi8q0LfQsCDQv9GD0LvRgdC40YDQsNGJ0Lgg0LHRg9GC0L7QvdC4INC/0YDQuCDQuNC30LHQvtGAINC90LAg0LbQvtC60LXRgCovXG5Aa2V5ZnJhbWVzIGJsaW5rIHtcbiAgMCUge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbiAgNTAlIHtcbiAgICBvcGFjaXR5OiAwLjU7XG4gIH1cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuLmJsaW5raW5nIHtcbiAgYW5pbWF0aW9uOiBibGluayAxLjVzIGluZmluaXRlIGVhc2UtaW4tb3V0O1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZT5cclxuICA8ZGl2IGNsYXNzPVwiY2hhdC1jb250YWluZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJvbmxpbmUtdXNlcnNcIj5cclxuICAgICAgPGg0IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYi0yXCI+0J7QvdC70LDQudC9OjwvaDQ+XHJcbiAgICAgIDx1bD5cclxuICAgICAgICA8bGkgdi1mb3I9XCIoaXNPbmxpbmUsIHVzZXJuYW1lKSBpbiBvbmxpbmVVc2Vyc1wiIDprZXk9XCJ1c2VybmFtZVwiPlxyXG4gICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgOmNsYXNzPVwieyAndGV4dC1ncmVlbi01MDAnOiBpc09ubGluZSwgJ3RleHQtZ3JheS00MDAnOiAhaXNPbmxpbmUgfVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IHVzZXJuYW1lIH19IHt7IGlzT25saW5lID8gXCLwn5+iXCIgOiBcIuKaqlwiIH19XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgPC91bD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2VzXCIgcmVmPVwiY2hhdE1lc3NhZ2VzXCI+XHJcbiAgICAgIDxkaXYgdi1mb3I9XCJtZXNzYWdlIGluIG1lc3NhZ2VzXCIgOmtleT1cIm1lc3NhZ2UuaWRcIiBjbGFzcz1cIm1lc3NhZ2VcIj5cclxuICAgICAgICA8c3BhblxyXG4gICAgICAgICAgY2xhc3M9XCJ1c2VyLXN0YXR1c1wiXHJcbiAgICAgICAgICA6Y2xhc3M9XCJ7XHJcbiAgICAgICAgICAgIG9ubGluZTogb25saW5lVXNlcnNbbWVzc2FnZS51c2VyXSxcclxuICAgICAgICAgICAgb2ZmbGluZTogIW9ubGluZVVzZXJzW21lc3NhZ2UudXNlcl0sXHJcbiAgICAgICAgICB9XCJcclxuICAgICAgICA+PC9zcGFuPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ncmF5LTQwMCB0ZXh0LXNtXCI+IHt7IG1lc3NhZ2UudGltZXN0YW1wIH19OiA8L3NwYW4+XHJcbiAgICAgICAgPHN0cm9uZz57e1xyXG4gICAgICAgICAgbWVzc2FnZS51c2VybmFtZSA/IG1lc3NhZ2UudXNlcm5hbWUudG9TdHJpbmcoKSA6IFwi0J3QtdC/0L7Qt9C90LDRglwiXHJcbiAgICAgICAgfX08L3N0cm9uZz5cclxuICAgICAgICA8IS0tINCS0YDQtdC80LXQvdC90L4g0LfQsCDQtNC10LHRitCz0LLQsNC90LUgLS0+XHJcbiAgICAgICAge3sgbWVzc2FnZS50ZXh0IH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2hhdC1pbnB1dFwiPlxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICB2LW1vZGVsPVwibmV3TWVzc2FnZVwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCLQndCw0L/QuNGI0LXRgtC1INGB0YrQvtCx0YnQtdC90LjQtS4uLlwiXHJcbiAgICAgICAgQGtleXVwLmVudGVyPVwic2VuZE1lc3NhZ2VcIlxyXG4gICAgICAvPlxyXG4gICAgICA8cCB2LWlmPVwibmV3TWVzc2FnZS5sZW5ndGggPj0gMTUwXCIgY2xhc3M9XCJ0ZXh0LXJlZC01MDAgdGV4dC1zbVwiPlxyXG4gICAgICAgIFlvdSBoYXZlIHJlYWNoZWQgdGhlIDE1MCBjaGFyYWN0ZXIgbGltaXQhXHJcbiAgICAgIDwvcD5cclxuICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJzZW5kTWVzc2FnZVwiPtCY0LfQv9GA0LDRgtC4PC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcbi8vaW1wb3J0IFN3YWwgZnJvbSBcInN3ZWV0YWxlcnQyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgcHJvcHM6IHtcclxuICAgIHRlYW1JZDogTnVtYmVyLFxyXG4gICAgcmVxdWlyZWQ6IHRydWUsXHJcbiAgfSxcclxuICBkYXRhKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbWVzc2FnZXM6IFtdLFxyXG4gICAgICBuZXdNZXNzYWdlOiBcIlwiLFxyXG4gICAgICBtZXNzYWdlQ29vbGRvd246IGZhbHNlLFxyXG4gICAgICBzZW50TWVzc2FnZXNUaW1lc3RhbXBzOiBbXSwgLy8g0KHQv9C40YHRitC6INGBINCy0YDQtdC80LXQstC4INC80LDRgNC60Lgg0LfQsCDQuNC30L/RgNCw0YLQtdC90Lgg0YHRitC+0LHRidC10L3QuNGPXHJcbiAgICAgIG9ubGluZVVzZXJzOiB7fSwgLy8g0KLRg9C6INGJ0LUg0L/QsNC30LjQvCDQutC+0Lgg0YHQsCDQvtC90LvQsNC50L1cclxuICAgIH07XHJcbiAgfSxcclxuICBjcmVhdGVkKCkge1xyXG4gICAgY29uc29sZS5sb2coXCIgVGVhbUNoYXQudnVlINC30LDRgNC10LTQtdC9INGBIHRlYW1JZDpcIiwgdGhpcy50ZWFtSWQpO1xyXG4gIH0sXHJcblxyXG4gIG1vdW50ZWQoKSB7XHJcbiAgICB0aGlzLmxvYWRNZXNzYWdlcygpO1xyXG5cclxuICAgIC8vINCh0LLRitGA0LfQstCw0L3QtSDQutGK0LwgV2ViU29ja2V0XHJcbiAgICB0aGlzLnNvY2tldCA9IG5ldyBXZWJTb2NrZXQoXHJcbiAgICAgIGB3czovL2xvY2FsaG9zdDo4MDgwP3Rva2VuPSR7bG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ3c1Rva2VuXCIpfWBcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zb2NrZXQub25vcGVuID0gKCkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhcIuKchSDQodCy0YrRgNC30LDQvSDRgdGK0YEg0YHRitGA0LLRitGA0LAg0L3QsCDRh9Cw0YLQsFwiKTtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zb2NrZXQub25tZXNzYWdlID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGV2ZW50LmRhdGEpO1xyXG4gICAgICBpZiAoZGF0YS50eXBlID09PSBcImNoYXRNZXNzYWdlXCIgJiYgZGF0YS50ZWFtSWQgPT09IHRoaXMudGVhbUlkKSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlcy5wdXNoKHtcclxuICAgICAgICAgIGlkOiBkYXRhLmlkLFxyXG4gICAgICAgICAgdXNlcm5hbWU6IGRhdGEudXNlcm5hbWUsXHJcbiAgICAgICAgICB0ZXh0OiBkYXRhLnRleHQsXHJcbiAgICAgICAgICB0aW1lc3RhbXA6IGRhdGEudGltZXN0YW1wLFxyXG4gICAgICAgICAgdXNlcklkOiBkYXRhLnVzZXJJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zb2NrZXQub25jbG9zZSA9ICgpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coXCLinYwg0KfQsNGCINGB0YrRgNCy0YrRgNGK0YIg0LUg0LfQsNGC0LLQvtGA0LXQvS5cIik7XHJcbiAgICB9O1xyXG4gICAgLyogdGhpcy5zb2NrZXQub25tZXNzYWdlID0gYXN5bmMgKGV2ZW50KSA9PiB7XHJcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gSlNPTi5wYXJzZShldmVudC5kYXRhKTtcclxuICAgICAgaWYgKHJlc3BvbnNlLnR5cGUgPT09IFwiY2hhdE1lc3NhZ2VcIikge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZXMucHVzaChPYmplY3QuYXNzaWduKHt9LCByZXNwb25zZSkpOyAvLyDQn9GA0LjQvdGD0LTQuNGC0LXQu9C90L4g0L7QsdC90L7QstGP0LLQsNC90LVcclxuICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XHJcbiAgICAgIH1cclxuICAgIH07Ki9cclxuICB9LFxyXG4gIG1ldGhvZHM6IHtcclxuICAgIGxvYWRNZXNzYWdlcygpIHtcclxuICAgICAgZmV0Y2goYC9hcGkvY2hhdC90ZWFtLyR7dGhpcy50ZWFtSWR9YClcclxuICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmpzb24oKSlcclxuICAgICAgICAudGhlbigoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlcyA9IGRhdGE7XHJcbiAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiBjb25zb2xlLmVycm9yKFwiRXJyb3IgbG9hZGluZyBtZXNzYWdlczpcIiwgZXJyb3IpKTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8g0KHQutGA0L7Qu9C40YDQsNC90LUg0LTQviDQv9C+0YHQu9C10LTQvdC+0YLQviDRgdGK0L7QsdGJ0LXQvdC40LVcclxuICAgIHNjcm9sbFRvQm90dG9tKCkge1xyXG4gICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XHJcbiAgICAgICAgdGhpcy4kcmVmcy5jaGF0TWVzc2FnZXMuc2Nyb2xsVG9wID1cclxuICAgICAgICAgIHRoaXMuJHJlZnMuY2hhdE1lc3NhZ2VzLnNjcm9sbEhlaWdodDtcclxuICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgc2VuZE1lc3NhZ2UoKSB7XHJcbiAgICAgIGlmICghdGhpcy5uZXdNZXNzYWdlLnRyaW0oKSkgcmV0dXJuOyAvLyDQndC1INC40LfQv9GA0LDRidCw0LzQtSDQv9GA0LDQt9C90Lgg0YHRitC+0LHRidC10L3QuNGPXHJcblxyXG4gICAgICBpZiAodGhpcy5uZXdNZXNzYWdlLmxlbmd0aCA+IDE1MCkge1xyXG4gICAgICAgIFN3YWwuZmlyZSh7XHJcbiAgICAgICAgICBpY29uOiBcIndhcm5pbmdcIixcclxuICAgICAgICAgIHRpdGxlOiBcItCi0LLRitGA0LTQtSDQtNGK0LvQs9C+INGB0YrQvtCx0YnQtdC90LjQtSFcIixcclxuICAgICAgICAgIHRleHQ6IFwi0JzQsNC60YHQuNC80LDQu9C90LDRgtCwINC00YrQu9C20LjQvdCwINC1IDE1MCDRgdC40LzQstC+0LvQsC5cIixcclxuICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiBcItCg0LDQt9Cx0YDQsNGFXCIsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIC8v0LLRgNC10LzQtdCy0Lgg0LzQsNGA0LrQtdGAINC30LAg0LHRgNC+0LXQvdC1INC90LAg0LHRgNC+0Lkg0YHRitC+0LHRidC10L3QuNGPINCyINC80LjQvdGD0YLQsFxyXG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xyXG4gICAgICB0aGlzLnNlbnRNZXNzYWdlc1RpbWVzdGFtcHMgPSB0aGlzLnNlbnRNZXNzYWdlc1RpbWVzdGFtcHMuZmlsdGVyKFxyXG4gICAgICAgICh0aW1lc3RhbXApID0+IG5vdyAtIHRpbWVzdGFtcCA8IDYwMDAwXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwi0LHRgNC+0Lkg0YHRitC+0LHRidC10L3QuNGPOlwiLCB0aGlzLnNlbnRNZXNzYWdlc1RpbWVzdGFtcHMpO1xyXG4gICAgICBpZiAodGhpcy5zZW50TWVzc2FnZXNUaW1lc3RhbXBzLmxlbmd0aCA+PSA2KSB7XHJcbiAgICAgICAgU3dhbC5maXJlKHtcclxuICAgICAgICAgIGljb246IFwiZXJyb3JcIixcclxuICAgICAgICAgIHRpdGxlOiBcItCU0L7RgdGC0LjQs9C90LDRgiDQtSDQu9C40LzQuNGC0YrRgiFcIixcclxuICAgICAgICAgIHRleHQ6IFwi0JzQvtC20LXRgtC1INC00LAg0LjQt9C/0YDQsNGJ0LDRgtC1INC00L4gNSDRgdGK0L7QsdGJ0LXQvdC40Y8g0L3QsCDQvNC40L3Rg9GC0LAuXCIsXHJcbiAgICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogXCLQlNC+0LHRgNC1XCIsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIXRoaXMuc29ja2V0IHx8IHRoaXMuc29ja2V0LnJlYWR5U3RhdGUgIT09IFdlYlNvY2tldC5PUEVOKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICBcIuKaoO+4jyBXZWJTb2NrZXQg0LLRgNGK0LfQutCw0YLQsCDQtSDQt9Cw0YLQstC+0YDQtdC90LAuINCf0YDQtdC30LDRgNC10LbQtNCw0L3QtSDQvdCwINGB0YLRgNCw0L3QuNGG0LDRgtCwLi4uXCJcclxuICAgICAgICApO1xyXG4gICAgICAgIGFsZXJ0KFwi4pqg77iPINCS0YDRitC30LrQsNGC0LAg0YEg0YfQsNGC0LAg0LUg0L/RgNC10LrRitGB0L3QsNGC0LAuINCh0YLRgNCw0L3QuNGG0LDRgtCwINGJ0LUg0YHQtSDQv9GA0LXQt9Cw0YDQtdC00LguXCIpO1xyXG4gICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB1c2VySWQgPSB0aGlzLmN1cnJlbnRVc2VyPy5pZCB8fCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIndzVXNlcklkXCIpO1xyXG4gICAgICBjb25zdCB1c2VybmFtZSA9XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VXNlcj8udXNlcm5hbWUgfHwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ3c1VzZXJuYW1lXCIpO1xyXG5cclxuICAgICAgaWYgKCF1c2VySWQgfHwgIXVzZXJuYW1lKSB7XHJcbiAgICAgICAgU3dhbC5maXJlKHtcclxuICAgICAgICAgIGljb246IFwiZXJyb3JcIixcclxuICAgICAgICAgIHRpdGxlOiBcItCT0YDQtdGI0LrQsCFcIixcclxuICAgICAgICAgIHRleHQ6IFwi0KHRitC+0LHRidC10L3QuNC10YLQviDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30L/RgNCw0YLQuCwg0LvQuNC/0YHQstCw0YIg0L/QvtGC0YDQtdCx0LjRgtC10LvRgdC60Lgg0LTQsNC90L3QuC5cIixcclxuICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiBcItCe0LpcIixcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgbWVzc2FnZURhdGEgPSB7XHJcbiAgICAgICAgdHlwZTogXCJjaGF0TWVzc2FnZVwiLFxyXG4gICAgICAgIHRlYW1JZDogdGhpcy50ZWFtSWQsXHJcbiAgICAgICAgdGV4dDogdGhpcy5uZXdNZXNzYWdlLFxyXG4gICAgICAgIHVzZXJJZDogbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ3c1VzZXJJZFwiKSxcclxuICAgICAgICB1c2VybmFtZTogbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ3c1VzZXJuYW1lXCIpLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgZmV0Y2goXCIvYXBpL2NoYXQvdGVhbS9zYXZlLW1lc3NhZ2VcIiwge1xyXG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIixcclxuICAgICAgICB9LFxyXG4gICAgICAgIGJvZHk6IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xyXG4gICAgICAgICAgdHlwZTogbWVzc2FnZURhdGEudHlwZSxcclxuICAgICAgICAgIHRlYW1JZDogbWVzc2FnZURhdGEudGVhbUlkLFxyXG4gICAgICAgICAgdGV4dDogbWVzc2FnZURhdGEudGV4dCxcclxuICAgICAgICAgIHVzZXJJZDogbWVzc2FnZURhdGEudXNlcklkLFxyXG4gICAgICAgICAgdXNlcm5hbWU6IG1lc3NhZ2VEYXRhLnVzZXJuYW1lLFxyXG4gICAgICAgIH0pLFxyXG4gICAgICB9KVxyXG4gICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MjkpIHtcclxuICAgICAgICAgICAgICAvLyDinZcg0JvQuNC80LjRgiDQvdCwINGB0YrQvtCx0YnQtdC90LjRj9GC0LBcclxuICAgICAgICAgICAgICBTd2FsLmZpcmUoe1xyXG4gICAgICAgICAgICAgICAgaWNvbjogXCJlcnJvclwiLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6IFwi0KLQstGK0YDQtNC1INC80L3QvtCz0L4g0YHRitC+0LHRidC10L3QuNGPIVwiLFxyXG4gICAgICAgICAgICAgICAgdGV4dDogXCLQmNC30YfQsNC60LDQudGC0LUg0LzQsNC70LrQviDQv9GA0LXQtNC4INC00LAg0LjQt9C/0YDQsNGC0LjRgtC1INC90L7QstC+INGB0YrQvtCx0YnQtdC90LjQtS5cIixcclxuICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiBcItCU0L7QsdGA0LVcIixcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBTd2FsLmZpcmUoe1xyXG4gICAgICAgICAgICAgICAgaWNvbjogXCJlcnJvclwiLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6IFwi0JPRgNC10YjQutCwIVwiLFxyXG4gICAgICAgICAgICAgICAgdGV4dDogXCLQktGK0LfQvdC40LrQvdCwINC/0YDQvtCx0LvQtdC8INC/0YDQuCDQuNC30L/RgNCw0YnQsNC90LXRgtC+INC90LAg0YHRitC+0LHRidC10L3QuNC10YLQvi5cIixcclxuICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiBcItCe0LpcIixcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLQk9GA0LXRiNC60LAg0L/RgNC4INC40LfQv9GA0LDRidCw0L3QtSDQvdCwINGB0YrQvtCx0YnQtdC90LjQtdGC0L5cIik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnRoZW4oKHNhdmVkTWVzc2FnZSkgPT4ge1xyXG4gICAgICAgICAgLy8g8J+UuSDQodC70LXQtCDQutCw0YLQviDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC1INC30LDQv9C40YHQsNC90L4g0YPRgdC/0LXRiNC90L4sINC/0YDQsNGJ0LDQvNC1INCz0L4g0YfRgNC10LcgV2ViU29ja2V0XHJcbiAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKFxyXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgICAgdHlwZTogXCJjaGF0TWVzc2FnZVwiLFxyXG4gICAgICAgICAgICAgIHRlYW1JZDogc2F2ZWRNZXNzYWdlLnRlYW1JZCxcclxuICAgICAgICAgICAgICB1c2VySWQ6IHNhdmVkTWVzc2FnZS51c2VySWQsXHJcbiAgICAgICAgICAgICAgdXNlcm5hbWU6IHNhdmVkTWVzc2FnZS51c2VybmFtZSxcclxuICAgICAgICAgICAgICB0ZXh0OiBzYXZlZE1lc3NhZ2UudGV4dCxcclxuICAgICAgICAgICAgICB0aW1lc3RhbXA6IHNhdmVkTWVzc2FnZS50aW1lc3RhbXAsXHJcbiAgICAgICAgICAgICAgaWQ6IHNhdmVkTWVzc2FnZS5pZCxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgdGhpcy5uZXdNZXNzYWdlID0gXCJcIjtcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcbiAgICAvL9C80LXRgtC+0LQg0LfQsCDQv9C+0LrQsNC30LLQsNC90LUg0L3QsCDRgdGK0L7QsdGJ0LXQvdC40LUg0LIg0LjQt9GB0LrQsNGH0LDRiSDQv9GA0L7Qt9C+0YDQtdGGLtCf0L7QtNCw0LLQsNC80LUgdHlwZSx0aXRsZSx0ZXh0XHJcbiAgICAvKiBzaG93TWVzc2FnZSh0eXBlLCB0aXRsZSwgdGV4dCkge1xyXG4gICAgICBTd2FsLmZpcmUoe1xyXG4gICAgICAgIGljb246IHR5cGUsXHJcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxyXG4gICAgICAgIHRleHQ6IHRleHQsXHJcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IFwi0J7QmlwiLFxyXG4gICAgICB9KTtcclxuICAgIH0sKi9cclxuICB9LFxyXG59O1xyXG48L3NjcmlwdD5cclxuXHJcbjxzdHlsZSBzY29wZWQ+XHJcbi5jaGF0LWNvbnRhaW5lciB7XHJcbiAgbWF4LWhlaWdodDogMzAwcHg7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG59XHJcbi5tZXNzYWdlcyB7XHJcbiAgb3ZlcmZsb3cteTogYXV0bztcclxuICBtYXgtaGVpZ2h0OiAyNTBweDtcclxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgZ3JheTtcclxuICBwYWRkaW5nOiA1cHg7XHJcbn1cclxuLm1lc3NhZ2Uge1xyXG4gIG1hcmdpbi1ib3R0b206IDVweDtcclxufVxyXG4uY2hhdC1pbnB1dCB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBnYXA6IDVweDtcclxufVxyXG4uY2hhdC1pbnB1dCBpbnB1dCB7XHJcbiAgZmxleC1ncm93OiAxO1xyXG4gIHBhZGRpbmc6IDVweDtcclxuICBjb2xvcjogYmxhY2s7XHJcbiAgYm9yZGVyOiAxcHggc29saWQgZ3JheTtcclxufVxyXG4uY2hhdC1pbnB1dCBidXR0b24ge1xyXG4gIGJhY2tncm91bmQ6ICMxZTQwYWY7XHJcbiAgY29sb3I6IHJnYigxMiwgMTIsIDEyKTtcclxuICBwYWRkaW5nOiA1cHggMTBweDtcclxuICBib3JkZXI6IG5vbmU7XHJcbiAgY3Vyc29yOiBwb2ludGVyO1xyXG59XHJcbi51c2VyLXN0YXR1cyB7XHJcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gIHdpZHRoOiAxMHB4O1xyXG4gIGhlaWdodDogMTBweDtcclxuICBib3JkZXItcmFkaXVzOiA1MCU7XHJcbiAgbWFyZ2luLXJpZ2h0OiA1cHg7XHJcbn1cclxuXHJcbi5vbmxpbmUge1xyXG4gIGJhY2tncm91bmQtY29sb3I6IGdyZWVuO1xyXG59XHJcblxyXG4ub2ZmbGluZSB7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogcmVkO1xyXG59XHJcbjwvc3R5bGU+XHJcbiIsIjx0ZW1wbGF0ZT5cclxuICA8YXVkaW8gcmVmPVwic3VjY2Vzc1NvdW5kXCIgc3JjPVwiL3NvdW5kcy9zdWNjZXNzLndhdlwiPjwvYXVkaW8+XHJcbiAgPGRpdiBjbGFzcz1cImNyb3Nzd29yZC1yZW5kZXJlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cclxuICAgICAgPCEtLSDQktGK0L/RgNC+0YHQuNGC0LUgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJxdWVzdGlvbnNcIj5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICB2LWZvcj1cIml0ZW0gaW4gY3Jvc3N3b3JkRGF0YVwiXHJcbiAgICAgICAgICA6a2V5PVwiaXRlbS5udW1iZXJRdWVzdGlvblwiXHJcbiAgICAgICAgICBjbGFzcz1cInF1ZXN0aW9uXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8cCBjbGFzcz1cInF1ZXN0aW9uLW51bWJlclwiPtCS0YrQv9GA0L7RgSDihJZ7eyBpdGVtLm51bWJlclF1ZXN0aW9uIH19PC9wPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJxdWVzdGlvbi10ZXh0XCI+e3sgaXRlbS5xdWVzdGlvbiB9fTwvcD5cclxuICAgICAgICAgIDwhLS0g0J/RgNC+0LLQtdGA0LrQsCDQtNCw0LvQuCDQuNC80LAgYXR0YWNobWVudCDQuCDQv9C+0LrQsNC30LLQsNC90LUg0L3QsCDQuNC30L7QsdGA0LDQttC10L3QuNC10YLQviAtLT5cclxuICAgICAgICAgIDxkaXYgdi1pZj1cIml0ZW0uYXR0YWNobWVudFwiPlxyXG4gICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgOnNyYz1cIml0ZW0uYXR0YWNobWVudFwiXHJcbiAgICAgICAgICAgICAgYWx0PVwi0JjQu9GO0YHRgtGA0LDRhtC40Y8g0LfQsCDQstGK0L/RgNC+0YHQsFwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJxdWVzdGlvbi1pbWFnZVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tINCa0YDRitGB0YLQvtGB0LvQvtCy0LjRhtCw0YLQsCAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImdyaWQtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIiA6c3R5bGU9XCJ7ICctLXJvd3MnOiByb3dzLCAnLS1jb2xzJzogY29scyB9XCI+XHJcbiAgICAgICAgICA8dGVtcGxhdGVcclxuICAgICAgICAgICAgdi1mb3I9XCJyb3cgaW4gcmFuZ2UoZ3JpZERpbWVuc2lvbnMubWluUm93LCBncmlkRGltZW5zaW9ucy5tYXhSb3cpXCJcclxuICAgICAgICAgICAgOmtleT1cIidyb3ctJyArIHJvd1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicm93XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIHYtZm9yPVwiY29sIGluIGNvbHNcIlxyXG4gICAgICAgICAgICAgIDprZXk9XCInY2VsbC0nICsgcm93ICsgJy0nICsgY29sXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImNlbGxcIlxyXG4gICAgICAgICAgICAgIDpjbGFzcz1cIntcclxuICAgICAgICAgICAgICAgIGFjdGl2ZTogZ3JpZERhdGFbYCR7cm93fS0ke2NvbH1gXSAhPT0gdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgYW5pbWF0ZTogaXNTb2x2ZWQgJiYgISFncmlkRGF0YVtgJHtyb3d9LSR7Y29sfWBdLFxyXG4gICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPCEtLSDQkNC60L4g0LrQu9C10YLQutCw0YLQsCDQtSDQvdCw0YfQsNC70L3QsCwg0L/QvtC60LDQt9Cy0LDQvNC1INC90L7QvNC10YDQsCAtLT5cclxuICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgdi1pZj1cImdyaWREYXRhW2Ake3Jvd30tJHtjb2x9YF0/Lm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNlbGwtbnVtYmVyXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyBncmlkRGF0YVtgJHtyb3d9LSR7Y29sfWBdLm51bWJlciB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICB2LWlmPVwiZ3JpZERhdGFbYCR7cm93fS0ke2NvbH1gXSAhPT0gdW5kZWZpbmVkXCJcclxuICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJncmlkRGF0YVtgJHtyb3d9LSR7Y29sfWBdLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgIDpkYXRhLWNvb3JkaW5hdGVzPVwiYCR7cm93fS0ke2NvbH1gXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2VsbC1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XCJ7XHJcbiAgICAgICAgICAgICAgICAgIGFuaW1hdGU6IGlzU29sdmVkLFxyXG4gICAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogZ3JpZERhdGFbYCR7cm93fS0ke2NvbH1gXS5oaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgICAgYmxpbms6IGdyaWREYXRhW2Ake3Jvd30tJHtjb2x9YF0uYmxpbmssXHJcbiAgICAgICAgICAgICAgICAgICdmcm96ZW4tY2VsbCc6IGlzQ2VsbEZyb3plbihgJHtyb3d9LSR7Y29sfWApLFxyXG4gICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxXCJcclxuICAgICAgICAgICAgICAgIEBmb2N1cz1cImFjdGl2ZUNlbGwgPSBgJHtyb3d9LSR7Y29sfWBcIlxyXG4gICAgICAgICAgICAgICAgQGlucHV0PVwiXHJcbiAgICAgICAgICAgICAgICAgIHVwZGF0ZUNlbGwoYCR7cm93fS0ke2NvbH1gLCAkZXZlbnQudGFyZ2V0LnZhbHVlLnRvVXBwZXJDYXNlKCkpXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiaXNDZWxsRnJvemVuKGAke3Jvd30tJHtjb2x9YClcIlxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tINCe0LHQtdC00LjQvdC10L0g0LHQu9C+0Log0LfQsCDQttC+0LrQtdGA0LAg0Lgg0LHRg9GC0L7QvdC40YLQtSAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgc3BhY2UteS00IGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgIDwhLS3QkdC70L7QuiDQt9CwINCy0LXRgNC40YTQuNC60LDRhtC40Y8gLS0+XHJcbiAgICAgICAgPGRpdiB2LWlmPVwibW9kZSA9PT0gJ0InXCIgY2xhc3M9XCJ3LWZ1bGwgZmxleCBmbGV4LWNvbCBzcGFjZS15LTRcIj5cclxuICAgICAgICAgIDwhLS0g0KbQuNC60YrQuyDQt9CwINGA0LXQvdC00LjRgNCw0L3QtSDQvdCwINCx0YPRgtC+0L3QuNGC0LUgLS0+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIHYtZm9yPVwiaXRlbSBpbiBjcm9zc3dvcmREYXRhXCJcclxuICAgICAgICAgICAgOmtleT1cIml0ZW0ubnVtYmVyUXVlc3Rpb25cIlxyXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwhLS0g0JHRg9GC0L7QvSDQt9CwINC40LfQv9GA0LDRidCw0L3QtSDQvdCwINC+0YLQs9C+0LLQvtGAIC0tPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3VibWl0QW5zd2VyKGl0ZW0ubnVtYmVyUXVlc3Rpb24pXCJcclxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJpdGVtLnBvaW50cyA+IDAgJiYgaXRlbS52ZXJpZmllZCA9PSBpdGVtLmFuc3dlclwiXHJcbiAgICAgICAgICAgICAgOmNsYXNzPVwie1xyXG4gICAgICAgICAgICAgICAgJ2JnLWdyYXktNDAwIGN1cnNvci1ub3QtYWxsb3dlZCc6XHJcbiAgICAgICAgICAgICAgICAgIGl0ZW0ucG9pbnRzID4gMCAmJiBpdGVtLnZlcmlmaWVkID09IGl0ZW0uYW5zd2VyLFxyXG4gICAgICAgICAgICAgICAgJ2JnLWdyZWVuLTUwMCB0ZXh0LXdoaXRlIHB4LTQgcHktMiByb3VuZGVkIGhvdmVyOmJnLWdyZWVuLTcwMCc6XHJcbiAgICAgICAgICAgICAgICAgICFpdGVtLnZlcmlmaWVkIHx8XHJcbiAgICAgICAgICAgICAgICAgIGl0ZW0ucG9pbnRzID09IDAgfHxcclxuICAgICAgICAgICAgICAgICAgKGl0ZW0ucG9pbnRzID4gMCAmJiBpdGVtLnZlcmlmaWVkICE9IGl0ZW0uYW5zd2VyKSxcclxuICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICBjbGFzcz1cInJlbGF0aXZlIGdyb3VwXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuPiDQmNC30L/RgNCw0YLQuCDQvtGC0LPQvtCy0L7RgCB7eyBpdGVtLm51bWJlclF1ZXN0aW9uIH19IDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICA8c3Bhbj4g0J/QvtGB0LvQtdC00L3QviDQuNC30L/RgNCw0YLQtdC9Ont7IGl0ZW0uYW5zd2VyIH19IDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICA8IS0tINCR0YPRgtC+0L0g0LfQsCDQstC10YDQuNGE0LjQutCw0YbQuNGPIC0tPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgQGNsaWNrPVwidmVyaWZ5QW5zd2VyKGl0ZW0ubnVtYmVyUXVlc3Rpb24pXCJcclxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJpdGVtLnZlcmlmaWVkXCJcclxuICAgICAgICAgICAgICA6Y2xhc3M9XCJ7XHJcbiAgICAgICAgICAgICAgICAnYmctZ3JheS00MDAgY3Vyc29yLW5vdC1hbGxvd2VkJzogaXRlbS52ZXJpZmllZCxcclxuICAgICAgICAgICAgICAgICdiZy1ibHVlLTUwMCB0ZXh0LXdoaXRlIHB4LTQgcHktMiByb3VuZGVkIGhvdmVyOmJnLWJsdWUtNzAwJzpcclxuICAgICAgICAgICAgICAgICAgIWl0ZW0udmVyaWZpZWQsXHJcbiAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJyZWxhdGl2ZSBncm91cFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwiIWl0ZW0udmVyaWZpZWRcIj5cclxuICAgICAgICAgICAgICAgINCS0LXRgNC40YTQuNGG0LjRgNCw0Lkg0L7RgtCz0L7QstC+0YAge3sgaXRlbS5udW1iZXJRdWVzdGlvbiB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiB2LWVsc2U+XHJcbiAgICAgICAgICAgICAgICDQktC10YDQuNGE0LjQutCw0YbQuNGP0YLQsCDQtSDQuNC30L/QvtC70LfQstCw0L3QsCA8YnIgLz57eyBpdGVtLnZlcmlmaWVkIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0g0JHQu9C+0Log0LfQsCDQttC+0LrQtdGA0LAgLS0+XHJcblxyXG4gICAgICAgIDxkaXYgdi1lbHNlIGNsYXNzPVwidy1mdWxsIGZsZXggZmxleC1jb2wgc3BhY2UteS00XCI+XHJcbiAgICAgICAgICA8Y3Jvc3N3b3JkLWpva2VyXHJcbiAgICAgICAgICAgIHJlZj1cImpva2VyXCJcclxuICAgICAgICAgICAgOmNyb3Nzd29yZC1pZD1cIk51bWJlcihjcm9zc3dvcmRJZClcIlxyXG4gICAgICAgICAgICA6Z3JpZC1kYXRhPVwiZ3JpZERhdGFcIlxyXG4gICAgICAgICAgICBAcmV2ZWFsLWxldHRlcnM9XCJoYW5kbGVSZXZlYWxMZXR0ZXJzXCJcclxuICAgICAgICAgICAgQHNob3ctbWF0Y2hpbmctbGV0dGVycz1cImhhbmRsZU1hdGNoaW5nTGV0dGVyc0pva2VyXCJcclxuICAgICAgICAgICAgQHNob3ctbWVzc2FnZT1cImRpc3BsYXlNZXNzYWdlXCJcclxuICAgICAgICAgID48L2Nyb3Nzd29yZC1qb2tlcj5cclxuICAgICAgICAgIDwhLS0g0J/QvtC60LDQt9Cy0LDQvNC1INGB0YrQvtCx0YnQtdC90LjQtdGC0L4gLS0+XHJcbiAgICAgICAgICA8ZGl2IHYtaWY9XCJqb2tlck1lc3NhZ2VcIiBjbGFzcz1cImFsZXJ0LW1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgPHA+e3sgam9rZXJNZXNzYWdlIH19PC9wPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8IS0tIFwicmVxdWVzdEpva2VyXCIgLS0+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBAY2xpY2s9XCJ0b2dnbGVKb2tlck9wdGlvbnNcIlxyXG4gICAgICAgICAgICA6ZGlzYWJsZWQ9XCJtb2RlID09PSAnZGVtbydcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInB4LTMgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtY2VudGVyIHRleHQtd2hpdGUgYmctYmx1ZS03MDAgcm91bmRlZC1sZyBob3ZlcjpiZy1ibHVlLTgwMCBmb2N1czpyaW5nLTQgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctYmx1ZS0zMDAgZGFyazpiZy1ibHVlLTYwMCBkYXJrOmhvdmVyOmJnLWJsdWUtNzAwIGRhcms6Zm9jdXM6cmluZy1ibHVlLTgwMFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgINCW0L7QutC10YAg0LLQtdGA0YLQuNC60LDQu9C90LAg0LTRg9C80LBcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgIDwhLS0g0J/QvtC60LDQt9Cy0LDQvdC1INC90LAg0L7Qv9GG0LjRj9GC0LAg0LfQsCDQuNC30LHQvtGAINC90LAg0LLRitC/0YDQvtGBINC30LAg0LbQvtC60LXRgCAtLT5cclxuICAgICAgICAgIDxkaXYgdi1pZj1cInNob3dKb2tlck9wdGlvbnNcIiBjbGFzcz1cImpva2VyLW9wdGlvbnMgbXQtNFwiPlxyXG4gICAgICAgICAgICA8cD7QmNC30LHQtdGA0Lgg0LfQsCDQutC+0Lkg0L3QvtC80LXRgCDQstGK0L/RgNC+0YEg0LjRgdC60LDRiCDQttC+0LrQtdGAOjwvcD5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgIDwhLS0g0JjQt9Cx0YDQvtGP0LLQsNC90LUg0L3QsCDQstC10YDRgtC40LrQsNC70L3QuNGC0LUg0LLRitC/0YDQvtGB0LggLS0+XHJcbiAgICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgICB2LWZvcj1cIihxdWVzdGlvbiwgaW5kZXgpIGluIHZlcnRpY2FsUXVlc3Rpb25zXCJcclxuICAgICAgICAgICAgICAgIDprZXk9XCJpbmRleFwiXHJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3RRdWVzdGlvbkZvckpva2VyKHF1ZXN0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIGhvdmVyOmJnLWdyYXktMjAwIHAtMiByb3VuZGVkXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICDQktGK0L/RgNC+0YEge3sgcXVlc3Rpb24ubnVtYmVyIH19XHJcbiAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPCEtLSDQkdGD0YLQvtC90YrRgiDRidC1INGB0LUg0L/QvtC60LDQt9Cy0LAg0YHQsNC80L4g0LDQutC+INGA0LXQttC40LzRitGCINC90LUg0LUgZGVtbyAtLT5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgQGNsaWNrPVwidXNlTWF0Y2hpbmdMZXR0ZXJzSm9rZXJcIlxyXG4gICAgICAgICAgICA6ZGlzYWJsZWQ9XCJtb2RlID09PSAnZGVtbydcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInB4LTMgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtY2VudGVyIHRleHQtd2hpdGUgYmctYmx1ZS03MDAgcm91bmRlZC1sZyBob3ZlcjpiZy1ibHVlLTgwMCBmb2N1czpyaW5nLTQgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctYmx1ZS0zMDAgZGFyazpiZy1ibHVlLTYwMCBkYXJrOmhvdmVyOmJnLWJsdWUtNzAwIGRhcms6Zm9jdXM6cmluZy1ibHVlLTgwMFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgINCW0L7QutC10YAg0YHRitCy0L/QsNC00LDRidC4INCx0YPQutCy0LhcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPCEtLSDQn9C+0LrQsNC30LLQsNC80LUg0YHRitC+0LHRidC10L3QuNC1LCDQutC+0LPQsNGC0L4g0LHRg9GC0L7QvdGK0YIg0LUg0LTQtdCw0LrRgtC40LLQuNGA0LDQvSAtLT5cclxuICAgICAgICAgIDxwIHYtaWY9XCJtb2RlID09PSAnZGVtbydcIiBjbGFzcz1cInRleHQtc20gdGV4dC1yZWQtNTAwIG10LTJcIj5cclxuICAgICAgICAgICAg0JbQvtC60LXRgNC40YLQtSDRgdCwINC00L7RgdGC0YrQv9C90Lgg0YHQsNC80L4g0LfQsCDRgNC10LPQuNGB0YLRgNC40YDQsNC90Lgg0L/QvtGC0YDQtdCx0LjRgtC10LvQuCFcclxuICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSDQkdC70L7QuiDQt9CwINC00LXQudGB0YLQstC40LUg0YEg0LHRg9GC0L7QvdCwINC30LAg0L/RgNC+0LLQtdGA0LrQsCAtLT5cclxuICAgICAgICA8ZGl2IHYtaWY9XCJtb2RlICE9PSAnQidcIiBjbGFzcz1cInctZnVsbCBmbGV4IGZsZXgtY29sIHNwYWNlLXktNFwiPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBAY2xpY2s9XCJoYW5kbGVCdXR0b25DbGlja1wiXHJcbiAgICAgICAgICAgIDpjbGFzcz1cIltcclxuICAgICAgICAgICAgICBpc0Nyb3Nzd29yZFN1Ym1pdHRlZFxyXG4gICAgICAgICAgICAgICAgPyAnYmctZ3JheS00MDAgY3Vyc29yLW5vdC1hbGxvd2VkJ1xyXG4gICAgICAgICAgICAgICAgOiBidXR0b25TdHlsZSxcclxuICAgICAgICAgICAgICAndGV4dC13aGl0ZSBmb250LW1lZGl1bSByb3VuZGVkLWxnIHRleHQtc20gcHgtNSBweS0yLjUgbWUtMiBtYi0yJyxcclxuICAgICAgICAgICAgXVwiXHJcbiAgICAgICAgICAgIDpkaXNhYmxlZD1cImlzQ3Jvc3N3b3JkU3VibWl0dGVkXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3sgYnV0dG9uTGFiZWwgfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPENyb3Nzd29yZEZlZWRiYWNrXHJcbiAgICAgICAgICAgIHYtaWY9XCJmZWVkYmFja1wiXHJcbiAgICAgICAgICAgIDpzdGF0dXM9XCJmZWVkYmFjay5zdGF0dXNcIlxyXG4gICAgICAgICAgICA6bWVzc2FnZT1cImZlZWRiYWNrLm1lc3NhZ2VcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tINCc0L7QtNCw0Lsg0LfQsCDQv9C+0YLQstGK0YDQttC00LXQvdC40LUgLS0+XHJcbiAgICAgICAgPGRpdiB2LWlmPVwic2hvd0NvbmZpcm1hdGlvblwiIGNsYXNzPVwibW9kYWwtb3ZlcmxheVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPGgzPtCh0LjQs9GD0YDQvdC4INC70Lgg0YHRgtC1LCDRh9C1INC40YHQutCw0YLQtSDQtNCwINC40LfQv9GA0LDRgtC40YLQtSDQutGA0YrRgdGC0L7RgdC70L7QstC40YbQsNGC0LA/PC9oMz5cclxuICAgICAgICAgICAgPHA+0KHQu9C10LQg0LjQt9C/0YDQsNGJ0LDQvdC10YLQviDQvdGP0LzQsCDQtNCwINC80L7QttC10YLQtSDQtNCwINC/0YDQsNCy0LjRgtC1INC/0YDQvtC80LXQvdC4LjwvcD5cclxuICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJjb25maXJtU3VibWlzc2lvblwiIGNsYXNzPVwiYnRuLWNvbmZpcm1cIj5cclxuICAgICAgICAgICAgICDQlNCwLCDQuNC30L/RgNCw0YLQuFxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJjYW5jZWxTdWJtaXNzaW9uXCIgY2xhc3M9XCJidG4tY2FuY2VsXCI+0J7RgtC60LDQttC4PC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQ+XHJcbmltcG9ydCBDcm9zc3dvcmRGZWVkYmFjayBmcm9tIFwiLi9Dcm9zc3dvcmRGZWVkYmFjay52dWVcIjtcclxuaW1wb3J0IGNvbmZldHRpIGZyb20gXCJjYW52YXMtY29uZmV0dGlcIjtcclxuaW1wb3J0IENyb3Nzd29yZEpva2VyIGZyb20gXCIuL0Nyb3Nzd29yZEpva2VyLnZ1ZVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIHByb3BzOiB7XHJcbiAgICBjcm9zc3dvcmREYXRhOiB7XHJcbiAgICAgIHR5cGU6IEFycmF5LFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgIH0sXHJcbiAgICBjcm9zc3dvcmRJZDoge1xyXG4gICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLCAvLyDQlNC+0L/Rg9GB0LrQsNC80LUg0L3QuNC3INC40LvQuCDRh9C40YHQu9C+XHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgfSxcclxuICAgIGdyaWREaW1lbnNpb25zOiB7XHJcbiAgICAgIHR5cGU6IE9iamVjdCxcclxuICAgICAgcmVxdWlyZWQ6IHRydWUsXHJcbiAgICB9LFxyXG4gICAgbW9kZToge1xyXG4gICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgfSxcclxuXHJcbiAgICBzdWJtaXR0ZWREYXRhOiB7XHJcbiAgICAgIHR5cGU6IE9iamVjdCxcclxuICAgICAgcmVxdWlyZWQ6IHRydWUsXHJcbiAgICB9LFxyXG4gIH0sXHJcbiAgY29tcG9uZW50czoge1xyXG4gICAgQ3Jvc3N3b3JkRmVlZGJhY2ssXHJcbiAgICBDcm9zc3dvcmRKb2tlcixcclxuICB9LFxyXG4gIGRhdGEoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzaG93QW5zd2VyOiBmYWxzZSwgLy8g0JrQvtC90YLRgNC+0Lsg0LTQsNC70Lgg0LTQsCDRgdC1INC/0L7QutCw0LbQsNGCINC+0YLQs9C+0LLQvtGA0LjRgtC1XHJcbiAgICAgIGdyaWREYXRhOiB7fSwgLy8g0JTQuNC90LDQvNC40YfQvdC4INC00LDQvdC90Lgg0LfQsCDQutC70LXRgtC60LjRgtC1XHJcbiAgICAgIGFjdGl2ZUNlbGw6IG51bGwsXHJcbiAgICAgIGZlZWRiYWNrOiBudWxsLFxyXG4gICAgICBpc1NvbHZlZDogZmFsc2UsIC8vINCU0LXRhNC40L3QuNGA0LDQvNC1INCz0L4g0L/QviDQv9C+0LTRgNCw0LfQsdC40YDQsNC90LVcclxuICAgICAgc3RhdHVzOiBudWxsLCAvLyDQl9Cw0L/QsNC30LLQsCDRgtC10LrRg9GJ0LjRjyDRgdGC0LDRgtGD0YEgKHN1Y2Nlc3Mg0LjQu9C4IGVycm9yKVxyXG4gICAgICBtZXNzYWdlOiBcIlwiLFxyXG4gICAgICBidXR0b25MYWJlbDogXCLQn9GA0L7QstC10YDQutCwXCIsIC8vINCi0LXQutGD0YnQuNGP0YIg0YLQtdC60YHRgiDQvdCwINCx0YPRgtC+0L3QsFxyXG4gICAgICBidXR0b25TdHlsZTogXCJiZy1ibHVlLTcwMCBob3ZlcjpiZy1ibHVlLTgwMFwiLCAvLyDQotC10LrRg9GJ0LjRj9GCINGB0YLQuNC7INC90LAg0LHRg9GC0L7QvdCwXHJcbiAgICAgIGpva2VyTWVzc2FnZTogXCJcIiwgLy8g0J/RgNC+0LzQtdC90LvQuNCy0LAg0LfQsCDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+XHJcbiAgICAgIHNob3dKb2tlck9wdGlvbnM6IGZhbHNlLCAvLyDQn9C+0LrQsNC30LLQsNC80LUv0YHQutGA0LjQstCw0LzQtSDQvtC/0YbQuNGP0YLQsCDQt9CwINC40LfQsdC+0YAg0L3QsCDQstGK0L/RgNC+0YFcclxuICAgICAgdmVydGljYWxRdWVzdGlvbnM6IFtdLCAvLyDQnNCw0YHQuNCyINGBINCy0LXRgNGC0LjQutCw0LvQvdC40YLQtSDQstGK0L/RgNC+0YHQuFxyXG4gICAgICBzZWxlY3RlZFF1ZXN0aW9uOiBudWxsLCAvLyDQmNC30LHRgNCw0L0g0LLRitC/0YDQvtGBINC30LAg0LbQvtC60LXRgFxyXG4gICAgICBhbnN3ZXI6IG51bGwsXHJcbiAgICAgIGlzU3VibWl0dGVkOiBmYWxzZSwgLy8g0JzQsNGA0LrQuNGA0LAg0LTQsNC70Lgg0LrRgNGK0YHRgtC+0YHQu9C+0LLQuNGG0LDRgtCwINC1INC40LfQv9GA0LDRgtC10L3QsFxyXG4gICAgICBzaG93Q29uZmlybWF0aW9uOiBmYWxzZSwgLy8g0JrQvtC90YLRgNC+0LvQuNGA0LAg0LLQuNC00LjQvNC+0YHRgtGC0LAg0L3QsCDQvNC+0LTQsNC70LBcclxuICAgICAgY3VycmVudERpcmVjdGlvbjogXCJob3Jpem9udGFsXCIsIC8vINCh0YLQsNC90LTQsNGA0YLQvdCwINC/0L7RgdC+0LrQsFxyXG4gICAgICBvcmlnaW5hbEdyaWREYXRhOiB7fSxcclxuICAgIH07XHJcbiAgfSxcclxuICBjcmVhdGVkKCkge1xyXG4gICAgY29uc29sZS5sb2coXCLQn9GA0L7Qv9GB0L7QstC10YLQtSDRgdCwOlwiLCB0aGlzLmdyaWREYXRhKTsgLy8g0JLQtdC00L3QsNCz0LAg0L3QsNC70LjRh9C90LhcclxuICAgIGNvbnNvbGUubG9nKFwiQ3Jvc3N3b3JkRGF0YTpcIiwgdGhpcy5jcm9zc3dvcmREYXRhKTtcclxuICAgIGNvbnNvbGUubG9nKFwiU3VibWl0dGVkRGF0YTpcIiwgdGhpcy5zdWJtaXR0ZWREYXRhKTtcclxuICAgIGNvbnNvbGUubG9nKFwiR3JpZERpbWVuc2lvbnNcIiwgdGhpcy5ncmlkRGltZW5zaW9ucyk7XHJcbiAgICBjb25zb2xlLmxvZyhcIm1vZGU6XCIsIHRoaXMubW9kZSk7XHJcbiAgICBjb25zb2xlLmxvZyhcInBvaW50c1wiLCB0aGlzLnBvaW50cyk7XHJcbiAgICAvLyDQn9C+0LTQs9C+0YLQstGP0LzQtSBncmlkRGF0YSDRgSDQsNC60YLQuNCy0L3QuCDQutC70LXRgtC60LhcclxuICAgIHRoaXMuY3Jvc3N3b3JkRGF0YS5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0uY29vcmRpbmF0ZXMuZm9yRWFjaCgoY29vcmQpID0+IHtcclxuICAgICAgICAvLyDQmNC90LjRhtC40LDQu9C40LfQuNGA0LDQvNC1INC60LvQtdGC0LrQsNGC0LAg0YEg0L/RgNCw0LfQvdC+INC/0L7Qu9C1INC30LAg0YHRgtC+0LnQvdC+0YHRglxyXG4gICAgICAgIGlmICghdGhpcy5ncmlkRGF0YVtjb29yZF0pIHtcclxuICAgICAgICAgIHRoaXMuZ3JpZERhdGFbY29vcmRdID0geyB2YWx1ZTogXCJcIiwgbnVtYmVyOiBudWxsIH07IC8vINCf0L4g0L/QvtC00YDQsNC30LHQuNGA0LDQvdC1INC90Y/QvNCwINC90L7QvNC10YBcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYW5zd2VyID0gaXRlbS5hbnN3ZXI7IC8vINCe0YLQs9C+0LLQvtGA0YrRgiDQutCw0YLQviDQvdC40LcgKNC90LDQv9GA0LjQvNC10YAgXCLQodCe0KTQmNCvXCIpXHJcbiAgICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPSBpdGVtLmNvb3JkaW5hdGVzOyAvLyDQmtC+0L7RgNC00LjQvdCw0YLQuNGC0LUg0L3QsCDQstGK0L/RgNC+0YHQsCAo0L3QsNC/0YDQuNC80LXRgCBbXCIyLTFcIiwgXCIyLTJcIiwgXCIyLTNcIiwgXCIyLTRcIiwgXCIyLTVcIl0pXHJcblxyXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnN1Ym1pdHRlZERhdGEpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuc3VibWl0dGVkRGF0YSkuZm9yRWFjaCgoY29vcmQpID0+IHtcclxuICAgICAgICAgICAgLy8g0JLQt9C10LzQsNC80LUg0YHRgtC+0LnQvdC+0YHRgtGC0LAg0L7RgiBzdWJtaXR0ZWREYXRhXHJcbiAgICAgICAgICAgIGNvbnN0IHN1Ym1pdHRlZFZhbHVlID0gdGhpcy5zdWJtaXR0ZWREYXRhW2Nvb3JkXT8udmFsdWU7IC8vINCf0YDQvtCy0LXRgNGP0LLQsNC80LUg0LTQsNC70Lgg0LjQvNCwIGB2YWx1ZWBcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhg0JrQvtC+0YDQtNC40L3QsNGC0LA6ICR7Y29vcmR9LCDQodGC0L7QudC90L7RgdGCOiAke3N1Ym1pdHRlZFZhbHVlfWApO1xyXG4gICAgICAgICAgICAvLyDQn9GA0L7QstC10YDRj9Cy0LDQvNC1INC00LDQu9C4INC60L7QvtGA0LTQuNC90LDRgtCw0YLQsCDRgdGK0YnQtdGB0YLQstGD0LLQsCDQsiBncmlkRGF0YVxyXG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkRGF0YVtjb29yZF0pIHtcclxuICAgICAgICAgICAgICAvLyDQn9C+0YHRgtCw0LLRj9C80LUg0YHRgtC+0LnQvdC+0YHRgtGC0LAg0L7RgiBzdWJtaXR0ZWREYXRhINCyIGdyaWREYXRhXHJcbiAgICAgICAgICAgICAgdGhpcy5ncmlkRGF0YVtjb29yZF0udmFsdWUgPSBzdWJtaXR0ZWRWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vINCf0YDQvtCy0LXRgNGP0LLQsNC80LUg0LTQsNC70Lgg0LjQvNCwINC+0YLQs9C+0LLQvtGAXHJcbiAgICAgICAgLyogIGlmIChhbnN3ZXIgJiYgY29vcmRpbmF0ZXMgJiYgY29vcmRpbmF0ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgLy8g0KDQsNC30LHQuNCy0LDQvNC1INC+0YLQs9C+0LLQvtGA0LAg0L3QsCDQsdGD0LrQstC4XHJcbiAgICAgICAgICBjb25zdCBhbnN3ZXJMZXR0ZXJzID0gYW5zd2VyLnNwbGl0KFwiXCIpOyAvLyBbXCLQoVwiLCBcItCeXCIsIFwi0KRcIiwgXCLQmFwiLCBcItCvXCJdXHJcblxyXG4gICAgICAgICAgLy8g0J7QsdGF0L7QttC00LDQvNC1INC60L7QvtGA0LTQuNC90LDRgtC40YLQtSDQuCDQv9C+0YHRgtCw0LLRj9C80LUg0LHRg9C60LLQuNGC0LVcclxuICAgICAgICAgIGNvb3JkaW5hdGVzLmZvckVhY2goKGNvb3JkLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkRGF0YVtjb29yZF0pIHtcclxuICAgICAgICAgICAgICAvLyDQkNC60L4g0LrQu9C10YLQutCw0YLQsCDRgdGK0YnQtdGB0YLQstGD0LLQsCwg0L/QvtGB0YLQsNCy0Y/QvNC1INGB0YrQvtGC0LLQtdGC0L3QsNGC0LAg0LHRg9C60LLQsFxyXG4gICAgICAgICAgICAgIHRoaXMuZ3JpZERhdGFbY29vcmRdLnZhbHVlID0gYW5zd2VyTGV0dGVyc1tpbmRleF07IC8vINCf0L7RgdGC0LDQstGP0LzQtSDRgdGK0L7RgtCy0LXRgtC90LDRgtCwINCx0YPQutCy0LAg0LIg0LrQu9C10YLQutCw0YLQsFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgICAgXCLQndGP0LzQsCDQvtGC0LPQvtCy0L7RgCDQuNC70Lgg0LrQvtC+0YDQtNC40L3QsNGC0LjRgtC1INGB0LAg0L3QtdCy0LDQu9C40LTQvdC4INC30LAg0LLRitC/0YDQvtGBOlwiLFxyXG4gICAgICAgICAgICBpdGVtXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0qL1xyXG4gICAgICB9KTtcclxuICAgICAgLy8g0JTQvtCx0LDQstGP0LzQtSDQvdC+0LzQtdGA0LAg0LrRitC8INC90LDRh9Cw0LvQvdCw0YLQsCDQutC70LXRgtC60LBcclxuICAgICAgY29uc3Qgc3RhcnRDb29yZCA9IGl0ZW0uc3RhcnRQb3NpdGlvbjtcclxuICAgICAgaWYgKHRoaXMuZ3JpZERhdGFbc3RhcnRDb29yZF0pIHtcclxuICAgICAgICB0aGlzLmdyaWREYXRhW3N0YXJ0Q29vcmRdLm51bWJlciA9IGl0ZW0ubnVtYmVyUXVlc3Rpb247IC8vINCU0L7QsdCw0LLRj9C80LUg0L3QvtC80LXRgNCwINC90LAg0LLRitC/0YDQvtGB0LBcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLm9yaWdpbmFsR3JpZERhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZ3JpZERhdGEpKTtcclxuICAgIGNvbnNvbGUubG9nKFwib3JpZ2luYWxHcmlkRGF0YVwiLCB0aGlzLm9yaWdpbmFsR3JpZERhdGEpO1xyXG4gICAgLy8g0J7Qv9GA0LXQtNC10LvRjyDQv9GK0YDQstCw0YLQsCDQsNC60YLQuNCy0L3QsCDQutC70LXRgtC60LBcclxuICAgIGNvbnN0IGZpcnN0QWN0aXZlQ2VsbCA9IE9iamVjdC5rZXlzKHRoaXMuZ3JpZERhdGEpWzBdO1xyXG4gICAgdGhpcy5hY3RpdmVDZWxsID0gZmlyc3RBY3RpdmVDZWxsO1xyXG4gIH0sXHJcblxyXG4gIG1vdW50ZWQoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIkNyb3Nzd29yZFJlbmRlciBjb21wb25lbnQgaXMgbW91bnRlZCFcIik7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5oYW5kbGVLZXlQcmVzcyk7XHJcbiAgfSxcclxuICBiZWZvcmVVbm1vdW50KCkge1xyXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuaGFuZGxlS2V5UHJlc3MpO1xyXG4gIH0sXHJcblxyXG4gIGNvbXB1dGVkOiB7XHJcbiAgICByb3dzKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5ncmlkRGltZW5zaW9ucy5tYXhSb3c7XHJcbiAgICB9LFxyXG4gICAgY29scygpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ3JpZERpbWVuc2lvbnMubWF4Q29sO1xyXG4gICAgfSxcclxuICAgIGFjdGl2ZUNlbGxzKCkge1xyXG4gICAgICAvLyDQmNC30LLQu9C40YfQsNC80LUg0LDQutGC0LjQstC90LjRgtC1INC60LvQtdGC0LrQuCDQvtGCIGBjcm9zc3dvcmREYXRhYFxyXG4gICAgICByZXR1cm4gdGhpcy5jcm9zc3dvcmREYXRhLm1hcCgoaXRlbSkgPT4gaXRlbS5jb29yZGluYXRlcykuZmxhdCgpO1xyXG4gICAgfSxcclxuICAgIGdldENlbGxDbGFzcygpIHtcclxuICAgICAgcmV0dXJuIChjZWxsKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGNlbGwuaGlnaGxpZ2h0ZWQgPyBcImhpZ2hsaWdodGVkXCIgOiBcIlwiOyAvLyDQn9GA0LjQu9Cw0LPQsNC80LUg0LrQu9Cw0YEg0LDQutC+INC60LvQtdGC0LrQsNGC0LAg0LUg0LzQsNGA0LrQuNGA0LDQvdCwXHJcbiAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgLy/Rg9C/0YDQsNCy0LvQtdC90LjQtSDQvdCwINGB0YrRgdGC0L7Rj9C90LjQtdGC0L4g0L3QsCDQsdGD0YLQvtC90LjRgtC1INC30LAg0LLQtdGA0LjRhNC40LrQsNGG0LjRjyDQuCDQuNC30L/RgNCw0YnQsNC90LUg0L3QsCDQutGA0YrRgdGC0L7RgdC70L7QstC40YbQsNGC0LBcclxuICAgIGlzQ3Jvc3N3b3JkU3VibWl0dGVkKCkge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgICh0aGlzLmlzU3VibWl0dGVkIHx8IE9iamVjdC5rZXlzKHRoaXMuc3VibWl0dGVkRGF0YSkubGVuZ3RoID4gMCkgJiZcclxuICAgICAgICB0aGlzLm1vZGUgPT09IFwiQlwiXHJcbiAgICAgICk7XHJcbiAgICB9LFxyXG4gIH0sXHJcblxyXG4gIG1ldGhvZHM6IHtcclxuICAgIGlzQWN0aXZlQ2VsbChyb3csIGNvbCkge1xyXG4gICAgICAvLyDQn9GA0L7QstC10YDRj9Cy0LDQvNC1INC00LDQu9C4INC60LvQtdGC0LrQsNGC0LAg0LUg0LDQutGC0LjQstC90LBcclxuICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlQ2VsbHMuaW5jbHVkZXMoYCR7cm93fS0ke2NvbH1gKTtcclxuICAgIH0sXHJcbiAgICAvL9C90LDQvNC40YDQsNC80LUg0L3QvtC80LXRgNCwINC90LAg0LLRitC/0YDQvtGB0LAg0L3QsCDQutC+0LnRgtC+INC+0YLQs9C+0LLQsNGA0Y8g0LjQs9GA0LDRh9CwINCyINC80L7QvNC10L3RgtCwXHJcbiAgICBnZXRRdWVzdGlvbk51bWJlcihjb29yZCkge1xyXG4gICAgICBpZiAodGhpcy5ncmlkRGF0YVtjb29yZF0pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkRGF0YVtjb29yZF0ubnVtYmVyOyAvLyDQktGA0YrRidCw0LzQtSDQvdC+0LzQtdGA0LAg0L3QsCDQstGK0L/RgNC+0YHQsFxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsOyAvLyDQkNC60L4g0L3Rj9C80LAg0L3QvtC80LXRgCwg0LLRgNGK0YnQsNC80LUgbnVsbFxyXG4gICAgfSxcclxuXHJcbiAgICAvL9C90LDQvNC40YDQsNC80LUg0L/QvtGB0L7QutCw0YLQsFxyXG4gICAgZ2V0RGlyZWN0aW9uKGNvb3JkKSB7XHJcbiAgICAgIGxldCBtYXRjaGluZ1F1ZXN0aW9uID0gbnVsbDtcclxuXHJcbiAgICAgIGZvciAoY29uc3QgcXVlc3Rpb24gb2YgdGhpcy5jcm9zc3dvcmREYXRhKSB7XHJcbiAgICAgICAgaWYgKHF1ZXN0aW9uLmNvb3JkaW5hdGVzLmluY2x1ZGVzKGNvb3JkKSkge1xyXG4gICAgICAgICAgLy8g0JDQutC+INC90LDQvNC10YDQuNC8INCy0YrQv9GA0L7RgSDRgSDRgtC10LrRg9GJ0LDRgtCwINC/0L7RgdC+0LrQsCwg0LjQt9Cx0LjRgNCw0LzQtSDQvdC10LPQvlxyXG4gICAgICAgICAgaWYgKHF1ZXN0aW9uLmRpcmVjdGlvbiA9PT0gdGhpcy5jdXJyZW50RGlyZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIG1hdGNoaW5nUXVlc3Rpb24gPSBxdWVzdGlvbjtcclxuICAgICAgICAgICAgYnJlYWs7IC8vINCh0L/QuNGA0LDQvNC1INGC0YrRgNGB0LXQvdC10YLQviwg0LfQsNGJ0L7RgtC+INC90LDQvNC10YDQuNGF0LzQtSDQv9GA0LXQtNC/0L7Rh9C40YLQsNC9INCy0YrQv9GA0L7RgVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vINCQ0LrQviDQvdGP0LzQsCDRgtC10LrRg9GJ0LAg0L/QvtGB0L7QutCwLCDQstC30LXQvNCw0LzQtSDQv9GK0YDQstC40Y8g0YHRitCy0L/QsNC00LDRiVxyXG4gICAgICAgICAgaWYgKCFtYXRjaGluZ1F1ZXN0aW9uKSB7XHJcbiAgICAgICAgICAgIG1hdGNoaW5nUXVlc3Rpb24gPSBxdWVzdGlvbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChtYXRjaGluZ1F1ZXN0aW9uKSB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gbWF0Y2hpbmdRdWVzdGlvbi5jb29yZGluYXRlcy5pbmRleE9mKGNvb3JkKTtcclxuXHJcbiAgICAgICAgLy8g0JDQutC+INC40LzQsCDRgdC70LXQtNCy0LDRidCwINC60L7QvtGA0LTQuNC90LDRgtCwLCDRjyDQstGA0YrRidCw0LzQtSwg0L3QviDQv9GA0L7Qv9GD0YHQutCw0LzQtSDQv9C+0L/RitC70L3QtdC90LjRgtC1XHJcbiAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA8IG1hdGNoaW5nUXVlc3Rpb24uY29vcmRpbmF0ZXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgZm9yIChcclxuICAgICAgICAgICAgbGV0IGkgPSBjdXJyZW50SW5kZXggKyAxO1xyXG4gICAgICAgICAgICBpIDwgbWF0Y2hpbmdRdWVzdGlvbi5jb29yZGluYXRlcy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGkrK1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5leHRDb29yZCA9IG1hdGNoaW5nUXVlc3Rpb24uY29vcmRpbmF0ZXNbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgIXRoaXMuZ3JpZERhdGFbbmV4dENvb3JkXSB8fFxyXG4gICAgICAgICAgICAgIHRoaXMuZ3JpZERhdGFbbmV4dENvb3JkXS52YWx1ZSA9PT0gXCJcIlxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uOiBtYXRjaGluZ1F1ZXN0aW9uLmRpcmVjdGlvbixcclxuICAgICAgICAgICAgICAgIG5leHRDb29yZDogbmV4dENvb3JkLFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyDQkNC60L4g0LLRgdC40YfQutC4INGB0LvQtdC00LLQsNGJ0Lgg0LrQu9C10YLQutC4INGB0LAg0L/QvtC/0YrQu9C90LXQvdC4LCDQvdC1INGB0LUg0L/RgNC10LzQtdGB0YLQstCwXHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBkaXJlY3Rpb246IG1hdGNoaW5nUXVlc3Rpb24uZGlyZWN0aW9uLFxyXG4gICAgICAgICAgICBuZXh0Q29vcmQ6IG51bGwsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g0JDQutC+INGB0LzQtSDQvdCwINC/0L7RgdC70LXQtNC90LDRgtCwINC60LvQtdGC0LrQsCwg0L3QtSDRgdC1INC/0YDQtdC80LXRgdGC0LLQsFxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBkaXJlY3Rpb246IG1hdGNoaW5nUXVlc3Rpb24uZGlyZWN0aW9uLFxyXG4gICAgICAgICAgbmV4dENvb3JkOiBudWxsLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vINCQ0LrQviDQvdGP0LzQsCDRgdGK0LLQv9Cw0LTQsNGJINCy0YrQv9GA0L7RgSwg0LLRgNGK0YnQsNC80LUg0YLQtdC60YPRidCw0YLQsCDQv9C+0YHQvtC60LAg0LggbnVsbCDQt9CwIG5leHRDb29yZFxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGRpcmVjdGlvbjogdGhpcy5jdXJyZW50RGlyZWN0aW9uIHx8IFwiaG9yaXpvbnRhbFwiLFxyXG4gICAgICAgIG5leHRDb29yZDogbnVsbCxcclxuICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBpc0NlbGxGcm96ZW4oY29vcmQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY3Jvc3N3b3JkRGF0YS5zb21lKFxyXG4gICAgICAgIChpdGVtKSA9PlxyXG4gICAgICAgICAgaXRlbS5jb29yZGluYXRlcy5pbmNsdWRlcyhjb29yZCkgJiZcclxuICAgICAgICAgIGl0ZW0ucG9pbnRzID4gMCAmJlxyXG4gICAgICAgICAgaXRlbS52ZXJpZmllZCA9PT0gaXRlbS5hbnN3ZXJcclxuICAgICAgKTtcclxuICAgIH0sXHJcbiAgICB1cGRhdGVDZWxsKGNvb3JkLCB2YWx1ZSkge1xyXG4gICAgICBpZiAoIWNvb3JkKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgIFwi0JrQvtC+0YDQtNC40L3QsNGC0LjRgtC1INGB0LAg0LvQuNC/0YHQstCw0YnQuC4g0J3QtSDQvNC+0LbQtdC8INC00LAg0L7QsdC90L7QstC40Lwg0LrQu9C10YLQutCw0YLQsC5cIlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5ncmlkRGF0YVtjb29yZF0pIHtcclxuICAgICAgICAvLyDQo9Cy0LXRgNGP0LLQsNC80LUg0YHQtSwg0YfQtSDQutC70LXRgtC60LDRgtCwINGB0YrRidC10YHRgtCy0YPQstCwXHJcbiAgICAgICAgdGhpcy5ncmlkRGF0YVtjb29yZF0gPSB7IHZhbHVlOiBcIlwiLCBudW1iZXI6IG51bGwgfTtcclxuICAgICAgfVxyXG4gICAgICAvLyDQkNC60L4g0YHRgtC+0LnQvdC+0YHRgtGC0LAg0LUg0L/RgNCw0LfQvdCwLCDQvdC1INC/0YDQtdC80LXRgdGC0LLQsNC80LUg0LrRg9GA0YHQvtGA0LAg0Lgg0LjQt9C70LjQt9Cw0LzQtSDQvtGCINC80LXRgtC+0LTQsFxyXG4gICAgICBpZiAodmFsdWUudHJpbSgpID09PSBcIlwiKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIC8vINCQ0LLRgtC+0LzQsNGC0LjRh9C90L4g0L/RgNC10LzQuNC90LDQstCw0L3QtSDQutGK0Lwg0YHQu9C10LTQstCw0YnQvtGC0L4g0L/QvtC70LVcclxuICAgICAgLy8g0JLQt9C10LzQsNC80LUg0L/QvtGB0L7QutCw0YLQsCDQuCDRgdC70LXQtNCy0LDRidCw0YLQsCDQutC+0L7RgNC00LjQvdCw0YLQsFxyXG4gICAgICBjb25zdCB7IGRpcmVjdGlvbiwgbmV4dENvb3JkIH0gPSB0aGlzLmdldERpcmVjdGlvbihjb29yZCk7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiRGlyZWN0aW9uOlwiLCBkaXJlY3Rpb24pO1xyXG4gICAgICBjb25zb2xlLmxvZyhcIm5leHRDb29yZFwiLCBuZXh0Q29vcmQpO1xyXG4gICAgICAvLyDQl9Cw0L/QsNC30LLQsNC80LUg0L/QvtGB0L7QutCw0YLQsCDQt9CwINCx0YrQtNC10YnQuCDQtNCy0LjQttC10L3QuNGPXHJcbiAgICAgIHRoaXMuY3VycmVudERpcmVjdGlvbiA9IGRpcmVjdGlvbjtcclxuXHJcbiAgICAgIC8vINCf0YDQtdC80LjQvdCw0LLQsNC80LUg0LrRitC8INGB0LvQtdC00LLQsNGJ0L7RgtC+INC/0L7Qu9C1LCDQsNC60L4g0YHRitGJ0LXRgdGC0LLRg9Cy0LBcclxuICAgICAgaWYgKG5leHRDb29yZCAmJiB0aGlzLmdyaWREYXRhW25leHRDb29yZF0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlQ2VsbCA9IG5leHRDb29yZDtcclxuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgICAgIGBpbnB1dFtkYXRhLWNvb3JkaW5hdGVzPVwiJHtuZXh0Q29vcmR9XCJdYFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChpbnB1dCkgaW5wdXQuZm9jdXMoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8g0J/Rg9GB0LrQsNC80LUg0LfQstGD0LrQvtCyINGB0LjQs9C90LDQu1xyXG4gICAgICB0aGlzLnBsYXlTb3VuZCgpO1xyXG4gICAgICB0aGlzLmdyaWREYXRhW2Nvb3JkXS52YWx1ZSA9IHZhbHVlLnRvVXBwZXJDYXNlKCk7IC8vINCe0LHQvdC+0LLRj9Cy0LDQvNC1INGB0YLQvtC50L3QvtGB0YLRgtCwINC90LAg0LrQu9C10YLQutCw0YLQsFxyXG4gICAgICBjb25zb2xlLmxvZyhcItCe0LHQvdC+0LLQtdC90Lgg0LTQsNC90L3QuCDQsiBncmlkRGF0YTpcIiwgdGhpcy5ncmlkRGF0YSk7XHJcbiAgICB9LFxyXG4gICAgcGxheVNvdW5kKCkge1xyXG4gICAgICAvLyDQnNC+0LbQtdC8INC00LAg0LjQt9C/0L7Qu9C30LLQsNC80LUg0LfQstGD0LosINC60L7QudGC0L4g0YnQtSDRgdC1INC/0YPRgdC60LAg0L/RgNC4INCy0YHRj9C60L4g0LLRitCy0LXQttC00LDQvdC1XHJcbiAgICAgIGNvbnN0IHNvdW5kID0gbmV3IEF1ZGlvKFwiL3NvdW5kcy9pbnB1dFNlbGwubXAzXCIpOyAvLyDQn9GK0YIg0LrRitC8INC30LLRg9C60L7QstC40Y8g0YTQsNC50LtcclxuICAgICAgc291bmQucGxheSgpO1xyXG4gICAgfSxcclxuICAgIC8vINCc0LXRgtC+0LQg0LfQsCDQv9C+0LrQsNC30LLQsNC90LUv0YHQutGA0LjQstCw0L3QtSDQvdCwINC+0L/RhtC40LjRgtC1INC30LAg0LbQvtC60LXRgFxyXG4gICAgdG9nZ2xlSm9rZXJPcHRpb25zKCkge1xyXG4gICAgICB0aGlzLnNob3dKb2tlck9wdGlvbnMgPSAhdGhpcy5zaG93Sm9rZXJPcHRpb25zO1xyXG4gICAgICBjb25zb2xlLmxvZyhcIkNyb3Nzd29yZERhdGE6XCIsIHRoaXMuY3Jvc3N3b3JkRGF0YSk7XHJcbiAgICAgIC8vINCQ0LrQviDRgdC1INC/0L7QutCw0LfQstCw0YIg0L7Qv9GG0LjQuNGC0LUsINC30LDRgNC10LbQtNCw0LzQtSDQstC10YDRgtC40LrQsNC70L3QuNGC0LUg0LLRitC/0YDQvtGB0LhcclxuICAgICAgaWYgKHRoaXMuc2hvd0pva2VyT3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMuZmV0Y2hWZXJ0aWNhbFF1ZXN0aW9ucygpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgLy8g0JfQsNGA0LXQttC00LDQvNC1INCy0LXRgNGC0LjQutCw0LvQvdC40YLQtSDQstGK0L/RgNC+0YHQuFxyXG4gICAgZmV0Y2hWZXJ0aWNhbFF1ZXN0aW9ucygpIHtcclxuICAgICAgLy8g0KTQuNC70YLRgNC40YDQsNC80LUg0LLQtdGA0YLQuNC60LDQu9C90LjRgtC1INCy0YrQv9GA0L7RgdC4INC+0YIgY3Jvc3N3b3JkRGF0YVxyXG4gICAgICB0aGlzLnZlcnRpY2FsUXVlc3Rpb25zID0gdGhpcy5jcm9zc3dvcmREYXRhXHJcbiAgICAgICAgLmZpbHRlcigocXVlc3Rpb24pID0+IHF1ZXN0aW9uLmRpcmVjdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSAvLyDQpNC40LvRgtGA0LjRgNCw0LzQtSDQstC10YDRgtC40LrQsNC70L3QuNGC0LUg0LLRitC/0YDQvtGB0LhcclxuICAgICAgICAubWFwKChxdWVzdGlvbikgPT4gKHtcclxuICAgICAgICAgIG51bWJlcjogcXVlc3Rpb24ubnVtYmVyUXVlc3Rpb24sIC8vINCS0LfQtdC80LDQvNC1INC90L7QvNC10YDQsCDQvdCwINCy0YrQv9GA0L7RgdCwXHJcbiAgICAgICAgICBjb29yZGluYXRlczogcXVlc3Rpb24uY29vcmRpbmF0ZXMsIC8vINCc0L7QttC10Lwg0LTQsCDQt9Cw0L/QuNGI0LXQvCDQuCDQutC+0L7RgNC00LjQvdCw0YLQuNGC0LUsINCw0LrQviDRgdCwINC90YPQttC90LhcclxuICAgICAgICB9KSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiVmVydGljYWwgUXVlc3Rpb25zOlwiLCB0aGlzLnZlcnRpY2FsUXVlc3Rpb25zKTtcclxuICAgIH0sXHJcbiAgICAvLyDQnNC10YLQvtC0INC30LAg0LjQt9Cx0L7RgCDQvdCwINCy0YrQv9GA0L7RgSDQt9CwINC20L7QutC10YBcclxuICAgIHNlbGVjdFF1ZXN0aW9uRm9ySm9rZXIocXVlc3Rpb24pIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFF1ZXN0aW9uID0gcXVlc3Rpb247XHJcbiAgICAgIGNvbnNvbGUubG9nKFwic2VsZWN0ZWRRdWVzdGlvbjpcIiwgdGhpcy5zZWxlY3RlZFF1ZXN0aW9uKTtcclxuICAgICAgdGhpcy5zaG93Sm9rZXJPcHRpb25zID0gZmFsc2U7IC8vINCh0LrRgNC40LLQsNC80LUg0L7Qv9GG0LjQuNGC0LUg0LfQsCDQuNC30LHQvtGAINC90LAg0LLRitC/0YDQvtGBXHJcblxyXG4gICAgICAvLyDQmNC30L/RgNCw0YnQsNC80LUg0LjQt9Cx0YDQsNC90LjRgtC1INC00LDQvdC90Lgg0LTQuNGA0LXQutGC0L3QviDQutGK0LwgcmVxdWVzdEpva2VyXHJcbiAgICAgIHRoaXMuJHJlZnMuam9rZXIucmVxdWVzdEpva2VyKHtcclxuICAgICAgICBjcm9zc3dvcmRJZDogdGhpcy5jcm9zc3dvcmRJZCxcclxuICAgICAgICBncmlkRGF0YTogdGhpcy5ncmlkRGF0YSxcclxuICAgICAgICBxdWVzdGlvbk51bWJlcjogdGhpcy5zZWxlY3RlZFF1ZXN0aW9uLm51bWJlcixcclxuICAgICAgICBxdWVzdGlvbkNvb3JkaW5hdGVzOiB0aGlzLnNlbGVjdGVkUXVlc3Rpb24uY29vcmRpbmF0ZXMsXHJcbiAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICB1c2VNYXRjaGluZ0xldHRlcnNKb2tlcigpIHtcclxuICAgICAgLy8g0J/QvtC60LDQt9Cy0LDQvNC1INC70L7Qsywg0LfQsCDQtNCwINCy0LjQtNC40Lwg0LTQsNC70Lgg0YHQtSDQvdCw0YLQuNGB0LrQsCDQsdGD0YLQvtC90LBcclxuICAgICAgY29uc29sZS5sb2coXCLQndCw0YLQuNGB0L3QsNGCINC1INCx0YPRgtC+0L0g0LfQsCDRgdGK0LLQv9Cw0LTQsNGJ0LjRgtC1INCx0YPQutCy0LghXCIpO1xyXG5cclxuICAgICAgY29uc29sZS5sb2coXCJHcmlkRGF0YTpcIiwgdGhpcy5ncmlkRGF0YSk7XHJcbiAgICAgIC8vINCh0YrQsdC40YDQsNC80LUg0L/QvtC/0YrQu9C90LXQvdC40YLQtSDQsdGD0LrQstC4INC30LAg0LLRgdC40YfQutC4INCy0YrQv9GA0L7RgdC4XHJcbiAgICAgIGNvbnN0IHdvcmRzID0gdGhpcy5nYXRoZXJXb3Jkc0Zyb21HcmlkRGF0YSgpO1xyXG5cclxuICAgICAgY29uc29sZS5sb2coXCLQodGK0LHRgNCw0L3QuCDQtNGD0LzQuDpcIiwgd29yZHMpO1xyXG4gICAgICAvLyDQmNC30L/RgNCw0YnQsNC80LUg0YLQtdC30Lgg0LTRg9C80Lgg0L3QsCDRgdGK0YDQstGK0YDQsCDQt9CwINGB0LLQtdGA0Y/QstCw0L3QtSDRgSDQstC10YDQvdC40YLQtSDQvtGC0LPQvtCy0L7RgNC4XHJcbiAgICAgIHRoaXMuJHJlZnMuam9rZXIucmV2ZWFsTWF0Y2hpbmdMZXR0ZXJzKHdvcmRzLCB0aGlzLmNyb3Nzd29yZElkKTtcclxuICAgIH0sXHJcblxyXG4gICAgLy/QnNC10YLQvtC0INC30LAg0LjQt9Cy0LvQuNGH0LDQvdC1INC90LAg0LTQsNC90L3QuCDQt9CwINCy0YrQv9GA0L7RgdCwOlxyXG4gICAgZ2V0UXVlc3Rpb25EYXRhKHF1ZXN0aW9uTnVtYmVyKSB7XHJcbiAgICAgIC8vINCS0YDRitGJ0LAg0LTQsNC90L3QuCDQt9CwINCy0YrQv9GA0L7RgdCwINC/0L4g0L3QvtC80LXRgCAo0L3QsNC/0YDQuNC80LXRgCwg0LzQvtC20LUg0LTQsCDQs9C+INC90LDQvNC10YDQuNC8INCyIENyb3Nzd29yZERhdGEpXHJcbiAgICAgIHJldHVybiB0aGlzLmNyb3Nzd29yZERhdGEuZmluZChcclxuICAgICAgICAocXVlc3Rpb24pID0+IHF1ZXN0aW9uLm51bWJlclF1ZXN0aW9uID09PSBxdWVzdGlvbk51bWJlclxyXG4gICAgICApO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyDQnNC10YLQvtC0INC30LAg0YHRitCx0LjRgNCw0L3QtSDQvdCwINC/0L7Qv9GK0LvQvdC10L3QuNGC0LUg0LrQu9C10YLQutC4INCyINC00YPQvNCwXHJcbiAgICBnZXRGaWxsZWRDZWxscyhncmlkRGF0YSwgcXVlc3Rpb25OdW1iZXIpIHtcclxuICAgICAgLy9jb25zdCBmaWxsZWRDZWxscyA9IFtdO1xyXG4gICAgICBsZXQgYW5zd2VyID0gXCJcIjtcclxuICAgICAgY29uc3QgcXVlc3Rpb25EYXRhID0gdGhpcy5nZXRRdWVzdGlvbkRhdGEocXVlc3Rpb25OdW1iZXIpOyAvLyDQmNC30LLQu9C40YfQsNC80LUg0LTQsNC90L3QuNGC0LUg0LfQsCDQstGK0L/RgNC+0YHQsFxyXG4gICAgICAvLyDQntCx0YXQvtC20LTQsNC80LUg0LrQvtC+0YDQtNC40L3QsNGC0LjRgtC1INC90LAg0LLRitC/0YDQvtGB0LAg0LIg0L/RgNCw0LLQuNC70L3QuNGPINGA0LXQtFxyXG4gICAgICBmb3IgKGNvbnN0IGNvb3JkaW5hdGUgb2YgcXVlc3Rpb25EYXRhLmNvb3JkaW5hdGVzKSB7XHJcbiAgICAgICAgLy8g0JLQt9C10LzQsNC80LUg0LHRg9C60LLQsNGC0LAg0L7RgiBncmlkRGF0YSDQv9C+INC60L7QvtGA0LTQuNC90LDRgtCwXHJcbiAgICAgICAgY29uc3QgY2VsbCA9IGdyaWREYXRhW2Nvb3JkaW5hdGVdO1xyXG5cclxuICAgICAgICBpZiAoY2VsbCAmJiBjZWxsLnZhbHVlKSB7XHJcbiAgICAgICAgICBhbnN3ZXIgKz0gY2VsbC52YWx1ZTsgLy8g0JTQvtCx0LDQstGP0LzQtSDQsdGD0LrQstCw0YLQsCDQutGK0Lwg0L7RgtCz0L7QstC+0YDQsFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYW5zd2VyO1xyXG4gICAgfSxcclxuICAgIC8vINCc0LXRgtC+0LQg0LfQsCDRgdGK0LHQuNGA0LDQvdC1INC90LAg0L/QvtC/0YrQu9C90LXQvdC40YLQtSDQtNGD0LzQuFxyXG4gICAgZ2F0aGVyV29yZHNGcm9tR3JpZERhdGEoKSB7XHJcbiAgICAgIGNvbnN0IHdvcmRzID0gW107XHJcblxyXG4gICAgICAvLyDQntCx0YXQvtC20LTQsNC80LUg0LLRgdC40YfQutC4INCy0YrQv9GA0L7RgdC4INCyIGNyb3Nzd29yZERhdGEg0Lgg0YHRitCx0LjRgNCw0LzQtSDQtNGD0LzQuNGC0LVcclxuICAgICAgdGhpcy5jcm9zc3dvcmREYXRhLmZvckVhY2goKHF1ZXN0aW9uKSA9PiB7XHJcbiAgICAgICAgbGV0IHdvcmQgPSBcIlwiO1xyXG4gICAgICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gcXVlc3Rpb24uY29vcmRpbmF0ZXM7XHJcblxyXG4gICAgICAgIC8vINCX0LAg0LLRgdGP0LrQsCDQutC70LXRgtC60LAg0LIg0LrQvtC+0YDQtNC40L3QsNGC0LjRgtC1INC90LAg0LLRitC/0YDQvtGB0LAsINC00L7QsdCw0LLRj9C80LUg0LHRg9C60LLQsNGC0LAg0L7RgiBncmlkRGF0YVxyXG4gICAgICAgIGNvb3JkaW5hdGVzLmZvckVhY2goKGNvb3JkKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBjZWxsID0gdGhpcy5ncmlkRGF0YVtjb29yZF07XHJcbiAgICAgICAgICBpZiAoY2VsbCAmJiBjZWxsLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHdvcmQgKz0gY2VsbC52YWx1ZTsgLy8g0JTQvtCx0LDQstGP0LzQtSDRgdGC0L7QudC90L7RgdGC0YLQsCDQvdCwINC60LvQtdGC0LrQsNGC0LBcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8g0JDQutC+INGB0YrRidC10YHRgtCy0YPQstCwINC/0L7Qv9GK0LvQvdC10L3QsCDQtNGD0LzQsCwg0LTQvtCx0LDQstGP0LzQtSDRjyDQsiDQvNCw0YHQuNCy0LBcclxuICAgICAgICBpZiAod29yZCkge1xyXG4gICAgICAgICAgd29yZHMucHVzaCh7IHdvcmQ6IHdvcmQsIHF1ZXN0aW9uTnVtYmVyOiBxdWVzdGlvbi5udW1iZXJRdWVzdGlvbiB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gd29yZHM7XHJcbiAgICB9LFxyXG4gICAgaGFuZGxlTWF0Y2hpbmdMZXR0ZXJzSm9rZXIobWF0Y2hpbmdMZXR0ZXJzKSB7XHJcbiAgICAgIG1hdGNoaW5nTGV0dGVycy5mb3JFYWNoKCh7IGNvb3JkaW5hdGVzLCBsZXR0ZXIgfSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNlbGwgPSB0aGlzLmdyaWREYXRhW2Nvb3JkaW5hdGVzXTtcclxuICAgICAgICBpZiAoY2VsbCkge1xyXG4gICAgICAgICAgY2VsbC52YWx1ZSA9IGxldHRlcjsgLy/Qv9C+0L/RitC70LLQsNC80LUg0LrQu9C10YLQutCw0YLQsFxyXG4gICAgICAgICAgLy8g0JTQvtCx0LDQstGP0LzQtSDQutC70LDRgSDQt9CwINC+0YbQstC10YLRj9Cy0LDQvdC1INC4INC/0YDQtdC80LjQs9Cy0LDQvdC1XHJcbiAgICAgICAgICB0aGlzLmdyaWREYXRhW2Nvb3JkaW5hdGVzXSA9IHtcclxuICAgICAgICAgICAgLi4uY2VsbCxcclxuICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IHRydWUsXHJcbiAgICAgICAgICAgIGJsaW5rOiB0cnVlLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIC8vINCh0LvQtdC0IDMg0YHQtdC60YPQvdC00Lgg0L/RgNC10LzQsNGF0LLQsNC80LUg0L7RhtCy0LXRgtGP0LLQsNC90LXRgtC+INC4INC/0YDQtdC80LjQs9Cy0LDQvdC10YLQvlxyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JpZERhdGFbY29vcmRpbmF0ZXNdID0ge1xyXG4gICAgICAgICAgICAgIC4uLmNlbGwsXHJcbiAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGJsaW5rOiBmYWxzZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH0sIDMwMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgLy/QvNC10YLQvtC00Lgg0LfQsCDRg9C/0YDQsNCy0LvQtdC90LjQtSDQvdCwINC40LfQutCw0YfQsNGJ0LjRjyDQv9GA0L7Qt9C+0YDQtdGGINC/0YDQuCDQuNC30L/RgNCw0YnQsNC90LUg0L3QsCDQutGA0YrRgdGC0L7RgdC70L7QstC40YbQsNGC0LBcclxuICAgIGhhbmRsZUJ1dHRvbkNsaWNrKCkge1xyXG4gICAgICBpZiAodGhpcy5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XHJcbiAgICAgICAgdGhpcy5yZWRpcmVjdFRvTmV4dExldmVsKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSBcImRlbW9cIiB8fCB0aGlzLm1vZGUgPT09IFwiQVwiKSB7XHJcbiAgICAgICAgdGhpcy5jaGVja0Nyb3Nzd29yZCgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vINCe0YLQstCw0YDRj9C80LUg0LzQvtC00LDQu9CwINC30LAg0L/QvtGC0LLRitGA0LbQtNC10L3QuNC1XHJcbiAgICAgICAgdGhpcy5zaG93Q29uZmlybWF0aW9uID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGNvbmZpcm1TdWJtaXNzaW9uKCkge1xyXG4gICAgICAvLyDQn9C+0YLQstGK0YDQttC00LXQvdC40LUg0LfQsCDQuNC30L/RgNCw0YnQsNC90LVcclxuICAgICAgdGhpcy5zaG93Q29uZmlybWF0aW9uID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2hlY2tDcm9zc3dvcmQoKTsgLy8g0J/RgNC+0LTRitC70LbQsNCy0LDQvNC1INGBINC/0YDQvtCy0LXRgNC60LDRgtCwXHJcbiAgICAgIHRoaXMuaXNTdWJtaXR0ZWQgPSB0cnVlOyAvLyDQlNC10LDQutGC0LjQstC40YDQsNC80LUg0LHRg9GC0L7QvdCwXHJcbiAgICB9LFxyXG4gICAgY2FuY2VsU3VibWlzc2lvbigpIHtcclxuICAgICAgLy8g0JfQsNGC0LLQsNGA0Y/QvdC1INC90LAg0LzQvtC00LDQu9CwINCx0LXQtyDQuNC30L/RgNCw0YnQsNC90LVcclxuICAgICAgdGhpcy5zaG93Q29uZmlybWF0aW9uID0gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIGFzeW5jIGNoZWNrQ3Jvc3N3b3JkKCkge1xyXG4gICAgICBpZiAodGhpcy5pc1N1Ym1pdHRlZCkgcmV0dXJuOyAvLyDQkNC60L4g0LLQtdGH0LUg0LUg0LjQt9C/0YDQsNGC0LXQvdCwLCDQv9GA0LXQutGA0LDRgtGP0LLQsNC80LVcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIm1vZGU6XCIsIHRoaXMubW9kZSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJpZFwiLCB0aGlzLmNyb3Nzd29yZElkKTtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKFwiY3VycmVudExldmVsXCIsIHRoaXMuY3VycmVudExldmVsKTtcclxuICAgICAgICBsZXQgZW5kcG9pbnQ7XHJcblxyXG4gICAgICAgIC8vINCf0YDQvtCy0LXRgNC60LAg0LfQsCDRgNC10LbQuNC80LhcclxuICAgICAgICBpZiAodGhpcy5tb2RlID09PSBcImRlbW9cIikge1xyXG4gICAgICAgICAgZW5kcG9pbnQgPSBgL2NoZWNrLyR7dGhpcy5jcm9zc3dvcmRJZH1gO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSBcIkJcIikge1xyXG4gICAgICAgICAgZW5kcG9pbnQgPSBgL21vZGVCY2hlY2tDcm9zc3dvcmRBbnN3ZXJCeUFuc3dlci8ke3RoaXMuY3Jvc3N3b3JkSWR9YDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8g0JfQsCDQvtGB0YLQsNC90LDQu9C40YLQtSDRgdC70YPRh9Cw0LhcclxuICAgICAgICAgIGVuZHBvaW50ID0gYC9jcm9zc3dvcmQvY2hlY2svJHt0aGlzLmNyb3Nzd29yZElkfWA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDQmNC30L/RgNCw0YnQsNC80LUg0LfQsNGP0LLQutCwINGBINC00LDQvdC90Lgg0LrRitC8INGB0YrRgNCy0YrRgNCwXHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChlbmRwb2ludCwge1xyXG4gICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICBncmlkRGF0YTogdGhpcy5ncmlkRGF0YSxcclxuICAgICAgICAgICAgLy9jdXJyZW50TGV2ZWw6IHRoaXMuY3VycmVudExldmVsLCAvLyDQlNC+0LHQsNCy0Y/QvNC1INGC0LXQutGD0YnQvtGC0L4g0L3QuNCy0L5cclxuICAgICAgICAgICAgbW9kZTogdGhpcy5tb2RlLCAvL9C00L7QsdCw0LLRj9C80LUg0YDQtdC20LjQvNCwXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiUmVzdWx0IGluc2lkZSByZXNwb25zZS5qc29uKCk6XCIsIHJlc3VsdCk7XHJcbiAgICAgICAgdGhpcy4kZW1pdChcImNoZWNrLXJlc3VsdFwiLCByZXN1bHQpOyAvLyDQmNC30L/RgNCw0YnQsNC80LUg0YDQtdC30YPQu9GC0LDRgtCwINC60YrQvCDRgNC+0LTQuNGC0LXQu9GPINC40LvQuCDQtNGA0YPQsyDQutC+0LzQv9C+0L3QtdC90YJcclxuICAgICAgICB0aGlzLnN0YXR1cyA9IHJlc3VsdC5zdGF0dXM7XHJcbiAgICAgICAgLy8g0JfQsNC/0LjRgdCy0LDQvNC1INGA0LXQt9GD0LvRgtCw0YLQsCDQstGK0LIgZmVlZGJhY2sg0LfQsCDQstC40LfRg9Cw0LvQuNC30LDRhtC40Y9cclxuICAgICAgICB0aGlzLmZlZWRiYWNrID0ge1xyXG4gICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLFxyXG4gICAgICAgICAgbWVzc2FnZTogcmVzdWx0Lm1lc3NhZ2UsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcInN0YXR1c1wiLCB0aGlzLnN0YXR1cyk7XHJcbiAgICAgICAgLy8g0JDQutC+INC1INCy0Y/RgNC90LAg0LrRgNGK0YHRgtC+0YHQu9C+0LLQuNGG0LDRgtCwLCDQsNC60YLQuNCy0LjRgNCw0Lkg0LDQvdC40LzQsNGG0LjRj1xyXG4gICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xyXG4gICAgICAgICAgdGhpcy5pc1NvbHZlZCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmlzU3VibWl0dGVkID0gdHJ1ZTsgLy8g0JTQtdCw0LrRgtC40LLQuNGA0LDQvNC1INCx0YPRgtC+0L3QsCDRgdC70LXQtCDRg9GB0L/QtdGFXHJcbiAgICAgICAgICAvLyDQodGC0LDRgNGC0LjRgNCw0Lkg0LrQvtC90YTQtdGC0LhcclxuICAgICAgICAgIHRoaXMubGF1bmNoQ29uZmV0dGkoKTtcclxuICAgICAgICAgIC8vINCh0YLQsNGA0YLQuNGA0LDQuSDQt9Cy0YPQutCwINC30LAg0YPRgdC/0LXRhVxyXG4gICAgICAgICAgdGhpcy5wbGF5U3VjY2Vzc1NvdW5kKCk7XHJcbiAgICAgICAgICAvLyDQkNC60L4g0LUg0YPRgdC/0LXRiNC90L4g0YDQtdGI0LXQvdCwLCDQv9GA0L7QvNC10L3Rj9C80LUg0YLQtdC60YHRgtCwINC4INGB0YLQuNC70LAg0L3QsCDQsdGD0YLQvtC90LBcclxuICAgICAgICAgIHRoaXMuYnV0dG9uTGFiZWwgPSBcItCf0YDQvtC00YrQu9C20LhcIjtcclxuICAgICAgICAgIHRoaXMuYnV0dG9uU3R5bGUgPSBcImJnLWdyZWVuLTUwMCBob3ZlcjpiZy1ncmVlbi02MDAgYW5pbWF0ZS1wdWxzZVwiO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJzdGF0dXNcIiwgdGhpcy5zdGF0dXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwi0JPRgNC10YjQutCwINC/0YDQuCDQv9GA0L7QstC10YDQutCw0YLQsDpcIiwgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgYXN5bmMgc3VibWl0QW5zd2VyKG51bWJlclF1ZXN0aW9uKSB7XHJcbiAgICAgIC8vdGhpcy5udW1iZXJRdWVzdGlvbiA9IHF1ZXN0aW9uTnVtYmVyO1xyXG4gICAgICBjb25zb2xlLmxvZyhcItCf0YDQvtCy0LXRgNC60LAg0LfQsCDQstGK0L/RgNC+0YEg0YEg0L3QvtC80LXRgDpcIiwgbnVtYmVyUXVlc3Rpb24pO1xyXG4gICAgICBjb25zdCBmaWx0ZXJlZEdyaWREYXRhID0ge307XHJcblxyXG4gICAgICAvL9CY0LfQstC70LjRh9Cw0LzQtSDQstGB0LjRh9C60Lgg0LrQvtC+0YDQtNC40L3QsNGC0Lgg0L3QsCDQstGK0L/RgNC+0YHQsCwg0LrQvtC50YLQviDRgdC1INC40LfQv9GA0LDRidCwXHJcbiAgICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5jcm9zc3dvcmREYXRhLmZpbmQoXHJcbiAgICAgICAgKHEpID0+IHEubnVtYmVyUXVlc3Rpb24gPT09IG51bWJlclF1ZXN0aW9uXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICghcXVlc3Rpb24pIHJldHVybjsgLy8g0JDQutC+INCy0YrQv9GA0L7RgdGK0YIg0L3QtSDRgdGK0YnQtdGB0YLQstGD0LLQsCwg0YHQv9C40YDQsNC80LVcclxuICAgICAgLy8g0JfQsNC/0LDQt9Cy0LDQvNC1INGB0LDQvNC+INGC0LXQt9C4INC60L7QvtGA0LTQuNC90LDRgtC4INC+0YIgZ3JpZERhdGFcclxuICAgICAgcXVlc3Rpb24uY29vcmRpbmF0ZXMuZm9yRWFjaCgoY29vcmQpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5ncmlkRGF0YVtjb29yZF0pIHtcclxuICAgICAgICAgIGZpbHRlcmVkR3JpZERhdGFbY29vcmRdID0gdGhpcy5ncmlkRGF0YVtjb29yZF07IC8vINCa0L7Qv9C40YDQsNC80LUg0YHQsNC80L4g0L3Rg9C20L3QuNGC0LUg0YHRgtC+0LnQvdC+0YHRgtC4XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgY29uc29sZS5sb2coXCJmaWx0ZXJHcmlkXCIsIGZpbHRlcmVkR3JpZERhdGEpO1xyXG4gICAgICBjb25zdCBhY3Rpb24gPSBcInN1Ym1pdFwiO1xyXG4gICAgICBjb25zdCBlbmRwb2ludCA9IGAvY3Jvc3N3b3JkL2NoZWNrLXdvcmQvJHt0aGlzLmNyb3Nzd29yZElkfWA7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJtb2RlOlwiLCB0aGlzLm1vZGUpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiaWRcIiwgdGhpcy5jcm9zc3dvcmRJZCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJHUklEZGF0YVwiLCB0aGlzLmdyaWREYXRhKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcInF1ZXN0aW9uIOKEliBcIiwgbnVtYmVyUXVlc3Rpb24pO1xyXG4gICAgICAgIHRoaXMuYW5zd2VyID0gdGhpcy5nZXRGaWxsZWRDZWxscyh0aGlzLmdyaWREYXRhLCBudW1iZXJRdWVzdGlvbik7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJBTlNXRVJcIiwgdGhpcy5hbnN3ZXIpO1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goZW5kcG9pbnQsIHtcclxuICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgZ3JpZERhdGE6IHRoaXMuZ3JpZERhdGEsXHJcbiAgICAgICAgICAgIGZpbHRlcmVkR3JpZERhdGE6IGZpbHRlcmVkR3JpZERhdGEsXHJcbiAgICAgICAgICAgIHN1Ym1pdHRlZEFuc3dlcjogdGhpcy5hbnN3ZXIsXHJcbiAgICAgICAgICAgIG51bWJlclF1ZXN0aW9uOiBudW1iZXJRdWVzdGlvbixcclxuICAgICAgICAgICAgbW9kZTogdGhpcy5tb2RlLCAvL9C00L7QsdCw0LLRj9C80LUg0YDQtdC20LjQvNCwXHJcbiAgICAgICAgICAgIGFjdGlvbjogYWN0aW9uLFxyXG4gICAgICAgICAgICBvcmlnaW5hbEdyaWREYXRhOiB0aGlzLm9yaWdpbmFsR3JpZERhdGEsXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcbiAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlKFwi0J/RgNCw0LLQuNC70LXQvSDQvtGC0LPQvtCy0L7RgCFcIik7XHJcbiAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBcImR1cGxpY2F0ZVwiKSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlKHJlc3VsdC5tZXNzYWdlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFwicmVjb3JkXCIpIHtcclxuICAgICAgICAgIHRoaXMuc2hvd01lc3NhZ2UoXCLQktCw0YjQuNGP0YIg0L7RgtCz0L7QstC+0YAg0LUg0LfQsNC/0LjRgdCw0L0uXCIpO1xyXG4gICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlKFwi0JPRgNC10YjQtdC9INC+0YLQs9C+0LLQvtGALlwiKTtcclxuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcItCT0YDQtdGI0LrQsCDQv9GA0Lgg0L/RgNC+0LLQtdGA0LrQsNGC0LAg0L3QsCDQtNGD0LzQsNGC0LA6XCIsIGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBhc3luYyB2ZXJpZnlBbnN3ZXIobnVtYmVyUXVlc3Rpb24pIHtcclxuICAgICAgLy90aGlzLm51bWJlclF1ZXN0aW9uID0gcXVlc3Rpb25OdW1iZXI7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwi0J/RgNC+0LLQtdGA0LrQsCDQt9CwINCy0YrQv9GA0L7RgSDRgSDQvdC+0LzQtdGAOlwiLCBudW1iZXJRdWVzdGlvbik7XHJcbiAgICAgIGNvbnN0IGZpbHRlcmVkR3JpZERhdGEgPSB7fTtcclxuXHJcbiAgICAgIC8vINCY0LfQstC70LjRh9Cw0LzQtSDQstGB0LjRh9C60Lgg0LrQvtC+0YDQtNC40L3QsNGC0Lgg0L3QsCDQstGK0L/RgNC+0YHQsCwg0LrQvtC50YLQviDRgdC1INC40LfQv9GA0LDRidCwXHJcbiAgICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5jcm9zc3dvcmREYXRhLmZpbmQoXHJcbiAgICAgICAgKHEpID0+IHEubnVtYmVyUXVlc3Rpb24gPT09IG51bWJlclF1ZXN0aW9uXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICghcXVlc3Rpb24pIHJldHVybjsgLy8g0JDQutC+INCy0YrQv9GA0L7RgdGK0YIg0L3QtSDRgdGK0YnQtdGB0YLQstGD0LLQsCwg0YHQv9C40YDQsNC80LVcclxuICAgICAgLy8g0JfQsNC/0LDQt9Cy0LDQvNC1INGB0LDQvNC+INGC0LXQt9C4INC60L7QvtGA0LTQuNC90LDRgtC4INC+0YIgZ3JpZERhdGFcclxuICAgICAgcXVlc3Rpb24uY29vcmRpbmF0ZXMuZm9yRWFjaCgoY29vcmQpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5ncmlkRGF0YVtjb29yZF0pIHtcclxuICAgICAgICAgIGZpbHRlcmVkR3JpZERhdGFbY29vcmRdID0gdGhpcy5ncmlkRGF0YVtjb29yZF07IC8vINCa0L7Qv9C40YDQsNC80LUg0YHQsNC80L4g0L3Rg9C20L3QuNGC0LUg0YHRgtC+0LnQvdC+0YHRgtC4XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgY29uc3QgYWN0aW9uID0gXCJ2ZXJpZnlcIjtcclxuICAgICAgY29uc3QgZW5kcG9pbnQgPSBgL2Nyb3Nzd29yZC9jaGVjay13b3JkLyR7dGhpcy5jcm9zc3dvcmRJZH1gO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwibW9kZTA6MFwiLCB0aGlzLm1vZGUpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiaWRcIiwgdGhpcy5jcm9zc3dvcmRJZCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJHUklEZGF0YVwiLCB0aGlzLmdyaWREYXRhKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcInF1ZXN0aW9uIOKEliBcIiwgbnVtYmVyUXVlc3Rpb24pO1xyXG4gICAgICAgIHRoaXMuYW5zd2VyID0gdGhpcy5nZXRGaWxsZWRDZWxscyh0aGlzLmdyaWREYXRhLCBudW1iZXJRdWVzdGlvbik7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJBTlNXRVJcIiwgdGhpcy5hbnN3ZXIpO1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goZW5kcG9pbnQsIHtcclxuICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgZ3JpZERhdGE6IHRoaXMuZ3JpZERhdGEsXHJcbiAgICAgICAgICAgIGZpbHRlcmVkR3JpZERhdGE6IGZpbHRlcmVkR3JpZERhdGEsXHJcbiAgICAgICAgICAgIHN1Ym1pdHRlZEFuc3dlcjogdGhpcy5hbnN3ZXIsXHJcbiAgICAgICAgICAgIG51bWJlclF1ZXN0aW9uOiBudW1iZXJRdWVzdGlvbiwgLy8g0JTQvtCx0LDQstGP0LzQtSDRgtC10LrRg9GJ0L7RgtC+INC90LjQstC+XHJcbiAgICAgICAgICAgIG1vZGU6IHRoaXMubW9kZSwgLy/QtNC+0LHQsNCy0Y/QvNC1INGA0LXQttC40LzQsFxyXG4gICAgICAgICAgICBhY3Rpb246IGFjdGlvbixcclxuICAgICAgICAgICAgb3JpZ2luYWxHcmlkRGF0YTogdGhpcy5vcmlnaW5hbEdyaWREYXRhLFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xyXG4gICAgICAgICAgdGhpcy5zaG93TWVzc2FnZShcItCf0YDQsNCy0LjQu9C10L0g0L7RgtCz0L7QstC+0YAhXCIpO1xyXG4gICAgICAgICAgLy8g0J/RgNC10LfQsNGA0LXQttC00LDQvNC1INGB0YLRgNCw0L3QuNGG0LDRgtCwXHJcbiAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc2hvd01lc3NhZ2UoXCLQk9GA0LXRiNC10L0g0L7RgtCz0L7QstC+0YAuXCIpO1xyXG4gICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwi0JPRgNC10YjQutCwINC/0YDQuCDQv9GA0L7QstC10YDQutCw0YLQsCDQvdCwINC00YPQvNCw0YLQsDpcIiwgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHNob3dNZXNzYWdlKG1lc3NhZ2UpIHtcclxuICAgICAgLy8g0J/QvtC60LDQttC10YLQtSDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC90LAg0L/QvtGC0YDQtdCx0LjRgtC10LvRjyAo0L3QsNC/0YDQuNC80LXRgCDRgSBUb2FzdCDQuNC70Lgg0LDQu9C10YDRgilcclxuICAgICAgYWxlcnQobWVzc2FnZSk7XHJcbiAgICB9LFxyXG4gICAgZGlzcGxheU1lc3NhZ2UobWVzc2FnZSkge1xyXG4gICAgICB0aGlzLmpva2VyTWVzc2FnZSA9IG1lc3NhZ2U7IC8vINCf0L7Qu9GD0YfQsNCy0LDQvNC1INGB0YrQvtCx0YnQtdC90LjQtdGC0L4g0L7RgiBDcm9zc3dvcmRKb2tlclxyXG4gICAgICAvLyDQodC60YDQuNCy0LDQvNC1INGB0YrQvtCx0YnQtdC90LjQtdGC0L4g0YHQu9C10LQgMyDRgdC10LrRg9C90LTQuCAoMzAwMCDQvNC40LvQuNGB0LXQutGD0L3QtNC4KVxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmpva2VyTWVzc2FnZSA9IFwiXCI7XHJcbiAgICAgIH0sIDMwMDApO1xyXG4gICAgfSxcclxuICAgIC8qaGFuZGxlQnV0dG9uQ2xpY2soKSB7XHJcbiAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcclxuICAgICAgICB0aGlzLnJlZGlyZWN0VG9OZXh0TGV2ZWwoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmNoZWNrQ3Jvc3N3b3JkKCk7XHJcbiAgICAgIH1cclxuICAgIH0sKi9cclxuICAgIHJlZGlyZWN0VG9OZXh0TGV2ZWwoKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiUmVkaXJlY3QgdG8gbmV4dCBsZXZlbCB0cmlnZ2VyZWRcIik7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiQ3VycmVudCBzdGF0dXM6XCIsIHRoaXMuc3RhdHVzKTtcclxuICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBcImNyb3Nzd29yZFwiO1xyXG4gICAgfSxcclxuICAgIGxhdW5jaENvbmZldHRpKCkge1xyXG4gICAgICBjb25mZXR0aSh7XHJcbiAgICAgICAgcGFydGljbGVDb3VudDogMTUwLFxyXG4gICAgICAgIHNwcmVhZDogNzAsXHJcbiAgICAgICAgb3JpZ2luOiB7IHk6IDAuNiB9LFxyXG4gICAgICAgIGNvbG9yczogW1wiI2ZmMFwiLCBcIiMwZjBcIiwgXCIjMDBmXCJdLFxyXG4gICAgICB9KTtcclxuICAgIH0sXHJcbiAgICBwbGF5U3VjY2Vzc1NvdW5kKCkge1xyXG4gICAgICB0aGlzLiRyZWZzLnN1Y2Nlc3NTb3VuZC5wbGF5KCk7XHJcbiAgICB9LFxyXG4gICAgcmFuZ2Uoc3RhcnQsIGVuZCkge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSBbXTtcclxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XHJcbiAgICAgICAgcmVzdWx0LnB1c2goaSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH0sXHJcbiAgICByZXF1ZXN0Sm9rZXIoKSB7XHJcbiAgICAgIC8vINCY0LfQstC40LrQstCw0LzQtSDQvNC10YLQvtC00LAg0L7RgiBDcm9zc3dvcmRKb2tlclxyXG4gICAgICB0aGlzLiRyZWZzLmpva2VyLnJlcXVlc3RKb2tlcigpO1xyXG4gICAgfSxcclxuICAgIC8v0LTQstCwINC80LXRgtC+0LTQsCDQt9CwINC/0L7Qv9GK0LvQstCw0L3QtSDQvdCwINC/0L7Qu9C10YLQsNGC0LAg0L/RgNC4INC40YHQutCw0L3QtSDQvdCwINC20L7QutC10YBcclxuICAgIGhhbmRsZVJldmVhbExldHRlcnMoY29vcmRpbmF0ZXMsIGxldHRlcnMpIHtcclxuICAgICAgY29uc29sZS5sb2coXCLQoNC10L3QtNC40YDQsNC90LUg0L3QsCDQsdGD0LrQstC40YLQtTpcIiwgY29vcmRpbmF0ZXMsIGxldHRlcnMpO1xyXG4gICAgICB0aGlzLnJldmVhbExldHRlcnMoY29vcmRpbmF0ZXMsIGxldHRlcnMpO1xyXG4gICAgICAvLyDQn9GD0YHQutCw0LzQtSDQt9Cy0YPQuiDQv9GA0Lgg0YDQsNC30LrRgNC40LLQsNC90LXRgtC+INC90LAg0LHRg9C60LLQuNGC0LVcclxuICAgICAgdGhpcy5wbGF5Sm9rZXJTb3VuZCgpO1xyXG4gICAgfSxcclxuICAgIHJldmVhbExldHRlcnMoY29vcmRpbmF0ZXMsIGxldHRlcnMpIHtcclxuICAgICAgY29vcmRpbmF0ZXMuZm9yRWFjaCgoY29vcmQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgY29uc3QgbGV0dGVyID0gbGV0dGVyc1tpbmRleF07XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JpZERhdGFbY29vcmRdKSB7XHJcbiAgICAgICAgICB0aGlzLmdyaWREYXRhW2Nvb3JkXS52YWx1ZSA9IGxldHRlcjtcclxuICAgICAgICAgIC8vINCU0L7QsdCw0LLRj9C80LUg0LrQu9Cw0YHQvtCy0LUg0LfQsCDQvtGG0LLQtdGC0Y/QstCw0L3QtSDQuCDQv9GA0LXQvNC40LPQstCw0L3QtVxyXG4gICAgICAgICAgdGhpcy5ncmlkRGF0YVtjb29yZF0uaGlnaGxpZ2h0ZWQgPSB0cnVlOyAvLyDQntGG0LLQtdGC0Y/QstCw0L3QtSDQvdCwINC60LvQtdGC0LrQsNGC0LBcclxuICAgICAgICAgIHRoaXMuZ3JpZERhdGFbY29vcmRdLmJsaW5rID0gdHJ1ZTsgLy8g0J/RgNC10LzQuNCz0LLQsNC90LUg0L3QsCDQutC70LXRgtC60LDRgtCwXHJcblxyXG4gICAgICAgICAgLy8g0KHQu9C10LQgMyDRgdC10LrRg9C90LTQuCDQv9GA0LXQvNCw0YXQstCw0LzQtSDQvtGG0LLQtdGC0Y/QstCw0L3QtdGC0L4g0Lgg0L/RgNC10LzQuNCz0LLQsNC90LXRgtC+XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5ncmlkRGF0YVtjb29yZF0uaGlnaGxpZ2h0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5ncmlkRGF0YVtjb29yZF0uYmxpbmsgPSBmYWxzZTtcclxuICAgICAgICAgIH0sIDMwMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgLy8g0JzQtdGC0L7QtCDQt9CwINC/0YPRgdC60LDQvdC1INC90LAg0LfQstGD0LrQsCDQv9GA0Lgg0YDQsNC30LrRgNC40LLQsNC90LUg0L3QsCDQsdGD0LrQstC40YLQtVxyXG4gICAgcGxheUpva2VyU291bmQoKSB7XHJcbiAgICAgIGNvbnN0IHNvdW5kID0gbmV3IEF1ZGlvKFwiL3NvdW5kcy9qb2tlci5tcDNcIik7IC8vINCf0YrRgiDQutGK0Lwg0LfQstGD0LrQvtCy0LjRjyDRhNCw0LnQuyDQt9CwINC20L7QutC10YDQsFxyXG4gICAgICBzb3VuZC5wbGF5KCkuY2F0Y2goKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcItCX0LLRg9C60YrRgiDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/Rg9GB0L3QsNGCOlwiLCBlcnJvcik7XHJcbiAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyDRhNGD0L3QutGG0LjRjyDQt9CwINC/0YDQtdC80LjQvdCw0LLQsNC90LUg0L/RgNC10Lcg0L/QvtC70LXRgtCw0YLQsCDRgdGK0YEg0YHRgtGA0LXQu9C60LjRgtC1INC+0YIg0LrQu9Cw0LLQuNCw0YLRg9GA0LDRgtCwXHJcbiAgICBoYW5kbGVLZXlQcmVzcyhldmVudCkge1xyXG4gICAgICBjb25zdCBhY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcclxuXHJcbiAgICAgIC8vINCQ0LrQviDQv9C+0YLRgNC10LHQuNGC0LXQu9GP0YIg0L/QuNGI0LUg0LIgaW5wdXQg0LjQu9C4IHRleHRhcmVhICjQvdCw0L/RgNC40LzQtdGAINCyINGH0LDRgtCwKSDihpIg0LjQt9C70LjQt9Cw0LzQtVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgYWN0aXZlRWxlbWVudC50YWdOYW1lID09PSBcIklOUFVUXCIgfHxcclxuICAgICAgICBhY3RpdmVFbGVtZW50LnRhZ05hbWUgPT09IFwiVEVYVEFSRUFcIlxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc29sZS5sb2coXCLQndCw0YLQuNGB0L3QsNGCINC60LvQsNCy0LjRiCDQsiDQutGA0YrRgdGC0L7RgdC70L7QstC40YbQsNGC0LA6XCIsIGV2ZW50LmtleSk7XHJcblxyXG4gICAgICBjb25zdCBkaXJlY3Rpb25zID0ge1xyXG4gICAgICAgIEFycm93VXA6IFstMSwgMF0sXHJcbiAgICAgICAgQXJyb3dEb3duOiBbMSwgMF0sXHJcbiAgICAgICAgQXJyb3dMZWZ0OiBbMCwgLTFdLFxyXG4gICAgICAgIEFycm93UmlnaHQ6IFswLCAxXSxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IGN1cnJlbnRDb29yZCA9IHRoaXMuYWN0aXZlQ2VsbDtcclxuICAgICAgaWYgKCFjdXJyZW50Q29vcmQpIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IFtyb3csIGNvbF0gPSBjdXJyZW50Q29vcmQuc3BsaXQoXCItXCIpLm1hcChOdW1iZXIpO1xyXG4gICAgICBjb25zdCBbZFJvdywgZENvbF0gPSBkaXJlY3Rpb25zW2V2ZW50LmtleV0gfHwgWzAsIDBdO1xyXG5cclxuICAgICAgY29uc3QgbmV3Um93ID0gcm93ICsgZFJvdztcclxuICAgICAgY29uc3QgbmV3Q29sID0gY29sICsgZENvbDtcclxuICAgICAgY29uc3QgbmV3Q29vcmQgPSBgJHtuZXdSb3d9LSR7bmV3Q29sfWA7XHJcblxyXG4gICAgICAvLyDQn9GA0L7QstC10YDQutCwINC00LDQu9C4INC90L7QstCw0YLQsCDQutC70LXRgtC60LAg0LUg0LDQutGC0LjQstC90LBcclxuICAgICAgaWYgKHRoaXMuZ3JpZERhdGFbbmV3Q29vcmRdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZUNlbGwgPSBuZXdDb29yZDtcclxuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgICAgIGBpbnB1dFtkYXRhLWNvb3JkaW5hdGVzPVwiJHtuZXdDb29yZH1cIl1gXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKGlucHV0KSBpbnB1dC5mb2N1cygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gIH0sXHJcbn07XHJcbjwvc2NyaXB0PlxyXG5cclxuPHN0eWxlIHNjb3BlZD5cclxuLmNyb3Nzd29yZC1yZW5kZXJlciB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgZ2FwOiAyMHB4O1xyXG59XHJcbi5jb250ZW50IHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGdhcDogMjBweDtcclxufVxyXG4ucXVlc3Rpb25zIHtcclxuICBmbGV4OiAxO1xyXG4gIHRleHQtYWxpZ246IGxlZnQ7XHJcbn1cclxuLnF1ZXN0aW9uIHtcclxuICBtYXJnaW4tYm90dG9tOiAxMHB4OyAvKiDQoNCw0LfRgdGC0L7Rj9C90LjQtSDQvNC10LbQtNGDINCy0YrQv9GA0L7RgdC40YLQtSAqL1xyXG59XHJcbi5xdWVzdGlvbi1udW1iZXIge1xyXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xyXG4gIG1hcmdpbi1ib3R0b206IDVweDsgLyog0KDQsNC30YHRgtC+0Y/QvdC40LUg0LzQtdC20LTRgyBcItCS0YrQv9GA0L7RgSDihJZcIiDQuCDRgtC10LrRgdGC0LAg0L3QsCDQstGK0L/RgNC+0YHQsCAqL1xyXG59XHJcbi5xdWVzdGlvbi10ZXh0IHtcclxuICBtYXJnaW46IDA7XHJcbn1cclxuXHJcbi5ncmlkIHtcclxuICBkaXNwbGF5OiBncmlkO1xyXG4gIHdpZHRoOiAxMDAlOyAvKiDQoNCw0LfQv9GK0LLQsCDRgNC10YjQtdGC0LrQsNGC0LAgKi9cclxuICBtYXgtd2lkdGg6IDYwMHB4OyAvKiDQntCz0YDQsNC90LjRh9Cw0LLQsNC80LUg0LzQsNC60YHQuNC80LDQu9C90LDRgtCwINGI0LjRgNC40L3QsCAqL1xyXG4gIGFzcGVjdC1yYXRpbzogdmFyKC0tY29scykgLyB2YXIoLS1yb3dzKTsgLyog0JfQsNC/0LDQt9Cy0LDQvNC1INC/0YDQvtC/0L7RgNGG0LjQuNGC0LUg0L3QsCDRgNC10YjQtdGC0LrQsNGC0LAgKi9cclxuICBncmlkLXRlbXBsYXRlLXJvd3M6IHJlcGVhdCh2YXIoLS1yb3dzKSwgMWZyKTtcclxuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCh2YXIoLS1jb2xzKSwgMWZyKTtcclxuICBnYXA6IDA7IC8qINCf0YDQtdC80LDRhdCy0LDQvNC1INC/0YDQsNC30L3QuNC90LjRgtC1INC80LXQttC00YMg0LrQu9C10YLQutC40YLQtSAqL1xyXG59XHJcbi5jZWxsLWlucHV0IHtcclxuICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xyXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICB3aWR0aDogMTAwJTtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbn1cclxuLmNlbGwge1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAvKmJvcmRlcjogMXB4IHNvbGlkICNkZGQ7IC8qINCT0YDQsNC90LjRhtC4INC30LAg0LLRgdGP0LrQsCDQutC70LXRgtC60LAgKi9cclxuICBhc3BlY3QtcmF0aW86IDE7IC8qINCT0LDRgNCw0L3RgtC40YDQsCDQutCy0LDQtNGA0LDRgtC90LAg0YTQvtGA0LzQsCAqL1xyXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7IC8qINCT0LDRgNCw0L3RgtC40YDQsCwg0YfQtSDQsdC+0YDQtNC10YDRitGCINC90LUg0L/RgNC+0LzQtdC90Y8g0YDQsNC30LzQtdGA0LAgKi9cclxuICBwb3NpdGlvbjogcmVsYXRpdmU7IC8qINCf0L7Qt9Cy0L7Qu9GP0LLQsCDQv9C+0YHRgtCw0LLRj9C90LUg0L3QsCDQvdC+0LzQtdGA0LAg0YHQv9GA0Y/QvNC+INC60LvQtdGC0LrQsNGC0LAgKi9cclxufVxyXG5cclxuLmNlbGwtaW5wdXQ6Zm9jdXMge1xyXG4gIGJvcmRlci1jb2xvcjogI2FhYTtcclxuICAvKmJhY2tncm91bmQtY29sb3I6IHJnYigyNTEsIDIzOCwgOTMpOyovXHJcbn1cclxuXHJcbi8qINCf0L7QutCw0LfQstCw0LzQtSDQsNC60YLQuNCy0L3QuNGC0LUg0LrQu9C10YLQutC4ICovXHJcbi5jZWxsIC5jZWxsLWlucHV0IHtcclxuICBkaXNwbGF5OiBibG9jaztcclxufVxyXG4uY2VsbC1pbnB1dCB7XHJcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgLyog0JLQuNC30YPQsNC70L3QviDQv9GA0LjQvdGD0LbQtNCw0LLQsCDQs9C70LDQstC90Lgg0LHRg9C60LLQuCAqL1xyXG59XHJcbi5jZWxsLW51bWJlciB7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gIHRvcDogMnB4OyAvKiDQoNCw0LfRgdGC0L7Rj9C90LjQtSDQvtGC0LPQvtGA0LUgKi9cclxuICBsZWZ0OiAycHg7IC8qINCg0LDQt9GB0YLQvtGP0L3QuNC1INC+0YLQu9GP0LLQviAqL1xyXG4gIGZvbnQtc2l6ZTogMC45cmVtOyAvKiDQndCw0LzQsNC70Y/QstCw0L3QtSDQvdCwINGA0LDQt9C80LXRgNCwINC90LAg0YjRgNC40YTRgtCwICovXHJcbiAgY29sb3I6ICM1NTU7IC8qINCm0LLQtdGC0YrRgiDQvdCwINC90L7QvNC10YDQsCAqL1xyXG4gIHBvaW50ZXItZXZlbnRzOiBub25lOyAvKiDQn9GA0LXQtNC+0YLQstGA0LDRgtGP0LLQsCDQvdC+0LzQtdGA0LAg0LTQsCDQv9GA0LXRh9C4INC90LAg0LrQu9C40LrQvtCy0LXRgtC1ICovXHJcbn1cclxuXHJcbi5hY3Rpb25zIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjsgLyog0KbQtdC90YLRgNC40YDQsNC80LUg0LHRg9GC0L7QvdCwINC4INGC0LXQutGB0YLQsCDRgdC/0YDRj9C80L4g0YDQvtC00LjRgtC10LvRjyAqL1xyXG4gIGdhcDogMTBweDsgLyog0KDQsNC30YHRgtC+0Y/QvdC40LUg0LzQtdC20LTRgyDQsdGD0YLQvtC90LAg0Lgg0YLQtdC60YHRgtCwICovXHJcbiAgbWluLXdpZHRoOiAxNTBweDsgLyog0KTQuNC60YHQuNGA0LDQvdCwINGI0LjRgNC40L3QsCwg0LfQsCDQtNCwINC90LUg0L/RgNC+0LzQtdC90Y8g0YDQsNC30LzQtdGA0LAgKi9cclxuICBwb3NpdGlvbjogcmVsYXRpdmU7IC8qINCX0LAg0L/QvtC30LjRhtC40L7QvdC40YDQsNC90LUg0L3QsCDQstGK0YLRgNC10YjQvdC4INC10LvQtdC80LXQvdGC0LggKi9cclxufVxyXG5cclxuLmFjdGlvbnMgLmZlZWRiYWNrIHtcclxuICB0ZXh0LWFsaWduOiBjZW50ZXI7IC8qINCm0LXQvdGC0YDQuNGA0LDQvNC1INGC0LXQutGB0YLQsCAqL1xyXG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDsgLyog0J/RgNC10L3QsNGB0Y/QvdC1INC90LAg0LTRitC70LPQuCDQtNGD0LzQuCAqL1xyXG4gIG1heC13aWR0aDogMTUwcHg7IC8qINCe0LPRgNCw0L3QuNGH0LDQstCw0LzQtSDRiNC40YDQuNC90LDRgtCwICovXHJcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwOyAvKiDQn9C+0LfQstC+0LvRj9Cy0LDQvNC1INC/0YDQtdC90LDRgdGP0L3QtSDQvdCwINC90L7QstC4INGA0LXQtNC+0LLQtSAqL1xyXG4gIHBvc2l0aW9uOiBzdGF0aWM7IC8qINCd0Y/QvNCwINC90YPQttC00LAg0L7RgiDQsNCx0YHQvtC70Y7RgtC90L4g0L/QvtC30LjRhtC40L7QvdC40YDQsNC90LUgKi9cclxufVxyXG4uYWxlcnQtbWVzc2FnZSB7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y5YzJjMjtcclxuICBwYWRkaW5nOiAxMHB4O1xyXG4gIGJvcmRlci1yYWRpdXM6IDVweDtcclxuICBjb2xvcjogI2QzMmYyZjtcclxuICBmb250LXdlaWdodDogYm9sZDtcclxufVxyXG5cclxuYnV0dG9uIHtcclxuICBwYWRkaW5nOiAxMHB4IDIwcHg7XHJcbiAgZm9udC1zaXplOiAxcmVtO1xyXG4gIGN1cnNvcjogcG9pbnRlcjtcclxufVxyXG4uY2VsbC5hbmltYXRlIHtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3cgIWltcG9ydGFudDsgLyog0KLQtdGB0YLQvtCy0L4g0L7RhtCy0LXRgtGP0LLQsNC90LUg0LfQsCDQv9GA0L7QstC10YDQutCwICovXHJcbiAgYm9yZGVyOiAycHggc29saWQgcmVkOyAvKiDQlNC+0L/RitC70L3QuNGC0LXQu9C10L0g0LDQutGG0LXQvdGCICovXHJcbn1cclxuLmNlbGwtaW5wdXQuYW5pbWF0ZSB7XHJcbiAgYW5pbWF0aW9uOiBwdWxzZSAxLjVzIGluZmluaXRlIGFsdGVybmF0ZTsgLyog0JDQvdC40LzQsNGG0LjRjyDRgSDQv9C70LDQstC10L0g0L/RgNC10YXQvtC0ICovXHJcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjVzIGVhc2UtaW4tb3V0OyAvKiDQn9C70LDQstC10L0g0L/RgNC10YXQvtC0INC90LAg0YbQstC10YLQvtCy0LXRgtC1ICovXHJcbn1cclxuLyrQvtGG0LLQtdGC0Y/QstCw0YfQtSDQutC70LXRgtC60LAg0L/RgNC4INC20L7QutC10YAg0LfQsCDRgdGK0LLQv9Cw0LTQsNGJ0LAg0LHRg9C60LLQsCAqL1xyXG4uaGlnaGxpZ2h0ZWQge1xyXG4gIGJhY2tncm91bmQtY29sb3I6IHllbGxvdzsgLyog0J/RgNC40LzQtdGAINC30LAg0L7RhtCy0LXRgtGP0LLQsNC90LUgKi9cclxufVxyXG4vKiDQmtC70LDRgSDQt9CwINC/0YDQtdC80LjQs9Cy0LDQvdC1ICovXHJcbi5ibGluayB7XHJcbiAgYW5pbWF0aW9uOiBibGlua0FuaW1hdGlvbiAxcyBpbmZpbml0ZSAhaW1wb3J0YW50O1xyXG59XHJcblxyXG5Aa2V5ZnJhbWVzIGJsaW5rQW5pbWF0aW9uIHtcclxuICAwJSB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7XHJcbiAgfVxyXG4gIDUwJSB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcclxuICB9XHJcbiAgMTAwJSB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7XHJcbiAgfVxyXG59XHJcblxyXG5Aa2V5ZnJhbWVzIHB1bHNlIHtcclxuICAwJSB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmYWNiOyAvKiDQkdC70LXQtNC+0LbRitC70YLQviAqL1xyXG4gIH1cclxuICA1MCUge1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZWIzYjsgLyog0J/Qvi3Rj9GA0LrQvtC20YrQu9GC0L4gKi9cclxuICB9XHJcbiAgMTAwJSB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmYWNiOyAvKiDQkdC70LXQtNC+0LbRitC70YLQviAqL1xyXG4gIH1cclxufVxyXG5cclxuQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XHJcbiAgLmNvbnRlbnQge1xyXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICB9XHJcbiAgLmdyaWQtY29udGFpbmVyIHtcclxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IC8qINCa0YDRitGB0YLQvtGB0LvQvtCy0LjRhtCw0YLQsCDQvtGC0LjQstCwINC90LDQtCDQsdGD0YLQvtC90LAgKi9cclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IC8qINCm0LXQvdGC0YDQuNGA0LDQvNC1INCy0YHQuNGH0LrQviDRhdC+0YDQuNC30L7QvdGC0LDQu9C90L4gKi9cclxuICB9XHJcblxyXG4gIC5hY3Rpb25zIHtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBtYXJnaW4tdG9wOiAxMHB4O1xyXG4gICAgd2lkdGg6IGF1dG87XHJcbiAgfVxyXG5cclxuICAucXVlc3Rpb24taW1hZ2Uge1xyXG4gICAgbWF4LXdpZHRoOiAyMDBweDtcclxuICAgIGhlaWdodDogYXV0bztcclxuICAgIG1hcmdpbi10b3A6IDFyZW07XHJcbiAgfVxyXG59XHJcbi8q0YHRgtC40LvQvtCy0LUg0LfQsCDQvNC+0LTQsNC70LAqL1xyXG4ubW9kYWwtb3ZlcmxheSB7XHJcbiAgcG9zaXRpb246IGZpeGVkO1xyXG4gIHRvcDogMDtcclxuICBsZWZ0OiAwO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGhlaWdodDogMTAwJTtcclxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNSk7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gIHotaW5kZXg6IDEwMDA7XHJcbn1cclxuXHJcbi5tb2RhbC1jb250ZW50IHtcclxuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcclxuICBwYWRkaW5nOiAyMHB4O1xyXG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XHJcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIGJveC1zaGFkb3c6IDAgMnB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjIpO1xyXG59XHJcblxyXG4uYnRuLWNvbmZpcm0ge1xyXG4gIGJhY2tncm91bmQtY29sb3I6IGdyZWVuO1xyXG4gIGNvbG9yOiB3aGl0ZTtcclxuICBwYWRkaW5nOiAxMHB4IDIwcHg7XHJcbiAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xyXG4gIGJvcmRlci1yYWRpdXM6IDVweDtcclxuICBjdXJzb3I6IHBvaW50ZXI7XHJcbn1cclxuXHJcbi5idG4tY2FuY2VsIHtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7XHJcbiAgY29sb3I6IHdoaXRlO1xyXG4gIHBhZGRpbmc6IDEwcHggMjBweDtcclxuICBib3JkZXItcmFkaXVzOiA1cHg7XHJcbiAgY3Vyc29yOiBwb2ludGVyO1xyXG59XHJcbi8qINC00L4g0YLRg9C6INGB0LAg0YHRgtC40LvQvtCy0LXRgtC1INC30LAg0LzQvtC00LDQu9CwKi9cclxuLyog0LfQsCDQt9Cw0LzRgNCw0LfQtdC90LjRgtC1INC60LvQtdGC0LrQuCovXHJcbi5mcm96ZW4tY2VsbCB7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogeWVsbG93ICFpbXBvcnRhbnQ7XHJcbiAgY29sb3I6IGJsYWNrICFpbXBvcnRhbnQ7XHJcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcclxufVxyXG48L3N0eWxlPlxyXG4iLCI8dGVtcGxhdGU+XHJcbiAgPGRpdj5cclxuICAgIDxidXR0b25cclxuICAgICAgQGNsaWNrPVwib3Blbk1vZGFsXCJcclxuICAgICAgY2xhc3M9XCJ0ZXh0LXdoaXRlIHB4LTQgcHktMiByb3VuZGVkIGhvdmVyOmJnLWdyZWVuLTcwMCBtdC00XCJcclxuICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjMTZhMzRhXCJcclxuICAgID5cclxuICAgICAg0J/QvtC60LDQvdC4INC40LPRgNCw0YdcclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHNjcmlwdD5cclxuLy9pbXBvcnQgU3dhbCBmcm9tIFwic3dlZXRhbGVydDJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBwcm9wczoge1xyXG4gICAgdGVhbUlkOiBOdW1iZXIsXHJcbiAgfSxcclxuICBkYXRhKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZW1haWw6IFwiXCIsXHJcbiAgICAgIHBsYXllcnM6IFtdLCAvLyDQotGD0Log0YnQtSDQv9Cw0LfQuNC8INC90LDQu9C40YfQvdC40YLQtSDQuNCz0YDQsNGH0LhcclxuICAgICAgc2VhcmNoUXVlcnk6IFwiXCIsXHJcbiAgICAgIHNlbGVjdGVkUGxheWVySWQ6IG51bGwsIC8vINCh0YrRhdGA0LDQvdGP0LLQsCDQuNC30LHRgNCw0L3QuNGPINC40LPRgNCw0YdcclxuICAgIH07XHJcbiAgfSxcclxuICBtb3VudGVkKCkge1xyXG4gICAgY29uc29sZS5sb2coXCLwn5SNINCf0L7Qu9GD0YfQtdC9IHRlYW1JZDpcIiwgdGhpcy50ZWFtSWQpO1xyXG4gICAgY29uc29sZS5sb2coXCLwn5ug77iPINCc0L7QtNCw0LvRitGCINC1INC80L7QvdGC0LjRgNCw0L0uIDpcIik7XHJcbiAgfSxcclxuICBtZXRob2RzOiB7XHJcbiAgICBhc3luYyBvcGVuTW9kYWwoKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuZmV0Y2hQbGF5ZXJzKCk7IC8vINCS0LfQuNC80LDQvNC1INC90LDQu9C40YfQvdC40YLQtSDQuNCz0YDQsNGH0Lgg0L/RgNC4INC+0YLQstCw0YDRj9C90LUg0L3QsCDQvNC+0LTQsNC70LBcclxuICAgICAgdGhpcy5zZWFyY2hRdWVyeSA9IFwiXCI7IC8vINCd0YPQu9C40YDQsNC80LUg0YLRitGA0YHQtdC90LXRgtC+XHJcbiAgICAgIFN3YWwuZmlyZSh7XHJcbiAgICAgICAgdGl0bGU6IFwi0JjQt9Cx0LXRgNC10YLQtSDQuNCz0YDQsNGHXCIsXHJcbiAgICAgICAgaHRtbDogYFxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJwbGF5ZXItc2VhcmNoXCIgY2xhc3M9XCJzd2FsMi1pbnB1dFwiIHBsYWNlaG9sZGVyPVwi0KLRitGA0YHQtdC90LUuLi5cIiBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJwbGF5ZXItZHJvcGRvd25cIiBjbGFzcz1cInN3YWwyLWRyb3Bkb3duXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lOyBwb3NpdGlvbjogYWJzb2x1dGU7IHdpZHRoOiA4MCU7IG1heC1oZWlnaHQ6IDE1MHB4OyBvdmVyZmxvdy15OiBhdXRvOyBiYWNrZ3JvdW5kOiB3aGl0ZTsgYm9yZGVyOiAxcHggc29saWQgI2NjYzsgYm9yZGVyLXJhZGl1czogNHB4OyB6LWluZGV4OiAxMDAwICFpbXBvcnRhO1wiPjwvZGl2PlxyXG4gICAgICAgICAgICBgLFxyXG4gICAgICAgIHNob3dDYW5jZWxCdXR0b246IHRydWUsXHJcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IFwi0JjQt9C/0YDQsNGC0Lgg0L/QvtC60LDQvdCwXCIsXHJcbiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogXCLQntGC0LrQsNC3XCIsXHJcbiAgICAgICAgZGlkT3BlbjogKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgc2VhcmNoSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInBsYXllci1zZWFyY2hcIik7XHJcbiAgICAgICAgICBjb25zdCBkcm9wZG93biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicGxheWVyLWRyb3Bkb3duXCIpO1xyXG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5zd2FsMi1hY3Rpb25zXCIpLnN0eWxlLnpJbmRleCA9IFwiMFwiO1xyXG4gICAgICAgICAgLy8g0KTQuNC70YLRgNC40YDQsNC90LUg0L3QsCDQuNCz0YDQsNGH0Lgg0Lgg0LDQutGC0YPQsNC70LjQt9C40YDQsNC90LUg0L3QsCDRgdC/0LjRgdGK0LrQsFxyXG4gICAgICAgICAgY29uc3QgdXBkYXRlUGxheWVyTGlzdCA9ICgpID0+IHtcclxuICAgICAgICAgICAgZHJvcGRvd24uaW5uZXJIVE1MID0gXCJcIjsgLy8g0JjQt9GH0LjRgdGC0LLQsNC80LUg0YHQv9C40YHRitC60LBcclxuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRQbGF5ZXJzID0gdGhpcy5nZXRGaWx0ZXJlZFBsYXllcnMoc2VhcmNoSW5wdXQudmFsdWUpO1xyXG4gICAgICAgICAgICBpZiAoZmlsdGVyZWRQbGF5ZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBkcm9wZG93bi5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiOyAvLyDQn9C+0LrQsNC30LLQsNC80LUg0L/QsNC00LDRidC+0YLQviDQvNC10L3RjlxyXG4gICAgICAgICAgICAgIGZpbHRlcmVkUGxheWVycy5mb3JFYWNoKChwbGF5ZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgICAgICAgICAgICBkaXYudGV4dENvbnRlbnQgPSBwbGF5ZXIubmFtZTtcclxuICAgICAgICAgICAgICAgIGRpdi5zdHlsZS5wYWRkaW5nID0gXCI4cHhcIjtcclxuICAgICAgICAgICAgICAgIGRpdi5zdHlsZS5jdXJzb3IgPSBcInBvaW50ZXJcIjtcclxuICAgICAgICAgICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dC52YWx1ZSA9IHBsYXllci5uYW1lOyAvLyDQkNCy0YLQvtC80LDRgtC40YfQvdC+INC/0L7Qv9GK0LvQstCw0LzQtSDQv9C+0LvQtdGC0L5cclxuICAgICAgICAgICAgICAgICAgZHJvcGRvd24uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiOyAvLyDQodC60YDQuNCy0LDQvNC1INGB0L/QuNGB0YrQutCwXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQbGF5ZXJJZCA9IHBsYXllci5pZDsgLy8g0JfQsNC/0LDQt9Cy0LDQvNC1IElEINC90LAg0LjQt9Cx0YDQsNC90LjRjyDQuNCz0YDQsNGHXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGRyb3Bkb3duLmFwcGVuZENoaWxkKGRpdik7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgZHJvcGRvd24uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiOyAvLyDQodC60YDQuNCy0LDQvNC1LCDQsNC60L4g0L3Rj9C80LAg0YHRitCy0L/QsNC00LXQvdC40Y9cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAvLyDQodC70YPRiNCw0LzQtSDQstGK0LLQtdC20LTQsNC90LUg0L3QsCDRgtC10LrRgdGCXHJcbiAgICAgICAgICBzZWFyY2hJbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgdXBkYXRlUGxheWVyTGlzdCk7XHJcblxyXG4gICAgICAgICAgLy8g0KHQutGA0LjQstCw0LzQtSDRgdC/0LjRgdGK0LrQsCwg0LDQutC+INC30LDQs9GD0LHQuCDRhNC+0LrRg9GBXHJcbiAgICAgICAgICBzZWFyY2hJbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gKGRyb3Bkb3duLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIiksIDIwMCk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAvLyDQn9C+0LrQsNC30LLQsNC80LUg0YHQv9C40YHRitC60LAg0L7RgtC90L7QstC+INC/0YDQuCDQutC70LjQuiDQsiDQv9C+0LvQtdGC0L5cclxuICAgICAgICAgIHNlYXJjaElucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCB1cGRhdGVQbGF5ZXJMaXN0KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8qICBwcmVDb25maXJtOiAoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBzZWFyY2hJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicGxheWVyLXNlYXJjaFwiKTtcclxuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkUGxheWVySWQgPSBzZWFyY2hJbnB1dC5kYXRhc2V0LnNlbGVjdGVkUGxheWVySWQ7XHJcblxyXG4gICAgICAgICAgaWYgKCFzZWxlY3RlZFBsYXllcklkKSB7XHJcbiAgICAgICAgICAgIFN3YWwuc2hvd1ZhbGlkYXRpb25NZXNzYWdlKFwi0JzQvtC70Y8sINC40LfQsdC10YDQtdGC0LUg0LjQs9GA0LDRhyDQvtGCINGB0L/QuNGB0YrQutCwIVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHNlbGVjdGVkUGxheWVySWQ7XHJcbiAgICAgICAgfSwqL1xyXG4gICAgICB9KS50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0LmlzQ29uZmlybWVkICYmIHJlc3VsdC52YWx1ZSkge1xyXG4gICAgICAgICAgdGhpcy5zZW5kSW52aXRlKHJlc3VsdC52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8g0KTQuNC70YLRgNC40YDQsNC90LUg0L3QsCDQuNCz0YDQsNGH0LjRgtC1INGB0L/QvtGA0LXQtCDRgtGK0YDRgdC10L3QtdGC0L5cclxuICAgIGdldEZpbHRlcmVkUGxheWVycyhxdWVyeSA9IFwiXCIpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucGxheWVycy5maWx0ZXIoKHBsYXllcikgPT5cclxuICAgICAgICBwbGF5ZXIubmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgocXVlcnkudG9Mb3dlckNhc2UoKSlcclxuICAgICAgKTtcclxuICAgIH0sXHJcblxyXG4gICAgYXN5bmMgZmV0Y2hQbGF5ZXJzKCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXCIvYXBpL21hbmFnZS9hdmFpbGFibGUtcGxheWVyc1wiKTtcclxuICAgICAgICB0aGlzLnBsYXllcnMgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgU3dhbC5maXJlKFwi0JPRgNC10YjQutCwXCIsIFwi0J3QtdGD0YHQv9C10YjQvdC+INC30LDRgNC10LbQtNCw0L3QtSDQvdCwINC40LPRgNCw0YfQuC5cIiwgXCJlcnJvclwiKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjbG9zZU1vZGFsKCkge1xyXG4gICAgICB0aGlzLmVtYWlsID0gXCJcIjtcclxuICAgIH0sXHJcbiAgICBhc3luYyBzZW5kSW52aXRlKCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXCIvYXBpL21hbmFnZS9zZW5kLWludml0ZVwiLCB7XHJcbiAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgICAgaGVhZGVyczogeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxyXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICBwbGF5ZXJJZDogdGhpcy5zZWxlY3RlZFBsYXllcklkLFxyXG4gICAgICAgICAgICB0ZWFtSWQ6IHRoaXMudGVhbUlkLFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJqZGtkOlwiLCB0aGlzLnNlbGVjdGVkUGxheWVySWQpO1xyXG5cclxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcblxyXG4gICAgICAgIGlmIChyZXNwb25zZS5vaykge1xyXG4gICAgICAgICAgU3dhbC5maXJlKFxyXG4gICAgICAgICAgICBcItCj0YHQv9C10YjQvdC+IVwiLFxyXG4gICAgICAgICAgICByZXN1bHQubWVzc2FnZSB8fCBcItCf0L7QutCw0L3QsNGC0LAg0LUg0LjQt9C/0YDQsNGC0LXQvdCwLlwiLFxyXG4gICAgICAgICAgICBcInN1Y2Nlc3NcIlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuY2xvc2VNb2RhbCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBTd2FsLmZpcmUoXHJcbiAgICAgICAgICAgIFwi0JPRgNC10YjQutCwXCIsXHJcbiAgICAgICAgICAgIHJlc3VsdC5lcnJvciB8fCBcItCd0LXRg9GB0L/QtdGI0L3QviDQuNC30L/RgNCw0YnQsNC90LUg0L3QsCDQv9C+0LrQsNC90LDRgtCwLlwiLFxyXG4gICAgICAgICAgICBcImVycm9yXCJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIFN3YWwuZmlyZShcItCT0YDQtdGI0LrQsFwiLCBcItCS0YrQt9C90LjQutC90LAg0L/RgNC+0LHQu9C10Lwg0YEg0LLRgNGK0LfQutCw0YLQsC5cIiwgXCJlcnJvclwiKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICB9LFxyXG59O1xyXG48L3NjcmlwdD5cclxuXHJcbjxzdHlsZSBzY29wZWQ+XHJcbi5tb2RhbCB7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xyXG59XHJcbjwvc3R5bGU+XHJcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==*/