

@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@700&display=swap');
/*
 * Import @mixtape CSS.
 */
/**
 * Variables
 */
/* Breakpoints */
/* Specific breakpoint for global & dropdown navigation */
/* Util media queries */
:root {
  /* System colours */
  --colour-background: hsl(0deg 0% 100%);
  --colour-background-alt: hsl(0deg 0% 95%);
  --colour-foreground: hsl(0deg 0% 0%);
  --colour-foreground-alt: hsl(0deg 0% 25%);
  --colour-link: hsl(218deg 100% 49%);
  --colour-link-hover: hsl(0deg 0% 0%);
  --colour-border: hsl(0deg 0% 90%);
  --colour-overlay: hsl(0deg 0% 100% / 50%);

  /* Brand colors */
  --colour-primary: hsl(0deg 0% 0%);
  --colour-primary-light: hsl(0deg 0% 90%);
  --colour-secondary: hsl(218deg 100% 49%);
  --colour-secondary-light: hsl(218deg 100% 95%);
  --colour-tertiary: hsl(0deg 0% 25%);
  --colour-tertiary-light: hsl(0deg 0% 95%);

  /* Reverse colors */
  --colour-foreground-reverse: hsl(0deg 0% 100%);
  --colour-foreground-alt-reverse: hsl(0deg 0% 95%);
  --colour-background-reverse: hsl(0deg 0% 0%);
  --colour-link-reverse: hsl(218deg 100% 95%);
  --colour-link-hover-reverse: hsl(0deg 0% 100%);
  --colour-border-reverse: hsl(0deg 0% 10%);
  --colour-overlay-reverse: hsl(0deg 0% 0% / 50%);

  /* Original colors (to undo overiding) */
  --colour-foreground-orig: hsl(0deg 0% 0%);
  --colour-foreground-alt-orig: hsl(0deg 0% 25%);
  --colour-background-orig: hsl(0deg 0% 100%);
  --colour-link-orig: hsl(218deg 100% 49%);
  --colour-link-hover-orig: hsl(0deg 0% 0%);
  --colour-border-orig: hsl(0deg 0% 90%);
  --colour-overlay-orig: hsl(0deg 0% 100% / 50%);

  /* State colours */
  --colour-error-foreground: hsl(0deg 66% 46%);
  --colour-error-background: hsl(0deg 66% 95%);
  --colour-success-foreground: hsl(123deg 40% 35%);
  --colour-success-background: hsl(123deg 40% 95%);
  --colour-warning-foreground: hsl(31deg 93% 45%);
  --colour-warning-background: hsl(31deg 93% 95%);
  --colour-info-foreground: hsl(218deg 100% 49%);
  --colour-info-background: hsl(218deg 100% 95%);

  /* Typography */
  --font-family: system-ui, sans-serif;
  --font-family-heading: system-ui, sans-serif;

  --type-ratio: 1.25;
  --type-ratio-small: 1.125;
  --base-font-size: 1rem;
  --font-size: var(--base-font-size);
  --font-size-s: calc(var(--base-font-size) / var(--type-ratio-small));
  --font-size-xs: calc(var(--font-size-s) / var(--type-ratio-small));
  --font-size-sm: calc(var(--base-font-size) * var(--type-ratio-small));
  --font-size-m: calc(var(--base-font-size) * var(--type-ratio));
  --font-size-l: calc(var(--font-size-m) * var(--type-ratio));
  --font-size-xl: calc(var(--font-size-l) * var(--type-ratio));
  --font-size-xxl: calc(var(--font-size-xl) * var(--type-ratio));
  --font-size-xxxl: calc(var(--font-size-xxl) * var(--type-ratio));
  --font-size-diff: 0.3;

  --line-height: 1.6;
  --line-height-h: 1.2;
  --line-height-ui: 0.9rem;

  --font-weight-normal: 400;
  --font-weight-bold: 700;

  /* Spacing */
  --spacing-xxxxs: 0.25em;
  --spacing-xxxs: 0.5em;
  --spacing-xxs: 0.75em;
  --spacing-xs: 0.875em;
  --spacing-s: 1em;
  --spacing-m: 1.5em;
  --spacing-l: 2em;
  --spacing-xl: 2.5em;
  --spacing-xxl: 3em;
  --spacing-xxxl: 3.5em;
  --spacing-xxxxl: 3.5em;
  --spacing-ul: 4.5em;
  --spacing-uul: 5em;
  --spacing-uuul: 5.5em;

  --outline-width: 0.125rem;
  --outline-offset: 0;
  --outline-style: solid;
  --outline-color: hsl(218deg 100% 49%);

  /* Layout */
  --container-max-width-narrow: 58ch;
  --container-max-width: 76ch;
  --container-plus: 10rem;
  --gap-s: 1em;
  --gap: 1.5em;
  --gap-l: 2em;
  --gap-xl: 2.5em;
  --section-s: var(--spacing-s);
  --section-m: var(--spacing-m);
  --section-l: var(--spacing-xl);
  --section-xl: var(--spacing-uul);
  --breakpoint-xs: 26.25rem;
  --breakpoint-s: 33.75rem;
  --breakpoint-m: 45rem;
  --breakpoint-l: 59.125rem;
  --breakpoint-xl: 68.75rem;

  /* Utility */
  --shadow-color: hsl(0deg 0% 25%);
  --shadow-size: 0.875em;
  --shadow-shape: 0 0 var(--shadow-size);
  --box-shadow: var(--shadow-shape) var(--shadow-color);
  --border-radius: 0.1875rem;
  --border-radius-l: 2em;
  --border-radius-round: 50%;
  --ratio: 16 / 9;
  --ease: cubic-bezier(0.25, 0, 0.3, 1);
  --scroll-margin: var(--spacing-m);

  /* Generic */
  --blockquote-line-width: 0.375rem;
  --blockquote-line-color: currentcolor;
  --form-element-height: var(--spacing-xxl);
  --form-spacing: var(--spacing-s);
  --form-border-width: 0.125rem;
}
@media (width < 720px) {
  :root {
    --section-s: var(--spacing-xxs);
    --section-m: var(--spacing-s);
    --section-l: var(--spacing-l);
    --section-xl: var(--spacing-xl);
  }
}
@layer popover-polyfill, defaults, layout, elements, components, utilities;
/**
 * Colors
 *
 * Colors are defined in the constants package. View the [Constants package](https://github.com/previousnext/mixtape/tree/master/packages/constants) on github.
 *
 * Markup: colors.twig
 *
 * Style guide: base.colors
 */
/**
 * Backgrounds
 *
 * Colors are defined in the constants package. View the [Constants package](https://github.com/previousnext/mixtape/tree/master/packages/constants) on github.
 *
 * .background--alt - Alternative
 * .background--reverse - Reverse
 *
 * Default: false
 *
 * Markup: backgrounds.twig
 *
 * Style guide: base.colors.backgrounds
 */
@layer defaults {
  [class*="background--"] {
    --colour-border: var(--colour-border-orig);
    --colour-link: var(--colour-link-orig);
    --colour-link-hover: var(--colour-link-hover-orig);
    --colour-background: var(--colour-background-orig);
    --colour-foreground: var(--colour-foreground-orig);

    background-color: var(--colour-background);
    color: var(--colour-foreground);
  }

  .background--reset {
    /* use to revert .background--reverse on children */
  }

  .background--alt {
    --colour-background: var(--colour-background-alt);
  }

  .background--image {
    --background-img-brightness: 1;
    --background-img-saturate: 1.25;
    --background-img-opacity: 0.5;

    & > img {
      object-fit: cover;
      position: absolute;
      inline-size: 100%;
      min-block-size: 100%;
      filter: brightness(var(--background-img-brightness))
        saturate(var(--background-img-saturate))
        opacity(var(--background-img-opacity));
    }
  }

  .background--reverse {
    --colour-border: var(--colour-border-reverse);
    --colour-link: var(--colour-link-reverse);
    --colour-link-hover: var(--colour-link-hover-reverse);
    --colour-background: var(--colour-background-reverse);
    --colour-foreground: var(--colour-foreground-reverse);

    & .background--image {
      --background-img-brightness: 0.45;
      --background-img-opacity: 1;
    }
  }
}
@layer utilities {
  .animated--fade-in {
    animation: fade-in 0.5s var(--ease);
  }

  .animated--fade-out {
    animation: fade-out 0.5s var(--ease);
  }

  .animated--spin::before {
    animation: spin 2s linear infinite;
  }

  .animated--scale-up {
    animation: scale-up 0.5s var(--ease);
  }

  .animated--scale-down {
    animation: scale-down 0.5s var(--ease);
  }
}
@keyframes fade-in {
  to {
    opacity: 1;
  }
}
@keyframes fade-out {
  to {
    opacity: 0;
  }
}
@keyframes spin {
  to {
    transform: rotate(1turn);
  }
}
@keyframes scale-up {
  to {
    transform: scale(1.25);
  }
}
@keyframes scale-down {
  to {
    transform: scale(0.75);
  }
}
@media (prefers-reduced-motion: reduce) {
  *,
  ::before,
  ::after {
    animation-delay: -1ms !important;
    animation-duration: 1ms !important;
    animation-iteration-count: 1 !important;
    background-attachment: initial !important;
    scroll-behavior: auto !important;
    transition-delay: 0s !important;
    transition-duration: 0s !important;
  }
}
/**
 * Base
 *
 * Style guide: base
 */
@layer defaults {
  *,
  *::before,
  *::after {
    box-sizing: border-box;
    background-repeat: no-repeat;
  }

  * {
    margin: 0;
  }

  :focus {
    scroll-padding-block-end: 4vh;
  }

  :focus-visible {
    --outline-size: max(0.125rem, 0.15em);

    outline: var(--outline-width, var(--outline-size))
      var(--outline-style, solid) var(--outline-color, currentcolor);
    outline-offset: var(--outline-offset, var(--outline-size));
  }

  html {
    block-size: 100%;
    font-size: 100%; /* 16px in most browsers */
    font-family: var(--font-family);
    line-height: var(--line-height);
    scroll-behavior: smooth;
  }

  .translated-rtl {
    direction: rtl;
  }

  body {
    font-size: var(--font-size);
    color: var(--colour-foreground);
    accent-color: var(--colour-primary);
    text-rendering: optimizespeed;
    block-size: 100%;
  }

  :target,
  [id],
  .has-scroll-margin {
    scroll-margin-block-start: calc(
      var(--sticky-offset, 0rem) + var(--scroll-margin)
    );
  }

  :is(b, strong) {
    font-weight: var(--font-weight-bold);
  }

  a:where([href]) {
    -webkit-text-decoration: underline;
    text-decoration: underline;
    text-decoration-thickness: max(0.08em, 1px);
    text-decoration-skip-ink: auto;
    text-underline-offset: 0.15em;

    &:active {
      text-underline-offset: 0.2em;
      text-decoration-thickness: max(0.09em, 2px);
    }

    @media (hover: hover){

    &:hover {
      text-underline-offset: 0.2em;
      text-decoration-thickness: max(0.09em, 2px);
    }
    }
  }

  :is(ol, ul) {
    padding-inline-start: var(--spacing-m);

    &[role="list"] {
      list-style: none;
      padding-inline-start: 0;
    }
  }

  dl {
    display: flex;
    flex-direction: column;
    gap: var(--spacing-xs);

    & div {
      display: flex;
      gap: var(--spacing-s);
    }
  }

  p {
    text-wrap: pretty;
  }
}
@layer utilities {
  .vertical-flow {
    /* Default vertical flow. */

    & > :where(:not(:first-child)) {
      margin-block-start: var(--gap);
    }

    & > .vertical-flow__collapse {
      margin-block-start: 0;
    }

    /* Rich text vertical flow is enhanced */
    &.rich-text > .text--lede:where(:not(:first-child)) {
      margin-block-start: var(--gap-xl);
    }
  }

  .vertical-flow-flex {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--gap);

    & > * {
      margin: 0;

      &.container {
        inline-size: 100%;
      }
    }
  }

  .horizontal-flow-flex {
    display: flex;
    flex-wrap: wrap;
    gap: var(--gap);

    & > * {
      margin: 0;
    }
  }
}
/**
 * Typography
 *
 * Typography is defined in the Base package. View the [Base package](https://github.com/previousnext/mixtape/tree/master/packages/base) on github.
 * Best displayed when wrapped in the `rich-text` class.
 *
 * Markup: typography.twig
 *
 * Wrapper: rich-text vertical-flow
 *
 * Style guide: base.typography
 */
@layer defaults {
  :is(
      .headline,
      h1,
      .heading--xxl,
      h2,
      .heading--xl,
      h3,
      .heading--l,
      h4,
      .heading--m,
      h5,
      .heading--s,
      h6,
      .heading--xs
    ) {
    font-family: var(--font-family-heading);
    line-height: var(--line-height-h);
    font-size: var(--font-size);
    font-weight: var(--font-weight-bold);
    text-wrap: balance;
  }

  @supports (font-size: 1cqi) {
    :is(
        .headline,
        h1,
        .heading--xxl,
        h2,
        .heading--xl,
        h3,
        .heading--l,
        h4,
        .heading--m,
        h5,
        .heading--s
      ) {
      --font-min: calc(
        var(--font-size) - var(--font-size) * var(--font-size-diff, 0.3)
      );

      font-size: clamp(
        max(var(--base-font-size), var(--font-min)),
        var(--font-min) + 1cqi,
        var(--font-size)
      );
    }
  }

  .headline {
    --font-size: var(--font-size-xxxl);
  }

  h1,
  .heading--xxl {
    --font-size: var(--font-size-xxl);
  }

  h2,
  .heading--xl {
    --font-size: var(--font-size-xl);
  }

  h3,
  .heading--l {
    --font-size: var(--font-size-l);
  }

  h4,
  .heading--m {
    --font-size: var(--font-size-m);
  }

  h5,
  .heading--s {
    --font-size: var(--base-font-size);
  }

  h6,
  .heading--xs {
    --font-size: var(--font-size-s);
  }
}
@layer defaults {
  blockquote {
    padding-inline-start: var(--gap);
    border-inline-start: var(--blockquote-line-width) solid
      var(--blockquote-line-color);
  }
}
@layer defaults {
  hr {
    display: block;
    block-size: 0;
    border: 0;
    border-block-start: 1px solid var(--colour-border);
  }
}
/**
 * Links
 *
 * Links are defined in the Base package. View the [Base package](https://github.com/previousnext/mixtape/tree/master/packages/base) on github.
 *
 * .link--external - External Link
 * .link--more - More Link
 *
 * Markup: link.twig
 *
 * Wrapper: rich-text
 *
 * Style guide: base.link
 */
@layer defaults {
  a:where([href]):is(.link, .link--more, .link--external),
  .rich-text a:where([href]:not([class])) {
    color: var(--colour-link);
    transition: color 0.2s var(--ease);

    @media (hover: hover){

    &:hover {
      color: var(--colour-link-hover);
    }
    }

    &:focus-visible {
      outline-offset: var(--spacing-xxxs);
    }
  }

  a:where([href]).link--external {
    margin-inline-end: var(--spacing-xxxs);
    display: inline-flex;
    gap: var(--spacing-xxxs);
    align-items: center;

    &::after {
      content: "";
      display: inline-block;
      mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M15 0H8v2h4.6L6.3 8.3l1.4 1.4L14 3.4V8h2V1c0-.6-.4-1-1-1z'/%3E%3Cpath d='M14 16H1c-.6 0-1-.4-1-1V2c0-.6.4-1 1-1h4v2H2v11h11v-3h2v4c0 .6-.4 1-1 1z'/%3E%3C/svg%3E");
      mask-size: contain;
      block-size: var(--spacing-s);
      inline-size: var(--spacing-s);
      background-color: currentcolor;
      transition: transform 0.5s var(--ease);
    }

    @media (hover: hover){

    &:hover::after {
      transform: translateY(-3px);
    }
    }
  }

  a:where([href]).link--more {
    font-weight: var(--font-weight-bold);
    display: inline-flex;
    gap: var(--spacing-s);
  }
}
/**
 * Text Sizes
 *
 * Text Sizes are defined in the Base package. View the [Base package](https://github.com/previousnext/mixtape/tree/master/packages/base) on github.
 *
 * Wrapper: vertical-flow
 *
 * Markup: text-sizes.twig
 *
 * Style guide: base.typography.text-sizes
 */
@layer utlities {
  :is(
      .text--section-headline,
      .text--embellished-headline,
      .text--lede,
      .text--xs,
      .text--s,
      .text--m,
      .text--l,
      .text--xl,
      .text--xxl,
      .text--xxxl,
      .text--fluid
    ) {
    font-size: var(--font-size);
  }

  @supports (font-size: 1cqi) {
    :is(
        .text--section-headline,
        .text--lede,
        .text--m,
        .text--l,
        .text--xl,
        .text--xxl,
        .text--xxxl,
        .text--fluid
      ) {
      --font-min: calc(
        var(--font-size) - var(--font-size) * var(--font-size-diff, 0.3)
      );

      font-size: clamp(
        max(var(--base-font-size), var(--font-min)),
        var(--font-min) + 1cqi,
        var(--font-size)
      );
    }
  }

  .text--section-headline {
    --font-size: var(--font-size-m);

    font-weight: var(--font-weight-bold);
    font-family: var(--font-family-heading);
    color: var(--colour-foreground-alt);
    margin-block-start: 0;
    text-wrap: balance;

    & + :is(h2, h3) {
      margin-block-start: var(--spacing-xxxxs) !important;
    }
  }

  .text--embellished-headline {
    --font-size: var(--font-size-s);

    text-transform: uppercase;
    position: relative;
    font-weight: var(--font-weight-bold);
    font-family: var(--font-family-heading);
    margin-block: 0 var(--spacing-l);
    text-wrap: balance;

    &::after {
      content: "";
      display: block;
      position: absolute;
      inline-size: var(--spacing-xxxl);
      block-size: 3px;
      background-color: var(--colour-primary);
      inset-block-start: var(--gap);
    }
  }

  .text--lede {
    --font-size: var(--font-size-sm);
  }

  .text--xxxl {
    --font-size: var(--font-size-xxxl);

    line-height: var(--line-height-h);
  }

  .text--xxl {
    --font-size: var(--font-size-xxl);

    line-height: var(--line-height-h);
  }

  .text--xl {
    --font-size: var(--font-size-xl);

    line-height: var(--line-height-h);
  }

  .text--l {
    --font-size: var(--font-size-l);

    line-height: var(--line-height-h);
  }

  .text--m {
    --font-size: var(--font-size-m);
  }

  .text--s {
    --font-size: var(--font-size-s);
  }

  .text--xs {
    --font-size: var(--font-size-xs);
  }
}
@layer utlities {
  .text--left {
    text-align: start;
  }

  .text--right {
    text-align: end;
  }

  .text--center {
    text-align: center;
  }
}
/**
 * Spacing
 *
 *
 * Spacing is defined in the Base package. View the [Base package](https://github.com/previousnext/mixtape/tree/master/packages/base) on github.
 * Reusable spacing styles. Use spacing--reset to remove spacing.
 *
 * .spacing--xs - .spacing--xs
 * .spacing--s - .spacing--s
 * .spacing--m - .spacing--m
 * .spacing--l - .spacing--l
 * .spacing--xl - .spacing--xl
 * .spacing--top-xs - .spacing--top-xs
 * .spacing--top-s - .spacing--top-s
 * .spacing--top-m - .spacing--top-m
 * .spacing--top-l - .spacing--top-l
 * .spacing--top-xl - .spacing--top-xl
 * .spacing--bottom-xs - .spacing--bottom-xs
 * .spacing--bottom-s - .spacing--bottom-s
 * .spacing--bottom-m - .spacing--bottom-m
 * .spacing--bottom-l - .spacing--bottom-l
 * .spacing--bottom-xl - .spacing--bottom-xl
 * .spacing--left-xs - .spacing--left-xs
 * .spacing--left-s - .spacing--left-s
 * .spacing--left-m - .spacing--left-m
 * .spacing--left-l - .spacing--left-l
 * .spacing--left-xl - .spacing--left-xl
 * .spacing--right-xs - .spacing--right-xs
 * .spacing--right-s - .spacing--right-s
 * .spacing--right-m - .spacing--right-m
 * .spacing--right-l - .spacing--right-l
 * .spacing--right-xl - .spacing--right-xl
 *
 * Default: false
 *
 * Markup: spacing.twig
 *
 * Style guide: base.spacing
 */
/* stylelint-disable custom-property-pattern */
@layer utlities {
  .spacing--reset {
    padding: 0 !important;
  }

  .spacing--top-reset {
    padding-block-start: 0 !important;
  }

  .spacing--bottom-reset {
    padding: 0 !important;
  }

  .spacing--left-reset {
    padding: 0 !important;
  }

  .spacing--right-reset {
    padding: 0 !important;
  }

  .spacing--xxs {
    padding: var(--spacing-xxs);
  }

  .spacing--top-xxs {
    padding-block-start: var(--spacing-xxs);
  }

  .spacing--bottom-xxs {
    padding-block-end: var(--spacing-xxs);
  }

  .spacing--left-xxs {
    padding-inline-start: var(--spacing-xxs);
  }

  .spacing--right-xxs {
    padding-inline-end: var(--spacing-xxs);
  }
  .spacing--xs {
    padding: var(--spacing-xs);
  }
  .spacing--top-xs {
    padding-block-start: var(--spacing-xs);
  }
  .spacing--bottom-xs {
    padding-block-end: var(--spacing-xs);
  }
  .spacing--left-xs {
    padding-inline-start: var(--spacing-xs);
  }
  .spacing--right-xs {
    padding-inline-end: var(--spacing-xs);
  }
  .spacing--s {
    padding: var(--spacing-s);
  }
  .spacing--top-s {
    padding-block-start: var(--spacing-s);
  }
  .spacing--bottom-s {
    padding-block-end: var(--spacing-s);
  }
  .spacing--left-s {
    padding-inline-start: var(--spacing-s);
  }
  .spacing--right-s {
    padding-inline-end: var(--spacing-s);
  }
  .spacing--m {
    padding: var(--spacing-m);
  }
  .spacing--top-m {
    padding-block-start: var(--spacing-m);
  }
  .spacing--bottom-m {
    padding-block-end: var(--spacing-m);
  }
  .spacing--left-m {
    padding-inline-start: var(--spacing-m);
  }
  .spacing--right-m {
    padding-inline-end: var(--spacing-m);
  }
  .spacing--l {
    padding: var(--spacing-l);
  }
  .spacing--top-l {
    padding-block-start: var(--spacing-l);
  }
  .spacing--bottom-l {
    padding-block-end: var(--spacing-l);
  }
  .spacing--left-l {
    padding-inline-start: var(--spacing-l);
  }
  .spacing--right-l {
    padding-inline-end: var(--spacing-l);
  }
  .spacing--xl {
    padding: var(--spacing-xl);
  }
  .spacing--top-xl {
    padding-block-start: var(--spacing-xl);
  }
  .spacing--bottom-xl {
    padding-block-end: var(--spacing-xl);
  }
  .spacing--left-xl {
    padding-inline-start: var(--spacing-xl);
  }
  .spacing--right-xl {
    padding-inline-end: var(--spacing-xl);
  }
  .spacing--xxl {
    padding: var(--spacing-xxl);
  }
  .spacing--top-xxl {
    padding-block-start: var(--spacing-xxl);
  }
  .spacing--bottom-xxl {
    padding-block-end: var(--spacing-xxl);
  }
  .spacing--left-xxl {
    padding-inline-start: var(--spacing-xxl);
  }
  .spacing--right-xxl {
    padding-inline-end: var(--spacing-xxl);
  }
  .spacing--xxxl {
    padding: var(--spacing-xxxl);
  }
  .spacing--top-xxxl {
    padding-block-start: var(--spacing-xxxl);
  }
  .spacing--bottom-xxxl {
    padding-block-end: var(--spacing-xxxl);
  }
  .spacing--left-xxxl {
    padding-inline-start: var(--spacing-xxxl);
  }
  .spacing--right-xxxl {
    padding-inline-end: var(--spacing-xxxl);
  }
  .spacing--xxxxl {
    padding: var(--spacing-xxxxl);
  }
  .spacing--top-xxxxl {
    padding-block-start: var(--spacing-xxxxl);
  }
  .spacing--bottom-xxxxl {
    padding-block-end: var(--spacing-xxxxl);
  }
  .spacing--left-xxxxl {
    padding-inline-start: var(--spacing-xxxxl);
  }
  .spacing--right-xxxxl {
    padding-inline-end: var(--spacing-xxxxl);
  }
  .spacing--ul {
    padding: var(--spacing-ul);
  }
  .spacing--top-ul {
    padding-block-start: var(--spacing-ul);
  }
  .spacing--bottom-ul {
    padding-block-end: var(--spacing-ul);
  }
  .spacing--left-ul {
    padding-inline-start: var(--spacing-ul);
  }
  .spacing--right-ul {
    padding-inline-end: var(--spacing-ul);
  }
  .spacing--uul {
    padding: var(--spacing-uul);
  }
  .spacing--top-uul {
    padding-block-start: var(--spacing-uul);
  }
  .spacing--bottom-uul {
    padding-block-end: var(--spacing-uul);
  }
  .spacing--left-uul {
    padding-inline-start: var(--spacing-uul);
  }
  .spacing--right-uul {
    padding-inline-end: var(--spacing-uul);
  }
  .spacing--uuul {
    padding: var(--spacing-uuul);
  }
  .spacing--top-uuul {
    padding-block-start: var(--spacing-uuul);
  }
  .spacing--bottom-uuul {
    padding-block-end: var(--spacing-uuul);
  }
  .spacing--left-uuul {
    padding-inline-start: var(--spacing-uuul);
  }
  .spacing--right-uuul {
    padding-inline-end: var(--spacing-uuul);
  }
}
/**
 * Images
 *
 * Image styles are defined in the Base package. View the [Base package](https://github.com/previousnext/mixtape/tree/master/packages/base) on github.
 *
 * .image--left - .image--left
 * .image--right - .image--right
 *
 * Wrapper: vertical-flow
 *
 * Markup: image.twig
 *
 * Style guide: base.images
 */
@layer defaults {
  figure {
    margin: 0;
    display: table;
    max-inline-size: 100%;

    & img {
      inline-size: 100%;
      vertical-align: baseline;
    }
  }

  figcaption {
    font-size: var(--font-size-xs);
    line-height: var(--line-height-h);
    caption-side: bottom;
    display: table-caption;
  }

  img {
    vertical-align: text-bottom;
    max-inline-size: 100%;
    block-size: auto;
  }

  svg:not([fill]) {
    fill: currentcolor;
  }
}
@layer defaults {
  :is(.image--left, .image--right, figure.align-right, figure.align-left) {
    @media (width >= 540px) {
      display: table;
      max-inline-size: 50%;
      margin-block-end: var(--spacing-s);

      &:first-child {
        margin-block-start: 0;

        & + * {
          margin-block-start: 0 !important;
        }
      }

      & figcaption {
        display: table-caption;
        caption-side: bottom;
      }
    }
  }

  :is(
      .image--left,
      figure.align-left,
      [dir="rtl"] .image--right,
      [dir="rtl"] figure.align-right,
      .translated-rtl .image--right,
      .translated-rtl figure.align-right
    ) {
    @media (width >= 540px) {
      float: left;
      margin-inline: 0 var(--spacing-m);
    }
  }

  :is(
      .image--right,
      figure.align-right,
      [dir="rtl"] .image--left,
      [dir="rtl"] figure.align-left,
      .translated-rtl .image--left,
      .translated-rtl figure.align-left
    ) {
    @media (width >= 540px) {
      float: right;
      margin-inline: var(--spacing-m) 0;
    }
  }
}
/**
 * Video
 *
 * Video styles are defined in the Base package. View the [Base package](https://github.com/previousnext/mixtape/tree/master/packages/base) on github.
 *
 * Wrapper: vertical-flow
 *
 * Markup: video.twig
 *
 * Style guide: base.video
 */
@layer defaults {
  .video {
    &,
    & :is(embed, object, iframe) {
      aspect-ratio: 16 / 9;
      block-size: 100%;
      inline-size: 100%;
    }
  }
}
/**
 * Table
 *
 * Tables are defined in the Base package. View the [Base package](https://github.com/previousnext/mixtape/tree/master/packages/base) on github.
 *
 * .table--flush - A table with flush edges
 * .table--striped - Zebra striped table
 * .table--small - A small table usefull for large amounts of data
 *
 * Markup: table.twig
 *
 * Style guide: base.table
 */
/**
 * Table Responsive
 *
 * Table Responsive is defined in the Base package. View the [Base package](https://github.com/previousnext/mixtape/tree/master/packages/base) on github.
 *
 * Allow tables to be scrollable on small screens.
 *
 * Markup: table-responsive.twig
 *
 * Style guide: base.table.responsive
 */
@layer defaults {
  table {
    inline-size: 100%;
    border-collapse: collapse;
    margin: 0;

    & th {
      font-weight: var(--font-weight-bold);
      text-align: start;
    }

    & :is(td, th) {
      padding: var(--spacing-xxs);
      border-block-end: 1px solid var(--colour-border);
      vertical-align: top;
    }

    & thead :is(td, th) {
      border-color: currentcolor;
    }
  }

  .table--flush {
    & :is(td, th) {
      &:first-child {
        padding-inline-start: 0;
      }

      &:last-child {
        padding-inline-end: 0;
      }
    }
  }

  .table--small {
    & :is(td, th) {
      font-size: var(--font-size-s);
      line-height: var(--line-height-h);
    }
  }

  .table--striped {
    & tbody tr {
      &:nth-child(even) {
        & :is(td, th) {
          background-color: var(--colour-background-alt);
        }
      }
    }
  }

  .table--responsive {
    max-inline-size: 100%;

    @media (width < 720px) {
      overflow-y: scroll;
      -webkit-overflow-scrolling: touch;
      box-shadow: var(--box-shadow) inset;

      & table {
        inline-size: 100%;
        margin-block: 0;
        margin-inline: var(--spacing-s);

        & td {
          min-inline-size: 20ch;
        }
      }
    }
  }
}
/**
 * Print Stylesheet
 */
@media print {
  .contextual {
    display: none;
  }

  .rich-text {
    max-inline-size: 100%;
  }

  figure {
    &.image--breakout {
      max-inline-size: 500px;
      margin-inline-start: 0;

      & figcaption {
        max-inline-size: 100%;
      }
    }
  }
}
/**
 * Section
 *
 * Sections are defined in the Layout package. View the [Layout package](https://github.com/previousnext/mixtape/tree/master/packages/layout) on github.
 * Sections are containers for other components to be placed in. They look after responsive vertical spacing,
 * max-container-width, background colors, and grid column gap. They act as rows for content.
 *
 * Style guide: Layout.section
 */
@layer layout {
  :where(.section) {
    --gutter: clamp(var(--spacing-s), 6vw, var(--spacing-l));
    --full: minmax(var(--gutter), 1fr);
    --narrow: min(var(--container-max-width), 100% - var(--gutter) * 2);
    --feature: minmax(0, var(--spacing-ul));
    --container: minmax(0, var(--container-plus));

    display: grid;
    grid-template-columns:
      [full-start] var(--full)
      [container-start] var(--container)
      [feature-start] var(--feature)
      [narrow-start] var(--narrow) [narrow-end]
      var(--feature) [feature-end]
      var(--container) [container-end]
      var(--full) [full-end];

    & > * {
      grid-column: container;

      &:where(.section) {
        grid-column: full;
        display: grid;
        grid-template-columns: subgrid;
      }
    }
  }

  :where(:is(.section--feature > *, .section__feature)) {
    grid-column: feature;
  }

  :where(:is(.section--narrow > *, .section__narrow)) {
    grid-column: narrow;
  }

  :where(:is(.section--full > *, .section__full)) {
    grid-column: full;
  }

  .container {
    --container-name: container;

    container-name: var(--container-name);
    container-type: inline-size;
  }

  .section--divider {
    border-block-start: 1px solid var(--colour-border);
  }

  .section--s {
    padding-block: var(--section-s);
  }

  .section--m {
    padding-block: var(--section-m);
  }

  .section--l {
    padding-block: var(--section-l);
  }

  .section--xl {
    padding-block: var(--section-xl);
  }

  .section--top-s {
    padding-block-start: var(--section-s);
  }

  .section--top-m {
    padding-block-start: var(--section-m);
  }

  .section--top-l {
    padding-block-start: var(--section-l);
  }

  .section--top-xl {
    padding-block-start: var(--section-xl);
  }

  .section--bottom-s {
    padding-block-end: var(--section-s);
  }

  .section--bottom-m {
    padding-block-end: var(--section-m);
  }

  .section--bottom-l {
    padding-block-end: var(--section-l);
  }

  .section--bottom-xl {
    padding-block-end: var(--section-xl);
  }
}
/**
 * Sections breakouts
 *
 * Uses `subgrid` so no supported in older browsers.
 *
 * Markup: sections-breakout.twig
 *
 * Style guide: Layout.sections-breakoout
 */
/**
 * Sections flows & groups
 *
 * Uses `:has` so is not supported in older browsers.
 * see https://www.bram.us/2022/12/13/quantity-queries-for-islands-of-elements-with-the-same-class-thanks-to-css-has/
 *
 * Markup: sections-flow.twig
 *
 * Style guide: Layout.sections-flow
 */
@layer layout {
  .section--flow {
    padding-block-end: var(--section-l);

    &:is(
        [class*="background"],
        [class*="background"] + .section--flow,
        :not(.section--flow + .section--flow)
      ) {
      padding-block-start: var(--section-l);
    }
  }

  .section--group {
    padding-block: 0;

    /* :first-in-island-of-class */

    &:not(.section--group + .section--group) {
      padding-block-start: var(--section-xl);
    }

    /* :last-in-island-of-class */

    &:not(:has(+ .section--group)) {
      padding-block-end: var(--section-xl);
    }

    /* :single-in-island-of-class */

    &:not(.section--group + .section--group, :has(+ .section--group)) {
      padding-block: var(--section-xl);
    }
  }
}
/**
 * Section Background
 *
 * Section Background is defined in the Layout package. View the [Layout package](https://github.com/previousnext/mixtape/tree/master/packages/layout) on github.
 * A section with additional background image.
 *
 * .background--reverse - Dark
 *
 * Markup: section-background.twig
 *
 * Style guide: Layout.section.background
 */
@layer layout {
  :is(.section--has-background, .section:has(.background--image)) {
    overflow: hidden;
    position: relative;

    & > div {
      position: relative;
    }
  }
}
/**
 * Sections stacked
 *
 * Sections stacked are defined in the Layout package. View the [Layout package](https://github.com/previousnext/mixtape/tree/master/packages/layout) on github.
 * Example of multiple sections stacked with alternating background rows.
 *
 * Markup: sections-stacked.twig
 *
 * Style guide: Layout.sections-stacked
 */
/**
 * Print stylesheet
 */
@media print {
  .section__content {
    max-inline-size: 100%;
  }
}
/**
 * Grid
 *
 * Grid is defined in the layout package. View the [Layout package](https://github.com/previousnext/mixtape/tree/master/packages/layout) on github.
 *
 * Style guide: Layout.grid
 */
@layer layout {
  .grid {
    --grid-repeat: 12;

    list-style: none;
    display: grid;
    grid-template-columns: repeat(var(--grid-repeat), 1fr);
    grid-template-rows: 1fr;
    gap: var(--gap);

    @media (width >= 946px) {
      gap: var(--gap-l);
    }

    &:is(ul, ol) {
      list-style: none;
      padding-inline-start: unset;
    }
  }

  :is(
      .grid--12-col,
      .grid--11-col,
      .grid--10-col,
      .grid--9-col,
      .grid--8-col,
      .grid--7-col,
      .grid--6-col,
      .grid--5-col,
      .grid--4-col,
      .grid--3-col,
      .grid--2-col,
      .grid--1-col
    ) {
    --grid-span: 12;

    grid-column: auto / span var(--grid-span);
  }

  .grid--11-col {
    @media (width >= 720px) {
      --grid-span: 11;
    }
  }

  .grid--10-col {
    @media (width >= 720px) {
      --grid-span: 10;
    }
  }

  .grid--9-col {
    @media (width >= 720px) {
      --grid-span: 9;
    }
  }

  .grid--8-col {
    @media (width >= 720px) {
      --grid-span: 8;
    }
  }

  .grid--7-col {
    @media (width >= 720px) {
      --grid-span: 7;
    }
  }

  .grid--6-col {
    @media (width >= 720px) {
      --grid-span: 6;
    }
  }

  .grid--5-col {
    @media (width >= 540px) {
      --grid-span: 6;
    }

    @media (width >= 720px) {
      --grid-span: 5;
    }
  }

  .grid--4-col {
    @media (width >= 540px) {
      --grid-span: 6;
    }

    @media (width >= 720px) {
      --grid-span: 4;
    }
  }

  .grid--3-col {
    @media (width >= 540px) {
      --grid-span: 6;
    }

    @media (width >= 720px) {
      --grid-span: 3;
    }
  }

  .grid--2-col {
    @media (width >= 540px) {
      --grid-span: 3;
    }

    @media (width >= 720px) {
      --grid-span: 2;
    }
  }

  .grid--1-col {
    @media (width >= 540px) {
      --grid-span: 3;
    }

    @media (width >= 720px) {
      --grid-span: 1;
    }
  }
}
/**
 * Grid (Dynamic)
 *
 * Grid is defined in the layout package. View the [Layout package](https://github.com/previousnext/mixtape/tree/master/packages/layout) on github.
 *
 * Markup: grid-dynamic.twig
 *
 * Style guide: Layout.grid.dynamic
 */
@layer layout {
  .grid--dynamic {
    --grid-repeat: auto-fit;
    --grid-min: 20ch;

    grid-template-columns: repeat(
      var(--grid-repeat),
      minmax(min(100%, var(--grid-min)), 1fr)
    );
  }

  :is(
      .grid--xs-2-cols,
      .grid--sm-2-cols,
      .grid--md-2-cols,
      .grid--md-3-cols,
      .grid--lg-3-cols,
      .grid--md-4-cols,
      .grid--lg-4-cols,
      .grid--xl-4-cols
    ) {
    --grid-repeat: 1;
  }

  .grid--xs-2-cols {
    @media (width >= 420px) {
      --grid-repeat: 2;
    }
  }

  .grid--sm-2-cols {
    @media (width >= 540px) {
      --grid-repeat: 2;
    }
  }

  .grid--md-2-cols {
    @media (width >= 720px) {
      --grid-repeat: 2;
    }
  }

  .grid--md-3-cols {
    @media (width >= 720px) {
      --grid-repeat: 3;
    }
  }

  .grid--lg-3-cols {
    @media (width >= 946px) {
      --grid-repeat: 3;
    }
  }

  .grid--md-4-cols {
    @media (width >= 720px) {
      --grid-repeat: 4;
    }
  }

  .grid--lg-4-cols {
    @media (width >= 946px) {
      --grid-repeat: 4;
    }
  }

  .grid--xl-4-cols {
    @media (width >= 1100px) {
      --grid-repeat: 4;
    }
  }

  .grid--collapse {
    --gap: 0;
  }

  .grid--collapse-cols {
    grid-column-gap: 0;
  }

  .grid--collapse-rows {
    grid-row-gap: 0;
  }
}
@media print {
  .grid {
    display: block;
  }
}
/**
 * Container Grid
 *
 * Grid is defined in the layout package. View the [Layout package](https://github.com/previousnext/mixtape/tree/master/packages/layout) on github.
 *
 * Wrapper: container
 *
 * Style guide: Layout.grid.container
 */
@layer layout {
  .grid.container {
    --container-name: grid-item;

    @container grid-item (min-width: 946px) {
      --gap: var(--gap-l);
    }

    &
      :is(
        .grid--11-col,
        .grid--10-col,
        .grid--9-col,
        .grid--8-col,
        .grid--7-col,
        .grid--6-col,
        .grid--5-col,
        .grid--4-col,
        .grid--3-col,
        .grid--2-col,
        .grid--1-col
      ) {
      --grid-repeat: 12;
      --grid-span: 12;
    }

    & .grid--11-col {
      @container grid-item (min-width: 720px) {
        --grid-span: 11;
      }
    }

    & .grid--10-col {
      @container grid-item (min-width: 720px) {
        --grid-span: 10;
      }
    }

    & .grid--9-col {
      @container grid-item (min-width: 720px) {
        --grid-span: 9;
      }
    }

    & .grid--8-col {
      @container grid-item (min-width: 720px) {
        --grid-span: 8;
      }
    }

    & .grid--7-col {
      @container grid-item (min-width: 720px) {
        --grid-span: 7;
      }
    }

    & .grid--6-col {
      @container grid-item (min-width: 720px) {
        --grid-span: 6;
      }
    }

    & .grid--5-col {
      @container grid-item (min-width: 540px) {
        --grid-span: 6;
      }

      @container grid-item (min-width: 720px) {
        --grid-span: 5;
      }
    }

    & .grid--4-col {
      @container grid-item (min-width: 540px) {
        --grid-span: 6;
      }

      @container grid-item (min-width: 720px) {
        --grid-span: 4;
      }
    }

    & .grid--3-col {
      @container grid-item (min-width: 540px) {
        --grid-span: 6;
      }

      @container grid-item (min-width: 720px) {
        --grid-span: 3;
      }
    }

    & .grid--2-col {
      @container grid-item (min-width: 540px) {
        --grid-span: 3;
      }

      @container grid-item (min-width: 720px) {
        --grid-span: 2;
      }
    }

    & .grid--1-col {
      @container grid-item (min-width: 540px) {
        --grid-span: 3;
      }

      @container grid-item (min-width: 720px) {
        --grid-span: 1;
      }
    }
  }
}
/**
 * Container Grid (dynamic)
 *
 * Grid is defined in the layout package. View the [Layout package](https://github.com/previousnext/mixtape/tree/master/packages/layout) on github.
 *
 * Wrapper: container
 *
 * Style guide: Layout.grid.container-dynamic
 */
@layer layout {
  .grid.container {
    &:is(.grid--dynamic) {
      /* This doesn't play nice in Safari and isn't required, so we unset the container. */
      container-type: unset;
    }

    &:is(
        .grid--xs-2-cols,
        .grid--sm-2-cols,
        .grid--md-2-cols,
        .grid--md-3-cols,
        .grid--lg-3-cols,
        .grid--md-4-cols,
        .grid--lg-4-cols,
        .grid--xl-4-cols
      ) {
      --grid-repeat: 1;
    }

    &.grid--xs-2-cols {
      @container grid-item (min-width: 420px) {
        --grid-repeat: 2;
      }
    }

    &.grid--sm-2-cols {
      @container grid-item (min-width: 540px) {
        --grid-repeat: 2;
      }
    }

    &.grid--md-2-cols {
      @container grid-item (min-width: 720px) {
        --grid-repeat: 2;
      }
    }

    &.grid--md-3-cols {
      @container grid-item (min-width: 720px) {
        --grid-repeat: 3;
      }
    }

    &.grid--lg-3-cols {
      @container grid-item (min-width: 946px) {
        --grid-repeat: 3;
      }
    }

    &.grid--md-4-cols {
      @container grid-item (min-width: 720px) {
        --grid-repeat: 4;
      }
    }

    &.grid--lg-4-cols {
      @container grid-item (min-width: 946px) {
        --grid-repeat: 4;
      }
    }

    &.grid--xl-4-cols {
      @container grid-item (min-width: 1100px) {
        --grid-repeat: 4;
      }
    }
  }
}
@layer utilities {
  .stack {
    display: grid;
    grid-template-areas: "stack";

    & > * {
      grid-area: stack;
    }
  }

  .flex {
    display: flex;
  }

  .place-center {
    place-content: center;
  }

  .align--center {
    margin-inline: auto;
  }

  .align--left {
    margin-inline-end: auto;
  }

  .align--right {
    margin-inline-start: auto;
  }

  .align--bottom {
    margin-block-start: auto;
  }

  .align--top {
    margin-block-end: auto;
  }

  .order--start {
    order: -1;
  }

  .order--1 {
    order: 1;
  }

  .order--2 {
    order: 2;
  }

  .order--3 {
    order: 3;
  }

  .gap--s {
    gap: var(--gap-s);
  }

  .gap--m {
    gap: var(--gap);
  }

  .gap--l {
    gap: var(--gap-l);
  }

  .gap--xl {
    gap: var(--gap-xl);
  }

  .gap--section-l {
    gap: var(--section-l);
  }

  .gap--section-xl {
    gap: var(--section-xl);
  }
}
/**
 * Accordion
 *
 * Wrapper: section section--m
 *
 * Markup: accordion-example.twig
 *
 * View the [Accordion package](https://github.com/previousnext/mixtape/tree/master/packages/accordion) on github.
 *
 * Style guide: Elements.accordion
 */
@layer defaults {
  details {
    & summary {
      list-style-type: none;

      &:is(::-webkit-details-marker, ::marker) {
        display: none;
        content: "";
      }
    }
  }

  :is(mx-details, mx-detailsdiv, mx-detailsmobile) {
    display: block;
  }

  :where(:is(div.accordion, mx-detailsdiv)) {
    & .accordion__toggle {
      appearance: none;
      color: inherit;
      font-size: inherit;
      background: initial;
      border: initial;
      padding: initial;
    }

    & .accordion__content[inert] {
      display: none;
    }
  }
}
@layer components {
  .accordion {
    contain: layout;

    & .accordion__toggle {
      cursor: pointer;
      inline-size: 100%;
    }

    &:is(> h2, > h3, > h4, > h5, > h6) {
      all: unset;
    }
  }

  .accordion--divided {
    --vertical-padding: var(--spacing-xxs);
    --horizontal-padding: 0;

    border-block-end: 1px solid var(--colour-border);

    & .accordion__toggle {
      padding-block: var(--vertical-padding);
      padding-inline: var(--horizontal-padding);
      display: flex;
      justify-content: space-between;

      & .button--icon-only {
        flex-shrink: 0;
        margin-inline-start: var(--spacing-xxs);
      }
    }

    &[open] {
      & .accordion__toggle {
        & .button--icon-only {
          transform: rotate(180deg);
        }
      }

      & .accordion__content {
        border-block-start: 1px solid var(--colour-border);
        padding-block: var(--vertical-padding);
        padding-inline: var(--horizontal-padding);
      }
    }
  }
}
/**
 * Print stylesheet
 */
@media print {
  .accordion {
    & .accordion__content {
      display: block !important;
    }
  }
}
/**
 * Buttons
 *
 * Wrapper: section--m
 *
 * Style guide: Elements.buttons
 */
@layer elements {
  .button {
    --gap: var(--spacing-s);
    --outline-offset: 0.0625rem;
    --outline-width: 0.25rem;
    --border-width: 0.125rem;
    --border-colour: var(--colour-border);
    --radius: var(--border-radius-l);
    --vertical-padding: var(--spacing-xxs);
    --horizontal-padding: var(--spacing-m);
    --background: var(--colour-background);
    --foreground: var(--colour-foreground);

    display: inline-flex;
    inline-size: -moz-fit-content;
    inline-size: fit-content;
    gap: var(--gap);
    font-size: var(--font-size);
    font-weight: var(--font-weight-bold);
    font-family: var(--font-family);
    line-height: var(--line-height-ui);
    border: var(--border-width) solid var(--border-colour);
    border-radius: var(--radius);
    padding-block: var(--vertical-padding);
    padding-inline: var(--horizontal-padding);
    background-color: var(--background);
    color: var(--foreground);
    text-decoration-line: none;
    transition: 0.2s color, 0.2s background-color, 0.2s border-color;

    @media (hover: hover){

    &:hover {
      cursor: pointer;
      text-decoration-line: none;
    }
    }

    &:disabled {
      cursor: not-allowed;
      opacity: 0.3;
    }
  }

  .button--large {
    --vertical-padding: var(--spacing-s);
    --horizontal-padding: var(--spacing-l);
  }

  .button--small {
    --font-size: var(--font-size-s);
    --vertical-padding: var(--spacing-xxxs);
    --horizontal-padding: var(--spacing-s);
  }

  .button--extra-small {
    --font-size: var(--font-size-xs);
    --vertical-padding: var(--spacing-xxxs);
    --horizontal-padding: var(--spacing-s);
  }

  .button--text {
    border: transparent;
    color: var(--colour-link);

    @media (hover: hover){

    &:hover {
      color: var(--colour-link-hover);
      text-decoration-line: underline;
    }
    }
  }
}
/**
 * Primary Buttons
 *
 * View the [Buttons package](https://github.com/previousnext/mixtape/tree/master/packages/buttons) on github.
 *
 * Wrapper: background--black-10 section--m
 *
 * Markup: button-primary.twig
 *
 * Style guide: Elements.buttons.primary
 */
@layer elements {
  .button--primary {
    --border-colour: var(--colour-primary);
    --background: var(--colour-primary);
    --foreground: var(--colour-foreground-reverse);

    @media (hover: hover){

    &:hover {
      --background: var(--colour-background);
      --foreground: var(--colour-primary);
    }
    }
  }
}
/**
 * Button - Tertiary
 *
 * View the [Buttons package](https://github.com/previousnext/mixtape/tree/master/packages/buttons) on github.
 *
 * Wrapper: background--black-10 section--m
 *
 * Markup: button-tertiary.twig
 *
 * Style guide: Elements.buttons.tertiary
 */
@layer elements {
  .button--tertiary {
    --border-colour: var(--colour-primary);
    --background: transparent;
    --foreground: var(--colour-primary);

    @media (hover: hover){

    &:hover {
      --background: var(--colour-primary);
      --foreground: var(--colour-foreground-reverse);
    }
    }
  }
}
/**
 * Secondary Buttons
 *
 * View the [Buttons package](https://github.com/previousnext/mixtape/tree/master/packages/buttons) on github.
 *
 * Wrapper: background--black-10 section--m
 *
 * Markup: button-secondary.twig
 *
 * Style guide: Elements.buttons.secondary
 */
@layer elements {
  .button--secondary {
    --border-colour: var(--colour-primary);
    --background: var(--colour-background);
    --foreground: var(--colour-primary);

    @media (hover: hover){

    &:hover {
      --background: var(--colour-primary);
      --foreground: var(--colour-foreground-reverse);
    }
    }
  }
}
/**
 * Reverse Buttons
 *
 * View the [Buttons package](https://github.com/previousnext/mixtape/tree/master/packages/buttons) on github.
 *
 * Wrapper: background--black-75 section--m
 *
 * Markup: button-reverse.twig
 *
 * Style guide: Elements.buttons.reverse
 */
@layer elements {
  .button--reverse {
    --border-colour: var(--colour-foreground-reverse);
    --background: transparent;
    --foreground: var(--colour-foreground-reverse);

    @media (hover: hover){

    &:hover {
      --border-colour: var(--colour-foreground-reverse);
      --background: var(--colour-foreground-reverse);
      --foreground: var(--colour-foreground);
    }
    }
  }
}
/**
 * Icon
 *
 * Basic set. More icons are available in the `icon/src/images` directory. Icons can be added using the _mixin-icon.css
 * as `@mixin icon user`. View the [Icon package](https://github.com/previousnext/mixtape/tree/master/packages/icon)
 * on github.
 *
 * .icon--arrow-down - Arrow Down
 * .icon--arrow-left - Arrow Left
 * .icon--arrow-up - Arrow Up
 * .icon--arrow-right - Arrow Right
 * .icon--chevron-down - Chevron Down
 * .icon--chevron-left - Chevron Left
 * .icon--chevron-right - Chevron Right
 * .icon--chevron-up - Chevron Up
 * .icon--close - Close
 * .icon--collapse - Collapse
 * .icon--download - Download
 * .icon--error - Error
 * .icon--expand - Expand
 * .icon--external-link - External Link
 * .icon--facebook - Facebook
 * .icon--google - Google
 * .icon--info - Info
 * .icon--instagram - Instagram
 * .icon--linkedin - LinkedIn
 * .icon--menu - Menu
 * .icon--search - Search
 * .icon--success - Success
 * .icon--twitter - Twitter
 * .icon--warning - Warning
 * .icon--youtube - Youtube
 *
 * Default: false
 *
 * Markup: icon.twig
 *
 * Style guide: base.icon
 */
@layer elements {
  .icon {
    display: inline-flex;
    align-items: center;
    gap: var(--spacing-xxs);

    &::before {
      content: "";
      display: block;
      flex-shrink: 0;
      inline-size: var(--spacing-s);
      block-size: var(--spacing-s);
      mask-position: center;
      mask-size: contain;
      mask-repeat: no-repeat;
      background-color: currentcolor;
    }
  }

  .icon--only {
    inline-size: var(--spacing-s);
    block-size: var(--spacing-s);
    overflow: hidden;
    flex-wrap: wrap;

    &::before {
      inline-size: 100%;
      block-size: 100%;
      mask-size: var(--spacing-s);
    }
  }

  .icon--arrow-down::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M14.7 9.3l-1.4-1.4L9 12.2V0H7v12.2L2.7 7.9 1.3 9.3 8 16z'/%3E%3C/svg%3E");
  }
  .icon--arrow-left::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M6.7 14.7l1.4-1.4L3.8 9H16V7H3.8l4.3-4.3-1.4-1.4L0 8z'/%3E%3C/svg%3E");
  }
  .icon--arrow-up::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M1.3 6.7l1.4 1.4L7 3.8V16h2V3.8l4.3 4.3 1.4-1.4L8 0z'/%3E%3C/svg%3E");
  }
  .icon--arrow-right::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M9.3 1.3L7.9 2.7 12.2 7H0v2h12.2l-4.3 4.3 1.4 1.4L16 8z'/%3E%3C/svg%3E");
  }
  .icon--chevron-down::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M8 11.4L2.6 6 4 4.6l4 4 4-4L13.4 6z'/%3E%3C/svg%3E");
  }
  .icon--chevron-left::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M10 13.4L4.6 8 10 2.6 11.4 4l-4 4 4 4z'/%3E%3C/svg%3E");
  }
  .icon--chevron-right::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M6 13.4L4.6 12l4-4-4-4L6 2.6 11.4 8z'/%3E%3C/svg%3E");
  }
  .icon--chevron-up::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M12 11.4l-4-4-4 4L2.6 10 8 4.6l5.4 5.4z'/%3E%3C/svg%3E");
  }
  .icon--close::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M14.7 1.3c-.4-.4-1-.4-1.4 0L8 6.6 2.7 1.3c-.4-.4-1-.4-1.4 0s-.4 1 0 1.4L6.6 8l-5.3 5.3c-.4.4-.4 1 0 1.4.2.2.4.3.7.3s.5-.1.7-.3L8 9.4l5.3 5.3c.2.2.5.3.7.3s.5-.1.7-.3c.4-.4.4-1 0-1.4L9.4 8l5.3-5.3c.4-.4.4-1 0-1.4z'/%3E%3C/svg%3E");
  }
  .icon--collapse::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M4 7h8v2H4z'/%3E%3C/svg%3E");
  }
  .icon--download::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M8 12c.3 0 .5-.1.7-.3L14.4 6 13 4.6l-4 4V0H7v8.6l-4-4L1.6 6l5.7 5.7c.2.2.4.3.7.3z'/%3E%3Cpath d='M1 14h14v2H1z'/%3E%3C/svg%3E");
  }
  .icon--drupal::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='25' height='32' viewBox='0 0 25 32' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath d='M17.264 6.808C15.015 4.56 12.87 2.417 12.231 0c-.639 2.417-2.785 4.56-5.034 6.808C3.824 10.178 0 13.999 0 19.729a12.231 12.231 0 1 0 24.462 0c0-5.73-3.824-9.55-7.198-12.921M5.2 22.579c-.75-.025-3.518-4.796 1.617-9.876l3.397 3.712a.29.29 0 0 1-.022.433c-.811.832-4.267 4.297-4.696 5.496-.09.247-.219.238-.296.235m7.032 6.288a4.207 4.207 0 0 1-4.206-4.207 4.383 4.383 0 0 1 1.048-2.778c.759-.928 3.158-3.537 3.158-3.537s2.362 2.647 3.152 3.528a4.114 4.114 0 0 1 1.055 2.787 4.207 4.207 0 0 1-4.207 4.207m8.052-6.822c-.091.198-.297.53-.574.54-.495.018-.548-.236-.914-.777-.803-1.188-7.81-8.512-9.12-9.928-1.153-1.246-.163-2.124.297-2.584.576-.578 2.259-2.26 2.259-2.26s5.017 4.761 7.107 8.013c2.09 3.253 1.37 6.067.945 6.996'/%3E %3C/svg%3E");
  }
  .icon--error::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm3.5 10.1l-1.4 1.4L8 9.4l-2.1 2.1-1.4-1.4L6.6 8 4.5 5.9l1.4-1.4L8 6.6l2.1-2.1 1.4 1.4L9.4 8l2.1 2.1z'/%3E%3C/svg%3E");
  }
  .icon--expand::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M9 4H7v3H4v2h3v3h2V9h3V7H9z'/%3E%3C/svg%3E");
  }
  .icon--external-link::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M15 0H8v2h4.6L6.3 8.3l1.4 1.4L14 3.4V8h2V1c0-.6-.4-1-1-1z'/%3E%3Cpath d='M14 16H1c-.6 0-1-.4-1-1V2c0-.6.4-1 1-1h4v2H2v11h11v-3h2v4c0 .6-.4 1-1 1z'/%3E%3C/svg%3E");
  }
  .icon--facebook::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath d='M24,12.072A12,12,0,1,0,10.125,23.926V15.541H7.078V12.072h3.047V9.428c0-3.007,1.792-4.669,4.532-4.669a18.611,18.611,0,0,1,2.687.234V7.947H15.83a1.734,1.734,0,0,0-1.947,1.49,1.71,1.71,0,0,0-.008.385v2.25H17.2l-.532,3.469h-2.8v8.385A12,12,0,0,0,24,12.072Z'/%3E%3C/svg%3E");
  }
  .icon--google::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M8 7v2.4h4.1c-.2 1-1.2 3-4 3-2.4 0-4.3-2-4.3-4.4s2-4.4 4.3-4.4c1.4 0 2.3.6 2.8 1.1l1.9-1.8C11.6 1.7 10 1 8.1 1c-3.9 0-7 3.1-7 7s3.1 7 7 7c4 0 6.7-2.8 6.7-6.8 0-.5 0-.8-.1-1.2H8z'/%3E%3C/svg%3E");
  }
  .icon--info::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm1 12H7V7h2v5zM8 6c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1z'/%3E%3C/svg%3E");
  }
  .icon--instagram::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Ccircle cx='12.145' cy='3.892' r='.96'/%3E%3Cpath d='M8 12c-2.206 0-4-1.794-4-4s1.794-4 4-4 4 1.794 4 4-1.794 4-4 4zm0-6c-1.103 0-2 .897-2 2s.897 2 2 2 2-.897 2-2-.897-2-2-2z'/%3E%3Cpath d='M12 16H4c-2.056 0-4-1.944-4-4V4c0-2.056 1.944-4 4-4h8c2.056 0 4 1.944 4 4v8c0 2.056-1.944 4-4 4zM4 2c-.935 0-2 1.065-2 2v8c0 .953 1.047 2 2 2h8c.935 0 2-1.065 2-2V4c0-.935-1.065-2-2-2H4z'/%3E%3C/svg%3E");
  }
  .icon--linkedin::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M15.3 0H.7C.3 0 0 .3 0 .7v14.7c0 .3.3.6.7.6h14.7c.4 0 .7-.3.7-.7V.7c-.1-.4-.4-.7-.8-.7zM4.7 13.6H2.4V6h2.4v7.6zM3.6 5c-.8 0-1.4-.7-1.4-1.4 0-.8.6-1.4 1.4-1.4.8 0 1.4.6 1.4 1.4-.1.7-.7 1.4-1.4 1.4zm10 8.6h-2.4V9.9c0-.9 0-2-1.2-2s-1.4 1-1.4 2v3.8H6.2V6h2.3v1c.3-.6 1.1-1.2 2.2-1.2 2.4 0 2.8 1.6 2.8 3.6v4.2z'/%3E%3C/svg%3E");
  }
  .icon--menu::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M0 0h16v3H0z'/%3E%3Cpath d='M0 6h16v3H0z'/%3E%3Cpath d='M0 12h16v3H0z'/%3E%3C/svg%3E");
  }
  .icon--search::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M12.7 11.3c.9-1.2 1.4-2.6 1.4-4.2 0-3.9-3.1-7.1-7-7.1S0 3.2 0 7.1c0 3.9 3.2 7.1 7.1 7.1 1.6 0 3.1-.5 4.2-1.4l3 3c.2.2.5.3.7.3s.5-.1.7-.3c.4-.4.4-1 0-1.4l-3-3.1zm-5.6.8c-2.8 0-5.1-2.2-5.1-5S4.3 2 7.1 2s5.1 2.3 5.1 5.1-2.3 5-5.1 5z'/%3E%3C/svg%3E");
  }
  .icon--success::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zM7 11.4L3.6 8 5 6.6l2 2 4-4L12.4 6 7 11.4z'/%3E%3C/svg%3E");
  }
  .icon--twitter::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath fill='%23000' fill-rule='nonzero' d='M12.541.2h2.406L9.69 6.808l6.183 8.992h-4.841L7.24 10.346 2.9 15.8H.496l5.621-7.068L.185.2h4.964l3.428 4.985L12.54.2Zm-.844 14.016h1.333L4.425 1.701h-1.43l8.702 12.515Z'/%3E%3C/svg%3E");
  }
  .icon--warning::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M15.216 13.529L8.882 1.654a1 1 0 0 0-1.765 0L.784 13.529A1 1 0 0 0 1.667 15h12.667a1 1 0 0 0 .882-1.471zM8 13a1 1 0 1 1 0-2 1 1 0 0 1 0 2zm1-3H7V6h2v4z'/%3E%3C/svg%3E");
  }
  .icon--youtube::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M15.8 4.8c-.2-1.3-.8-2.2-2.2-2.4C11.4 2 8 2 8 2s-3.4 0-5.6.4C1 2.6.3 3.5.2 4.8 0 6.1 0 8 0 8s0 1.9.2 3.2c.2 1.3.8 2.2 2.2 2.4C4.6 14 8 14 8 14s3.4 0 5.6-.4c1.4-.3 2-1.1 2.2-2.4C16 9.9 16 8 16 8s0-1.9-.2-3.2zM6 11V5l5 3-5 3z'/%3E%3C/svg%3E");
  }

  .icon--status::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm1 12H7V7h2v5zM8 6c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1z'/%3E%3C/svg%3E");
  }
}
/**
 * Icon - Colours
 *
 * Primary, Secondary and White color icons can be created by adding .icon--primary, .icon--secondary or .icon--white
 *
 * .icon--facebook.icon--primary - Facebook Primary
 * .icon--google.icon--primary - Google Primary
 * .icon--instagram.icon--primary - Instagram Primary
 * .icon--linkedin.icon--primary - LinkedIn Primary
 * .icon--twitter.icon--primary - Twitter Primary
 * .icon--youtube.icon--primary - Youtube Primary
 * .icon--facebook.icon--secondary - Facebook Secondary
 * .icon--google.icon--secondary - Google Secondary
 * .icon--instagram.icon--secondary - Instagram Secondary
 * .icon--linkedin.icon--secondary - LinkedIn Secondary
 * .icon--twitter.icon--secondary - Twitter Secondary
 * .icon--youtube.icon--secondary - Youtube Secondary
 * .icon--facebook.icon--white - Facebook White
 * .icon--google.icon--white - Google White
 * .icon--instagram.icon--white - Instagram White
 * .icon--linkedin.icon--white - LinkedIn White
 * .icon--twitter.icon--white - Twitter White
 * .icon--youtube.icon--white - Youtube White
 *
 * Default: false
 *
 * Markup: icon.twig
 *
 * Style guide: base.icon.colours
 */
@layer elements {
  .icon--primary::before {
    color: var(--colour-primary);
  }

  .icon--secondary::before {
    color: var(--colour-secondary);
  }

  .icon--white::before {
    color: var(--colour-foreground-reverse);
  }
}
/**
 * Text icon
 *
 * A piece of text or link with an icon.
 *
 * .icon--end - Right aligned icon
 *
 * Markup: text-icon.twig
 *
 * Styleguide: base.icon.text
 */
@layer elements {
  .icon.icon--end::before {
    order: 2;
  }
}
/**
 * Icon - Extended
 *
 * Extended set. View the [Icon package](https://github.com/previousnext/mixtape/tree/master/packages/icon) on github.
 *
 * .icon--attachment - Attachment
 * .icon--blockquote - Blockquote
 * .icon--building - Building
 * .icon--calendar - Calendar
 * .icon--clock - Clock
 * .icon--email - Email
 * .icon--file - File
 * .icon--globe - Globe
 * .icon--heart-selected - Heart Selected
 * .icon--heart-unselected - Heart Unselected
 * .icon--image - Image
 * .icon--home - Home
 * .icon--link - Link
 * .icon--lock - Lock
 * .icon--login - Login
 * .icon--media-play - Media play
 * .icon--media-pause - Media pause
 * .icon--media-stop - Media stop
 * .icon--media-next - Media next
 * .icon--media-previous - Media previous
 * .icon--media-rewind - Media rewind
 * .icon--media-skip - Media skip
 * .icon--more - More
 * .icon--notification - Notification
 * .icon--pencil - Pencil
 * .icon--phone - Phone
 * .icon--pin - Pin
 * .icon--print - Print
 * .icon--question - Question
 * .icon--restart - Restart
 * .icon--settings - Settings
 * .icon--share - Share
 * .icon--star-selected - Star Selected
 * .icon--star-unselected - Star Unselected
 * .icon--tick - Tick
 * .icon--trash - Trash
 * .icon--user - User
 * .icon--video - Video
 *
 * Default: false
 *
 * Markup: icon.twig
 *
 * Style guide: base.icon.extended
 */
@layer elements {
  .icon--attachment::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M5 5v4c0 1.7 1.3 3 3 3s3-1.3 3-3V4.5C11 2 9 0 6.5 0S2 2 2 4.5V10c0 3.3 2.7 6 6 6s6-2.7 6-6V4h-2v6c0 2.2-1.8 4-4 4s-4-1.8-4-4V4.5C4 3.1 5.1 2 6.5 2S9 3.1 9 4.5V9c0 .6-.4 1-1 1s-1-.4-1-1V5H5z'/%3E%3C/svg%3E");
  }
  .icon--blockquote::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3E%3Cg class='nc-icon-wrapper'%3E%3Cpath d='M7,5.5A3.5,3.5,0,1,0,3.5,9a3.476,3.476,0,0,0,1.039-.175A8.983,8.983,0,0,1,2.422,12.3,1,1,0,1,0,3.85,13.7,10.934,10.934,0,0,0,7,6a.951.951,0,0,0-.034-.167A3.323,3.323,0,0,0,7,5.5Z'/%3E%3Cpath d='M16,5.5a3.567,3.567,0,1,0-2.461,3.325A8.983,8.983,0,0,1,11.422,12.3a1,1,0,1,0,1.428,1.4A10.934,10.934,0,0,0,16,6a.951.951,0,0,0-.034-.167A3.323,3.323,0,0,0,16,5.5Z' data-color='color-2'/%3E%3C/g%3E%3C/svg%3E");
  }
  .icon--building::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M15 9h-2V3c0-.6-.4-1-1-1H9V0H7v2H4c-.6 0-1 .4-1 1v6H1c-.6 0-1 .4-1 1v5c0 .6.4 1 1 1h14c.6 0 1-.4 1-1v-5c0-.6-.4-1-1-1zM5 10V4h6v10H9v-3H7v3H5v-4z'/%3E%3Cpath d='M7 6h2v2H7z'/%3E%3C/svg%3E");
  }
  .icon--calendar::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3E%3Cpath d='M15,2h-2V0h-2v2H9V0H7v2H5V0H3v2H1C0.447,2,0,2.447,0,3v12c0,0.553,0.447,1,1,1h14c0.553,0,1-0.447,1-1V3 C16,2.447,15.553,2,15,2z M14,14H2V6h12V14z'/%3E%3C/svg%3E");
  }
  .icon--clock::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm0 14c-3.3 0-6-2.7-6-6s2.7-6 6-6 6 2.7 6 6-2.7 6-6 6z'/%3E%3Cpath d='M9 4H7v5h5V7H9z'/%3E%3C/svg%3E");
  }
  .icon--email::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M15 1H1c-.6 0-1 .4-1 1v1.4l8 4.5 8-4.4V2c0-.6-.4-1-1-1z'/%3E%3Cpath d='M7.5 9.9L0 5.7V14c0 .6.4 1 1 1h14c.6 0 1-.4 1-1V5.7L8.5 9.9c-.28.14-.72.14-1 0z'/%3E%3C/svg%3E");
  }
  .icon--file::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3E%3Cg class='nc-icon-wrapper'%3E%3Cpath d='M14.707,4.707,10.293.293A1,1,0,0,0,9.586,0H2A1,1,0,0,0,1,1V15a1,1,0,0,0,1,1H14a1,1,0,0,0,1-1V5.414A1,1,0,0,0,14.707,4.707ZM13,14H3V2H9V5a1,1,0,0,0,1,1h3Z'/%3E%3C/g%3E%3C/svg%3E");
  }
  .icon--globe::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3E%3Cpath d='M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm5.9 7H12c-.1-1.5-.4-2.9-.8-4.1 1.4.9 2.4 2.4 2.7 4.1zM8 14c-.6 0-1.8-1.9-2-5h4c-.2 3.1-1.4 5-2 5zM6 7c.2-3.1 1.3-5 2-5s1.8 1.9 2 5H6zM4.9 2.9C4.4 4.1 4.1 5.5 4 7H2.1c.3-1.7 1.3-3.2 2.8-4.1zM2.1 9H4c.1 1.5.4 2.9.8 4.1-1.4-.9-2.4-2.4-2.7-4.1zm9 4.1c.5-1.2.7-2.6.8-4.1h1.9c-.2 1.7-1.2 3.2-2.7 4.1z'/%3E%3C/svg%3E");
  }
  .icon--heart-selected::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M11.6 0C10.1 0 8.8.8 8 2 7.2.8 5.9 0 4.4 0 2 0 0 2 0 4.4c0 4.4 8 10.9 8 10.9s8-6.5 8-10.9C16 2 14 0 11.6 0z'/%3E%3C/svg%3E");
  }
  .icon--heart-unselected::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M7.4 15.5C6.6 14.8 0 9.3 0 5.1 0 2.4 2.2.3 4.8.3 6 .3 7.1.8 8 1.5 8.9.7 10 .3 11.2.3 13.9.3 16 2.5 16 5.1c0 4.2-6.6 9.7-7.4 10.3-.3.4-.9.4-1.2.1zM4.8 2.3C3.3 2.3 2 3.6 2 5.1c0 2.2 3.5 6 6 8.2 2.1-1.9 6-5.8 6-8.2 0-1.6-1.3-2.8-2.8-2.8-.9 0-1.8.5-2.3 1.3-.4.6-1.3.6-1.7 0-.6-.8-1.4-1.3-2.4-1.3z'/%3E%3C/svg%3E");
  }
  .icon--image::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3E%3Cg class='nc-icon-wrapper'%3E%3Cpath data-color='color-2' d='M10.447,6.276A.5.5,0,0,0,10.023,6a.469.469,0,0,0-.447.234L7.409,9.7,5.854,8.146A.525.525,0,0,0,5.451,8a.5.5,0,0,0-.367.221l-2,3A.5.5,0,0,0,3.5,12h9a.5.5,0,0,0,.447-.724Z'/%3E%3Cpath d='M14,0H2A2,2,0,0,0,0,2V14a2,2,0,0,0,2,2H14a2,2,0,0,0,2-2V2A2,2,0,0,0,14,0ZM2,14V2H14l0,12Z'/%3E%3Ccircle data-color='color-2' cx='5' cy='5' r='1'/%3E%3C/g%3E%3C/svg%3E");
  }
  .icon--home::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath d='M11 16h2c.6 0 1-.4 1-1V8h1c.3 0 .6-.1.8-.3.4-.4.3-1-.1-1.4l-7-6C8.3 0 7.8 0 7.4.3l-7 6c-.4.4-.5 1-.1 1.4.1.2.4.3.7.3h1v7c0 .6.4 1 1 1h2c.6 0 1-.4 1-1v-3h4v3c0 .6.4 1 1 1z'/%3E%3C/svg%3E");
  }
  .icon--link::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M4.5 16c-1.2 0-2.3-.5-3.2-1.3-1.8-1.8-1.8-4.6 0-6.4l.7-.7L3.4 9l-.7.7c-1 1-1 2.6 0 3.6s2.6 1 3.6 0l3-3c1-1 1-2.6 0-3.6L8.6 6 10 4.6l.7.7c1.8 1.8 1.8 4.6 0 6.4l-3 3c-.8.8-2 1.3-3.2 1.3z'/%3E%3Cpath d='M6 11.4l-.7-.7c-1.8-1.8-1.8-4.6 0-6.4l3-3c.9-.9 2-1.3 3.2-1.3s2.3.5 3.2 1.3c1.8 1.8 1.8 4.6 0 6.4l-.7.7L12.6 7l.7-.7c1-1 1-2.6 0-3.6s-2.6-1-3.6 0l-3 3c-1 1-1 2.6 0 3.6l.7.7L6 11.4z'/%3E%3C/svg%3E");
  }
  .icon--lock::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M8 0C5.8 0 4 1.8 4 4v1H2c-.6 0-1 .4-1 1v9c0 .6.4 1 1 1h12c.6 0 1-.4 1-1V6c0-.6-.4-1-1-1h-2V4c0-2.2-1.8-4-4-4zm1 11.7V13H7v-1.3c-.6-.3-1-1-1-1.7 0-1.1.9-2 2-2s2 .9 2 2c0 .7-.4 1.4-1 1.7zM10 5H6V4c0-1.1.9-2 2-2s2 .9 2 2v1z'/%3E%3C/svg%3E");
  }
  .icon--login::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M6 7H0v2h6v3l4-4-4-4z'/%3E%3Cpath d='M15 16H1a1 1 0 0 1-1-1v-4h2v3h12V2H2v3H0V1a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1z'/%3E%3C/svg%3E");
  }
  .icon--media-play::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M13.6 7.2l-10-7A1 1 0 0 0 2 1v14c0 .8.9 1.3 1.6.8l10-7c.5-.4.5-1.2 0-1.6z'/%3E%3C/svg%3E");
  }
  .icon--media-pause::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M5 1H2c-.6 0-1 .4-1 1v12c0 .6.4 1 1 1h3c.6 0 1-.4 1-1V2c0-.6-.4-1-1-1zM14 1h-3c-.6 0-1 .4-1 1v12c0 .6.4 1 1 1h3c.6 0 1-.4 1-1V2c0-.6-.4-1-1-1z'/%3E%3C/svg%3E");
  }
  .icon--media-stop::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M14 1H2c-.6 0-1 .4-1 1v12c0 .6.4 1 1 1h12c.6 0 1-.4 1-1V2c0-.6-.4-1-1-1z'/%3E%3C/svg%3E");
  }
  .icon--media-next::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M11.6 7.2l-10-7A1 1 0 0 0 0 1v14c0 .8.9 1.3 1.6.8l10-7c.5-.4.5-1.2 0-1.6z'/%3E%3Cpath d='M15 0c-.6 0-1 .4-1 1v14c0 .6.4 1 1 1s1-.4 1-1V1c0-.6-.4-1-1-1z'/%3E%3C/svg%3E");
  }
  .icon--media-previous::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M14.4.2l-10 7c-.6.4-.6 1.2 0 1.6l10 7A1 1 0 0 0 16 15V1a1 1 0 0 0-1.6-.8z'/%3E%3Cpath d='M1 0C.4 0 0 .4 0 1v14c0 .6.4 1 1 1s1-.4 1-1V1c0-.6-.4-1-1-1z'/%3E%3C/svg%3E");
  }
  .icon--media-rewind::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M9 1L0 8l9 7V9.6l7 5.4V1L9 6.4z'/%3E%3C/svg%3E");
  }
  .icon--media-skip::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M7 6.4L0 1v14l7-5.4V15l9-7-9-7z'/%3E%3C/svg%3E");
  }
  .icon--more::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Ccircle cx='8' cy='8' r='2'/%3E%3Ccircle cx='2' cy='8' r='2'/%3E%3Ccircle cx='14' cy='8' r='2'/%3E%3C/svg%3E");
  }
  .icon--notification::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M10 14H6c0 1.1.9 2 2 2s2-.9 2-2z'/%3E%3Cpath d='M15 11h-.5c-.7-.7-1.5-1.7-1.5-3V5c0-2.8-2.2-5-5-5S3 2.2 3 5v3c0 1.3-.8 2.3-1.5 3H1c-.6 0-1 .4-1 1s.4 1 1 1h14c.6 0 1-.4 1-1s-.4-1-1-1z'/%3E%3C/svg%3E");
  }
  .icon--pencil::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M11.7.3c-.4-.4-1-.4-1.4 0l-10 10c-.2.2-.3.4-.3.7v4c0 .6.4 1 1 1h4c.3 0 .5-.1.7-.3l10-10c.4-.4.4-1 0-1.4l-4-4zM4.6 14H2v-2.6l6-6L10.6 8l-6 6zM12 6.6L9.4 4 11 2.4 13.6 5 12 6.6z'/%3E%3C/svg%3E");
  }
  .icon--phone::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M15.285 12.305l-2.578-2.594a1 1 0 0 0-1.416-.002L9 12 4 7l2.294-2.294a1 1 0 0 0 .001-1.414L3.715.708a1 1 0 0 0-1.415 0L.004 3.003 0 3c0 7.18 5.82 13 13 13l2.283-2.283a1 1 0 0 0 .002-1.412z'/%3E%3C/svg%3E");
  }
  .icon--pin::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M8 0C4.1 0 1 3.1 1 7c0 1.9.7 3.7 2.1 5 .1.1 4.1 3.7 4.2 3.8.4.3 1 .3 1.3 0 .1-.1 4.2-3.7 4.2-3.8 1.4-1.3 2.1-3.1 2.1-5 .1-3.9-3-7-6.9-7zm0 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z'/%3E%3C/svg%3E");
  }
  .icon--print::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3E%3Ctitle%3Eprint%3C/title%3E%3Cg class='nc-icon-wrapper'%3E%3Crect data-color='color-2' x='3' width='10' height='3'/%3E %3Cpath d='M15,5H1C0.4,5,0,5.4,0,6v6c0,0.6,0.4,1,1,1h2v2c0,0.6,0.4,1,1,1h8c0.6,0,1-0.4,1-1v-2h2c0.6,0,1-0.4,1-1V6 C16,5.4,15.6,5,15,5z M11,14H5V9h6V14z'/%3E%3C/g%3E%3C/svg%3E");
  }
  .icon--question::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm0 13c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1zm1.5-4.6c-.5.3-.5.4-.5.6v1H7V9c0-1.3.8-1.9 1.4-2.3.5-.3.6-.4.6-.7 0-.6-.4-1-1-1-.4 0-.7.2-.9.5l-.5.9-1.7-1 .5-.9C5.9 3.6 6.9 3 8 3c1.7 0 3 1.3 3 3 0 1.4-.9 2-1.5 2.4z'/%3E%3C/svg%3E");
  }
  .icon--restart::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M7.5 14C4.5 14 2 11.5 2 8.5S4.5 3 7.5 3c1.2 0 2.2.4 3.2 1H8v2h6V0h-2v2.5C10.7 1.5 9.2 1 7.5 1 3.4 1 0 4.4 0 8.5S3.4 16 7.5 16 15 12.6 15 8.5h-2c0 3-2.5 5.5-5.5 5.5z'/%3E%3C/svg%3E");
  }
  .icon--settings::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M12.9 4.5L14.4 3 13 1.6l-1.5 1.5c-.7-.5-1.6-.9-2.5-1V0H7v2.1c-.9.2-1.8.5-2.5 1L3.1 1.6 1.6 3.1l1.5 1.5c-.5.6-.9 1.5-1 2.4H0v2h2.1c.2.9.5 1.8 1 2.5L1.6 13 3 14.4l1.5-1.5c.7.5 1.6.9 2.5 1V16h2v-2.1c.9-.2 1.8-.5 2.5-1l1.5 1.5 1.4-1.4-1.5-1.5c.5-.7.9-1.6 1-2.5H16V7h-2.1c-.1-.9-.5-1.8-1-2.5zM8 11c-1.7 0-3-1.3-3-3s1.3-3 3-3 3 1.3 3 3-1.3 3-3 3z'/%3E%3C/svg%3E");
  }
  .icon--share::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M13 15H1a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h4v2H2v8h10v-3h2v4a1 1 0 0 1-1 1z'/%3E%3Cpath d='M16 4l-4-4v3C8.691 3 6 5.691 6 9h2c0-2.206 1.794-4 4-4v3l4-4z'/%3E%3C/svg%3E");
  }
  .icon--star-selected::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M15.144 5.438l-4.316-.627L8.897.9C8.559.217 7.441.217 7.103.9l-1.93 3.911-4.317.627a1.002 1.002 0 0 0-.554 1.707l3.124 3.044-.737 4.299a1 1 0 0 0 1.451 1.054L8 13.513l3.861 2.03c.728.381 1.591-.234 1.451-1.054l-.737-4.299 3.124-3.044a1.003 1.003 0 0 0-.555-1.708z'/%3E%3C/svg%3E");
  }
  .icon--star-unselected::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M11.86 15.542L8 13.513l-3.86 2.029c-.727.387-1.592-.235-1.451-1.054l.737-4.299L.302 7.145a1 1 0 0 1 .555-1.706l4.316-.627L7.104.9C7.44.217 8.561.217 8.897.9l1.931 3.911 4.316.627a1.001 1.001 0 0 1 .555 1.706l-3.124 3.045.737 4.299c.141.823-.726 1.436-1.452 1.054zm-3.394-4.044l2.532 1.331-.483-2.82a1 1 0 0 1 .287-.885l2.049-1.998-2.831-.411a.996.996 0 0 1-.753-.547L8 3.602 6.733 6.168a1 1 0 0 1-.753.547l-2.831.411 2.049 1.998a1 1 0 0 1 .287.885l-.483 2.82 2.532-1.331a.998.998 0 0 1 .932 0z'/%3E%3C/svg%3E");
  }
  .icon--tick::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M5.6 9.6L2.4 6.4 0 8.8l5.6 5.6L16 4l-2.4-2.4z'/%3E%3C/svg%3E");
  }
  .icon--trash::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M2 6v8c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V6H2z'/%3E%3Cpath d='M12 3V1c0-.6-.4-1-1-1H5c-.6 0-1 .4-1 1v2H0v2h16V3h-4zm-2 0H6V2h4v1z'/%3E%3C/svg%3E");
  }
  .icon--user::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Ccircle cx='8' cy='7' r='3'/%3E%3Cpath d='M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm4 12.4c-.6-.7-1.4-1.4-3-1.4H7c-1.6 0-2.4.7-3 1.4C2.8 11.3 2 9.8 2 8c0-3.3 2.7-6 6-6s6 2.7 6 6c0 1.8-.8 3.3-2 4.4z'/%3E%3C/svg%3E");
  }
  .icon--video::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3E%3Cg class='nc-icon-wrapper'%3E%3Cpath d='M15.73,3.057c-.164-.087-.363-.074-.518,.034l-4.213,2.949v-2.039c0-1.103-.897-2-2-2H2C.897,2,0,2.897,0,4V12c0,1.103,.897,2,2,2h7c1.103,0,2-.897,2-2v-2.039l4.213,2.949c.086,.06,.187,.09,.287,.09,.079,0,.158-.019,.23-.057,.166-.086,.27-.257,.27-.443V3.5c0-.187-.104-.357-.27-.443Z'/%3E%3C/g%3E%3C/svg%3E");
  }
}
/**
 * Form
 *
 * Style guide: form
 */
@layer elements {
  .form__item {
    max-inline-size: var(--container-max-width);

    &.form__item--inline {
      display: flex;
      align-items: flex-start;
    }
  }
}
/**
 * Text Input
 *
 * Text Input is defined in the form package. View the [Form package](https://github.com/previousnext/mixtape/tree/master/packages/form) on github.
 *
 * .error - Error state
 * .success - Success state
 * .input--wide - A wide variant of the input field.
 * .input--small - A smaller variant of the input field.
 *
 * Markup: input-text.twig
 *
 * Style guide: form.text-input
 */
@layer elements {
  :where(
      :is(
          .input__text,
          [type="text"],
          [type="search"],
          [type="tel"],
          [type="url"],
          [type="email"],
          [type="password"],
          [type="date"],
          [type="time"],
          [type="number"],
          select,
          textarea
        )
    ) {
    box-shadow: none;
    font: inherit;
    letter-spacing: inherit;
    word-spacing: inherit;
    max-inline-size: 100%;
    padding-block: calc(var(--form-spacing) - (var(--form-border-width) * 2));
    padding-inline: var(--form-spacing);
    border: var(--form-border-width) solid var(--colour-border);
    border-radius: var(--border-radius);
    background-color: var(--colour-background);
    color: var(--colour-foreground);
    line-height: var(--line-height-ui);
    block-size: var(--form-element-height);

    &:focus-visible {
      border-color: var(--outline-color);
      outline: none;
    }

    &::placeholder {
      color: var(--colour-foreground-alt);
      opacity: 1;
    }

    &[disabled] {
      background-color: var(--colour-background-alt);
      color: var(--colour-foreground-alt);
      cursor: not-allowed;
    }

    &.error:where(:not(:focus-visible)) {
      border-color: var(--colour-error-foreground);
    }

    &.success:where(:not(:focus-visible)) {
      border-color: var(--colour-success-foreground);
    }
  }

  :is(.input--small, .select--small) {
    min-inline-size: 0;
    border-width: 1px;
  }

  :is(.input--wide, .select--wide) {
    inline-size: 100%;
  }
}
/**
 * Input Divider
 *
 * Dividing element between inline form fields. View the [Form package](https://github.com/previousnext/mixtape/tree/master/packages/form) on github.
 *
 * Markup: input-divider.twig
 *
 * Style guide: form.text-input.divider
 */
@layer elements {
  .input__divider {
    padding: var(--form-spacing);
    line-height: var(--line-height-ui);
  }
}
/**
 * Text Input with Icon
 *
 * Text Input with Icon is defined in the form package. View the [Form package](https://github.com/previousnext/mixtape/tree/master/packages/form) on github.
 *
 * .error - Error state
 * .success - Success state
 *
 * Markup: input-text-icon.twig
 *
 * Style guide: form.text-input.icon
 */
@layer elements {
  .input__text--icon {
    display: inline-block;
    max-inline-size: 100%;
    min-inline-size: 100%;
    border-radius: var(--border-radius);
    background-color: var(--colour-background);
    position: relative;

    &::before {
      position: absolute;
      block-size: 100%;
      inset-block-start: 0;
      inset-inline-start: var(--form-spacing);
    }

    & input {
      inline-size: 100%;
      padding-inline-start: calc(var(--form-spacing) * 2.5);
      background-color: transparent;
    }
  }
}
/**
 * Text Input with Inline Button
 *
 * Text Input with Inline Button is defined in the form package. View the [Form package](https://github.com/previousnext/mixtape/tree/master/packages/form) on github.
 *
 * Markup: input-text-inline-submit.twig
 *
 * Style guide: form.text-input.inline-submit
 */
@layer elements {
  .input__text--inline {
    position: relative;
    display: inline-block;
    max-inline-size: 100%;
    min-inline-size: 100%;
    border-radius: var(--border-radius);
    background-color: var(--colour-background);

    & [type="text"] {
      inline-size: 100%;
      padding-inline-end: 7rem;
      background-color: transparent;
    }

    & [type="submit"] {
      position: absolute;
      inset-block-start: var(--spacing-xxxxs);
      inset-inline-end: var(--spacing-xxxxs);
      border: 0;
      border-radius: 3px;
      block-size: calc(var(--form-element-height) - var(--spacing-xxxs));
    }
  }
}
/**
 * Label
 *
 * Label is defined in the form package. View the [Form package](https://github.com/previousnext/mixtape/tree/master/packages/form) on github.
 * The form `label` element must be present for all form elements, and have a `for` attribute that matches the `id` of the
 * associated form element.
 *
 * .label--inline - Inline label.
 *
 * Markup: label.twig
 *
 * Style guide: form.label
 */
@layer elements {
  :is(label, legend) {
    display: block;
    margin-block-end: var(--spacing-xxxs);
    font-size: var(--font-size);
    color: var(--colour-foreground);

    &.label--inline {
      display: inline-block;
      margin-block-end: 0;
      margin-inline-end: var(--spacing-xxs);
    }
  }

  [type="checkbox"] {
    box-shadow: none;
    appearance: none;
    inline-size: var(--control-size);
    block-size: var(--control-size);
    background-color: var(--colour-background);
    border: var(--form-border-width) solid var(--colour-border);
    border-radius: var(--border-radius);

    @media (pointer: coarse) {
      --control-size: 2rem;
    }

    &:checked {
      background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M5.6 9.6L2.4 6.4 0 8.8l5.6 5.6L16 4l-2.4-2.4z'/%3E%3C/svg%3E");
      background-size: 0.75rem;
      background-position: center;
    }

    &:focus-visible {
      outline: var(--form-border-width) auto var(--outline-color);
      outline-offset: 0;
    }

    &[disabled] {
      &::after {
        background-color: var(--colour-background-alt);
        cursor: not-allowed;
        content: "";
        display: block;
        inline-size: 100%;
        block-size: 100%;
        border-radius: var(--border-radius);
      }

      & + label {
        color: var(--colour-foreground-alt);
        cursor: not-allowed;
      }
    }

    &.error:where(:not(:focus-visible)) {
      border-color: var(--colour-error-foreground);
    }

    &.success:where(:not(:focus-visible)) {
      border-color: var(--colour-success-foreground);
    }
  }
}
/**
 * Checkboxes
 *
 * Checkboxes are defined in the form package. View the [Form package](https://github.com/previousnext/mixtape/tree/master/packages/form) on github.
 * The standard `input[type="checkbox"]` element, using a fieldset and legend as
 * the accessible way to group and label multiple checkbox inputs.
 *
 * Optionally a tooltip can be used by using the `aria-describedby` attribute
 * on the fieldset itself.
 *
 * .form__item--inline - Inline checkboxes
 *
 * Markup: input-checkbox.twig
 *
 * Style guide: form.checkbox
 */
/**
 * Radios
 *
 * Radios are defined in the form package. View the [Form package](https://github.com/previousnext/mixtape/tree/master/packages/form) on github.
 * The standard `input[type="radio"]` element, using a fieldset and legend as
 * the accessible way to group and label multiple radio inputs.
 *
 * Optionally a tooltip can be used by using the `aria-describedby` attribute
 * on the fieldset itself.
 *
 * .form__item--inline - Inline radios
 *
 * Markup: input-radio.twig
 *
 * Style guide: form.radios
 */
@layer elements {
  [type="radio"] {
    box-shadow: none;
    appearance: none;
    display: flex;
    inline-size: var(--control-size);
    block-size: var(--control-size);
    background-color: var(--colour-background);
    border: var(--form-border-width) solid var(--colour-border);
    border-radius: 50%;

    @media (pointer: coarse) {
      --control-size: 2rem;
    }

    &:checked {
      &::after {
        content: "";
        display: block;
        inline-size: 0.5rem;
        block-size: 0.5rem;
        margin: auto;
        border-radius: 50%;
        background-color: var(--colour-primary);
      }
    }

    &:focus-visible {
      outline: var(--form-border-width) auto var(--outline-color);
      outline-offset: 0;
    }

    &[disabled] {
      &::after {
        background-color: var(--colour-background-alt);
        cursor: not-allowed;
        content: "";
        display: block;
        inline-size: 100%;
        block-size: 100%;
        border-radius: 50%;
      }

      & + label {
        color: var(--colour-foreground-alt);
        cursor: not-allowed;
      }
    }

    &.error:where(:not(:focus-visible)) {
      border-color: var(--colour-error-foreground);
    }

    &.success:where(:not(:focus-visible)) {
      border-color: var(--colour-success-foreground);
    }
  }

  :is(.form__radio, .form__checkbox) {
    --control-size: var(--spacing-m);

    margin-block-end: var(--spacing-xxxs);
    display: flex;
    align-items: center;
    gap: var(--spacing-xxs);

    &:last-child {
      margin-block-end: 0;
    }

    & label {
      cursor: pointer;
      margin: 0;
    }

    & input {
      flex-shrink: 0;
    }

    &.form__item--inline {
      display: inline-flex;
      margin-inline-end: var(--spacing-xxs);
    }
  }
}
/**
 * Textarea
 *
 * Textarea is defined in the form package. View the [Form package](https://github.com/previousnext/mixtape/tree/master/packages/form) on github.
 * A textarea field is used for multiple lines of text input.
 *
 * Markup: textarea.twig
 *
 * Style guide: form.textarea
 */
@layer elements {
  textarea {
    block-size: calc(4 * var(--form-element-height));
    inline-size: 100%;
  }
}
/**
 * Fieldset
 *
 * Fieldset is defined in the form package. View the [Form package](https://github.com/previousnext/mixtape/tree/master/packages/form) on github.
 * The fieldset element is used for grouping form elements. See the [Checkbox (multiple)](/section-form.html#kssref-form-checkbox-multiple)
 * and [Radios (multiple)](/section-form.html#kssref-form-radios) components for how it is best used.
 *
 * .fieldset--plain - A stripped back variant of the fieldset.
 *
 * Markup: fieldset.twig
 *
 * Style guide: form.fieldset
 */
@layer elements {
  :is(.fieldset, fieldset) {
    border: var(--form-border-width) solid var(--colour-border);
    border-radius: var(--border-radius);
    padding: var(--form-spacing);
    min-inline-size: 0;

    & legend {
      padding-block: 0;
      padding-inline: var(--form-spacing);
    }
  }

  .fieldset--plain {
    border: 0;
    padding: 0;

    & legend {
      padding: 0;
    }
  }

  .fieldset--inline {
    display: flex;
    flex-wrap: wrap;
    gap: var(--spacing-xxs);

    & :is(.form__item, .form__item--inline) {
      margin: 0;
    }
  }
}
/**
 * Description
 *
 * Description is defined in the form package. View the [Form package](https://github.com/previousnext/mixtape/tree/master/packages/form) on github.
 * Text that describes a form field. The form element must have an `aria-describedby` attribute that points to the
 * `id` of the description text.
 *
 * Markup: form-description.twig
 *
 * Style guide: form.description
 */
@layer elements {
  .form__description {
    margin-block: var(--form-spacing);
    margin-inline: 0;
    font-size: var(--font-size-xs);

    &:last-child {
      margin-block-end: 0;
    }
  }
}
/**
 * Error message
 *
 * Error Message is defined in the form package. View the [Form package](https://github.com/previousnext/mixtape/tree/master/packages/form) on github.
 * The error state with a red border and message.
 *
 * Markup: form-error.twig
 *
 * Style guide: form.error
 */
@layer elements {
  :is(.form__success-message, .form__error-message) {
    margin-block: var(--form-spacing);
    margin-inline: 0;
    font-size: var(--font-size-s);
    color: var(--colour-foreground);
    display: flex;
    gap: var(--spacing-xxs);

    &:last-child {
      margin-block-end: 0;
    }

    &::before {
      content: "";
      display: block;
      inline-size: var(--spacing-m);
      block-size: var(--spacing-m);
      mask-position: center;
      mask-repeat: no-repeat;
      flex-shrink: 0;
    }
  }

  .form__error-message::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm3.5 10.1l-1.4 1.4L8 9.4l-2.1 2.1-1.4-1.4L6.6 8 4.5 5.9l1.4-1.4L8 6.6l2.1-2.1 1.4 1.4L9.4 8l2.1 2.1z'/%3E%3C/svg%3E");
    background-color: var(--colour-error-foreground);
  }

  .form__success-message::before {
    mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zM7 11.4L3.6 8 5 6.6l2 2 4-4L12.4 6 7 11.4z'/%3E%3C/svg%3E");
    background-color: var(--colour-success-foreground);
  }
}
/**
 * Select
 *
 * Select is defined in the form package. View the [Form package](https://github.com/previousnext/mixtape/tree/master/packages/form) on github.
 * The select field, used to choose a single option from a list. If multiple options can be selected at the same time,
 * consider using the [Checkbox (multiple)](/section-form.html#kssref-form-checkbox-multiple) component instead.
 *
 * .input--wide - A wide variant of the select field.
 * .input--small - A smaller variant of the select field.
 *
 * Markup: select.twig
 *
 * Style guide: form.select
 */
@layer elements {
  select {
    appearance: none;
    cursor: pointer;
    background-color: var(--colour-background);
    background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M8 11.4L2.6 6 4 4.6l4 4 4-4L13.4 6z'/%3E%3C/svg%3E");
    background-position: right var(--form-spacing) center;
    padding-block: 0;
    padding-inline-end: var(--spacing-xl);

    &[multiple] {
      block-size: auto;
      background-image: none;
    }

    &.input--small {
      padding-inline-end: var(--spacing-m);
      background-position: right var(--spacing-xs) center;
    }
  }

  :is(.translated-rtl select, [dir="rtl"] select) {
    background-position: left var(--spacing-s) center;

    &.input--small {
      background-position: left var(--spacing-xs) center;
    }
  }

  /**
   * Form actions.
   */
  .form__actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--spacing-s);
  }
}
/**
 * Global Header
 *
 * View the [Global package](https://github.com/previousnext/mixtape/tree/master/packages/global) on github.
 *
 * Markup: global-header.twig
 *
 * Style guide: Grouped Components.global-header
 */
@layer components {
  .global__toggles {
    display: flex;
    gap: var(--spacing-xs);
    padding-inline-end: 0.125rem;
    position: relative;
    z-index: 1;

    @media (width >= 720px) {
      display: none;
    }

    & .button--secondary {
      border-color: transparent;
    }

    & [hidden] {
      display: none;
    }
  }

  .global-nav-up-only {
    @media (width < 720px) {
      display: none;
    }
  }
}
/**
 * Logo
 *
 * Logo is defined in the Global package. View the [Global package](https://github.com/previousnext/mixtape/tree/master/packages/global) on github.
 *
 * Wrapper: section section--m
 *
 * Markup: logo.twig
 *
 * Style guide: Elements.logo
 */
@media print {
  .global .section__content {
    max-inline-size: 100%;
  }
}
/**
 * Primary Header
 *
 * View the [Global package](https://github.com/previousnext/mixtape/tree/master/packages/global) on github.
 *
 * A simple inline version of the Primary Header that contains Logo, Navigation and Search
 *
 * Markup: primary-header.twig
 *
 * Style guide: Grouped Components.global-header.primary-header
 */
@layer components {
  .global__primary {
    position: relative;

    & .flex {
      flex-wrap: wrap;
      align-items: center;
      position: relative;

      &::after {
        display: none;
      }

      & .logo {
        margin-inline-end: auto;
      }
    }
  }

  .global__primary__nav {
    inline-size: 100%;
    transition: 0.2s opacity var(--ease), 0.2s visibility var(--ease);

    @media (width >= 720px) {
      z-index: 2;
      position: relative;
      inline-size: auto;
      block-size: auto;
    }

    &[inert] {
      block-size: 0;
      opacity: 0;
      visibility: hidden;
      transition: 0.2s opacity var(--ease), 0.2s visibility var(--ease);
    }
  }

  .global__primary__search {
    position: absolute;
    inset-block-start: 2px;
    inset-inline-start: 0;
    inline-size: 100%;
    transition: 0.2s opacity var(--ease), 0.2s visibility var(--ease);

    @media (width >= 720px) {
      display: flex;
      position: relative;
      inline-size: auto;
      margin-inline-start: var(--spacing-m);
    }

    &[inert] {
      opacity: 0;
      visibility: hidden;
      transition: 0.2s opacity var(--ease), 0.2s visibility var(--ease);
    }
  }

  /**
   * Primary Header Stacked
   *
   * View the [Global package](https://github.com/previousnext/mixtape/tree/master/packages/global) on github.
   * A version of the Primary Navigation which is stacked. The Logo and Search appear in the same row and a new row is created below to contain
   * the main Navigation. Additional styles and markup allow for left and right sections of the navigation, background colour to stretch full screen and padding to suit this layout.
   *
   * Markup: primary-header--stacked.twig
   *
   * Style guide: Grouped Components.global-header.primary-header-stacked
   */

  .global__primary__nav-right {
    margin-inline-start: auto;
  }
}
@media print {
  .global .global__primary__nav {
    display: none;
  }
}
/**
 * Secondary Header
 *
 * View the [Global package](https://github.com/previousnext/mixtape/tree/master/packages/global) on github.
 *
 * Markup: secondary-header.twig
 *
 * Style guide: Elements.secondary-header
 */
@layer components {
  .global__secondary {
    & .flex {
      justify-content: space-between;
      align-items: center;
      padding-block: var(--spacing-xxs);
      padding-inline: 0;

      &::after {
        display: none;
      }
    }
  }

  .global__secondary__nav {
    display: none;

    @media (width >= 720px) {
      display: inline-block;
    }

    & ul {
      margin: auto;
    }
  }
}
@media print {
  .global__secondary {
    display: none;
  }
}
/**
 * Global Footer
 *
 * View the [Global package](https://github.com/previousnext/mixtape/tree/master/packages/global) on github.
 *
 * Markup: global-footer.twig
 *
 * Style guide: Grouped Components.footer
 */
@layer components {
  .global__footer {
    position: sticky;
    inset-block-start: 100vh;

    & .nav__toggle {
      display: none;
    }

    & .grid {
      row-gap: var(--spacing-xxxl);
    }
  }

  .global__footer__logo {
    @media (width < 720px) {
      text-align: center;
    }
  }

  .global__footer__meta {
    padding-block-start: var(--spacing-s);
    border-block-start: 1px solid var(--colour-border);
    text-align: center;
    line-height: 2;
    display: flex;
    justify-content: space-between;
    align-items: center;
    flex-wrap: wrap;
    gap: var(--gap);

    @media (width < 420px) {
      flex-direction: column;
    }

    & .nav--inline > ul {
      @media (width < 420px) {
        flex-direction: column;
        gap: var(--gap-s);
      }
    }
  }
}
@media print {
  .global__footer {
    display: none;
  }
}
/**
 * Navigation
 *
 * View the [Navigation package](https://github.com/previousnext/mixtape/tree/master/packages/navigation) on github.
 *
 * .nav--inline - Links are displayed inline.
 *
 * Wrapper: section section--m
 *
 * Markup: navigation.twig
 *
 * Style guide: Elements.navigation
 */
@layer components {
  .nav {
    & ul {
      display: flex;
      flex-direction: column;
      list-style-type: none;
      padding-inline-start: 0;
      font-size: var(--font-size);
    }

    & a:where(:not([class])) {
      text-decoration-line: none;
      color: inherit;

      @media (hover: hover){

      &:hover {
        text-decoration-line: underline;
      }
      }
    }
  }

  .nav--inline {
    & > ul {
      flex-flow: row wrap;
      align-items: center;
      gap: var(--spacing-s);
    }
  }

  .nav__toggle {
    background: unset;
    padding: 0;
    border: 0;
    appearance: none;
    position: absolute;
    color: inherit;
    inline-size: var(--spacing-l);
    block-size: var(--spacing-l);
    inset-block-start: 12px;
    inset-inline-end: 0;
    cursor: pointer;
  }

  .nav--open {
    & > .nav__toggle::before {
      transform: rotate(180deg);
    }
  }
}
/**
 * Breadcrumb Navigation
 *
 * Breadcrumbs are defined in the Navigation package. View the [Navigation package](https://github.com/previousnext/mixtape/tree/master/packages/navigation) on github.
 * Inline navigation used for breadcrumbs.
 *
 * Wrapper: section section--m
 *
 * Markup: navigation-breadcrumb.twig
 *
 * Style guide: Elements.navigation.breadcrumb-navigation
 */
@layer components {
  .nav--breadcrumb {
    --colour-foreground: var(--colour-foreground-alt);
    --font-size: var(--font-size-s);

    position: relative;
    z-index: 1;
    overflow: auto;
    white-space: nowrap;

    & > ul {
      gap: var(--spacing-xxxxs);
    }

    & > ul > li {
      color: var(--colour-foreground);
      display: flex;
      align-items: center;

      &:where(:not(:last-child))::after {
        content: "";
        display: block;
        vertical-align: middle;
        mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M6 13.4L4.6 12l4-4-4-4L6 2.6 11.4 8z'/%3E%3C/svg%3E");
        mask-position: center;
        mask-repeat: no-repeat;
        block-size: var(--spacing-m);
        inline-size: var(--spacing-m);
        background-color: currentcolor;
      }
    }
  }

  [dir="rtl"] .nav--breadcrumb,
  .translated-rtl .nav--breadcrumb {
    & > ul > li::after {
      transform: rotate(180deg);
    }
  }
}
/**
 * Dropdown Navigation
 *
 * Dropdown Navigation is defined in the Navigation package. View the [Navigation package](https://github.com/previousnext/mixtape/tree/master/packages/navigation) on github.
 * Multi-level navigation with dropdowns. Typically used for primary navigation.
 *
 * Wrapper: section section--m
 *
 * Markup: navigation-dropdown.twig
 *
 * Style guide: Elements.navigation.dropdown-navigation
 */
@layer components {
  .nav--dropdown {
    --item-spacing: var(--spacing-xxs);
    --item-gap: var(--spacing-xxxxs);
    --dropdown-width: 16.875rem;

    margin-block: var(--spacing-m);

    @media (width >= 720px) {
      margin-block: 0;
    }

    & li {
      margin: 0;

      &:is(.nav__has-subnav, :has(> ul)) {
        position: relative;

        & > a {
          --toggle-gap: var(--spacing-l);
        }
      }
    }

    & a {
      display: block;

      &:is(:hover, [aria-expanded="true"]) {
        @media (width >= 720px) {
          background-color: var(--colour-background);
          color: var(--colour-foreground);
          -webkit-text-decoration: none;
          text-decoration: none;

          & + .nav__toggle {
            color: var(--colour-foreground);
          }
        }
      }
    }

    & li > ul {
      transition: 0.2s opacity var(--ease), 0.2s visibility var(--ease);

      &[inert] {
        block-size: 0;
        opacity: 0;
        visibility: hidden;
        transition: 0.2s opacity var(--ease), 0.2s visibility var(--ease);

        @media (width >= 720px) {
          block-size: auto;
        }
      }
    }

    & .nav__level-1 {
      margin: 0;
      overflow: hidden;

      @media (width >= 720px) {
        overflow: visible;
        flex-flow: row;
        align-items: center;
        justify-content: flex-start;
      }

      & > li {
        border-block-start: 1px solid var(--colour-border);

        @media (width >= 720px) {
          border-block-start: 0;
        }

        & > a:where(:not(.button)) {
          padding-block: var(--item-spacing, var(--spacing-xxs));
          padding-inline-end: var(
            --toggle-gap,
            var(--item-spacing, var(--spacing-xxs))
          );

          @media (width >= 720px) {
            padding-inline-start: var(--item-spacing, var(--spacing-xxs));
          }
        }
      }
    }

    & .nav__level-2 {
      --colour-background: var(--colour-background-alt);

      display: block;
      position: relative;
      inset-inline-start: 0;
      inline-size: 100%;
      margin: 0;

      @media (width >= 720px) {
        position: absolute;
        inline-size: var(--dropdown-width);
        border-radius: var(--border-radius);
        background-color: var(--colour-background);

        & .nav__toggle::before {
          transform: rotate(-90deg);
        }
      }

      & > li {
        @media (width < 720px) {
          border-block-start: 1px solid var(--colour-border);
        }

        & > a {
          &:where(:not(.button)) {
            padding: var(--item-spacing);
            margin: var(--item-gap);

            @media (width < 720px) {
              padding-inline-start: var(--spacing-l);
              margin: 0;
            }

            &:is(:hover, [aria-expanded="true"]) {
              @media (width >= 720px) {
                --colour-background: var(--colour-background-reverse);
                --colour-foreground: var(--colour-foreground-reverse);
              }
            }
          }
        }
      }
    }

    & .nav--reverse .nav__level-2 {
      @media (width >= 720px) {
        inset-inline: auto 0;

        & .nav__toggle::before {
          transform: rotate(90deg);
        }
      }
    }

    & .nav__separator {
      border-block-start: 1px solid var(--colour-border);
    }
  }
}
/**
 * Dropdown Navigation - Mega Nav
 *
 * The Mega Nav styles are defined in the Navigation package. View the [Navigation package](https://github.com/previousnext/mixtape/tree/master/packages/navigation) on github.
 * Multi column, Multi-level navigation with dropdowns. Typically used for primary navigation.
 *
 * Wrapper: section section--m
 *
 * Markup: navigation-mega-nav.twig
 *
 * Style guide: Elements.navigation.mega-nav
 */
@layer components {
  .nav--mega-nav {
    @media (width < 720px) {
      max-block-size: 100%;
      overflow: auto;
    }

    & .nav__level-2 ul {
      display: block;
      position: relative;
      padding-inline-start: var(--spacing-l);
      border-block-start: 1px solid var(--border-colour);
      inline-size: 100%;

      @media (width >= 720px) {
        --colour-background: var(--colour-background-reverse);
        --colour-foreground: var(--colour-foreground-reverse);

        position: absolute;
        inset-inline-start: var(--dropdown-width);
        inset-block-start: 0;
        inline-size: var(--dropdown-width);
        min-block-size: 100%;
        padding-inline-start: 0;
        border-block-start: 0;
        border-radius: 0 var(--border-radius) var(--border-radius) 0;
        background-color: var(--colour-background);
        color: var(--colour-foreground);
      }

      & > li > a:where(:not(.button)) {
        padding: var(--item-spacing);
        margin: var(--item-gap);

        @media (width < 720px) {
          padding-inline-start: var(--spacing-l);
          margin: 0;
        }

        &:is(:hover, [aria-expanded="true"]) {
          @media (width >= 720px) {
            --colour-background: var(--colour-background-alt);
            --colour-foreground: var(--colour-foreground-orig);
          }
        }
      }
    }

    & .nav--reverse .nav__level-2 ul {
      @media (width >= 720px) {
        inset-inline-start: calc(var(--dropdown-width) * -1);
        border-radius: var(--border-radius) 0 0 var(--border-radius);
      }
    }
  }
}
/**
 * Ordered Navigation
 *
 * Ordered Navigation is defined in the Navigation package. View the [Navigation package](https://github.com/previousnext/mixtape/tree/master/packages/navigation) on github.
 * Multi-level navigation useful for sidebars.
 *
 * Wrapper: section section--m
 *
 * Markup: navigation-ordered.twig
 *
 * Style guide: Elements.navigation.ordered
 */
@layer components {
  .nav--ordered {
    & .nav__level-1 {
      gap: var(--spacing-m);

      & ul {
        padding-block-start: var(--gap);
      }

      & > li {
        & > :is(a, span) {
          display: block;
          padding-block: var(--gap);
          padding-inline: 0;
          font-weight: bold;
          border-block: 1px solid var(--colour-border);
        }

        &:first-child > :is(a, span) {
          border-block-start: 0;
        }
      }
    }

    &.nav__level-3 {
      padding-inline-start: var(--gap);
    }
  }
}
/**
 * List Navigation
 *
 * List Navigation is defined in the Navigation package. View the [Navigation package](https://github.com/previousnext/mixtape/tree/master/packages/navigation) on github.
 * Slightly more formatted navigation that forms the basis of the 'Elevator' and ordered navigation styles
 *
 * .nav--list-2-col - 2 column variation.
 *
 * Wrapper: section section--m
 *
 * Markup: navigation-jump.twig
 *
 * Style guide: Elements.navigation.jump-navigation
 */
@layer components {
  .nav--list {
    margin-block-end: var(--spacing-m);

    & ul {
      --gap: var(--spacing-xxxs);

      display: grid;
      gap: var(--gap);
    }

    & [aria-current="page"] {
      text-decoration-line: underline;
    }
  }

  .nav--list-2-col {
    & ul {
      grid-template-columns: repeat(2, 1fr);
    }
  }

  h2 + .nav--list,
  h3 + .nav--list {
    margin-block-start: var(--spacing-m);
  }
}
/**
 * Footer Navigation
 *
 * Footer Navigation is defined in the Navigation package. View the [Navigation package](https://github.com/previousnext/mixtape/tree/master/packages/navigation) on github.
 * Multi-column navigation used in the footer.
 *
 * Wrapper: section section--m
 *
 * Markup: navigation-footer.twig
 *
 * Style guide: Elements.navigation.footer-navigation
 */
@layer components {
  .nav--footer {
    & ul {
      display: grid;
    }

    & .nav__level-1 {
      gap: var(--spacing-l) var(--spacing-xxxl);
      grid-template-columns: 1fr 1fr;

      @media (width >= 720px) {
        grid-template-columns: 1fr 1fr 1fr;
      }

      & > li > a {
        display: inline-block;
        margin-block-end: var(--spacing-l);
        font-weight: var(--font-weight-bold);
      }
    }

    & .nav__level-2 {
      gap: var(--spacing-s);
    }
  }
}
/**
 * Collapsible Navigation
 *
 * Collapsible Navigation is defined in the Navigation package. View the [Navigation package](https://github.com/previousnext/mixtape/tree/master/packages/navigation) on github.
 * Multi-level navigation with toggles used for sidebar navigation.
 *
 * Wrapper: section section--m
 *
 * Markup: navigation-collapsible.twig
 *
 * Style guide: Elements.navigation.collapsible-navigation
 */
@layer components {
  .nav--collapsible {
    --item-spacing: var(--spacing-xxs);

    & .nav__toggle {
      inset-inline: auto var(--spacing-xxs);

      @media (width >= 720px) {
        display: block;
      }
    }

    & ul li {
      position: relative;

      & a {
        display: block;
        color: inherit;
        border-block-end: 1px solid var(--colour-border);
        padding: var(--item-spacing);

        &:is(:focus, :focus-visible) {
          outline-offset: -1px;
        }
      }
    }

    & .nav__level-1 > li > a {
      font-weight: var(--font-weight-bold);
    }

    & .nav__level-2 > li > a {
      padding-inline-start: var(--spacing-s);
    }

    & .nav__level-3 > li > a {
      padding-inline-start: var(--spacing-m);
    }

    & :is([aria-current="page"], .is-active) > a {
      background-color: var(--colour-background-alt);
    }

    & li > ul {
      transition: transform 0.2s var(--ease), opacity 0.8s var(--ease);
      transform-origin: top;
      will-change: block-size;

      &[inert] {
        block-size: 0;
        opacity: 0;
        transform: scaleY(0);
        transition: transform 0.8s var(--ease), opacity 0.2s var(--ease);
      }
    }

    & li:is(.nav__has-subnav, :has(> ul)) > a {
      padding-inline-end: var(--spacing-l);
    }
  }
}
/**
 * Page Title
 *
 * Page Title is defined in the page package. View the [Page package](https://github.com/previousnext/mixtape/tree/master/packages/page) on github.
 * Simple page title example with return link
 *
 * Markup: page-title.twig
 *
 * Wrapper: section section--m
 *
 * Style guide: Grouped Components.page-title
 */
/**
 * Hero
 *
 * Hero is defined in the page package. View the [Page package](https://github.com/previousnext/mixtape/tree/master/packages/page) on github.
 * A page title in a section with .page-title--hero modifier.
 *
 * Markup: page-title-example.twig
 *
 * Style guide: Grouped Components.page-title.hero
 */
@layer components {
  .page-title {
    position: relative;
    z-index: 1;
    display: flex;
    flex-direction: column;

    &.page-title--hero {
      --height: 25rem;

      min-block-size: var(--height);
      place-content: center;
    }

    & :is(h1, h2, p) {
      max-inline-size: var(--container-max-width-narrow);
      text-wrap: balance;
    }

    &.text--center {
      align-items: center;
    }
  }
}
/**
 * Page
 *
 * View the [Page package](https://github.com/previousnext/mixtape/tree/master/packages/page) on github.
 *
 * Style guide: Layout.page
 */
/**
 * Page with Sidebar
 *
 * Page with sidebar is defined in the page package. View the [Page package](https://github.com/previousnext/mixtape/tree/master/packages/page) on github.
 *
 * .grid--sidebar-rev - Reverse order of columns for all screen sizes.
 * .grid--sidebar-rev-lg - Reverse order of columns only for large screen sizes.
 *
 * Markup: page-sidebar.twig
 *
 * Style guide: Layout.page-sidebar
 */
@layer layout {
  .grid--sidebar {
    &:where(:not(:has(> aside))) {
      grid-column: narrow;
    }

    &:where(:has(> aside)) {
      @media (width >= 720px) {
        display: grid;
        grid-template-columns: repeat(12, 1fr);
        gap: var(--gap);
      }

      & > section {
        @media (width >= 720px) {
          grid-column-end: span 8;
        }
      }

      & > aside {
        @media (width >= 720px) {
          grid-column-end: span 4;
        }

        @media (width >= 946px) {
          grid-column-end: span 3;
        }
      }

      &.grid--sidebar-rev {
        & > :is(section, aside) {
          &:first-child {
            order: 2;
          }

          &:last-child {
            order: 1;
          }
        }
      }

      &.grid--sidebar-rev-lg {
        @media (width >= 720px) {
          & > :is(section, aside) {
            &:first-child {
              order: 2;
            }

            &:last-child {
              order: 1;
            }
          }
        }
      }

      &:is(.grid--sidebar-rev, .grid--sidebar-rev-lg) {
        @media (width >= 946px) {
          & > :is(section, aside) {
            &:last-child {
              grid-column-start: 1;
            }
          }

          & > aside {
            &:first-child {
              grid-column-start: 10;
            }
          }

          & > section {
            &:first-child {
              grid-column-start: 5;
            }
          }
        }
      }
    }

    &:where(:has(> aside:last-child)) {
      & > aside {
        @media (width >= 946px) {
          grid-column-start: 10;
        }
      }
    }

    &:where(:has(> aside:first-child)) {
      & > section {
        @media (width >= 946px) {
          grid-column-start: 5;
        }
      }
    }
  }
}
/**
 * Print stylesheet
 */
@media print {
  .page__sidebar {
    display: none;
  }
}
/**
 * Tiles
 *
 * View the [Tiles package](https://github.com/previousnext/mixtape/tree/master/packages/tiles) on github.
 *
 * Wrapper: section section--m container
 *
 * Markup: tiles.twig
 *
 * Style guide: Elements.tile
 */
@layer components {
  .tile {
    --height: 10rem;
    --outline-offset: -0.125rem;
    --gap: var(--gap-s);

    overflow: hidden;
    position: relative;
    border-radius: var(--border-radius);
    background: var(--colour-background-alt);
    color: var(--colour-foreground);
    min-block-size: var(--height);
    transition: 0.2s background-color, 0.2s background-image, 0.2s color,
      0.2s border-color;

    @media (hover: hover){

    &:is(.tile--has-link,:has(>a[href])):hover {
      color: var(--colour-foreground-reverse);
      background: var(--colour-background-reverse);
      cursor: pointer;
    }
    }

    & > a[href] {
      display: block;
      text-indent: -10000%;
      block-size: 100%;
    }

    & .tile__content {
      padding: var(--spacing-m);
      position: relative;
    }
  }

  .tiles--medium {
    & .tile {
      --height: 15rem;
    }
  }

  .tiles--large {
    & .tile {
      --height: 27.0625rem;
    }
  }
}
/**
 * Print stylesheet
 */
@media print {
  .tile {
    display: block;
    background-color: transparent;
    background-image: none;
    color: var(--colour-foreground);
  }

  .tiles--small,
  .tiles--medium,
  .tiles--large {
    & .tile {
      min-block-size: 0;
    }
  }
}
/**
 * Previous Next
 *
 * View the [Previous Next package](https://github.com/previousnext/mixtape/tree/master/packages/previous-next) on github.
 * A set of links to the previous and next pages.
 *
 * Wrapper: section section--m
 *
 * Markup: previous-next.twig
 *
 * Style guide: Elements.previous-next
 */
@layer components {
  .previous-next {
    display: flex;
    inline-size: 100%;
    align-items: center;
    margin-block-start: var(--spacing-xxxl);
    border-block-start: 1px solid var(--colour-border);
    border-block-end: 1px solid var(--colour-border);

    & .previous-next__link {
      display: flex;
      flex-direction: column;
      background-color: var(--colour-background);
      block-size: 100%;
      inline-size: 50%;
    }

    & .previous-next__prev {
      justify-self: start;
      align-items: flex-end;
      border-inline-end: 1px solid var(--colour-border);

      &::after {
        mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M6.7 14.7l1.4-1.4L3.8 9H16V7H3.8l4.3-4.3-1.4-1.4L0 8z'/%3E%3C/svg%3E");
        inset-inline-start: var(--spacing-s);
      }
    }

    & .previous-next__next {
      justify-self: end;
      align-items: flex-start;

      &::after {
        mask-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M9.3 1.3L7.9 2.7 12.2 7H0v2h12.2l-4.3 4.3 1.4 1.4L16 8z'/%3E%3C/svg%3E");
        inset-inline-end: var(--spacing-s);
      }
    }

    & a {
      display: inline-flex;
      flex-direction: column;
      place-content: center;
      inline-size: 100%;
      block-size: 100%;
      padding-block: var(--spacing-xxl);
      padding-inline: var(--spacing-l);
      color: var(--colour-foreground);
      -webkit-text-decoration: none;
      text-decoration: none;
      position: relative;
      outline-offset: -2px;

      &::after {
        content: "";
        display: inline-block;
        inline-size: var(--spacing-s);
        block-size: 100%;
        mask-repeat: no-repeat;
        mask-position: center;
        background-color: currentcolor;
        position: absolute;
      }

      & .previous-next__page-title {
        position: relative;
        display: inline-block;
        font-size: var(--font-size-m);
        font-weight: var(--font-weight-bold);
      }

      & .previous-next__title {
        font-size: var(--font-size-s);
        font-weight: var(--font-weight-bold);
        color: var(--colour-foreground-alt);
        margin-block-end: var(--spacing-xxs);
      }

      @media (hover: hover){

      &:hover {
        -webkit-text-decoration: none;
        text-decoration: none;
        color: var(--colour-foreground-reverse);
        background-color: var(--colour-background-reverse);

        & .previous-next__title {
          color: var(--colour-foreground-alt-reverse);
        }
      }
      }
    }
  }
}
/**
 * Pagination
 *
 * View the [Paginaton package](https://github.com/previousnext/mixtape/tree/master/packages/pagination) on github.
 *
 * Wrapper: section section--m
 *
 * Markup: pagination.twig
 *
 * Style guide: Elements.pagination
 */
@layer elements {
  .pagination {
    --active-color: var(--colour-foreground);
    --inactive-color: var(--colour-foreground-alt);
    --active-underline: underline;

    margin-block: var(--spacing-m);
    margin-inline: 0;
    padding: 0;

    & button {
      all: unset;
      cursor: pointer;
      box-sizing: border-box;

      &:focus {
        outline: var(--outline-width, var(--outline-size))
          var(--outline-style, solid) var(--outline-color, currentcolor);
        outline-offset: var(--outline-offset, var(--outline-size));
      }
    }

    & :is(a, button, [aria-current="page"], [aria-current="step"]) {
      text-decoration-line: none;
      display: block;
      block-size: var(--spacing-l);
      line-height: var(--spacing-l);
      padding-block: 0;
      padding-inline: var(--spacing-xs);
    }

    & :is([aria-current="page"], [aria-current="step"], .is-active) {
      font-weight: var(--font-weight-bold);
      color: var(--active-color);
      text-decoration-line: var(--active-underline);
      text-decoration-thickness: 2px;
      text-decoration-skip-ink: auto;
      text-underline-offset: 0.15em;
    }

    & .icon:not(.icon--only) {
      display: flex;
      align-items: center;
      gap: var(--spacing-xxs);
    }

    & .pagination__items {
      display: flex;
      place-content: center;
      padding-inline-start: 0;
      list-style-type: none;
      text-align: center;

      & :is(button, a) {
        color: var(--inactive-color);

        @media (hover: hover){

        &:hover {
          color: var(--active-color);
          text-decoration-line: var(--active-underline);
        }
        }
      }
    }

    & .pagination__ellipsis {
      padding-block: 0;
      padding-inline: var(--spacing-xs);
    }

    & :is(.pagination__previous, .pagination__next) .icon:not(.icon--only) {
      font-weight: var(--font-weight-bold);
      color: var(--active-color);
      text-transform: capitalize;

      @media (width < 540px) {
        overflow: hidden;
        inline-size: var(--spacing-s);
        position: relative;
        text-indent: 100%;

        &::before {
          position: absolute;
        }
      }
    }

    & .pagination__previous {
      margin-inline-end: auto;

      @media (width >= 540px) {
        & :is(button, a) {
          padding-inline-start: 0;
        }
      }
    }

    & .pagination__next {
      margin-inline-start: auto;

      @media (width >= 540px) {
        & :is(button, a) {
          padding-inline-end: 0;

          &::before {
            order: 2;
          }
        }
      }
    }
  }
}
/**
 * Print stylesheet
 */
@media print {
  .pagination {
    display: none;
  }
}
/**
 * Elevator
 *
 * View the [Elevator package](https://github.com/previousnext/mixtape/tree/master/packages/elevator) on github.
 * A scroll to component, this is best demo'd in it's own window. This creates a menu based on given selectors inside
 * a given selector.
 * Usage: `new Elevator({'js-elevator', 'elevator', 'rich-text', 'h2, h3', 'page-menu__menu', 'page-menu__item'})`
 *
 * Markup: elevator.twig
 *
 * Style guide: Grouped Components.elevator
 */
@layer defaults {
  mx-elevator {
    display: block;
  }
}
@layer components {
  .elevator {
    & .elevator__level--h3 {
      padding-inline-start: var(--spacing-s);
    }
  }

  .elevator__overflow-dropdown {
    position: relative;
    display: none;

    &.has-children {
      display: inline-block;
    }

    & > ul {
      display: none;
      position: absolute;
      inset-inline-end: 0;
      border: 1px solid var(--colour-border);
      border-end-end-radius: var(--border-radius);
      border-end-start-radius: var(--border-radius);
      background-color: var(--colour-background);
      z-index: 10;
    }

    & a.open {
      & ~ ul {
        display: block;
      }
    }
  }
}
/**
 * Sticky
 *
 * View the [Sticky package](https://github.com/previousnext/mixtape/tree/master/packages/sticky) on github.
 *
 * Markup: sticky.twig
 *
 * Style guide: Grouped Components.sticky
 */
@layer components {
  .sticky {
    --z-index: 1;
    position: sticky;
    inset-block-start: var(--sticky-offset, 0);
    z-index: var(--z-index);
  }

  .sticky--m {
    @media (width >= 720px) {
      --z-index: 1;
      position: sticky;
      inset-block-start: var(--sticky-offset, 0);
      z-index: var(--z-index);
    }
  }

  .sticky--l {
    @media (width >= 946px) {
      --z-index: 1;
      position: sticky;
      inset-block-start: var(--sticky-offset, 0);
      z-index: var(--z-index);
    }
  }

  .sticky__trigger {
    position: absolute;
    inline-size: 1px;
    block-size: 1px;
  }
}
/**
 * Drupal Login Form
 *
 * Markup: login-form.twig
 */
main :is(.user-login-form, .user-register-form, .user-pass) {
  max-inline-size: var(--container-max-width-narrow);
  margin-block: var(--spacing-xxl);
  margin-inline: auto;
}
/**
 * Drupal Local Tasks
 *
 * Markup: local-tasks.twig
 */
.block-local-tasks-block {
  & .tab-list {
    position: fixed;
    inset-block-start: 300px;
    inset-inline-start: 0;
    inline-size: 120px;
    margin-block-end: 0;
    padding-inline-start: 0;
    border: 2px solid var(--colour-primary);
    border-start-end-radius: var(--spacing-xxs);
    border-end-end-radius: var(--spacing-xxs);
    list-style-type: none;
    overflow: hidden;
    z-index: 501;
    transform: translateX(-75%);
    transition: transform 0.2s ease-in-out;

    @media (hover: hover){

    &:hover {
      transform: translateX(0);
    }
    }

    & li {
      border-block-end: 2px solid var(--colour-primary);

      &:last-of-type {
        border-block-end: 0 none;
      }
    }

    & a {
      display: block;
      -webkit-text-decoration: none;
      text-decoration: none;
      padding-block: var(--spacing-xxs);
      padding-inline: var(--spacing-m);
      color: var(--colour-primary);
      background-color: var(--colour-background);
      transition: 0.2s background-color, 0.2s color;

      @media (hover: hover){

      &:hover {
        color: var(--colour-background);
        background-color: var(--colour-primary);
      }
      }
    }
  }

  @media print {
    display: none;
  }
}
/**
 * Tag
 *
 * View the [Tag package](https://github.com/previousnext/mixtape/tree/master/packages/tag) on github.
 *
 * .tag--reverse - reverse
 *
 * Wrapper: section section--m
 *
 * Markup: tag.twig
 *
 * Style guide: Elements.tag
 */
@layer elements {
  .tag {
    --font-size: var(--font-size-s);
    --font-weight: var(--font-weight-bold);
    --line-height: 2;
    --horizontal-padding: var(--spacing-xxxs);

    display: inline-block;
    inline-size: -moz-fit-content;
    inline-size: fit-content;
    padding-inline: var(--horizontal-padding);
    margin-inline-end: var(--spacing-xs);
    background: var(--colour-background-reverse);
    color: var(--colour-foreground-reverse);
    text-transform: uppercase;
    font-weight: var(--font-weight);
    font-size: var(--font-size);
    line-height: var(--line-height);
    border-radius: var(--border-radius);
    border: 1px solid var(--colour-background-reverse);
    -webkit-text-decoration: none;
    text-decoration: none;

    @media (hover: hover){

    &:hover {
      background: var(--colour-background);
      color: var(--colour-foreground);
    }
    }

    &.tag--reverse {
      background: var(--colour-background);
      color: var(--colour-foreground);

      @media (hover: hover){

      &:hover {
        background: var(--colour-background-reverse);
        color: var(--colour-foreground-reverse);
      }
      }
    }
  }
}
/**
 * Content Card
 *
 * View the [Content Card package](https://github.com/previousnext/mixtape/tree/master/packages/content-card) on github.
 * The content card displays as a vertical block of content containing media followed by content by default.
 * This can also be displayed as a left/right or right/left card using the modifier classes.
 * The figure tag can be replaced by other tags using the class `content-card__media` if figure is not appropriate.
 *
 * .content-card--right - Landscape Right
 *
 * Wrapper: section section--m
 *
 * Markup: content-card.twig
 *
 * Style guide: Elements.content-card
 */
@layer components {
  .content-card {
    all: unset;
    display: grid;
    grid-template: "media" auto "content" 1fr / 1fr;
    gap: var(--gap);

    @container (min-width: 720px) {
      grid-template: "media content" 1fr / 1fr 1fr;
      align-items: center;
      gap: var(--gap-l);

      & .content-card__content {
        justify-content: center;
      }
    }

    @container (min-width: 946px) {
      gap: 7rem;
    }

    &.content-card--right {
      @container (min-width: 720px) {
        grid-template-areas: "content media";
      }
    }

    & .content-card__content {
      grid-area: content;
    }

    & :is(.content-card__media, figure) {
      grid-area: media;
      display: grid;
      margin: auto;
      position: relative;
      inline-size: 100%;

      & img {
        aspect-ratio: var(--ratio);
        border-radius: var(--border-radius);
        object-fit: cover;
        display: block;
      }

      & .skeleton--bg {
        aspect-ratio: var(--ratio);
      }
    }

    & .link-list {
      inline-size: 100%;
    }
  }
}
/**
 * Content Card Grid
 *
 * Content card grid is an example of how cards behave within a grid wrapper. It's part of the Content card package.
 * View the [Content Card package](https://github.com/previousnext/mixtape/tree/master/packages/content-card) on github.
 *
 * Markup: content-card-grid.twig
 *
 * Style guide: Elements.content-card.grid
 */
@layer components {
  .grid:has(> *:nth-child(2):last-child)
    > :is(.content-card, .container:has(.content-card)) {
    --max-card-width: 37ch;

    inline-size: 100%;
    max-inline-size: var(--max-card-width);
    margin-inline: auto;
  }
}
/**
 * Content Card Linked
 *
 * A content card where the entire card is a link.
 *
 * Wrapper: section section--m
 *
 * Markup: content-card-link.twig
 *
 * Style guide: Elements.content-card.link
 */
@layer components {
  a[href].content-card {
    @media (hover: hover){
    &:hover {
      color: inherit;
    }
    }
  }

  .content-card--clickable {
    position: relative;

    &:focus-within {
      border-radius: var(--border-radius);
      outline: var(--outline-width) var(--outline-style) var(--outline-color);
      outline-offset: 2px;
    }

    & :is(a[href], button) {
      &:focus-visible {
        outline: none;
      }
    }

    & a::after {
      content: "";
      position: absolute;
      inset-block-start: 0;
      inset-inline-start: 0;
      inline-size: 100%;
      block-size: 100%;
    }
  }
}
/**
 * Button Group
 *
 * View the [Button Group package](https://github.com/previousnext/mixtape/tree/master/packages/button-group) on github.
 *
 * .button--extra-small - Extra Small buttons
 * .button--small - Small buttons
 * .button--medium - Medium buttons
 * .button--large - Large buttons
 *
 * Wrapper: section section--m
 *
 * Markup: button-group.twig
 *
 * Default: false
 *
 * Style guide: Elements.buttons.button-group
 */
@layer elements {
  .button-group {
    display: flex;

    & .button {
      border-radius: 0;
      margin: 0;
      margin-inline-end: 0.0625rem;

      &:first-child {
        border-start-start-radius: var(--border-radius-l);
        border-end-start-radius: var(--border-radius-l);
      }

      &:last-child {
        border-start-end-radius: var(--border-radius-l);
        border-end-end-radius: var(--border-radius-l);
        margin-inline-end: 0;
      }
    }
  }
}
/**
 * Button Icon
 *
 *
 * View the [Button Icon package](https://github.com/previousnext/mixtape/tree/master/packages/button-icon) on github.
 * Icons can be used in buttons but will need to have their foreground color styled to be visible over the buttons background color as well as match the text color.
 *
 * .button--primary.icon--arrow-left - Left Aligned
 * .button--primary.icon--end.icon--arrow-right - Right Aligned
 *
 * Wrapper: section--m
 *
 * Default: false
 *
 * Markup: button-icon.twig
 *
 * Style guide: Elements.buttons.button-icon
 */
@layer elements {
  .button.icon:is(.button--small, .button--extra-small) {
    &::before {
      mask-size: var(--spacing-xs);
    }
  }
}
/**
 * Button Icon Only
 *
 *
 * View the [Button Icons package](https://github.com/previousnext/mixtape/tree/master/packages/button-icon) on github.
 * The button still needs to conatin text for SEO and accessibility but only the icon should be visible.
 *
 * .button--primary.button--icon-only.icon--arrow-up - Primary
 * .button--secondary.button--icon-only.icon--arrow-up - Secondary
 *
 * Wrapper: section--m
 *
 * Default: false
 *
 * Markup: button-icon.twig
 *
 * Style guide: Elements.buttons.button-icon-only
 */
@layer elements {
  .button--icon-only {
    inline-size: var(--spacing-xl);
    block-size: var(--spacing-xl);
    padding: 0;
    border-radius: var(--border-radius-round);
    overflow: hidden;
    flex-wrap: wrap;

    &::before {
      inline-size: 100%;
      block-size: 100%;
      mask-size: var(--spacing-s);
    }

    &.button--large {
      inline-size: var(--spacing-xxl);
      block-size: var(--spacing-xxl);
      padding: 0;
    }

    &.button--small {
      inline-size: var(--spacing-l);
      block-size: var(--spacing-l);
      padding: 0;
    }

    &.button--extra-small {
      inline-size: var(--spacing-m);
      block-size: var(--spacing-m);
      padding: 0;
    }
  }
}
/**
 * Dialog
 *
 * View the [Dialog package](https://github.com/previousnext/mixtape/tree/master/packages/dialog) on github.
 *
 * A dialog should be placed before the closing <body> tag
 *
 * Wrapper: section--m
 *
 * Markup: dialog.twig
 *
 * Style guide: Elements.dialog
 */
@layer defaults {
  mx-dialog {
    display: block;
  }
}
@layer components {
  .dialog {
    max-inline-size: var(--container-max-width);
    max-block-size: 90vh;
    overflow: auto hidden;
    overscroll-behavior: contain;
    background-color: var(--colour-background);
    border: 1px solid var(--colour-border);
    padding: 0;
    margin: auto;

    &::backdrop {
      background-color: hsla(0deg 0% 100% / 75%);
    }

    & .dialog__content {
      padding: var(--spacing-s);

      @media (width >= 720px) {
        padding-block: var(--spacing-l);
        padding-inline: var(--spacing-xl);
      }
    }

    & > .icon--close {
      position: absolute;
      inset-block-start: var(--spacing-xxs);
      inset-inline-end: var(--spacing-xxs);
      border: 0;
      z-index: 11;
    }

    & .form__actions {
      border-block-start: 1px solid var(--colour-border);
      padding-block: var(--spacing-s);
      place-content: center;
    }
  }
}
/**
 * Dialog fullscreen.
 *
 * Dialog Fullscreen is part of the Dialog package. View the [Dialog package](https://github.com/previousnext/mixtape/tree/master/packages/dialog) on github.
 *
 * Wrapper: section--m
 *
 * Markup: dialog-fullscreen.twig
 *
 * Style guide: Elements.dialog.fullscreen
 */
@layer components {
  .dialog--fullscreen {
    box-shadow: none;
    border: 0;
    inset-block-start: 0;
    inline-size: 100%;
    max-inline-size: none;
    block-size: 100%;
    max-block-size: none;

    &[open] {
      display: flex;
      flex-direction: column;
    }

    & .dialog__content {
      max-inline-size: var(--container-max-width);
      margin: auto;
    }
  }
}
/* Prevent scrolling on the body. */
.body--scroll-lock,
.body-dialog--open {
  overflow: hidden;
  position: fixed;
  inline-size: 100vw;
}
/**
 * Call To Action
 *
 * View the [Call To Action package](https://github.com/previousnext/mixtape/tree/master/packages/cta) on github.
 *
 * Markup: cta-example.twig
 *
 * Style guide: Elements.cta
 */
@layer components {
  .cta {
    inline-size: 100%;
    margin-block: 0;
    margin-inline: auto;
    text-align: center;

    & .cta__actions {
      padding-block-start: var(--spacing-m);
    }
  }
}
@layer utilities {
  .vertical-flow-flex.cta {
    align-items: center;
  }
}
/**
 * Link List
 *
 * View the [Link List package](https://github.com/previousnext/mixtape/tree/master/packages/link-list) on github.
 *
 * .link-list--reverse - Reverse layout
 *
 * Wrapper: section section--m
 *
 * Markup: link-list-grid.twig
 *
 * Style guide: Elements.link-list
 */
@layer elements {
  .link-list {
    --spacing: var(--spacing-xxxs);
    --min-height: var(--spacing-xl);

    list-style-type: none;
    padding-inline-start: 0;

    & a {
      display: block;
      text-decoration-line: none;
      color: inherit;

      @media (hover: hover){

      &:hover {
        text-decoration-line: underline;
      }
      }
    }

    & li {
      min-block-size: var(--min-height);
      border-block-end: 1px solid var(--colour-border);

      &:last-child {
        border-block-end: 0;
      }
    }

    & .icon {
      position: relative;
      display: flex;
      align-items: center;
      padding-block: var(--spacing) var(--spacing);
      inline-size: 100%;
      gap: var(--spacing-s);

      &::before {
        flex: 0 0 auto;
        mask-position: left center;
      }
    }

    &:where(:not(.link-list--reverse)) .icon {
      justify-content: space-between;

      &::before {
        mask-position: right center;
        order: 2;
      }
    }
  }

  [dir="rtl"] .link-list,
  .translated-rtl .link-list {
    & .icon::before {
      mask-position: left center;
    }

    &.link-list--reverse .icon::before {
      mask-position: right center;
    }
  }

  * + .link-list {
    margin-block-start: var(--spacing-m);
  }
}
/**
 * Tabs
 *
 * View the [Tabs package](https://github.com/previousnext/mixtape/tree/master/packages/tabs) on github.
 * Variations are available such as `.tabs--centered` and `.tabs--lined`
 *
 * The .tabs--same-height class will prevent layout shift and is recommended. Remove it for the
 * classic varied height panels.
 *
 * .tabs--lined - Lined
 *
 * Wrapper: section section--m
 *
 * Default: false
 *
 * Markup: tabs.twig
 *
 * Style guide: Elements.tabs
 */
@layer components {
  .tabs {
    --tab-min-width: 0;

    position: relative;

    & .tab__list {
      display: none;
      inline-size: 100%;
      margin-block: 0;
      padding: 0;
      list-style: none;

      @media (width < 720px) {
        &.tab__list--open {
          display: block;
        }
      }

      @media (width >= 720px) {
        display: flex;
        flex-wrap: wrap;
        gap: var(--spacing-xxs);
      }

      & .tab__item {
        padding: 0;
        margin: 0;
      }

      & :is(a, .tab__anchor) {
        display: block;
        -webkit-text-decoration: none;
        text-decoration: none;
        outline-offset: var(--outline-offset);
        min-inline-size: var(--tab-min-width);

        &[aria-selected="true"] {
          background-color: var(--colour-background-reverse);
          color: var(--colour-foreground-reverse);
          border-color: var(--colour-background-reverse);
        }
      }
    }

    & .tab__panel {
      inline-size: 100%;

      &:is(:focus-visible, :focus) {
        outline-offset: var(--outline-offset);
      }
    }

    & .tabs__toggle {
      inline-size: 100%;

      @media (width >= 720px) {
        display: none;
      }
    }

    &.tabs--lined {
      & .tab__list {
        @media (width >= 720px) {
          border-block-end: 2px solid var(--colour-background-reverse);
        }
      }

      & .tab__item {
        & :is(a, .tab__anchor) {
          border-block-end: 1px solid var(--colour-background-reverse);

          @media (width >= 720px) {
            border: 2px solid var(--colour-background-reverse);
            border-block-end: 0;
          }
        }

        & .button {
          border-radius: 0;
          margin-block-end: 0;

          @media (width >= 720px) {
            border-radius: var(--border-radius) var(--border-radius) 0 0;
          }
        }
      }
    }

    &.tabs--centered {
      & .tab__list {
        place-content: center;
      }
    }

    &.tabs--same-height {
      display: grid;

      & .tab__panel {
        grid-column-start: 1;
        grid-row-start: 2;
        z-index: 2;
        transition: opacity 0.2s ease-in-out;

        &[hidden] {
          display: block;
          opacity: 0;
          z-index: 1;
        }
      }
    }
  }
}
/**
 * Messages
 *
 * View the [Messages package](https://github.com/previousnext/mixtape/tree/master/packages/message) on github.
 *
 * .message--info.icon.icon--info - Info
 * .message--success.icon.icon--success - Success
 * .message--error.icon.icon--error - Error
 * .message--warning.icon.icon--warning - Warning
 *
 * Wrapper: section section--m
 *
 * Markup: messages.twig
 *
 * Style guide: Elements.messages
 */
@layer elements {
  .message {
    --background: var(--colour-background-alt);
    --foreground: var(--colour-foreground);

    display: grid;
    gap: var(--gap-s);
    padding-block: var(--spacing-xxs);
    padding-inline: var(--spacing-s);
    border: 1px solid;
    background-color: var(--background);
    color: var(--foreground);
    border-radius: var(--border-radius);

    &:is(.message--has-close, :has(.icon--close)) {
      grid-template-columns: auto min-content;
      grid-template-areas: "content close";
    }

    &.icon {
      --icon-size: 1.25rem;

      grid-template-columns: min-content auto;
      grid-template-areas: "icon content";

      &::before {
        grid-area: icon;
        block-size: var(--icon-size);
        inline-size: var(--icon-size);
        background-size: contain;
      }

      &:has(.icon--close) {
        grid-template-columns: min-content auto min-content;
        grid-template-areas: "icon content close";
      }
    }

    & .message__content {
      grid-area: content;
    }

    &.message--status,
    &.message--info {
      --foreground: var(--colour-info-foreground);
      --background: var(--colour-info-background);
    }

    &.message--success {
      --foreground: var(--colour-success-foreground);
      --background: var(--colour-success-background);
    }

    &.message--error {
      --foreground: var(--colour-error-foreground);
      --background: var(--colour-error-background);
    }

    &.message--warning {
      --foreground: var(--colour-warning-foreground);
      --background: var(--colour-warning-background);
    }

    & .message__close {
      grid-area: close;
      appearance: none;
      inline-size: var(--spacing-s);
      block-size: var(--spacing-s);
      padding: 0;
      border: 0;
      background-color: transparent;
    }
  }
}
/* stylelint-disable selector-class-pattern, function-no-unknown, property-no-unknown, selector-pseudo-class-no-unknown */
/**
 * Drop menu
 *
 * **Experimental** Using new CSS Anchoring and Popover API's, requires JS polyfill.
 * @see https://developer.mozilla.org/en-US/docs/Web/API/Popover_API#browser_compatibility
 *
 * Wrapper: section--m
 *
 * Markup: drop-menu.twig
 *
 * Style guide: Elements.drop-menu
 */
/**
 * Drop menu (expandable)
 *
 * Wrap the drop menu in a .container to activate the @container query version, that expands
 * and makes all options visible when there is sufficient container space.
 *
 * Set the design token `breakpoint.dropMenu` to change the point the container query is triggered.
 *
 * Note: this is experimental, Safari has some issues combining the container query with the
 * anchor positioning JS polyfill.
 *
 * Wrapper: section--m
 *
 * Markup: drop-menu-expandable.twig
 *
 * Style guide: Elements.drop-menu.expandable
 */
@layer components {
  .drop-menu__trigger:is([popovertarget]) {
    anchor-name: --drop-menu;

    &:is([aria-expanded="true"])::before {
      rotate: 180deg;
    }
  }

  .drop-menu:is([popover]) {
    position: absolute;
    background-color: var(--colour-background);
    color: var(--colour-foreground);
    margin: 0;

    @supports (inline-size: anchor-size(width)) {
      position-anchor: --drop-menu;
      inset-area: bottom;
      position-try-options: flip-block;
      min-inline-size: anchor-size(width);
    }

    &:popover-open {
      display: flex;
      flex-direction: column;
    }

    & button {
      appearance: none;
      line-height: inherit;
      font-family: inherit;
      font-size: inherit;
      background-color: transparent;
      color: inherit;
      border: unset;
      text-align: start;

      &[aria-checked="true"] {
        text-decoration-line: underline;
      }
    }

    & :is(a, button) {
      padding-block: var(--spacing-xxxs);
      padding-inline: var(--spacing-xs);
      cursor: pointer;
      min-inline-size: 15ch;
    }
  }

  .container {
    & > .drop-menu__trigger:is([popovertarget]) {
      @container drop-menu (min-width: 420px) {
        all: unset;
        pointer-events: none;
        font-weight: var(--font-weight-bold);

        &::before {
          display: none;
        }
      }
    }

    & > .drop-menu:is([popover]) {
      @container drop-menu (min-width: 420px) {
        all: unset;

        & :is(a, button) {
          min-inline-size: auto;
        }
      }
    }
  }
}
/**
 * Utility
 *
 * Style guide: base.utility
 */
/**
 * Visually hidden
 *
 * Visually Hidden is defined in the Base package. View the [Base package](https://github.com/previousnext/mixtape/tree/master/packages/base) on github.
 *
 * Markup: visually-hidden.twig
 *
 * Style guide: base.utility.visually-hidden
 */
@layer utilities {
  .hidden,
  .visually-hidden,
  .sr-only {
    clip-path: polygon(0 0, 0 0, 0 0, 0 0);
    box-sizing: border-box;
    position: absolute !important;
    margin: 0;
    padding: 0;
  }

  .visually-hidden.visually-hidden--focussable:focus,
  .sr-only.sr-only--focussable:focus {
    clip-path: none;
    position: revert !important;
    margin: revert;
    padding: revert;
  }
}
/**
 * Responsive utility class
 *
 * Responsive Utility Class is defined in the Base package. View the [Base package](https://github.com/previousnext/mixtape/tree/master/packages/base) on github.
 *
 * Markup: only.twig
 *
 * Style guide: base.utility.only
 */
@layer utilities {
  .mobile-only {
    @media (width >= 946px) {
      display: none;
    }
  }

  .desktop-only,
  .global .desktop-only {
    @media (width < 946px) {
      display: none;
    }
  }

  .print-only {
    display: none !important;

    @media print {
      display: block !important;
    }
  }

  .screen-only {
    @media print {
      display: none !important;
    }
  }
}
/**
 * Skeleton and loading UI.
 */
@layer utilities {
  .skeleton {
    --background: hsl(0deg 0% 0% / 10%);
    --opacity-low: 0.5;
    --opacity-high: 0.75;
    --duration: 1500ms;

    animation: pulse var(--duration) ease infinite;
  }

  .skeleton--bg {
    background-color: var(--background);
    border-radius: var(--border-radius);
    z-index: -1;
  }
}
@keyframes pulse {
  0% {
    opacity: var(--opacity-low);
  }

  75% {
    opacity: var(--opacity-high);
  }

  100% {
    opacity: var(--opacity-low);
  }
}
#kssref-example-layout-grid-container .container,
#kssref-example-layout-grid-container-dynamic .container,
#kssref-example-elements-content-card .container,
#kssref-example-elements-drop-menu-expandable .container {
  resize: horizontal;
  overflow: hidden;
}
#kssref-example-layout-grid-container .grid,
#kssref-example-layout-grid-container-dynamic .grid,
#kssref-example-layout-grid .grid,
#kssref-example-layout-grid-dynamic .grid,
#kssref-example-layout-page-sidebar .grid--sidebar {
  margin-block-end: 1rem;

  & > * {
    display: flex;
    place-content: center;
    padding: 1rem 0;
    background-color: #E5E9EF;
    line-height: 0;
  }
}
#kssref-example-layout-page,
#kssref-example-layout-page .kss-example {
  height: 100%;
}
#kssref-example-base-icon,
[id^="kssref-example-base-icon-"]:not(#kssref-example-base-icon-text) {
  text-align: right;

  & .icon {
    padding: 0.125rem;

    &.icon--white {
      background-color: var(--colour-primary);
    }
  }
}
#kssref-example-layout-page .page {
  min-height: 100%;
}
/* Backgrounds */
.background--primary {
  --colour-background: var(--colour-primary);
}
.background--primary-light {
  --colour-background: var(--colour-primary-light);
}
.background--secondary {
  --colour-background: var(--colour-secondary);
}
.background--secondary-light {
  --colour-background: var(--colour-secondary-light);
}
.background--tertiary {
  --colour-background: var(--colour-tertiary);
}
.background--tertiary-light {
  --colour-background: var(--colour-tertiary-light);
}
.background--white {
  background-color: hsl(0deg 0% 100%);
}
.background--black-05 {
  background-color: hsl(0deg 0% 95%);
}
.background--black-10 {
  background-color: hsl(0deg 0% 90%);
}
.background--black-25 {
  background-color: hsl(0deg 0% 75%);
}
.background--black-50 {
  background-color: hsl(0deg 0% 50%);
}
.background--black-75 {
  background-color: hsl(0deg 0% 25%);
}
.background--black-90 {
  background-color: hsl(0deg 0% 10%);
}
.background--black-95 {
  background-color: hsl(0deg 0% 05%);
}
.background--black {
  background-color: hsl(0deg 0% 0%);
}
.background--alert-success {
  background-color: hsl(123deg 40% 35%);
}
.background--alert-success-light {
  background-color: hsl(123deg 40% 95%);
}
.background--alert-error {
  background-color: hsl(0deg 66% 46%);
}
.background--alert-error-light {
  background-color: hsl(0deg 66% 95%);
}
.background--alert-warning {
  background-color: hsl(31deg 93% 45%);
}
.background--alert-warning-light {
  background-color: hsl(31deg 93% 95%);
}
#kssref-example-base-icon-colours .kss-section__example,
#kssref-elements-buttons-primary-reverse .kss-section__example {
  background-color: hsl(0deg 0% 90%);
}
#kssref-elements-buttons-reverse .kss-section__example,
#kssref-elements-buttons-white .kss-section__example {
  background-color: hsl(0deg 0% 25%);
}
/* Navigation */
#kssref-example-grouped-components-global-header-primary-header,
#kssref-example-elements-navigation-dropdown-navigation {
  & .kss-example {
    height: 21.875rem;
  }
}
#kssref-example-grouped-components-global-header,
#kssref-example-grouped-components-global-header-primary-header-stacked,
#kssref-example-elements-navigation-mega-nav {
  & .kss-example {
    height: 34.375rem;
  }
}
#kssref-example-elements-drop-menu .kss-example,
#kssref-example-elements-drop-menu-expandable .container {
  height: 15.625rem;
}
#kssref-example-elements-navigation-footer-navigation {
  & .nav__toggle {
    display: none;
  }
}
/**
 * Adding a height here prevents the scroll from displaying.
 *
 * #kssref-example-grouped-components-elevator {
 *   & .kss-example {
 *     height: 400px;
 *     overflow: scroll;
 *   }
 * }
 */
#kssref-example-grouped-components-sticky {
  max-height: 400px;
}
/* Tabs */
#kssref-example-elements-tab-list {
  & .kss-example {
    & .block-local-tasks-block {
      & .tab-list {
        inset-block-start: 0;
      }
    }
  }
}
/* Dialogs */
#kssref-example-elements-dialog,
#kssref-example-elements-dialog-fullscreen {
  & .kss-example {
    min-height: 350px;
  }
}
/* Icon text */
#kssref-example-base-icon-text {
  display: block;

  & .kss-example {
    margin-block-end: var(--spacing-m) !important;
  }
}
/** Overflow breaks position:sticky */
#kssref-example-grouped-components-sticky .kss-example {
  overflow: unset;
}
/** Card width */
#kssref-example-elements-content-card-link .container {
  width: calc(var(--section-m) + var(--section-m) + 23.25rem);
  margin: 0 auto;
}
/**
 * Theme switcher.
 */
.theme-switcher {
  position: fixed;
  top: 1rem;
  right: 1rem;
}
body[data-theme="disco"] {
  --colour-primary: #390099;
  --colour-secondary: #ff0054;
  --colour-tertiary: #9e0059;
  --colour-background-reverse: #9e0059;
  --colour-link-orig: #ff0054;
  --colour-link: #ff0054;
  --colour-foreground: #390099;
  --colour-foreground-orig: #390099;
  --colour-foreground-alt: #9e0059;
  --colour-background-alt: #ffc7d9;
  --blockquote-line-color: #ff0054;
  --font-family-heading: "Space Grotesk", Inter, helvetica, arial, sans-serif;
  --font-size-xl: 2.5rem;
  --font-size-xxxl: 3.75rem;
  --font-size-l: 1.875rem;
  --container-max-width: 87.5rem;
  --container-max-width-narrow: 50rem;
  --border-radius-l: 0.25rem;
  --ratio: 1 1;

  & .grid > .content-card,
  & .content-card.grid__col {
    max-inline-size: 446px;
  }

  & .global .section__content,
  & .global__footer .section__content {
    max-inline-size: 1800px;
  }

  & #kssref-example-mockups-home .page__middle .section:not(.section--dark):not(.background--alt) {
    &:nth-child(3) {
      background-color: #dac7fb;
    }
    &:nth-child(4) {
      background-color: var(--colour-background-alt);
    }
    &:nth-child(5) {
      background-color: #f7df90;
    }
  }

  & #kssref-example-mockups-index .page__middle .section {
    &:nth-child(2),
    &:nth-child(3) {
      background-color: #dac7fb;
    }
  }

  & #kssref-example-mockups-sidebar .page__middle .section {
    &:nth-child(2) {
      background-color: #dac7fb;
      margin-bottom: var(--spacing-xxxl);
    }
  }
}

/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2tzcy9rc3MuY3NzIiwiLi4vLi4vcGFja2FnZXMvY29uc3RhbnRzL3NyYy9jb25zdGFudHMuY3NzIiwiLi4vLi4vcGFja2FnZXMvY29uc3RhbnRzL3NyYy9jdXN0b20tbWVkaWEuY3NzIiwiLi4vLi4vcGFja2FnZXMvYmFzZS9zcmMvYmFzZS5jc3MiLCIuLi8uLi9wYWNrYWdlcy9iYXNlL3NyYy9fY29sb3JzLmNzcyIsIi4uLy4uL3BhY2thZ2VzL2Jhc2Uvc3JjL19hbmltYXRlZC5jc3MiLCIuLi8uLi9wYWNrYWdlcy9iYXNlL3NyYy9fYmFzZS5jc3MiLCIuLi8uLi9wYWNrYWdlcy9iYXNlL3NyYy9fZ2VuZXJpYy5jc3MiLCIuLi8uLi9wYWNrYWdlcy9iYXNlL3NyYy9fZmxvdy5jc3MiLCIuLi8uLi9wYWNrYWdlcy9iYXNlL3NyYy9faGVhZGluZ3MuY3NzIiwiLi4vLi4vcGFja2FnZXMvYmFzZS9zcmMvX2Jsb2NrcXVvdGUuY3NzIiwiLi4vLi4vcGFja2FnZXMvYmFzZS9zcmMvX2hyLmNzcyIsIi4uLy4uL3BhY2thZ2VzL2Jhc2Uvc3JjL19saW5rcy5jc3MiLCIuLi8uLi9wYWNrYWdlcy9iYXNlL3NyYy9fdGV4dC1zaXplcy5jc3MiLCIuLi8uLi9wYWNrYWdlcy9iYXNlL3NyYy9fdGV4dC1hbGlnbi5jc3MiLCIuLi8uLi9wYWNrYWdlcy9iYXNlL3NyYy9fbWl4aW5zLmNzcyIsIi4uLy4uL3BhY2thZ2VzL2Jhc2Uvc3JjL19zcGFjaW5nLmNzcyIsIi4uLy4uL3BhY2thZ2VzL2Jhc2Uvc3JjL19pbWFnZS5jc3MiLCIuLi8uLi9wYWNrYWdlcy9iYXNlL3NyYy9faW1hZ2UtYWxpZ24uY3NzIiwiLi4vLi4vcGFja2FnZXMvYmFzZS9zcmMvX3ZpZGVvLmNzcyIsIi4uLy4uL3BhY2thZ2VzL2Jhc2Uvc3JjL190YWJsZS5jc3MiLCIuLi8uLi9wYWNrYWdlcy9iYXNlL3NyYy9fcHJpbnQuY3NzIiwiLi4vLi4vcGFja2FnZXMvbGF5b3V0L3NyYy9fc2VjdGlvbi5jc3MiLCIuLi8uLi9wYWNrYWdlcy9sYXlvdXQvc3JjL19ncmlkLmNzcyIsIi4uLy4uL3BhY2thZ2VzL2xheW91dC9zcmMvX2NvbnRhaW5lci1ncmlkLmNzcyIsIi4uLy4uL3BhY2thZ2VzL2xheW91dC9zcmMvX3V0aWxzLmNzcyIsIi4uLy4uL3BhY2thZ2VzL2FjY29yZGlvbi9zcmMvYWNjb3JkaW9uLmNzcyIsIi4uLy4uL3BhY2thZ2VzL2J1dHRvbnMvc3JjL19idXR0b25zLmNzcyIsIi4uLy4uL3BhY2thZ2VzL2J1dHRvbnMvc3JjL19idXR0b25zLXByaW1hcnkuY3NzIiwiLi4vLi4vcGFja2FnZXMvYnV0dG9ucy9zcmMvX2J1dHRvbnMtdGVydGlhcnkuY3NzIiwiLi4vLi4vcGFja2FnZXMvYnV0dG9ucy9zcmMvX2J1dHRvbnMtc2Vjb25kYXJ5LmNzcyIsIi4uLy4uL3BhY2thZ2VzL2J1dHRvbnMvc3JjL19idXR0b25zLXJldmVyc2UuY3NzIiwiLi4vLi4vcGFja2FnZXMvaWNvbi9zcmMvX2ljb24uY3NzIiwiLi4vLi4vcGFja2FnZXMvaWNvbi9zcmMvX21peGluLWljb24uY3NzIiwiLi4vLi4vcGFja2FnZXMvaWNvbi9zcmMvX2V4dGVuZGVkLXNldC5jc3MiLCIuLi8uLi9wYWNrYWdlcy9mb3JtL3NyYy9mb3JtLmNzcyIsIi4uLy4uL3BhY2thZ2VzL2dsb2JhbC9zcmMvX2dsb2JhbC5jc3MiLCIuLi8uLi9wYWNrYWdlcy9nbG9iYWwvc3JjL19nbG9iYWwtcHJpbWFyeS5jc3MiLCIuLi8uLi9wYWNrYWdlcy9nbG9iYWwvc3JjL19nbG9iYWwtc2Vjb25kYXJ5LmNzcyIsIi4uLy4uL3BhY2thZ2VzL2dsb2JhbC9zcmMvX2dsb2JhbC1mb290ZXIuY3NzIiwiLi4vLi4vcGFja2FnZXMvbmF2aWdhdGlvbi9zcmMvX25hdmlnYXRpb24uY3NzIiwiLi4vLi4vcGFja2FnZXMvbmF2aWdhdGlvbi9zcmMvX25hdmlnYXRpb24tYnJlYWRjcnVtYi5jc3MiLCIuLi8uLi9wYWNrYWdlcy9uYXZpZ2F0aW9uL3NyYy9fbmF2aWdhdGlvbi1kcm9wZG93bi5jc3MiLCIuLi8uLi9wYWNrYWdlcy9uYXZpZ2F0aW9uL3NyYy9fbmF2aWdhdGlvbi1tZWdhLmNzcyIsIi4uLy4uL3BhY2thZ2VzL25hdmlnYXRpb24vc3JjL19uYXZpZ2F0aW9uLW9yZGVyZWQuY3NzIiwiLi4vLi4vcGFja2FnZXMvbmF2aWdhdGlvbi9zcmMvX25hdmlnYXRpb24tanVtcC5jc3MiLCIuLi8uLi9wYWNrYWdlcy9uYXZpZ2F0aW9uL3NyYy9fbmF2aWdhdGlvbi1mb290ZXIuY3NzIiwiLi4vLi4vcGFja2FnZXMvbmF2aWdhdGlvbi9zcmMvX25hdmlnYXRpb24tY29sbGFwc2libGUuY3NzIiwiLi4vLi4vcGFja2FnZXMvcGFnZS9zcmMvX3BhZ2UtdGl0bGUuY3NzIiwiLi4vLi4vcGFja2FnZXMvcGFnZS9zcmMvX3BhZ2UuY3NzIiwiLi4vLi4vcGFja2FnZXMvdGlsZXMvc3JjL3RpbGVzLmNzcyIsIi4uLy4uL3BhY2thZ2VzL3ByZXZpb3VzLW5leHQvc3JjL3ByZXZpb3VzLW5leHQuY3NzIiwiLi4vLi4vcGFja2FnZXMvcGFnaW5hdGlvbi9zcmMvcGFnaW5hdGlvbi5jc3MiLCIuLi8uLi9wYWNrYWdlcy9lbGV2YXRvci9zcmMvZWxldmF0b3IuY3NzIiwiLi4vLi4vcGFja2FnZXMvc3RpY2t5L3NyYy9zdGlja3kuY3NzIiwiLi4vLi4vcGFja2FnZXMvZHJ1cGFsL3NyYy9kcnVwYWwuY3NzIiwiLi4vLi4vcGFja2FnZXMvdGFnL3NyYy90YWcuY3NzIiwiLi4vLi4vcGFja2FnZXMvY29udGVudC1jYXJkL3NyYy9jb250ZW50LWNhcmQuY3NzIiwiLi4vLi4vcGFja2FnZXMvYnV0dG9uLWdyb3VwL3NyYy9idXR0b24tZ3JvdXAuY3NzIiwiLi4vLi4vcGFja2FnZXMvYnV0dG9uLWljb24vc3JjL2J1dHRvbi1pY29uLmNzcyIsIi4uLy4uL3BhY2thZ2VzL2RpYWxvZy9zcmMvZGlhbG9nLmNzcyIsIi4uLy4uL3BhY2thZ2VzL2N0YS9zcmMvY3RhLmNzcyIsIi4uLy4uL3BhY2thZ2VzL2xpbmstbGlzdC9zcmMvbGluay1saXN0LmNzcyIsIi4uLy4uL3BhY2thZ2VzL3RhYnMvc3JjL3RhYnMuY3NzIiwiLi4vLi4vcGFja2FnZXMvbWVzc2FnZXMvc3JjL21lc3NhZ2VzLmNzcyIsIi4uLy4uL3BhY2thZ2VzL2Ryb3AtbWVudS9zcmMvZHJvcC1tZW51LmNzcyIsIi4uLy4uL3BhY2thZ2VzL3V0aWxpdGllcy9zcmMvdXRpbGl0aWVzLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUlBLDJGQUEyRjtBQUozRjs7RUFFRTtBQ0ZGOztFQUVFO0FDRkYsZ0JBQWdCO0FBZ0JoQix5REFBeUQ7QUFJekQsdUJBQXVCO0FEZHZCO0VBQ0UsbUJBQW1CO0VBQ25CLHNDQUFtRDtFQUNuRCx5Q0FBMEQ7RUFDMUQsb0NBQW1EO0VBQ25ELHlDQUEwRDtFQUMxRCxtQ0FBK0M7RUFDL0Msb0NBQTBEO0VBQzFELGlDQUFtRDtFQUNuRCx5Q0FBcUQ7O0VBRXJELGlCQUFpQjtFQUNqQixpQ0FBK0M7RUFDL0Msd0NBQTBEO0VBQzFELHdDQUFtRDtFQUNuRCw4Q0FBOEQ7RUFDOUQsbUNBQWlEO0VBQ2pELHlDQUE0RDs7RUFFNUQsbUJBQW1CO0VBQ25CLDhDQUE4RDtFQUM5RCxpREFBcUU7RUFDckUsNENBQThEO0VBQzlELDJDQUEwRDtFQUMxRCw4Q0FBcUU7RUFDckUseUNBQThEO0VBQzlELCtDQUFnRTs7RUFFaEUsd0NBQXdDO0VBQ3hDLHlDQUF3RDtFQUN4RCw4Q0FBK0Q7RUFDL0QsMkNBQXdEO0VBQ3hELHdDQUFvRDtFQUNwRCx5Q0FBK0Q7RUFDL0Qsc0NBQXdEO0VBQ3hELDhDQUEwRDs7RUFFMUQsa0JBQWtCO0VBQ2xCLDRDQUEwRDtFQUMxRCw0Q0FBMEQ7RUFDMUQsZ0RBQThEO0VBQzlELGdEQUE4RDtFQUM5RCwrQ0FBOEQ7RUFDOUQsK0NBQThEO0VBQzlELDhDQUF3RDtFQUN4RCw4Q0FBd0Q7O0VBRXhELGVBQWU7RUFDZixvQ0FBd0M7RUFDeEMsNENBQW1EOztFQUVuRCxrQkFB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QTs7SUFFRSx1QkFBdUI7RUFDekI7O0VBRUE7SUFDRTtNQUNFLHlCQUF5QjtJQUMzQjtJQUNBO01BQ0UsOENBQThDO0lBQ2hEO0lBQ0E7TUFDRSx5QkFBeUI7SUFDM0I7RUFDRjs7RUFFQTtJQUNFOztNQUVFLHlCQUF5QjtJQUMzQjtFQUNGOztFQUVBO0lBQ0U7TUFDRSx5QkFBeUI7TUFDekIsa0NBQWtDO0lBQ3BDO0VBQ0Y7QUFDRiIsImZpbGUiOiJrc3MuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIEltcG9ydCBAbWl4dGFwZSBDU1MuXG4gKi9cblxuQGltcG9ydCB1cmwoJ2h0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9U3BhY2UrR3JvdGVzazp3Z2h0QDcwMCZkaXNwbGF5PXN3YXAnKTtcblxuQGltcG9ydCBcIi4uL3BhY2thZ2VzL2NvbnN0YW50cy9zcmMvY29uc3RhbnRzLmNzc1wiO1xuQGltcG9ydCBcIi4uL3BhY2thZ2VzL2Jhc2VcIjtcbkBpbXBvcnQgXCIuLi9wYWNrYWdlcy9sYXlvdXRcIjtcbkBpbXBvcnQgXCIuLi9wYWNrYWdlcy9hY2NvcmRpb25cIjtcbkBpbXBvcnQgXCIuLi9wYWNrYWdlcy9idXR0b25zXCI7XG5AaW1wb3J0IFwiLi4vcGFja2FnZXMvaWNvblwiO1xuQGltcG9ydCBcIi4uL3BhY2thZ2VzL2Zvcm1cIjtcbkBpbXBvcnQgXCIuLi9wYWNrYWdlcy9nbG9iYWxcIjtcbkBpbXBvcnQgXCIuLi9wYWNrYWdlcy9uYXZpZ2F0aW9uXCI7XG5AaW1wb3J0IFwiLi4vcGFja2FnZXMvcGFnZVwiO1xuQGltcG9ydCBcIi4uL3BhY2thZ2VzL3RpbGVzXCI7XG5AaW1wb3J0IFwiLi4vcGFja2FnZXMvcHJldmlvdXMtbmV4dFwiO1xuQGltcG9ydCBcIi4uL3BhY2thZ2VzL3BhZ2luYXRpb25cIjtcbkBpbXBvcnQgXCIuLi9wYWNrYWdlcy9lbGV2YXRvclwiO1xuQGltcG9ydCBcIi4uL3BhY2thZ2VzL3N0aWNreVwiO1xuQGltcG9ydCBcIi4uL3BhY2thZ2VzL2RydXBhbFwiO1xuQGltcG9ydCBcIi4uL3BhY2thZ2VzL3RhZ1wiO1xuQGltcG9ydCBcIi4uL3BhY2thZ2VzL2NvbnRlbnQtY2FyZFwiO1xuQGltcG9ydCBcIi4uL3BhY2thZ2VzL2J1dHRvbi1ncm91cFwiO1xuQGltcG9ydCBcIi4uL3BhY2thZ2VzL2J1dHRvbi1pY29uXCI7XG5AaW1wb3J0IFwiLi4vcGFja2FnZXMvZGlhbG9nXCI7XG5AaW1wb3J0IFwiLi4vcGFja2FnZXMvY3RhXCI7XG5AaW1wb3J0IFwiLi4vcGFja2FnZXMvbGluay1saXN0XCI7XG5AaW1wb3J0IFwiLi4vcGFja2FnZXMvdGFic1wiO1xuQGltcG9ydCBcIi4uL3BhY2thZ2VzL21lc3NhZ2VzXCI7XG5AaW1wb3J0IFwiLi4vcGFja2FnZXMvZHJvcC1tZW51XCI7XG5AaW1wb3J0IFwiLi4vcGFja2FnZXMvdXRpbGl0aWVzXCI7XG5cbiNrc3NyZWYtZXhhbXBsZS1sYXlvdXQtZ3JpZC1jb250YWluZXIgLmNvbnRhaW5lcixcbiNrc3NyZWYtZXhhbXBsZS1sYXlvdXQtZ3JpZC1jb250YWluZXItZHluYW1pYyAuY29udGFpbmVyLFxuI2tzc3JlZi1leGFtcGxlLWVsZW1lbnRzLWNvbnRlbnQtY2FyZCAuY29udGFpbmVyLFxuI2tzc3JlZi1leGFtcGxlLWVsZW1lbnRzLWRyb3AtbWVudS1leHBhbmRhYmxlIC5jb250YWluZXIge1xuICByZXNpemU6IGhvcml6b250YWw7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbiNrc3NyZWYtZXhhbXBsZS1sYXlvdXQtZ3JpZC1jb250YWluZXIgLmdyaWQsXG4ja3NzcmVmLWV4YW1wbGUtbGF5b3V0LWdyaWQtY29udGFpbmVyLWR5bmFtaWMgLmdyaWQsXG4ja3NzcmVmLWV4YW1wbGUtbGF5b3V0LWdyaWQgLmdyaWQsXG4ja3NzcmVmLWV4YW1wbGUtbGF5b3V0LWdyaWQtZHluYW1pYyAuZ3JpZCxcbiNrc3NyZWYtZXhhbXBsZS1sYXlvdXQtcGFnZS1zaWRlYmFyIC5ncmlkLS1zaWRlYmFyIHtcbiAgbWFyZ2luLWJsb2NrLWVuZDogMXJlbTtcblxuICAmID4gKiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwbGFjZS1jb250ZW50OiBjZW50ZXI7XG4gICAgcGFkZGluZzogMXJlbSAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNFNUU5RUY7XG4gICAgbGluZS1oZWlnaHQ6IDA7XG4gIH1cbn1cblxuI2tzc3JlZi1leGFtcGxlLWxheW91dC1wYWdlLFxuI2tzc3JlZi1leGFtcGxlLWxheW91dC1wYWdlIC5rc3MtZXhhbXBsZSB7XG4gIGhlaWdodDogMTAwJTtcbn1cblxuI2tzc3JlZi1leGFtcGxlLWJhc2UtaWNvbixcbltpZF49XCJrc3NyZWYtZXhhbXBsZS1iYXNlLWljb24tXCJdOm5vdCgja3NzcmVmLWV4YW1wbGUtYmFzZS1pY29uLXRleHQpIHtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG5cbiAgJiAuaWNvbiB7XG4gICAgcGFkZGluZzogMnB4O1xuXG4gICAgJi5pY29uLS13aGl0ZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvdXItcHJpbWFyeSk7XG4gICAgfVxuICB9XG59XG5cbiNrc3NyZWYtZXhhbXBsZS1sYXlvdXQtcGFnZSAucGFnZSB7XG4gIG1pbi1oZWlnaHQ6IDEwMCU7XG59XG5cbi8qIEJhY2tncm91bmRzICovXG5cbi5iYWNrZ3JvdW5kLS1wcmltYXJ5IHtcbiAgLS1jb2xvdXItYmFja2dyb3VuZDogdmFyKC0tY29sb3VyLXByaW1hcnkpO1xufVxuXG4uYmFja2dyb3VuZC0tcHJpbWFyeS1saWdodCB7XG4gIC0tY29sb3VyLWJhY2tncm91bmQ6IHZhcigtLWNvbG91ci1wcmltYXJ5LWxpZ2h0KTtcbn1cblxuLmJhY2tncm91bmQtLXNlY29uZGFyeSB7XG4gIC0tY29sb3VyLWJhY2tncm91bmQ6IHZhcigtLWNvbG91ci1zZWNvbmRhcnkpO1xufVxuXG4uYmFja2dyb3VuZC0tc2Vjb25kYXJ5LWxpZ2h0IHtcbiAgLS1jb2xvdXItYmFja2dyb3VuZDogdmFyKC0tY29sb3VyLXNlY29uZGFyeS1saWdodCk7XG59XG5cbi5iYWNrZ3JvdW5kLS10ZXJ0aWFyeSB7XG4gIC0tY29sb3VyLWJhY2tncm91bmQ6IHZhcigtLWNvbG91ci10ZXJ0aWFyeSk7XG59XG5cbi5iYWNrZ3JvdW5kLS10ZXJ0aWFyeS1saWdodCB7XG4gIC0tY29sb3VyLWJhY2tncm91bmQ6IHZhcigtLWNvbG91ci10ZXJ0aWFyeS1saWdodCk7XG59XG5cbi5iYWNrZ3JvdW5kLS13aGl0ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRva2VuKFwiY29sb3VyLmJhc2Uud2hpdGVcIik7XG59XG5cbi5iYWNrZ3JvdW5kLS1ibGFjay0wNSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRva2VuKFwiY29sb3VyLnNoYWRlLmJsYWNrMDVcIik7XG59XG5cbi5iYWNrZ3JvdW5kLS1ibGFjay0xMCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRva2VuKFwiY29sb3VyLnNoYWRlLmJsYWNrMTBcIik7XG59XG5cbi5iYWNrZ3JvdW5kLS1ibGFjay0yNSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRva2VuKFwiY29sb3VyLnNoYWRlLmJsYWNrMjVcIik7XG59XG5cbi5iYWNrZ3JvdW5kLS1ibGFjay01MCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRva2VuKFwiY29sb3VyLnNoYWRlLmJsYWNrNTBcIik7XG59XG5cbi5iYWNrZ3JvdW5kLS1ibGFjay03NSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRva2VuKFwiY29sb3VyLnNoYWRlLmJsYWNrNzVcIik7XG59XG5cbi5iYWNrZ3JvdW5kLS1ibGFjay05MCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRva2VuKFwiY29sb3VyLnNoYWRlLmJsYWNrOTBcIik7XG59XG5cbi5iYWNrZ3JvdW5kLS1ibGFjay05NSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRva2VuKFwiY29sb3VyLnNoYWRlLmJsYWNrOTVcIik7XG59XG5cbi5iYWNrZ3JvdW5kLS1ibGFjayB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRva2VuKFwiY29sb3VyLmJhc2UuYmxhY2tcIik7XG59XG5cbi5iYWNrZ3JvdW5kLS1hbGVydC1zdWNjZXNzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdG9rZW4oXCJjb2xvdXIuYmFzZS5ncmVlblwiKTtcbn1cblxuLmJhY2tncm91bmQtLWFsZXJ0LXN1Y2Nlc3MtbGlnaHQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0b2tlbihcImNvbG91ci5zaGFkZS5ncmVlbjA1XCIpO1xufVxuXG4uYmFja2dyb3VuZC0tYWxlcnQtZXJyb3Ige1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0b2tlbihcImNvbG91ci5iYXNlLnJlZFwiKTtcbn1cblxuLmJhY2tncm91bmQtLWFsZXJ0LWVycm9yLWxpZ2h0IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdG9rZW4oXCJjb2xvdXIuc2hhZGUucmVkMDVcIik7XG59XG5cbi5iYWNrZ3JvdW5kLS1hbGVydC13YXJuaW5nIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdG9rZW4oXCJjb2xvdXIuYmFzZS5vcmFuZ2VcIik7XG59XG5cbi5iYWNrZ3JvdW5kLS1hbGVydC13YXJuaW5nLWxpZ2h0IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdG9rZW4oXCJjb2xvdXIuc2hhZGUub3JhbmdlMDVcIik7XG59XG5cbiNrc3NyZWYtZXhhbXBsZS1iYXNlLWljb24tY29sb3VycyAua3NzLXNlY3Rpb25fX2V4YW1wbGUsXG4ja3NzcmVmLWVsZW1lbnRzLWJ1dHRvbnMtcHJpbWFyeS1yZXZlcnNlIC5rc3Mtc2VjdGlvbl9fZXhhbXBsZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRva2VuKFwiY29sb3VyLnNoYWRlLmJsYWNrMTBcIik7XG59XG5cbiNrc3NyZWYtZWxlbWVudHMtYnV0dG9ucy1yZXZlcnNlIC5rc3Mtc2VjdGlvbl9fZXhhbXBsZSxcbiNrc3NyZWYtZWxlbWVudHMtYnV0dG9ucy13aGl0ZSAua3NzLXNlY3Rpb25fX2V4YW1wbGUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0b2tlbihcImNvbG91ci5zaGFkZS5ibGFjazc1XCIpO1xufVxuXG4vKiBOYXZpZ2F0aW9uICovXG4ja3NzcmVmLWV4YW1wbGUtZ3JvdXBlZC1jb21wb25lbnRzLWdsb2JhbC1oZWFkZXItcHJpbWFyeS1oZWFkZXIsXG4ja3NzcmVmLWV4YW1wbGUtZWxlbWVudHMtbmF2aWdhdGlvbi1kcm9wZG93bi1uYXZpZ2F0aW9uIHtcbiAgJiAua3NzLWV4YW1wbGUge1xuICAgIGhlaWdodDogMzUwcHg7XG4gIH1cbn1cblxuI2tzc3JlZi1leGFtcGxlLWdyb3VwZWQtY29tcG9uZW50cy1nbG9iYWwtaGVhZGVyLFxuI2tzc3JlZi1leGFtcGxlLWdyb3VwZWQtY29tcG9uZW50cy1nbG9iYWwtaGVhZGVyLXByaW1hcnktaGVhZGVyLXN0YWNrZWQsXG4ja3NzcmVmLWV4YW1wbGUtZWxlbWVudHMtbmF2aWdhdGlvbi1tZWdhLW5hdiB7XG4gICYgLmtzcy1leGFtcGxlIHtcbiAgICBoZWlnaHQ6IDU1MHB4O1xuICB9XG59XG5cbiNrc3NyZWYtZXhhbXBsZS1lbGVtZW50cy1kcm9wLW1lbnUgLmtzcy1leGFtcGxlLFxuI2tzc3JlZi1leGFtcGxlLWVsZW1lbnRzLWRyb3AtbWVudS1leHBhbmRhYmxlIC5jb250YWluZXIge1xuICBoZWlnaHQ6IDI1MHB4O1xufVxuXG4ja3NzcmVmLWV4YW1wbGUtZWxlbWVudHMtbmF2aWdhdGlvbi1mb290ZXItbmF2aWdhdGlvbiB7XG4gICYgLm5hdl9fdG9nZ2xlIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4vKipcbiAqIEFkZGluZyBhIGhlaWdodCBoZXJlIHByZXZlbnRzIHRoZSBzY3JvbGwgZnJvbSBkaXNwbGF5aW5nLlxuICpcbiAqICNrc3NyZWYtZXhhbXBsZS1ncm91cGVkLWNvbXBvbmVudHMtZWxldmF0b3Ige1xuICogICAmIC5rc3MtZXhhbXBsZSB7XG4gKiAgICAgaGVpZ2h0OiA0MDBweDtcbiAqICAgICBvdmVyZmxvdzogc2Nyb2xsO1xuICogICB9XG4gKiB9XG4gKi9cblxuI2tzc3JlZi1leGFtcGxlLWdyb3VwZWQtY29tcG9uZW50cy1zdGlja3kge1xuICBtYXgtaGVpZ2h0OiA0MDBweDtcbn1cblxuLyogVGFicyAqL1xuI2tzc3JlZi1leGFtcGxlLWVsZW1lbnRzLXRhYi1saXN0IHtcbiAgJiAua3NzLWV4YW1wbGUge1xuICAgICYgLmJsb2NrLWxvY2FsLXRhc2tzLWJsb2NrIHtcbiAgICAgICYgLnRhYi1saXN0IHtcbiAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qIERpYWxvZ3MgKi9cbiNrc3NyZWYtZXhhbXBsZS1lbGVtZW50cy1kaWFsb2csXG4ja3NzcmVmLWV4YW1wbGUtZWxlbWVudHMtZGlhbG9nLWZ1bGxzY3JlZW4ge1xuICAmIC5rc3MtZXhhbXBsZSB7XG4gICAgbWluLWhlaWdodDogMzUwcHg7XG4gIH1cbn1cblxuLyogSWNvbiB0ZXh0ICovXG4ja3NzcmVmLWV4YW1wbGUtYmFzZS1pY29uLXRleHQge1xuICBkaXNwbGF5OiBibG9jaztcblxuICAmIC5rc3MtZXhhbXBsZSB7XG4gICAgbWFyZ2luLWJsb2NrLWVuZDogdmFyKC0tc3BhY2luZy1tKSAhaW1wb3J0YW50O1xuICB9XG59XG5cbi8qKiBPdmVyZmxvdyBicmVha3MgcG9zaXRpb246c3RpY2t5ICovXG4ja3NzcmVmLWV4YW1wbGUtZ3JvdXBlZC1jb21wb25lbnRzLXN0aWNreSAua3NzLWV4YW1wbGUge1xuICBvdmVyZmxvdzogdW5zZXQ7XG59XG5cbi8qKiBDYXJkIHdpZHRoICovXG4ja3NzcmVmLWV4YW1wbGUtZWxlbWVudHMtY29udGVudC1jYXJkLWxpbmsgLmNvbnRhaW5lciB7XG4gIHdpZHRoOiBjYWxjKHZhcigtLXNlY3Rpb24tbSkgKyB2YXIoLS1zZWN0aW9uLW0pICsgMzcycHgpO1xuICBtYXJnaW46IDAgYXV0bztcbn1cblxuLyoqXG4gKiBUaGVtZSBzd2l0Y2hlci5cbiAqL1xuLnRoZW1lLXN3aXRjaGVyIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDFyZW07XG4gIHJpZ2h0OiAxcmVtO1xufVxuXG5ib2R5W2RhdGEtdGhlbWU9XCJkaXNjb1wiXSB7XG4gIC0tY29sb3VyLXByaW1hcnk6ICMzOTAwOTk7XG4gIC0tY29sb3VyLXNlY29uZGFyeTogI2ZmMDA1NDtcbiAgLS1jb2xvdXItdGVydGlhcnk6ICM5ZTAwNTk7XG4gIC0tY29sb3VyLWJhY2tncm91bmQtcmV2ZXJzZTogIzllMDA1OTtcbiAgLS1jb2xvdXItbGluay1vcmlnOiAjZmYwMDU0O1xuICAtLWNvbG91ci1saW5rOiAjZmYwMDU0O1xuICAtLWNvbG91ci1mb3JlZ3JvdW5kOiAjMzkwMDk5O1xuICAtLWNvbG91ci1mb3JlZ3JvdW5kLW9yaWc6ICMzOTAwOTk7XG4gIC0tY29sb3VyLWZvcmVncm91bmQtYWx0OiAjOWUwMDU5O1xuICAtLWNvbG91ci1iYWNrZ3JvdW5kLWFsdDogI2ZmYzdkOTtcbiAgLS1ibG9ja3F1b3RlLWxpbmUtY29sb3I6ICNmZjAwNTQ7XG4gIC0tZm9udC1mYW1pbHktaGVhZGluZzogXCJTcGFjZSBHcm90ZXNrXCIsIEludGVyLCBoZWx2ZXRpY2EsIGFyaWFsLCBzYW5zLXNlcmlmO1xuICAtLWZvbnQtc2l6ZS14bDogNDBweDtcbiAgLS1mb250LXNpemUteHh4bDogNjBweDtcbiAgLS1mb250LXNpemUtbDogMzBweDtcbiAgLS1jb250YWluZXItbWF4LXdpZHRoOiAxNDAwcHg7XG4gIC0tY29udGFpbmVyLW1heC13aWR0aC1uYXJyb3c6IDgwMHB4O1xuICAtLWJvcmRlci1yYWRpdXMtbDogNHB4O1xuICAtLXJhdGlvOiAxIDE7XG5cbiAgJiAuZ3JpZCA+IC5jb250ZW50LWNhcmQsXG4gICYgLmNvbnRlbnQtY2FyZC5ncmlkX19jb2wge1xuICAgIG1heC1pbmxpbmUtc2l6ZTogNDQ2cHg7XG4gIH1cblxuICAmIC5nbG9iYWwgLnNlY3Rpb25fX2NvbnRlbnQsXG4gICYgLmdsb2JhbF9fZm9vdGVyIC5zZWN0aW9uX19jb250ZW50IHtcbiAgICBtYXgtaW5saW5lLXNpemU6IDE4MDBweDtcbiAgfVxuXG4gICYgI2tzc3JlZi1leGFtcGxlLW1vY2t1cHMtaG9tZSAucGFnZV9fbWlkZGxlIC5zZWN0aW9uOm5vdCguc2VjdGlvbi0tZGFyayk6bm90KC5iYWNrZ3JvdW5kLS1hbHQpIHtcbiAgICAmOm50aC1jaGlsZCgzKSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGFjN2ZiO1xuICAgIH1cbiAgICAmOm50aC1jaGlsZCg0KSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvdXItYmFja2dyb3VuZC1hbHQpO1xuICAgIH1cbiAgICAmOm50aC1jaGlsZCg1KSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdkZjkwO1xuICAgIH1cbiAgfVxuXG4gICYgI2tzc3JlZi1leGFtcGxlLW1vY2t1cHMtaW5kZXggLnBhZ2VfX21pZGRsZSAuc2VjdGlvbiB7XG4gICAgJjpudGgtY2hpbGQoMiksXG4gICAgJjpudGgtY2hpbGQoMykge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2RhYzdmYjtcbiAgICB9XG4gIH1cblxuICAmICNrc3NyZWYtZXhhbXBsZS1tb2NrdXBzLXNpZGViYXIgLnBhZ2VfX21pZGRsZSAuc2VjdGlvbiB7XG4gICAgJjpudGgtY2hpbGQoMikge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2RhYzdmYjtcbiAgICAgIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNpbmcteHh4bCk7XG4gICAgfVxuICB9XG59XG4iLCIvKipcbiAqIFZhcmlhYmxlc1xuICovXG5cbkBpbXBvcnQgdXJsKFwiY3VzdG9tLW1lZGlhLmNzc1wiKTtcblxuOnJvb3Qge1xuICAvKiBTeXN0ZW0gY29sb3VycyAqL1xuICAtLWNvbG91ci1iYWNrZ3JvdW5kOiB0b2tlbihcImNvbG91ci5zeXN0ZW0ubWFpbi5iZ1wiKTtcbiAgLS1jb2xvdXItYmFja2dyb3VuZC1hbHQ6IHRva2VuKFwiY29sb3VyLnN5c3RlbS5tYWluLmJnQWx0XCIpO1xuICAtLWNvbG91ci1mb3JlZ3JvdW5kOiB0b2tlbihcImNvbG91ci5zeXN0ZW0ubWFpbi5mZ1wiKTtcbiAgLS1jb2xvdXItZm9yZWdyb3VuZC1hbHQ6IHRva2VuKFwiY29sb3VyLnN5c3RlbS5tYWluLmZnQWx0XCIpO1xuICAtLWNvbG91ci1saW5rOiB0b2tlbihcImNvbG91ci5zeXN0ZW0ubWFpbi5saW5rXCIpO1xuICAtLWNvbG91ci1saW5rLWhvdmVyOiB0b2tlbihcImNvbG91ci5zeXN0ZW0ubWFpbi5saW5rSG92ZXJcIik7XG4gIC0tY29sb3VyLWJvcmRlcjogdG9rZW4oXCJjb2xvdXIuc3lzdGVtLm1haW4uYm9yZGVyXCIpO1xuICAtLWNvbG91ci1vdmVybGF5OiB0b2tlbihcImNvbG91ci5zeXN0ZW0ubWFpbi5vdmVybGF5XCIpO1xuXG4gIC8qIEJyYW5kIGNvbG9ycyAqL1xuICAtLWNvbG91ci1wcmltYXJ5OiB0b2tlbihcImNvbG91ci5icmFuZC5wcmltYXJ5XCIpO1xuICAtLWNvbG91ci1wcmltYXJ5LWxpZ2h0OiB0b2tlbihcImNvbG91ci5icmFuZC5wcmltYXJ5TGlnaHRcIik7XG4gIC0tY29sb3VyLXNlY29uZGFyeTogdG9rZW4oXCJjb2xvdXIuYnJhbmQuc2Vjb25kYXJ5XCIpO1xuICAtLWNvbG91ci1zZWNvbmRhcnktbGlnaHQ6IHRva2VuKFwiY29sb3VyLmJyYW5kLnNlY29uZGFyeUxpZ2h0XCIpO1xuICAtLWNvbG91ci10ZXJ0aWFyeTogdG9rZW4oXCJjb2xvdXIuYnJhbmQudGVydGlhcnlcIik7XG4gIC0tY29sb3VyLXRlcnRpYXJ5LWxpZ2h0OiB0b2tlbihcImNvbG91ci5icmFuZC50ZXJ0aWFyeUxpZ2h0XCIpO1xuXG4gIC8qIFJldmVyc2UgY29sb3JzICovXG4gIC0tY29sb3VyLWZvcmVncm91bmQtcmV2ZXJzZTogdG9rZW4oXCJjb2xvdXIuc3lzdGVtLnJldmVyc2UuZmdcIik7XG4gIC0tY29sb3VyLWZvcmVncm91bmQtYWx0LXJldmVyc2U6IHRva2VuKFwiY29sb3VyLnN5c3RlbS5yZXZlcnNlLmZnQWx0XCIpO1xuICAtLWNvbG91ci1iYWNrZ3JvdW5kLXJldmVyc2U6IHRva2VuKFwiY29sb3VyLnN5c3RlbS5yZXZlcnNlLmJnXCIpO1xuICAtLWNvbG91ci1saW5rLXJldmVyc2U6IHRva2VuKFwiY29sb3VyLnN5c3RlbS5yZXZlcnNlLmxpbmtcIik7XG4gIC0tY29sb3VyLWxpbmstaG92ZXItcmV2ZXJzZTogdG9rZW4oXCJjb2xvdXIuc3lzdGVtLnJldmVyc2UubGlua0hvdmVyXCIpO1xuICAtLWNvbG91ci1ib3JkZXItcmV2ZXJzZTogdG9rZW4oXCJjb2xvdXIuc3lzdGVtLnJldmVyc2UuYm9yZGVyXCIpO1xuICAtLWNvbG91ci1vdmVybGF5LXJldmVyc2U6IHRva2VuKFwiY29sb3VyLnN5c3RlbS5yZXZlcnNlLm92ZXJsYXlcIik7XG5cbiAgLyogT3JpZ2luYWwgY29sb3JzICh0byB1bmRvIG92ZXJpZGluZykgKi9cbiAgLS1jb2xvdXItZm9yZWdyb3VuZC1vcmlnOiB0b2tlbihcImNvbG91ci5zeXN0ZW0ubWFpbi5mZ1wiKTtcbiAgLS1jb2xvdXItZm9yZWdyb3VuZC1hbHQtb3JpZzogdG9rZW4oXCJjb2xvdXIuc3lzdGVtLm1haW4uZmdBbHRcIik7XG4gIC0tY29sb3VyLWJhY2tncm91bmQtb3JpZzogdG9rZW4oXCJjb2xvdXIuc3lzdGVtLm1haW4uYmdcIik7XG4gIC0tY29sb3VyLWxpbmstb3JpZzogdG9rZW4oXCJjb2xvdXIuc3lzdGVtLm1haW4ubGlua1wiKTtcbiAgLS1jb2xvdXItbGluay1ob3Zlci1vcmlnOiB0b2tlbihcImNvbG91ci5zeXN0ZW0ubWFpbi5saW5rSG92ZXJcIik7XG4gIC0tY29sb3VyLWJvcmRlci1vcmlnOiB0b2tlbihcImNvbG91ci5zeXN0ZW0ubWFpbi5ib3JkZXJcIik7XG4gIC0tY29sb3VyLW92ZXJsYXktb3JpZzogdG9rZW4oXCJjb2xvdXIuc3lzdGVtLm1haW4ub3ZlcmxheVwiKTtcblxuICAvKiBTdGF0ZSBjb2xvdXJzICovXG4gIC0tY29sb3VyLWVycm9yLWZvcmVncm91bmQ6IHRva2VuKFwiY29sb3VyLnN5c3RlbS5lcnJvci5mZ1wiKTtcbiAgLS1jb2xvdXItZXJyb3ItYmFja2dyb3VuZDogdG9rZW4oXCJjb2xvdXIuc3lzdGVtLmVycm9yLmJnXCIpO1xuICAtLWNvbG91ci1zdWNjZXNzLWZvcmVncm91bmQ6IHRva2VuKFwiY29sb3VyLnN5c3RlbS5zdWNjZXNzLmZnXCIpO1xuICAtLWNvbG91ci1zdWNjZXNzLWJhY2tncm91bmQ6IHRva2VuKFwiY29sb3VyLnN5c3RlbS5zdWNjZXNzLmJnXCIpO1xuICAtLWNvbG91ci13YXJuaW5nLWZvcmVncm91bmQ6IHRva2VuKFwiY29sb3VyLnN5c3RlbS53YXJuaW5nLmZnXCIpO1xuICAtLWNvbG91ci13YXJuaW5nLWJhY2tncm91bmQ6IHRva2VuKFwiY29sb3VyLnN5c3RlbS53YXJuaW5nLmJnXCIpO1xuICAtLWNvbG91ci1pbmZvLWZvcmVncm91bmQ6IHRva2VuKFwiY29sb3VyLnN5c3RlbS5pbmZvLmZnXCIpO1xuICAtLWNvbG91ci1pbmZvLWJhY2tncm91bmQ6IHRva2VuKFwiY29sb3VyLnN5c3RlbS5pbmZvLmJnXCIpO1xuXG4gIC8qIFR5cG9ncmFwaHkgKi9cbiAgLS1mb250LWZhbWlseTogdG9rZW4oXCJmb250LmZhbWlseS5iYXNlXCIpO1xuICAtLWZvbnQtZmFtaWx5LWhlYWRpbmc6IHRva2VuKFwiZm9udC5mYW1pbHkuaGVhZGluZ1wiKTtcblxuICAtLXR5cGUtcmF0aW86IHRva2VuKFwiZm9udC5zaXplLnJhdGlvXCIpO1xuICAtLXR5cGUtcmF0aW8tc21hbGw6IHRva2VuKFwiZm9udC5zaXplLnJhdGlvU21hbGxcIik7XG4gIC0tYmFzZS1mb250LXNpemU6IHRva2VuKFwiZm9udC5zaXplLmJhc2VcIik7XG4gIC0tZm9udC1zaXplOiB2YXIoLS1iYXNlLWZvbnQtc2l6ZSk7XG4gIC0tZm9udC1zaXplLXM6IGNhbGModmFyKC0tYmFzZS1mb250LXNpemUpIC8gdmFyKC0tdHlwZS1yYXRpby1zbWFsbCkpO1xuICAtLWZvbnQtc2l6ZS14czogY2FsYyh2YXIoLS1mb250LXNpemUtcykgLyB2YXIoLS10eXBlLXJhdGlvLXNtYWxsKSk7XG4gIC0tZm9udC1zaXplLXNtOiBjYWxjKHZhcigtLWJhc2UtZm9udC1zaXplKSAqIHZhcigtLXR5cGUtcmF0aW8tc21hbGwpKTtcbiAgLS1mb250LXNpemUtbTogY2FsYyh2YXIoLS1iYXNlLWZvbnQtc2l6ZSkgKiB2YXIoLS10eXBlLXJhdGlvKSk7XG4gIC0tZm9udC1zaXplLWw6IGNhbGModmFyKC0tZm9udC1zaXplLW0pICogdmFyKC0tdHlwZS1yYXRpbykpO1xuICAtLWZvbnQtc2l6ZS14bDogY2FsYyh2YXIoLS1mb250LXNpemUtbCkgKiB2YXIoLS10eXBlLXJhdGlvKSk7XG4gIC0tZm9udC1zaXplLXh4bDogY2FsYyh2YXIoLS1mb250LXNpemUteGwpICogdmFyKC0tdHlwZS1yYXRpbykpO1xuICAtLWZvbnQtc2l6ZS14eHhsOiBjYWxjKHZhcigtLWZvbnQtc2l6ZS14eGwpICogdmFyKC0tdHlwZS1yYXRpbykpO1xuICAtLWZvbnQtc2l6ZS1kaWZmOiB0b2tlbihcImZvbnQuc2l6ZS5kaWZmXCIpO1xuXG4gIC0tbGluZS1oZWlnaHQ6IHRva2VuKFwiZm9udC5saW5lSGVpZ2h0Lm1haW5cIik7XG4gIC0tbGluZS1oZWlnaHQtaDogdG9rZW4oXCJmb250LmxpbmVIZWlnaHQuaGVhZGluZ1wiKTtcbiAgLS1saW5lLWhlaWdodC11aTogdG9rZW4oXCJmb250LmxpbmVIZWlnaHQudWlcIik7XG5cbiAgLS1mb250LXdlaWdodC1ub3JtYWw6IHRva2VuKFwiZm9udC53ZWlnaHQubWFpblwiKTtcbiAgLS1mb250LXdlaWdodC1ib2xkOiB0b2tlbihcImZvbnQud2VpZ2h0LmJvbGRcIik7XG5cbiAgLyogU3BhY2luZyAqL1xuICAtLXNwYWNpbmcteHh4eHM6IHRva2VuKFwic2l6ZS5zcGFjaW5nLnh4eHhzXCIpO1xuICAtLXNwYWNpbmcteHh4czogdG9rZW4oXCJzaXplLnNwYWNpbmcueHh4c1wiKTtcbiAgLS1zcGFjaW5nLXh4czogdG9rZW4oXCJzaXplLnNwYWNpbmcueHhzXCIpO1xuICAtLXNwYWNpbmcteHM6IHRva2VuKFwic2l6ZS5zcGFjaW5nLnhzXCIpO1xuICAtLXNwYWNpbmctczogdG9rZW4oXCJzaXplLnNwYWNpbmcuc1wiKTtcbiAgLS1zcGFjaW5nLW06IHRva2VuKFwic2l6ZS5zcGFjaW5nLm1cIik7XG4gIC0tc3BhY2luZy1sOiB0b2tlbihcInNpemUuc3BhY2luZy5sXCIpO1xuICAtLXNwYWNpbmcteGw6IHRva2VuKFwic2l6ZS5zcGFjaW5nLnhsXCIpO1xuICAtLXNwYWNpbmcteHhsOiB0b2tlbihcInNpemUuc3BhY2luZy54eGxcIik7XG4gIC0tc3BhY2luZy14eHhsOiB0b2tlbihcInNpemUuc3BhY2luZy54eHhsXCIpO1xuICAtLXNwYWNpbmcteHh4eGw6IHRva2VuKFwic2l6ZS5zcGFjaW5nLnh4eGxcIik7XG4gIC0tc3BhY2luZy11bDogdG9rZW4oXCJzaXplLnNwYWNpbmcudWxcIik7XG4gIC0tc3BhY2luZy11dWw6IHRva2VuKFwic2l6ZS5zcGFjaW5nLnV1bFwiKTtcbiAgLS1zcGFjaW5nLXV1dWw6IHRva2VuKFwic2l6ZS5zcGFjaW5nLnV1dWxcIik7XG5cbiAgLS1vdXRsaW5lLXdpZHRoOiB0b2tlbihcInV0aWxpdHkub3V0bGluZS53aWR0aFwiKTtcbiAgLS1vdXRsaW5lLW9mZnNldDogdG9rZW4oXCJ1dGlsaXR5Lm91dGxpbmUub2Zmc2V0XCIpO1xuICAtLW91dGxpbmUtc3R5bGU6IHRva2VuKFwidXRpbGl0eS5vdXRsaW5lLnN0eWxlXCIpO1xuICAtLW91dGxpbmUtY29sb3I6IHRva2VuKFwidXRpbGl0eS5vdXRsaW5lLmNvbG91clwiKTtcblxuICAvKiBMYXlvdXQgKi9cbiAgLS1jb250YWluZXItbWF4LXdpZHRoLW5hcnJvdzogdG9rZW4oXCJzaXplLmNvbnRhaW5lci5uYXJyb3dcIik7XG4gIC0tY29udGFpbmVyLW1heC13aWR0aDogdG9rZW4oXCJzaXplLmNvbnRhaW5lci5hbGlnbmVkXCIpO1xuICAtLWNvbnRhaW5lci1wbHVzOiB0b2tlbihcInNpemUuY29udGFpbmVyLnBsdXNcIik7XG4gIC0tZ2FwLXM6IHRva2VuKFwic2l6ZS5nYXAuc1wiKTtcbiAgLS1nYXA6IHRva2VuKFwic2l6ZS5nYXAubVwiKTtcbiAgLS1nYXAtbDogdG9rZW4oXCJzaXplLmdhcC5sXCIpO1xuICAtLWdhcC14bDogdG9rZW4oXCJzaXplLmdhcC54bFwiKTtcbiAgLS1zZWN0aW9uLXM6IHZhcigtLXNwYWNpbmctcyk7XG4gIC0tc2VjdGlvbi1tOiB2YXIoLS1zcGFjaW5nLW0pO1xuICAtLXNlY3Rpb24tbDogdmFyKC0tc3BhY2luZy14bCk7XG4gIC0tc2VjdGlvbi14bDogdmFyKC0tc3BhY2luZy11dWwpO1xuICAtLWJyZWFrcG9pbnQteHM6IHRva2VuKFwiYnJlYWtwb2ludC54c1wiKTtcbiAgLS1icmVha3BvaW50LXM6IHRva2VuKFwiYnJlYWtwb2ludC5zXCIpO1xuICAtLWJyZWFrcG9pbnQtbTogdG9rZW4oXCJicmVha3BvaW50Lm1cIik7XG4gIC0tYnJlYWtwb2ludC1sOiB0b2tlbihcImJyZWFrcG9pbnQubFwiKTtcbiAgLS1icmVha3BvaW50LXhsOiB0b2tlbihcImJyZWFrcG9pbnQueGxcIik7XG5cbiAgLyogVXRpbGl0eSAqL1xuICAtLXNoYWRvdy1jb2xvcjogdG9rZW4oXCJ1dGlsaXR5LnNoYWRvdy5jb2xvdXJcIik7XG4gIC0tc2hhZG93LXNpemU6IHRva2VuKFwidXRpbGl0eS5zaGFkb3cuc2l6ZVwiKTtcbiAgLS1zaGFkb3ctc2hhcGU6IDAgMCB2YXIoLS1zaGFkb3ctc2l6ZSk7XG4gIC0tYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LXNoYXBlKSB2YXIoLS1zaGFkb3ctY29sb3IpO1xuICAtLWJvcmRlci1yYWRpdXM6IHRva2VuKFwidXRpbGl0eS5yYWRpdXMubVwiKTtcbiAgLS1ib3JkZXItcmFkaXVzLWw6IHRva2VuKFwidXRpbGl0eS5yYWRpdXMubFwiKTtcbiAgLS1ib3JkZXItcmFkaXVzLXJvdW5kOiB0b2tlbihcInV0aWxpdHkucmFkaXVzLnJvdW5kXCIpO1xuICAtLXJhdGlvOiB0b2tlbihcInV0aWxpdHkucmF0aW9cIik7XG4gIC0tZWFzZTogY3ViaWMtYmV6aWVyKDAuMjUsIDAsIDAuMywgMSk7XG4gIC0tc2Nyb2xsLW1hcmdpbjogdmFyKC0tc3BhY2luZy1tKTtcblxuICAvKiBHZW5lcmljICovXG4gIC0tYmxvY2txdW90ZS1saW5lLXdpZHRoOiA2cHg7XG4gIC0tYmxvY2txdW90ZS1saW5lLWNvbG9yOiBjdXJyZW50Y29sb3I7XG4gIC0tZm9ybS1lbGVtZW50LWhlaWdodDogdmFyKC0tc3BhY2luZy14eGwpO1xuICAtLWZvcm0tc3BhY2luZzogdmFyKC0tc3BhY2luZy1zKTtcbiAgLS1mb3JtLWJvcmRlci13aWR0aDogMnB4O1xufVxuXG5AbWVkaWEgKC0tbWVkaXVtLWRvd24pIHtcbiAgOnJvb3Qge1xuICAgIC0tc2VjdGlvbi1zOiB2YXIoLS1zcGFjaW5nLXh4cyk7XG4gICAgLS1zZWN0aW9uLW06IHZhcigtLXNwYWNpbmctcyk7XG4gICAgLS1zZWN0aW9uLWw6IHZhcigtLXNwYWNpbmctbCk7XG4gICAgLS1zZWN0aW9uLXhsOiB2YXIoLS1zcGFjaW5nLXhsKTtcbiAgfVxufVxuIiwiLyogQnJlYWtwb2ludHMgKi9cbkBjdXN0b20tbWVkaWEgLS14LXNtYWxsLXVwICh3aWR0aCA+PSB0b2tlbihcImJyZWFrcG9pbnQueHNcIikpO1xuQGN1c3RvbS1tZWRpYSAtLXgtc21hbGwtZG93biAod2lkdGggPCB0b2tlbihcImJyZWFrcG9pbnQueHNcIikpO1xuQGN1c3RvbS1tZWRpYSAtLXgtc21hbGwtdG8tc21hbGwgKHRva2VuKFwiYnJlYWtwb2ludC54c1wiKSA8PSB3aWR0aCA8IHRva2VuKFwiYnJlYWtwb2ludC5zXCIpKTtcbkBjdXN0b20tbWVkaWEgLS1zbWFsbC11cCAod2lkdGggPj0gdG9rZW4oXCJicmVha3BvaW50LnNcIikpO1xuQGN1c3RvbS1tZWRpYSAtLXNtYWxsLWRvd24gKHdpZHRoIDwgdG9rZW4oXCJicmVha3BvaW50LnNcIikpO1xuQGN1c3RvbS1tZWRpYSAtLXNtYWxsLXRvLW1lZGl1bSAodG9rZW4oXCJicmVha3BvaW50LnNcIikgPD0gd2lkdGggPCB0b2tlbihcImJyZWFrcG9pbnQubVwiKSk7XG5AY3VzdG9tLW1lZGlhIC0tbWVkaXVtLXVwICh3aWR0aCA+PSB0b2tlbihcImJyZWFrcG9pbnQubVwiKSk7XG5AY3VzdG9tLW1lZGlhIC0tbWVkaXVtLWRvd24gKHdpZHRoIDwgdG9rZW4oXCJicmVha3BvaW50Lm1cIikpO1xuQGN1c3RvbS1tZWRpYSAtLW1lZGl1bS10by1sYXJnZSAodG9rZW4oXCJicmVha3BvaW50Lm1cIikgPD0gd2lkdGggPCB0b2tlbihcImJyZWFrcG9pbnQubFwiKSk7XG5AY3VzdG9tLW1lZGlhIC0tbGFyZ2UtdXAgKHdpZHRoID49IHRva2VuKFwiYnJlYWtwb2ludC5sXCIpKTtcbkBjdXN0b20tbWVkaWEgLS1sYXJnZS1kb3duICh3aWR0aCA8IHRva2VuKFwiYnJlYWtwb2ludC5sXCIpKTtcbkBjdXN0b20tbWVkaWEgLS1sYXJnZS10by14LWxhcmdlICh0b2tlbihcImJyZWFrcG9pbnQubFwiKSA8PSB3aWR0aCA8IHRva2VuKFwiYnJlYWtwb2ludC54bFwiKSk7XG5AY3VzdG9tLW1lZGlhIC0teC1sYXJnZS11cCAod2lkdGggPj0gdG9rZW4oXCJicmVha3BvaW50LnhsXCIpKTtcbkBjdXN0b20tbWVkaWEgLS14LWxhcmdlLWRvd24gKHdpZHRoIDwgdG9rZW4oXCJicmVha3BvaW50LnhsXCIpKTtcblxuLyogU3BlY2lmaWMgYnJlYWtwb2ludCBmb3IgZ2xvYmFsICYgZHJvcGRvd24gbmF2aWdhdGlvbiAqL1xuQGN1c3RvbS1tZWRpYSAtLWdsb2JhbC1uYXYtdXAgKHdpZHRoID49IHRva2VuKFwiYnJlYWtwb2ludC5nbG9iYWxOYXZcIikpO1xuQGN1c3RvbS1tZWRpYSAtLWdsb2JhbC1uYXYtZG93biAod2lkdGggPCB0b2tlbihcImJyZWFrcG9pbnQuZ2xvYmFsTmF2XCIpKTtcblxuLyogVXRpbCBtZWRpYSBxdWVyaWVzICovXG5AY3VzdG9tLW1lZGlhIC0tdG91Y2ggKGhvdmVyOiBub25lKTtcbkBjdXN0b20tbWVkaWEgLS1tb3VzZSAoaG92ZXIpO1xuQGN1c3RvbS1tZWRpYSAtLWRhcmsgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKTtcbkBjdXN0b20tbWVkaWEgLS1saWdodCAocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KTtcbkBjdXN0b20tbWVkaWEgLS11c2UtbW90aW9uIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiBuby1wcmVmZXJlbmNlKTtcbkBjdXN0b20tbWVkaWEgLS1yZWR1Y2UtbW90aW9uIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpO1xuQGN1c3RvbS1tZWRpYSAtLXVzZS1kYXRhIChwcmVmZXJzLXJlZHVjZWQtZGF0YTogbm8tcHJlZmVyZW5jZSk7XG5AY3VzdG9tLW1lZGlhIC0tcmVkdWNlLWRhdGEgKHByZWZlcnMtcmVkdWNlZC1kYXRhOiByZWR1Y2UpO1xuQGN1c3RvbS1tZWRpYSAtLWhpZ2gtY29udHJhc3QgKHByZWZlcnMtY29udHJhc3Q6IG1vcmUpO1xuQGN1c3RvbS1tZWRpYSAtLWxvdy1jb250cmFzdCAocHJlZmVycy1jb250cmFzdDogbGVzcyk7XG5AY3VzdG9tLW1lZGlhIC0tcG9ydHJhaXQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCk7XG5AY3VzdG9tLW1lZGlhIC0tbGFuZHNjYXBlIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKTtcbiIsIkBsYXllciBwb3BvdmVyLXBvbHlmaWxsLCBkZWZhdWx0cywgbGF5b3V0LCBlbGVtZW50cywgY29tcG9uZW50cywgdXRpbGl0aWVzO1xuXG5AaW1wb3J0IHVybChcIl9jb2xvcnMuY3NzXCIpO1xuQGltcG9ydCB1cmwoXCJfYW5pbWF0ZWQuY3NzXCIpO1xuQGltcG9ydCB1cmwoXCJfYmFzZS5jc3NcIik7XG4iLCIvKipcbiAqIENvbG9yc1xuICpcbiAqIENvbG9ycyBhcmUgZGVmaW5lZCBpbiB0aGUgY29uc3RhbnRzIHBhY2thZ2UuIFZpZXcgdGhlIFtDb25zdGFudHMgcGFja2FnZV0oaHR0cHM6Ly9naXRodWIuY29tL3ByZXZpb3VzbmV4dC9taXh0YXBlL3RyZWUvbWFzdGVyL3BhY2thZ2VzL2NvbnN0YW50cykgb24gZ2l0aHViLlxuICpcbiAqIE1hcmt1cDogY29sb3JzLnR3aWdcbiAqXG4gKiBTdHlsZSBndWlkZTogYmFzZS5jb2xvcnNcbiAqL1xuXG4vKipcbiAqIEJhY2tncm91bmRzXG4gKlxuICogQ29sb3JzIGFyZSBkZWZpbmVkIGluIHRoZSBjb25zdGFudHMgcGFja2FnZS4gVmlldyB0aGUgW0NvbnN0YW50cyBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcHJldmlvdXNuZXh0L21peHRhcGUvdHJlZS9tYXN0ZXIvcGFja2FnZXMvY29uc3RhbnRzKSBvbiBnaXRodWIuXG4gKlxuICogLmJhY2tncm91bmQtLWFsdCAtIEFsdGVybmF0aXZlXG4gKiAuYmFja2dyb3VuZC0tcmV2ZXJzZSAtIFJldmVyc2VcbiAqXG4gKiBEZWZhdWx0OiBmYWxzZVxuICpcbiAqIE1hcmt1cDogYmFja2dyb3VuZHMudHdpZ1xuICpcbiAqIFN0eWxlIGd1aWRlOiBiYXNlLmNvbG9ycy5iYWNrZ3JvdW5kc1xuICovXG5AbGF5ZXIgZGVmYXVsdHMge1xuICBbY2xhc3MqPVwiYmFja2dyb3VuZC0tXCJdIHtcbiAgICAtLWNvbG91ci1ib3JkZXI6IHZhcigtLWNvbG91ci1ib3JkZXItb3JpZyk7XG4gICAgLS1jb2xvdXItbGluazogdmFyKC0tY29sb3VyLWxpbmstb3JpZyk7XG4gICAgLS1jb2xvdXItbGluay1ob3ZlcjogdmFyKC0tY29sb3VyLWxpbmstaG92ZXItb3JpZyk7XG4gICAgLS1jb2xvdXItYmFja2dyb3VuZDogdmFyKC0tY29sb3VyLWJhY2tncm91bmQtb3JpZyk7XG4gICAgLS1jb2xvdXItZm9yZWdyb3VuZDogdmFyKC0tY29sb3VyLWZvcmVncm91bmQtb3JpZyk7XG5cbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvdXItYmFja2dyb3VuZCk7XG4gICAgY29sb3I6IHZhcigtLWNvbG91ci1mb3JlZ3JvdW5kKTtcbiAgfVxuXG4gIC5iYWNrZ3JvdW5kLS1yZXNldCB7XG4gICAgLyogdXNlIHRvIHJldmVydCAuYmFja2dyb3VuZC0tcmV2ZXJzZSBvbiBjaGlsZHJlbiAqL1xuICB9XG5cbiAgLmJhY2tncm91bmQtLWFsdCB7XG4gICAgLS1jb2xvdXItYmFja2dyb3VuZDogdmFyKC0tY29sb3VyLWJhY2tncm91bmQtYWx0KTtcbiAgfVxuXG4gIC5iYWNrZ3JvdW5kLS1pbWFnZSB7XG4gICAgLS1iYWNrZ3JvdW5kLWltZy1icmlnaHRuZXNzOiAxO1xuICAgIC0tYmFja2dyb3VuZC1pbWctc2F0dXJhdGU6IDEuMjU7XG4gICAgLS1iYWNrZ3JvdW5kLWltZy1vcGFjaXR5OiAwLjU7XG5cbiAgICAmID4gaW1nIHtcbiAgICAgIG9iamVjdC1maXQ6IGNvdmVyO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgaW5saW5lLXNpemU6IDEwMCU7XG4gICAgICBtaW4tYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgIGZpbHRlcjogYnJpZ2h0bmVzcyh2YXIoLS1iYWNrZ3JvdW5kLWltZy1icmlnaHRuZXNzKSlcbiAgICAgICAgc2F0dXJhdGUodmFyKC0tYmFja2dyb3VuZC1pbWctc2F0dXJhdGUpKVxuICAgICAgICBvcGFjaXR5KHZhcigtLWJhY2tncm91bmQtaW1nLW9wYWNpdHkpKTtcbiAgICB9XG4gIH1cblxuICAuYmFja2dyb3VuZC0tcmV2ZXJzZSB7XG4gICAgLS1jb2xvdXItYm9yZGVyOiB2YXIoLS1jb2xvdXItYm9yZGVyLXJldmVyc2UpO1xuICAgIC0tY29sb3VyLWxpbms6IHZhcigtLWNvbG91ci1saW5rLXJldmVyc2UpO1xuICAgIC0tY29sb3VyLWxpbmstaG92ZXI6IHZhcigtLWNvbG91ci1saW5rLWhvdmVyLXJldmVyc2UpO1xuICAgIC0tY29sb3VyLWJhY2tncm91bmQ6IHZhcigtLWNvbG91ci1iYWNrZ3JvdW5kLXJldmVyc2UpO1xuICAgIC0tY29sb3VyLWZvcmVncm91bmQ6IHZhcigtLWNvbG91ci1mb3JlZ3JvdW5kLXJldmVyc2UpO1xuXG4gICAgJiAuYmFja2dyb3VuZC0taW1hZ2Uge1xuICAgICAgLS1iYWNrZ3JvdW5kLWltZy1icmlnaHRuZXNzOiAwLjQ1O1xuICAgICAgLS1iYWNrZ3JvdW5kLWltZy1vcGFjaXR5OiAxO1xuICAgIH1cbiAgfVxufVxuIiwiQGxheWVyIHV0aWxpdGllcyB7XG4gIC5hbmltYXRlZC0tZmFkZS1pbiB7XG4gICAgYW5pbWF0aW9uOiBmYWRlLWluIDAuNXMgdmFyKC0tZWFzZSk7XG4gIH1cblxuICAuYW5pbWF0ZWQtLWZhZGUtb3V0IHtcbiAgICBhbmltYXRpb246IGZhZGUtb3V0IDAuNXMgdmFyKC0tZWFzZSk7XG4gIH1cblxuICAuYW5pbWF0ZWQtLXNwaW46OmJlZm9yZSB7XG4gICAgYW5pbWF0aW9uOiBzcGluIDJzIGxpbmVhciBpbmZpbml0ZTtcbiAgfVxuXG4gIC5hbmltYXRlZC0tc2NhbGUtdXAge1xuICAgIGFuaW1hdGlvbjogc2NhbGUtdXAgMC41cyB2YXIoLS1lYXNlKTtcbiAgfVxuXG4gIC5hbmltYXRlZC0tc2NhbGUtZG93biB7XG4gICAgYW5pbWF0aW9uOiBzY2FsZS1kb3duIDAuNXMgdmFyKC0tZWFzZSk7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBmYWRlLWluIHtcbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBmYWRlLW91dCB7XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgc3BpbiB7XG4gIHRvIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxdHVybik7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBzY2FsZS11cCB7XG4gIHRvIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMjUpO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgc2NhbGUtZG93biB7XG4gIHRvIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuNzUpO1xuICB9XG59XG5cbkBtZWRpYSAoLS1yZWR1Y2UtbW90aW9uKSB7XG4gICosXG4gIDo6YmVmb3JlLFxuICA6OmFmdGVyIHtcbiAgICBhbmltYXRpb24tZGVsYXk6IC0xbXMgIWltcG9ydGFudDtcbiAgICBhbmltYXRpb24tZHVyYXRpb246IDFtcyAhaW1wb3J0YW50O1xuICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDEgIWltcG9ydGFudDtcbiAgICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGluaXRpYWwgIWltcG9ydGFudDtcbiAgICBzY3JvbGwtYmVoYXZpb3I6IGF1dG8gIWltcG9ydGFudDtcbiAgICB0cmFuc2l0aW9uLWRlbGF5OiAwcyAhaW1wb3J0YW50O1xuICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDBzICFpbXBvcnRhbnQ7XG4gIH1cbn1cbiIsIi8qKlxuICogQmFzZVxuICpcbiAqIFN0eWxlIGd1aWRlOiBiYXNlXG4gKi9cblxuQGltcG9ydCB1cmwoXCJfZ2VuZXJpYy5jc3NcIik7XG5AaW1wb3J0IHVybChcIl9mbG93LmNzc1wiKTtcblxuLyoqXG4gKiBUeXBvZ3JhcGh5XG4gKlxuICogVHlwb2dyYXBoeSBpcyBkZWZpbmVkIGluIHRoZSBCYXNlIHBhY2thZ2UuIFZpZXcgdGhlIFtCYXNlIHBhY2thZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9wcmV2aW91c25leHQvbWl4dGFwZS90cmVlL21hc3Rlci9wYWNrYWdlcy9iYXNlKSBvbiBnaXRodWIuXG4gKiBCZXN0IGRpc3BsYXllZCB3aGVuIHdyYXBwZWQgaW4gdGhlIGByaWNoLXRleHRgIGNsYXNzLlxuICpcbiAqIE1hcmt1cDogdHlwb2dyYXBoeS50d2lnXG4gKlxuICogV3JhcHBlcjogcmljaC10ZXh0IHZlcnRpY2FsLWZsb3dcbiAqXG4gKiBTdHlsZSBndWlkZTogYmFzZS50eXBvZ3JhcGh5XG4gKi9cblxuQGltcG9ydCB1cmwoXCJfaGVhZGluZ3MuY3NzXCIpO1xuQGltcG9ydCB1cmwoXCJfYmxvY2txdW90ZS5jc3NcIik7XG5AaW1wb3J0IHVybChcIl9oci5jc3NcIik7XG5cbi8qKlxuICogTGlua3NcbiAqXG4gKiBMaW5rcyBhcmUgZGVmaW5lZCBpbiB0aGUgQmFzZSBwYWNrYWdlLiBWaWV3IHRoZSBbQmFzZSBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcHJldmlvdXNuZXh0L21peHRhcGUvdHJlZS9tYXN0ZXIvcGFja2FnZXMvYmFzZSkgb24gZ2l0aHViLlxuICpcbiAqIC5saW5rLS1leHRlcm5hbCAtIEV4dGVybmFsIExpbmtcbiAqIC5saW5rLS1tb3JlIC0gTW9yZSBMaW5rXG4gKlxuICogTWFya3VwOiBsaW5rLnR3aWdcbiAqXG4gKiBXcmFwcGVyOiByaWNoLXRleHRcbiAqXG4gKiBTdHlsZSBndWlkZTogYmFzZS5saW5rXG4gKi9cblxuQGltcG9ydCB1cmwoXCJfbGlua3MuY3NzXCIpO1xuXG4vKipcbiAqIFRleHQgU2l6ZXNcbiAqXG4gKiBUZXh0IFNpemVzIGFyZSBkZWZpbmVkIGluIHRoZSBCYXNlIHBhY2thZ2UuIFZpZXcgdGhlIFtCYXNlIHBhY2thZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9wcmV2aW91c25leHQvbWl4dGFwZS90cmVlL21hc3Rlci9wYWNrYWdlcy9iYXNlKSBvbiBnaXRodWIuXG4gKlxuICogV3JhcHBlcjogdmVydGljYWwtZmxvd1xuICpcbiAqIE1hcmt1cDogdGV4dC1zaXplcy50d2lnXG4gKlxuICogU3R5bGUgZ3VpZGU6IGJhc2UudHlwb2dyYXBoeS50ZXh0LXNpemVzXG4gKi9cblxuQGltcG9ydCB1cmwoXCJfdGV4dC1zaXplcy5jc3NcIik7XG5AaW1wb3J0IHVybChcIl90ZXh0LWFsaWduLmNzc1wiKTtcblxuLyoqXG4gKiBTcGFjaW5nXG4gKlxuICpcbiAqIFNwYWNpbmcgaXMgZGVmaW5lZCBpbiB0aGUgQmFzZSBwYWNrYWdlLiBWaWV3IHRoZSBbQmFzZSBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcHJldmlvdXNuZXh0L21peHRhcGUvdHJlZS9tYXN0ZXIvcGFja2FnZXMvYmFzZSkgb24gZ2l0aHViLlxuICogUmV1c2FibGUgc3BhY2luZyBzdHlsZXMuIFVzZSBzcGFjaW5nLS1yZXNldCB0byByZW1vdmUgc3BhY2luZy5cbiAqXG4gKiAuc3BhY2luZy0teHMgLSAuc3BhY2luZy0teHNcbiAqIC5zcGFjaW5nLS1zIC0gLnNwYWNpbmctLXNcbiAqIC5zcGFjaW5nLS1tIC0gLnNwYWNpbmctLW1cbiAqIC5zcGFjaW5nLS1sIC0gLnNwYWNpbmctLWxcbiAqIC5zcGFjaW5nLS14bCAtIC5zcGFjaW5nLS14bFxuICogLnNwYWNpbmctLXRvcC14cyAtIC5zcGFjaW5nLS10b3AteHNcbiAqIC5zcGFjaW5nLS10b3AtcyAtIC5zcGFjaW5nLS10b3Atc1xuICogLnNwYWNpbmctLXRvcC1tIC0gLnNwYWNpbmctLXRvcC1tXG4gKiAuc3BhY2luZy0tdG9wLWwgLSAuc3BhY2luZy0tdG9wLWxcbiAqIC5zcGFjaW5nLS10b3AteGwgLSAuc3BhY2luZy0tdG9wLXhsXG4gKiAuc3BhY2luZy0tYm90dG9tLXhzIC0gLnNwYWNpbmctLWJvdHRvbS14c1xuICogLnNwYWNpbmctLWJvdHRvbS1zIC0gLnNwYWNpbmctLWJvdHRvbS1zXG4gKiAuc3BhY2luZy0tYm90dG9tLW0gLSAuc3BhY2luZy0tYm90dG9tLW1cbiAqIC5zcGFjaW5nLS1ib3R0b20tbCAtIC5zcGFjaW5nLS1ib3R0b20tbFxuICogLnNwYWNpbmctLWJvdHRvbS14bCAtIC5zcGFjaW5nLS1ib3R0b20teGxcbiAqIC5zcGFjaW5nLS1sZWZ0LXhzIC0gLnNwYWNpbmctLWxlZnQteHNcbiAqIC5zcGFjaW5nLS1sZWZ0LXMgLSAuc3BhY2luZy0tbGVmdC1zXG4gKiAuc3BhY2luZy0tbGVmdC1tIC0gLnNwYWNpbmctLWxlZnQtbVxuICogLnNwYWNpbmctLWxlZnQtbCAtIC5zcGFjaW5nLS1sZWZ0LWxcbiAqIC5zcGFjaW5nLS1sZWZ0LXhsIC0gLnNwYWNpbmctLWxlZnQteGxcbiAqIC5zcGFjaW5nLS1yaWdodC14cyAtIC5zcGFjaW5nLS1yaWdodC14c1xuICogLnNwYWNpbmctLXJpZ2h0LXMgLSAuc3BhY2luZy0tcmlnaHQtc1xuICogLnNwYWNpbmctLXJpZ2h0LW0gLSAuc3BhY2luZy0tcmlnaHQtbVxuICogLnNwYWNpbmctLXJpZ2h0LWwgLSAuc3BhY2luZy0tcmlnaHQtbFxuICogLnNwYWNpbmctLXJpZ2h0LXhsIC0gLnNwYWNpbmctLXJpZ2h0LXhsXG4gKlxuICogRGVmYXVsdDogZmFsc2VcbiAqXG4gKiBNYXJrdXA6IHNwYWNpbmcudHdpZ1xuICpcbiAqIFN0eWxlIGd1aWRlOiBiYXNlLnNwYWNpbmdcbiAqL1xuXG5AaW1wb3J0IHVybChcIl9zcGFjaW5nLmNzc1wiKTtcblxuLyoqXG4gKiBJbWFnZXNcbiAqXG4gKiBJbWFnZSBzdHlsZXMgYXJlIGRlZmluZWQgaW4gdGhlIEJhc2UgcGFja2FnZS4gVmlldyB0aGUgW0Jhc2UgcGFja2FnZV0oaHR0cHM6Ly9naXRodWIuY29tL3ByZXZpb3VzbmV4dC9taXh0YXBlL3RyZWUvbWFzdGVyL3BhY2thZ2VzL2Jhc2UpIG9uIGdpdGh1Yi5cbiAqXG4gKiAuaW1hZ2UtLWxlZnQgLSAuaW1hZ2UtLWxlZnRcbiAqIC5pbWFnZS0tcmlnaHQgLSAuaW1hZ2UtLXJpZ2h0XG4gKlxuICogV3JhcHBlcjogdmVydGljYWwtZmxvd1xuICpcbiAqIE1hcmt1cDogaW1hZ2UudHdpZ1xuICpcbiAqIFN0eWxlIGd1aWRlOiBiYXNlLmltYWdlc1xuICovXG5cbkBpbXBvcnQgdXJsKFwiX2ltYWdlLmNzc1wiKTtcbkBpbXBvcnQgdXJsKFwiX2ltYWdlLWFsaWduLmNzc1wiKTtcblxuLyoqXG4gKiBWaWRlb1xuICpcbiAqIFZpZGVvIHN0eWxlcyBhcmUgZGVmaW5lZCBpbiB0aGUgQmFzZSBwYWNrYWdlLiBWaWV3IHRoZSBbQmFzZSBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcHJldmlvdXNuZXh0L21peHRhcGUvdHJlZS9tYXN0ZXIvcGFja2FnZXMvYmFzZSkgb24gZ2l0aHViLlxuICpcbiAqIFdyYXBwZXI6IHZlcnRpY2FsLWZsb3dcbiAqXG4gKiBNYXJrdXA6IHZpZGVvLnR3aWdcbiAqXG4gKiBTdHlsZSBndWlkZTogYmFzZS52aWRlb1xuICovXG5cbkBpbXBvcnQgdXJsKFwiX3ZpZGVvLmNzc1wiKTtcblxuLyoqXG4gKiBUYWJsZVxuICpcbiAqIFRhYmxlcyBhcmUgZGVmaW5lZCBpbiB0aGUgQmFzZSBwYWNrYWdlLiBWaWV3IHRoZSBbQmFzZSBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcHJldmlvdXNuZXh0L21peHRhcGUvdHJlZS9tYXN0ZXIvcGFja2FnZXMvYmFzZSkgb24gZ2l0aHViLlxuICpcbiAqIC50YWJsZS0tZmx1c2ggLSBBIHRhYmxlIHdpdGggZmx1c2ggZWRnZXNcbiAqIC50YWJsZS0tc3RyaXBlZCAtIFplYnJhIHN0cmlwZWQgdGFibGVcbiAqIC50YWJsZS0tc21hbGwgLSBBIHNtYWxsIHRhYmxlIHVzZWZ1bGwgZm9yIGxhcmdlIGFtb3VudHMgb2YgZGF0YVxuICpcbiAqIE1hcmt1cDogdGFibGUudHdpZ1xuICpcbiAqIFN0eWxlIGd1aWRlOiBiYXNlLnRhYmxlXG4gKi9cblxuLyoqXG4gKiBUYWJsZSBSZXNwb25zaXZlXG4gKlxuICogVGFibGUgUmVzcG9uc2l2ZSBpcyBkZWZpbmVkIGluIHRoZSBCYXNlIHBhY2thZ2UuIFZpZXcgdGhlIFtCYXNlIHBhY2thZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9wcmV2aW91c25leHQvbWl4dGFwZS90cmVlL21hc3Rlci9wYWNrYWdlcy9iYXNlKSBvbiBnaXRodWIuXG4gKlxuICogQWxsb3cgdGFibGVzIHRvIGJlIHNjcm9sbGFibGUgb24gc21hbGwgc2NyZWVucy5cbiAqXG4gKiBNYXJrdXA6IHRhYmxlLXJlc3BvbnNpdmUudHdpZ1xuICpcbiAqIFN0eWxlIGd1aWRlOiBiYXNlLnRhYmxlLnJlc3BvbnNpdmVcbiAqL1xuXG5AaW1wb3J0IHVybChcIl90YWJsZS5jc3NcIik7XG5cbi8qKlxuICogUHJpbnQgU3R5bGVzaGVldFxuICovXG5cbkBpbXBvcnQgdXJsKFwiX3ByaW50LmNzc1wiKTtcbiIsIkBsYXllciBkZWZhdWx0cyB7XG4gICosXG4gICo6OmJlZm9yZSxcbiAgKjo6YWZ0ZXIge1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgfVxuXG4gICoge1xuICAgIG1hcmdpbjogMDtcbiAgfVxuXG4gIDpmb2N1cyB7XG4gICAgc2Nyb2xsLXBhZGRpbmctYmxvY2stZW5kOiA0dmg7XG4gIH1cblxuICA6Zm9jdXMtdmlzaWJsZSB7XG4gICAgLS1vdXRsaW5lLXNpemU6IG1heCgycHgsIDAuMTVlbSk7XG5cbiAgICBvdXRsaW5lOiB2YXIoLS1vdXRsaW5lLXdpZHRoLCB2YXIoLS1vdXRsaW5lLXNpemUpKVxuICAgICAgdmFyKC0tb3V0bGluZS1zdHlsZSwgc29saWQpIHZhcigtLW91dGxpbmUtY29sb3IsIGN1cnJlbnRjb2xvcik7XG4gICAgb3V0bGluZS1vZmZzZXQ6IHZhcigtLW91dGxpbmUtb2Zmc2V0LCB2YXIoLS1vdXRsaW5lLXNpemUpKTtcbiAgfVxuXG4gIGh0bWwge1xuICAgIGJsb2NrLXNpemU6IDEwMCU7XG4gICAgZm9udC1zaXplOiAxMDAlOyAvKiAxNnB4IGluIG1vc3QgYnJvd3NlcnMgKi9cbiAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1mYW1pbHkpO1xuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodCk7XG4gICAgc2Nyb2xsLWJlaGF2aW9yOiBzbW9vdGg7XG4gIH1cblxuICAudHJhbnNsYXRlZC1ydGwge1xuICAgIGRpcmVjdGlvbjogcnRsO1xuICB9XG5cbiAgYm9keSB7XG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUpO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvdXItZm9yZWdyb3VuZCk7XG4gICAgYWNjZW50LWNvbG9yOiB2YXIoLS1jb2xvdXItcHJpbWFyeSk7XG4gICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplc3BlZWQ7XG4gICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgfVxuXG4gIDp0YXJnZXQsXG4gIFtpZF0sXG4gIC5oYXMtc2Nyb2xsLW1hcmdpbiB7XG4gICAgc2Nyb2xsLW1hcmdpbi1ibG9jay1zdGFydDogY2FsYyhcbiAgICAgIHZhcigtLXN0aWNreS1vZmZzZXQsIDByZW0pICsgdmFyKC0tc2Nyb2xsLW1hcmdpbilcbiAgICApO1xuICB9XG5cbiAgOmlzKGIsIHN0cm9uZykge1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcbiAgfVxuXG4gIGE6d2hlcmUoW2hyZWZdKSB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgdGV4dC1kZWNvcmF0aW9uLXRoaWNrbmVzczogbWF4KDAuMDhlbSwgMXB4KTtcbiAgICB0ZXh0LWRlY29yYXRpb24tc2tpcC1pbms6IGF1dG87XG4gICAgdGV4dC11bmRlcmxpbmUtb2Zmc2V0OiAwLjE1ZW07XG5cbiAgICAmOmhvdmVyLFxuICAgICY6YWN0aXZlIHtcbiAgICAgIHRleHQtdW5kZXJsaW5lLW9mZnNldDogMC4yZW07XG4gICAgICB0ZXh0LWRlY29yYXRpb24tdGhpY2tuZXNzOiBtYXgoMC4wOWVtLCAycHgpO1xuICAgIH1cbiAgfVxuXG4gIDppcyhvbCwgdWwpIHtcbiAgICBwYWRkaW5nLWlubGluZS1zdGFydDogdmFyKC0tc3BhY2luZy1tKTtcblxuICAgICZbcm9sZT1cImxpc3RcIl0ge1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAwO1xuICAgIH1cbiAgfVxuXG4gIGRsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiB2YXIoLS1zcGFjaW5nLXhzKTtcblxuICAgICYgZGl2IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBnYXA6IHZhcigtLXNwYWNpbmctcyk7XG4gICAgfVxuICB9XG5cbiAgcCB7XG4gICAgdGV4dC13cmFwOiBwcmV0dHk7XG4gIH1cbn1cbiIsIkBsYXllciB1dGlsaXRpZXMge1xuICAudmVydGljYWwtZmxvdyB7XG4gICAgLyogRGVmYXVsdCB2ZXJ0aWNhbCBmbG93LiAqL1xuXG4gICAgJiA+IDp3aGVyZSg6bm90KDpmaXJzdC1jaGlsZCkpIHtcbiAgICAgIG1hcmdpbi1ibG9jay1zdGFydDogdmFyKC0tZ2FwKTtcbiAgICB9XG5cbiAgICAmID4gLnZlcnRpY2FsLWZsb3dfX2NvbGxhcHNlIHtcbiAgICAgIG1hcmdpbi1ibG9jay1zdGFydDogMDtcbiAgICB9XG5cbiAgICAvKiBSaWNoIHRleHQgdmVydGljYWwgZmxvdyBpcyBlbmhhbmNlZCAqL1xuICAgICYucmljaC10ZXh0ID4gLnRleHQtLWxlZGU6d2hlcmUoOm5vdCg6Zmlyc3QtY2hpbGQpKSB7XG4gICAgICBtYXJnaW4tYmxvY2stc3RhcnQ6IHZhcigtLWdhcC14bCk7XG4gICAgfVxuICB9XG5cbiAgLnZlcnRpY2FsLWZsb3ctZmxleCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIGdhcDogdmFyKC0tZ2FwKTtcblxuICAgICYgPiAqIHtcbiAgICAgIG1hcmdpbjogMDtcblxuICAgICAgJi5jb250YWluZXIge1xuICAgICAgICBpbmxpbmUtc2l6ZTogMTAwJTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuaG9yaXpvbnRhbC1mbG93LWZsZXgge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGdhcDogdmFyKC0tZ2FwKTtcblxuICAgICYgPiAqIHtcbiAgICAgIG1hcmdpbjogMDtcbiAgICB9XG4gIH1cbn1cbiIsIkBsYXllciBkZWZhdWx0cyB7XG4gIDppcyhcbiAgICAgIC5oZWFkbGluZSxcbiAgICAgIGgxLFxuICAgICAgLmhlYWRpbmctLXh4bCxcbiAgICAgIGgyLFxuICAgICAgLmhlYWRpbmctLXhsLFxuICAgICAgaDMsXG4gICAgICAuaGVhZGluZy0tbCxcbiAgICAgIGg0LFxuICAgICAgLmhlYWRpbmctLW0sXG4gICAgICBoNSxcbiAgICAgIC5oZWFkaW5nLS1zLFxuICAgICAgaDYsXG4gICAgICAuaGVhZGluZy0teHNcbiAgICApIHtcbiAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1mYW1pbHktaGVhZGluZyk7XG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LWgpO1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplKTtcbiAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtYm9sZCk7XG4gICAgdGV4dC13cmFwOiBiYWxhbmNlO1xuICB9XG5cbiAgQHN1cHBvcnRzIChmb250LXNpemU6IDFjcWkpIHtcbiAgICA6aXMoXG4gICAgICAgIC5oZWFkbGluZSxcbiAgICAgICAgaDEsXG4gICAgICAgIC5oZWFkaW5nLS14eGwsXG4gICAgICAgIGgyLFxuICAgICAgICAuaGVhZGluZy0teGwsXG4gICAgICAgIGgzLFxuICAgICAgICAuaGVhZGluZy0tbCxcbiAgICAgICAgaDQsXG4gICAgICAgIC5oZWFkaW5nLS1tLFxuICAgICAgICBoNSxcbiAgICAgICAgLmhlYWRpbmctLXNcbiAgICAgICkge1xuICAgICAgLS1mb250LW1pbjogY2FsYyhcbiAgICAgICAgdmFyKC0tZm9udC1zaXplKSAtIHZhcigtLWZvbnQtc2l6ZSkgKiB2YXIoLS1mb250LXNpemUtZGlmZiwgMC4zKVxuICAgICAgKTtcblxuICAgICAgZm9udC1zaXplOiBjbGFtcChcbiAgICAgICAgbWF4KHZhcigtLWJhc2UtZm9udC1zaXplKSwgdmFyKC0tZm9udC1taW4pKSxcbiAgICAgICAgdmFyKC0tZm9udC1taW4pICsgMWNxaSxcbiAgICAgICAgdmFyKC0tZm9udC1zaXplKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAuaGVhZGxpbmUge1xuICAgIC0tZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHh4bCk7XG4gIH1cblxuICBoMSxcbiAgLmhlYWRpbmctLXh4bCB7XG4gICAgLS1mb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14eGwpO1xuICB9XG5cbiAgaDIsXG4gIC5oZWFkaW5nLS14bCB7XG4gICAgLS1mb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14bCk7XG4gIH1cblxuICBoMyxcbiAgLmhlYWRpbmctLWwge1xuICAgIC0tZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtbCk7XG4gIH1cblxuICBoNCxcbiAgLmhlYWRpbmctLW0ge1xuICAgIC0tZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtbSk7XG4gIH1cblxuICBoNSxcbiAgLmhlYWRpbmctLXMge1xuICAgIC0tZm9udC1zaXplOiB2YXIoLS1iYXNlLWZvbnQtc2l6ZSk7XG4gIH1cblxuICBoNixcbiAgLmhlYWRpbmctLXhzIHtcbiAgICAtLWZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXMpO1xuICB9XG59XG4iLCJAbGF5ZXIgZGVmYXVsdHMge1xuICBibG9ja3F1b3RlIHtcbiAgICBwYWRkaW5nLWlubGluZS1zdGFydDogdmFyKC0tZ2FwKTtcbiAgICBib3JkZXItaW5saW5lLXN0YXJ0OiB2YXIoLS1ibG9ja3F1b3RlLWxpbmUtd2lkdGgpIHNvbGlkXG4gICAgICB2YXIoLS1ibG9ja3F1b3RlLWxpbmUtY29sb3IpO1xuICB9XG59XG4iLCJAbGF5ZXIgZGVmYXVsdHMge1xuICBociB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgYmxvY2stc2l6ZTogMDtcbiAgICBib3JkZXI6IDA7XG4gICAgYm9yZGVyLWJsb2NrLXN0YXJ0OiAxcHggc29saWQgdmFyKC0tY29sb3VyLWJvcmRlcik7XG4gIH1cbn1cbiIsIkBsYXllciBkZWZhdWx0cyB7XG4gIGE6d2hlcmUoW2hyZWZdKTppcygubGluaywgLmxpbmstLW1vcmUsIC5saW5rLS1leHRlcm5hbCksXG4gIC5yaWNoLXRleHQgYTp3aGVyZShbaHJlZl06bm90KFtjbGFzc10pKSB7XG4gICAgY29sb3I6IHZhcigtLWNvbG91ci1saW5rKTtcbiAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjJzIHZhcigtLWVhc2UpO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3VyLWxpbmstaG92ZXIpO1xuICAgIH1cblxuICAgICY6Zm9jdXMtdmlzaWJsZSB7XG4gICAgICBvdXRsaW5lLW9mZnNldDogdmFyKC0tc3BhY2luZy14eHhzKTtcbiAgICB9XG4gIH1cblxuICBhOndoZXJlKFtocmVmXSkubGluay0tZXh0ZXJuYWwge1xuICAgIG1hcmdpbi1pbmxpbmUtZW5kOiB2YXIoLS1zcGFjaW5nLXh4eHMpO1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGdhcDogdmFyKC0tc3BhY2luZy14eHhzKTtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgY29udGVudDogXCJcIjtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIG1hc2staW1hZ2U6IHN2Zy1sb2FkKFwiLi9pbWFnZXMvZXh0ZXJuYWwtbGluay5zdmdcIik7XG4gICAgICBtYXNrLXNpemU6IGNvbnRhaW47XG4gICAgICBibG9jay1zaXplOiB2YXIoLS1zcGFjaW5nLXMpO1xuICAgICAgaW5saW5lLXNpemU6IHZhcigtLXNwYWNpbmctcyk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjdXJyZW50Y29sb3I7XG4gICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC41cyB2YXIoLS1lYXNlKTtcbiAgICB9XG5cbiAgICAmOmhvdmVyOjphZnRlciB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTNweCk7XG4gICAgfVxuICB9XG5cbiAgYTp3aGVyZShbaHJlZl0pLmxpbmstLW1vcmUge1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBnYXA6IHZhcigtLXNwYWNpbmctcyk7XG4gIH1cbn1cbiIsIkBsYXllciB1dGxpdGllcyB7XG4gIDppcyhcbiAgICAgIC50ZXh0LS1zZWN0aW9uLWhlYWRsaW5lLFxuICAgICAgLnRleHQtLWVtYmVsbGlzaGVkLWhlYWRsaW5lLFxuICAgICAgLnRleHQtLWxlZGUsXG4gICAgICAudGV4dC0teHMsXG4gICAgICAudGV4dC0tcyxcbiAgICAgIC50ZXh0LS1tLFxuICAgICAgLnRleHQtLWwsXG4gICAgICAudGV4dC0teGwsXG4gICAgICAudGV4dC0teHhsLFxuICAgICAgLnRleHQtLXh4eGwsXG4gICAgICAudGV4dC0tZmx1aWRcbiAgICApIHtcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZSk7XG4gIH1cblxuICBAc3VwcG9ydHMgKGZvbnQtc2l6ZTogMWNxaSkge1xuICAgIDppcyhcbiAgICAgICAgLnRleHQtLXNlY3Rpb24taGVhZGxpbmUsXG4gICAgICAgIC50ZXh0LS1sZWRlLFxuICAgICAgICAudGV4dC0tbSxcbiAgICAgICAgLnRleHQtLWwsXG4gICAgICAgIC50ZXh0LS14bCxcbiAgICAgICAgLnRleHQtLXh4bCxcbiAgICAgICAgLnRleHQtLXh4eGwsXG4gICAgICAgIC50ZXh0LS1mbHVpZFxuICAgICAgKSB7XG4gICAgICAtLWZvbnQtbWluOiBjYWxjKFxuICAgICAgICB2YXIoLS1mb250LXNpemUpIC0gdmFyKC0tZm9udC1zaXplKSAqIHZhcigtLWZvbnQtc2l6ZS1kaWZmLCAwLjMpXG4gICAgICApO1xuXG4gICAgICBmb250LXNpemU6IGNsYW1wKFxuICAgICAgICBtYXgodmFyKC0tYmFzZS1mb250LXNpemUpLCB2YXIoLS1mb250LW1pbikpLFxuICAgICAgICB2YXIoLS1mb250LW1pbikgKyAxY3FpLFxuICAgICAgICB2YXIoLS1mb250LXNpemUpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC50ZXh0LS1zZWN0aW9uLWhlYWRsaW5lIHtcbiAgICAtLWZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLW0pO1xuXG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWZhbWlseS1oZWFkaW5nKTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3VyLWZvcmVncm91bmQtYWx0KTtcbiAgICBtYXJnaW4tYmxvY2stc3RhcnQ6IDA7XG4gICAgdGV4dC13cmFwOiBiYWxhbmNlO1xuXG4gICAgJiArIDppcyhoMiwgaDMpIHtcbiAgICAgIG1hcmdpbi1ibG9jay1zdGFydDogdmFyKC0tc3BhY2luZy14eHh4cykgIWltcG9ydGFudDtcbiAgICB9XG4gIH1cblxuICAudGV4dC0tZW1iZWxsaXNoZWQtaGVhZGxpbmUge1xuICAgIC0tZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtcyk7XG5cbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtYm9sZCk7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZmFtaWx5LWhlYWRpbmcpO1xuICAgIG1hcmdpbi1ibG9jazogMCB2YXIoLS1zcGFjaW5nLWwpO1xuICAgIHRleHQtd3JhcDogYmFsYW5jZTtcblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGlubGluZS1zaXplOiB2YXIoLS1zcGFjaW5nLXh4eGwpO1xuICAgICAgYmxvY2stc2l6ZTogM3B4O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3VyLXByaW1hcnkpO1xuICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IHZhcigtLWdhcCk7XG4gICAgfVxuICB9XG5cbiAgLnRleHQtLWxlZGUge1xuICAgIC0tZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc20pO1xuICB9XG5cbiAgLnRleHQtLXh4eGwge1xuICAgIC0tZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHh4bCk7XG5cbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtaCk7XG4gIH1cblxuICAudGV4dC0teHhsIHtcbiAgICAtLWZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXh4bCk7XG5cbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtaCk7XG4gIH1cblxuICAudGV4dC0teGwge1xuICAgIC0tZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteGwpO1xuXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LWgpO1xuICB9XG5cbiAgLnRleHQtLWwge1xuICAgIC0tZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtbCk7XG5cbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtaCk7XG4gIH1cblxuICAudGV4dC0tbSB7XG4gICAgLS1mb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1tKTtcbiAgfVxuXG4gIC50ZXh0LS1zIHtcbiAgICAtLWZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXMpO1xuICB9XG5cbiAgLnRleHQtLXhzIHtcbiAgICAtLWZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzKTtcbiAgfVxufVxuIiwiQGxheWVyIHV0bGl0aWVzIHtcbiAgLnRleHQtLWxlZnQge1xuICAgIHRleHQtYWxpZ246IHN0YXJ0O1xuICB9XG5cbiAgLnRleHQtLXJpZ2h0IHtcbiAgICB0ZXh0LWFsaWduOiBlbmQ7XG4gIH1cblxuICAudGV4dC0tY2VudGVyIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cbn1cbiIsIi8qIHN0eWxlbGludC1kaXNhYmxlIGN1c3RvbS1wcm9wZXJ0eS1wYXR0ZXJuICovXG5AZGVmaW5lLW1peGluIHNwYWNpbmcgJHNpemUge1xuICAuc3BhY2luZy0tJChzaXplKSB7XG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2luZy0kKHNpemUpKTtcbiAgfVxuXG4gIC5zcGFjaW5nLS10b3AtJChzaXplKSB7XG4gICAgcGFkZGluZy1ibG9jay1zdGFydDogdmFyKC0tc3BhY2luZy0kKHNpemUpKTtcbiAgfVxuXG4gIC5zcGFjaW5nLS1ib3R0b20tJChzaXplKSB7XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6IHZhcigtLXNwYWNpbmctJChzaXplKSk7XG4gIH1cblxuICAuc3BhY2luZy0tbGVmdC0kKHNpemUpIHtcbiAgICBwYWRkaW5nLWlubGluZS1zdGFydDogdmFyKC0tc3BhY2luZy0kKHNpemUpKTtcbiAgfVxuXG4gIC5zcGFjaW5nLS1yaWdodC0kKHNpemUpIHtcbiAgICBwYWRkaW5nLWlubGluZS1lbmQ6IHZhcigtLXNwYWNpbmctJChzaXplKSk7XG4gIH1cbn1cbiIsIkBpbXBvcnQgdXJsKFwiX21peGlucy5jc3NcIik7XG5cbkBsYXllciB1dGxpdGllcyB7XG4gIC5zcGFjaW5nLS1yZXNldCB7XG4gICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICB9XG5cbiAgLnNwYWNpbmctLXRvcC1yZXNldCB7XG4gICAgcGFkZGluZy1ibG9jay1zdGFydDogMCAhaW1wb3J0YW50O1xuICB9XG5cbiAgLnNwYWNpbmctLWJvdHRvbS1yZXNldCB7XG4gICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICB9XG5cbiAgLnNwYWNpbmctLWxlZnQtcmVzZXQge1xuICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5zcGFjaW5nLS1yaWdodC1yZXNldCB7XG4gICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICB9XG5cbiAgQG1peGluIHNwYWNpbmcgeHhzO1xuICBAbWl4aW4gc3BhY2luZyB4cztcbiAgQG1peGluIHNwYWNpbmcgcztcbiAgQG1peGluIHNwYWNpbmcgbTtcbiAgQG1peGluIHNwYWNpbmcgbDtcbiAgQG1peGluIHNwYWNpbmcgeGw7XG4gIEBtaXhpbiBzcGFjaW5nIHh4bDtcbiAgQG1peGluIHNwYWNpbmcgeHh4bDtcbiAgQG1peGluIHNwYWNpbmcgeHh4eGw7XG4gIEBtaXhpbiBzcGFjaW5nIHVsO1xuICBAbWl4aW4gc3BhY2luZyB1dWw7XG4gIEBtaXhpbiBzcGFjaW5nIHV1dWw7XG59XG4iLCJAbGF5ZXIgZGVmYXVsdHMge1xuICBmaWd1cmUge1xuICAgIG1hcmdpbjogMDtcbiAgICBkaXNwbGF5OiB0YWJsZTtcbiAgICBtYXgtaW5saW5lLXNpemU6IDEwMCU7XG5cbiAgICAmIGltZyB7XG4gICAgICBpbmxpbmUtc2l6ZTogMTAwJTtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbiAgICB9XG4gIH1cblxuICBmaWdjYXB0aW9uIHtcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14cyk7XG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LWgpO1xuICAgIGNhcHRpb24tc2lkZTogYm90dG9tO1xuICAgIGRpc3BsYXk6IHRhYmxlLWNhcHRpb247XG4gIH1cblxuICBpbWcge1xuICAgIHZlcnRpY2FsLWFsaWduOiB0ZXh0LWJvdHRvbTtcbiAgICBtYXgtaW5saW5lLXNpemU6IDEwMCU7XG4gICAgYmxvY2stc2l6ZTogYXV0bztcbiAgfVxuXG4gIHN2Zzpub3QoW2ZpbGxdKSB7XG4gICAgZmlsbDogY3VycmVudGNvbG9yO1xuICB9XG59XG4iLCJAbGF5ZXIgZGVmYXVsdHMge1xuICA6aXMoLmltYWdlLS1sZWZ0LCAuaW1hZ2UtLXJpZ2h0LCBmaWd1cmUuYWxpZ24tcmlnaHQsIGZpZ3VyZS5hbGlnbi1sZWZ0KSB7XG4gICAgQG1lZGlhICgtLXNtYWxsLXVwKSB7XG4gICAgICBkaXNwbGF5OiB0YWJsZTtcbiAgICAgIG1heC1pbmxpbmUtc2l6ZTogNTAlO1xuICAgICAgbWFyZ2luLWJsb2NrLWVuZDogdmFyKC0tc3BhY2luZy1zKTtcblxuICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1ibG9jay1zdGFydDogMDtcblxuICAgICAgICAmICsgKiB7XG4gICAgICAgICAgbWFyZ2luLWJsb2NrLXN0YXJ0OiAwICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJiBmaWdjYXB0aW9uIHtcbiAgICAgICAgZGlzcGxheTogdGFibGUtY2FwdGlvbjtcbiAgICAgICAgY2FwdGlvbi1zaWRlOiBib3R0b207XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgOmlzKFxuICAgICAgLmltYWdlLS1sZWZ0LFxuICAgICAgZmlndXJlLmFsaWduLWxlZnQsXG4gICAgICBbZGlyPVwicnRsXCJdIC5pbWFnZS0tcmlnaHQsXG4gICAgICBbZGlyPVwicnRsXCJdIGZpZ3VyZS5hbGlnbi1yaWdodCxcbiAgICAgIC50cmFuc2xhdGVkLXJ0bCAuaW1hZ2UtLXJpZ2h0LFxuICAgICAgLnRyYW5zbGF0ZWQtcnRsIGZpZ3VyZS5hbGlnbi1yaWdodFxuICAgICkge1xuICAgIEBtZWRpYSAoLS1zbWFsbC11cCkge1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICBtYXJnaW4taW5saW5lOiAwIHZhcigtLXNwYWNpbmctbSk7XG4gICAgfVxuICB9XG5cbiAgOmlzKFxuICAgICAgLmltYWdlLS1yaWdodCxcbiAgICAgIGZpZ3VyZS5hbGlnbi1yaWdodCxcbiAgICAgIFtkaXI9XCJydGxcIl0gLmltYWdlLS1sZWZ0LFxuICAgICAgW2Rpcj1cInJ0bFwiXSBmaWd1cmUuYWxpZ24tbGVmdCxcbiAgICAgIC50cmFuc2xhdGVkLXJ0bCAuaW1hZ2UtLWxlZnQsXG4gICAgICAudHJhbnNsYXRlZC1ydGwgZmlndXJlLmFsaWduLWxlZnRcbiAgICApIHtcbiAgICBAbWVkaWEgKC0tc21hbGwtdXApIHtcbiAgICAgIGZsb2F0OiByaWdodDtcbiAgICAgIG1hcmdpbi1pbmxpbmU6IHZhcigtLXNwYWNpbmctbSkgMDtcbiAgICB9XG4gIH1cbn1cbiIsIkBsYXllciBkZWZhdWx0cyB7XG4gIC52aWRlbyB7XG4gICAgJixcbiAgICAmIDppcyhlbWJlZCwgb2JqZWN0LCBpZnJhbWUpIHtcbiAgICAgIGFzcGVjdC1yYXRpbzogMTYgLyA5O1xuICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgIGlubGluZS1zaXplOiAxMDAlO1xuICAgIH1cbiAgfVxufVxuIiwiQGxheWVyIGRlZmF1bHRzIHtcbiAgdGFibGUge1xuICAgIGlubGluZS1zaXplOiAxMDAlO1xuICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gICAgbWFyZ2luOiAwO1xuXG4gICAgJiB0aCB7XG4gICAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtYm9sZCk7XG4gICAgICB0ZXh0LWFsaWduOiBzdGFydDtcbiAgICB9XG5cbiAgICAmIDppcyh0ZCwgdGgpIHtcbiAgICAgIHBhZGRpbmc6IHZhcigtLXNwYWNpbmcteHhzKTtcbiAgICAgIGJvcmRlci1ibG9jay1lbmQ6IDFweCBzb2xpZCB2YXIoLS1jb2xvdXItYm9yZGVyKTtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgfVxuXG4gICAgJiB0aGVhZCA6aXModGQsIHRoKSB7XG4gICAgICBib3JkZXItY29sb3I6IGN1cnJlbnRjb2xvcjtcbiAgICB9XG4gIH1cblxuICAudGFibGUtLWZsdXNoIHtcbiAgICAmIDppcyh0ZCwgdGgpIHtcbiAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICBwYWRkaW5nLWlubGluZS1zdGFydDogMDtcbiAgICAgIH1cblxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgcGFkZGluZy1pbmxpbmUtZW5kOiAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC50YWJsZS0tc21hbGwge1xuICAgICYgOmlzKHRkLCB0aCkge1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtcyk7XG4gICAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtaCk7XG4gICAgfVxuICB9XG5cbiAgLnRhYmxlLS1zdHJpcGVkIHtcbiAgICAmIHRib2R5IHRyIHtcbiAgICAgICY6bnRoLWNoaWxkKGV2ZW4pIHtcbiAgICAgICAgJiA6aXModGQsIHRoKSB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3VyLWJhY2tncm91bmQtYWx0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC50YWJsZS0tcmVzcG9uc2l2ZSB7XG4gICAgbWF4LWlubGluZS1zaXplOiAxMDAlO1xuXG4gICAgQG1lZGlhICgtLW1lZGl1bS1kb3duKSB7XG4gICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG4gICAgICBib3gtc2hhZG93OiB2YXIoLS1ib3gtc2hhZG93KSBpbnNldDtcblxuICAgICAgJiB0YWJsZSB7XG4gICAgICAgIGlubGluZS1zaXplOiAxMDAlO1xuICAgICAgICBtYXJnaW4tYmxvY2s6IDA7XG4gICAgICAgIG1hcmdpbi1pbmxpbmU6IHZhcigtLXNwYWNpbmctcyk7XG5cbiAgICAgICAgJiB0ZCB7XG4gICAgICAgICAgbWluLWlubGluZS1zaXplOiAyMGNoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJAbWVkaWEgcHJpbnQge1xuICAuY29udGV4dHVhbCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gIC5yaWNoLXRleHQge1xuICAgIG1heC1pbmxpbmUtc2l6ZTogMTAwJTtcbiAgfVxuXG4gIGZpZ3VyZSB7XG4gICAgJi5pbWFnZS0tYnJlYWtvdXQge1xuICAgICAgbWF4LWlubGluZS1zaXplOiA1MDBweDtcbiAgICAgIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IDA7XG5cbiAgICAgICYgZmlnY2FwdGlvbiB7XG4gICAgICAgIG1heC1pbmxpbmUtc2l6ZTogMTAwJTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8qKlxuICogU2VjdGlvblxuICpcbiAqIFNlY3Rpb25zIGFyZSBkZWZpbmVkIGluIHRoZSBMYXlvdXQgcGFja2FnZS4gVmlldyB0aGUgW0xheW91dCBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcHJldmlvdXNuZXh0L21peHRhcGUvdHJlZS9tYXN0ZXIvcGFja2FnZXMvbGF5b3V0KSBvbiBnaXRodWIuXG4gKiBTZWN0aW9ucyBhcmUgY29udGFpbmVycyBmb3Igb3RoZXIgY29tcG9uZW50cyB0byBiZSBwbGFjZWQgaW4uIFRoZXkgbG9vayBhZnRlciByZXNwb25zaXZlIHZlcnRpY2FsIHNwYWNpbmcsXG4gKiBtYXgtY29udGFpbmVyLXdpZHRoLCBiYWNrZ3JvdW5kIGNvbG9ycywgYW5kIGdyaWQgY29sdW1uIGdhcC4gVGhleSBhY3QgYXMgcm93cyBmb3IgY29udGVudC5cbiAqXG4gKiBTdHlsZSBndWlkZTogTGF5b3V0LnNlY3Rpb25cbiAqL1xuXG5AbGF5ZXIgbGF5b3V0IHtcbiAgOndoZXJlKC5zZWN0aW9uKSB7XG4gICAgLS1ndXR0ZXI6IGNsYW1wKHZhcigtLXNwYWNpbmctcyksIDZ2dywgdmFyKC0tc3BhY2luZy1sKSk7XG4gICAgLS1mdWxsOiBtaW5tYXgodmFyKC0tZ3V0dGVyKSwgMWZyKTtcbiAgICAtLW5hcnJvdzogbWluKHZhcigtLWNvbnRhaW5lci1tYXgtd2lkdGgpLCAxMDAlIC0gdmFyKC0tZ3V0dGVyKSAqIDIpO1xuICAgIC0tZmVhdHVyZTogbWlubWF4KDAsIHZhcigtLXNwYWNpbmctdWwpKTtcbiAgICAtLWNvbnRhaW5lcjogbWlubWF4KDAsIHZhcigtLWNvbnRhaW5lci1wbHVzKSk7XG5cbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczpcbiAgICAgIFtmdWxsLXN0YXJ0XSB2YXIoLS1mdWxsKVxuICAgICAgW2NvbnRhaW5lci1zdGFydF0gdmFyKC0tY29udGFpbmVyKVxuICAgICAgW2ZlYXR1cmUtc3RhcnRdIHZhcigtLWZlYXR1cmUpXG4gICAgICBbbmFycm93LXN0YXJ0XSB2YXIoLS1uYXJyb3cpIFtuYXJyb3ctZW5kXVxuICAgICAgdmFyKC0tZmVhdHVyZSkgW2ZlYXR1cmUtZW5kXVxuICAgICAgdmFyKC0tY29udGFpbmVyKSBbY29udGFpbmVyLWVuZF1cbiAgICAgIHZhcigtLWZ1bGwpIFtmdWxsLWVuZF07XG5cbiAgICAmID4gKiB7XG4gICAgICBncmlkLWNvbHVtbjogY29udGFpbmVyO1xuXG4gICAgICAmOndoZXJlKC5zZWN0aW9uKSB7XG4gICAgICAgIGdyaWQtY29sdW1uOiBmdWxsO1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHN1YmdyaWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgOndoZXJlKDppcyguc2VjdGlvbi0tZmVhdHVyZSA+ICosIC5zZWN0aW9uX19mZWF0dXJlKSkge1xuICAgIGdyaWQtY29sdW1uOiBmZWF0dXJlO1xuICB9XG5cbiAgOndoZXJlKDppcyguc2VjdGlvbi0tbmFycm93ID4gKiwgLnNlY3Rpb25fX25hcnJvdykpIHtcbiAgICBncmlkLWNvbHVtbjogbmFycm93O1xuICB9XG5cbiAgOndoZXJlKDppcyguc2VjdGlvbi0tZnVsbCA+ICosIC5zZWN0aW9uX19mdWxsKSkge1xuICAgIGdyaWQtY29sdW1uOiBmdWxsO1xuICB9XG5cbiAgLmNvbnRhaW5lciB7XG4gICAgLS1jb250YWluZXItbmFtZTogY29udGFpbmVyO1xuXG4gICAgY29udGFpbmVyLW5hbWU6IHZhcigtLWNvbnRhaW5lci1uYW1lKTtcbiAgICBjb250YWluZXItdHlwZTogaW5saW5lLXNpemU7XG4gIH1cblxuICAuc2VjdGlvbi0tZGl2aWRlciB7XG4gICAgYm9yZGVyLWJsb2NrLXN0YXJ0OiAxcHggc29saWQgdmFyKC0tY29sb3VyLWJvcmRlcik7XG4gIH1cblxuICAuc2VjdGlvbi0tcyB7XG4gICAgcGFkZGluZy1ibG9jazogdmFyKC0tc2VjdGlvbi1zKTtcbiAgfVxuXG4gIC5zZWN0aW9uLS1tIHtcbiAgICBwYWRkaW5nLWJsb2NrOiB2YXIoLS1zZWN0aW9uLW0pO1xuICB9XG5cbiAgLnNlY3Rpb24tLWwge1xuICAgIHBhZGRpbmctYmxvY2s6IHZhcigtLXNlY3Rpb24tbCk7XG4gIH1cblxuICAuc2VjdGlvbi0teGwge1xuICAgIHBhZGRpbmctYmxvY2s6IHZhcigtLXNlY3Rpb24teGwpO1xuICB9XG5cbiAgLnNlY3Rpb24tLXRvcC1zIHtcbiAgICBwYWRkaW5nLWJsb2NrLXN0YXJ0OiB2YXIoLS1zZWN0aW9uLXMpO1xuICB9XG5cbiAgLnNlY3Rpb24tLXRvcC1tIHtcbiAgICBwYWRkaW5nLWJsb2NrLXN0YXJ0OiB2YXIoLS1zZWN0aW9uLW0pO1xuICB9XG5cbiAgLnNlY3Rpb24tLXRvcC1sIHtcbiAgICBwYWRkaW5nLWJsb2NrLXN0YXJ0OiB2YXIoLS1zZWN0aW9uLWwpO1xuICB9XG5cbiAgLnNlY3Rpb24tLXRvcC14bCB7XG4gICAgcGFkZGluZy1ibG9jay1zdGFydDogdmFyKC0tc2VjdGlvbi14bCk7XG4gIH1cblxuICAuc2VjdGlvbi0tYm90dG9tLXMge1xuICAgIHBhZGRpbmctYmxvY2stZW5kOiB2YXIoLS1zZWN0aW9uLXMpO1xuICB9XG5cbiAgLnNlY3Rpb24tLWJvdHRvbS1tIHtcbiAgICBwYWRkaW5nLWJsb2NrLWVuZDogdmFyKC0tc2VjdGlvbi1tKTtcbiAgfVxuXG4gIC5zZWN0aW9uLS1ib3R0b20tbCB7XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6IHZhcigtLXNlY3Rpb24tbCk7XG4gIH1cblxuICAuc2VjdGlvbi0tYm90dG9tLXhsIHtcbiAgICBwYWRkaW5nLWJsb2NrLWVuZDogdmFyKC0tc2VjdGlvbi14bCk7XG4gIH1cbn1cblxuLyoqXG4gKiBTZWN0aW9ucyBicmVha291dHNcbiAqXG4gKiBVc2VzIGBzdWJncmlkYCBzbyBubyBzdXBwb3J0ZWQgaW4gb2xkZXIgYnJvd3NlcnMuXG4gKlxuICogTWFya3VwOiBzZWN0aW9ucy1icmVha291dC50d2lnXG4gKlxuICogU3R5bGUgZ3VpZGU6IExheW91dC5zZWN0aW9ucy1icmVha29vdXRcbiAqL1xuXG4vKipcbiAqIFNlY3Rpb25zIGZsb3dzICYgZ3JvdXBzXG4gKlxuICogVXNlcyBgOmhhc2Agc28gaXMgbm90IHN1cHBvcnRlZCBpbiBvbGRlciBicm93c2Vycy5cbiAqIHNlZSBodHRwczovL3d3dy5icmFtLnVzLzIwMjIvMTIvMTMvcXVhbnRpdHktcXVlcmllcy1mb3ItaXNsYW5kcy1vZi1lbGVtZW50cy13aXRoLXRoZS1zYW1lLWNsYXNzLXRoYW5rcy10by1jc3MtaGFzL1xuICpcbiAqIE1hcmt1cDogc2VjdGlvbnMtZmxvdy50d2lnXG4gKlxuICogU3R5bGUgZ3VpZGU6IExheW91dC5zZWN0aW9ucy1mbG93XG4gKi9cblxuQGxheWVyIGxheW91dCB7XG4gIC5zZWN0aW9uLS1mbG93IHtcbiAgICBwYWRkaW5nLWJsb2NrLWVuZDogdmFyKC0tc2VjdGlvbi1sKTtcblxuICAgICY6aXMoXG4gICAgICAgIFtjbGFzcyo9XCJiYWNrZ3JvdW5kXCJdLFxuICAgICAgICBbY2xhc3MqPVwiYmFja2dyb3VuZFwiXSArIC5zZWN0aW9uLS1mbG93LFxuICAgICAgICA6bm90KC5zZWN0aW9uLS1mbG93ICsgLnNlY3Rpb24tLWZsb3cpXG4gICAgICApIHtcbiAgICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6IHZhcigtLXNlY3Rpb24tbCk7XG4gICAgfVxuICB9XG5cbiAgLnNlY3Rpb24tLWdyb3VwIHtcbiAgICBwYWRkaW5nLWJsb2NrOiAwO1xuXG4gICAgLyogOmZpcnN0LWluLWlzbGFuZC1vZi1jbGFzcyAqL1xuXG4gICAgJjpub3QoLnNlY3Rpb24tLWdyb3VwICsgLnNlY3Rpb24tLWdyb3VwKSB7XG4gICAgICBwYWRkaW5nLWJsb2NrLXN0YXJ0OiB2YXIoLS1zZWN0aW9uLXhsKTtcbiAgICB9XG5cbiAgICAvKiA6bGFzdC1pbi1pc2xhbmQtb2YtY2xhc3MgKi9cblxuICAgICY6bm90KDpoYXMoKyAuc2VjdGlvbi0tZ3JvdXApKSB7XG4gICAgICBwYWRkaW5nLWJsb2NrLWVuZDogdmFyKC0tc2VjdGlvbi14bCk7XG4gICAgfVxuXG4gICAgLyogOnNpbmdsZS1pbi1pc2xhbmQtb2YtY2xhc3MgKi9cblxuICAgICY6bm90KC5zZWN0aW9uLS1ncm91cCArIC5zZWN0aW9uLS1ncm91cCwgOmhhcygrIC5zZWN0aW9uLS1ncm91cCkpIHtcbiAgICAgIHBhZGRpbmctYmxvY2s6IHZhcigtLXNlY3Rpb24teGwpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFNlY3Rpb24gQmFja2dyb3VuZFxuICpcbiAqIFNlY3Rpb24gQmFja2dyb3VuZCBpcyBkZWZpbmVkIGluIHRoZSBMYXlvdXQgcGFja2FnZS4gVmlldyB0aGUgW0xheW91dCBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcHJldmlvdXNuZXh0L21peHRhcGUvdHJlZS9tYXN0ZXIvcGFja2FnZXMvbGF5b3V0KSBvbiBnaXRodWIuXG4gKiBBIHNlY3Rpb24gd2l0aCBhZGRpdGlvbmFsIGJhY2tncm91bmQgaW1hZ2UuXG4gKlxuICogLmJhY2tncm91bmQtLXJldmVyc2UgLSBEYXJrXG4gKlxuICogTWFya3VwOiBzZWN0aW9uLWJhY2tncm91bmQudHdpZ1xuICpcbiAqIFN0eWxlIGd1aWRlOiBMYXlvdXQuc2VjdGlvbi5iYWNrZ3JvdW5kXG4gKi9cblxuQGxheWVyIGxheW91dCB7XG4gIDppcyguc2VjdGlvbi0taGFzLWJhY2tncm91bmQsIC5zZWN0aW9uOmhhcyguYmFja2dyb3VuZC0taW1hZ2UpKSB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAmID4gZGl2IHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBTZWN0aW9ucyBzdGFja2VkXG4gKlxuICogU2VjdGlvbnMgc3RhY2tlZCBhcmUgZGVmaW5lZCBpbiB0aGUgTGF5b3V0IHBhY2thZ2UuIFZpZXcgdGhlIFtMYXlvdXQgcGFja2FnZV0oaHR0cHM6Ly9naXRodWIuY29tL3ByZXZpb3VzbmV4dC9taXh0YXBlL3RyZWUvbWFzdGVyL3BhY2thZ2VzL2xheW91dCkgb24gZ2l0aHViLlxuICogRXhhbXBsZSBvZiBtdWx0aXBsZSBzZWN0aW9ucyBzdGFja2VkIHdpdGggYWx0ZXJuYXRpbmcgYmFja2dyb3VuZCByb3dzLlxuICpcbiAqIE1hcmt1cDogc2VjdGlvbnMtc3RhY2tlZC50d2lnXG4gKlxuICogU3R5bGUgZ3VpZGU6IExheW91dC5zZWN0aW9ucy1zdGFja2VkXG4gKi9cblxuLyoqXG4gKiBQcmludCBzdHlsZXNoZWV0XG4gKi9cblxuQG1lZGlhIHByaW50IHtcbiAgLnNlY3Rpb25fX2NvbnRlbnQge1xuICAgIG1heC1pbmxpbmUtc2l6ZTogMTAwJTtcbiAgfVxufVxuIiwiLyoqXG4gKiBHcmlkXG4gKlxuICogR3JpZCBpcyBkZWZpbmVkIGluIHRoZSBsYXlvdXQgcGFja2FnZS4gVmlldyB0aGUgW0xheW91dCBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcHJldmlvdXNuZXh0L21peHRhcGUvdHJlZS9tYXN0ZXIvcGFja2FnZXMvbGF5b3V0KSBvbiBnaXRodWIuXG4gKlxuICogU3R5bGUgZ3VpZGU6IExheW91dC5ncmlkXG4gKi9cblxuQGxheWVyIGxheW91dCB7XG4gIC5ncmlkIHtcbiAgICAtLWdyaWQtcmVwZWF0OiAxMjtcblxuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCh2YXIoLS1ncmlkLXJlcGVhdCksIDFmcik7XG4gICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiAxZnI7XG4gICAgZ2FwOiB2YXIoLS1nYXApO1xuXG4gICAgQG1lZGlhICgtLWxhcmdlLXVwKSB7XG4gICAgICBnYXA6IHZhcigtLWdhcC1sKTtcbiAgICB9XG5cbiAgICAmOmlzKHVsLCBvbCkge1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiB1bnNldDtcbiAgICB9XG4gIH1cblxuICA6aXMoXG4gICAgICAuZ3JpZC0tMTItY29sLFxuICAgICAgLmdyaWQtLTExLWNvbCxcbiAgICAgIC5ncmlkLS0xMC1jb2wsXG4gICAgICAuZ3JpZC0tOS1jb2wsXG4gICAgICAuZ3JpZC0tOC1jb2wsXG4gICAgICAuZ3JpZC0tNy1jb2wsXG4gICAgICAuZ3JpZC0tNi1jb2wsXG4gICAgICAuZ3JpZC0tNS1jb2wsXG4gICAgICAuZ3JpZC0tNC1jb2wsXG4gICAgICAuZ3JpZC0tMy1jb2wsXG4gICAgICAuZ3JpZC0tMi1jb2wsXG4gICAgICAuZ3JpZC0tMS1jb2xcbiAgICApIHtcbiAgICAtLWdyaWQtc3BhbjogMTI7XG5cbiAgICBncmlkLWNvbHVtbjogYXV0byAvIHNwYW4gdmFyKC0tZ3JpZC1zcGFuKTtcbiAgfVxuXG4gIC5ncmlkLS0xMS1jb2wge1xuICAgIEBtZWRpYSAoLS1tZWRpdW0tdXApIHtcbiAgICAgIC0tZ3JpZC1zcGFuOiAxMTtcbiAgICB9XG4gIH1cblxuICAuZ3JpZC0tMTAtY29sIHtcbiAgICBAbWVkaWEgKC0tbWVkaXVtLXVwKSB7XG4gICAgICAtLWdyaWQtc3BhbjogMTA7XG4gICAgfVxuICB9XG5cbiAgLmdyaWQtLTktY29sIHtcbiAgICBAbWVkaWEgKC0tbWVkaXVtLXVwKSB7XG4gICAgICAtLWdyaWQtc3BhbjogOTtcbiAgICB9XG4gIH1cblxuICAuZ3JpZC0tOC1jb2wge1xuICAgIEBtZWRpYSAoLS1tZWRpdW0tdXApIHtcbiAgICAgIC0tZ3JpZC1zcGFuOiA4O1xuICAgIH1cbiAgfVxuXG4gIC5ncmlkLS03LWNvbCB7XG4gICAgQG1lZGlhICgtLW1lZGl1bS11cCkge1xuICAgICAgLS1ncmlkLXNwYW46IDc7XG4gICAgfVxuICB9XG5cbiAgLmdyaWQtLTYtY29sIHtcbiAgICBAbWVkaWEgKC0tbWVkaXVtLXVwKSB7XG4gICAgICAtLWdyaWQtc3BhbjogNjtcbiAgICB9XG4gIH1cblxuICAuZ3JpZC0tNS1jb2wge1xuICAgIEBtZWRpYSAoLS1zbWFsbC11cCkge1xuICAgICAgLS1ncmlkLXNwYW46IDY7XG4gICAgfVxuXG4gICAgQG1lZGlhICgtLW1lZGl1bS11cCkge1xuICAgICAgLS1ncmlkLXNwYW46IDU7XG4gICAgfVxuICB9XG5cbiAgLmdyaWQtLTQtY29sIHtcbiAgICBAbWVkaWEgKC0tc21hbGwtdXApIHtcbiAgICAgIC0tZ3JpZC1zcGFuOiA2O1xuICAgIH1cblxuICAgIEBtZWRpYSAoLS1tZWRpdW0tdXApIHtcbiAgICAgIC0tZ3JpZC1zcGFuOiA0O1xuICAgIH1cbiAgfVxuXG4gIC5ncmlkLS0zLWNvbCB7XG4gICAgQG1lZGlhICgtLXNtYWxsLXVwKSB7XG4gICAgICAtLWdyaWQtc3BhbjogNjtcbiAgICB9XG5cbiAgICBAbWVkaWEgKC0tbWVkaXVtLXVwKSB7XG4gICAgICAtLWdyaWQtc3BhbjogMztcbiAgICB9XG4gIH1cblxuICAuZ3JpZC0tMi1jb2wge1xuICAgIEBtZWRpYSAoLS1zbWFsbC11cCkge1xuICAgICAgLS1ncmlkLXNwYW46IDM7XG4gICAgfVxuXG4gICAgQG1lZGlhICgtLW1lZGl1bS11cCkge1xuICAgICAgLS1ncmlkLXNwYW46IDI7XG4gICAgfVxuICB9XG5cbiAgLmdyaWQtLTEtY29sIHtcbiAgICBAbWVkaWEgKC0tc21hbGwtdXApIHtcbiAgICAgIC0tZ3JpZC1zcGFuOiAzO1xuICAgIH1cblxuICAgIEBtZWRpYSAoLS1tZWRpdW0tdXApIHtcbiAgICAgIC0tZ3JpZC1zcGFuOiAxO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEdyaWQgKER5bmFtaWMpXG4gKlxuICogR3JpZCBpcyBkZWZpbmVkIGluIHRoZSBsYXlvdXQgcGFja2FnZS4gVmlldyB0aGUgW0xheW91dCBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcHJldmlvdXNuZXh0L21peHRhcGUvdHJlZS9tYXN0ZXIvcGFja2FnZXMvbGF5b3V0KSBvbiBnaXRodWIuXG4gKlxuICogTWFya3VwOiBncmlkLWR5bmFtaWMudHdpZ1xuICpcbiAqIFN0eWxlIGd1aWRlOiBMYXlvdXQuZ3JpZC5keW5hbWljXG4gKi9cblxuQGxheWVyIGxheW91dCB7XG4gIC5ncmlkLS1keW5hbWljIHtcbiAgICAtLWdyaWQtcmVwZWF0OiBhdXRvLWZpdDtcbiAgICAtLWdyaWQtbWluOiAyMGNoO1xuXG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoXG4gICAgICB2YXIoLS1ncmlkLXJlcGVhdCksXG4gICAgICBtaW5tYXgobWluKDEwMCUsIHZhcigtLWdyaWQtbWluKSksIDFmcilcbiAgICApO1xuICB9XG5cbiAgOmlzKFxuICAgICAgLmdyaWQtLXhzLTItY29scyxcbiAgICAgIC5ncmlkLS1zbS0yLWNvbHMsXG4gICAgICAuZ3JpZC0tbWQtMi1jb2xzLFxuICAgICAgLmdyaWQtLW1kLTMtY29scyxcbiAgICAgIC5ncmlkLS1sZy0zLWNvbHMsXG4gICAgICAuZ3JpZC0tbWQtNC1jb2xzLFxuICAgICAgLmdyaWQtLWxnLTQtY29scyxcbiAgICAgIC5ncmlkLS14bC00LWNvbHNcbiAgICApIHtcbiAgICAtLWdyaWQtcmVwZWF0OiAxO1xuICB9XG5cbiAgLmdyaWQtLXhzLTItY29scyB7XG4gICAgQG1lZGlhICgtLXgtc21hbGwtdXApIHtcbiAgICAgIC0tZ3JpZC1yZXBlYXQ6IDI7XG4gICAgfVxuICB9XG5cbiAgLmdyaWQtLXNtLTItY29scyB7XG4gICAgQG1lZGlhICgtLXNtYWxsLXVwKSB7XG4gICAgICAtLWdyaWQtcmVwZWF0OiAyO1xuICAgIH1cbiAgfVxuXG4gIC5ncmlkLS1tZC0yLWNvbHMge1xuICAgIEBtZWRpYSAoLS1tZWRpdW0tdXApIHtcbiAgICAgIC0tZ3JpZC1yZXBlYXQ6IDI7XG4gICAgfVxuICB9XG5cbiAgLmdyaWQtLW1kLTMtY29scyB7XG4gICAgQG1lZGlhICgtLW1lZGl1bS11cCkge1xuICAgICAgLS1ncmlkLXJlcGVhdDogMztcbiAgICB9XG4gIH1cblxuICAuZ3JpZC0tbGctMy1jb2xzIHtcbiAgICBAbWVkaWEgKC0tbGFyZ2UtdXApIHtcbiAgICAgIC0tZ3JpZC1yZXBlYXQ6IDM7XG4gICAgfVxuICB9XG5cbiAgLmdyaWQtLW1kLTQtY29scyB7XG4gICAgQG1lZGlhICgtLW1lZGl1bS11cCkge1xuICAgICAgLS1ncmlkLXJlcGVhdDogNDtcbiAgICB9XG4gIH1cblxuICAuZ3JpZC0tbGctNC1jb2xzIHtcbiAgICBAbWVkaWEgKC0tbGFyZ2UtdXApIHtcbiAgICAgIC0tZ3JpZC1yZXBlYXQ6IDQ7XG4gICAgfVxuICB9XG5cbiAgLmdyaWQtLXhsLTQtY29scyB7XG4gICAgQG1lZGlhICgtLXgtbGFyZ2UtdXApIHtcbiAgICAgIC0tZ3JpZC1yZXBlYXQ6IDQ7XG4gICAgfVxuICB9XG5cbiAgLmdyaWQtLWNvbGxhcHNlIHtcbiAgICAtLWdhcDogMDtcbiAgfVxuXG4gIC5ncmlkLS1jb2xsYXBzZS1jb2xzIHtcbiAgICBncmlkLWNvbHVtbi1nYXA6IDA7XG4gIH1cblxuICAuZ3JpZC0tY29sbGFwc2Utcm93cyB7XG4gICAgZ3JpZC1yb3ctZ2FwOiAwO1xuICB9XG59XG5cbkBtZWRpYSBwcmludCB7XG4gIC5ncmlkIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxufVxuIiwiLyoqXG4gKiBDb250YWluZXIgR3JpZFxuICpcbiAqIEdyaWQgaXMgZGVmaW5lZCBpbiB0aGUgbGF5b3V0IHBhY2thZ2UuIFZpZXcgdGhlIFtMYXlvdXQgcGFja2FnZV0oaHR0cHM6Ly9naXRodWIuY29tL3ByZXZpb3VzbmV4dC9taXh0YXBlL3RyZWUvbWFzdGVyL3BhY2thZ2VzL2xheW91dCkgb24gZ2l0aHViLlxuICpcbiAqIFdyYXBwZXI6IGNvbnRhaW5lclxuICpcbiAqIFN0eWxlIGd1aWRlOiBMYXlvdXQuZ3JpZC5jb250YWluZXJcbiAqL1xuQGxheWVyIGxheW91dCB7XG4gIC5ncmlkLmNvbnRhaW5lciB7XG4gICAgLS1jb250YWluZXItbmFtZTogZ3JpZC1pdGVtO1xuXG4gICAgQGNvbnRhaW5lciBncmlkLWl0ZW0gKG1pbi13aWR0aDogdG9rZW4oXCJicmVha3BvaW50LmxcIikpIHtcbiAgICAgIC0tZ2FwOiB2YXIoLS1nYXAtbCk7XG4gICAgfVxuXG4gICAgJlxuICAgICAgOmlzKFxuICAgICAgICAuZ3JpZC0tMTEtY29sLFxuICAgICAgICAuZ3JpZC0tMTAtY29sLFxuICAgICAgICAuZ3JpZC0tOS1jb2wsXG4gICAgICAgIC5ncmlkLS04LWNvbCxcbiAgICAgICAgLmdyaWQtLTctY29sLFxuICAgICAgICAuZ3JpZC0tNi1jb2wsXG4gICAgICAgIC5ncmlkLS01LWNvbCxcbiAgICAgICAgLmdyaWQtLTQtY29sLFxuICAgICAgICAuZ3JpZC0tMy1jb2wsXG4gICAgICAgIC5ncmlkLS0yLWNvbCxcbiAgICAgICAgLmdyaWQtLTEtY29sXG4gICAgICApIHtcbiAgICAgIC0tZ3JpZC1yZXBlYXQ6IDEyO1xuICAgICAgLS1ncmlkLXNwYW46IDEyO1xuICAgIH1cblxuICAgICYgLmdyaWQtLTExLWNvbCB7XG4gICAgICBAY29udGFpbmVyIGdyaWQtaXRlbSAobWluLXdpZHRoOiB0b2tlbihcImJyZWFrcG9pbnQubVwiKSkge1xuICAgICAgICAtLWdyaWQtc3BhbjogMTE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJiAuZ3JpZC0tMTAtY29sIHtcbiAgICAgIEBjb250YWluZXIgZ3JpZC1pdGVtIChtaW4td2lkdGg6IHRva2VuKFwiYnJlYWtwb2ludC5tXCIpKSB7XG4gICAgICAgIC0tZ3JpZC1zcGFuOiAxMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmIC5ncmlkLS05LWNvbCB7XG4gICAgICBAY29udGFpbmVyIGdyaWQtaXRlbSAobWluLXdpZHRoOiB0b2tlbihcImJyZWFrcG9pbnQubVwiKSkge1xuICAgICAgICAtLWdyaWQtc3BhbjogOTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmIC5ncmlkLS04LWNvbCB7XG4gICAgICBAY29udGFpbmVyIGdyaWQtaXRlbSAobWluLXdpZHRoOiB0b2tlbihcImJyZWFrcG9pbnQubVwiKSkge1xuICAgICAgICAtLWdyaWQtc3BhbjogODtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmIC5ncmlkLS03LWNvbCB7XG4gICAgICBAY29udGFpbmVyIGdyaWQtaXRlbSAobWluLXdpZHRoOiB0b2tlbihcImJyZWFrcG9pbnQubVwiKSkge1xuICAgICAgICAtLWdyaWQtc3BhbjogNztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmIC5ncmlkLS02LWNvbCB7XG4gICAgICBAY29udGFpbmVyIGdyaWQtaXRlbSAobWluLXdpZHRoOiB0b2tlbihcImJyZWFrcG9pbnQubVwiKSkge1xuICAgICAgICAtLWdyaWQtc3BhbjogNjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmIC5ncmlkLS01LWNvbCB7XG4gICAgICBAY29udGFpbmVyIGdyaWQtaXRlbSAobWluLXdpZHRoOiB0b2tlbihcImJyZWFrcG9pbnQuc1wiKSkge1xuICAgICAgICAtLWdyaWQtc3BhbjogNjtcbiAgICAgIH1cblxuICAgICAgQGNvbnRhaW5lciBncmlkLWl0ZW0gKG1pbi13aWR0aDogdG9rZW4oXCJicmVha3BvaW50Lm1cIikpIHtcbiAgICAgICAgLS1ncmlkLXNwYW46IDU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJiAuZ3JpZC0tNC1jb2wge1xuICAgICAgQGNvbnRhaW5lciBncmlkLWl0ZW0gKG1pbi13aWR0aDogdG9rZW4oXCJicmVha3BvaW50LnNcIikpIHtcbiAgICAgICAgLS1ncmlkLXNwYW46IDY7XG4gICAgICB9XG5cbiAgICAgIEBjb250YWluZXIgZ3JpZC1pdGVtIChtaW4td2lkdGg6IHRva2VuKFwiYnJlYWtwb2ludC5tXCIpKSB7XG4gICAgICAgIC0tZ3JpZC1zcGFuOiA0O1xuICAgICAgfVxuICAgIH1cblxuICAgICYgLmdyaWQtLTMtY29sIHtcbiAgICAgIEBjb250YWluZXIgZ3JpZC1pdGVtIChtaW4td2lkdGg6IHRva2VuKFwiYnJlYWtwb2ludC5zXCIpKSB7XG4gICAgICAgIC0tZ3JpZC1zcGFuOiA2O1xuICAgICAgfVxuXG4gICAgICBAY29udGFpbmVyIGdyaWQtaXRlbSAobWluLXdpZHRoOiB0b2tlbihcImJyZWFrcG9pbnQubVwiKSkge1xuICAgICAgICAtLWdyaWQtc3BhbjogMztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmIC5ncmlkLS0yLWNvbCB7XG4gICAgICBAY29udGFpbmVyIGdyaWQtaXRlbSAobWluLXdpZHRoOiB0b2tlbihcImJyZWFrcG9pbnQuc1wiKSkge1xuICAgICAgICAtLWdyaWQtc3BhbjogMztcbiAgICAgIH1cblxuICAgICAgQGNvbnRhaW5lciBncmlkLWl0ZW0gKG1pbi13aWR0aDogdG9rZW4oXCJicmVha3BvaW50Lm1cIikpIHtcbiAgICAgICAgLS1ncmlkLXNwYW46IDI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJiAuZ3JpZC0tMS1jb2wge1xuICAgICAgQGNvbnRhaW5lciBncmlkLWl0ZW0gKG1pbi13aWR0aDogdG9rZW4oXCJicmVha3BvaW50LnNcIikpIHtcbiAgICAgICAgLS1ncmlkLXNwYW46IDM7XG4gICAgICB9XG5cbiAgICAgIEBjb250YWluZXIgZ3JpZC1pdGVtIChtaW4td2lkdGg6IHRva2VuKFwiYnJlYWtwb2ludC5tXCIpKSB7XG4gICAgICAgIC0tZ3JpZC1zcGFuOiAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENvbnRhaW5lciBHcmlkIChkeW5hbWljKVxuICpcbiAqIEdyaWQgaXMgZGVmaW5lZCBpbiB0aGUgbGF5b3V0IHBhY2thZ2UuIFZpZXcgdGhlIFtMYXlvdXQgcGFja2FnZV0oaHR0cHM6Ly9naXRodWIuY29tL3ByZXZpb3VzbmV4dC9taXh0YXBlL3RyZWUvbWFzdGVyL3BhY2thZ2VzL2xheW91dCkgb24gZ2l0aHViLlxuICpcbiAqIFdyYXBwZXI6IGNvbnRhaW5lclxuICpcbiAqIFN0eWxlIGd1aWRlOiBMYXlvdXQuZ3JpZC5jb250YWluZXItZHluYW1pY1xuICovXG5cbkBsYXllciBsYXlvdXQge1xuICAuZ3JpZC5jb250YWluZXIge1xuICAgICY6aXMoLmdyaWQtLWR5bmFtaWMpIHtcbiAgICAgIC8qIFRoaXMgZG9lc24ndCBwbGF5IG5pY2UgaW4gU2FmYXJpIGFuZCBpc24ndCByZXF1aXJlZCwgc28gd2UgdW5zZXQgdGhlIGNvbnRhaW5lci4gKi9cbiAgICAgIGNvbnRhaW5lci10eXBlOiB1bnNldDtcbiAgICB9XG5cbiAgICAmOmlzKFxuICAgICAgICAuZ3JpZC0teHMtMi1jb2xzLFxuICAgICAgICAuZ3JpZC0tc20tMi1jb2xzLFxuICAgICAgICAuZ3JpZC0tbWQtMi1jb2xzLFxuICAgICAgICAuZ3JpZC0tbWQtMy1jb2xzLFxuICAgICAgICAuZ3JpZC0tbGctMy1jb2xzLFxuICAgICAgICAuZ3JpZC0tbWQtNC1jb2xzLFxuICAgICAgICAuZ3JpZC0tbGctNC1jb2xzLFxuICAgICAgICAuZ3JpZC0teGwtNC1jb2xzXG4gICAgICApIHtcbiAgICAgIC0tZ3JpZC1yZXBlYXQ6IDE7XG4gICAgfVxuXG4gICAgJi5ncmlkLS14cy0yLWNvbHMge1xuICAgICAgQGNvbnRhaW5lciBncmlkLWl0ZW0gKG1pbi13aWR0aDogdG9rZW4oXCJicmVha3BvaW50LnhzXCIpKSB7XG4gICAgICAgIC0tZ3JpZC1yZXBlYXQ6IDI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5ncmlkLS1zbS0yLWNvbHMge1xuICAgICAgQGNvbnRhaW5lciBncmlkLWl0ZW0gKG1pbi13aWR0aDogdG9rZW4oXCJicmVha3BvaW50LnNcIikpIHtcbiAgICAgICAgLS1ncmlkLXJlcGVhdDogMjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLmdyaWQtLW1kLTItY29scyB7XG4gICAgICBAY29udGFpbmVyIGdyaWQtaXRlbSAobWluLXdpZHRoOiB0b2tlbihcImJyZWFrcG9pbnQubVwiKSkge1xuICAgICAgICAtLWdyaWQtcmVwZWF0OiAyO1xuICAgICAgfVxuICAgIH1cblxuICAgICYuZ3JpZC0tbWQtMy1jb2xzIHtcbiAgICAgIEBjb250YWluZXIgZ3JpZC1pdGVtIChtaW4td2lkdGg6IHRva2VuKFwiYnJlYWtwb2ludC5tXCIpKSB7XG4gICAgICAgIC0tZ3JpZC1yZXBlYXQ6IDM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5ncmlkLS1sZy0zLWNvbHMge1xuICAgICAgQGNvbnRhaW5lciBncmlkLWl0ZW0gKG1pbi13aWR0aDogdG9rZW4oXCJicmVha3BvaW50LmxcIikpIHtcbiAgICAgICAgLS1ncmlkLXJlcGVhdDogMztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLmdyaWQtLW1kLTQtY29scyB7XG4gICAgICBAY29udGFpbmVyIGdyaWQtaXRlbSAobWluLXdpZHRoOiB0b2tlbihcImJyZWFrcG9pbnQubVwiKSkge1xuICAgICAgICAtLWdyaWQtcmVwZWF0OiA0O1xuICAgICAgfVxuICAgIH1cblxuICAgICYuZ3JpZC0tbGctNC1jb2xzIHtcbiAgICAgIEBjb250YWluZXIgZ3JpZC1pdGVtIChtaW4td2lkdGg6IHRva2VuKFwiYnJlYWtwb2ludC5sXCIpKSB7XG4gICAgICAgIC0tZ3JpZC1yZXBlYXQ6IDQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi5ncmlkLS14bC00LWNvbHMge1xuICAgICAgQGNvbnRhaW5lciBncmlkLWl0ZW0gKG1pbi13aWR0aDogdG9rZW4oXCJicmVha3BvaW50LnhsXCIpKSB7XG4gICAgICAgIC0tZ3JpZC1yZXBlYXQ6IDQ7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJAbGF5ZXIgdXRpbGl0aWVzIHtcbiAgLnN0YWNrIHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtYXJlYXM6IFwic3RhY2tcIjtcblxuICAgICYgPiAqIHtcbiAgICAgIGdyaWQtYXJlYTogc3RhY2s7XG4gICAgfVxuICB9XG5cbiAgLmZsZXgge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gIH1cblxuICAucGxhY2UtY2VudGVyIHtcbiAgICBwbGFjZS1jb250ZW50OiBjZW50ZXI7XG4gIH1cblxuICAuYWxpZ24tLWNlbnRlciB7XG4gICAgbWFyZ2luLWlubGluZTogYXV0bztcbiAgfVxuXG4gIC5hbGlnbi0tbGVmdCB7XG4gICAgbWFyZ2luLWlubGluZS1lbmQ6IGF1dG87XG4gIH1cblxuICAuYWxpZ24tLXJpZ2h0IHtcbiAgICBtYXJnaW4taW5saW5lLXN0YXJ0OiBhdXRvO1xuICB9XG5cbiAgLmFsaWduLS1ib3R0b20ge1xuICAgIG1hcmdpbi1ibG9jay1zdGFydDogYXV0bztcbiAgfVxuXG4gIC5hbGlnbi0tdG9wIHtcbiAgICBtYXJnaW4tYmxvY2stZW5kOiBhdXRvO1xuICB9XG5cbiAgLm9yZGVyLS1zdGFydCB7XG4gICAgb3JkZXI6IC0xO1xuICB9XG5cbiAgLm9yZGVyLS0xIHtcbiAgICBvcmRlcjogMTtcbiAgfVxuXG4gIC5vcmRlci0tMiB7XG4gICAgb3JkZXI6IDI7XG4gIH1cblxuICAub3JkZXItLTMge1xuICAgIG9yZGVyOiAzO1xuICB9XG5cbiAgLmdhcC0tcyB7XG4gICAgZ2FwOiB2YXIoLS1nYXAtcyk7XG4gIH1cblxuICAuZ2FwLS1tIHtcbiAgICBnYXA6IHZhcigtLWdhcCk7XG4gIH1cblxuICAuZ2FwLS1sIHtcbiAgICBnYXA6IHZhcigtLWdhcC1sKTtcbiAgfVxuXG4gIC5nYXAtLXhsIHtcbiAgICBnYXA6IHZhcigtLWdhcC14bCk7XG4gIH1cblxuICAuZ2FwLS1zZWN0aW9uLWwge1xuICAgIGdhcDogdmFyKC0tc2VjdGlvbi1sKTtcbiAgfVxuXG4gIC5nYXAtLXNlY3Rpb24teGwge1xuICAgIGdhcDogdmFyKC0tc2VjdGlvbi14bCk7XG4gIH1cbn1cbiIsIi8qKlxuICogQWNjb3JkaW9uXG4gKlxuICogV3JhcHBlcjogc2VjdGlvbiBzZWN0aW9uLS1tXG4gKlxuICogTWFya3VwOiBhY2NvcmRpb24tZXhhbXBsZS50d2lnXG4gKlxuICogVmlldyB0aGUgW0FjY29yZGlvbiBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcHJldmlvdXNuZXh0L21peHRhcGUvdHJlZS9tYXN0ZXIvcGFja2FnZXMvYWNjb3JkaW9uKSBvbiBnaXRodWIuXG4gKlxuICogU3R5bGUgZ3VpZGU6IEVsZW1lbnRzLmFjY29yZGlvblxuICovXG5cbkBsYXllciBkZWZhdWx0cyB7XG4gIGRldGFpbHMge1xuICAgICYgc3VtbWFyeSB7XG4gICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG5cbiAgICAgICY6aXMoOjotd2Via2l0LWRldGFpbHMtbWFya2VyLCA6Om1hcmtlcikge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIDppcyhteC1kZXRhaWxzLCBteC1kZXRhaWxzZGl2LCBteC1kZXRhaWxzbW9iaWxlKSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuICA6d2hlcmUoOmlzKGRpdi5hY2NvcmRpb24sIG14LWRldGFpbHNkaXYpKSB7XG4gICAgJiAuYWNjb3JkaW9uX190b2dnbGUge1xuICAgICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgICAgYmFja2dyb3VuZDogaW5pdGlhbDtcbiAgICAgIGJvcmRlcjogaW5pdGlhbDtcbiAgICAgIHBhZGRpbmc6IGluaXRpYWw7XG4gICAgfVxuXG4gICAgJiAuYWNjb3JkaW9uX19jb250ZW50W2luZXJ0XSB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxufVxuXG5AbGF5ZXIgY29tcG9uZW50cyB7XG4gIC5hY2NvcmRpb24ge1xuICAgIGNvbnRhaW46IGxheW91dDtcblxuICAgICYgLmFjY29yZGlvbl9fdG9nZ2xlIHtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGlubGluZS1zaXplOiAxMDAlO1xuICAgIH1cblxuICAgICY6aXMoPiBoMiwgPiBoMywgPiBoNCwgPiBoNSwgPiBoNikge1xuICAgICAgYWxsOiB1bnNldDtcbiAgICB9XG4gIH1cblxuICAuYWNjb3JkaW9uLS1kaXZpZGVkIHtcbiAgICAtLXZlcnRpY2FsLXBhZGRpbmc6IHZhcigtLXNwYWNpbmcteHhzKTtcbiAgICAtLWhvcml6b250YWwtcGFkZGluZzogMDtcblxuICAgIGJvcmRlci1ibG9jay1lbmQ6IDFweCBzb2xpZCB2YXIoLS1jb2xvdXItYm9yZGVyKTtcblxuICAgICYgLmFjY29yZGlvbl9fdG9nZ2xlIHtcbiAgICAgIHBhZGRpbmctYmxvY2s6IHZhcigtLXZlcnRpY2FsLXBhZGRpbmcpO1xuICAgICAgcGFkZGluZy1pbmxpbmU6IHZhcigtLWhvcml6b250YWwtcGFkZGluZyk7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG4gICAgICAmIC5idXR0b24tLWljb24tb25seSB7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgICBtYXJnaW4taW5saW5lLXN0YXJ0OiB2YXIoLS1zcGFjaW5nLXh4cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJltvcGVuXSB7XG4gICAgICAmIC5hY2NvcmRpb25fX3RvZ2dsZSB7XG4gICAgICAgICYgLmJ1dHRvbi0taWNvbi1vbmx5IHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICYgLmFjY29yZGlvbl9fY29udGVudCB7XG4gICAgICAgIGJvcmRlci1ibG9jay1zdGFydDogMXB4IHNvbGlkIHZhcigtLWNvbG91ci1ib3JkZXIpO1xuICAgICAgICBwYWRkaW5nLWJsb2NrOiB2YXIoLS12ZXJ0aWNhbC1wYWRkaW5nKTtcbiAgICAgICAgcGFkZGluZy1pbmxpbmU6IHZhcigtLWhvcml6b250YWwtcGFkZGluZyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUHJpbnQgc3R5bGVzaGVldFxuICovXG5cbkBtZWRpYSBwcmludCB7XG4gIC5hY2NvcmRpb24ge1xuICAgICYgLmFjY29yZGlvbl9fY29udGVudCB7XG4gICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICAgIH1cbiAgfVxufVxuIiwiLyoqXG4gKiBCdXR0b25zXG4gKlxuICogV3JhcHBlcjogc2VjdGlvbi0tbVxuICpcbiAqIFN0eWxlIGd1aWRlOiBFbGVtZW50cy5idXR0b25zXG4gKi9cblxuQGxheWVyIGVsZW1lbnRzIHtcbiAgLmJ1dHRvbiB7XG4gICAgLS1nYXA6IHZhcigtLXNwYWNpbmctcyk7XG4gICAgLS1vdXRsaW5lLW9mZnNldDogMXB4O1xuICAgIC0tb3V0bGluZS13aWR0aDogNHB4O1xuICAgIC0tYm9yZGVyLXdpZHRoOiAycHg7XG4gICAgLS1ib3JkZXItY29sb3VyOiB2YXIoLS1jb2xvdXItYm9yZGVyKTtcbiAgICAtLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cy1sKTtcbiAgICAtLXZlcnRpY2FsLXBhZGRpbmc6IHZhcigtLXNwYWNpbmcteHhzKTtcbiAgICAtLWhvcml6b250YWwtcGFkZGluZzogdmFyKC0tc3BhY2luZy1tKTtcbiAgICAtLWJhY2tncm91bmQ6IHZhcigtLWNvbG91ci1iYWNrZ3JvdW5kKTtcbiAgICAtLWZvcmVncm91bmQ6IHZhcigtLWNvbG91ci1mb3JlZ3JvdW5kKTtcblxuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGlubGluZS1zaXplOiBmaXQtY29udGVudDtcbiAgICBnYXA6IHZhcigtLWdhcCk7XG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUpO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcbiAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1mYW1pbHkpO1xuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC11aSk7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWJvcmRlci1jb2xvdXIpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cyk7XG4gICAgcGFkZGluZy1ibG9jazogdmFyKC0tdmVydGljYWwtcGFkZGluZyk7XG4gICAgcGFkZGluZy1pbmxpbmU6IHZhcigtLWhvcml6b250YWwtcGFkZGluZyk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmFja2dyb3VuZCk7XG4gICAgY29sb3I6IHZhcigtLWZvcmVncm91bmQpO1xuICAgIHRleHQtZGVjb3JhdGlvbi1saW5lOiBub25lO1xuICAgIHRyYW5zaXRpb246IDAuMnMgY29sb3IsIDAuMnMgYmFja2dyb3VuZC1jb2xvciwgMC4ycyBib3JkZXItY29sb3I7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHRleHQtZGVjb3JhdGlvbi1saW5lOiBub25lO1xuICAgIH1cblxuICAgICY6ZGlzYWJsZWQge1xuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICAgIG9wYWNpdHk6IDAuMztcbiAgICB9XG4gIH1cblxuICAuYnV0dG9uLS1sYXJnZSB7XG4gICAgLS12ZXJ0aWNhbC1wYWRkaW5nOiB2YXIoLS1zcGFjaW5nLXMpO1xuICAgIC0taG9yaXpvbnRhbC1wYWRkaW5nOiB2YXIoLS1zcGFjaW5nLWwpO1xuICB9XG5cbiAgLmJ1dHRvbi0tc21hbGwge1xuICAgIC0tZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtcyk7XG4gICAgLS12ZXJ0aWNhbC1wYWRkaW5nOiB2YXIoLS1zcGFjaW5nLXh4eHMpO1xuICAgIC0taG9yaXpvbnRhbC1wYWRkaW5nOiB2YXIoLS1zcGFjaW5nLXMpO1xuICB9XG5cbiAgLmJ1dHRvbi0tZXh0cmEtc21hbGwge1xuICAgIC0tZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHMpO1xuICAgIC0tdmVydGljYWwtcGFkZGluZzogdmFyKC0tc3BhY2luZy14eHhzKTtcbiAgICAtLWhvcml6b250YWwtcGFkZGluZzogdmFyKC0tc3BhY2luZy1zKTtcbiAgfVxuXG4gIC5idXR0b24tLXRleHQge1xuICAgIGJvcmRlcjogdHJhbnNwYXJlbnQ7XG4gICAgY29sb3I6IHZhcigtLWNvbG91ci1saW5rKTtcblxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6IHZhcigtLWNvbG91ci1saW5rLWhvdmVyKTtcbiAgICAgIHRleHQtZGVjb3JhdGlvbi1saW5lOiB1bmRlcmxpbmU7XG4gICAgfVxuICB9XG59XG4iLCIvKipcbiAqIFByaW1hcnkgQnV0dG9uc1xuICpcbiAqIFZpZXcgdGhlIFtCdXR0b25zIHBhY2thZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9wcmV2aW91c25leHQvbWl4dGFwZS90cmVlL21hc3Rlci9wYWNrYWdlcy9idXR0b25zKSBvbiBnaXRodWIuXG4gKlxuICogV3JhcHBlcjogYmFja2dyb3VuZC0tYmxhY2stMTAgc2VjdGlvbi0tbVxuICpcbiAqIE1hcmt1cDogYnV0dG9uLXByaW1hcnkudHdpZ1xuICpcbiAqIFN0eWxlIGd1aWRlOiBFbGVtZW50cy5idXR0b25zLnByaW1hcnlcbiAqL1xuXG5AbGF5ZXIgZWxlbWVudHMge1xuICAuYnV0dG9uLS1wcmltYXJ5IHtcbiAgICAtLWJvcmRlci1jb2xvdXI6IHZhcigtLWNvbG91ci1wcmltYXJ5KTtcbiAgICAtLWJhY2tncm91bmQ6IHZhcigtLWNvbG91ci1wcmltYXJ5KTtcbiAgICAtLWZvcmVncm91bmQ6IHZhcigtLWNvbG91ci1mb3JlZ3JvdW5kLXJldmVyc2UpO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICAtLWJhY2tncm91bmQ6IHZhcigtLWNvbG91ci1iYWNrZ3JvdW5kKTtcbiAgICAgIC0tZm9yZWdyb3VuZDogdmFyKC0tY29sb3VyLXByaW1hcnkpO1xuICAgIH1cbiAgfVxufVxuIiwiLyoqXG4gKiBCdXR0b24gLSBUZXJ0aWFyeVxuICpcbiAqIFZpZXcgdGhlIFtCdXR0b25zIHBhY2thZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9wcmV2aW91c25leHQvbWl4dGFwZS90cmVlL21hc3Rlci9wYWNrYWdlcy9idXR0b25zKSBvbiBnaXRodWIuXG4gKlxuICogV3JhcHBlcjogYmFja2dyb3VuZC0tYmxhY2stMTAgc2VjdGlvbi0tbVxuICpcbiAqIE1hcmt1cDogYnV0dG9uLXRlcnRpYXJ5LnR3aWdcbiAqXG4gKiBTdHlsZSBndWlkZTogRWxlbWVudHMuYnV0dG9ucy50ZXJ0aWFyeVxuICovXG5cbkBsYXllciBlbGVtZW50cyB7XG4gIC5idXR0b24tLXRlcnRpYXJ5IHtcbiAgICAtLWJvcmRlci1jb2xvdXI6IHZhcigtLWNvbG91ci1wcmltYXJ5KTtcbiAgICAtLWJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIC0tZm9yZWdyb3VuZDogdmFyKC0tY29sb3VyLXByaW1hcnkpO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICAtLWJhY2tncm91bmQ6IHZhcigtLWNvbG91ci1wcmltYXJ5KTtcbiAgICAgIC0tZm9yZWdyb3VuZDogdmFyKC0tY29sb3VyLWZvcmVncm91bmQtcmV2ZXJzZSk7XG4gICAgfVxuICB9XG59XG4iLCIvKipcbiAqIFNlY29uZGFyeSBCdXR0b25zXG4gKlxuICogVmlldyB0aGUgW0J1dHRvbnMgcGFja2FnZV0oaHR0cHM6Ly9naXRodWIuY29tL3ByZXZpb3VzbmV4dC9taXh0YXBlL3RyZWUvbWFzdGVyL3BhY2thZ2VzL2J1dHRvbnMpIG9uIGdpdGh1Yi5cbiAqXG4gKiBXcmFwcGVyOiBiYWNrZ3JvdW5kLS1ibGFjay0xMCBzZWN0aW9uLS1tXG4gKlxuICogTWFya3VwOiBidXR0b24tc2Vjb25kYXJ5LnR3aWdcbiAqXG4gKiBTdHlsZSBndWlkZTogRWxlbWVudHMuYnV0dG9ucy5zZWNvbmRhcnlcbiAqL1xuXG5AbGF5ZXIgZWxlbWVudHMge1xuICAuYnV0dG9uLS1zZWNvbmRhcnkge1xuICAgIC0tYm9yZGVyLWNvbG91cjogdmFyKC0tY29sb3VyLXByaW1hcnkpO1xuICAgIC0tYmFja2dyb3VuZDogdmFyKC0tY29sb3VyLWJhY2tncm91bmQpO1xuICAgIC0tZm9yZWdyb3VuZDogdmFyKC0tY29sb3VyLXByaW1hcnkpO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICAtLWJhY2tncm91bmQ6IHZhcigtLWNvbG91ci1wcmltYXJ5KTtcbiAgICAgIC0tZm9yZWdyb3VuZDogdmFyKC0tY29sb3VyLWZvcmVncm91bmQtcmV2ZXJzZSk7XG4gICAgfVxuICB9XG59XG4iLCIvKipcbiAqIFJldmVyc2UgQnV0dG9uc1xuICpcbiAqIFZpZXcgdGhlIFtCdXR0b25zIHBhY2thZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9wcmV2aW91c25leHQvbWl4dGFwZS90cmVlL21hc3Rlci9wYWNrYWdlcy9idXR0b25zKSBvbiBnaXRodWIuXG4gKlxuICogV3JhcHBlcjogYmFja2dyb3VuZC0tYmxhY2stNzUgc2VjdGlvbi0tbVxuICpcbiAqIE1hcmt1cDogYnV0dG9uLXJldmVyc2UudHdpZ1xuICpcbiAqIFN0eWxlIGd1aWRlOiBFbGVtZW50cy5idXR0b25zLnJldmVyc2VcbiAqL1xuXG5AbGF5ZXIgZWxlbWVudHMge1xuICAuYnV0dG9uLS1yZXZlcnNlIHtcbiAgICAtLWJvcmRlci1jb2xvdXI6IHZhcigtLWNvbG91ci1mb3JlZ3JvdW5kLXJldmVyc2UpO1xuICAgIC0tYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgLS1mb3JlZ3JvdW5kOiB2YXIoLS1jb2xvdXItZm9yZWdyb3VuZC1yZXZlcnNlKTtcblxuICAgICY6aG92ZXIge1xuICAgICAgLS1ib3JkZXItY29sb3VyOiB2YXIoLS1jb2xvdXItZm9yZWdyb3VuZC1yZXZlcnNlKTtcbiAgICAgIC0tYmFja2dyb3VuZDogdmFyKC0tY29sb3VyLWZvcmVncm91bmQtcmV2ZXJzZSk7XG4gICAgICAtLWZvcmVncm91bmQ6IHZhcigtLWNvbG91ci1mb3JlZ3JvdW5kKTtcbiAgICB9XG4gIH1cbn1cbiIsIkBpbXBvcnQgdXJsKFwiX21peGluLWljb24uY3NzXCIpO1xuXG4vKipcbiAqIEljb25cbiAqXG4gKiBCYXNpYyBzZXQuIE1vcmUgaWNvbnMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgYGljb24vc3JjL2ltYWdlc2AgZGlyZWN0b3J5LiBJY29ucyBjYW4gYmUgYWRkZWQgdXNpbmcgdGhlIF9taXhpbi1pY29uLmNzc1xuICogYXMgYEBtaXhpbiBpY29uIHVzZXJgLiBWaWV3IHRoZSBbSWNvbiBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcHJldmlvdXNuZXh0L21peHRhcGUvdHJlZS9tYXN0ZXIvcGFja2FnZXMvaWNvbilcbiAqIG9uIGdpdGh1Yi5cbiAqXG4gKiAuaWNvbi0tYXJyb3ctZG93biAtIEFycm93IERvd25cbiAqIC5pY29uLS1hcnJvdy1sZWZ0IC0gQXJyb3cgTGVmdFxuICogLmljb24tLWFycm93LXVwIC0gQXJyb3cgVXBcbiAqIC5pY29uLS1hcnJvdy1yaWdodCAtIEFycm93IFJpZ2h0XG4gKiAuaWNvbi0tY2hldnJvbi1kb3duIC0gQ2hldnJvbiBEb3duXG4gKiAuaWNvbi0tY2hldnJvbi1sZWZ0IC0gQ2hldnJvbiBMZWZ0XG4gKiAuaWNvbi0tY2hldnJvbi1yaWdodCAtIENoZXZyb24gUmlnaHRcbiAqIC5pY29uLS1jaGV2cm9uLXVwIC0gQ2hldnJvbiBVcFxuICogLmljb24tLWNsb3NlIC0gQ2xvc2VcbiAqIC5pY29uLS1jb2xsYXBzZSAtIENvbGxhcHNlXG4gKiAuaWNvbi0tZG93bmxvYWQgLSBEb3dubG9hZFxuICogLmljb24tLWVycm9yIC0gRXJyb3JcbiAqIC5pY29uLS1leHBhbmQgLSBFeHBhbmRcbiAqIC5pY29uLS1leHRlcm5hbC1saW5rIC0gRXh0ZXJuYWwgTGlua1xuICogLmljb24tLWZhY2Vib29rIC0gRmFjZWJvb2tcbiAqIC5pY29uLS1nb29nbGUgLSBHb29nbGVcbiAqIC5pY29uLS1pbmZvIC0gSW5mb1xuICogLmljb24tLWluc3RhZ3JhbSAtIEluc3RhZ3JhbVxuICogLmljb24tLWxpbmtlZGluIC0gTGlua2VkSW5cbiAqIC5pY29uLS1tZW51IC0gTWVudVxuICogLmljb24tLXNlYXJjaCAtIFNlYXJjaFxuICogLmljb24tLXN1Y2Nlc3MgLSBTdWNjZXNzXG4gKiAuaWNvbi0tdHdpdHRlciAtIFR3aXR0ZXJcbiAqIC5pY29uLS13YXJuaW5nIC0gV2FybmluZ1xuICogLmljb24tLXlvdXR1YmUgLSBZb3V0dWJlXG4gKlxuICogRGVmYXVsdDogZmFsc2VcbiAqXG4gKiBNYXJrdXA6IGljb24udHdpZ1xuICpcbiAqIFN0eWxlIGd1aWRlOiBiYXNlLmljb25cbiAqL1xuXG5AbGF5ZXIgZWxlbWVudHMge1xuICAuaWNvbiB7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLXNwYWNpbmcteHhzKTtcblxuICAgICY6OmJlZm9yZSB7XG4gICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICAgIGlubGluZS1zaXplOiB2YXIoLS1zcGFjaW5nLXMpO1xuICAgICAgYmxvY2stc2l6ZTogdmFyKC0tc3BhY2luZy1zKTtcbiAgICAgIG1hc2stcG9zaXRpb246IGNlbnRlcjtcbiAgICAgIG1hc2stc2l6ZTogY29udGFpbjtcbiAgICAgIG1hc2stcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjdXJyZW50Y29sb3I7XG4gICAgfVxuICB9XG5cbiAgLmljb24tLW9ubHkge1xuICAgIGlubGluZS1zaXplOiB2YXIoLS1zcGFjaW5nLXMpO1xuICAgIGJsb2NrLXNpemU6IHZhcigtLXNwYWNpbmctcyk7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG5cbiAgICAmOjpiZWZvcmUge1xuICAgICAgaW5saW5lLXNpemU6IDEwMCU7XG4gICAgICBibG9jay1zaXplOiAxMDAlO1xuICAgICAgbWFzay1zaXplOiB2YXIoLS1zcGFjaW5nLXMpO1xuICAgIH1cbiAgfVxuXG4gIEBtaXhpbiBpY29uIGFycm93LWRvd247XG4gIEBtaXhpbiBpY29uIGFycm93LWxlZnQ7XG4gIEBtaXhpbiBpY29uIGFycm93LXVwO1xuICBAbWl4aW4gaWNvbiBhcnJvdy1yaWdodDtcbiAgQG1peGluIGljb24gY2hldnJvbi1kb3duO1xuICBAbWl4aW4gaWNvbiBjaGV2cm9uLWxlZnQ7XG4gIEBtaXhpbiBpY29uIGNoZXZyb24tcmlnaHQ7XG4gIEBtaXhpbiBpY29uIGNoZXZyb24tdXA7XG4gIEBtaXhpbiBpY29uIGNsb3NlO1xuICBAbWl4aW4gaWNvbiBjb2xsYXBzZTtcbiAgQG1peGluIGljb24gZG93bmxvYWQ7XG4gIEBtaXhpbiBpY29uIGRydXBhbDtcbiAgQG1peGluIGljb24gZXJyb3I7XG4gIEBtaXhpbiBpY29uIGV4cGFuZDtcbiAgQG1peGluIGljb24gZXh0ZXJuYWwtbGluaztcbiAgQG1peGluIGljb24gZmFjZWJvb2s7XG4gIEBtaXhpbiBpY29uIGdvb2dsZTtcbiAgQG1peGluIGljb24gaW5mbztcbiAgQG1peGluIGljb24gaW5zdGFncmFtO1xuICBAbWl4aW4gaWNvbiBsaW5rZWRpbjtcbiAgQG1peGluIGljb24gbWVudTtcbiAgQG1peGluIGljb24gc2VhcmNoO1xuICBAbWl4aW4gaWNvbiBzdWNjZXNzO1xuICBAbWl4aW4gaWNvbiB0d2l0dGVyO1xuICBAbWl4aW4gaWNvbiB3YXJuaW5nO1xuICBAbWl4aW4gaWNvbiB5b3V0dWJlO1xuXG4gIC5pY29uLS1zdGF0dXM6OmJlZm9yZSB7XG4gICAgbWFzay1pbWFnZTogc3ZnLWxvYWQoXCIuL2ltYWdlcy9pbmZvLnN2Z1wiKTtcbiAgfVxufVxuXG4vKipcbiAqIEljb24gLSBDb2xvdXJzXG4gKlxuICogUHJpbWFyeSwgU2Vjb25kYXJ5IGFuZCBXaGl0ZSBjb2xvciBpY29ucyBjYW4gYmUgY3JlYXRlZCBieSBhZGRpbmcgLmljb24tLXByaW1hcnksIC5pY29uLS1zZWNvbmRhcnkgb3IgLmljb24tLXdoaXRlXG4gKlxuICogLmljb24tLWZhY2Vib29rLmljb24tLXByaW1hcnkgLSBGYWNlYm9vayBQcmltYXJ5XG4gKiAuaWNvbi0tZ29vZ2xlLmljb24tLXByaW1hcnkgLSBHb29nbGUgUHJpbWFyeVxuICogLmljb24tLWluc3RhZ3JhbS5pY29uLS1wcmltYXJ5IC0gSW5zdGFncmFtIFByaW1hcnlcbiAqIC5pY29uLS1saW5rZWRpbi5pY29uLS1wcmltYXJ5IC0gTGlua2VkSW4gUHJpbWFyeVxuICogLmljb24tLXR3aXR0ZXIuaWNvbi0tcHJpbWFyeSAtIFR3aXR0ZXIgUHJpbWFyeVxuICogLmljb24tLXlvdXR1YmUuaWNvbi0tcHJpbWFyeSAtIFlvdXR1YmUgUHJpbWFyeVxuICogLmljb24tLWZhY2Vib29rLmljb24tLXNlY29uZGFyeSAtIEZhY2Vib29rIFNlY29uZGFyeVxuICogLmljb24tLWdvb2dsZS5pY29uLS1zZWNvbmRhcnkgLSBHb29nbGUgU2Vjb25kYXJ5XG4gKiAuaWNvbi0taW5zdGFncmFtLmljb24tLXNlY29uZGFyeSAtIEluc3RhZ3JhbSBTZWNvbmRhcnlcbiAqIC5pY29uLS1saW5rZWRpbi5pY29uLS1zZWNvbmRhcnkgLSBMaW5rZWRJbiBTZWNvbmRhcnlcbiAqIC5pY29uLS10d2l0dGVyLmljb24tLXNlY29uZGFyeSAtIFR3aXR0ZXIgU2Vjb25kYXJ5XG4gKiAuaWNvbi0teW91dHViZS5pY29uLS1zZWNvbmRhcnkgLSBZb3V0dWJlIFNlY29uZGFyeVxuICogLmljb24tLWZhY2Vib29rLmljb24tLXdoaXRlIC0gRmFjZWJvb2sgV2hpdGVcbiAqIC5pY29uLS1nb29nbGUuaWNvbi0td2hpdGUgLSBHb29nbGUgV2hpdGVcbiAqIC5pY29uLS1pbnN0YWdyYW0uaWNvbi0td2hpdGUgLSBJbnN0YWdyYW0gV2hpdGVcbiAqIC5pY29uLS1saW5rZWRpbi5pY29uLS13aGl0ZSAtIExpbmtlZEluIFdoaXRlXG4gKiAuaWNvbi0tdHdpdHRlci5pY29uLS13aGl0ZSAtIFR3aXR0ZXIgV2hpdGVcbiAqIC5pY29uLS15b3V0dWJlLmljb24tLXdoaXRlIC0gWW91dHViZSBXaGl0ZVxuICpcbiAqIERlZmF1bHQ6IGZhbHNlXG4gKlxuICogTWFya3VwOiBpY29uLnR3aWdcbiAqXG4gKiBTdHlsZSBndWlkZTogYmFzZS5pY29uLmNvbG91cnNcbiAqL1xuXG5AbGF5ZXIgZWxlbWVudHMge1xuICAuaWNvbi0tcHJpbWFyeTo6YmVmb3JlIHtcbiAgICBjb2xvcjogdmFyKC0tY29sb3VyLXByaW1hcnkpO1xuICB9XG5cbiAgLmljb24tLXNlY29uZGFyeTo6YmVmb3JlIHtcbiAgICBjb2xvcjogdmFyKC0tY29sb3VyLXNlY29uZGFyeSk7XG4gIH1cblxuICAuaWNvbi0td2hpdGU6OmJlZm9yZSB7XG4gICAgY29sb3I6IHZhcigtLWNvbG91ci1mb3JlZ3JvdW5kLXJldmVyc2UpO1xuICB9XG59XG5cbi8qKlxuICogVGV4dCBpY29uXG4gKlxuICogQSBwaWVjZSBvZiB0ZXh0IG9yIGxpbmsgd2l0aCBhbiBpY29uLlxuICpcbiAqIC5pY29uLS1lbmQgLSBSaWdodCBhbGlnbmVkIGljb25cbiAqXG4gKiBNYXJrdXA6IHRleHQtaWNvbi50d2lnXG4gKlxuICogU3R5bGVndWlkZTogYmFzZS5pY29uLnRleHRcbiAqL1xuXG5AbGF5ZXIgZWxlbWVudHMge1xuICAuaWNvbi5pY29uLS1lbmQ6OmJlZm9yZSB7XG4gICAgb3JkZXI6IDI7XG4gIH1cbn1cbiIsIkBkZWZpbmUtbWl4aW4gaWNvbiAkbmFtZSB7XG4gIC5pY29uLS0kKG5hbWUpOjpiZWZvcmUge1xuICAgIG1hc2staW1hZ2U6IHN2Zy1sb2FkKFwiLi9pbWFnZXMvJChuYW1lKS5zdmdcIik7XG4gIH1cbn1cbiIsIkBpbXBvcnQgdXJsKFwiX21peGluLWljb24uY3NzXCIpO1xuXG4vKipcbiAqIEljb24gLSBFeHRlbmRlZFxuICpcbiAqIEV4dGVuZGVkIHNldC4gVmlldyB0aGUgW0ljb24gcGFja2FnZV0oaHR0cHM6Ly9naXRodWIuY29tL3ByZXZpb3VzbmV4dC9taXh0YXBlL3RyZWUvbWFzdGVyL3BhY2thZ2VzL2ljb24pIG9uIGdpdGh1Yi5cbiAqXG4gKiAuaWNvbi0tYXR0YWNobWVudCAtIEF0dGFjaG1lbnRcbiAqIC5pY29uLS1ibG9ja3F1b3RlIC0gQmxvY2txdW90ZVxuICogLmljb24tLWJ1aWxkaW5nIC0gQnVpbGRpbmdcbiAqIC5pY29uLS1jYWxlbmRhciAtIENhbGVuZGFyXG4gKiAuaWNvbi0tY2xvY2sgLSBDbG9ja1xuICogLmljb24tLWVtYWlsIC0gRW1haWxcbiAqIC5pY29uLS1maWxlIC0gRmlsZVxuICogLmljb24tLWdsb2JlIC0gR2xvYmVcbiAqIC5pY29uLS1oZWFydC1zZWxlY3RlZCAtIEhlYXJ0IFNlbGVjdGVkXG4gKiAuaWNvbi0taGVhcnQtdW5zZWxlY3RlZCAtIEhlYXJ0IFVuc2VsZWN0ZWRcbiAqIC5pY29uLS1pbWFnZSAtIEltYWdlXG4gKiAuaWNvbi0taG9tZSAtIEhvbWVcbiAqIC5pY29uLS1saW5rIC0gTGlua1xuICogLmljb24tLWxvY2sgLSBMb2NrXG4gKiAuaWNvbi0tbG9naW4gLSBMb2dpblxuICogLmljb24tLW1lZGlhLXBsYXkgLSBNZWRpYSBwbGF5XG4gKiAuaWNvbi0tbWVkaWEtcGF1c2UgLSBNZWRpYSBwYXVzZVxuICogLmljb24tLW1lZGlhLXN0b3AgLSBNZWRpYSBzdG9wXG4gKiAuaWNvbi0tbWVkaWEtbmV4dCAtIE1lZGlhIG5leHRcbiAqIC5pY29uLS1tZWRpYS1wcmV2aW91cyAtIE1lZGlhIHByZXZpb3VzXG4gKiAuaWNvbi0tbWVkaWEtcmV3aW5kIC0gTWVkaWEgcmV3aW5kXG4gKiAuaWNvbi0tbWVkaWEtc2tpcCAtIE1lZGlhIHNraXBcbiAqIC5pY29uLS1tb3JlIC0gTW9yZVxuICogLmljb24tLW5vdGlmaWNhdGlvbiAtIE5vdGlmaWNhdGlvblxuICogLmljb24tLXBlbmNpbCAtIFBlbmNpbFxuICogLmljb24tLXBob25lIC0gUGhvbmVcbiAqIC5pY29uLS1waW4gLSBQaW5cbiAqIC5pY29uLS1wcmludCAtIFByaW50XG4gKiAuaWNvbi0tcXVlc3Rpb24gLSBRdWVzdGlvblxuICogLmljb24tLXJlc3RhcnQgLSBSZXN0YXJ0XG4gKiAuaWNvbi0tc2V0dGluZ3MgLSBTZXR0aW5nc1xuICogLmljb24tLXNoYXJlIC0gU2hhcmVcbiAqIC5pY29uLS1zdGFyLXNlbGVjdGVkIC0gU3RhciBTZWxlY3RlZFxuICogLmljb24tLXN0YXItdW5zZWxlY3RlZCAtIFN0YXIgVW5zZWxlY3RlZFxuICogLmljb24tLXRpY2sgLSBUaWNrXG4gKiAuaWNvbi0tdHJhc2ggLSBUcmFzaFxuICogLmljb24tLXVzZXIgLSBVc2VyXG4gKiAuaWNvbi0tdmlkZW8gLSBWaWRlb1xuICpcbiAqIERlZmF1bHQ6IGZhbHNlXG4gKlxuICogTWFya3VwOiBpY29uLnR3aWdcbiAqXG4gKiBTdHlsZSBndWlkZTogYmFzZS5pY29uLmV4dGVuZGVkXG4gKi9cbkBsYXllciBlbGVtZW50cyB7XG4gIEBtaXhpbiBpY29uIGF0dGFjaG1lbnQ7XG4gIEBtaXhpbiBpY29uIGJsb2NrcXVvdGU7XG4gIEBtaXhpbiBpY29uIGJ1aWxkaW5nO1xuICBAbWl4aW4gaWNvbiBjYWxlbmRhcjtcbiAgQG1peGluIGljb24gY2xvY2s7XG4gIEBtaXhpbiBpY29uIGVtYWlsO1xuICBAbWl4aW4gaWNvbiBmaWxlO1xuICBAbWl4aW4gaWNvbiBnbG9iZTtcbiAgQG1peGluIGljb24gaGVhcnQtc2VsZWN0ZWQ7XG4gIEBtaXhpbiBpY29uIGhlYXJ0LXVuc2VsZWN0ZWQ7XG4gIEBtaXhpbiBpY29uIGltYWdlO1xuICBAbWl4aW4gaWNvbiBob21lO1xuICBAbWl4aW4gaWNvbiBsaW5rO1xuICBAbWl4aW4gaWNvbiBsb2NrO1xuICBAbWl4aW4gaWNvbiBsb2dpbjtcbiAgQG1peGluIGljb24gbWVkaWEtcGxheTtcbiAgQG1peGluIGljb24gbWVkaWEtcGF1c2U7XG4gIEBtaXhpbiBpY29uIG1lZGlhLXN0b3A7XG4gIEBtaXhpbiBpY29uIG1lZGlhLW5leHQ7XG4gIEBtaXhpbiBpY29uIG1lZGlhLXByZXZpb3VzO1xuICBAbWl4aW4gaWNvbiBtZWRpYS1yZXdpbmQ7XG4gIEBtaXhpbiBpY29uIG1lZGlhLXNraXA7XG4gIEBtaXhpbiBpY29uIG1vcmU7XG4gIEBtaXhpbiBpY29uIG5vdGlmaWNhdGlvbjtcbiAgQG1peGluIGljb24gcGVuY2lsO1xuICBAbWl4aW4gaWNvbiBwaG9uZTtcbiAgQG1peGluIGljb24gcGluO1xuICBAbWl4aW4gaWNvbiBwcmludDtcbiAgQG1peGluIGljb24gcXVlc3Rpb247XG4gIEBtaXhpbiBpY29uIHJlc3RhcnQ7XG4gIEBtaXhpbiBpY29uIHNldHRpbmdzO1xuICBAbWl4aW4gaWNvbiBzaGFyZTtcbiAgQG1peGluIGljb24gc3Rhci1zZWxlY3RlZDtcbiAgQG1peGluIGljb24gc3Rhci11bnNlbGVjdGVkO1xuICBAbWl4aW4gaWNvbiB0aWNrO1xuICBAbWl4aW4gaWNvbiB0cmFzaDtcbiAgQG1peGluIGljb24gdXNlcjtcbiAgQG1peGluIGljb24gdmlkZW87XG59XG4iLCIvKipcbiAqIEZvcm1cbiAqXG4gKiBTdHlsZSBndWlkZTogZm9ybVxuICovXG5cbkBsYXllciBlbGVtZW50cyB7XG4gIC5mb3JtX19pdGVtIHtcbiAgICBtYXgtaW5saW5lLXNpemU6IHZhcigtLWNvbnRhaW5lci1tYXgtd2lkdGgpO1xuXG4gICAgJi5mb3JtX19pdGVtLS1pbmxpbmUge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRleHQgSW5wdXRcbiAqXG4gKiBUZXh0IElucHV0IGlzIGRlZmluZWQgaW4gdGhlIGZvcm0gcGFja2FnZS4gVmlldyB0aGUgW0Zvcm0gcGFja2FnZV0oaHR0cHM6Ly9naXRodWIuY29tL3ByZXZpb3VzbmV4dC9taXh0YXBlL3RyZWUvbWFzdGVyL3BhY2thZ2VzL2Zvcm0pIG9uIGdpdGh1Yi5cbiAqXG4gKiAuZXJyb3IgLSBFcnJvciBzdGF0ZVxuICogLnN1Y2Nlc3MgLSBTdWNjZXNzIHN0YXRlXG4gKiAuaW5wdXQtLXdpZGUgLSBBIHdpZGUgdmFyaWFudCBvZiB0aGUgaW5wdXQgZmllbGQuXG4gKiAuaW5wdXQtLXNtYWxsIC0gQSBzbWFsbGVyIHZhcmlhbnQgb2YgdGhlIGlucHV0IGZpZWxkLlxuICpcbiAqIE1hcmt1cDogaW5wdXQtdGV4dC50d2lnXG4gKlxuICogU3R5bGUgZ3VpZGU6IGZvcm0udGV4dC1pbnB1dFxuICovXG5cbkBsYXllciBlbGVtZW50cyB7XG4gIDp3aGVyZShcbiAgICAgIDppcyhcbiAgICAgICAgICAuaW5wdXRfX3RleHQsXG4gICAgICAgICAgW3R5cGU9XCJ0ZXh0XCJdLFxuICAgICAgICAgIFt0eXBlPVwic2VhcmNoXCJdLFxuICAgICAgICAgIFt0eXBlPVwidGVsXCJdLFxuICAgICAgICAgIFt0eXBlPVwidXJsXCJdLFxuICAgICAgICAgIFt0eXBlPVwiZW1haWxcIl0sXG4gICAgICAgICAgW3R5cGU9XCJwYXNzd29yZFwiXSxcbiAgICAgICAgICBbdHlwZT1cImRhdGVcIl0sXG4gICAgICAgICAgW3R5cGU9XCJ0aW1lXCJdLFxuICAgICAgICAgIFt0eXBlPVwibnVtYmVyXCJdLFxuICAgICAgICAgIHNlbGVjdCxcbiAgICAgICAgICB0ZXh0YXJlYVxuICAgICAgICApXG4gICAgKSB7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICBmb250OiBpbmhlcml0O1xuICAgIGxldHRlci1zcGFjaW5nOiBpbmhlcml0O1xuICAgIHdvcmQtc3BhY2luZzogaW5oZXJpdDtcbiAgICBtYXgtaW5saW5lLXNpemU6IDEwMCU7XG4gICAgcGFkZGluZy1ibG9jazogY2FsYyh2YXIoLS1mb3JtLXNwYWNpbmcpIC0gKHZhcigtLWZvcm0tYm9yZGVyLXdpZHRoKSAqIDIpKTtcbiAgICBwYWRkaW5nLWlubGluZTogdmFyKC0tZm9ybS1zcGFjaW5nKTtcbiAgICBib3JkZXI6IHZhcigtLWZvcm0tYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jb2xvdXItYm9yZGVyKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvdXItYmFja2dyb3VuZCk7XG4gICAgY29sb3I6IHZhcigtLWNvbG91ci1mb3JlZ3JvdW5kKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtdWkpO1xuICAgIGJsb2NrLXNpemU6IHZhcigtLWZvcm0tZWxlbWVudC1oZWlnaHQpO1xuXG4gICAgJjpmb2N1cy12aXNpYmxlIHtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tb3V0bGluZS1jb2xvcik7XG4gICAgICBvdXRsaW5lOiBub25lO1xuICAgIH1cblxuICAgICY6OnBsYWNlaG9sZGVyIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvdXItZm9yZWdyb3VuZC1hbHQpO1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG5cbiAgICAmW2Rpc2FibGVkXSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvdXItYmFja2dyb3VuZC1hbHQpO1xuICAgICAgY29sb3I6IHZhcigtLWNvbG91ci1mb3JlZ3JvdW5kLWFsdCk7XG4gICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgIH1cblxuICAgICYuZXJyb3I6d2hlcmUoOm5vdCg6Zm9jdXMtdmlzaWJsZSkpIHtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3VyLWVycm9yLWZvcmVncm91bmQpO1xuICAgIH1cblxuICAgICYuc3VjY2Vzczp3aGVyZSg6bm90KDpmb2N1cy12aXNpYmxlKSkge1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvdXItc3VjY2Vzcy1mb3JlZ3JvdW5kKTtcbiAgICB9XG4gIH1cblxuICA6aXMoLmlucHV0LS1zbWFsbCwgLnNlbGVjdC0tc21hbGwpIHtcbiAgICBtaW4taW5saW5lLXNpemU6IDA7XG4gICAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIH1cblxuICA6aXMoLmlucHV0LS13aWRlLCAuc2VsZWN0LS13aWRlKSB7XG4gICAgaW5saW5lLXNpemU6IDEwMCU7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnB1dCBEaXZpZGVyXG4gKlxuICogRGl2aWRpbmcgZWxlbWVudCBiZXR3ZWVuIGlubGluZSBmb3JtIGZpZWxkcy4gVmlldyB0aGUgW0Zvcm0gcGFja2FnZV0oaHR0cHM6Ly9naXRodWIuY29tL3ByZXZpb3VzbmV4dC9taXh0YXBlL3RyZWUvbWFzdGVyL3BhY2thZ2VzL2Zvcm0pIG9uIGdpdGh1Yi5cbiAqXG4gKiBNYXJrdXA6IGlucHV0LWRpdmlkZXIudHdpZ1xuICpcbiAqIFN0eWxlIGd1aWRlOiBmb3JtLnRleHQtaW5wdXQuZGl2aWRlclxuICovXG5cbkBsYXllciBlbGVtZW50cyB7XG4gIC5pbnB1dF9fZGl2aWRlciB7XG4gICAgcGFkZGluZzogdmFyKC0tZm9ybS1zcGFjaW5nKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQtdWkpO1xuICB9XG59XG5cbi8qKlxuICogVGV4dCBJbnB1dCB3aXRoIEljb25cbiAqXG4gKiBUZXh0IElucHV0IHdpdGggSWNvbiBpcyBkZWZpbmVkIGluIHRoZSBmb3JtIHBhY2thZ2UuIFZpZXcgdGhlIFtGb3JtIHBhY2thZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9wcmV2aW91c25leHQvbWl4dGFwZS90cmVlL21hc3Rlci9wYWNrYWdlcy9mb3JtKSBvbiBnaXRodWIuXG4gKlxuICogLmVycm9yIC0gRXJyb3Igc3RhdGVcbiAqIC5zdWNjZXNzIC0gU3VjY2VzcyBzdGF0ZVxuICpcbiAqIE1hcmt1cDogaW5wdXQtdGV4dC1pY29uLnR3aWdcbiAqXG4gKiBTdHlsZSBndWlkZTogZm9ybS50ZXh0LWlucHV0Lmljb25cbiAqL1xuXG5AbGF5ZXIgZWxlbWVudHMge1xuICAuaW5wdXRfX3RleHQtLWljb24ge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBtYXgtaW5saW5lLXNpemU6IDEwMCU7XG4gICAgbWluLWlubGluZS1zaXplOiAxMDAlO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG91ci1iYWNrZ3JvdW5kKTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAmOjpiZWZvcmUge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgIGluc2V0LWJsb2NrLXN0YXJ0OiAwO1xuICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiB2YXIoLS1mb3JtLXNwYWNpbmcpO1xuICAgIH1cblxuICAgICYgaW5wdXQge1xuICAgICAgaW5saW5lLXNpemU6IDEwMCU7XG4gICAgICBwYWRkaW5nLWlubGluZS1zdGFydDogY2FsYyh2YXIoLS1mb3JtLXNwYWNpbmcpICogMi41KTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRleHQgSW5wdXQgd2l0aCBJbmxpbmUgQnV0dG9uXG4gKlxuICogVGV4dCBJbnB1dCB3aXRoIElubGluZSBCdXR0b24gaXMgZGVmaW5lZCBpbiB0aGUgZm9ybSBwYWNrYWdlLiBWaWV3IHRoZSBbRm9ybSBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcHJldmlvdXNuZXh0L21peHRhcGUvdHJlZS9tYXN0ZXIvcGFja2FnZXMvZm9ybSkgb24gZ2l0aHViLlxuICpcbiAqIE1hcmt1cDogaW5wdXQtdGV4dC1pbmxpbmUtc3VibWl0LnR3aWdcbiAqXG4gKiBTdHlsZSBndWlkZTogZm9ybS50ZXh0LWlucHV0LmlubGluZS1zdWJtaXRcbiAqL1xuXG5AbGF5ZXIgZWxlbWVudHMge1xuICAuaW5wdXRfX3RleHQtLWlubGluZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBtYXgtaW5saW5lLXNpemU6IDEwMCU7XG4gICAgbWluLWlubGluZS1zaXplOiAxMDAlO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG91ci1iYWNrZ3JvdW5kKTtcblxuICAgICYgW3R5cGU9XCJ0ZXh0XCJdIHtcbiAgICAgIGlubGluZS1zaXplOiAxMDAlO1xuICAgICAgcGFkZGluZy1pbmxpbmUtZW5kOiA3cmVtO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgfVxuXG4gICAgJiBbdHlwZT1cInN1Ym1pdFwiXSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBpbnNldC1ibG9jay1zdGFydDogdmFyKC0tc3BhY2luZy14eHh4cyk7XG4gICAgICBpbnNldC1pbmxpbmUtZW5kOiB2YXIoLS1zcGFjaW5nLXh4eHhzKTtcbiAgICAgIGJvcmRlcjogMDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICAgIGJsb2NrLXNpemU6IGNhbGModmFyKC0tZm9ybS1lbGVtZW50LWhlaWdodCkgLSB2YXIoLS1zcGFjaW5nLXh4eHMpKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBMYWJlbFxuICpcbiAqIExhYmVsIGlzIGRlZmluZWQgaW4gdGhlIGZvcm0gcGFja2FnZS4gVmlldyB0aGUgW0Zvcm0gcGFja2FnZV0oaHR0cHM6Ly9naXRodWIuY29tL3ByZXZpb3VzbmV4dC9taXh0YXBlL3RyZWUvbWFzdGVyL3BhY2thZ2VzL2Zvcm0pIG9uIGdpdGh1Yi5cbiAqIFRoZSBmb3JtIGBsYWJlbGAgZWxlbWVudCBtdXN0IGJlIHByZXNlbnQgZm9yIGFsbCBmb3JtIGVsZW1lbnRzLCBhbmQgaGF2ZSBhIGBmb3JgIGF0dHJpYnV0ZSB0aGF0IG1hdGNoZXMgdGhlIGBpZGAgb2YgdGhlXG4gKiBhc3NvY2lhdGVkIGZvcm0gZWxlbWVudC5cbiAqXG4gKiAubGFiZWwtLWlubGluZSAtIElubGluZSBsYWJlbC5cbiAqXG4gKiBNYXJrdXA6IGxhYmVsLnR3aWdcbiAqXG4gKiBTdHlsZSBndWlkZTogZm9ybS5sYWJlbFxuICovXG5cbkBsYXllciBlbGVtZW50cyB7XG4gIDppcyhsYWJlbCwgbGVnZW5kKSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luLWJsb2NrLWVuZDogdmFyKC0tc3BhY2luZy14eHhzKTtcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZSk7XG4gICAgY29sb3I6IHZhcigtLWNvbG91ci1mb3JlZ3JvdW5kKTtcblxuICAgICYubGFiZWwtLWlubGluZSB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBtYXJnaW4tYmxvY2stZW5kOiAwO1xuICAgICAgbWFyZ2luLWlubGluZS1lbmQ6IHZhcigtLXNwYWNpbmcteHhzKTtcbiAgICB9XG4gIH1cblxuICBbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICAgIGFwcGVhcmFuY2U6IG5vbmU7XG4gICAgaW5saW5lLXNpemU6IHZhcigtLWNvbnRyb2wtc2l6ZSk7XG4gICAgYmxvY2stc2l6ZTogdmFyKC0tY29udHJvbC1zaXplKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvdXItYmFja2dyb3VuZCk7XG4gICAgYm9yZGVyOiB2YXIoLS1mb3JtLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY29sb3VyLWJvcmRlcik7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7XG5cbiAgICBAbWVkaWEgKHBvaW50ZXI6IGNvYXJzZSkge1xuICAgICAgLS1jb250cm9sLXNpemU6IDJyZW07XG4gICAgfVxuXG4gICAgJjpjaGVja2VkIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHN2Zy1sb2FkKFwiLi9pbWFnZXMvY2hlY2ttYXJrLnN2Z1wiKTtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMC43NXJlbTtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcbiAgICB9XG5cbiAgICAmOmZvY3VzLXZpc2libGUge1xuICAgICAgb3V0bGluZTogdmFyKC0tZm9ybS1ib3JkZXItd2lkdGgpIGF1dG8gdmFyKC0tb3V0bGluZS1jb2xvcik7XG4gICAgICBvdXRsaW5lLW9mZnNldDogMDtcbiAgICB9XG5cbiAgICAmW2Rpc2FibGVkXSB7XG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG91ci1iYWNrZ3JvdW5kLWFsdCk7XG4gICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBpbmxpbmUtc2l6ZTogMTAwJTtcbiAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7XG4gICAgICB9XG5cbiAgICAgICYgKyBsYWJlbCB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1jb2xvdXItZm9yZWdyb3VuZC1hbHQpO1xuICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgICAgfVxuICAgIH1cblxuICAgICYuZXJyb3I6d2hlcmUoOm5vdCg6Zm9jdXMtdmlzaWJsZSkpIHtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3VyLWVycm9yLWZvcmVncm91bmQpO1xuICAgIH1cblxuICAgICYuc3VjY2Vzczp3aGVyZSg6bm90KDpmb2N1cy12aXNpYmxlKSkge1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvdXItc3VjY2Vzcy1mb3JlZ3JvdW5kKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja2JveGVzXG4gKlxuICogQ2hlY2tib3hlcyBhcmUgZGVmaW5lZCBpbiB0aGUgZm9ybSBwYWNrYWdlLiBWaWV3IHRoZSBbRm9ybSBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcHJldmlvdXNuZXh0L21peHRhcGUvdHJlZS9tYXN0ZXIvcGFja2FnZXMvZm9ybSkgb24gZ2l0aHViLlxuICogVGhlIHN0YW5kYXJkIGBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl1gIGVsZW1lbnQsIHVzaW5nIGEgZmllbGRzZXQgYW5kIGxlZ2VuZCBhc1xuICogdGhlIGFjY2Vzc2libGUgd2F5IHRvIGdyb3VwIGFuZCBsYWJlbCBtdWx0aXBsZSBjaGVja2JveCBpbnB1dHMuXG4gKlxuICogT3B0aW9uYWxseSBhIHRvb2x0aXAgY2FuIGJlIHVzZWQgYnkgdXNpbmcgdGhlIGBhcmlhLWRlc2NyaWJlZGJ5YCBhdHRyaWJ1dGVcbiAqIG9uIHRoZSBmaWVsZHNldCBpdHNlbGYuXG4gKlxuICogLmZvcm1fX2l0ZW0tLWlubGluZSAtIElubGluZSBjaGVja2JveGVzXG4gKlxuICogTWFya3VwOiBpbnB1dC1jaGVja2JveC50d2lnXG4gKlxuICogU3R5bGUgZ3VpZGU6IGZvcm0uY2hlY2tib3hcbiAqL1xuXG4vKipcbiAqIFJhZGlvc1xuICpcbiAqIFJhZGlvcyBhcmUgZGVmaW5lZCBpbiB0aGUgZm9ybSBwYWNrYWdlLiBWaWV3IHRoZSBbRm9ybSBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcHJldmlvdXNuZXh0L21peHRhcGUvdHJlZS9tYXN0ZXIvcGFja2FnZXMvZm9ybSkgb24gZ2l0aHViLlxuICogVGhlIHN0YW5kYXJkIGBpbnB1dFt0eXBlPVwicmFkaW9cIl1gIGVsZW1lbnQsIHVzaW5nIGEgZmllbGRzZXQgYW5kIGxlZ2VuZCBhc1xuICogdGhlIGFjY2Vzc2libGUgd2F5IHRvIGdyb3VwIGFuZCBsYWJlbCBtdWx0aXBsZSByYWRpbyBpbnB1dHMuXG4gKlxuICogT3B0aW9uYWxseSBhIHRvb2x0aXAgY2FuIGJlIHVzZWQgYnkgdXNpbmcgdGhlIGBhcmlhLWRlc2NyaWJlZGJ5YCBhdHRyaWJ1dGVcbiAqIG9uIHRoZSBmaWVsZHNldCBpdHNlbGYuXG4gKlxuICogLmZvcm1fX2l0ZW0tLWlubGluZSAtIElubGluZSByYWRpb3NcbiAqXG4gKiBNYXJrdXA6IGlucHV0LXJhZGlvLnR3aWdcbiAqXG4gKiBTdHlsZSBndWlkZTogZm9ybS5yYWRpb3NcbiAqL1xuXG5AbGF5ZXIgZWxlbWVudHMge1xuICBbdHlwZT1cInJhZGlvXCJdIHtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICAgIGFwcGVhcmFuY2U6IG5vbmU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBpbmxpbmUtc2l6ZTogdmFyKC0tY29udHJvbC1zaXplKTtcbiAgICBibG9jay1zaXplOiB2YXIoLS1jb250cm9sLXNpemUpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG91ci1iYWNrZ3JvdW5kKTtcbiAgICBib3JkZXI6IHZhcigtLWZvcm0tYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jb2xvdXItYm9yZGVyKTtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG5cbiAgICBAbWVkaWEgKHBvaW50ZXI6IGNvYXJzZSkge1xuICAgICAgLS1jb250cm9sLXNpemU6IDJyZW07XG4gICAgfVxuXG4gICAgJjpjaGVja2VkIHtcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgY29udGVudDogXCJcIjtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGlubGluZS1zaXplOiAwLjVyZW07XG4gICAgICAgIGJsb2NrLXNpemU6IDAuNXJlbTtcbiAgICAgICAgbWFyZ2luOiBhdXRvO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG91ci1wcmltYXJ5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOmZvY3VzLXZpc2libGUge1xuICAgICAgb3V0bGluZTogdmFyKC0tZm9ybS1ib3JkZXItd2lkdGgpIGF1dG8gdmFyKC0tb3V0bGluZS1jb2xvcik7XG4gICAgICBvdXRsaW5lLW9mZnNldDogMDtcbiAgICB9XG5cbiAgICAmW2Rpc2FibGVkXSB7XG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG91ci1iYWNrZ3JvdW5kLWFsdCk7XG4gICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBpbmxpbmUtc2l6ZTogMTAwJTtcbiAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgfVxuXG4gICAgICAmICsgbGFiZWwge1xuICAgICAgICBjb2xvcjogdmFyKC0tY29sb3VyLWZvcmVncm91bmQtYWx0KTtcbiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLmVycm9yOndoZXJlKDpub3QoOmZvY3VzLXZpc2libGUpKSB7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbG91ci1lcnJvci1mb3JlZ3JvdW5kKTtcbiAgICB9XG5cbiAgICAmLnN1Y2Nlc3M6d2hlcmUoOm5vdCg6Zm9jdXMtdmlzaWJsZSkpIHtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3VyLXN1Y2Nlc3MtZm9yZWdyb3VuZCk7XG4gICAgfVxuICB9XG5cbiAgOmlzKC5mb3JtX19yYWRpbywgLmZvcm1fX2NoZWNrYm94KSB7XG4gICAgLS1jb250cm9sLXNpemU6IHZhcigtLXNwYWNpbmctbSk7XG5cbiAgICBtYXJnaW4tYmxvY2stZW5kOiB2YXIoLS1zcGFjaW5nLXh4eHMpO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLXNwYWNpbmcteHhzKTtcblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tYmxvY2stZW5kOiAwO1xuICAgIH1cblxuICAgICYgbGFiZWwge1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgbWFyZ2luOiAwO1xuICAgIH1cblxuICAgICYgaW5wdXQge1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgfVxuXG4gICAgJi5mb3JtX19pdGVtLS1pbmxpbmUge1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBtYXJnaW4taW5saW5lLWVuZDogdmFyKC0tc3BhY2luZy14eHMpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRleHRhcmVhXG4gKlxuICogVGV4dGFyZWEgaXMgZGVmaW5lZCBpbiB0aGUgZm9ybSBwYWNrYWdlLiBWaWV3IHRoZSBbRm9ybSBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcHJldmlvdXNuZXh0L21peHRhcGUvdHJlZS9tYXN0ZXIvcGFja2FnZXMvZm9ybSkgb24gZ2l0aHViLlxuICogQSB0ZXh0YXJlYSBmaWVsZCBpcyB1c2VkIGZvciBtdWx0aXBsZSBsaW5lcyBvZiB0ZXh0IGlucHV0LlxuICpcbiAqIE1hcmt1cDogdGV4dGFyZWEudHdpZ1xuICpcbiAqIFN0eWxlIGd1aWRlOiBmb3JtLnRleHRhcmVhXG4gKi9cblxuQGxheWVyIGVsZW1lbnRzIHtcbiAgdGV4dGFyZWEge1xuICAgIGJsb2NrLXNpemU6IGNhbGMoNCAqIHZhcigtLWZvcm0tZWxlbWVudC1oZWlnaHQpKTtcbiAgICBpbmxpbmUtc2l6ZTogMTAwJTtcbiAgfVxufVxuXG4vKipcbiAqIEZpZWxkc2V0XG4gKlxuICogRmllbGRzZXQgaXMgZGVmaW5lZCBpbiB0aGUgZm9ybSBwYWNrYWdlLiBWaWV3IHRoZSBbRm9ybSBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcHJldmlvdXNuZXh0L21peHRhcGUvdHJlZS9tYXN0ZXIvcGFja2FnZXMvZm9ybSkgb24gZ2l0aHViLlxuICogVGhlIGZpZWxkc2V0IGVsZW1lbnQgaXMgdXNlZCBmb3IgZ3JvdXBpbmcgZm9ybSBlbGVtZW50cy4gU2VlIHRoZSBbQ2hlY2tib3ggKG11bHRpcGxlKV0oL3NlY3Rpb24tZm9ybS5odG1sI2tzc3JlZi1mb3JtLWNoZWNrYm94LW11bHRpcGxlKVxuICogYW5kIFtSYWRpb3MgKG11bHRpcGxlKV0oL3NlY3Rpb24tZm9ybS5odG1sI2tzc3JlZi1mb3JtLXJhZGlvcykgY29tcG9uZW50cyBmb3IgaG93IGl0IGlzIGJlc3QgdXNlZC5cbiAqXG4gKiAuZmllbGRzZXQtLXBsYWluIC0gQSBzdHJpcHBlZCBiYWNrIHZhcmlhbnQgb2YgdGhlIGZpZWxkc2V0LlxuICpcbiAqIE1hcmt1cDogZmllbGRzZXQudHdpZ1xuICpcbiAqIFN0eWxlIGd1aWRlOiBmb3JtLmZpZWxkc2V0XG4gKi9cblxuQGxheWVyIGVsZW1lbnRzIHtcbiAgOmlzKC5maWVsZHNldCwgZmllbGRzZXQpIHtcbiAgICBib3JkZXI6IHZhcigtLWZvcm0tYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jb2xvdXItYm9yZGVyKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzKTtcbiAgICBwYWRkaW5nOiB2YXIoLS1mb3JtLXNwYWNpbmcpO1xuICAgIG1pbi1pbmxpbmUtc2l6ZTogMDtcblxuICAgICYgbGVnZW5kIHtcbiAgICAgIHBhZGRpbmctYmxvY2s6IDA7XG4gICAgICBwYWRkaW5nLWlubGluZTogdmFyKC0tZm9ybS1zcGFjaW5nKTtcbiAgICB9XG4gIH1cblxuICAuZmllbGRzZXQtLXBsYWluIHtcbiAgICBib3JkZXI6IDA7XG4gICAgcGFkZGluZzogMDtcblxuICAgICYgbGVnZW5kIHtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgfVxuICB9XG5cbiAgLmZpZWxkc2V0LS1pbmxpbmUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGdhcDogdmFyKC0tc3BhY2luZy14eHMpO1xuXG4gICAgJiA6aXMoLmZvcm1fX2l0ZW0sIC5mb3JtX19pdGVtLS1pbmxpbmUpIHtcbiAgICAgIG1hcmdpbjogMDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBEZXNjcmlwdGlvblxuICpcbiAqIERlc2NyaXB0aW9uIGlzIGRlZmluZWQgaW4gdGhlIGZvcm0gcGFja2FnZS4gVmlldyB0aGUgW0Zvcm0gcGFja2FnZV0oaHR0cHM6Ly9naXRodWIuY29tL3ByZXZpb3VzbmV4dC9taXh0YXBlL3RyZWUvbWFzdGVyL3BhY2thZ2VzL2Zvcm0pIG9uIGdpdGh1Yi5cbiAqIFRleHQgdGhhdCBkZXNjcmliZXMgYSBmb3JtIGZpZWxkLiBUaGUgZm9ybSBlbGVtZW50IG11c3QgaGF2ZSBhbiBgYXJpYS1kZXNjcmliZWRieWAgYXR0cmlidXRlIHRoYXQgcG9pbnRzIHRvIHRoZVxuICogYGlkYCBvZiB0aGUgZGVzY3JpcHRpb24gdGV4dC5cbiAqXG4gKiBNYXJrdXA6IGZvcm0tZGVzY3JpcHRpb24udHdpZ1xuICpcbiAqIFN0eWxlIGd1aWRlOiBmb3JtLmRlc2NyaXB0aW9uXG4gKi9cblxuQGxheWVyIGVsZW1lbnRzIHtcbiAgLmZvcm1fX2Rlc2NyaXB0aW9uIHtcbiAgICBtYXJnaW4tYmxvY2s6IHZhcigtLWZvcm0tc3BhY2luZyk7XG4gICAgbWFyZ2luLWlubGluZTogMDtcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14cyk7XG5cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLWJsb2NrLWVuZDogMDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBFcnJvciBtZXNzYWdlXG4gKlxuICogRXJyb3IgTWVzc2FnZSBpcyBkZWZpbmVkIGluIHRoZSBmb3JtIHBhY2thZ2UuIFZpZXcgdGhlIFtGb3JtIHBhY2thZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9wcmV2aW91c25leHQvbWl4dGFwZS90cmVlL21hc3Rlci9wYWNrYWdlcy9mb3JtKSBvbiBnaXRodWIuXG4gKiBUaGUgZXJyb3Igc3RhdGUgd2l0aCBhIHJlZCBib3JkZXIgYW5kIG1lc3NhZ2UuXG4gKlxuICogTWFya3VwOiBmb3JtLWVycm9yLnR3aWdcbiAqXG4gKiBTdHlsZSBndWlkZTogZm9ybS5lcnJvclxuICovXG5cbkBsYXllciBlbGVtZW50cyB7XG4gIDppcyguZm9ybV9fc3VjY2Vzcy1tZXNzYWdlLCAuZm9ybV9fZXJyb3ItbWVzc2FnZSkge1xuICAgIG1hcmdpbi1ibG9jazogdmFyKC0tZm9ybS1zcGFjaW5nKTtcbiAgICBtYXJnaW4taW5saW5lOiAwO1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXMpO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvdXItZm9yZWdyb3VuZCk7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBnYXA6IHZhcigtLXNwYWNpbmcteHhzKTtcblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tYmxvY2stZW5kOiAwO1xuICAgIH1cblxuICAgICY6OmJlZm9yZSB7XG4gICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBpbmxpbmUtc2l6ZTogdmFyKC0tc3BhY2luZy1tKTtcbiAgICAgIGJsb2NrLXNpemU6IHZhcigtLXNwYWNpbmctbSk7XG4gICAgICBtYXNrLXBvc2l0aW9uOiBjZW50ZXI7XG4gICAgICBtYXNrLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgfVxuICB9XG5cbiAgLmZvcm1fX2Vycm9yLW1lc3NhZ2U6OmJlZm9yZSB7XG4gICAgbWFzay1pbWFnZTogc3ZnLWxvYWQoXCIuL2ltYWdlcy9mb3JtLWVycm9yLnN2Z1wiKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvdXItZXJyb3ItZm9yZWdyb3VuZCk7XG4gIH1cblxuICAuZm9ybV9fc3VjY2Vzcy1tZXNzYWdlOjpiZWZvcmUge1xuICAgIG1hc2staW1hZ2U6IHN2Zy1sb2FkKFwiLi9pbWFnZXMvZm9ybS1zdWNjZXNzLnN2Z1wiKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvdXItc3VjY2Vzcy1mb3JlZ3JvdW5kKTtcbiAgfVxufVxuXG4vKipcbiAqIFNlbGVjdFxuICpcbiAqIFNlbGVjdCBpcyBkZWZpbmVkIGluIHRoZSBmb3JtIHBhY2thZ2UuIFZpZXcgdGhlIFtGb3JtIHBhY2thZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9wcmV2aW91c25leHQvbWl4dGFwZS90cmVlL21hc3Rlci9wYWNrYWdlcy9mb3JtKSBvbiBnaXRodWIuXG4gKiBUaGUgc2VsZWN0IGZpZWxkLCB1c2VkIHRvIGNob29zZSBhIHNpbmdsZSBvcHRpb24gZnJvbSBhIGxpc3QuIElmIG11bHRpcGxlIG9wdGlvbnMgY2FuIGJlIHNlbGVjdGVkIGF0IHRoZSBzYW1lIHRpbWUsXG4gKiBjb25zaWRlciB1c2luZyB0aGUgW0NoZWNrYm94IChtdWx0aXBsZSldKC9zZWN0aW9uLWZvcm0uaHRtbCNrc3NyZWYtZm9ybS1jaGVja2JveC1tdWx0aXBsZSkgY29tcG9uZW50IGluc3RlYWQuXG4gKlxuICogLmlucHV0LS13aWRlIC0gQSB3aWRlIHZhcmlhbnQgb2YgdGhlIHNlbGVjdCBmaWVsZC5cbiAqIC5pbnB1dC0tc21hbGwgLSBBIHNtYWxsZXIgdmFyaWFudCBvZiB0aGUgc2VsZWN0IGZpZWxkLlxuICpcbiAqIE1hcmt1cDogc2VsZWN0LnR3aWdcbiAqXG4gKiBTdHlsZSBndWlkZTogZm9ybS5zZWxlY3RcbiAqL1xuXG5AbGF5ZXIgZWxlbWVudHMge1xuICBzZWxlY3Qge1xuICAgIGFwcGVhcmFuY2U6IG5vbmU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG91ci1iYWNrZ3JvdW5kKTtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBzdmctbG9hZChcIi4vaW1hZ2VzL2Zvcm0tY2hldnJvbi1kb3duLnN2Z1wiKTtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiByaWdodCB2YXIoLS1mb3JtLXNwYWNpbmcpIGNlbnRlcjtcbiAgICBwYWRkaW5nLWJsb2NrOiAwO1xuICAgIHBhZGRpbmctaW5saW5lLWVuZDogdmFyKC0tc3BhY2luZy14bCk7XG5cbiAgICAmW211bHRpcGxlXSB7XG4gICAgICBibG9jay1zaXplOiBhdXRvO1xuICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgICB9XG5cbiAgICAmLmlucHV0LS1zbWFsbCB7XG4gICAgICBwYWRkaW5nLWlubGluZS1lbmQ6IHZhcigtLXNwYWNpbmctbSk7XG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiByaWdodCB2YXIoLS1zcGFjaW5nLXhzKSBjZW50ZXI7XG4gICAgfVxuICB9XG5cbiAgOmlzKC50cmFuc2xhdGVkLXJ0bCBzZWxlY3QsIFtkaXI9XCJydGxcIl0gc2VsZWN0KSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCB2YXIoLS1zcGFjaW5nLXMpIGNlbnRlcjtcblxuICAgICYuaW5wdXQtLXNtYWxsIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgdmFyKC0tc3BhY2luZy14cykgY2VudGVyO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtIGFjdGlvbnMuXG4gICAqL1xuICAuZm9ybV9fYWN0aW9ucyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLXNwYWNpbmctcyk7XG4gIH1cbn1cbiIsIi8qKlxuICogR2xvYmFsIEhlYWRlclxuICpcbiAqIFZpZXcgdGhlIFtHbG9iYWwgcGFja2FnZV0oaHR0cHM6Ly9naXRodWIuY29tL3ByZXZpb3VzbmV4dC9taXh0YXBlL3RyZWUvbWFzdGVyL3BhY2thZ2VzL2dsb2JhbCkgb24gZ2l0aHViLlxuICpcbiAqIE1hcmt1cDogZ2xvYmFsLWhlYWRlci50d2lnXG4gKlxuICogU3R5bGUgZ3VpZGU6IEdyb3VwZWQgQ29tcG9uZW50cy5nbG9iYWwtaGVhZGVyXG4gKi9cblxuQGxheWVyIGNvbXBvbmVudHMge1xuICAuZ2xvYmFsX190b2dnbGVzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGdhcDogdmFyKC0tc3BhY2luZy14cyk7XG4gICAgcGFkZGluZy1pbmxpbmUtZW5kOiAycHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDE7XG5cbiAgICBAbWVkaWEgKC0tZ2xvYmFsLW5hdi11cCkge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG5cbiAgICAmIC5idXR0b24tLXNlY29uZGFyeSB7XG4gICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIH1cblxuICAgICYgW2hpZGRlbl0ge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAuZ2xvYmFsLW5hdi11cC1vbmx5IHtcbiAgICBAbWVkaWEgKC0tZ2xvYmFsLW5hdi1kb3duKSB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIExvZ29cbiAqXG4gKiBMb2dvIGlzIGRlZmluZWQgaW4gdGhlIEdsb2JhbCBwYWNrYWdlLiBWaWV3IHRoZSBbR2xvYmFsIHBhY2thZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9wcmV2aW91c25leHQvbWl4dGFwZS90cmVlL21hc3Rlci9wYWNrYWdlcy9nbG9iYWwpIG9uIGdpdGh1Yi5cbiAqXG4gKiBXcmFwcGVyOiBzZWN0aW9uIHNlY3Rpb24tLW1cbiAqXG4gKiBNYXJrdXA6IGxvZ28udHdpZ1xuICpcbiAqIFN0eWxlIGd1aWRlOiBFbGVtZW50cy5sb2dvXG4gKi9cblxuQG1lZGlhIHByaW50IHtcbiAgLmdsb2JhbCAuc2VjdGlvbl9fY29udGVudCB7XG4gICAgbWF4LWlubGluZS1zaXplOiAxMDAlO1xuICB9XG59XG4iLCIvKipcbiAqIFByaW1hcnkgSGVhZGVyXG4gKlxuICogVmlldyB0aGUgW0dsb2JhbCBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcHJldmlvdXNuZXh0L21peHRhcGUvdHJlZS9tYXN0ZXIvcGFja2FnZXMvZ2xvYmFsKSBvbiBnaXRodWIuXG4gKlxuICogQSBzaW1wbGUgaW5saW5lIHZlcnNpb24gb2YgdGhlIFByaW1hcnkgSGVhZGVyIHRoYXQgY29udGFpbnMgTG9nbywgTmF2aWdhdGlvbiBhbmQgU2VhcmNoXG4gKlxuICogTWFya3VwOiBwcmltYXJ5LWhlYWRlci50d2lnXG4gKlxuICogU3R5bGUgZ3VpZGU6IEdyb3VwZWQgQ29tcG9uZW50cy5nbG9iYWwtaGVhZGVyLnByaW1hcnktaGVhZGVyXG4gKi9cblxuQGxheWVyIGNvbXBvbmVudHMge1xuICAuZ2xvYmFsX19wcmltYXJ5IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAmIC5mbGV4IHtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cblxuICAgICAgJiAubG9nbyB7XG4gICAgICAgIG1hcmdpbi1pbmxpbmUtZW5kOiBhdXRvO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5nbG9iYWxfX3ByaW1hcnlfX25hdiB7XG4gICAgaW5saW5lLXNpemU6IDEwMCU7XG4gICAgdHJhbnNpdGlvbjogMC4ycyBvcGFjaXR5IHZhcigtLWVhc2UpLCAwLjJzIHZpc2liaWxpdHkgdmFyKC0tZWFzZSk7XG5cbiAgICBAbWVkaWEgKC0tZ2xvYmFsLW5hdi11cCkge1xuICAgICAgei1pbmRleDogMjtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGlubGluZS1zaXplOiBhdXRvO1xuICAgICAgYmxvY2stc2l6ZTogYXV0bztcbiAgICB9XG5cbiAgICAmW2luZXJ0XSB7XG4gICAgICBibG9jay1zaXplOiAwO1xuICAgICAgb3BhY2l0eTogMDtcbiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgIHRyYW5zaXRpb246IDAuMnMgb3BhY2l0eSB2YXIoLS1lYXNlKSwgMC4ycyB2aXNpYmlsaXR5IHZhcigtLWVhc2UpO1xuICAgIH1cbiAgfVxuXG4gIC5nbG9iYWxfX3ByaW1hcnlfX3NlYXJjaCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0LWJsb2NrLXN0YXJ0OiAycHg7XG4gICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgIGlubGluZS1zaXplOiAxMDAlO1xuICAgIHRyYW5zaXRpb246IDAuMnMgb3BhY2l0eSB2YXIoLS1lYXNlKSwgMC4ycyB2aXNpYmlsaXR5IHZhcigtLWVhc2UpO1xuXG4gICAgQG1lZGlhICgtLWdsb2JhbC1uYXYtdXApIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBpbmxpbmUtc2l6ZTogYXV0bztcbiAgICAgIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IHZhcigtLXNwYWNpbmctbSk7XG4gICAgfVxuXG4gICAgJltpbmVydF0ge1xuICAgICAgb3BhY2l0eTogMDtcbiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgIHRyYW5zaXRpb246IDAuMnMgb3BhY2l0eSB2YXIoLS1lYXNlKSwgMC4ycyB2aXNpYmlsaXR5IHZhcigtLWVhc2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcmltYXJ5IEhlYWRlciBTdGFja2VkXG4gICAqXG4gICAqIFZpZXcgdGhlIFtHbG9iYWwgcGFja2FnZV0oaHR0cHM6Ly9naXRodWIuY29tL3ByZXZpb3VzbmV4dC9taXh0YXBlL3RyZWUvbWFzdGVyL3BhY2thZ2VzL2dsb2JhbCkgb24gZ2l0aHViLlxuICAgKiBBIHZlcnNpb24gb2YgdGhlIFByaW1hcnkgTmF2aWdhdGlvbiB3aGljaCBpcyBzdGFja2VkLiBUaGUgTG9nbyBhbmQgU2VhcmNoIGFwcGVhciBpbiB0aGUgc2FtZSByb3cgYW5kIGEgbmV3IHJvdyBpcyBjcmVhdGVkIGJlbG93IHRvIGNvbnRhaW5cbiAgICogdGhlIG1haW4gTmF2aWdhdGlvbi4gQWRkaXRpb25hbCBzdHlsZXMgYW5kIG1hcmt1cCBhbGxvdyBmb3IgbGVmdCBhbmQgcmlnaHQgc2VjdGlvbnMgb2YgdGhlIG5hdmlnYXRpb24sIGJhY2tncm91bmQgY29sb3VyIHRvIHN0cmV0Y2ggZnVsbCBzY3JlZW4gYW5kIHBhZGRpbmcgdG8gc3VpdCB0aGlzIGxheW91dC5cbiAgICpcbiAgICogTWFya3VwOiBwcmltYXJ5LWhlYWRlci0tc3RhY2tlZC50d2lnXG4gICAqXG4gICAqIFN0eWxlIGd1aWRlOiBHcm91cGVkIENvbXBvbmVudHMuZ2xvYmFsLWhlYWRlci5wcmltYXJ5LWhlYWRlci1zdGFja2VkXG4gICAqL1xuXG4gIC5nbG9iYWxfX3ByaW1hcnlfX25hdi1yaWdodCB7XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogYXV0bztcbiAgfVxufVxuXG5AbWVkaWEgcHJpbnQge1xuICAuZ2xvYmFsIC5nbG9iYWxfX3ByaW1hcnlfX25hdiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuIiwiLyoqXG4gKiBTZWNvbmRhcnkgSGVhZGVyXG4gKlxuICogVmlldyB0aGUgW0dsb2JhbCBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcHJldmlvdXNuZXh0L21peHRhcGUvdHJlZS9tYXN0ZXIvcGFja2FnZXMvZ2xvYmFsKSBvbiBnaXRodWIuXG4gKlxuICogTWFya3VwOiBzZWNvbmRhcnktaGVhZGVyLnR3aWdcbiAqXG4gKiBTdHlsZSBndWlkZTogRWxlbWVudHMuc2Vjb25kYXJ5LWhlYWRlclxuICovXG5cbkBsYXllciBjb21wb25lbnRzIHtcbiAgLmdsb2JhbF9fc2Vjb25kYXJ5IHtcbiAgICAmIC5mbGV4IHtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBwYWRkaW5nLWJsb2NrOiB2YXIoLS1zcGFjaW5nLXh4cyk7XG4gICAgICBwYWRkaW5nLWlubGluZTogMDtcblxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5nbG9iYWxfX3NlY29uZGFyeV9fbmF2IHtcbiAgICBkaXNwbGF5OiBub25lO1xuXG4gICAgQG1lZGlhICgtLWdsb2JhbC1uYXYtdXApIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB9XG5cbiAgICAmIHVsIHtcbiAgICAgIG1hcmdpbjogYXV0bztcbiAgICB9XG4gIH1cbn1cblxuQG1lZGlhIHByaW50IHtcbiAgLmdsb2JhbF9fc2Vjb25kYXJ5IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4iLCIvKipcbiAqIEdsb2JhbCBGb290ZXJcbiAqXG4gKiBWaWV3IHRoZSBbR2xvYmFsIHBhY2thZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9wcmV2aW91c25leHQvbWl4dGFwZS90cmVlL21hc3Rlci9wYWNrYWdlcy9nbG9iYWwpIG9uIGdpdGh1Yi5cbiAqXG4gKiBNYXJrdXA6IGdsb2JhbC1mb290ZXIudHdpZ1xuICpcbiAqIFN0eWxlIGd1aWRlOiBHcm91cGVkIENvbXBvbmVudHMuZm9vdGVyXG4gKi9cblxuQGxheWVyIGNvbXBvbmVudHMge1xuICAuZ2xvYmFsX19mb290ZXIge1xuICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgaW5zZXQtYmxvY2stc3RhcnQ6IDEwMHZoO1xuXG4gICAgJiAubmF2X190b2dnbGUge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG5cbiAgICAmIC5ncmlkIHtcbiAgICAgIHJvdy1nYXA6IHZhcigtLXNwYWNpbmcteHh4bCk7XG4gICAgfVxuICB9XG5cbiAgLmdsb2JhbF9fZm9vdGVyX19sb2dvIHtcbiAgICBAbWVkaWEgKC0tbWVkaXVtLWRvd24pIHtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB9XG4gIH1cblxuICAuZ2xvYmFsX19mb290ZXJfX21ldGEge1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6IHZhcigtLXNwYWNpbmctcyk7XG4gICAgYm9yZGVyLWJsb2NrLXN0YXJ0OiAxcHggc29saWQgdmFyKC0tY29sb3VyLWJvcmRlcik7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGxpbmUtaGVpZ2h0OiAyO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGdhcDogdmFyKC0tZ2FwKTtcblxuICAgIEBtZWRpYSAoLS14LXNtYWxsLWRvd24pIHtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgfVxuXG4gICAgJiAubmF2LS1pbmxpbmUgPiB1bCB7XG4gICAgICBAbWVkaWEgKC0teC1zbWFsbC1kb3duKSB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogdmFyKC0tZ2FwLXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5AbWVkaWEgcHJpbnQge1xuICAuZ2xvYmFsX19mb290ZXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbiIsIi8qKlxuICogTmF2aWdhdGlvblxuICpcbiAqIFZpZXcgdGhlIFtOYXZpZ2F0aW9uIHBhY2thZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9wcmV2aW91c25leHQvbWl4dGFwZS90cmVlL21hc3Rlci9wYWNrYWdlcy9uYXZpZ2F0aW9uKSBvbiBnaXRodWIuXG4gKlxuICogLm5hdi0taW5saW5lIC0gTGlua3MgYXJlIGRpc3BsYXllZCBpbmxpbmUuXG4gKlxuICogV3JhcHBlcjogc2VjdGlvbiBzZWN0aW9uLS1tXG4gKlxuICogTWFya3VwOiBuYXZpZ2F0aW9uLnR3aWdcbiAqXG4gKiBTdHlsZSBndWlkZTogRWxlbWVudHMubmF2aWdhdGlvblxuICovXG5cbkBsYXllciBjb21wb25lbnRzIHtcbiAgLm5hdiB7XG4gICAgJiB1bCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUpO1xuICAgIH1cblxuICAgICYgYTp3aGVyZSg6bm90KFtjbGFzc10pKSB7XG4gICAgICB0ZXh0LWRlY29yYXRpb24tbGluZTogbm9uZTtcbiAgICAgIGNvbG9yOiBpbmhlcml0O1xuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uLWxpbmU6IHVuZGVybGluZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAubmF2LS1pbmxpbmUge1xuICAgICYgPiB1bCB7XG4gICAgICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogdmFyKC0tc3BhY2luZy1zKTtcbiAgICB9XG4gIH1cblxuICAubmF2X190b2dnbGUge1xuICAgIGJhY2tncm91bmQ6IHVuc2V0O1xuICAgIHBhZGRpbmc6IDA7XG4gICAgYm9yZGVyOiAwO1xuICAgIGFwcGVhcmFuY2U6IG5vbmU7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIGlubGluZS1zaXplOiB2YXIoLS1zcGFjaW5nLWwpO1xuICAgIGJsb2NrLXNpemU6IHZhcigtLXNwYWNpbmctbCk7XG4gICAgaW5zZXQtYmxvY2stc3RhcnQ6IDEycHg7XG4gICAgaW5zZXQtaW5saW5lLWVuZDogMDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cblxuICAubmF2LS1vcGVuIHtcbiAgICAmID4gLm5hdl9fdG9nZ2xlOjpiZWZvcmUge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8qKlxuICogQnJlYWRjcnVtYiBOYXZpZ2F0aW9uXG4gKlxuICogQnJlYWRjcnVtYnMgYXJlIGRlZmluZWQgaW4gdGhlIE5hdmlnYXRpb24gcGFja2FnZS4gVmlldyB0aGUgW05hdmlnYXRpb24gcGFja2FnZV0oaHR0cHM6Ly9naXRodWIuY29tL3ByZXZpb3VzbmV4dC9taXh0YXBlL3RyZWUvbWFzdGVyL3BhY2thZ2VzL25hdmlnYXRpb24pIG9uIGdpdGh1Yi5cbiAqIElubGluZSBuYXZpZ2F0aW9uIHVzZWQgZm9yIGJyZWFkY3J1bWJzLlxuICpcbiAqIFdyYXBwZXI6IHNlY3Rpb24gc2VjdGlvbi0tbVxuICpcbiAqIE1hcmt1cDogbmF2aWdhdGlvbi1icmVhZGNydW1iLnR3aWdcbiAqXG4gKiBTdHlsZSBndWlkZTogRWxlbWVudHMubmF2aWdhdGlvbi5icmVhZGNydW1iLW5hdmlnYXRpb25cbiAqL1xuXG5AbGF5ZXIgY29tcG9uZW50cyB7XG4gIC5uYXYtLWJyZWFkY3J1bWIge1xuICAgIC0tY29sb3VyLWZvcmVncm91bmQ6IHZhcigtLWNvbG91ci1mb3JlZ3JvdW5kLWFsdCk7XG4gICAgLS1mb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zKTtcblxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAxO1xuICAgIG92ZXJmbG93OiBhdXRvO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgICAmID4gdWwge1xuICAgICAgZ2FwOiB2YXIoLS1zcGFjaW5nLXh4eHhzKTtcbiAgICB9XG5cbiAgICAmID4gdWwgPiBsaSB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3VyLWZvcmVncm91bmQpO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgICAgICY6d2hlcmUoOm5vdCg6bGFzdC1jaGlsZCkpOjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICBtYXNrLWltYWdlOiBzdmctbG9hZChcIi4vaW1hZ2VzL25hdi1jaGV2cm9uLXJpZ2h0LnN2Z1wiKTtcbiAgICAgICAgbWFzay1wb3NpdGlvbjogY2VudGVyO1xuICAgICAgICBtYXNrLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgICBibG9jay1zaXplOiB2YXIoLS1zcGFjaW5nLW0pO1xuICAgICAgICBpbmxpbmUtc2l6ZTogdmFyKC0tc3BhY2luZy1tKTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudGNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIFtkaXI9XCJydGxcIl0gLm5hdi0tYnJlYWRjcnVtYixcbiAgLnRyYW5zbGF0ZWQtcnRsIC5uYXYtLWJyZWFkY3J1bWIge1xuICAgICYgPiB1bCA+IGxpOjphZnRlciB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuICAgIH1cbiAgfVxufVxuIiwiLyoqXG4gKiBEcm9wZG93biBOYXZpZ2F0aW9uXG4gKlxuICogRHJvcGRvd24gTmF2aWdhdGlvbiBpcyBkZWZpbmVkIGluIHRoZSBOYXZpZ2F0aW9uIHBhY2thZ2UuIFZpZXcgdGhlIFtOYXZpZ2F0aW9uIHBhY2thZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9wcmV2aW91c25leHQvbWl4dGFwZS90cmVlL21hc3Rlci9wYWNrYWdlcy9uYXZpZ2F0aW9uKSBvbiBnaXRodWIuXG4gKiBNdWx0aS1sZXZlbCBuYXZpZ2F0aW9uIHdpdGggZHJvcGRvd25zLiBUeXBpY2FsbHkgdXNlZCBmb3IgcHJpbWFyeSBuYXZpZ2F0aW9uLlxuICpcbiAqIFdyYXBwZXI6IHNlY3Rpb24gc2VjdGlvbi0tbVxuICpcbiAqIE1hcmt1cDogbmF2aWdhdGlvbi1kcm9wZG93bi50d2lnXG4gKlxuICogU3R5bGUgZ3VpZGU6IEVsZW1lbnRzLm5hdmlnYXRpb24uZHJvcGRvd24tbmF2aWdhdGlvblxuICovXG5cbkBsYXllciBjb21wb25lbnRzIHtcbiAgLm5hdi0tZHJvcGRvd24ge1xuICAgIC0taXRlbS1zcGFjaW5nOiB2YXIoLS1zcGFjaW5nLXh4cyk7XG4gICAgLS1pdGVtLWdhcDogdmFyKC0tc3BhY2luZy14eHh4cyk7XG4gICAgLS1kcm9wZG93bi13aWR0aDogMjcwcHg7XG5cbiAgICBtYXJnaW4tYmxvY2s6IHZhcigtLXNwYWNpbmctbSk7XG5cbiAgICBAbWVkaWEgKC0tZ2xvYmFsLW5hdi11cCkge1xuICAgICAgbWFyZ2luLWJsb2NrOiAwO1xuICAgIH1cblxuICAgICYgbGkge1xuICAgICAgbWFyZ2luOiAwO1xuXG4gICAgICAmOmlzKC5uYXZfX2hhcy1zdWJuYXYsIDpoYXMoPiB1bCkpIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAgICYgPiBhIHtcbiAgICAgICAgICAtLXRvZ2dsZS1nYXA6IHZhcigtLXNwYWNpbmctbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmIGEge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG5cbiAgICAgICY6aXMoOmhvdmVyLCBbYXJpYS1leHBhbmRlZD1cInRydWVcIl0pIHtcbiAgICAgICAgQG1lZGlhICgtLWdsb2JhbC1uYXYtdXApIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvdXItYmFja2dyb3VuZCk7XG4gICAgICAgICAgY29sb3I6IHZhcigtLWNvbG91ci1mb3JlZ3JvdW5kKTtcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cbiAgICAgICAgICAmICsgLm5hdl9fdG9nZ2xlIHtcbiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1jb2xvdXItZm9yZWdyb3VuZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJiBsaSA+IHVsIHtcbiAgICAgIHRyYW5zaXRpb246IDAuMnMgb3BhY2l0eSB2YXIoLS1lYXNlKSwgMC4ycyB2aXNpYmlsaXR5IHZhcigtLWVhc2UpO1xuXG4gICAgICAmW2luZXJ0XSB7XG4gICAgICAgIGJsb2NrLXNpemU6IDA7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgdHJhbnNpdGlvbjogMC4ycyBvcGFjaXR5IHZhcigtLWVhc2UpLCAwLjJzIHZpc2liaWxpdHkgdmFyKC0tZWFzZSk7XG5cbiAgICAgICAgQG1lZGlhICgtLWdsb2JhbC1uYXYtdXApIHtcbiAgICAgICAgICBibG9jay1zaXplOiBhdXRvO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJiAubmF2X19sZXZlbC0xIHtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAgIEBtZWRpYSAoLS1nbG9iYWwtbmF2LXVwKSB7XG4gICAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgICAgICBmbGV4LWZsb3c6IHJvdztcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgICAgfVxuXG4gICAgICAmID4gbGkge1xuICAgICAgICBib3JkZXItYmxvY2stc3RhcnQ6IDFweCBzb2xpZCB2YXIoLS1jb2xvdXItYm9yZGVyKTtcblxuICAgICAgICBAbWVkaWEgKC0tZ2xvYmFsLW5hdi11cCkge1xuICAgICAgICAgIGJvcmRlci1ibG9jay1zdGFydDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgICYgPiBhOndoZXJlKDpub3QoLmJ1dHRvbikpIHtcbiAgICAgICAgICBwYWRkaW5nLWJsb2NrOiB2YXIoLS1pdGVtLXNwYWNpbmcsIHZhcigtLXNwYWNpbmcteHhzKSk7XG4gICAgICAgICAgcGFkZGluZy1pbmxpbmUtZW5kOiB2YXIoXG4gICAgICAgICAgICAtLXRvZ2dsZS1nYXAsXG4gICAgICAgICAgICB2YXIoLS1pdGVtLXNwYWNpbmcsIHZhcigtLXNwYWNpbmcteHhzKSlcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgQG1lZGlhICgtLWdsb2JhbC1uYXYtdXApIHtcbiAgICAgICAgICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiB2YXIoLS1pdGVtLXNwYWNpbmcsIHZhcigtLXNwYWNpbmcteHhzKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJiAubmF2X19sZXZlbC0yIHtcbiAgICAgIC0tY29sb3VyLWJhY2tncm91bmQ6IHZhcigtLWNvbG91ci1iYWNrZ3JvdW5kLWFsdCk7XG5cbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgaW5saW5lLXNpemU6IDEwMCU7XG4gICAgICBtYXJnaW46IDA7XG5cbiAgICAgIEBtZWRpYSAoLS1nbG9iYWwtbmF2LXVwKSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgaW5saW5lLXNpemU6IHZhcigtLWRyb3Bkb3duLXdpZHRoKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG91ci1iYWNrZ3JvdW5kKTtcblxuICAgICAgICAmIC5uYXZfX3RvZ2dsZTo6YmVmb3JlIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtOTBkZWcpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICYgPiBsaSB7XG4gICAgICAgIEBtZWRpYSAoLS1nbG9iYWwtbmF2LWRvd24pIHtcbiAgICAgICAgICBib3JkZXItYmxvY2stc3RhcnQ6IDFweCBzb2xpZCB2YXIoLS1jb2xvdXItYm9yZGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgICYgPiBhIHtcbiAgICAgICAgICAmOndoZXJlKDpub3QoLmJ1dHRvbikpIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IHZhcigtLWl0ZW0tc3BhY2luZyk7XG4gICAgICAgICAgICBtYXJnaW46IHZhcigtLWl0ZW0tZ2FwKTtcblxuICAgICAgICAgICAgQG1lZGlhICgtLWdsb2JhbC1uYXYtZG93bikge1xuICAgICAgICAgICAgICBwYWRkaW5nLWlubGluZS1zdGFydDogdmFyKC0tc3BhY2luZy1sKTtcbiAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmOmlzKDpob3ZlciwgW2FyaWEtZXhwYW5kZWQ9XCJ0cnVlXCJdKSB7XG4gICAgICAgICAgICAgIEBtZWRpYSAoLS1nbG9iYWwtbmF2LXVwKSB7XG4gICAgICAgICAgICAgICAgLS1jb2xvdXItYmFja2dyb3VuZDogdmFyKC0tY29sb3VyLWJhY2tncm91bmQtcmV2ZXJzZSk7XG4gICAgICAgICAgICAgICAgLS1jb2xvdXItZm9yZWdyb3VuZDogdmFyKC0tY29sb3VyLWZvcmVncm91bmQtcmV2ZXJzZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmIC5uYXYtLXJldmVyc2UgLm5hdl9fbGV2ZWwtMiB7XG4gICAgICBAbWVkaWEgKC0tZ2xvYmFsLW5hdi11cCkge1xuICAgICAgICBpbnNldC1pbmxpbmU6IGF1dG8gMDtcblxuICAgICAgICAmIC5uYXZfX3RvZ2dsZTo6YmVmb3JlIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmIC5uYXZfX3NlcGFyYXRvciB7XG4gICAgICBib3JkZXItYmxvY2stc3RhcnQ6IDFweCBzb2xpZCB2YXIoLS1jb2xvdXItYm9yZGVyKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8qKlxuICogRHJvcGRvd24gTmF2aWdhdGlvbiAtIE1lZ2EgTmF2XG4gKlxuICogVGhlIE1lZ2EgTmF2IHN0eWxlcyBhcmUgZGVmaW5lZCBpbiB0aGUgTmF2aWdhdGlvbiBwYWNrYWdlLiBWaWV3IHRoZSBbTmF2aWdhdGlvbiBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcHJldmlvdXNuZXh0L21peHRhcGUvdHJlZS9tYXN0ZXIvcGFja2FnZXMvbmF2aWdhdGlvbikgb24gZ2l0aHViLlxuICogTXVsdGkgY29sdW1uLCBNdWx0aS1sZXZlbCBuYXZpZ2F0aW9uIHdpdGggZHJvcGRvd25zLiBUeXBpY2FsbHkgdXNlZCBmb3IgcHJpbWFyeSBuYXZpZ2F0aW9uLlxuICpcbiAqIFdyYXBwZXI6IHNlY3Rpb24gc2VjdGlvbi0tbVxuICpcbiAqIE1hcmt1cDogbmF2aWdhdGlvbi1tZWdhLW5hdi50d2lnXG4gKlxuICogU3R5bGUgZ3VpZGU6IEVsZW1lbnRzLm5hdmlnYXRpb24ubWVnYS1uYXZcbiAqL1xuXG5AbGF5ZXIgY29tcG9uZW50cyB7XG4gIC5uYXYtLW1lZ2EtbmF2IHtcbiAgICBAbWVkaWEgKC0tZ2xvYmFsLW5hdi1kb3duKSB7XG4gICAgICBtYXgtYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgIH1cblxuICAgICYgLm5hdl9fbGV2ZWwtMiB1bCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiB2YXIoLS1zcGFjaW5nLWwpO1xuICAgICAgYm9yZGVyLWJsb2NrLXN0YXJ0OiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG91cik7XG4gICAgICBpbmxpbmUtc2l6ZTogMTAwJTtcblxuICAgICAgQG1lZGlhICgtLWdsb2JhbC1uYXYtdXApIHtcbiAgICAgICAgLS1jb2xvdXItYmFja2dyb3VuZDogdmFyKC0tY29sb3VyLWJhY2tncm91bmQtcmV2ZXJzZSk7XG4gICAgICAgIC0tY29sb3VyLWZvcmVncm91bmQ6IHZhcigtLWNvbG91ci1mb3JlZ3JvdW5kLXJldmVyc2UpO1xuXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiB2YXIoLS1kcm9wZG93bi13aWR0aCk7XG4gICAgICAgIGluc2V0LWJsb2NrLXN0YXJ0OiAwO1xuICAgICAgICBpbmxpbmUtc2l6ZTogdmFyKC0tZHJvcGRvd24td2lkdGgpO1xuICAgICAgICBtaW4tYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IDA7XG4gICAgICAgIGJvcmRlci1ibG9jay1zdGFydDogMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMCB2YXIoLS1ib3JkZXItcmFkaXVzKSB2YXIoLS1ib3JkZXItcmFkaXVzKSAwO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvdXItYmFja2dyb3VuZCk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1jb2xvdXItZm9yZWdyb3VuZCk7XG4gICAgICB9XG5cbiAgICAgICYgPiBsaSA+IGE6d2hlcmUoOm5vdCguYnV0dG9uKSkge1xuICAgICAgICBwYWRkaW5nOiB2YXIoLS1pdGVtLXNwYWNpbmcpO1xuICAgICAgICBtYXJnaW46IHZhcigtLWl0ZW0tZ2FwKTtcblxuICAgICAgICBAbWVkaWEgKC0tZ2xvYmFsLW5hdi1kb3duKSB7XG4gICAgICAgICAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IHZhcigtLXNwYWNpbmctbCk7XG4gICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgJjppcyg6aG92ZXIsIFthcmlhLWV4cGFuZGVkPVwidHJ1ZVwiXSkge1xuICAgICAgICAgIEBtZWRpYSAoLS1nbG9iYWwtbmF2LXVwKSB7XG4gICAgICAgICAgICAtLWNvbG91ci1iYWNrZ3JvdW5kOiB2YXIoLS1jb2xvdXItYmFja2dyb3VuZC1hbHQpO1xuICAgICAgICAgICAgLS1jb2xvdXItZm9yZWdyb3VuZDogdmFyKC0tY29sb3VyLWZvcmVncm91bmQtb3JpZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJiAubmF2LS1yZXZlcnNlIC5uYXZfX2xldmVsLTIgdWwge1xuICAgICAgQG1lZGlhICgtLWdsb2JhbC1uYXYtdXApIHtcbiAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiBjYWxjKHZhcigtLWRyb3Bkb3duLXdpZHRoKSAqIC0xKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cykgMCAwIHZhcigtLWJvcmRlci1yYWRpdXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLyoqXG4gKiBPcmRlcmVkIE5hdmlnYXRpb25cbiAqXG4gKiBPcmRlcmVkIE5hdmlnYXRpb24gaXMgZGVmaW5lZCBpbiB0aGUgTmF2aWdhdGlvbiBwYWNrYWdlLiBWaWV3IHRoZSBbTmF2aWdhdGlvbiBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcHJldmlvdXNuZXh0L21peHRhcGUvdHJlZS9tYXN0ZXIvcGFja2FnZXMvbmF2aWdhdGlvbikgb24gZ2l0aHViLlxuICogTXVsdGktbGV2ZWwgbmF2aWdhdGlvbiB1c2VmdWwgZm9yIHNpZGViYXJzLlxuICpcbiAqIFdyYXBwZXI6IHNlY3Rpb24gc2VjdGlvbi0tbVxuICpcbiAqIE1hcmt1cDogbmF2aWdhdGlvbi1vcmRlcmVkLnR3aWdcbiAqXG4gKiBTdHlsZSBndWlkZTogRWxlbWVudHMubmF2aWdhdGlvbi5vcmRlcmVkXG4gKi9cblxuQGxheWVyIGNvbXBvbmVudHMge1xuICAubmF2LS1vcmRlcmVkIHtcbiAgICAmIC5uYXZfX2xldmVsLTEge1xuICAgICAgZ2FwOiB2YXIoLS1zcGFjaW5nLW0pO1xuXG4gICAgICAmIHVsIHtcbiAgICAgICAgcGFkZGluZy1ibG9jay1zdGFydDogdmFyKC0tZ2FwKTtcbiAgICAgIH1cblxuICAgICAgJiA+IGxpIHtcbiAgICAgICAgJiA+IDppcyhhLCBzcGFuKSB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgcGFkZGluZy1ibG9jazogdmFyKC0tZ2FwKTtcbiAgICAgICAgICBwYWRkaW5nLWlubGluZTogMDtcbiAgICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgICAgICBib3JkZXItYmxvY2s6IDFweCBzb2xpZCB2YXIoLS1jb2xvdXItYm9yZGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgICY6Zmlyc3QtY2hpbGQgPiA6aXMoYSwgc3Bhbikge1xuICAgICAgICAgIGJvcmRlci1ibG9jay1zdGFydDogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICYubmF2X19sZXZlbC0zIHtcbiAgICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiB2YXIoLS1nYXApO1xuICAgIH1cbiAgfVxufVxuIiwiLyoqXG4gKiBMaXN0IE5hdmlnYXRpb25cbiAqXG4gKiBMaXN0IE5hdmlnYXRpb24gaXMgZGVmaW5lZCBpbiB0aGUgTmF2aWdhdGlvbiBwYWNrYWdlLiBWaWV3IHRoZSBbTmF2aWdhdGlvbiBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcHJldmlvdXNuZXh0L21peHRhcGUvdHJlZS9tYXN0ZXIvcGFja2FnZXMvbmF2aWdhdGlvbikgb24gZ2l0aHViLlxuICogU2xpZ2h0bHkgbW9yZSBmb3JtYXR0ZWQgbmF2aWdhdGlvbiB0aGF0IGZvcm1zIHRoZSBiYXNpcyBvZiB0aGUgJ0VsZXZhdG9yJyBhbmQgb3JkZXJlZCBuYXZpZ2F0aW9uIHN0eWxlc1xuICpcbiAqIC5uYXYtLWxpc3QtMi1jb2wgLSAyIGNvbHVtbiB2YXJpYXRpb24uXG4gKlxuICogV3JhcHBlcjogc2VjdGlvbiBzZWN0aW9uLS1tXG4gKlxuICogTWFya3VwOiBuYXZpZ2F0aW9uLWp1bXAudHdpZ1xuICpcbiAqIFN0eWxlIGd1aWRlOiBFbGVtZW50cy5uYXZpZ2F0aW9uLmp1bXAtbmF2aWdhdGlvblxuICovXG5cbkBsYXllciBjb21wb25lbnRzIHtcbiAgLm5hdi0tbGlzdCB7XG4gICAgbWFyZ2luLWJsb2NrLWVuZDogdmFyKC0tc3BhY2luZy1tKTtcblxuICAgICYgdWwge1xuICAgICAgLS1nYXA6IHZhcigtLXNwYWNpbmcteHh4cyk7XG5cbiAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICBnYXA6IHZhcigtLWdhcCk7XG4gICAgfVxuXG4gICAgJiBbYXJpYS1jdXJyZW50PVwicGFnZVwiXSB7XG4gICAgICB0ZXh0LWRlY29yYXRpb24tbGluZTogdW5kZXJsaW5lO1xuICAgIH1cbiAgfVxuXG4gIC5uYXYtLWxpc3QtMi1jb2wge1xuICAgICYgdWwge1xuICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgMWZyKTtcbiAgICB9XG4gIH1cblxuICBoMiArIC5uYXYtLWxpc3QsXG4gIGgzICsgLm5hdi0tbGlzdCB7XG4gICAgbWFyZ2luLWJsb2NrLXN0YXJ0OiB2YXIoLS1zcGFjaW5nLW0pO1xuICB9XG59XG4iLCIvKipcbiAqIEZvb3RlciBOYXZpZ2F0aW9uXG4gKlxuICogRm9vdGVyIE5hdmlnYXRpb24gaXMgZGVmaW5lZCBpbiB0aGUgTmF2aWdhdGlvbiBwYWNrYWdlLiBWaWV3IHRoZSBbTmF2aWdhdGlvbiBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcHJldmlvdXNuZXh0L21peHRhcGUvdHJlZS9tYXN0ZXIvcGFja2FnZXMvbmF2aWdhdGlvbikgb24gZ2l0aHViLlxuICogTXVsdGktY29sdW1uIG5hdmlnYXRpb24gdXNlZCBpbiB0aGUgZm9vdGVyLlxuICpcbiAqIFdyYXBwZXI6IHNlY3Rpb24gc2VjdGlvbi0tbVxuICpcbiAqIE1hcmt1cDogbmF2aWdhdGlvbi1mb290ZXIudHdpZ1xuICpcbiAqIFN0eWxlIGd1aWRlOiBFbGVtZW50cy5uYXZpZ2F0aW9uLmZvb3Rlci1uYXZpZ2F0aW9uXG4gKi9cbkBsYXllciBjb21wb25lbnRzIHtcbiAgLm5hdi0tZm9vdGVyIHtcbiAgICAmIHVsIHtcbiAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgfVxuXG4gICAgJiAubmF2X19sZXZlbC0xIHtcbiAgICAgIGdhcDogdmFyKC0tc3BhY2luZy1sKSB2YXIoLS1zcGFjaW5nLXh4eGwpO1xuICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyO1xuXG4gICAgICBAbWVkaWEgKC0tbWVkaXVtLXVwKSB7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmciAxZnI7XG4gICAgICB9XG5cbiAgICAgICYgPiBsaSA+IGEge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIG1hcmdpbi1ibG9jay1lbmQ6IHZhcigtLXNwYWNpbmctbCk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmIC5uYXZfX2xldmVsLTIge1xuICAgICAgZ2FwOiB2YXIoLS1zcGFjaW5nLXMpO1xuICAgIH1cbiAgfVxufVxuIiwiLyoqXG4gKiBDb2xsYXBzaWJsZSBOYXZpZ2F0aW9uXG4gKlxuICogQ29sbGFwc2libGUgTmF2aWdhdGlvbiBpcyBkZWZpbmVkIGluIHRoZSBOYXZpZ2F0aW9uIHBhY2thZ2UuIFZpZXcgdGhlIFtOYXZpZ2F0aW9uIHBhY2thZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9wcmV2aW91c25leHQvbWl4dGFwZS90cmVlL21hc3Rlci9wYWNrYWdlcy9uYXZpZ2F0aW9uKSBvbiBnaXRodWIuXG4gKiBNdWx0aS1sZXZlbCBuYXZpZ2F0aW9uIHdpdGggdG9nZ2xlcyB1c2VkIGZvciBzaWRlYmFyIG5hdmlnYXRpb24uXG4gKlxuICogV3JhcHBlcjogc2VjdGlvbiBzZWN0aW9uLS1tXG4gKlxuICogTWFya3VwOiBuYXZpZ2F0aW9uLWNvbGxhcHNpYmxlLnR3aWdcbiAqXG4gKiBTdHlsZSBndWlkZTogRWxlbWVudHMubmF2aWdhdGlvbi5jb2xsYXBzaWJsZS1uYXZpZ2F0aW9uXG4gKi9cblxuQGxheWVyIGNvbXBvbmVudHMge1xuICAubmF2LS1jb2xsYXBzaWJsZSB7XG4gICAgLS1pdGVtLXNwYWNpbmc6IHZhcigtLXNwYWNpbmcteHhzKTtcblxuICAgICYgLm5hdl9fdG9nZ2xlIHtcbiAgICAgIGluc2V0LWlubGluZTogYXV0byB2YXIoLS1zcGFjaW5nLXh4cyk7XG5cbiAgICAgIEBtZWRpYSAoLS1tZWRpdW0tdXApIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJiB1bCBsaSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAgICYgYSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBjb2xvcjogaW5oZXJpdDtcbiAgICAgICAgYm9yZGVyLWJsb2NrLWVuZDogMXB4IHNvbGlkIHZhcigtLWNvbG91ci1ib3JkZXIpO1xuICAgICAgICBwYWRkaW5nOiB2YXIoLS1pdGVtLXNwYWNpbmcpO1xuXG4gICAgICAgICY6aXMoOmZvY3VzLCA6Zm9jdXMtdmlzaWJsZSkge1xuICAgICAgICAgIG91dGxpbmUtb2Zmc2V0OiAtMXB4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJiAubmF2X19sZXZlbC0xID4gbGkgPiBhIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcbiAgICB9XG5cbiAgICAmIC5uYXZfX2xldmVsLTIgPiBsaSA+IGEge1xuICAgICAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IHZhcigtLXNwYWNpbmctcyk7XG4gICAgfVxuXG4gICAgJiAubmF2X19sZXZlbC0zID4gbGkgPiBhIHtcbiAgICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiB2YXIoLS1zcGFjaW5nLW0pO1xuICAgIH1cblxuICAgICYgOmlzKFthcmlhLWN1cnJlbnQ9XCJwYWdlXCJdLCAuaXMtYWN0aXZlKSA+IGEge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3VyLWJhY2tncm91bmQtYWx0KTtcbiAgICB9XG5cbiAgICAmIGxpID4gdWwge1xuICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgdmFyKC0tZWFzZSksIG9wYWNpdHkgMC44cyB2YXIoLS1lYXNlKTtcbiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IHRvcDtcbiAgICAgIHdpbGwtY2hhbmdlOiBibG9jay1zaXplO1xuXG4gICAgICAmW2luZXJ0XSB7XG4gICAgICAgIGJsb2NrLXNpemU6IDA7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGVZKDApO1xuICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC44cyB2YXIoLS1lYXNlKSwgb3BhY2l0eSAwLjJzIHZhcigtLWVhc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgICYgbGk6aXMoLm5hdl9faGFzLXN1Ym5hdiwgOmhhcyg+IHVsKSkgPiBhIHtcbiAgICAgIHBhZGRpbmctaW5saW5lLWVuZDogdmFyKC0tc3BhY2luZy1sKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8qKlxuICogUGFnZSBUaXRsZVxuICpcbiAqIFBhZ2UgVGl0bGUgaXMgZGVmaW5lZCBpbiB0aGUgcGFnZSBwYWNrYWdlLiBWaWV3IHRoZSBbUGFnZSBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcHJldmlvdXNuZXh0L21peHRhcGUvdHJlZS9tYXN0ZXIvcGFja2FnZXMvcGFnZSkgb24gZ2l0aHViLlxuICogU2ltcGxlIHBhZ2UgdGl0bGUgZXhhbXBsZSB3aXRoIHJldHVybiBsaW5rXG4gKlxuICogTWFya3VwOiBwYWdlLXRpdGxlLnR3aWdcbiAqXG4gKiBXcmFwcGVyOiBzZWN0aW9uIHNlY3Rpb24tLW1cbiAqXG4gKiBTdHlsZSBndWlkZTogR3JvdXBlZCBDb21wb25lbnRzLnBhZ2UtdGl0bGVcbiAqL1xuXG4vKipcbiAqIEhlcm9cbiAqXG4gKiBIZXJvIGlzIGRlZmluZWQgaW4gdGhlIHBhZ2UgcGFja2FnZS4gVmlldyB0aGUgW1BhZ2UgcGFja2FnZV0oaHR0cHM6Ly9naXRodWIuY29tL3ByZXZpb3VzbmV4dC9taXh0YXBlL3RyZWUvbWFzdGVyL3BhY2thZ2VzL3BhZ2UpIG9uIGdpdGh1Yi5cbiAqIEEgcGFnZSB0aXRsZSBpbiBhIHNlY3Rpb24gd2l0aCAucGFnZS10aXRsZS0taGVybyBtb2RpZmllci5cbiAqXG4gKiBNYXJrdXA6IHBhZ2UtdGl0bGUtZXhhbXBsZS50d2lnXG4gKlxuICogU3R5bGUgZ3VpZGU6IEdyb3VwZWQgQ29tcG9uZW50cy5wYWdlLXRpdGxlLmhlcm9cbiAqL1xuXG5AbGF5ZXIgY29tcG9uZW50cyB7XG4gIC5wYWdlLXRpdGxlIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogMTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgICAmLnBhZ2UtdGl0bGUtLWhlcm8ge1xuICAgICAgLS1oZWlnaHQ6IDQwMHB4O1xuXG4gICAgICBtaW4tYmxvY2stc2l6ZTogdmFyKC0taGVpZ2h0KTtcbiAgICAgIHBsYWNlLWNvbnRlbnQ6IGNlbnRlcjtcbiAgICB9XG5cbiAgICAmIDppcyhoMSwgaDIsIHApIHtcbiAgICAgIG1heC1pbmxpbmUtc2l6ZTogdmFyKC0tY29udGFpbmVyLW1heC13aWR0aC1uYXJyb3cpO1xuICAgICAgdGV4dC13cmFwOiBiYWxhbmNlO1xuICAgIH1cblxuICAgICYudGV4dC0tY2VudGVyIHtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgfVxuICB9XG59XG4iLCIvKipcbiAqIFBhZ2VcbiAqXG4gKiBWaWV3IHRoZSBbUGFnZSBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcHJldmlvdXNuZXh0L21peHRhcGUvdHJlZS9tYXN0ZXIvcGFja2FnZXMvcGFnZSkgb24gZ2l0aHViLlxuICpcbiAqIFN0eWxlIGd1aWRlOiBMYXlvdXQucGFnZVxuICovXG5cbi8qKlxuICogUGFnZSB3aXRoIFNpZGViYXJcbiAqXG4gKiBQYWdlIHdpdGggc2lkZWJhciBpcyBkZWZpbmVkIGluIHRoZSBwYWdlIHBhY2thZ2UuIFZpZXcgdGhlIFtQYWdlIHBhY2thZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9wcmV2aW91c25leHQvbWl4dGFwZS90cmVlL21hc3Rlci9wYWNrYWdlcy9wYWdlKSBvbiBnaXRodWIuXG4gKlxuICogLmdyaWQtLXNpZGViYXItcmV2IC0gUmV2ZXJzZSBvcmRlciBvZiBjb2x1bW5zIGZvciBhbGwgc2NyZWVuIHNpemVzLlxuICogLmdyaWQtLXNpZGViYXItcmV2LWxnIC0gUmV2ZXJzZSBvcmRlciBvZiBjb2x1bW5zIG9ubHkgZm9yIGxhcmdlIHNjcmVlbiBzaXplcy5cbiAqXG4gKiBNYXJrdXA6IHBhZ2Utc2lkZWJhci50d2lnXG4gKlxuICogU3R5bGUgZ3VpZGU6IExheW91dC5wYWdlLXNpZGViYXJcbiAqL1xuXG5AbGF5ZXIgbGF5b3V0IHtcbiAgLmdyaWQtLXNpZGViYXIge1xuICAgICY6d2hlcmUoOm5vdCg6aGFzKD4gYXNpZGUpKSkge1xuICAgICAgZ3JpZC1jb2x1bW46IG5hcnJvdztcbiAgICB9XG5cbiAgICAmOndoZXJlKDpoYXMoPiBhc2lkZSkpIHtcbiAgICAgIEBtZWRpYSAoLS1tZWRpdW0tdXApIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMTIsIDFmcik7XG4gICAgICAgIGdhcDogdmFyKC0tZ2FwKTtcbiAgICAgIH1cblxuICAgICAgJiA+IHNlY3Rpb24ge1xuICAgICAgICBAbWVkaWEgKC0tbWVkaXVtLXVwKSB7XG4gICAgICAgICAgZ3JpZC1jb2x1bW4tZW5kOiBzcGFuIDg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJiA+IGFzaWRlIHtcbiAgICAgICAgQG1lZGlhICgtLW1lZGl1bS11cCkge1xuICAgICAgICAgIGdyaWQtY29sdW1uLWVuZDogc3BhbiA0O1xuICAgICAgICB9XG5cbiAgICAgICAgQG1lZGlhICgtLWxhcmdlLXVwKSB7XG4gICAgICAgICAgZ3JpZC1jb2x1bW4tZW5kOiBzcGFuIDM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJi5ncmlkLS1zaWRlYmFyLXJldiB7XG4gICAgICAgICYgPiA6aXMoc2VjdGlvbiwgYXNpZGUpIHtcbiAgICAgICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICAgIG9yZGVyOiAyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgICBvcmRlcjogMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJi5ncmlkLS1zaWRlYmFyLXJldi1sZyB7XG4gICAgICAgIEBtZWRpYSAoLS1tZWRpdW0tdXApIHtcbiAgICAgICAgICAmID4gOmlzKHNlY3Rpb24sIGFzaWRlKSB7XG4gICAgICAgICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICAgICAgb3JkZXI6IDI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgICAgIG9yZGVyOiAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmOmlzKC5ncmlkLS1zaWRlYmFyLXJldiwgLmdyaWQtLXNpZGViYXItcmV2LWxnKSB7XG4gICAgICAgIEBtZWRpYSAoLS1sYXJnZS11cCkge1xuICAgICAgICAgICYgPiA6aXMoc2VjdGlvbiwgYXNpZGUpIHtcbiAgICAgICAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgICAgIGdyaWQtY29sdW1uLXN0YXJ0OiAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgICYgPiBhc2lkZSB7XG4gICAgICAgICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICAgICAgZ3JpZC1jb2x1bW4tc3RhcnQ6IDEwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgICYgPiBzZWN0aW9uIHtcbiAgICAgICAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICAgICAgICBncmlkLWNvbHVtbi1zdGFydDogNTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOndoZXJlKDpoYXMoPiBhc2lkZTpsYXN0LWNoaWxkKSkge1xuICAgICAgJiA+IGFzaWRlIHtcbiAgICAgICAgQG1lZGlhICgtLWxhcmdlLXVwKSB7XG4gICAgICAgICAgZ3JpZC1jb2x1bW4tc3RhcnQ6IDEwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjp3aGVyZSg6aGFzKD4gYXNpZGU6Zmlyc3QtY2hpbGQpKSB7XG4gICAgICAmID4gc2VjdGlvbiB7XG4gICAgICAgIEBtZWRpYSAoLS1sYXJnZS11cCkge1xuICAgICAgICAgIGdyaWQtY29sdW1uLXN0YXJ0OiA1O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUHJpbnQgc3R5bGVzaGVldFxuICovXG5cbkBtZWRpYSBwcmludCB7XG4gIC5wYWdlX19zaWRlYmFyIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4iLCIvKipcbiAqIFRpbGVzXG4gKlxuICogVmlldyB0aGUgW1RpbGVzIHBhY2thZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9wcmV2aW91c25leHQvbWl4dGFwZS90cmVlL21hc3Rlci9wYWNrYWdlcy90aWxlcykgb24gZ2l0aHViLlxuICpcbiAqIFdyYXBwZXI6IHNlY3Rpb24gc2VjdGlvbi0tbSBjb250YWluZXJcbiAqXG4gKiBNYXJrdXA6IHRpbGVzLnR3aWdcbiAqXG4gKiBTdHlsZSBndWlkZTogRWxlbWVudHMudGlsZVxuICovXG5AbGF5ZXIgY29tcG9uZW50cyB7XG4gIC50aWxlIHtcbiAgICAtLWhlaWdodDogMTYwcHg7XG4gICAgLS1vdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAtLWdhcDogdmFyKC0tZ2FwLXMpO1xuXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3VyLWJhY2tncm91bmQtYWx0KTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3VyLWZvcmVncm91bmQpO1xuICAgIG1pbi1ibG9jay1zaXplOiB2YXIoLS1oZWlnaHQpO1xuICAgIHRyYW5zaXRpb246IDAuMnMgYmFja2dyb3VuZC1jb2xvciwgMC4ycyBiYWNrZ3JvdW5kLWltYWdlLCAwLjJzIGNvbG9yLFxuICAgICAgMC4ycyBib3JkZXItY29sb3I7XG5cbiAgICAmOmlzKC50aWxlLS1oYXMtbGluaywgOmhhcyg+IGFbaHJlZl0pKTpob3ZlciB7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3VyLWZvcmVncm91bmQtcmV2ZXJzZSk7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvdXItYmFja2dyb3VuZC1yZXZlcnNlKTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG5cbiAgICAmID4gYVtocmVmXSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHRleHQtaW5kZW50OiAtMTAwMDAlO1xuICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICB9XG5cbiAgICAmIC50aWxlX19jb250ZW50IHtcbiAgICAgIHBhZGRpbmc6IHZhcigtLXNwYWNpbmctbSk7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgfVxuICB9XG5cbiAgLnRpbGVzLS1tZWRpdW0ge1xuICAgICYgLnRpbGUge1xuICAgICAgLS1oZWlnaHQ6IDI0MHB4O1xuICAgIH1cbiAgfVxuXG4gIC50aWxlcy0tbGFyZ2Uge1xuICAgICYgLnRpbGUge1xuICAgICAgLS1oZWlnaHQ6IDQzM3B4O1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFByaW50IHN0eWxlc2hlZXRcbiAqL1xuXG5AbWVkaWEgcHJpbnQge1xuICAudGlsZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3VyLWZvcmVncm91bmQpO1xuICB9XG5cbiAgLnRpbGVzLS1zbWFsbCxcbiAgLnRpbGVzLS1tZWRpdW0sXG4gIC50aWxlcy0tbGFyZ2Uge1xuICAgICYgLnRpbGUge1xuICAgICAgbWluLWJsb2NrLXNpemU6IDA7XG4gICAgfVxuICB9XG59XG4iLCIvKipcbiAqIFByZXZpb3VzIE5leHRcbiAqXG4gKiBWaWV3IHRoZSBbUHJldmlvdXMgTmV4dCBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcHJldmlvdXNuZXh0L21peHRhcGUvdHJlZS9tYXN0ZXIvcGFja2FnZXMvcHJldmlvdXMtbmV4dCkgb24gZ2l0aHViLlxuICogQSBzZXQgb2YgbGlua3MgdG8gdGhlIHByZXZpb3VzIGFuZCBuZXh0IHBhZ2VzLlxuICpcbiAqIFdyYXBwZXI6IHNlY3Rpb24gc2VjdGlvbi0tbVxuICpcbiAqIE1hcmt1cDogcHJldmlvdXMtbmV4dC50d2lnXG4gKlxuICogU3R5bGUgZ3VpZGU6IEVsZW1lbnRzLnByZXZpb3VzLW5leHRcbiAqL1xuXG5AbGF5ZXIgY29tcG9uZW50cyB7XG4gIC5wcmV2aW91cy1uZXh0IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGlubGluZS1zaXplOiAxMDAlO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgbWFyZ2luLWJsb2NrLXN0YXJ0OiB2YXIoLS1zcGFjaW5nLXh4eGwpO1xuICAgIGJvcmRlci1ibG9jay1zdGFydDogMXB4IHNvbGlkIHZhcigtLWNvbG91ci1ib3JkZXIpO1xuICAgIGJvcmRlci1ibG9jay1lbmQ6IDFweCBzb2xpZCB2YXIoLS1jb2xvdXItYm9yZGVyKTtcblxuICAgICYgLnByZXZpb3VzLW5leHRfX2xpbmsge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvdXItYmFja2dyb3VuZCk7XG4gICAgICBibG9jay1zaXplOiAxMDAlO1xuICAgICAgaW5saW5lLXNpemU6IDUwJTtcbiAgICB9XG5cbiAgICAmIC5wcmV2aW91cy1uZXh0X19wcmV2IHtcbiAgICAgIGp1c3RpZnktc2VsZjogc3RhcnQ7XG4gICAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XG4gICAgICBib3JkZXItaW5saW5lLWVuZDogMXB4IHNvbGlkIHZhcigtLWNvbG91ci1ib3JkZXIpO1xuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIG1hc2staW1hZ2U6IHN2Zy1sb2FkKFwiLi9pbWFnZXMvYXJyb3ctbGVmdC5zdmdcIik7XG4gICAgICAgIGluc2V0LWlubGluZS1zdGFydDogdmFyKC0tc3BhY2luZy1zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmIC5wcmV2aW91cy1uZXh0X19uZXh0IHtcbiAgICAgIGp1c3RpZnktc2VsZjogZW5kO1xuICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG5cbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgbWFzay1pbWFnZTogc3ZnLWxvYWQoXCIuL2ltYWdlcy9hcnJvdy1yaWdodC5zdmdcIik7XG4gICAgICAgIGluc2V0LWlubGluZS1lbmQ6IHZhcigtLXNwYWNpbmctcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJiBhIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIHBsYWNlLWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGlubGluZS1zaXplOiAxMDAlO1xuICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgIHBhZGRpbmctYmxvY2s6IHZhcigtLXNwYWNpbmcteHhsKTtcbiAgICAgIHBhZGRpbmctaW5saW5lOiB2YXIoLS1zcGFjaW5nLWwpO1xuICAgICAgY29sb3I6IHZhcigtLWNvbG91ci1mb3JlZ3JvdW5kKTtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgaW5saW5lLXNpemU6IHZhcigtLXNwYWNpbmctcyk7XG4gICAgICAgIGJsb2NrLXNpemU6IDEwMCU7XG4gICAgICAgIG1hc2stcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgIG1hc2stcG9zaXRpb246IGNlbnRlcjtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudGNvbG9yO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB9XG5cbiAgICAgICYgLnByZXZpb3VzLW5leHRfX3BhZ2UtdGl0bGUge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtbSk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcbiAgICAgIH1cblxuICAgICAgJiAucHJldmlvdXMtbmV4dF9fdGl0bGUge1xuICAgICAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zKTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpO1xuICAgICAgICBjb2xvcjogdmFyKC0tY29sb3VyLWZvcmVncm91bmQtYWx0KTtcbiAgICAgICAgbWFyZ2luLWJsb2NrLWVuZDogdmFyKC0tc3BhY2luZy14eHMpO1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgICBjb2xvcjogdmFyKC0tY29sb3VyLWZvcmVncm91bmQtcmV2ZXJzZSk7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG91ci1iYWNrZ3JvdW5kLXJldmVyc2UpO1xuXG4gICAgICAgICYgLnByZXZpb3VzLW5leHRfX3RpdGxlIHtcbiAgICAgICAgICBjb2xvcjogdmFyKC0tY29sb3VyLWZvcmVncm91bmQtYWx0LXJldmVyc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvKipcbiAqIFBhZ2luYXRpb25cbiAqXG4gKiBWaWV3IHRoZSBbUGFnaW5hdG9uIHBhY2thZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9wcmV2aW91c25leHQvbWl4dGFwZS90cmVlL21hc3Rlci9wYWNrYWdlcy9wYWdpbmF0aW9uKSBvbiBnaXRodWIuXG4gKlxuICogV3JhcHBlcjogc2VjdGlvbiBzZWN0aW9uLS1tXG4gKlxuICogTWFya3VwOiBwYWdpbmF0aW9uLnR3aWdcbiAqXG4gKiBTdHlsZSBndWlkZTogRWxlbWVudHMucGFnaW5hdGlvblxuICovXG5cbkBsYXllciBlbGVtZW50cyB7XG4gIC5wYWdpbmF0aW9uIHtcbiAgICAtLWFjdGl2ZS1jb2xvcjogdmFyKC0tY29sb3VyLWZvcmVncm91bmQpO1xuICAgIC0taW5hY3RpdmUtY29sb3I6IHZhcigtLWNvbG91ci1mb3JlZ3JvdW5kLWFsdCk7XG4gICAgLS1hY3RpdmUtdW5kZXJsaW5lOiB1bmRlcmxpbmU7XG5cbiAgICBtYXJnaW4tYmxvY2s6IHZhcigtLXNwYWNpbmctbSk7XG4gICAgbWFyZ2luLWlubGluZTogMDtcbiAgICBwYWRkaW5nOiAwO1xuXG4gICAgJiBidXR0b24ge1xuICAgICAgYWxsOiB1bnNldDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBvdXRsaW5lOiB2YXIoLS1vdXRsaW5lLXdpZHRoLCB2YXIoLS1vdXRsaW5lLXNpemUpKVxuICAgICAgICAgIHZhcigtLW91dGxpbmUtc3R5bGUsIHNvbGlkKSB2YXIoLS1vdXRsaW5lLWNvbG9yLCBjdXJyZW50Y29sb3IpO1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogdmFyKC0tb3V0bGluZS1vZmZzZXQsIHZhcigtLW91dGxpbmUtc2l6ZSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgICYgOmlzKGEsIGJ1dHRvbiwgW2FyaWEtY3VycmVudD1cInBhZ2VcIl0sIFthcmlhLWN1cnJlbnQ9XCJzdGVwXCJdKSB7XG4gICAgICB0ZXh0LWRlY29yYXRpb24tbGluZTogbm9uZTtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgYmxvY2stc2l6ZTogdmFyKC0tc3BhY2luZy1sKTtcbiAgICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zcGFjaW5nLWwpO1xuICAgICAgcGFkZGluZy1ibG9jazogMDtcbiAgICAgIHBhZGRpbmctaW5saW5lOiB2YXIoLS1zcGFjaW5nLXhzKTtcbiAgICB9XG5cbiAgICAmIDppcyhbYXJpYS1jdXJyZW50PVwicGFnZVwiXSwgW2FyaWEtY3VycmVudD1cInN0ZXBcIl0sIC5pcy1hY3RpdmUpIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1hY3RpdmUtY29sb3IpO1xuICAgICAgdGV4dC1kZWNvcmF0aW9uLWxpbmU6IHZhcigtLWFjdGl2ZS11bmRlcmxpbmUpO1xuICAgICAgdGV4dC1kZWNvcmF0aW9uLXRoaWNrbmVzczogMnB4O1xuICAgICAgdGV4dC1kZWNvcmF0aW9uLXNraXAtaW5rOiBhdXRvO1xuICAgICAgdGV4dC11bmRlcmxpbmUtb2Zmc2V0OiAwLjE1ZW07XG4gICAgfVxuXG4gICAgJiAuaWNvbjpub3QoLmljb24tLW9ubHkpIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiB2YXIoLS1zcGFjaW5nLXh4cyk7XG4gICAgfVxuXG4gICAgJiAucGFnaW5hdGlvbl9faXRlbXMge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIHBsYWNlLWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgICAmIDppcyhidXR0b24sIGEpIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWluYWN0aXZlLWNvbG9yKTtcblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICBjb2xvcjogdmFyKC0tYWN0aXZlLWNvbG9yKTtcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb24tbGluZTogdmFyKC0tYWN0aXZlLXVuZGVybGluZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmIC5wYWdpbmF0aW9uX19lbGxpcHNpcyB7XG4gICAgICBwYWRkaW5nLWJsb2NrOiAwO1xuICAgICAgcGFkZGluZy1pbmxpbmU6IHZhcigtLXNwYWNpbmcteHMpO1xuICAgIH1cblxuICAgICYgOmlzKC5wYWdpbmF0aW9uX19wcmV2aW91cywgLnBhZ2luYXRpb25fX25leHQpIC5pY29uOm5vdCguaWNvbi0tb25seSkge1xuICAgICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpO1xuICAgICAgY29sb3I6IHZhcigtLWFjdGl2ZS1jb2xvcik7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcblxuICAgICAgQG1lZGlhICgtLXNtYWxsLWRvd24pIHtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgaW5saW5lLXNpemU6IHZhcigtLXNwYWNpbmctcyk7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgdGV4dC1pbmRlbnQ6IDEwMCU7XG5cbiAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmIC5wYWdpbmF0aW9uX19wcmV2aW91cyB7XG4gICAgICBtYXJnaW4taW5saW5lLWVuZDogYXV0bztcblxuICAgICAgQG1lZGlhICgtLXNtYWxsLXVwKSB7XG4gICAgICAgICYgOmlzKGJ1dHRvbiwgYSkge1xuICAgICAgICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJiAucGFnaW5hdGlvbl9fbmV4dCB7XG4gICAgICBtYXJnaW4taW5saW5lLXN0YXJ0OiBhdXRvO1xuXG4gICAgICBAbWVkaWEgKC0tc21hbGwtdXApIHtcbiAgICAgICAgJiA6aXMoYnV0dG9uLCBhKSB7XG4gICAgICAgICAgcGFkZGluZy1pbmxpbmUtZW5kOiAwO1xuXG4gICAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICAgIG9yZGVyOiAyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFByaW50IHN0eWxlc2hlZXRcbiAqL1xuXG5AbWVkaWEgcHJpbnQge1xuICAucGFnaW5hdGlvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuIiwiLyoqXG4gKiBFbGV2YXRvclxuICpcbiAqIFZpZXcgdGhlIFtFbGV2YXRvciBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcHJldmlvdXNuZXh0L21peHRhcGUvdHJlZS9tYXN0ZXIvcGFja2FnZXMvZWxldmF0b3IpIG9uIGdpdGh1Yi5cbiAqIEEgc2Nyb2xsIHRvIGNvbXBvbmVudCwgdGhpcyBpcyBiZXN0IGRlbW8nZCBpbiBpdCdzIG93biB3aW5kb3cuIFRoaXMgY3JlYXRlcyBhIG1lbnUgYmFzZWQgb24gZ2l2ZW4gc2VsZWN0b3JzIGluc2lkZVxuICogYSBnaXZlbiBzZWxlY3Rvci5cbiAqIFVzYWdlOiBgbmV3IEVsZXZhdG9yKHsnanMtZWxldmF0b3InLCAnZWxldmF0b3InLCAncmljaC10ZXh0JywgJ2gyLCBoMycsICdwYWdlLW1lbnVfX21lbnUnLCAncGFnZS1tZW51X19pdGVtJ30pYFxuICpcbiAqIE1hcmt1cDogZWxldmF0b3IudHdpZ1xuICpcbiAqIFN0eWxlIGd1aWRlOiBHcm91cGVkIENvbXBvbmVudHMuZWxldmF0b3JcbiAqL1xuXG5AbGF5ZXIgZGVmYXVsdHMge1xuICBteC1lbGV2YXRvciB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cblxuQGxheWVyIGNvbXBvbmVudHMge1xuICAuZWxldmF0b3Ige1xuICAgICYgLmVsZXZhdG9yX19sZXZlbC0taDMge1xuICAgICAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IHZhcigtLXNwYWNpbmctcyk7XG4gICAgfVxuICB9XG5cbiAgLmVsZXZhdG9yX19vdmVyZmxvdy1kcm9wZG93biB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IG5vbmU7XG5cbiAgICAmLmhhcy1jaGlsZHJlbiB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgfVxuXG4gICAgJiA+IHVsIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBpbnNldC1pbmxpbmUtZW5kOiAwO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3VyLWJvcmRlcik7XG4gICAgICBib3JkZXItZW5kLWVuZC1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpO1xuICAgICAgYm9yZGVyLWVuZC1zdGFydC1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3VyLWJhY2tncm91bmQpO1xuICAgICAgei1pbmRleDogMTA7XG4gICAgfVxuXG4gICAgJiBhLm9wZW4ge1xuICAgICAgJiB+IHVsIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvKipcbiAqIFN0aWNreVxuICpcbiAqIFZpZXcgdGhlIFtTdGlja3kgcGFja2FnZV0oaHR0cHM6Ly9naXRodWIuY29tL3ByZXZpb3VzbmV4dC9taXh0YXBlL3RyZWUvbWFzdGVyL3BhY2thZ2VzL3N0aWNreSkgb24gZ2l0aHViLlxuICpcbiAqIE1hcmt1cDogc3RpY2t5LnR3aWdcbiAqXG4gKiBTdHlsZSBndWlkZTogR3JvdXBlZCBDb21wb25lbnRzLnN0aWNreVxuICovXG5cbkBkZWZpbmUtbWl4aW4gc3RpY2t5IHtcbiAgLS16LWluZGV4OiAxO1xuXG4gIHBvc2l0aW9uOiBzdGlja3k7XG4gIGluc2V0LWJsb2NrLXN0YXJ0OiB2YXIoLS1zdGlja3ktb2Zmc2V0LCAwKTtcbiAgei1pbmRleDogdmFyKC0tei1pbmRleCk7XG59XG5cbkBsYXllciBjb21wb25lbnRzIHtcbiAgLnN0aWNreSB7XG4gICAgQG1peGluIHN0aWNreTtcbiAgfVxuXG4gIC5zdGlja3ktLW0ge1xuICAgIEBtZWRpYSAoLS1tZWRpdW0tdXApIHtcbiAgICAgIEBtaXhpbiBzdGlja3k7XG4gICAgfVxuICB9XG5cbiAgLnN0aWNreS0tbCB7XG4gICAgQG1lZGlhICgtLWxhcmdlLXVwKSB7XG4gICAgICBAbWl4aW4gc3RpY2t5O1xuICAgIH1cbiAgfVxuXG4gIC5zdGlja3lfX3RyaWdnZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBpbmxpbmUtc2l6ZTogMXB4O1xuICAgIGJsb2NrLXNpemU6IDFweDtcbiAgfVxufVxuIiwiLyoqXG4gKiBEcnVwYWwgTG9naW4gRm9ybVxuICpcbiAqIE1hcmt1cDogbG9naW4tZm9ybS50d2lnXG4gKi9cblxubWFpbiA6aXMoLnVzZXItbG9naW4tZm9ybSwgLnVzZXItcmVnaXN0ZXItZm9ybSwgLnVzZXItcGFzcykge1xuICBtYXgtaW5saW5lLXNpemU6IHZhcigtLWNvbnRhaW5lci1tYXgtd2lkdGgtbmFycm93KTtcbiAgbWFyZ2luLWJsb2NrOiB2YXIoLS1zcGFjaW5nLXh4bCk7XG4gIG1hcmdpbi1pbmxpbmU6IGF1dG87XG59XG5cbi8qKlxuICogRHJ1cGFsIExvY2FsIFRhc2tzXG4gKlxuICogTWFya3VwOiBsb2NhbC10YXNrcy50d2lnXG4gKi9cblxuLmJsb2NrLWxvY2FsLXRhc2tzLWJsb2NrIHtcbiAgJiAudGFiLWxpc3Qge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICBpbnNldC1ibG9jay1zdGFydDogMzAwcHg7XG4gICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgIGlubGluZS1zaXplOiAxMjBweDtcbiAgICBtYXJnaW4tYmxvY2stZW5kOiAwO1xuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAwO1xuICAgIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWNvbG91ci1wcmltYXJ5KTtcbiAgICBib3JkZXItc3RhcnQtZW5kLXJhZGl1czogdmFyKC0tc3BhY2luZy14eHMpO1xuICAgIGJvcmRlci1lbmQtZW5kLXJhZGl1czogdmFyKC0tc3BhY2luZy14eHMpO1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHotaW5kZXg6IDUwMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTc1JSk7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZS1pbi1vdXQ7XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgICB9XG5cbiAgICAmIGxpIHtcbiAgICAgIGJvcmRlci1ibG9jay1lbmQ6IDJweCBzb2xpZCB2YXIoLS1jb2xvdXItcHJpbWFyeSk7XG5cbiAgICAgICY6bGFzdC1vZi10eXBlIHtcbiAgICAgICAgYm9yZGVyLWJsb2NrLWVuZDogMCBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgICYgYSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgIHBhZGRpbmctYmxvY2s6IHZhcigtLXNwYWNpbmcteHhzKTtcbiAgICAgIHBhZGRpbmctaW5saW5lOiB2YXIoLS1zcGFjaW5nLW0pO1xuICAgICAgY29sb3I6IHZhcigtLWNvbG91ci1wcmltYXJ5KTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG91ci1iYWNrZ3JvdW5kKTtcbiAgICAgIHRyYW5zaXRpb246IDAuMnMgYmFja2dyb3VuZC1jb2xvciwgMC4ycyBjb2xvcjtcblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1jb2xvdXItYmFja2dyb3VuZCk7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG91ci1wcmltYXJ5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAbWVkaWEgcHJpbnQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbiIsIi8qKlxuICogVGFnXG4gKlxuICogVmlldyB0aGUgW1RhZyBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcHJldmlvdXNuZXh0L21peHRhcGUvdHJlZS9tYXN0ZXIvcGFja2FnZXMvdGFnKSBvbiBnaXRodWIuXG4gKlxuICogLnRhZy0tcmV2ZXJzZSAtIHJldmVyc2VcbiAqXG4gKiBXcmFwcGVyOiBzZWN0aW9uIHNlY3Rpb24tLW1cbiAqXG4gKiBNYXJrdXA6IHRhZy50d2lnXG4gKlxuICogU3R5bGUgZ3VpZGU6IEVsZW1lbnRzLnRhZ1xuICovXG5cbkBsYXllciBlbGVtZW50cyB7XG4gIC50YWcge1xuICAgIC0tZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtcyk7XG4gICAgLS1mb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtYm9sZCk7XG4gICAgLS1saW5lLWhlaWdodDogMjtcbiAgICAtLWhvcml6b250YWwtcGFkZGluZzogdmFyKC0tc3BhY2luZy14eHhzKTtcblxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBpbmxpbmUtc2l6ZTogZml0LWNvbnRlbnQ7XG4gICAgcGFkZGluZy1pbmxpbmU6IHZhcigtLWhvcml6b250YWwtcGFkZGluZyk7XG4gICAgbWFyZ2luLWlubGluZS1lbmQ6IHZhcigtLXNwYWNpbmcteHMpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG91ci1iYWNrZ3JvdW5kLXJldmVyc2UpO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvdXItZm9yZWdyb3VuZC1yZXZlcnNlKTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodCk7XG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUpO1xuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodCk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7XG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3VyLWJhY2tncm91bmQtcmV2ZXJzZSk7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvdXItYmFja2dyb3VuZCk7XG4gICAgICBjb2xvcjogdmFyKC0tY29sb3VyLWZvcmVncm91bmQpO1xuICAgIH1cblxuICAgICYudGFnLS1yZXZlcnNlIHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG91ci1iYWNrZ3JvdW5kKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvdXItZm9yZWdyb3VuZCk7XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvdXItYmFja2dyb3VuZC1yZXZlcnNlKTtcbiAgICAgICAgY29sb3I6IHZhcigtLWNvbG91ci1mb3JlZ3JvdW5kLXJldmVyc2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLyoqXG4gKiBDb250ZW50IENhcmRcbiAqXG4gKiBWaWV3IHRoZSBbQ29udGVudCBDYXJkIHBhY2thZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9wcmV2aW91c25leHQvbWl4dGFwZS90cmVlL21hc3Rlci9wYWNrYWdlcy9jb250ZW50LWNhcmQpIG9uIGdpdGh1Yi5cbiAqIFRoZSBjb250ZW50IGNhcmQgZGlzcGxheXMgYXMgYSB2ZXJ0aWNhbCBibG9jayBvZiBjb250ZW50IGNvbnRhaW5pbmcgbWVkaWEgZm9sbG93ZWQgYnkgY29udGVudCBieSBkZWZhdWx0LlxuICogVGhpcyBjYW4gYWxzbyBiZSBkaXNwbGF5ZWQgYXMgYSBsZWZ0L3JpZ2h0IG9yIHJpZ2h0L2xlZnQgY2FyZCB1c2luZyB0aGUgbW9kaWZpZXIgY2xhc3Nlcy5cbiAqIFRoZSBmaWd1cmUgdGFnIGNhbiBiZSByZXBsYWNlZCBieSBvdGhlciB0YWdzIHVzaW5nIHRoZSBjbGFzcyBgY29udGVudC1jYXJkX19tZWRpYWAgaWYgZmlndXJlIGlzIG5vdCBhcHByb3ByaWF0ZS5cbiAqXG4gKiAuY29udGVudC1jYXJkLS1yaWdodCAtIExhbmRzY2FwZSBSaWdodFxuICpcbiAqIFdyYXBwZXI6IHNlY3Rpb24gc2VjdGlvbi0tbVxuICpcbiAqIE1hcmt1cDogY29udGVudC1jYXJkLnR3aWdcbiAqXG4gKiBTdHlsZSBndWlkZTogRWxlbWVudHMuY29udGVudC1jYXJkXG4gKi9cblxuQGxheWVyIGNvbXBvbmVudHMge1xuICAuY29udGVudC1jYXJkIHtcbiAgICBhbGw6IHVuc2V0O1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZTogXCJtZWRpYVwiIGF1dG8gXCJjb250ZW50XCIgMWZyIC8gMWZyO1xuICAgIGdhcDogdmFyKC0tZ2FwKTtcblxuICAgIEBjb250YWluZXIgKG1pbi13aWR0aDogdG9rZW4oXCJicmVha3BvaW50LmNvbnRlbnRDYXJkXCIpKSB7XG4gICAgICBncmlkLXRlbXBsYXRlOiBcIm1lZGlhIGNvbnRlbnRcIiAxZnIgLyAxZnIgMWZyO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogdmFyKC0tZ2FwLWwpO1xuXG4gICAgICAmIC5jb250ZW50LWNhcmRfX2NvbnRlbnQge1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAY29udGFpbmVyIChtaW4td2lkdGg6IHRva2VuKFwiYnJlYWtwb2ludC5sXCIpKSB7XG4gICAgICBnYXA6IDdyZW07XG4gICAgfVxuXG4gICAgJi5jb250ZW50LWNhcmQtLXJpZ2h0IHtcbiAgICAgIEBjb250YWluZXIgKG1pbi13aWR0aDogdG9rZW4oXCJicmVha3BvaW50LmNvbnRlbnRDYXJkXCIpKSB7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtYXJlYXM6IFwiY29udGVudCBtZWRpYVwiO1xuICAgICAgfVxuICAgIH1cblxuICAgICYgLmNvbnRlbnQtY2FyZF9fY29udGVudCB7XG4gICAgICBncmlkLWFyZWE6IGNvbnRlbnQ7XG4gICAgfVxuXG4gICAgJiA6aXMoLmNvbnRlbnQtY2FyZF9fbWVkaWEsIGZpZ3VyZSkge1xuICAgICAgZ3JpZC1hcmVhOiBtZWRpYTtcbiAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICBtYXJnaW46IGF1dG87XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBpbmxpbmUtc2l6ZTogMTAwJTtcblxuICAgICAgJiBpbWcge1xuICAgICAgICBhc3BlY3QtcmF0aW86IHZhcigtLXJhdGlvKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7XG4gICAgICAgIG9iamVjdC1maXQ6IGNvdmVyO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cblxuICAgICAgJiAuc2tlbGV0b24tLWJnIHtcbiAgICAgICAgYXNwZWN0LXJhdGlvOiB2YXIoLS1yYXRpbyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJiAubGluay1saXN0IHtcbiAgICAgIGlubGluZS1zaXplOiAxMDAlO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENvbnRlbnQgQ2FyZCBHcmlkXG4gKlxuICogQ29udGVudCBjYXJkIGdyaWQgaXMgYW4gZXhhbXBsZSBvZiBob3cgY2FyZHMgYmVoYXZlIHdpdGhpbiBhIGdyaWQgd3JhcHBlci4gSXQncyBwYXJ0IG9mIHRoZSBDb250ZW50IGNhcmQgcGFja2FnZS5cbiAqIFZpZXcgdGhlIFtDb250ZW50IENhcmQgcGFja2FnZV0oaHR0cHM6Ly9naXRodWIuY29tL3ByZXZpb3VzbmV4dC9taXh0YXBlL3RyZWUvbWFzdGVyL3BhY2thZ2VzL2NvbnRlbnQtY2FyZCkgb24gZ2l0aHViLlxuICpcbiAqIE1hcmt1cDogY29udGVudC1jYXJkLWdyaWQudHdpZ1xuICpcbiAqIFN0eWxlIGd1aWRlOiBFbGVtZW50cy5jb250ZW50LWNhcmQuZ3JpZFxuICovXG5cbkBsYXllciBjb21wb25lbnRzIHtcbiAgLmdyaWQ6aGFzKD4gKjpudGgtY2hpbGQoMik6bGFzdC1jaGlsZClcbiAgICA+IDppcyguY29udGVudC1jYXJkLCAuY29udGFpbmVyOmhhcyguY29udGVudC1jYXJkKSkge1xuICAgIC0tbWF4LWNhcmQtd2lkdGg6IDM3Y2g7XG5cbiAgICBpbmxpbmUtc2l6ZTogMTAwJTtcbiAgICBtYXgtaW5saW5lLXNpemU6IHZhcigtLW1heC1jYXJkLXdpZHRoKTtcbiAgICBtYXJnaW4taW5saW5lOiBhdXRvO1xuICB9XG59XG5cbi8qKlxuICogQ29udGVudCBDYXJkIExpbmtlZFxuICpcbiAqIEEgY29udGVudCBjYXJkIHdoZXJlIHRoZSBlbnRpcmUgY2FyZCBpcyBhIGxpbmsuXG4gKlxuICogV3JhcHBlcjogc2VjdGlvbiBzZWN0aW9uLS1tXG4gKlxuICogTWFya3VwOiBjb250ZW50LWNhcmQtbGluay50d2lnXG4gKlxuICogU3R5bGUgZ3VpZGU6IEVsZW1lbnRzLmNvbnRlbnQtY2FyZC5saW5rXG4gKi9cblxuQGxheWVyIGNvbXBvbmVudHMge1xuICBhW2hyZWZdLmNvbnRlbnQtY2FyZCB7XG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogaW5oZXJpdDtcbiAgICB9XG4gIH1cblxuICAuY29udGVudC1jYXJkLS1jbGlja2FibGUge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICY6Zm9jdXMtd2l0aGluIHtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpO1xuICAgICAgb3V0bGluZTogdmFyKC0tb3V0bGluZS13aWR0aCkgdmFyKC0tb3V0bGluZS1zdHlsZSkgdmFyKC0tb3V0bGluZS1jb2xvcik7XG4gICAgICBvdXRsaW5lLW9mZnNldDogMnB4O1xuICAgIH1cblxuICAgICYgOmlzKGFbaHJlZl0sIGJ1dHRvbikge1xuICAgICAgJjpmb2N1cy12aXNpYmxlIHtcbiAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmIGE6OmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBpbnNldC1ibG9jay1zdGFydDogMDtcbiAgICAgIGluc2V0LWlubGluZS1zdGFydDogMDtcbiAgICAgIGlubGluZS1zaXplOiAxMDAlO1xuICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICB9XG4gIH1cbn1cbiIsIi8qKlxuICogQnV0dG9uIEdyb3VwXG4gKlxuICogVmlldyB0aGUgW0J1dHRvbiBHcm91cCBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcHJldmlvdXNuZXh0L21peHRhcGUvdHJlZS9tYXN0ZXIvcGFja2FnZXMvYnV0dG9uLWdyb3VwKSBvbiBnaXRodWIuXG4gKlxuICogLmJ1dHRvbi0tZXh0cmEtc21hbGwgLSBFeHRyYSBTbWFsbCBidXR0b25zXG4gKiAuYnV0dG9uLS1zbWFsbCAtIFNtYWxsIGJ1dHRvbnNcbiAqIC5idXR0b24tLW1lZGl1bSAtIE1lZGl1bSBidXR0b25zXG4gKiAuYnV0dG9uLS1sYXJnZSAtIExhcmdlIGJ1dHRvbnNcbiAqXG4gKiBXcmFwcGVyOiBzZWN0aW9uIHNlY3Rpb24tLW1cbiAqXG4gKiBNYXJrdXA6IGJ1dHRvbi1ncm91cC50d2lnXG4gKlxuICogRGVmYXVsdDogZmFsc2VcbiAqXG4gKiBTdHlsZSBndWlkZTogRWxlbWVudHMuYnV0dG9ucy5idXR0b24tZ3JvdXBcbiAqL1xuQGxheWVyIGVsZW1lbnRzIHtcbiAgLmJ1dHRvbi1ncm91cCB7XG4gICAgZGlzcGxheTogZmxleDtcblxuICAgICYgLmJ1dHRvbiB7XG4gICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgbWFyZ2luLWlubGluZS1lbmQ6IDFweDtcblxuICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci1zdGFydC1zdGFydC1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtbCk7XG4gICAgICAgIGJvcmRlci1lbmQtc3RhcnQtcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLWwpO1xuICAgICAgfVxuXG4gICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItc3RhcnQtZW5kLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cy1sKTtcbiAgICAgICAgYm9yZGVyLWVuZC1lbmQtcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLWwpO1xuICAgICAgICBtYXJnaW4taW5saW5lLWVuZDogMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8qKlxuICogQnV0dG9uIEljb25cbiAqXG4gKlxuICogVmlldyB0aGUgW0J1dHRvbiBJY29uIHBhY2thZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9wcmV2aW91c25leHQvbWl4dGFwZS90cmVlL21hc3Rlci9wYWNrYWdlcy9idXR0b24taWNvbikgb24gZ2l0aHViLlxuICogSWNvbnMgY2FuIGJlIHVzZWQgaW4gYnV0dG9ucyBidXQgd2lsbCBuZWVkIHRvIGhhdmUgdGhlaXIgZm9yZWdyb3VuZCBjb2xvciBzdHlsZWQgdG8gYmUgdmlzaWJsZSBvdmVyIHRoZSBidXR0b25zIGJhY2tncm91bmQgY29sb3IgYXMgd2VsbCBhcyBtYXRjaCB0aGUgdGV4dCBjb2xvci5cbiAqXG4gKiAuYnV0dG9uLS1wcmltYXJ5Lmljb24tLWFycm93LWxlZnQgLSBMZWZ0IEFsaWduZWRcbiAqIC5idXR0b24tLXByaW1hcnkuaWNvbi0tZW5kLmljb24tLWFycm93LXJpZ2h0IC0gUmlnaHQgQWxpZ25lZFxuICpcbiAqIFdyYXBwZXI6IHNlY3Rpb24tLW1cbiAqXG4gKiBEZWZhdWx0OiBmYWxzZVxuICpcbiAqIE1hcmt1cDogYnV0dG9uLWljb24udHdpZ1xuICpcbiAqIFN0eWxlIGd1aWRlOiBFbGVtZW50cy5idXR0b25zLmJ1dHRvbi1pY29uXG4gKi9cbkBsYXllciBlbGVtZW50cyB7XG4gIC5idXR0b24uaWNvbjppcyguYnV0dG9uLS1zbWFsbCwgLmJ1dHRvbi0tZXh0cmEtc21hbGwpIHtcbiAgICAmOjpiZWZvcmUge1xuICAgICAgbWFzay1zaXplOiB2YXIoLS1zcGFjaW5nLXhzKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBCdXR0b24gSWNvbiBPbmx5XG4gKlxuICpcbiAqIFZpZXcgdGhlIFtCdXR0b24gSWNvbnMgcGFja2FnZV0oaHR0cHM6Ly9naXRodWIuY29tL3ByZXZpb3VzbmV4dC9taXh0YXBlL3RyZWUvbWFzdGVyL3BhY2thZ2VzL2J1dHRvbi1pY29uKSBvbiBnaXRodWIuXG4gKiBUaGUgYnV0dG9uIHN0aWxsIG5lZWRzIHRvIGNvbmF0aW4gdGV4dCBmb3IgU0VPIGFuZCBhY2Nlc3NpYmlsaXR5IGJ1dCBvbmx5IHRoZSBpY29uIHNob3VsZCBiZSB2aXNpYmxlLlxuICpcbiAqIC5idXR0b24tLXByaW1hcnkuYnV0dG9uLS1pY29uLW9ubHkuaWNvbi0tYXJyb3ctdXAgLSBQcmltYXJ5XG4gKiAuYnV0dG9uLS1zZWNvbmRhcnkuYnV0dG9uLS1pY29uLW9ubHkuaWNvbi0tYXJyb3ctdXAgLSBTZWNvbmRhcnlcbiAqXG4gKiBXcmFwcGVyOiBzZWN0aW9uLS1tXG4gKlxuICogRGVmYXVsdDogZmFsc2VcbiAqXG4gKiBNYXJrdXA6IGJ1dHRvbi1pY29uLnR3aWdcbiAqXG4gKiBTdHlsZSBndWlkZTogRWxlbWVudHMuYnV0dG9ucy5idXR0b24taWNvbi1vbmx5XG4gKi9cblxuQGxheWVyIGVsZW1lbnRzIHtcbiAgLmJ1dHRvbi0taWNvbi1vbmx5IHtcbiAgICBpbmxpbmUtc2l6ZTogdmFyKC0tc3BhY2luZy14bCk7XG4gICAgYmxvY2stc2l6ZTogdmFyKC0tc3BhY2luZy14bCk7XG4gICAgcGFkZGluZzogMDtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLXJvdW5kKTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGZsZXgtd3JhcDogd3JhcDtcblxuICAgICY6OmJlZm9yZSB7XG4gICAgICBpbmxpbmUtc2l6ZTogMTAwJTtcbiAgICAgIGJsb2NrLXNpemU6IDEwMCU7XG4gICAgICBtYXNrLXNpemU6IHZhcigtLXNwYWNpbmctcyk7XG4gICAgfVxuXG4gICAgJi5idXR0b24tLWxhcmdlIHtcbiAgICAgIGlubGluZS1zaXplOiB2YXIoLS1zcGFjaW5nLXh4bCk7XG4gICAgICBibG9jay1zaXplOiB2YXIoLS1zcGFjaW5nLXh4bCk7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgIH1cblxuICAgICYuYnV0dG9uLS1zbWFsbCB7XG4gICAgICBpbmxpbmUtc2l6ZTogdmFyKC0tc3BhY2luZy1sKTtcbiAgICAgIGJsb2NrLXNpemU6IHZhcigtLXNwYWNpbmctbCk7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgIH1cblxuICAgICYuYnV0dG9uLS1leHRyYS1zbWFsbCB7XG4gICAgICBpbmxpbmUtc2l6ZTogdmFyKC0tc3BhY2luZy1tKTtcbiAgICAgIGJsb2NrLXNpemU6IHZhcigtLXNwYWNpbmctbSk7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgIH1cbiAgfVxufVxuIiwiLyoqXG4gKiBEaWFsb2dcbiAqXG4gKiBWaWV3IHRoZSBbRGlhbG9nIHBhY2thZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9wcmV2aW91c25leHQvbWl4dGFwZS90cmVlL21hc3Rlci9wYWNrYWdlcy9kaWFsb2cpIG9uIGdpdGh1Yi5cbiAqXG4gKiBBIGRpYWxvZyBzaG91bGQgYmUgcGxhY2VkIGJlZm9yZSB0aGUgY2xvc2luZyA8Ym9keT4gdGFnXG4gKlxuICogV3JhcHBlcjogc2VjdGlvbi0tbVxuICpcbiAqIE1hcmt1cDogZGlhbG9nLnR3aWdcbiAqXG4gKiBTdHlsZSBndWlkZTogRWxlbWVudHMuZGlhbG9nXG4gKi9cblxuQGxheWVyIGRlZmF1bHRzIHtcbiAgbXgtZGlhbG9nIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxufVxuXG5AbGF5ZXIgY29tcG9uZW50cyB7XG4gIC5kaWFsb2cge1xuICAgIG1heC1pbmxpbmUtc2l6ZTogdmFyKC0tY29udGFpbmVyLW1heC13aWR0aCk7XG4gICAgbWF4LWJsb2NrLXNpemU6IDkwdmg7XG4gICAgb3ZlcmZsb3c6IGF1dG8gaGlkZGVuO1xuICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3VyLWJhY2tncm91bmQpO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG91ci1ib3JkZXIpO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbWFyZ2luOiBhdXRvO1xuXG4gICAgJjo6YmFja2Ryb3Age1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogaHNsYSgwZGVnIDAlIDEwMCUgLyA3NSUpO1xuICAgIH1cblxuICAgICYgLmRpYWxvZ19fY29udGVudCB7XG4gICAgICBwYWRkaW5nOiB2YXIoLS1zcGFjaW5nLXMpO1xuXG4gICAgICBAbWVkaWEgKC0tbWVkaXVtLXVwKSB7XG4gICAgICAgIHBhZGRpbmctYmxvY2s6IHZhcigtLXNwYWNpbmctbCk7XG4gICAgICAgIHBhZGRpbmctaW5saW5lOiB2YXIoLS1zcGFjaW5nLXhsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmID4gLmljb24tLWNsb3NlIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGluc2V0LWJsb2NrLXN0YXJ0OiB2YXIoLS1zcGFjaW5nLXh4cyk7XG4gICAgICBpbnNldC1pbmxpbmUtZW5kOiB2YXIoLS1zcGFjaW5nLXh4cyk7XG4gICAgICBib3JkZXI6IDA7XG4gICAgICB6LWluZGV4OiAxMTtcbiAgICB9XG5cbiAgICAmIC5mb3JtX19hY3Rpb25zIHtcbiAgICAgIGJvcmRlci1ibG9jay1zdGFydDogMXB4IHNvbGlkIHZhcigtLWNvbG91ci1ib3JkZXIpO1xuICAgICAgcGFkZGluZy1ibG9jazogdmFyKC0tc3BhY2luZy1zKTtcbiAgICAgIHBsYWNlLWNvbnRlbnQ6IGNlbnRlcjtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBEaWFsb2cgZnVsbHNjcmVlbi5cbiAqXG4gKiBEaWFsb2cgRnVsbHNjcmVlbiBpcyBwYXJ0IG9mIHRoZSBEaWFsb2cgcGFja2FnZS4gVmlldyB0aGUgW0RpYWxvZyBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcHJldmlvdXNuZXh0L21peHRhcGUvdHJlZS9tYXN0ZXIvcGFja2FnZXMvZGlhbG9nKSBvbiBnaXRodWIuXG4gKlxuICogV3JhcHBlcjogc2VjdGlvbi0tbVxuICpcbiAqIE1hcmt1cDogZGlhbG9nLWZ1bGxzY3JlZW4udHdpZ1xuICpcbiAqIFN0eWxlIGd1aWRlOiBFbGVtZW50cy5kaWFsb2cuZnVsbHNjcmVlblxuICovXG5cbkBsYXllciBjb21wb25lbnRzIHtcbiAgLmRpYWxvZy0tZnVsbHNjcmVlbiB7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICBib3JkZXI6IDA7XG4gICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgaW5saW5lLXNpemU6IDEwMCU7XG4gICAgbWF4LWlubGluZS1zaXplOiBub25lO1xuICAgIGJsb2NrLXNpemU6IDEwMCU7XG4gICAgbWF4LWJsb2NrLXNpemU6IG5vbmU7XG5cbiAgICAmW29wZW5dIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIH1cblxuICAgICYgLmRpYWxvZ19fY29udGVudCB7XG4gICAgICBtYXgtaW5saW5lLXNpemU6IHZhcigtLWNvbnRhaW5lci1tYXgtd2lkdGgpO1xuICAgICAgbWFyZ2luOiBhdXRvO1xuICAgIH1cbiAgfVxufVxuXG4vKiBQcmV2ZW50IHNjcm9sbGluZyBvbiB0aGUgYm9keS4gKi9cbi5ib2R5LS1zY3JvbGwtbG9jayxcbi5ib2R5LWRpYWxvZy0tb3BlbiB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgaW5saW5lLXNpemU6IDEwMHZ3O1xufVxuIiwiLyoqXG4gKiBDYWxsIFRvIEFjdGlvblxuICpcbiAqIFZpZXcgdGhlIFtDYWxsIFRvIEFjdGlvbiBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcHJldmlvdXNuZXh0L21peHRhcGUvdHJlZS9tYXN0ZXIvcGFja2FnZXMvY3RhKSBvbiBnaXRodWIuXG4gKlxuICogTWFya3VwOiBjdGEtZXhhbXBsZS50d2lnXG4gKlxuICogU3R5bGUgZ3VpZGU6IEVsZW1lbnRzLmN0YVxuICovXG5cbkBsYXllciBjb21wb25lbnRzIHtcbiAgLmN0YSB7XG4gICAgaW5saW5lLXNpemU6IDEwMCU7XG4gICAgbWFyZ2luLWJsb2NrOiAwO1xuICAgIG1hcmdpbi1pbmxpbmU6IGF1dG87XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgJiAuY3RhX19hY3Rpb25zIHtcbiAgICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6IHZhcigtLXNwYWNpbmctbSk7XG4gICAgfVxuICB9XG59XG5cbkBsYXllciB1dGlsaXRpZXMge1xuICAudmVydGljYWwtZmxvdy1mbGV4LmN0YSB7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgfVxufVxuIiwiLyoqXG4gKiBMaW5rIExpc3RcbiAqXG4gKiBWaWV3IHRoZSBbTGluayBMaXN0IHBhY2thZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9wcmV2aW91c25leHQvbWl4dGFwZS90cmVlL21hc3Rlci9wYWNrYWdlcy9saW5rLWxpc3QpIG9uIGdpdGh1Yi5cbiAqXG4gKiAubGluay1saXN0LS1yZXZlcnNlIC0gUmV2ZXJzZSBsYXlvdXRcbiAqXG4gKiBXcmFwcGVyOiBzZWN0aW9uIHNlY3Rpb24tLW1cbiAqXG4gKiBNYXJrdXA6IGxpbmstbGlzdC1ncmlkLnR3aWdcbiAqXG4gKiBTdHlsZSBndWlkZTogRWxlbWVudHMubGluay1saXN0XG4gKi9cblxuQGxheWVyIGVsZW1lbnRzIHtcbiAgLmxpbmstbGlzdCB7XG4gICAgLS1zcGFjaW5nOiB2YXIoLS1zcGFjaW5nLXh4eHMpO1xuICAgIC0tbWluLWhlaWdodDogdmFyKC0tc3BhY2luZy14bCk7XG5cbiAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IDA7XG5cbiAgICAmIGEge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB0ZXh0LWRlY29yYXRpb24tbGluZTogbm9uZTtcbiAgICAgIGNvbG9yOiBpbmhlcml0O1xuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uLWxpbmU6IHVuZGVybGluZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmIGxpIHtcbiAgICAgIG1pbi1ibG9jay1zaXplOiB2YXIoLS1taW4taGVpZ2h0KTtcbiAgICAgIGJvcmRlci1ibG9jay1lbmQ6IDFweCBzb2xpZCB2YXIoLS1jb2xvdXItYm9yZGVyKTtcblxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgYm9yZGVyLWJsb2NrLWVuZDogMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmIC5pY29uIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgcGFkZGluZy1ibG9jazogdmFyKC0tc3BhY2luZykgdmFyKC0tc3BhY2luZyk7XG4gICAgICBpbmxpbmUtc2l6ZTogMTAwJTtcbiAgICAgIGdhcDogdmFyKC0tc3BhY2luZy1zKTtcblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgZmxleDogMCAwIGF1dG87XG4gICAgICAgIG1hc2stcG9zaXRpb246IGxlZnQgY2VudGVyO1xuICAgICAgfVxuICAgIH1cblxuICAgICY6d2hlcmUoOm5vdCgubGluay1saXN0LS1yZXZlcnNlKSkgLmljb24ge1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBtYXNrLXBvc2l0aW9uOiByaWdodCBjZW50ZXI7XG4gICAgICAgIG9yZGVyOiAyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIFtkaXI9XCJydGxcIl0gLmxpbmstbGlzdCxcbiAgLnRyYW5zbGF0ZWQtcnRsIC5saW5rLWxpc3Qge1xuICAgICYgLmljb246OmJlZm9yZSB7XG4gICAgICBtYXNrLXBvc2l0aW9uOiBsZWZ0IGNlbnRlcjtcbiAgICB9XG5cbiAgICAmLmxpbmstbGlzdC0tcmV2ZXJzZSAuaWNvbjo6YmVmb3JlIHtcbiAgICAgIG1hc2stcG9zaXRpb246IHJpZ2h0IGNlbnRlcjtcbiAgICB9XG4gIH1cblxuICAqICsgLmxpbmstbGlzdCB7XG4gICAgbWFyZ2luLWJsb2NrLXN0YXJ0OiB2YXIoLS1zcGFjaW5nLW0pO1xuICB9XG59XG4iLCIvKipcbiAqIFRhYnNcbiAqXG4gKiBWaWV3IHRoZSBbVGFicyBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcHJldmlvdXNuZXh0L21peHRhcGUvdHJlZS9tYXN0ZXIvcGFja2FnZXMvdGFicykgb24gZ2l0aHViLlxuICogVmFyaWF0aW9ucyBhcmUgYXZhaWxhYmxlIHN1Y2ggYXMgYC50YWJzLS1jZW50ZXJlZGAgYW5kIGAudGFicy0tbGluZWRgXG4gKlxuICogVGhlIC50YWJzLS1zYW1lLWhlaWdodCBjbGFzcyB3aWxsIHByZXZlbnQgbGF5b3V0IHNoaWZ0IGFuZCBpcyByZWNvbW1lbmRlZC4gUmVtb3ZlIGl0IGZvciB0aGVcbiAqIGNsYXNzaWMgdmFyaWVkIGhlaWdodCBwYW5lbHMuXG4gKlxuICogLnRhYnMtLWxpbmVkIC0gTGluZWRcbiAqXG4gKiBXcmFwcGVyOiBzZWN0aW9uIHNlY3Rpb24tLW1cbiAqXG4gKiBEZWZhdWx0OiBmYWxzZVxuICpcbiAqIE1hcmt1cDogdGFicy50d2lnXG4gKlxuICogU3R5bGUgZ3VpZGU6IEVsZW1lbnRzLnRhYnNcbiAqL1xuXG5AbGF5ZXIgY29tcG9uZW50cyB7XG4gIC50YWJzIHtcbiAgICAtLXRhYi1taW4td2lkdGg6IDA7XG5cbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAmIC50YWJfX2xpc3Qge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIGlubGluZS1zaXplOiAxMDAlO1xuICAgICAgbWFyZ2luLWJsb2NrOiAwO1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG5cbiAgICAgIEBtZWRpYSAoLS1tZWRpdW0tZG93bikge1xuICAgICAgICAmLnRhYl9fbGlzdC0tb3BlbiB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgQG1lZGlhICgtLW1lZGl1bS11cCkge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICAgIGdhcDogdmFyKC0tc3BhY2luZy14eHMpO1xuICAgICAgfVxuXG4gICAgICAmIC50YWJfX2l0ZW0ge1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICB9XG5cbiAgICAgICYgOmlzKGEsIC50YWJfX2FuY2hvcikge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogdmFyKC0tb3V0bGluZS1vZmZzZXQpO1xuICAgICAgICBtaW4taW5saW5lLXNpemU6IHZhcigtLXRhYi1taW4td2lkdGgpO1xuXG4gICAgICAgICZbYXJpYS1zZWxlY3RlZD1cInRydWVcIl0ge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG91ci1iYWNrZ3JvdW5kLXJldmVyc2UpO1xuICAgICAgICAgIGNvbG9yOiB2YXIoLS1jb2xvdXItZm9yZWdyb3VuZC1yZXZlcnNlKTtcbiAgICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbG91ci1iYWNrZ3JvdW5kLXJldmVyc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJiAudGFiX19wYW5lbCB7XG4gICAgICBpbmxpbmUtc2l6ZTogMTAwJTtcblxuICAgICAgJjppcyg6Zm9jdXMtdmlzaWJsZSwgOmZvY3VzKSB7XG4gICAgICAgIG91dGxpbmUtb2Zmc2V0OiB2YXIoLS1vdXRsaW5lLW9mZnNldCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJiAudGFic19fdG9nZ2xlIHtcbiAgICAgIGlubGluZS1zaXplOiAxMDAlO1xuXG4gICAgICBAbWVkaWEgKC0tbWVkaXVtLXVwKSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi50YWJzLS1saW5lZCB7XG4gICAgICAmIC50YWJfX2xpc3Qge1xuICAgICAgICBAbWVkaWEgKC0tbWVkaXVtLXVwKSB7XG4gICAgICAgICAgYm9yZGVyLWJsb2NrLWVuZDogMnB4IHNvbGlkIHZhcigtLWNvbG91ci1iYWNrZ3JvdW5kLXJldmVyc2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICYgLnRhYl9faXRlbSB7XG4gICAgICAgICYgOmlzKGEsIC50YWJfX2FuY2hvcikge1xuICAgICAgICAgIGJvcmRlci1ibG9jay1lbmQ6IDFweCBzb2xpZCB2YXIoLS1jb2xvdXItYmFja2dyb3VuZC1yZXZlcnNlKTtcblxuICAgICAgICAgIEBtZWRpYSAoLS1tZWRpdW0tdXApIHtcbiAgICAgICAgICAgIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWNvbG91ci1iYWNrZ3JvdW5kLXJldmVyc2UpO1xuICAgICAgICAgICAgYm9yZGVyLWJsb2NrLWVuZDogMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmIC5idXR0b24ge1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgICAgbWFyZ2luLWJsb2NrLWVuZDogMDtcblxuICAgICAgICAgIEBtZWRpYSAoLS1tZWRpdW0tdXApIHtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpIHZhcigtLWJvcmRlci1yYWRpdXMpIDAgMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLnRhYnMtLWNlbnRlcmVkIHtcbiAgICAgICYgLnRhYl9fbGlzdCB7XG4gICAgICAgIHBsYWNlLWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLnRhYnMtLXNhbWUtaGVpZ2h0IHtcbiAgICAgIGRpc3BsYXk6IGdyaWQ7XG5cbiAgICAgICYgLnRhYl9fcGFuZWwge1xuICAgICAgICBncmlkLWNvbHVtbi1zdGFydDogMTtcbiAgICAgICAgZ3JpZC1yb3ctc3RhcnQ6IDI7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLWluLW91dDtcblxuICAgICAgICAmW2hpZGRlbl0ge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgei1pbmRleDogMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLyoqXG4gKiBNZXNzYWdlc1xuICpcbiAqIFZpZXcgdGhlIFtNZXNzYWdlcyBwYWNrYWdlXShodHRwczovL2dpdGh1Yi5jb20vcHJldmlvdXNuZXh0L21peHRhcGUvdHJlZS9tYXN0ZXIvcGFja2FnZXMvbWVzc2FnZSkgb24gZ2l0aHViLlxuICpcbiAqIC5tZXNzYWdlLS1pbmZvLmljb24uaWNvbi0taW5mbyAtIEluZm9cbiAqIC5tZXNzYWdlLS1zdWNjZXNzLmljb24uaWNvbi0tc3VjY2VzcyAtIFN1Y2Nlc3NcbiAqIC5tZXNzYWdlLS1lcnJvci5pY29uLmljb24tLWVycm9yIC0gRXJyb3JcbiAqIC5tZXNzYWdlLS13YXJuaW5nLmljb24uaWNvbi0td2FybmluZyAtIFdhcm5pbmdcbiAqXG4gKiBXcmFwcGVyOiBzZWN0aW9uIHNlY3Rpb24tLW1cbiAqXG4gKiBNYXJrdXA6IG1lc3NhZ2VzLnR3aWdcbiAqXG4gKiBTdHlsZSBndWlkZTogRWxlbWVudHMubWVzc2FnZXNcbiAqL1xuXG5AbGF5ZXIgZWxlbWVudHMge1xuICAubWVzc2FnZSB7XG4gICAgLS1iYWNrZ3JvdW5kOiB2YXIoLS1jb2xvdXItYmFja2dyb3VuZC1hbHQpO1xuICAgIC0tZm9yZWdyb3VuZDogdmFyKC0tY29sb3VyLWZvcmVncm91bmQpO1xuXG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBnYXA6IHZhcigtLWdhcC1zKTtcbiAgICBwYWRkaW5nLWJsb2NrOiB2YXIoLS1zcGFjaW5nLXh4cyk7XG4gICAgcGFkZGluZy1pbmxpbmU6IHZhcigtLXNwYWNpbmctcyk7XG4gICAgYm9yZGVyOiAxcHggc29saWQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmFja2dyb3VuZCk7XG4gICAgY29sb3I6IHZhcigtLWZvcmVncm91bmQpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpO1xuXG4gICAgJjppcygubWVzc2FnZS0taGFzLWNsb3NlLCA6aGFzKC5pY29uLS1jbG9zZSkpIHtcbiAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byBtaW4tY29udGVudDtcbiAgICAgIGdyaWQtdGVtcGxhdGUtYXJlYXM6IFwiY29udGVudCBjbG9zZVwiO1xuICAgIH1cblxuICAgICYuaWNvbiB7XG4gICAgICAtLWljb24tc2l6ZTogMS4yNXJlbTtcblxuICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW4tY29udGVudCBhdXRvO1xuICAgICAgZ3JpZC10ZW1wbGF0ZS1hcmVhczogXCJpY29uIGNvbnRlbnRcIjtcblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgZ3JpZC1hcmVhOiBpY29uO1xuICAgICAgICBibG9jay1zaXplOiB2YXIoLS1pY29uLXNpemUpO1xuICAgICAgICBpbmxpbmUtc2l6ZTogdmFyKC0taWNvbi1zaXplKTtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICAgICAgfVxuXG4gICAgICAmOmhhcyguaWNvbi0tY2xvc2UpIHtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW4tY29udGVudCBhdXRvIG1pbi1jb250ZW50O1xuICAgICAgICBncmlkLXRlbXBsYXRlLWFyZWFzOiBcImljb24gY29udGVudCBjbG9zZVwiO1xuICAgICAgfVxuICAgIH1cblxuICAgICYgLm1lc3NhZ2VfX2NvbnRlbnQge1xuICAgICAgZ3JpZC1hcmVhOiBjb250ZW50O1xuICAgIH1cblxuICAgICYubWVzc2FnZS0tc3RhdHVzLFxuICAgICYubWVzc2FnZS0taW5mbyB7XG4gICAgICAtLWZvcmVncm91bmQ6IHZhcigtLWNvbG91ci1pbmZvLWZvcmVncm91bmQpO1xuICAgICAgLS1iYWNrZ3JvdW5kOiB2YXIoLS1jb2xvdXItaW5mby1iYWNrZ3JvdW5kKTtcbiAgICB9XG5cbiAgICAmLm1lc3NhZ2UtLXN1Y2Nlc3Mge1xuICAgICAgLS1mb3JlZ3JvdW5kOiB2YXIoLS1jb2xvdXItc3VjY2Vzcy1mb3JlZ3JvdW5kKTtcbiAgICAgIC0tYmFja2dyb3VuZDogdmFyKC0tY29sb3VyLXN1Y2Nlc3MtYmFja2dyb3VuZCk7XG4gICAgfVxuXG4gICAgJi5tZXNzYWdlLS1lcnJvciB7XG4gICAgICAtLWZvcmVncm91bmQ6IHZhcigtLWNvbG91ci1lcnJvci1mb3JlZ3JvdW5kKTtcbiAgICAgIC0tYmFja2dyb3VuZDogdmFyKC0tY29sb3VyLWVycm9yLWJhY2tncm91bmQpO1xuICAgIH1cblxuICAgICYubWVzc2FnZS0td2FybmluZyB7XG4gICAgICAtLWZvcmVncm91bmQ6IHZhcigtLWNvbG91ci13YXJuaW5nLWZvcmVncm91bmQpO1xuICAgICAgLS1iYWNrZ3JvdW5kOiB2YXIoLS1jb2xvdXItd2FybmluZy1iYWNrZ3JvdW5kKTtcbiAgICB9XG5cbiAgICAmIC5tZXNzYWdlX19jbG9zZSB7XG4gICAgICBncmlkLWFyZWE6IGNsb3NlO1xuICAgICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgIGlubGluZS1zaXplOiB2YXIoLS1zcGFjaW5nLXMpO1xuICAgICAgYmxvY2stc2l6ZTogdmFyKC0tc3BhY2luZy1zKTtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBib3JkZXI6IDA7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICB9XG4gIH1cbn1cbiIsIi8qIHN0eWxlbGludC1kaXNhYmxlIHNlbGVjdG9yLWNsYXNzLXBhdHRlcm4sIGZ1bmN0aW9uLW5vLXVua25vd24sIHByb3BlcnR5LW5vLXVua25vd24sIHNlbGVjdG9yLXBzZXVkby1jbGFzcy1uby11bmtub3duICovXG5cbi8qKlxuICogRHJvcCBtZW51XG4gKlxuICogKipFeHBlcmltZW50YWwqKiBVc2luZyBuZXcgQ1NTIEFuY2hvcmluZyBhbmQgUG9wb3ZlciBBUEkncywgcmVxdWlyZXMgSlMgcG9seWZpbGwuXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Qb3BvdmVyX0FQSSNicm93c2VyX2NvbXBhdGliaWxpdHlcbiAqXG4gKiBXcmFwcGVyOiBzZWN0aW9uLS1tXG4gKlxuICogTWFya3VwOiBkcm9wLW1lbnUudHdpZ1xuICpcbiAqIFN0eWxlIGd1aWRlOiBFbGVtZW50cy5kcm9wLW1lbnVcbiAqL1xuXG4vKipcbiAqIERyb3AgbWVudSAoZXhwYW5kYWJsZSlcbiAqXG4gKiBXcmFwIHRoZSBkcm9wIG1lbnUgaW4gYSAuY29udGFpbmVyIHRvIGFjdGl2YXRlIHRoZSBAY29udGFpbmVyIHF1ZXJ5IHZlcnNpb24sIHRoYXQgZXhwYW5kc1xuICogYW5kIG1ha2VzIGFsbCBvcHRpb25zIHZpc2libGUgd2hlbiB0aGVyZSBpcyBzdWZmaWNpZW50IGNvbnRhaW5lciBzcGFjZS5cbiAqXG4gKiBTZXQgdGhlIGRlc2lnbiB0b2tlbiBgYnJlYWtwb2ludC5kcm9wTWVudWAgdG8gY2hhbmdlIHRoZSBwb2ludCB0aGUgY29udGFpbmVyIHF1ZXJ5IGlzIHRyaWdnZXJlZC5cbiAqXG4gKiBOb3RlOiB0aGlzIGlzIGV4cGVyaW1lbnRhbCwgU2FmYXJpIGhhcyBzb21lIGlzc3VlcyBjb21iaW5pbmcgdGhlIGNvbnRhaW5lciBxdWVyeSB3aXRoIHRoZVxuICogYW5jaG9yIHBvc2l0aW9uaW5nIEpTIHBvbHlmaWxsLlxuICpcbiAqIFdyYXBwZXI6IHNlY3Rpb24tLW1cbiAqXG4gKiBNYXJrdXA6IGRyb3AtbWVudS1leHBhbmRhYmxlLnR3aWdcbiAqXG4gKiBTdHlsZSBndWlkZTogRWxlbWVudHMuZHJvcC1tZW51LmV4cGFuZGFibGVcbiAqL1xuXG5AbGF5ZXIgY29tcG9uZW50cyB7XG4gIC5kcm9wLW1lbnVfX3RyaWdnZXI6aXMoW3BvcG92ZXJ0YXJnZXRdKSB7XG4gICAgYW5jaG9yLW5hbWU6IC0tZHJvcC1tZW51O1xuXG4gICAgJjppcyhbYXJpYS1leHBhbmRlZD1cInRydWVcIl0pOjpiZWZvcmUge1xuICAgICAgcm90YXRlOiAxODBkZWc7XG4gICAgfVxuICB9XG5cbiAgLmRyb3AtbWVudTppcyhbcG9wb3Zlcl0pIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3VyLWJhY2tncm91bmQpO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvdXItZm9yZWdyb3VuZCk7XG4gICAgbWFyZ2luOiAwO1xuXG4gICAgQHN1cHBvcnRzIChpbmxpbmUtc2l6ZTogYW5jaG9yLXNpemUod2lkdGgpKSB7XG4gICAgICBwb3NpdGlvbi1hbmNob3I6IC0tZHJvcC1tZW51O1xuICAgICAgaW5zZXQtYXJlYTogYm90dG9tO1xuICAgICAgcG9zaXRpb24tdHJ5LW9wdGlvbnM6IGZsaXAtYmxvY2s7XG4gICAgICBtaW4taW5saW5lLXNpemU6IGFuY2hvci1zaXplKHdpZHRoKTtcbiAgICB9XG5cbiAgICAmOnBvcG92ZXItb3BlbiB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICB9XG5cbiAgICAmIGJ1dHRvbiB7XG4gICAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG4gICAgICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgICBib3JkZXI6IHVuc2V0O1xuICAgICAgdGV4dC1hbGlnbjogc3RhcnQ7XG5cbiAgICAgICZbYXJpYS1jaGVja2VkPVwidHJ1ZVwiXSB7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbi1saW5lOiB1bmRlcmxpbmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJiA6aXMoYSwgYnV0dG9uKSB7XG4gICAgICBwYWRkaW5nLWJsb2NrOiB2YXIoLS1zcGFjaW5nLXh4eHMpO1xuICAgICAgcGFkZGluZy1pbmxpbmU6IHZhcigtLXNwYWNpbmcteHMpO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgbWluLWlubGluZS1zaXplOiAxNWNoO1xuICAgIH1cbiAgfVxuXG4gIC5jb250YWluZXIge1xuICAgICYgPiAuZHJvcC1tZW51X190cmlnZ2VyOmlzKFtwb3BvdmVydGFyZ2V0XSkge1xuICAgICAgQGNvbnRhaW5lciBkcm9wLW1lbnUgKG1pbi13aWR0aDogdG9rZW4oXCJicmVha3BvaW50LmRyb3BNZW51XCIpKSB7XG4gICAgICAgIGFsbDogdW5zZXQ7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtYm9sZCk7XG5cbiAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJiA+IC5kcm9wLW1lbnU6aXMoW3BvcG92ZXJdKSB7XG4gICAgICBAY29udGFpbmVyIGRyb3AtbWVudSAobWluLXdpZHRoOiB0b2tlbihcImJyZWFrcG9pbnQuZHJvcE1lbnVcIikpIHtcbiAgICAgICAgYWxsOiB1bnNldDtcblxuICAgICAgICAmIDppcyhhLCBidXR0b24pIHtcbiAgICAgICAgICBtaW4taW5saW5lLXNpemU6IGF1dG87XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8qKlxuICogVXRpbGl0eVxuICpcbiAqIFN0eWxlIGd1aWRlOiBiYXNlLnV0aWxpdHlcbiAqL1xuXG4vKipcbiAqIFZpc3VhbGx5IGhpZGRlblxuICpcbiAqIFZpc3VhbGx5IEhpZGRlbiBpcyBkZWZpbmVkIGluIHRoZSBCYXNlIHBhY2thZ2UuIFZpZXcgdGhlIFtCYXNlIHBhY2thZ2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9wcmV2aW91c25leHQvbWl4dGFwZS90cmVlL21hc3Rlci9wYWNrYWdlcy9iYXNlKSBvbiBnaXRodWIuXG4gKlxuICogTWFya3VwOiB2aXN1YWxseS1oaWRkZW4udHdpZ1xuICpcbiAqIFN0eWxlIGd1aWRlOiBiYXNlLnV0aWxpdHkudmlzdWFsbHktaGlkZGVuXG4gKi9cblxuQGxheWVyIHV0aWxpdGllcyB7XG4gIC5oaWRkZW4sXG4gIC52aXN1YWxseS1oaWRkZW4sXG4gIC5zci1vbmx5IHtcbiAgICBjbGlwLXBhdGg6IHBvbHlnb24oMCAwLCAwIDAsIDAgMCwgMCAwKTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgLnZpc3VhbGx5LWhpZGRlbi52aXN1YWxseS1oaWRkZW4tLWZvY3Vzc2FibGU6Zm9jdXMsXG4gIC5zci1vbmx5LnNyLW9ubHktLWZvY3Vzc2FibGU6Zm9jdXMge1xuICAgIGNsaXAtcGF0aDogbm9uZTtcbiAgICBwb3NpdGlvbjogcmV2ZXJ0ICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luOiByZXZlcnQ7XG4gICAgcGFkZGluZzogcmV2ZXJ0O1xuICB9XG59XG5cbi8qKlxuICogUmVzcG9uc2l2ZSB1dGlsaXR5IGNsYXNzXG4gKlxuICogUmVzcG9uc2l2ZSBVdGlsaXR5IENsYXNzIGlzIGRlZmluZWQgaW4gdGhlIEJhc2UgcGFja2FnZS4gVmlldyB0aGUgW0Jhc2UgcGFja2FnZV0oaHR0cHM6Ly9naXRodWIuY29tL3ByZXZpb3VzbmV4dC9taXh0YXBlL3RyZWUvbWFzdGVyL3BhY2thZ2VzL2Jhc2UpIG9uIGdpdGh1Yi5cbiAqXG4gKiBNYXJrdXA6IG9ubHkudHdpZ1xuICpcbiAqIFN0eWxlIGd1aWRlOiBiYXNlLnV0aWxpdHkub25seVxuICovXG5cbkBsYXllciB1dGlsaXRpZXMge1xuICAubW9iaWxlLW9ubHkge1xuICAgIEBtZWRpYSAoLS1sYXJnZS11cCkge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAuZGVza3RvcC1vbmx5LFxuICAuZ2xvYmFsIC5kZXNrdG9wLW9ubHkge1xuICAgIEBtZWRpYSAoLS1sYXJnZS1kb3duKSB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxuXG4gIC5wcmludC1vbmx5IHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG5cbiAgICBAbWVkaWEgcHJpbnQge1xuICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgICB9XG4gIH1cblxuICAuc2NyZWVuLW9ubHkge1xuICAgIEBtZWRpYSBwcmludCB7XG4gICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogU2tlbGV0b24gYW5kIGxvYWRpbmcgVUkuXG4gKi9cbkBsYXllciB1dGlsaXRpZXMge1xuICAuc2tlbGV0b24ge1xuICAgIC0tYmFja2dyb3VuZDogaHNsKDBkZWcgMCUgMCUgLyAxMCUpO1xuICAgIC0tb3BhY2l0eS1sb3c6IDAuNTtcbiAgICAtLW9wYWNpdHktaGlnaDogMC43NTtcbiAgICAtLWR1cmF0aW9uOiAxNTAwbXM7XG5cbiAgICBhbmltYXRpb246IHB1bHNlIHZhcigtLWR1cmF0aW9uKSBlYXNlIGluZmluaXRlO1xuICB9XG5cbiAgLnNrZWxldG9uLS1iZyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmFja2dyb3VuZCk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7XG4gICAgei1pbmRleDogLTE7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBwdWxzZSB7XG4gIDAlIHtcbiAgICBvcGFjaXR5OiB2YXIoLS1vcGFjaXR5LWxvdyk7XG4gIH1cblxuICA3NSUge1xuICAgIG9wYWNpdHk6IHZhcigtLW9wYWNpdHktaGlnaCk7XG4gIH1cblxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiB2YXIoLS1vcGFjaXR5LWxvdyk7XG4gIH1cbn1cbiJdfQ== */