/* ==========================================================================
   HubRaiz — Main Stylesheet Entry Point
   Imports all CSS partials in documented architecture order.
   PostCSS + postcss-import bundles this into dist/style.css at build time.
   ========================================================================== */

/* 1. Self-hosted font faces */

/* ==========================================================================
   Self-hosted typography
   IBM Plex files are installed from @fontsource during npm install and copied
   into /assets/fonts by Eleventy at build time. No runtime Google Fonts calls.
   ========================================================================== */

@font-face {
  font-family: "IBM Plex Serif";
  src: url("/assets/fonts/ibm-plex-serif/ibm-plex-serif-latin-600-normal.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "IBM Plex Serif";
  src: url("/assets/fonts/ibm-plex-serif/ibm-plex-serif-latin-700-normal.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "IBM Plex Sans";
  src: url("/assets/fonts/ibm-plex-sans/ibm-plex-sans-latin-400-normal.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "IBM Plex Sans";
  src: url("/assets/fonts/ibm-plex-sans/ibm-plex-sans-latin-500-normal.woff2") format("woff2");
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "IBM Plex Sans";
  src: url("/assets/fonts/ibm-plex-sans/ibm-plex-sans-latin-500-italic.woff2") format("woff2");
  font-weight: 500;
  font-style: italic;
  font-display: swap;
}

@font-face {
  font-family: "IBM Plex Sans";
  src: url("/assets/fonts/ibm-plex-sans/ibm-plex-sans-latin-600-normal.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "IBM Plex Sans";
  src: url("/assets/fonts/ibm-plex-sans/ibm-plex-sans-latin-700-normal.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

/* 2. Design tokens — MUST follow fonts; all component partials depend on these */

/* ==========================================================================
   1. DESIGN TOKENS
   CSS custom properties organized by role:
   
   ┌─ Palette Primitives ─────────────────────────────────────┐
   │  Surface, Neutral — base color scales                    │
   │  Feed semantic tokens; also consumed directly by some    │
   │  component overrides (especially .dark selector blocks)  │
   └──────────────────────────────────────────────────────────┘
   ┌─ Accent System ──────────────────────────────────────────┐
   │  --accent-primary / --accent-secondary + variants        │
   │  SWAP between default and alt themes                     │
   └──────────────────────────────────────────────────────────┘
   ┌─ Semantic Tokens ────────────────────────────────────────┐
   │  --bg-primary, --text-*, --glass-*, --pill-*, etc.      │
   │  Override in .dark / [alt] / [alt].dark / @media        │
   └──────────────────────────────────────────────────────────┘
   ┌─ Scheme Tokens ──────────────────────────────────────────┐
   │  --scheme-* — context-specific overrides per theme       │
   │  Each defined in :root and overridden per theme block    │
   └──────────────────────────────────────────────────────────┘
   ┌─ Structural Tokens ──────────────────────────────────────┐
   │  --chrome-shadow-*, --glass-inset-*, --ui-surface-*     │
   │  --toggle-*, --drawer-close-*, --btn-inset-*            │
   │  Shadows, highlights, translucent overlays               │
   └──────────────────────────────────────────────────────────┘
   
   Theme structure:
     :root                         → Default (Orange) light mode
     .dark                         → Default (Orange) dark mode
     [data-color-scheme="alt"]     → Alt (Olive) light mode
     [data-color-scheme="alt"].dark→ Alt (Olive) dark mode
     @media(prefers-color-scheme:dark) → Non-JS dark fallback
   ========================================================================== */

:root {
  color-scheme: light;

  /* Surface palette — base canvas tones for backgrounds & light text on dark */
  --surface-50: #FAF7F2;
  --surface-100: #F5F0E8;
  --surface-200: #EBE3D5;
  --surface-300: #D4C8B4;
  --surface-400: #B8A68E;

  /* Neutral palette — text, borders, and structural tones */
  --neutral-200: #D1BFA8;
  --neutral-300: #B09A7E;
  --neutral-400: #8A7260;
  --neutral-500: #6E5A48;
  --neutral-600: #5C4A3A;
  --neutral-700: #4A3A2E;
  --neutral-800: #3D2E22;
  --neutral-900: #2C1810;

  /* Glass card/panel shadow tokens */
  --card-shadow:       rgba(44, 24, 16, 0.04);
  --card-shadow-hover: rgba(255, 92, 0, 0.08);

  /* Marketplace colors */
  --ml-yellow: #FFE600;
  --ml-yellow-hover: #FFD700;
  --ml-navy: #2D3277;
  --ml-shadow: rgba(255, 230, 0, 0.25);
  --ml-shadow-hover: rgba(255, 230, 0, 0.35);
  --shopee-orange: #EE4D2D;
  --shopee-orange-hover: #D73211;
  --shopee-shadow: rgba(238, 77, 45, 0.25);
  --shopee-shadow-hover: rgba(238, 77, 45, 0.35);

  /* Fonts */
  --font-heading: "IBM Plex Serif", Georgia, "Times New Roman", Cambria, "Noto Serif", serif;
  --font-body: "IBM Plex Sans", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  --font-ui: "IBM Plex Sans", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;

  /* Transition presets */
  --ease-out: cubic-bezier(0.22, 1, 0.36, 1);
  --duration-normal: 0.2s;
  --duration-slow: 0.3s;

  /* Layer scale — active panels must sit above fixed controls and catalog chrome. */
  --layer-floating-control: 50;
  --layer-active-panel-backdrop: 1000;
  --layer-active-panel: 1001;

  /* Accent system — primary accent with secondary as fallback */
  --accent-primary: #FF5C00;
  --accent-primary-hover: #E94F00;
  --accent-primary-light: rgba(255, 92, 0, 0.12);
  --accent-primary-border: rgba(255, 92, 0, 0.25);
  --accent-primary-shadow: rgba(255, 92, 0, 0.25);

  --accent-secondary: #636B2F;
  --accent-secondary-light: rgba(99, 107, 47, 0.12);
  --accent-secondary-border: rgba(99, 107, 47, 0.25);

  /* Semantic colors — light mode defaults */
  --bg-primary: #F5F0E8;
  --text-primary: #2C1810;
  --text-secondary: #5C4A3A;
  --text-muted: #725E4C;
  --text-placeholder: rgba(92, 74, 58, 0.4);
  --glass-bg: rgba(255, 255, 255, 0.85);
  --glass-border: rgba(255, 92, 0, 0.14);
  --glass-hover-bg: rgba(255, 255, 255, 0.92);
  --glass-hover-border: rgba(255, 92, 0, 0.2);
  --filter-bar-bg: rgba(250, 247, 242, 0.88);
  --filter-bar-border: rgba(255, 255, 255, 0.5);
  --search-bg: rgba(255, 255, 255, 0.8);
  --search-border: rgba(255, 255, 255, 0.5);
  --search-focus-bg: rgba(255, 255, 255, 0.92);
  --search-focus-border: rgba(255, 92, 0, 0.4);
  --pill-inactive-bg: rgba(255, 255, 255, 0.7);
  --pill-inactive-border: rgba(255, 255, 255, 0.5);
  --pill-inactive-text: #5C4A3A;
  --drawer-panel-bg: rgba(250, 247, 242, 0.92);
  --drawer-border: rgba(255, 255, 255, 0.5);
  --drawer-overlay-bg: rgba(44, 24, 16, 0.4);
  --desc-fade: rgba(255, 255, 255, 0.85);
  --footer-bg: #2C1810;
  --footer-text: #E5DFD4;
  --footer-muted: rgba(200, 190, 175, 0.75);
  --scheme-footer-accent: #FF8C5A;
  --scheme-footer-icon: rgba(255, 140, 90, 0.65);
  --scheme-footer-border: rgba(255, 140, 90, 0.12);
  --footer-disclaimer: rgba(200, 190, 175, 0.8);

  /* Scheme-specific accent tokens — default (orange) theme */
  --scheme-hero-tagline: #FF5C00;
  /* Tag, pill, badge tokens use --accent-primary family directly
     so they swap automatically with the active color scheme. */
  --scheme-badge-bg: linear-gradient(135deg, var(--accent-primary) 0%, var(--accent-primary-hover) 100%);
  --scheme-scroll-thumb: rgba(255, 92, 0, 0.4);
  --scheme-focus-ring: #FF5C00;
  --scheme-hero-logo-bg: rgba(255, 92, 0, 0.06);
  --scheme-hero-logo-bg-dark: rgba(255, 140, 90, 0.16);
  --scheme-hero-trust: #6E5A48;
  --scheme-hero-scroll-color: rgba(255, 92, 0, 0.6);
  --scheme-image-wrap-bg: rgba(235, 227, 213, 0.3);
  --scheme-image-wrap-bg-dark: rgba(44, 24, 16, 0.4);
  --scheme-overlay-gradient: rgba(44, 24, 16, 0.2);
  --scheme-overlay-gradient-dark: rgba(0, 0, 0, 0.2);
  --scheme-search-focus-ring: rgba(255, 92, 0, 0.08);
  --scheme-search-focus-ring-strong: rgba(255, 92, 0, 0.1);
  --scheme-trust-divider: rgba(255, 140, 90, 0.3);
  --scheme-trust-divider-dark: rgba(255, 92, 0, 0.12);
  /* Marketplace badge — subtle accent tint (footer is always dark) */
  --scheme-marketplace-badge-bg: rgba(255, 140, 90, 0.15);
  --scheme-marketplace-badge-border: rgba(255, 140, 90, 0.3);

  /* Tag hierarchy — both use accent-primary-light bg (hero icon style).
     Brand tags: full accent text + full accent border + bold = pops.
     Category tags: faded accent text + faded accent border + normal = recedes.
     No separate -dark tokens needed; accent tokens auto-swap. */
  /* ── Text on accent ────────────────────────────────────────
     Text on solid/filled accent backgrounds (skip link, CTA buttons). */
  --text-on-accent: #2C1810;

  /* ── Selection highlight ─────────────────────────────────── */
  --selection-bg-dark: rgba(255, 140, 90, 0.35);

  /* ── Glass morphism inset highlights ────────────────────────
     Subtle top-edge highlight that simulates light reflection
     on glass surfaces in light and dark modes */
  --glass-inset: rgba(255, 255, 255, 0.3);
  --glass-inset-hover: rgba(255, 255, 255, 0.4);
  --glass-inset-dark: rgba(229, 223, 212, 0.05);
  --glass-inset-dark-hover: rgba(229, 223, 212, 0.08);

  /* ── Structural shadows ─────────────────────────────────────
     Warm-tinted drop shadows for UI chrome (panels, drawers, FABs).
     Light mode uses warm brown base; dark mode uses pure black. */
  --chrome-shadow-sm: rgba(44, 24, 16, 0.05);
  --chrome-shadow-md: rgba(44, 24, 16, 0.08);
  --chrome-shadow-lg: rgba(44, 24, 16, 0.12);
  --chrome-shadow-dark: rgba(0, 0, 0, 0.2);
  --logo-drop-shadow:   rgba(0, 0, 0, 0.35);  /* hero logo glow drop-shadow */

  /* ── Translucent UI surfaces ────────────────────────────────
     Semi-transparent white overlays for circular glass elements
     (hero scroll button, trust divider, toggle FAB).
     Dark mode uses much lower opacity for subtle visibility. */
  --ui-surface-bg: rgba(255, 255, 255, 0.3);
  --ui-surface-border: rgba(255, 255, 255, 0.4);
  --ui-surface-hover-bg: rgba(255, 255, 255, 0.5);
  --ui-surface-bg-dark: rgba(255, 255, 255, 0.05);
  --ui-surface-border-dark: rgba(255, 255, 255, 0.1);
  --ui-surface-hover-bg-dark: rgba(255, 255, 255, 0.12);

  /* ── Toggle FAB surfaces ────────────────────────────────────
     The floating action button for dark/light mode has its own
     surface tokens because it uses a distinct opacity range. */
  --toggle-bg: rgba(255, 255, 255, 0.5);
  --toggle-border: rgba(255, 255, 255, 0.6);
  --toggle-bg-dark: rgba(255, 255, 255, 0.1);
  --toggle-border-dark: rgba(255, 255, 255, 0.15);

  /* ── Drawer close button ──────────────────────────────────── */
  --drawer-close-bg: rgba(250, 247, 242, 0.6);
  --drawer-close-bg-dark: rgba(255, 255, 255, 0.1);
  --drawer-close-bg-dark-hover: rgba(255, 255, 255, 0.15);

  /* ── Button inset highlights ────────────────────────────────
     Top-edge highlight for CTA-style buttons */
  --btn-inset: rgba(255, 255, 255, 0.15);
  --btn-inset-hover: rgba(255, 255, 255, 0.2);
  --ml-inset: rgba(255, 255, 255, 0.5);
  --ml-inset-hover: rgba(255, 255, 255, 0.6);

  /* ── Scheme swatch border ─────────────────────────────────── */
  --scheme-swatch-border: rgba(128, 128, 128, 0.15);

  /* ── Font-weight scale ──────────────────────────────────────
     Used by hero, footer, and other component partials. */
  --font-weight-normal: 400;
  --font-weight-medium: 500;
  --font-weight-semibold: 600;
  --font-weight-bold: 700;
  --font-weight-display: 700;
}

/* ── Dark mode tokens ──────────────────────────────────────
   These semantic token values appear TWICE intentionally:
   1. .dark { }           → JS-driven toggle (localStorage / user click)
   2. @media prefers-color-scheme: dark → Non-JS fallback when no
      .light or .dark class is present on <html>
   DO NOT deduplicate — they serve different code paths.
   When updating dark-mode values, update BOTH blocks.
   ─────────────────────────────────────────────────────── */

/* JS-driven dark mode */
.dark {
  color-scheme: dark;
  --bg-primary: #1A1816;
  --text-primary: #E5DFD4;
  --text-secondary: #D4C5B8;
  --text-muted: #B09A7E;
  --text-placeholder: rgba(200, 190, 175, 0.35);
  --glass-bg: rgba(35, 32, 28, 0.88);
  --glass-border: rgba(255, 140, 90, 0.2);
  --glass-hover-bg: rgba(45, 40, 34, 0.92);
  --glass-hover-border: rgba(255, 140, 90, 0.2);
  --filter-bar-bg: rgba(26, 24, 22, 0.92);
  --filter-bar-border: rgba(60, 55, 45, 0.5);
  --search-bg: rgba(35, 32, 28, 0.85);
  --search-border: rgba(60, 55, 45, 0.5);
  --search-focus-bg: rgba(40, 36, 30, 0.92);
  --search-focus-border: rgba(255, 140, 90, 0.4);
  --pill-inactive-bg: rgba(35, 32, 28, 0.75);
  --pill-inactive-border: rgba(60, 55, 45, 0.5);
  --pill-inactive-text: #E5DFD4;
  --drawer-panel-bg: rgba(30, 28, 24, 0.95);
  --drawer-border: rgba(60, 55, 45, 0.5);
  --drawer-overlay-bg: rgba(0, 0, 0, 0.5);
  --desc-fade: rgba(35, 32, 28, 0.85);
  --footer-bg: #131210;
  --footer-disclaimer: rgba(200, 190, 175, 0.75);

  /* Dark mode scheme token overrides */
  --scheme-hero-tagline: var(--scheme-footer-accent);

  /* Dark mode accent — lighter shade for contrast on dark bg */
  --accent-primary: #FF8C5A;
  --accent-primary-hover: #FFA070;
  --accent-primary-light: rgba(255, 140, 90, 0.15);
  --accent-primary-border: rgba(255, 140, 90, 0.3);
  --accent-primary-shadow: rgba(255, 140, 90, 0.25);
  --card-shadow-hover: rgba(255, 140, 90, 0.08);

  /* Focus ring uses lightened accent for visibility on dark bg */
  --scheme-focus-ring: var(--accent-primary);

  /* Text on solid accent backgrounds — dark tint for contrast on bright accent */
  --text-on-accent: #551F00;
}

/* Scheme override: alternate — olive-first variation */
[data-color-scheme="alt"] {
  /* Alternate olive scheme — keeps the natural-food tone available. */
  --accent-primary: #636B2F;
  --accent-primary-hover: #748038;
  --accent-primary-light: rgba(99, 107, 47, 0.15);
  --accent-primary-border: rgba(99, 107, 47, 0.25);
  --accent-primary-shadow: rgba(99, 107, 47, 0.25);
  --accent-secondary: #FF5C00;
  --accent-secondary-light: rgba(255, 92, 0, 0.12);
  --accent-secondary-border: rgba(255, 92, 0, 0.25);
  --card-shadow-hover: rgba(99, 107, 47, 0.08);
  --glass-border: rgba(99, 107, 47, 0.15);
  --glass-hover-border: rgba(99, 107, 47, 0.2);
  --search-focus-border: rgba(99, 107, 47, 0.4);

  --scheme-hero-tagline: #636B2F;
  --scheme-scroll-thumb: rgba(99, 107, 47, 0.4);
  --scheme-focus-ring: #636B2F;
  --scheme-hero-logo-bg: rgba(99, 107, 47, 0.08);
  --scheme-hero-logo-bg-dark: rgba(99, 107, 47, 0.2);
  --scheme-hero-trust: #6E5A48;
  --scheme-hero-scroll-color: rgba(99, 107, 47, 0.6);
  --scheme-footer-accent: #A8B854;
  --scheme-footer-icon: rgba(168, 184, 84, 0.6);
  --scheme-footer-border: rgba(168, 184, 84, 0.1);
  --scheme-search-focus-ring: rgba(99, 107, 47, 0.08);
  --scheme-search-focus-ring-strong: rgba(99, 107, 47, 0.1);
  --scheme-trust-divider: rgba(168, 184, 84, 0.3);
  --scheme-trust-divider-dark: rgba(99, 107, 47, 0.12);
  --scheme-marketplace-badge-bg: rgba(168, 184, 84, 0.15);
  --scheme-marketplace-badge-border: rgba(168, 184, 84, 0.3);
  --footer-disclaimer: rgba(200, 190, 175, 0.8);
  --footer-bg: #1A2110;
  --selection-bg-dark: rgba(168, 184, 84, 0.35);
  --text-on-accent: #FFFFFF;
}

[data-color-scheme="alt"].dark {
  color-scheme: dark;
  --accent-primary: #A8B854;
  --accent-primary-hover: #B8C864;
  --accent-primary-light: rgba(168, 184, 84, 0.15);
  --accent-primary-border: rgba(168, 184, 84, 0.3);
  --accent-primary-shadow: rgba(168, 184, 84, 0.25);
  --card-shadow-hover: rgba(168, 184, 84, 0.08);
  --glass-border: rgba(168, 184, 84, 0.2);
  --glass-hover-border: rgba(168, 184, 84, 0.2);
  --search-focus-border: rgba(168, 184, 84, 0.4);

  --accent-secondary: #FF8C5A;
  --accent-secondary-light: rgba(255, 140, 90, 0.15);
  --accent-secondary-border: rgba(255, 140, 90, 0.3);
  --text-secondary: #C5D4B8;

  --scheme-hero-tagline: var(--scheme-footer-accent);
  --scheme-focus-ring: var(--accent-primary);
  --footer-bg: #111A08;
  --footer-disclaimer: rgba(200, 190, 175, 0.75);
  --text-on-accent: #2C3015;
}

/* Light mode explicit opt-in — forces native controls to light scheme */
.light {
  color-scheme: light;
}

/* Non-JS dark mode fallback (prefers-color-scheme: dark).
 * NOTE: This only applies the default HubRaiz dark tokens.
 * Users who selected an alternative color scheme via JavaScript
 * (stored in localStorage as "hubraiz-color-scheme") will see the
 * default scheme if JavaScript is unavailable, since
 * data-color-scheme is set by JS at runtime.
 */
@media (prefers-color-scheme: dark) {
  /* Mirror of .dark — keep in sync. When updating dark-mode values,
     update BOTH the .dark block (JS-toggled) and this @media block (no-JS fallback). */
  :root:not(.light):not(.dark) {
    color-scheme: dark;
    --bg-primary: #1A1816;
    --text-primary: #E5DFD4;
    --text-secondary: #D4C5B8;
    --text-muted: #B09A7E;
    --text-placeholder: rgba(200, 190, 175, 0.35);
    --glass-bg: rgba(35, 32, 28, 0.88);
    --glass-border: rgba(255, 140, 90, 0.2);
    --glass-hover-bg: rgba(45, 40, 34, 0.92);
    --glass-hover-border: rgba(255, 140, 90, 0.2);
    --filter-bar-bg: rgba(26, 24, 22, 0.92);
    --filter-bar-border: rgba(60, 55, 45, 0.5);
    --search-bg: rgba(35, 32, 28, 0.85);
    --search-border: rgba(60, 55, 45, 0.5);
    --search-focus-bg: rgba(40, 36, 30, 0.92);
    --search-focus-border: rgba(255, 140, 90, 0.4);
    --pill-inactive-bg: rgba(35, 32, 28, 0.75);
    --pill-inactive-border: rgba(60, 55, 45, 0.5);
    --pill-inactive-text: #E5DFD4;
    --drawer-panel-bg: rgba(30, 28, 24, 0.95);
    --drawer-border: rgba(60, 55, 45, 0.5);
    --drawer-overlay-bg: rgba(0, 0, 0, 0.5);
    --desc-fade: rgba(35, 32, 28, 0.85);
    --footer-bg: #131210;
    --footer-disclaimer: rgba(200, 190, 175, 0.75);
    --accent-primary: #FF8C5A;
    --accent-primary-hover: #FFA070;
    --accent-primary-light: rgba(255, 140, 90, 0.15);
    --accent-primary-border: rgba(255, 140, 90, 0.3);
    --accent-primary-shadow: rgba(255, 140, 90, 0.25);
    --card-shadow-hover: rgba(255, 140, 90, 0.08);
    --scheme-hero-tagline: var(--scheme-footer-accent);
    --scheme-focus-ring: var(--accent-primary);
    --text-on-accent: #551F00;
  }
}
/* 3. Reset & base */
/* ==========================================================================
   2. RESET & BASE
   Box-sizing reset, body defaults, focus states, scrollbar, selection,
   reduced-motion, skip link
   ========================================================================== */

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

html {
  scroll-behavior: smooth;
  text-size-adjust: 100%;
  -webkit-text-size-adjust: 100%;
}

body {
  background: var(--bg-primary);
  font-family: var(--font-body);
  color: var(--text-primary);
  min-height: 100vh;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  line-height: 1.65;
  overflow-x: hidden;
  display: flex;
  flex-direction: column;
}

h1, h2, h3, h4, h5, h6 {
  font-family: var(--font-heading);
  font-weight: var(--font-weight-bold);
  line-height: 1.12;
  text-wrap: balance;
}

p { text-wrap: pretty; }

a { color: inherit; text-decoration: none; }
img { display: block; max-width: 100%; height: auto; }
button, input, textarea, select { font-family: inherit; }
button { cursor: pointer; }
ul { list-style: none; }

/* --- Utility: Hidden by default, shown via JS --- */
.is-hidden { display: none !important; }

/* --- Skip Link --- */
.skip-link {
  position: absolute;
  top: -100%;
  left: 50%;
  transform: translateX(-50%);
  background: var(--accent-primary);
  color: var(--text-on-accent);
  padding: 0.75rem 1.5rem;
  border-radius: 0 0 0.75rem 0.75rem;
  z-index: 9999;
  font-weight: 600;
  font-size: 0.875rem;
  transition: top var(--duration-normal) ease;
  text-decoration: none;
  box-shadow: 0 0 12px var(--chrome-shadow-dark);
}

.skip-link:focus {
  top: 0;
  outline: 3px solid var(--scheme-focus-ring);
  outline-offset: 2px;
}

/* --- Focus States --- */
*:focus-visible {
  outline: 3px solid var(--scheme-focus-ring);
  outline-offset: 3px;
  border-radius: 6px;
}

/* --- Scrollbar --- */
::-webkit-scrollbar { width: 8px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--scheme-scroll-thumb); border-radius: 4px; }
::-webkit-scrollbar-thumb:hover { background: var(--scheme-focus-ring); }

/* --- Selection --- */
::selection { background: var(--accent-primary-light); color: var(--neutral-900); }
.dark ::selection { background: var(--selection-bg-dark); color: var(--surface-100); }

/* --- Reduced Motion --- */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}
/* 4. Utilities (keyframes, animations, atomic helpers) */
/* ==========================================================================
   3. UTILITIES
   Keyframes, stagger delays, animation utilities,
   icon sizing, text truncation, screen-reader-only.

   The previous Tailwind-inspired atomic `u-*` utility classes were removed
   because no template, layout, or component ever consumed them. Use existing
   design tokens (`--accent-primary`, `--text-primary`, `--glass-bg`, etc.)
   directly in component CSS instead of adding new atomic utilities.
   ========================================================================== */

/* --- Keyframes --- */

@keyframes fade-in {
  from { opacity: 0; }
  to { opacity: 1; }
}

@keyframes slide-up {
  from { opacity: 0; transform: translateY(20px); }
  to { opacity: 1; transform: translateY(0); }
}

@keyframes float {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-8px); }
}

@keyframes drawer-in {
  from { transform: translateX(-100%); }
  to { transform: translateX(0); }
}

@keyframes drawer-out {
  from { transform: translateX(0); }
  to { transform: translateX(-100%); }
}

@keyframes drawer-right-in {
  from { transform: translateX(100%); }
  to { transform: translateX(0); }
}

@keyframes drawer-right-out {
  from { transform: translateX(0); }
  to { transform: translateX(100%); }
}

@keyframes sheet-in {
  from { transform: translateY(100%); }
  to { transform: translateY(0); }
}

@keyframes sheet-out {
  from { transform: translateY(0); }
  to { transform: translateY(100%); }
}

@keyframes overlay-out {
  from { opacity: 1; }
  to { opacity: 0; }
}

/* --- Stagger Delays --- */
.stagger-1 { animation-delay: 0.05s; }
.stagger-2 { animation-delay: 0.1s; }
.stagger-3 { animation-delay: 0.15s; }
.stagger-4 { animation-delay: 0.2s; }

/* --- Animation Utilities --- */
.animate-fade-in { animation: fade-in 0.6s ease-out both; }
.animate-slide-up { animation: slide-up 0.5s ease-out both; }
.animate-float { animation: float 6s ease-in-out infinite; }

/* --- Icon Sizing --- */
.btn-icon {
  width: 1rem;
  height: 1rem;
  flex-shrink: 0;
}

/* --- Text Truncation --- */
.truncate {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* --- Screen Reader Only --- */
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border-width: 0;
}
/* 5. Glass morphism */
/* ==========================================================================
   4. GLASS MORPHISM
   Glass cards, panels, marketplace buttons (btn-ml, btn-shopee)
   ========================================================================== */

/* --- Glass Card --- */
.glass-card {
  position: relative;
  background: var(--glass-bg);
  border: 1px solid var(--glass-border);
  border-radius: 1.25rem;
  box-shadow:
    0 0 8px var(--card-shadow), inset 0 0.5px 0 var(--glass-inset);
  transition: box-shadow var(--duration-slow) ease, background var(--duration-slow) ease, border-color var(--duration-slow) ease;
  contain: layout;
}

.glass-card:hover {
  background: var(--glass-hover-bg);
  box-shadow:
    0 0 16px var(--card-shadow-hover), inset 0 0.5px 0 var(--glass-inset-hover);
  border-color: var(--glass-hover-border);
}

/* --- Glass Panel --- */
.glass-panel {
  background: var(--glass-bg);
  border: 1px solid var(--glass-border);
  border-radius: 2rem;
  box-shadow:
    0 0 24px var(--card-shadow), inset 0 0.5px 0 var(--glass-inset);
  transition: box-shadow var(--duration-slow) ease, border-color var(--duration-slow) ease;
}

.glass-panel:hover {
  box-shadow:
    0 0 16px var(--card-shadow-hover), inset 0 0.5px 0 var(--glass-inset-hover);
  border-color: var(--glass-hover-border);
}

/* Dark mode: tone down the inset top-highlight for both color themes */
.dark .glass-card {
  box-shadow: 0 0 8px var(--card-shadow), inset 0 0.5px 0 var(--glass-inset-dark);
}
.dark .glass-card:hover {
  box-shadow: 0 0 16px var(--card-shadow-hover), inset 0 0.5px 0 var(--glass-inset-dark-hover);
}
.dark .glass-panel {
  box-shadow: 0 0 24px var(--card-shadow), inset 0 0.5px 0 var(--glass-inset-dark);
}
.dark .glass-panel:hover {
  box-shadow: 0 0 16px var(--card-shadow-hover), inset 0 0.5px 0 var(--glass-inset-dark-hover);
}

/* --- Shared Marketplace Button Styles --- */
.btn-ml,
.btn-shopee {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  width: 100%;
  padding: 0.875rem 1.25rem;
  border-radius: 0.875rem;
  font-family: var(--font-ui);
  font-weight: var(--font-weight-bold);
  font-size: 0.875rem;
  letter-spacing: -0.005em;
  text-decoration: none;
  min-height: 48px;
  transition: background var(--duration-normal) ease, box-shadow var(--duration-normal) ease, transform var(--duration-normal) ease;
  cursor: pointer;
  border: none;
}

.btn-ml:hover,
.btn-shopee:hover {
  transform: translateY(-2px);
}

.btn-ml:active,
.btn-shopee:active {
  transform: scale(0.98) translateY(0);
}

/* --- Mercado Livre Button --- */
.btn-ml {
  background: linear-gradient(135deg, var(--ml-yellow) 0%, var(--ml-yellow-hover) 100%);
  color: var(--ml-navy);
  box-shadow: 0 0 16px var(--ml-shadow), inset 0 1px 0 var(--ml-inset);
}

.btn-ml:hover {
  background: linear-gradient(135deg, var(--ml-yellow-hover) 0%, color-mix(in srgb, var(--ml-yellow-hover) 85%, black) 100%);
  box-shadow: 0 0 24px var(--ml-shadow-hover), inset 0 1px 0 var(--ml-inset-hover);
}

/* --- Shopee Button --- */
.btn-shopee {
  background: linear-gradient(135deg, var(--shopee-orange) 0%, var(--shopee-orange-hover) 100%);
  /* Shopee brand white text — not --text-on-accent (3rd-party brand color).
     White on #EE4D2D = 3.66:1 — passes large-text (3:1). Documented exception. */
  color: #FFFFFF;
  box-shadow: 0 0 16px var(--shopee-shadow), inset 0 1px 0 var(--btn-inset);
}

.btn-shopee:hover {
  background: linear-gradient(135deg, var(--shopee-orange-hover) 0%, color-mix(in srgb, var(--shopee-orange-hover) 85%, black) 100%);
  box-shadow: 0 0 24px var(--shopee-shadow-hover), inset 0 1px 0 var(--btn-inset-hover);
}

/* 6. Hero section */

/* ==========================================================================
   5. HERO
   Hero section layout, logo, title, tagline, CTAs, scroll indicator
   ========================================================================== */

.hero {
  position: relative;
  min-height: 100vh;
  min-height: 100dvh;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
}

.hero-dot-grid {
  position: absolute;
  inset: 0;
  opacity: 0.025;
  background-image: radial-gradient(circle at 1px 1px, var(--neutral-900) 1px, transparent 0);
  background-size: 28px 28px;
}

.dark .hero-dot-grid { opacity: 0.02; }

.hero-content {
  position: relative;
  z-index: 10;
  width: 100%;
  max-width: 52rem;
  margin: 0 auto;
  padding: 5rem 1.25rem;
}

@media (min-width: 640px) { .hero-content { padding: 7rem 2rem; } }

.hero-glass {
  padding: 2rem;
  text-align: center;
  max-width: 43rem;
  margin: 0 auto;
}

@media (min-width: 640px) { .hero-glass { padding: 3rem; } }
@media (min-width: 768px) { .hero-glass { padding: 4rem; } }

.hero-logo-wrapper {
  display: flex;
  justify-content: center;
  margin-bottom: 1.5rem;
}

.hero-logo-container {
  width: 4.75rem;
  height: 4.75rem;
  border-radius: 1.25rem;
  background: var(--scheme-hero-logo-bg);
  border: 1px solid var(--glass-border);
  box-shadow: 0 0 18px var(--chrome-shadow-sm), inset 0 0.5px 0 var(--glass-inset);
  display: flex;
  align-items: center;
  justify-content: center;
}

.dark .hero-logo-container {
  border-color: var(--glass-border);
  box-shadow: 0 0 18px var(--chrome-shadow-dark), inset 0 0.5px 0 var(--glass-inset-dark);
}

@media (min-width: 640px) {
  .hero-logo-container { width: 8rem; height: 8rem; border-radius: 1.5rem; }
}

.hero-logo-img {
  width: 80%;
  height: 80%;
  object-fit: contain;
  filter: drop-shadow(0 0 8px var(--logo-drop-shadow));
}

@media (min-width: 640px) {
  .hero-logo-img { width: 80%; height: 80%; }
}

.hero-title {
  font-size: clamp(3rem, 8vw, 5.25rem);
  font-weight: var(--font-weight-display);
  letter-spacing: -0.035em;
  line-height: 0.95;
  margin-bottom: 0.875rem;
}

.hero-title-hub { color: var(--neutral-900); }
.dark .hero-title-hub { color: var(--surface-100); }
.hero-title-raiz { color: var(--accent-primary); }

.hero-tagline {
  font-family: var(--font-ui);
  font-size: clamp(1rem, 2.4vw, 1.25rem);
  color: var(--scheme-hero-tagline);
  font-style: italic;
  font-weight: var(--font-weight-medium);
  letter-spacing: 0.005em;
  margin-bottom: 1.25rem;
}

.hero-description {
  max-width: 35rem;
  margin: 0 auto 2rem;
  line-height: 1.75;
  color: var(--neutral-600);
  font-size: 1rem;
}

.dark .hero-description { color: var(--surface-300); }

@media (min-width: 640px) { .hero-description { font-size: 1.125rem; } }

.hero-ctas {
  display: flex;
  flex-direction: column;
  gap: 0.75rem;
  justify-content: center;
  align-items: center;
}

@media (min-width: 640px) {
  .hero-ctas { flex-direction: row; gap: 1rem; }
}

.hero-ctas .btn-ml,
.hero-ctas .btn-shopee {
  width: auto;
  padding: 1rem 1.75rem;
  font-size: 1rem;
  border-radius: 0.75rem;
}

.hero-trust-hint {
  margin-top: 1.75rem;
  color: var(--scheme-hero-trust);
  font-family: var(--font-ui);
  font-size: 0.75rem;
  font-weight: var(--font-weight-medium);
  letter-spacing: 0.01em;
}

@media (min-width: 640px) { .hero-trust-hint { font-size: 0.875rem; } }
.dark .hero-trust-hint { color: var(--surface-400); }

.hero-scroll-indicator {
  position: absolute;
  bottom: 1.5rem;
  left: 50%;
  margin-left: -1.25rem;
  width: 2.5rem;
  z-index: 10;
}

@media (min-width: 640px) { .hero-scroll-indicator { bottom: 2rem; } }

.hero-scroll-btn {
  width: 2.5rem;
  height: 2.5rem;
  border-radius: 9999px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--ui-surface-bg);
  border: 1px solid var(--ui-surface-border);
  color: var(--scheme-hero-scroll-color);
  transition: background var(--duration-slow) ease, color var(--duration-slow) ease;
  cursor: pointer;
}

.dark .hero-scroll-btn {
  background: var(--ui-surface-bg-dark);
  border-color: var(--ui-surface-border-dark);
  color: var(--accent-primary);
}

.hero-scroll-btn:hover {
  color: var(--scheme-focus-ring);
  background: var(--ui-surface-hover-bg);
}

.dark .hero-scroll-btn:hover {
  color: var(--accent-primary-hover);
  background: var(--ui-surface-hover-bg-dark);
}

/* 7. Catalog (filter bar, pills, search, grid/list layout) */

/* ==========================================================================
   6. CATALOG
   Catalog section header, sticky bar, filter bar, search inputs,
   filter pills, view toggle, desktop filters, results bar, mobile summary
   ========================================================================== */

.catalog {
  padding: 2.5rem 1rem 3.5rem;
  max-width: 1600px;
  margin: 0 auto;
  position: relative;
  z-index: 10;
}

@media (min-width: 640px) {
  .catalog { padding: 4rem 1.5rem; }
}

@media (min-width: 1024px) {
  .catalog { padding-left: 2rem; padding-right: 2rem; }
}

.catalog-header {
  text-align: center;
  margin-bottom: 1.125rem;
}

@media (min-width: 640px) { .catalog-header { margin-bottom: 2rem; } }

.catalog-title {
  font-weight: var(--font-weight-bold);
  color: var(--neutral-900);
  letter-spacing: -0.02em;
  margin-bottom: 0.75rem;
  font-size: clamp(1.85rem, 4vw, 2.75rem);
}

.dark .catalog-title { color: var(--surface-100); }

@media (min-width: 640px) { .catalog-title { margin-bottom: 1rem; } }

.catalog-subtitle {
  color: var(--neutral-600);
  font-family: var(--font-ui);
  font-size: 1rem;
  line-height: 1.7;
  max-width: 42rem;
  margin: 0 auto;
}

.dark .catalog-subtitle { color: var(--surface-300); }

@media (min-width: 640px) { .catalog-subtitle { font-size: 1.125rem; } }

/* --- Sticky Bar --- */
.sticky-bar {
  position: sticky;
  top: 0;
  z-index: 30;
  margin-left: -1rem;
  margin-right: -1rem;
  padding: 0.625rem 1rem;
}

@media (min-width: 640px) {
  .sticky-bar { margin-left: -1.5rem; margin-right: -1.5rem; }
}

.sticky-bar-hidden {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transform: translateY(-6px);
  transition: opacity var(--duration-slow) ease, transform var(--duration-slow) ease, visibility 0s linear var(--duration-slow);
}

.sticky-bar-visible {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transform: translateY(0);
  transition: opacity var(--duration-slow) ease, transform var(--duration-slow) ease, visibility 0s linear 0s;
}

.sticky-bar-hidden .filter-bar {
  opacity: 0;
  transition: opacity var(--duration-slow) ease;
}

.sticky-bar-visible .filter-bar {
  opacity: 1;
  transition: opacity var(--duration-slow) ease;
}

.sticky-bar-inner {
  max-width: 48rem;
  margin: 0 auto;
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
  padding: 0.625rem 0.75rem;
  border-radius: 1rem;
}

@media (min-width: 640px) {
  .sticky-bar-inner { padding: 0.75rem; }
}

/* Controls row ── filter button + search + view toggle.
   Lives inside .sticky-bar-inner so the .filter-bar glass surface wraps both
   this row and the (conditionally visible) mobile-filters-summary row. */
.sticky-bar-controls {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  width: 100%;
}

@media (min-width: 640px) {
  .sticky-bar-controls { gap: 0.75rem; }
}

/* --- Filter Bar --- */
.filter-bar {
  background: var(--filter-bar-bg);
  border: 1px solid var(--filter-bar-border);
  box-shadow: 0 0 24px var(--chrome-shadow-sm);
}

.filter-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 20px;
  height: 20px;
  border-radius: 9999px;
  background: var(--accent-primary);
  color: var(--text-on-accent);
  font-size: 0.625rem;
  font-weight: 700;
  padding: 0 5px;
}

/* --- Filter Button --- */
.filter-btn {
  width: 2.5rem;
  height: 2.5rem;
  border-radius: 0.75rem;
  background: var(--accent-primary-light);
  border: 1px solid var(--accent-primary-border);
  color: var(--accent-primary);
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  position: relative;
  cursor: pointer;
  transition: background var(--duration-normal) ease;
}

.filter-btn:hover { background: var(--accent-primary-border); }

@media (min-width: 640px) {
  .filter-btn { width: 2.75rem; height: 2.75rem; }
}

.filter-btn-badge {
  position: absolute;
  top: -0.375rem;
  right: -0.375rem;
  min-width: 18px;
  height: 18px;
  font-size: 0.5625rem;
}

/* --- Search Field (shared component) ---
   BEM-structured search input used by both sticky bar and desktop bar.
   Variant modifiers: .search-field--sticky (compact) / .search-field--desktop (full-size)
   Eliminates the previous .sticky-search-* / .desktop-search-* duplication. */

.search-field {
  position: relative;
  flex: 1;
  min-width: 0;
}

.search-field__icon {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  color: var(--neutral-400);
  pointer-events: none;
}

.dark .search-field__icon {
  color: var(--surface-400);
}

.search-field__input {
  width: 100%;
  border-radius: 0.75rem;
  background: var(--search-bg);
  border: 1.5px solid var(--search-border);
  color: var(--text-primary);
  transition: background var(--duration-normal) ease, border-color var(--duration-normal) ease, box-shadow var(--duration-normal) ease;
}

.search-field__input::placeholder { color: var(--text-placeholder); }

.search-field__input:focus {
  outline: none;
  border-color: var(--search-focus-border);
  background: var(--search-focus-bg);
  box-shadow: 0 0 0 2px var(--scheme-search-focus-ring-strong);
}

.search-field__clear {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  background: none;
  border: none;
  color: var(--neutral-300);
  cursor: pointer;
  transition: color var(--duration-normal) ease;
}

/* SVG inside the clear button defaults to 300x150 without explicit sizing.
   Pin it to the icon size of each variant so the button stays compact. */
.search-field__clear-svg {
  display: block;
  width: 1rem;
  height: 1rem;
}

/* ── Sticky variant (compact, mobile-first) ── */
.search-field--sticky .search-field__icon {
  left: 0.75rem;
  width: 1rem;
  height: 1rem;
}

.search-field--sticky .search-field__input {
  padding: 0.5rem 0.75rem 0.5rem 2.25rem;
  font-size: 0.875rem;
}

.search-field--sticky .search-field__input:focus {
  box-shadow: 0 0 0 2px var(--scheme-search-focus-ring-strong);
}

.dark .search-field--sticky .search-field__input:focus {
  box-shadow: 0 0 0 3px var(--scheme-search-focus-ring-strong);
}

@media (min-width: 640px) {
  .search-field--sticky .search-field__input { padding: 0.625rem 0.75rem 0.625rem 2.25rem; }
}

.search-field--sticky .search-field__clear {
  right: 0.625rem;
  padding: 0.125rem;
}

.search-field--sticky .search-field__clear:hover { color: var(--neutral-500); }
.dark .search-field--sticky .search-field__clear:hover { color: var(--surface-300); }

/* ── Desktop variant (full-size, larger icons & padding) ── */
.search-field--desktop .search-field__icon {
  left: 0.875rem;
  width: 1.25rem;
  height: 1.25rem;
}

.search-field--desktop .search-field__input {
  padding: 0.625rem 1rem 0.625rem 2.75rem;
  font-size: 0.9375rem;
  border-radius: 0.875rem;
}

.search-field--desktop .search-field__input:focus {
  box-shadow: 0 0 0 3px var(--scheme-search-focus-ring);
}

.search-field--desktop .search-field__clear {
  right: 0.75rem;
  padding: 0.25rem;
}

.search-field--desktop .search-field__clear:hover { color: var(--neutral-600); }
.dark .search-field--desktop .search-field__clear:hover { color: var(--surface-200); }

/* --- Mobile Filters Summary ---
   Rendered as a second row inside .sticky-bar-inner so it inherits the
   .filter-bar glass surface. The column gap on .sticky-bar-inner handles
   vertical spacing; no extra margin-top is needed. */
.mobile-filters-summary {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  font-size: 0.75rem;
  color: var(--neutral-500);
}

.mobile-filters-summary-dot {
  color: var(--neutral-300);
}

.dark .mobile-filters-summary { color: var(--surface-400); }

.mobile-filters-summary button {
  color: var(--accent-primary);
  font-weight: 600;
  text-decoration: underline;
  text-underline-offset: 2px;
  background: none;
  border: none;
  cursor: pointer;
  font-size: inherit;
}

@media (min-width: 640px) { .mobile-filters-summary { display: none; } }

/* --- Desktop Inline Filters --- */
.desktop-filters {
  display: none;
  margin-bottom: 1.875rem;
}

@media (min-width: 640px) { .desktop-filters { display: block; } }

.desktop-filters > * + * { margin-top: 0.875rem; }

.filter-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.4375rem;
}

.filter-row-label {
  font-size: 0.75rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--neutral-400);
  margin-right: 0.125rem;
}

.dark .filter-row-label { color: var(--surface-400); }

/* --- Desktop Search Bar (search field + controls) --- */
/* Matches the sticky bar's filter-bar glass morphism pattern */
.desktop-search-bar {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  padding: 0.75rem;
  border-radius: 1rem;
}

.desktop-search-controls {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  flex-shrink: 0;
}

.pill-count {
  margin-left: 0.375rem;
  opacity: 0.55;
}

/* --- Desktop Results Bar --- */
.desktop-results-bar {
  display: none;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 1.125rem;
}

@media (min-width: 640px) { .desktop-results-bar { display: flex; } }

.desktop-results-count {
  font-family: var(--font-ui);
  font-size: 0.875rem;
  color: var(--neutral-500);
}

.dark .desktop-results-count { color: var(--surface-400); }

.desktop-clear-btn {
  font-family: var(--font-ui);
  font-size: 0.875rem;
  font-weight: var(--font-weight-medium);
  color: var(--accent-primary);
  text-decoration: underline;
  text-underline-offset: 2px;
  background: none;
  border: none;
  cursor: pointer;
  transition: color var(--duration-normal) ease;
}

.desktop-clear-btn:hover { color: var(--accent-primary-hover); }

/* --- Filter Pills --- */
.category-pill, .brand-pill, .tag-pill {
  padding: 0.4375rem 0.875rem;
  border-radius: 9999px;
  font-family: var(--font-ui);
  font-size: 0.75rem;
  font-weight: 600;
  transition: background var(--duration-normal) ease, color var(--duration-normal) ease, border-color var(--duration-normal) ease, box-shadow var(--duration-normal) ease;
  border: none;
  cursor: pointer;
  min-height: 34px;
  display: inline-flex;
  align-items: center;
}

.category-pill--active, .brand-pill--active, .tag-pill--active {
  background: var(--accent-primary);
  color: var(--text-on-accent);
  box-shadow: 0 0 16px var(--accent-primary-shadow), inset 0 1px 0 var(--btn-inset);
}

.category-pill--inactive, .brand-pill--inactive, .tag-pill--inactive {
  background: var(--pill-inactive-bg);
  color: var(--pill-inactive-text);
  border: 1px solid var(--pill-inactive-border);
}


.category-pill--inactive:hover, .brand-pill--inactive:hover, .tag-pill--inactive:hover {
  background: var(--glass-hover-bg);
  border-color: var(--accent-primary-border);
}

/* Brand pills use --accent-primary-border on hover, same as category pills,
   so both follow the active theme consistently. */


/* --- View Toggle (single button) ---
   Replaces the previous two-button .view-toggle container.
   One button toggles between grid and list view; the visible icon
   represents the TARGET view (the view you will switch to on click).
   JS (main.js → syncViewToggles) swaps the icon + aria-label. */
.view-toggle-single {
  background: var(--pill-inactive-bg);
  border: 1px solid var(--pill-inactive-border);
  border-radius: 0.75rem;
  padding: 0.5rem;
  min-width: 40px;
  min-height: 40px;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  color: var(--text-secondary);
  flex-shrink: 0;
  transition: background var(--duration-normal) ease, color var(--duration-normal) ease, border-color var(--duration-normal) ease, box-shadow var(--duration-normal) ease;
}

.view-toggle-single:hover {
  background: var(--glass-hover-bg);
  border-color: var(--accent-primary-border);
  color: var(--accent-primary);
}

.dark .view-toggle-single { color: var(--text-muted); }

.view-toggle-single__icon { display: block; }
.view-toggle-single__icon.is-hidden { display: none; }

/* Sticky bar view toggle — compact on mobile */
.sticky-bar .view-toggle-single { padding: 6px; min-width: 34px; min-height: 34px; }
.sticky-bar .view-toggle-single__icon { width: 14px; height: 14px; }

@media (min-width: 640px) {
  .sticky-bar .view-toggle-single { min-width: 38px; min-height: 38px; padding: 8px; }
  .sticky-bar .view-toggle-single__icon { width: 16px; height: 16px; }
}

/* 8. Product card */

/* ==========================================================================
   7. PRODUCT CARD
   Compact, premium product-shelf cards with equal-height grid rows and reduced horizontal text waste.
   ========================================================================== */

/* --- Product Card --- */
.product-card {
  --card-image-height: clamp(124px, 12vw, 148px);
  --card-content-padding-block: 0.75rem;
  --card-content-padding-inline: 0.8125rem;
  --card-content-gap: 0.4rem;
  --card-chip-font-size: 0.59375rem;
  --card-chip-padding-block: 0.15rem;
  --card-chip-padding-inline: 0.425rem;
  --card-name-font-size: 0.9rem;
  --card-name-line-height: 1.2;
  --card-action-min-height: 30px;
  --card-action-font-size: 0.735rem;

  overflow: hidden;
  display: flex;
  flex-direction: column;
  height: 100%;
  min-height: 0;
  contain: layout;
}


@media (max-width: 479px) {
  .product-card {
    --card-image-height: clamp(126px, 34vw, 152px);
    --card-name-font-size: 0.9375rem;
    --card-action-min-height: 34px;
    --card-action-font-size: 0.765rem;
  }
}

.product-card.list-view {
  flex-direction: row;
  min-height: 11rem;
}

.product-card-image-wrap {
  position: relative;
  overflow: hidden;
  background: var(--scheme-image-wrap-bg);
  flex-shrink: 0;
  width: 100%;
  height: var(--card-image-height);
}

.dark .product-card-image-wrap { background: var(--scheme-image-wrap-bg-dark); }

.product-card.list-view .product-card-image-wrap {
  width: clamp(7.5rem, 24vw, 11rem);
  aspect-ratio: auto;
  /* Let the flex row's align-items: stretch fill the full card height.
     The base .product-card-image-wrap sets height: var(--card-image-height)
     which is correct for grid view but prevents stretching in list view,
     leaving an empty glass-card strip below the image. */
  height: auto;
}

@media (min-width: 768px) {
  .product-card.list-view .product-card-image-wrap { width: 12rem; }
}

.product-card-image-wrap picture { display: contents; }

.product-card-image-wrap img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  box-sizing: border-box;
  padding: 0.2rem;
  transition: transform 0.05s ease-out;
  will-change: transform;
}

.product-card:hover .product-card-image-wrap img {
  transform: scale(1.05);
}

/* Image error placeholder — absolutely positioned to overlay image area */
.product-card-image-error {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 0.25rem;
  color: var(--neutral-300);
  z-index: 1;
}

.dark .product-card-image-error { color: var(--surface-400); }

.product-card-image-error-text {
  font-size: 0.75rem;
}

.product-card-hover-overlay {
  position: absolute;
  inset: 0;
  background: linear-gradient(to top, var(--scheme-overlay-gradient), transparent 55%);
  opacity: 0;
  transition: opacity var(--duration-slow) ease;
  pointer-events: none;
}

.dark .product-card-hover-overlay { background: linear-gradient(to top, var(--scheme-overlay-gradient-dark), transparent 55%); }

.product-card:hover .product-card-hover-overlay { opacity: 1; }

/* --- Card Content --- */
.product-card-content {
  display: flex;
  flex-direction: column;
  justify-content: stretch;
  gap: var(--card-content-gap);
  flex: 1 1 auto;
  min-width: 0;
  padding: var(--card-content-padding-block) var(--card-content-padding-inline);
  text-align: center;
}

@media (min-width: 640px) {
  .product-card {
    --card-content-padding-block: 0.8125rem;
    --card-content-padding-inline: 0.875rem;
    --card-name-font-size: 0.9375rem;
  }
}

.product-card.list-view .product-card-content {
  padding: 0.875rem;
  text-align: left;
}

@media (min-width: 768px) {
  .product-card.list-view .product-card-content { padding: 1rem 1.125rem; }
}

/* --- Tags --- */
.product-tags {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 0.275rem;
  margin-bottom: 0;
}

.product-card.list-view .product-tags {
  justify-content: flex-start;
}

.tag-brand,
.tag-category,
.tag-attribute,
.tag-more {
  display: inline-flex;
  align-items: center;
  max-width: 100%;
  border-radius: 9999px;
  font-family: var(--font-ui);
  font-size: var(--card-chip-font-size);
  line-height: 1.18;
  padding: var(--card-chip-padding-block) var(--card-chip-padding-inline);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.tag-brand {
  font-weight: 700;
  background: var(--accent-primary-light);
  color: var(--accent-primary);
  border: 1px solid var(--accent-primary-border);
}

.tag-category,
.tag-attribute,
.tag-more {
  font-weight: 600;
  background: color-mix(in srgb, var(--accent-primary-light) 45%, var(--glass-bg));
  color: color-mix(in srgb, var(--accent-primary) 42%, var(--text-muted));
  border: 1px solid color-mix(in srgb, var(--accent-primary-border) 42%, var(--glass-border));
}

.tag-attribute,
.tag-more {
  font-weight: 500;
  color: color-mix(in srgb, var(--accent-primary) 34%, var(--text-muted));
}

.tag-more {
  min-width: 1.45rem;
  justify-content: center;
  padding-inline: 0.325rem;
}


.tag-brand { max-width: 45%; }
.tag-category { max-width: 100%; }
.tag-attribute { max-width: 48%; }


/* Compact-card attribute chips are hidden on very small screens to keep card
   heights uniform. Scope this to .product-tags (the card chip container) only,
   so it never reaches the Quick View panel, which reuses .tag-attribute for its
   own attribute chips (see product-quick-view.css / product-quick-view.js). */
@media (max-width: 479px) {
  .product-tags .tag-attribute,
  .product-tags .tag-more { display: none; }
}

/* --- Product Quick View Triggers --- */
.product-card-image-button,
.product-name-button {
  appearance: none;
  border: 0;
  background: transparent;
  color: inherit;
  font: inherit;
}

.product-card-image-button {
  position: relative;
  display: block;
  width: 100%;
  height: 100%;
  padding: 0;
  cursor: pointer;
}

.product-card-image-button:focus-visible,
.product-name-button:focus-visible {
  outline: 3px solid var(--scheme-focus-ring);
  outline-offset: 3px;
}

.product-card-image-button:focus-visible {
  outline-offset: -4px;
}

/* --- Product Name --- */
.product-name {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: calc(4 * var(--card-name-line-height) * 1em);
  flex: 1 1 auto;
  margin-bottom: 0;
  color: var(--neutral-900);
  font-family: var(--font-heading);
  font-weight: var(--font-weight-semibold);
  font-size: var(--card-name-font-size);
  line-height: var(--card-name-line-height);
  letter-spacing: -0.006em;
  text-align: center;
}

.dark .product-name { color: var(--surface-100); }

.product-name-button {
  display: -webkit-box;
  width: 100%;
  overflow: hidden;
  -webkit-line-clamp: 4;
  -webkit-box-orient: vertical;
  padding: 0;
  text-align: inherit;
  overflow-wrap: anywhere;
  hyphens: auto;
  text-wrap: pretty;
  cursor: pointer;
}

.product-name-button:hover {
  color: var(--accent-primary);
}

.product-card.list-view .product-name {
  display: block;
  flex: 0 0 auto;
  min-height: 0;
  /* Auto top + bottom margins center the title vertically between the
     tags row (above) and the buttons row (below). In a flex column,
     free space is distributed equally to auto margins, so the title
     sits at the midpoint of the space between tags and buttons while
     buttons settle at the bottom of the card. */
  margin-top: auto;
  margin-bottom: auto;
  font-size: 0.9375rem;
  line-height: 1.25;
  text-align: left;
}

@media (min-width: 640px) {
  .product-card.list-view .product-name { font-size: 1rem; }
}

/* --- Product Buttons --- */
.product-buttons {
  display: flex;
  flex-direction: row;
  gap: 0.4rem;
  margin-top: 0;
}

.product-buttons .btn-ml,
.product-buttons .btn-shopee {
  flex: 1 1 0;
  width: auto;
  min-width: 0;
  justify-content: center;
  text-align: center;
  min-height: var(--card-action-min-height);
  padding: 0.375rem 0.5rem;
  border-radius: 0.65rem;
  font-size: var(--card-action-font-size);
  font-weight: var(--font-weight-semibold);
  box-shadow: none;
}


.product-buttons .btn-ml:hover,
.product-buttons .btn-shopee:hover {
  transform: translateY(-1px);
}

.product-buttons .btn-ml:focus-visible,
.product-buttons .btn-shopee:focus-visible {
  outline: 2px solid var(--scheme-focus-ring);
  outline-offset: 2px;
}

.product-buttons .truncate {
  display: inline-block;
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

@media (max-width: 359px) {
  .product-buttons {
    flex-direction: column;
    gap: 0.375rem;
  }
}

.product-card.list-view .product-buttons {
  flex-direction: row;
  gap: 0.5rem;
  /* No margin-top: auto here — the title's auto margins (see
     .product-card.list-view .product-name) consume the free space
     and center the title between tags and buttons. Buttons naturally
     settle at the bottom of the card as a result. */
}

.product-card.list-view .product-buttons .btn-ml,
.product-card.list-view .product-buttons .btn-shopee {
  min-height: 32px;
  padding: 0.425rem 0.7rem;
  font-size: 0.75rem;
}

@media (min-width: 640px) {
  .product-card.list-view .product-buttons .btn-ml,
  .product-card.list-view .product-buttons .btn-shopee {
    min-height: 34px;
    padding: 0.45rem 0.8rem;
    font-size: 0.7875rem;
  }
}

/* --- Featured Badge --- */
.featured-badge {
  position: absolute;
  top: 0.625rem;
  left: 0.625rem;
  z-index: 2;
  display: flex;
  align-items: center;
  gap: 0.25rem;
  border-radius: 9999px;
  padding: 0.25rem 0.625rem;
  background: var(--scheme-badge-bg);
  color: var(--text-on-accent);
  box-shadow: 0 0 12px var(--accent-primary-shadow);
  font-family: var(--font-ui);
  font-size: 0.625rem;
  font-weight: 700;
  letter-spacing: 0.025em;
  text-transform: uppercase;
}

.featured-badge svg {
  width: 0.625rem;
  height: 0.625rem;
  flex-shrink: 0;
}

.product-card.list-view .featured-badge {
  top: 0.5rem;
  left: 0.5rem;
  padding: 0.25rem 0.5rem;
  font-size: 0.6rem;
}

.featured-text-full { display: none; }
.featured-text-short { display: inline; }
@media (min-width: 640px) {
  .featured-text-full { display: inline; }
  .featured-text-short { display: none; }
}

/* --- Fluid Grids --- */
.fluid-grid-products {
  display: grid;
  gap: 0.95rem;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 242px), 1fr));
  align-items: stretch;
}

.product-list {
  display: grid;
  grid-template-columns: 1fr;
  gap: 1rem;
}

@media (min-width: 640px) {
  .fluid-grid-products {
    gap: 1rem;
    grid-template-columns: repeat(auto-fill, minmax(min(100%, 248px), 1fr));
  }
  .product-list { gap: 1.125rem; }
}

/* Two-column list view on wide desktops.
   At 1024px+ the catalog content area is ~960px, which gives each
   card ~471px — enough for the 192px image plus a comfortable content
   column. Below this breakpoint cards stay in a single column so the
   image + text never feel cramped. */
@media (min-width: 1024px) {
  .product-list {
    grid-template-columns: repeat(2, 1fr);
  }
}

@media (min-width: 1280px) {
  .fluid-grid-products {
    gap: 1.125rem;
    grid-template-columns: repeat(auto-fill, minmax(min(100%, 252px), 1fr));
  }
}

.fluid-grid-trust {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 1.25rem;
}

.fluid-grid-trust > * {
  flex: 0 1 260px;
  min-width: 220px;
}

@media (min-width: 640px) {
  .fluid-grid-trust { gap: 1.5rem; }
}

/* --- Empty State --- */
.empty-state {
  text-align: center;
  padding: 4rem 2.5rem;
}

@media (min-width: 640px) { .empty-state { padding: 6rem 2.5rem; } }

.empty-state-icon { font-size: 3rem; margin-bottom: 1rem; }

.empty-state-title {
  font-size: 1.125rem;
  color: var(--neutral-600);
  margin-bottom: 0.5rem;
}

.dark .empty-state-title { color: var(--surface-200); }

.empty-state-text {
  font-size: 0.875rem;
  color: var(--neutral-400);
  margin-bottom: 1.5rem;
}

.dark .empty-state-text { color: var(--surface-400); }

.empty-state-btn {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.75rem 1.5rem;
  border-radius: 0.75rem;
  background: var(--accent-primary);
  color: var(--text-on-accent);
  font-family: var(--font-ui);
  font-weight: var(--font-weight-semibold);
  min-height: 48px;
  cursor: pointer;
  border: none;
  transition: background var(--duration-normal) ease;
}

.empty-state-btn:hover { background: var(--accent-primary-hover); }

/* 9. Product quick view */

/* ============================================================================
   PRODUCT QUICK VIEW
   Static product detail drawer / mobile bottom sheet.
   ============================================================================ */

.product-quick-view[hidden] {
  display: none !important;
}

.product-quick-view {
  position: fixed;
  inset: 0;
  z-index: var(--layer-active-panel-backdrop);
  display: flex;
  justify-content: flex-end;
  pointer-events: none;
}

.product-quick-view__backdrop {
  position: absolute;
  inset: 0;
  background: var(--drawer-overlay-bg);
  opacity: 0;
}

.product-quick-view.is-open .product-quick-view__backdrop {
  animation: fade-in 0.25s var(--ease-out) both;
}

.product-quick-view__backdrop--closing {
  animation: overlay-out 0.2s var(--ease-out) both;
}

.product-quick-view__panel {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  width: min(100%, 440px);
  height: 100dvh;
  max-height: 100dvh;
  border-radius: 0;
  background: var(--drawer-panel-bg);
  border-left: 1px solid var(--drawer-border);
  box-shadow: 0 0 40px var(--chrome-shadow-md);
  overflow: hidden;
  transform: translateX(100%);
  pointer-events: auto;
  contain: layout paint;
}

.product-quick-view.is-open {
  pointer-events: auto;
}

.product-quick-view.is-open .product-quick-view__panel {
  animation: drawer-right-in 0.3s var(--ease-out) both;
}

.product-quick-view__panel--closing {
  animation: drawer-right-out 0.2s var(--ease-out) both;
}

.product-quick-view__header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  padding: 1rem;
  border-bottom: 1px solid var(--glass-border);
  flex-shrink: 0;
}

.product-quick-view__header.drawer-header {
  padding: 1rem;
}

.product-quick-view__header-icon-wrap {
  flex: 0 0 auto;
}

.product-quick-view__eyebrow {
  margin-bottom: 0.125rem;
  color: var(--neutral-400);
  font-family: var(--font-ui);
  font-size: 0.6875rem;
  font-weight: 700;
  line-height: 1.15;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

.dark .product-quick-view__eyebrow { color: var(--surface-400); }

.product-quick-view__header .product-quick-view__header-title {
  font-size: 1rem;
  line-height: 1.2;
}

.product-quick-view__close.drawer-close-btn {
  flex: 0 0 auto;
}

.product-quick-view__body {
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  overscroll-behavior: contain;
  padding: 1rem;
}

.product-quick-view__image-wrap {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 200px;
  border-radius: 1rem;
  background: var(--scheme-image-wrap-bg);
  border: 1px solid var(--glass-border);
  overflow: hidden;
}

.dark .product-quick-view__image-wrap { background: var(--scheme-image-wrap-bg-dark); }

.product-quick-view__image-wrap img {
  width: min(100%, 320px);
  height: min(42vh, 320px);
  object-fit: contain;
  padding: 0.05rem;
}

.product-quick-view__content {
  padding-top: 1rem;
}

.product-quick-view__chips,
.product-quick-view__tags {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.5rem;
}

.product-quick-view__chips {
  margin-bottom: 0.75rem;
}

.product-quick-view__chips .tag-brand,
.product-quick-view__chips .tag-category,
.product-quick-view__tags .tag-attribute {
  max-width: 100%;
  font-size: 0.6875rem;
  line-height: 1.18;
  padding: 0.25rem 0.625rem;
}

.product-quick-view__tags .tag-attribute {
  white-space: normal;
}

.product-quick-view__title {
  color: var(--neutral-900);
  font-size: clamp(1.25rem, 3vw, 1.65rem);
  line-height: 1.16;
  letter-spacing: -0.02em;
  margin-bottom: 1rem;
}

.dark .product-quick-view__title { color: var(--surface-100); }

.product-quick-view__tag-block,
.product-quick-view__description-block {
  padding-top: 1rem;
  border-top: 1px solid var(--glass-border);
}

.product-quick-view__tag-block + .product-quick-view__description-block {
  margin-top: 1rem;
}

.product-quick-view__section-title {
  margin-bottom: 0.5rem;
  color: var(--neutral-500);
  font-family: var(--font-ui);
  font-size: 0.75rem;
  font-weight: 700;
  line-height: 1.2;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

.dark .product-quick-view__section-title { color: var(--surface-400); }

.product-quick-view__description {
  color: var(--neutral-700);
  font-family: var(--font-ui);
  font-size: 0.925rem;
  line-height: 1.65;
  white-space: pre-line;
}

.dark .product-quick-view__description { color: var(--surface-300); }

.product-quick-view__actions {
  display: flex;
  gap: 0.625rem;
  padding: 1rem;
  border-top: 1px solid var(--glass-border);
  background: color-mix(in srgb, var(--drawer-panel-bg) 92%, transparent);
  flex-shrink: 0;
}

.product-quick-view__actions .btn-ml,
.product-quick-view__actions .btn-shopee {
  flex: 1 1 0;
  min-width: 0;
  min-height: 44px;
  padding: 0.675rem 0.875rem;
  font-size: 0.8125rem;
  text-align: center;
}

body.product-quick-view-open .dark-toggle,
body.product-quick-view-open .scheme-picker {
  z-index: 0;
  pointer-events: none;
}

@media (max-width: 639px) {
  .product-quick-view {
    align-items: flex-end;
    justify-content: center;
  }

  .product-quick-view__panel {
    width: 100%;
    height: auto;
    max-height: 85dvh;
    border-left: 0;
    border-top: 1px solid var(--drawer-border);
    border-radius: 0;
    transform: translateY(100%);
  }

  .product-quick-view.is-open .product-quick-view__panel {
    animation-name: sheet-in;
  }

  .product-quick-view__panel--closing {
    animation-name: sheet-out;
  }

  .product-quick-view__body {
    padding: 0.875rem;
  }

  .product-quick-view__image-wrap {
    min-height: 180px;
  }

  .product-quick-view__image-wrap img {
    height: min(32vh, 260px);
  }

  .product-quick-view__actions {
    padding: 0.875rem;
  }
}

@media (max-width: 359px) {
  .product-quick-view__actions {
    flex-direction: column;
  }
}

@media (prefers-reduced-motion: reduce) {
  .product-quick-view.is-open .product-quick-view__backdrop,
  .product-quick-view__backdrop--closing,
  .product-quick-view.is-open .product-quick-view__panel,
  .product-quick-view__panel--closing {
    animation: none;
  }

  .product-quick-view.is-open .product-quick-view__backdrop { opacity: 1; }
  .product-quick-view.is-open .product-quick-view__panel { transform: translateX(0); }

  @media (max-width: 639px) {
    .product-quick-view.is-open .product-quick-view__panel { transform: translateY(0); }
  }
}

/* 10. Mobile filter drawer */

/* ==========================================================================
   8. DRAWER
   Filter drawer overlay, panel, header, sections, footer, drawer-open body state
   ========================================================================== */

/* --- Drawer Overlay --- */
.drawer-overlay {
  position: fixed;
  inset: 0;
  background: var(--drawer-overlay-bg);
  z-index: var(--layer-active-panel-backdrop);
  animation: fade-in 0.25s var(--ease-out) both;
}

.drawer-overlay--closing { animation: overlay-out 0.2s var(--ease-out) both; }

/* --- Drawer Panel --- */
.drawer-panel {
  position: fixed;
  top: 0;
  left: 0;
  bottom: 0;
  width: 85%;
  max-width: 360px;
  background: var(--drawer-panel-bg);
  border-right: 1px solid var(--drawer-border);
  box-shadow: 0 0 40px var(--chrome-shadow-md);
  z-index: var(--layer-active-panel);
  overflow-y: auto;
  animation: drawer-in 0.3s var(--ease-out) both;
  display: flex;
  flex-direction: column;
  overscroll-behavior: contain;
}

.drawer-panel--closing { animation: drawer-out 0.2s var(--ease-out) both; }

/* --- Drawer Header --- */
.drawer-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 1rem;
  border-bottom: 1px solid var(--glass-border);
}

.drawer-header-left {
  display: flex;
  align-items: center;
  gap: 0.625rem;
}

.drawer-header-icon-wrap {
  width: 2.5rem;
  height: 2.5rem;
  border-radius: 0.75rem;
  background: var(--accent-primary-light);
  border: 1px solid var(--accent-primary-border);
  color: var(--accent-primary);
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background var(--duration-normal) ease;
}

.drawer-header-icon-wrap:hover { background: var(--accent-primary-border); }

.drawer-header-icon { width: 1.125rem; height: 1.125rem; }

.drawer-title {
  font-weight: bold;
  font-size: 1.125rem;
  color: var(--neutral-900);
}

.dark .drawer-title { color: var(--surface-100); }

.drawer-filter-badge {
  font-size: 0.6875rem;
  font-weight: 700;
  min-width: 1.25rem;
  height: 1.25rem;
  line-height: 1.25rem;
  text-align: center;
  border-radius: 0.625rem;
  padding: 0 0.375rem;
  background: var(--accent-primary);
  color: var(--text-on-accent);
}

.drawer-close-btn {
  width: 2.25rem;
  height: 2.25rem;
  border-radius: 0.5rem;
  background: var(--drawer-close-bg);
  display: flex;
  align-items: center;
  justify-content: center;
  border: none;
  cursor: pointer;
  color: var(--neutral-400);
  transition: background var(--duration-normal) ease, color var(--duration-normal) ease;
}

.dark .drawer-close-btn,
[data-color-scheme="alt"].dark .drawer-close-btn { background: var(--drawer-close-bg-dark); color: var(--surface-300); }
.drawer-close-btn:hover { color: var(--neutral-700); background: var(--glass-hover-bg); }
.dark .drawer-close-btn:hover,
[data-color-scheme="alt"].dark .drawer-close-btn:hover { color: var(--surface-100); background: var(--drawer-close-bg-dark-hover); }

/* --- Drawer Sections --- */
.drawer-section { padding: 1rem 1rem 0.5rem; }

.drawer-section-title {
  font-size: 0.75rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--neutral-400);
  margin-bottom: 0.75rem;
}

.dark .drawer-section-title { color: var(--surface-400); }

.drawer-pills { display: flex; flex-wrap: wrap; gap: 0.5rem; }

/* --- Drawer Footer --- */
.drawer-footer {
  padding: 1rem;
  margin-top: auto;
  border-top: 1px solid var(--glass-border);
}

.drawer-submit-btn {
  width: 100%;
  padding: 0.75rem 1rem;
  border-radius: 0.75rem;
  background: var(--accent-primary);
  color: var(--text-on-accent);
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: 0.875rem;
  box-shadow: 0 0 16px var(--accent-primary-shadow);
  min-height: 48px;
  cursor: pointer;
  border: none;
  transition: background var(--duration-normal) ease;
}

.drawer-submit-btn:hover { background: var(--accent-primary-hover); }

/* --- Drawer Open: Prevent page shift on fixed elements --- */
body.drawer-open .dark-toggle {
  right: calc(1.25rem + var(--scrollbar-compensation, 0px));
}

body.drawer-open .dark-toggle,
body.drawer-open .scheme-picker {
  z-index: 0;
  pointer-events: none;
}

/* 11. Trust section */

/* ==========================================================================
   9. TRUST
   Trust section, divider, header, cards, CTA
   ========================================================================== */

.trust-section {
  padding: 4rem 1rem;
  max-width: 1600px;
  margin: 0 auto;
  position: relative;
  z-index: 10;
}

@media (min-width: 640px) {
  .trust-section { padding: 5rem 1.5rem; }
}

@media (min-width: 1024px) {
  .trust-section { padding-left: 2rem; padding-right: 2rem; }
}

.trust-divider {
  display: flex;
  align-items: center;
  gap: 1rem;
  margin-bottom: 2.5rem;
}

@media (min-width: 640px) { .trust-divider { margin-bottom: 3rem; } }

.trust-divider-line {
  flex: 1;
  height: 1px;
  background: linear-gradient(to right, transparent, var(--scheme-trust-divider), transparent);
}

.dark .trust-divider-line { background: linear-gradient(to right, transparent, var(--scheme-trust-divider-dark), transparent); }

.trust-divider-circle {
  width: 2.5rem;
  height: 2.5rem;
  border-radius: 9999px;
  background: var(--ui-surface-bg);
  border: 1px solid var(--ui-surface-border);
  display: flex;
  align-items: center;
  justify-content: center;
}

.dark .trust-divider-circle { background: var(--ui-surface-bg-dark); border-color: var(--ui-surface-border-dark); }

.trust-header {
  text-align: center;
  margin-bottom: 2.5rem;
}

.trust-title {
  font-weight: var(--font-weight-bold);
  color: var(--neutral-900);
  letter-spacing: -0.015em;
  margin-bottom: 0.75rem;
  font-size: clamp(1.6rem, 3vw, 2.15rem);
}

.dark .trust-title { color: var(--surface-100); }

.trust-subtitle {
  color: var(--neutral-500);
  font-family: var(--font-ui);
  font-size: 0.875rem;
  line-height: 1.7;
  max-width: 28rem;
  margin: 0 auto;
}

.dark .trust-subtitle { color: var(--surface-400); }

@media (min-width: 640px) { .trust-subtitle { font-size: 1rem; } }

/* --- Trust Card --- */
.trust-card {
  padding: 1.5rem;
  text-align: center;
}

@media (min-width: 640px) { .trust-card { padding: 1.75rem; } }

.trust-card-icon-wrap {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 3.5rem;
  height: 3.5rem;
  border-radius: 1rem;
  margin-bottom: 1rem;
  border: 1px solid transparent;
}

.trust-card-icon-wrap--primary {
  background: var(--accent-primary-light);
  color: var(--accent-primary);
  border-color: var(--accent-primary-border);
}

.trust-card-icon-wrap--secondary {
  background: var(--accent-secondary-light);
  color: var(--accent-secondary);
  border-color: var(--accent-secondary-border);
}

.trust-card-title {
  font-family: var(--font-heading);
  font-weight: var(--font-weight-bold);
  color: var(--neutral-900);
  font-size: 1rem;
  margin-bottom: 0.5rem;
}

.dark .trust-card-title { color: var(--surface-100); }

.trust-card-text {
  color: var(--neutral-500);
  font-family: var(--font-ui);
  font-size: 0.875rem;
  line-height: 1.65;
}

.dark .trust-card-text { color: var(--surface-400); }

/* --- Trust CTA --- */
.trust-cta {
  margin-top: 2.5rem;
  text-align: center;
}

.trust-cta-panel {
  display: inline-block;
  padding: 1rem 2rem;
}

.trust-cta-text {
  color: var(--neutral-500);
  font-size: 0.875rem;
}

.dark .trust-cta-text { color: var(--surface-400); }

.trust-cta-link {
  color: var(--accent-primary);
  font-weight: 600;
  text-decoration: underline;
  text-underline-offset: 2px;
  transition: color var(--duration-normal) ease;
  min-height: 48px;
  display: inline-flex;
  align-items: center;
}

.trust-cta-link:hover { color: var(--accent-primary-hover); }

/* 12. Footer */

/* ==========================================================================
   10. FOOTER
   Site footer grid, brand column, links, security text, bottom bar,
   dark mode toggle FAB
   ========================================================================== */

.site-footer {
  background: var(--footer-bg);
  color: var(--footer-text);
  padding: 3rem 1.25rem 2rem;
  position: relative;
  z-index: 10;
}

@media (min-width: 640px) {
  .site-footer { padding-top: 3.5rem; padding-left: 1.5rem; padding-right: 1.5rem; }
}

@media (min-width: 1024px) {
  .site-footer { padding-left: 2rem; padding-right: 2rem; }
}

.footer-inner { max-width: 1600px; margin: 0 auto; }

.footer-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 2rem;
  margin-bottom: 2.5rem;
}

@media (min-width: 640px) { .footer-grid { grid-template-columns: 1fr 1fr; } }
@media (min-width: 1024px) { .footer-grid { grid-template-columns: 1fr 1fr 1fr; } }

.footer-brand-title {
  font-size: 1.25rem;
  font-weight: var(--font-weight-bold);
  font-family: var(--font-heading);
  letter-spacing: -0.02em;
  margin-bottom: 1rem;
  display: flex;
  align-items: center;
  gap: 0.5rem;
}

.footer-logo-img {
  width: 1.75rem;
  height: 1.75rem;
  object-fit: contain;
}

.footer-brand-hub { color: var(--footer-text); }
.footer-brand-raiz { color: var(--scheme-footer-accent); }

.footer-brand-desc {
  color: var(--footer-muted);
  font-family: var(--font-ui);
  font-size: 0.875rem;
  line-height: 1.65;
}

.footer-heading {
  font-weight: var(--font-weight-bold);
  font-size: 1rem;
  margin-bottom: 0.75rem;
}

.footer-links {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem 1.25rem;
}

.footer-link {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  color: var(--footer-muted);
  font-family: var(--font-ui);
  font-size: 0.875rem;
  min-height: 44px;
  transition: color var(--duration-normal) ease;
}

.footer-link:hover { color: var(--scheme-footer-accent); }

.footer-link-icon {
  width: 1rem;
  height: 1rem;
  flex-shrink: 0;
  color: var(--scheme-footer-icon);
}

.footer-security-text {
  color: var(--footer-muted);
  font-family: var(--font-ui);
  font-size: 0.875rem;
  line-height: 1.65;
  margin-bottom: 1rem;
}

.footer-marketplace-badges {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  color: var(--footer-muted);
}

.footer-marketplace-badge {
  font-size: 0.75rem;
  font-weight: 500;
  padding: 0.25rem 0.625rem;
  border-radius: 0.375rem;
  background: var(--scheme-marketplace-badge-bg);
  border: 1px solid var(--scheme-marketplace-badge-border);
  color: var(--scheme-footer-accent);
}

.footer-marketplace-plus {
  font-size: 0.75rem;
}

.footer-email {
  word-break: break-all;
}

.footer-bottom {
  border-top: 1px solid var(--scheme-footer-border);
  padding-top: 1.5rem;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.75rem;
  text-align: center;
}

.footer-copyright {
  color: var(--footer-muted);
  font-size: 0.75rem;
}

.footer-disclaimer {
  color: var(--footer-disclaimer);
  font-size: 0.75rem;
  max-width: 28rem;
}

/* 13. Dark mode toggle FAB */

/* ==========================================================================
   10. DARK MODE TOGGLE (FAB) & COLOR SCHEME PICKER
   ========================================================================== */
.dark-toggle {
  position: fixed;
  bottom: 1.25rem;
  right: 1.25rem;
  z-index: var(--layer-floating-control);
  width: 3rem;
  height: 3rem;
  border-radius: 9999px;
  background: var(--toggle-bg);
  border: 1px solid var(--toggle-border);
  box-shadow: 0 0 16px var(--chrome-shadow-md);
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  transition: background var(--duration-slow) ease, border-color var(--duration-slow) ease, box-shadow var(--duration-slow) ease, transform var(--duration-slow) ease;
}

.dark-toggle:hover {
  transform: scale(1.1);
  box-shadow: 0 0 24px var(--chrome-shadow-lg);
}

.dark-toggle:active { transform: scale(0.95); }

.dark .dark-toggle,
[data-color-scheme="alt"].dark .dark-toggle {
  background: var(--toggle-bg-dark);
  border-color: var(--toggle-border-dark);
  box-shadow: 0 0 16px var(--chrome-shadow-dark);
}

.dark-toggle-icon {
  position: absolute;
  width: 1.25rem;
  height: 1.25rem;
  transition: opacity var(--duration-slow) ease, transform var(--duration-slow) ease;
}

/* Sun visible in dark mode, hidden in light */
.dark-toggle-icon--sun {
  color: var(--accent-primary);
  opacity: 0;
  transform: rotate(90deg) scale(0.5);
}

.dark .dark-toggle-icon--sun {
  opacity: 1;
  transform: rotate(0) scale(1);
}

/* Moon visible in light mode, hidden in dark */
.dark-toggle-icon--moon {
  color: var(--accent-primary);
  opacity: 1;
  transform: rotate(0) scale(1);
}

.dark .dark-toggle-icon--moon {
  opacity: 0;
  transform: rotate(-90deg) scale(0.5);
}

/* ── Long-press hint pulse on toggle ─────────────────────── */
.dark-toggle[data-scheme-picker-hint] {
  animation: scheme-hint-pulse 0.6s ease;
}
@keyframes scheme-hint-pulse {
  0%   { box-shadow: 0 0 0 0 var(--accent-primary-shadow); }
  70%  { box-shadow: 0 0 0 10px transparent; }
  100% { box-shadow: 0 0 0 0 transparent; }
}
/* 14. Color scheme picker panel */
/* ==========================================================================
   12. COLOR SCHEME PICKER
   Popup panel for selecting color schemes, triggered by long-press
   on the dark/light mode toggle FAB
   ========================================================================== */

/* --- Dropdown Panel (shared base) ---
   Glass morphism popup with show/hide transition.
   Used by both .scheme-picker and .per-page-panel.
   Variant positioning is applied via the concrete component classes. */

.dropdown-panel {
  background: var(--glass-bg);
  border: 1px solid var(--glass-border);
  border-radius: 1.25rem;
  box-shadow: 0 0 32px var(--chrome-shadow-lg);
  opacity: 0;
  visibility: hidden;
  transform: translateY(6px) scale(0.97);
  transition: opacity var(--duration-slow) ease, transform var(--duration-slow) ease, visibility 0s linear var(--duration-slow);
}

.dropdown-panel.is-open {
  opacity: 1;
  visibility: visible;
  transform: translateY(0) scale(1);
  transition: opacity var(--duration-slow) ease, transform var(--duration-slow) ease, visibility 0s linear 0s;
}

.dropdown-option {
  width: 100%;
  padding: 0.625rem 0.75rem;
  border-radius: 0.75rem;
  border: 1.5px solid transparent;
  background: transparent;
  cursor: pointer;
  font-family: inherit;
  color: var(--text-primary);
  transition: background var(--duration-normal) ease, border-color var(--duration-normal) ease;
}

.dropdown-option:hover {
  background: var(--glass-hover-bg);
}

.dropdown-option.is-active {
  border-color: var(--accent-primary);
  background: var(--glass-hover-bg);
}

.dropdown-title {
  font-size: 0.75rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--text-muted);
}

.scheme-picker {
  position: fixed;
  bottom: 5rem;
  right: 1.25rem;
  z-index: calc(var(--layer-floating-control) - 1);
  width: 260px;
  padding: 1rem;
  transform: translateY(8px) scale(0.95);
}

.scheme-picker-title {
  /* .dropdown-title is inherited — extends with spacing */
  margin-bottom: 0.75rem;
}

.scheme-picker-list {
  display: flex;
  flex-direction: column;
  gap: 0.375rem;
}

.scheme-option {
  /* .dropdown-option inherited — extends with flex layout */
  display: flex;
  align-items: center;
  gap: 0.75rem;
}

.scheme-option-swatches {
  display: flex;
  gap: 3px;
  flex-shrink: 0;
}

.scheme-swatch {
  width: 14px;
  height: 14px;
  border-radius: 9999px;
  border: 1px solid var(--scheme-swatch-border);
  flex-shrink: 0;
}

.scheme-option-info {
  display: flex;
  flex-direction: column;
  min-width: 0;
}

.scheme-option-name {
  font-size: 0.8125rem;
  font-weight: 600;
  line-height: 1.2;
}

.scheme-option-desc {
  font-size: 0.6875rem;
  color: var(--text-muted);
  line-height: 1.3;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.scheme-option-check {
  margin-left: auto;
  width: 1rem;
  height: 1rem;
  color: var(--accent-primary);
  opacity: 0;
  flex-shrink: 0;
}

.scheme-option.is-active .scheme-option-check {
  opacity: 1;
}

/* 15. Alternate color scheme component overrides */

/* ── Alternate olive scheme overrides ─────────────────────────────
   Only rules where the desired color differs from what
   var(--accent-primary) and var(--accent-secondary) resolve to
   in the alternate olive context. Most switching is handled by tokens.
   ─────────────────────────────────────────────────────── */

/* Card shadows */
[data-color-scheme="alt"] .filter-bar {
  box-shadow: 0 0 24px var(--card-shadow);
}

/* Selection */
[data-color-scheme="alt"] ::selection { background: var(--accent-primary-light); color: var(--text-primary); }
[data-color-scheme="alt"].dark ::selection { background: var(--selection-bg-dark); color: var(--surface-100); }

/* Circular glass elements — match the scheme-tinted glass border so they're
   consistent with glass-card / glass-panel in the olive theme */
[data-color-scheme="alt"] .hero-scroll-btn   { border-color: var(--glass-border); }
[data-color-scheme="alt"] .trust-divider-circle { border-color: var(--glass-border); }
/* dark-toggle: light-mode only — the alt.dark state already uses transparent white */
[data-color-scheme="alt"]:not(.dark) .dark-toggle { border-color: var(--glass-border); }

/* Alt dark mode: hero scroll button consistent with default dark */
[data-color-scheme="alt"].dark .hero-scroll-btn {
  background: var(--ui-surface-bg-dark);
  border-color: var(--ui-surface-border-dark);
  color: var(--accent-primary);
}

/* Alt dark mode: trust divider circle consistent with default dark */
[data-color-scheme="alt"].dark .trust-divider-circle {
  background: var(--ui-surface-bg-dark);
  border-color: var(--ui-surface-border-dark);
}

/* ── Alternate olive dark: Component overrides ──────────────────── */

/* Dark toggle FAB — already combined with default dark via selector grouping */

/* Long-press hint pulse — reuses scheme-hint-pulse keyframe (identical values;
   --accent-primary-shadow resolves correctly per-theme automatically) */
[data-color-scheme="alt"].dark .dark-toggle[data-scheme-picker-hint] {
  animation: scheme-hint-pulse 0.6s ease;
}
/* 16. 404 page */
/* ==========================================================================
   11. 404 PAGE
   Not found page styles
   ========================================================================== */

.not-found {
  min-height: 100vh;
  min-height: 100dvh;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 2rem 1.25rem;
}

.not-found-content {
  width: 100%;
  max-width: 32rem;
  margin: 0 auto;
}

.not-found-glass {
  padding: 3rem 2rem;
  text-align: center;
}

.not-found-icon {
  color: var(--accent-primary);
  margin-bottom: 1.5rem;
}

.not-found-title {
  font-family: var(--font-heading);
  font-size: clamp(4rem, 10vw, 6rem);
  font-weight: bold;
  color: var(--accent-primary);
  line-height: 1;
  margin-bottom: 0.5rem;
}


.not-found-text {
  font-size: 1.25rem;
  font-weight: 600;
  color: var(--neutral-800);
  margin-bottom: 0.75rem;
}

.dark .not-found-text { color: var(--surface-100); }

.not-found-subtext {
  color: var(--neutral-500);
  font-size: 0.9375rem;
  margin-bottom: 2rem;
}

.dark .not-found-subtext { color: var(--surface-400); }

.not-found-btn {
  display: inline-flex;
  width: auto;
  padding: 0.875rem 1.75rem;
}

/* ── Pagination ───────────────────────────────────── */

.page-hidden { display: none !important; }

/* Trigger button — matches view-toggle container style */
.per-page-wrap {
  position: relative;
}

.per-page-trigger {
  display: flex;
  align-items: center;
  gap: 0.375rem;
  min-height: 40px;
  padding: 0 0.625rem;
  background: var(--pill-inactive-bg);
  border: 1px solid var(--pill-inactive-border);
  border-radius: 0.75rem;
  color: var(--text-secondary);
  font-family: var(--font-ui);
  font-size: 0.8125rem;
  font-weight: 500;
  cursor: pointer;
  white-space: nowrap;
  transition: border-color var(--duration-normal) ease, background var(--duration-normal) ease;
}

.per-page-trigger:hover { border-color: var(--accent-primary); }

.per-page-trigger[aria-expanded="true"] {
  border-color: var(--accent-primary);
  background: var(--glass-hover-bg);
}

.per-page-chevron {
  transition: transform 0.2s ease;
}

.per-page-trigger[aria-expanded="true"] .per-page-chevron {
  transform: rotate(180deg);
}

/* ── Sticky variant (compact, mobile-first) ──
   Used inside the sticky bar. Smaller height/padding than the desktop
   variant so it fits alongside the filter button, search field, and
   single view-toggle button on narrow viewports. */
.per-page-trigger--sticky {
  min-height: 34px;
  padding: 0 0.4375rem;
  font-size: 0.75rem;
  gap: 0.25rem;
}

.per-page-trigger--sticky .per-page-trigger__icon {
  width: 13px;
  height: 13px;
}

.per-page-trigger--sticky .per-page-chevron {
  width: 10px;
  height: 10px;
}

@media (min-width: 640px) {
  .per-page-trigger--sticky {
    min-height: 38px;
    padding: 0 0.5rem;
    font-size: 0.8125rem;
  }
  .per-page-trigger--sticky .per-page-trigger__icon {
    width: 15px;
    height: 15px;
  }
}

/* Panel — mirrors .scheme-picker */
.per-page-panel {
  /* .dropdown-panel inherited — extends with positioning */
  position: absolute;
  top: calc(100% + 0.5rem);
  right: 0;
  z-index: 55;
  width: 160px;
  padding: 0.75rem;
}

.per-page-panel-title {
  /* .dropdown-title inherited — extends with spacing */
  margin-bottom: 0.5rem;
  padding: 0 0.25rem;
}

.per-page-option {
  /* .dropdown-option inherited — extends with text sizing */
  display: block;
  padding: 0.5rem 0.75rem;
  text-align: left;
  font-size: 0.8125rem;
  font-weight: 500;
}


.pagination-controls {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 1rem;
  margin-top: 2.5rem;
  padding-bottom: 1rem;
}

.pagination-btn {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  padding: 0.5rem 1rem;
  border-radius: 0.625rem;
  border: 1px solid var(--neutral-200);
  background: var(--surface-50);
  color: var(--neutral-700);
  font-size: 0.875rem;
  font-family: inherit;
  font-weight: 500;
  cursor: pointer;
  transition: background 0.15s, border-color 0.15s, color 0.15s;
}

.pagination-btn:hover:not(:disabled) {
  background: var(--accent-primary-light);
  border-color: var(--accent-primary);
  color: var(--accent-primary);
}

.pagination-btn:disabled {
  opacity: 0.35;
  cursor: not-allowed;
}

.dark .pagination-btn {
  background: var(--neutral-800);
  color: var(--surface-300);
  border-color: var(--neutral-600);
}

.dark .pagination-btn:hover:not(:disabled) {
  background: var(--accent-primary-light);
  border-color: var(--accent-primary);
  color: var(--accent-primary);
}

.pagination-indicator {
  font-size: 0.875rem;
  color: var(--neutral-500);
  min-width: 5rem;
  text-align: center;
}

.dark .pagination-indicator { color: var(--surface-400); }

/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3BhcnRpYWxzL21haW4uY3NzIiwiLi4vcGFydGlhbHMvZm9udHMuY3NzIiwiLi4vcGFydGlhbHMvdG9rZW5zLmNzcyIsIi4uL3BhcnRpYWxzL3Jlc2V0LmNzcyIsIi4uL3BhcnRpYWxzL3V0aWxpdGllcy5jc3MiLCIuLi9wYXJ0aWFscy9nbGFzcy5jc3MiLCIuLi9wYXJ0aWFscy9oZXJvLmNzcyIsIi4uL3BhcnRpYWxzL2NhdGFsb2cuY3NzIiwiLi4vcGFydGlhbHMvY2F0YWxvZy1jYXJkLmNzcyIsIi4uL3BhcnRpYWxzL3Byb2R1Y3QtcXVpY2stdmlldy5jc3MiLCIuLi9wYXJ0aWFscy9kcmF3ZXIuY3NzIiwiLi4vcGFydGlhbHMvdHJ1c3QuY3NzIiwiLi4vcGFydGlhbHMvZm9vdGVyLmNzcyIsIi4uL3BhcnRpYWxzL2RhcmstdG9nZ2xlLmNzcyIsIi4uL3BhcnRpYWxzL3NjaGVtZS1waWNrZXIuY3NzIiwiLi4vcGFydGlhbHMvc2NoZW1lLW92ZXJyaWRlcy5jc3MiLCIuLi9wYXJ0aWFscy80MDQuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OytFQUkrRTs7QUFFL0UsOEJBQThCOztBQ045Qjs7OzsrRUFJK0U7O0FBRS9FO0VBQ0UsNkJBQTZCO0VBQzdCLDhGQUE4RjtFQUM5RixnQkFBZ0I7RUFDaEIsa0JBQWtCO0VBQ2xCLGtCQUFrQjtBQUNwQjs7QUFFQTtFQUNFLDZCQUE2QjtFQUM3Qiw4RkFBOEY7RUFDOUYsZ0JBQWdCO0VBQ2hCLGtCQUFrQjtFQUNsQixrQkFBa0I7QUFDcEI7O0FBRUE7RUFDRSw0QkFBNEI7RUFDNUIsNEZBQTRGO0VBQzVGLGdCQUFnQjtFQUNoQixrQkFBa0I7RUFDbEIsa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0UsNEJBQTRCO0VBQzVCLDRGQUE0RjtFQUM1RixnQkFBZ0I7RUFDaEIsa0JBQWtCO0VBQ2xCLGtCQUFrQjtBQUNwQjs7QUFFQTtFQUNFLDRCQUE0QjtFQUM1Qiw0RkFBNEY7RUFDNUYsZ0JBQWdC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QXlCO0VBQ3pCLG1CQUFtQjtFQUNuQixvQkFBb0I7RUFDcEIsZ0JBQWdCO0VBQ2hCLGVBQWU7RUFDZiw2REFBNkQ7QUFDL0Q7O0FBRUE7RUFDRSx1Q0FBdUM7RUFDdkMsbUNBQW1DO0VBQ25DLDRCQUE0QjtBQUM5Qjs7QUFFQTtFQUNFLGFBQWE7RUFDYixtQkFBbUI7QUFDckI7O0FBRUE7RUFDRSw4QkFBOEI7RUFDOUIseUJBQXlCO0VBQ3pCLGdDQUFnQztBQUNsQzs7QUFFQTtFQUNFLHVDQUF1QztFQUN2QyxtQ0FBbUM7RUFDbkMsNEJBQTRCO0FBQzlCOztBQUVBO0VBQ0UsbUJBQW1CO0VBQ25CLHlCQUF5QjtFQUN6QixlQUFlO0VBQ2Ysa0JBQWtCO0FBQ3BCOztBQUVBLDhCQUE4Qix5QkFBeUIsRUFBRSIsImZpbGUiOiJzdHlsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgSHViUmFpeiDigJQgTWFpbiBTdHlsZXNoZWV0IEVudHJ5IFBvaW50XG4gICBJbXBvcnRzIGFsbCBDU1MgcGFydGlhbHMgaW4gZG9jdW1lbnRlZCBhcmNoaXRlY3R1cmUgb3JkZXIuXG4gICBQb3N0Q1NTICsgcG9zdGNzcy1pbXBvcnQgYnVuZGxlcyB0aGlzIGludG8gZGlzdC9zdHlsZS5jc3MgYXQgYnVpbGQgdGltZS5cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIDEuIFNlbGYtaG9zdGVkIGZvbnQgZmFjZXMgKi9cbkBpbXBvcnQgXCIuL2ZvbnRzLmNzc1wiO1xuXG4vKiAyLiBEZXNpZ24gdG9rZW5zIOKAlCBNVVNUIGZvbGxvdyBmb250czsgYWxsIGNvbXBvbmVudCBwYXJ0aWFscyBkZXBlbmQgb24gdGhlc2UgKi9cbkBpbXBvcnQgXCIuL3Rva2Vucy5jc3NcIjtcblxuLyogMy4gUmVzZXQgJiBiYXNlICovXG5AaW1wb3J0IFwiLi9yZXNldC5jc3NcIjtcblxuLyogNC4gVXRpbGl0aWVzIChrZXlmcmFtZXMsIGFuaW1hdGlvbnMsIGF0b21pYyBoZWxwZXJzKSAqL1xuQGltcG9ydCBcIi4vdXRpbGl0aWVzLmNzc1wiO1xuXG4vKiA1LiBHbGFzcyBtb3JwaGlzbSAqL1xuQGltcG9ydCBcIi4vZ2xhc3MuY3NzXCI7XG5cbi8qIDYuIEhlcm8gc2VjdGlvbiAqL1xuQGltcG9ydCBcIi4vaGVyby5jc3NcIjtcblxuLyogNy4gQ2F0YWxvZyAoZmlsdGVyIGJhciwgcGlsbHMsIHNlYXJjaCwgZ3JpZC9saXN0IGxheW91dCkgKi9cbkBpbXBvcnQgXCIuL2NhdGFsb2cuY3NzXCI7XG5cbi8qIDguIFByb2R1Y3QgY2FyZCAqL1xuQGltcG9ydCBcIi4vY2F0YWxvZy1jYXJkLmNzc1wiO1xuXG4vKiA5LiBQcm9kdWN0IHF1aWNrIHZpZXcgKi9cbkBpbXBvcnQgXCIuL3Byb2R1Y3QtcXVpY2stdmlldy5jc3NcIjtcblxuLyogMTAuIE1vYmlsZSBmaWx0ZXIgZHJhd2VyICovXG5AaW1wb3J0IFwiLi9kcmF3ZXIuY3NzXCI7XG5cbi8qIDExLiBUcnVzdCBzZWN0aW9uICovXG5AaW1wb3J0IFwiLi90cnVzdC5jc3NcIjtcblxuLyogMTIuIEZvb3RlciAqL1xuQGltcG9ydCBcIi4vZm9vdGVyLmNzc1wiO1xuXG4vKiAxMy4gRGFyayBtb2RlIHRvZ2dsZSBGQUIgKi9cbkBpbXBvcnQgXCIuL2RhcmstdG9nZ2xlLmNzc1wiO1xuXG4vKiAxNC4gQ29sb3Igc2NoZW1lIHBpY2tlciBwYW5lbCAqL1xuQGltcG9ydCBcIi4vc2NoZW1lLXBpY2tlci5jc3NcIjtcblxuLyogMTUuIEFsdGVybmF0ZSBjb2xvciBzY2hlbWUgY29tcG9uZW50IG92ZXJyaWRlcyAqL1xuQGltcG9ydCBcIi4vc2NoZW1lLW92ZXJyaWRlcy5jc3NcIjtcblxuLyogMTYuIDQwNCBwYWdlICovXG5AaW1wb3J0IFwiLi80MDQuY3NzXCI7XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgU2VsZi1ob3N0ZWQgdHlwb2dyYXBoeVxuICAgSUJNIFBsZXggZmlsZXMgYXJlIGluc3RhbGxlZCBmcm9tIEBmb250c291cmNlIGR1cmluZyBucG0gaW5zdGFsbCBhbmQgY29waWVkXG4gICBpbnRvIC9hc3NldHMvZm9udHMgYnkgRWxldmVudHkgYXQgYnVpbGQgdGltZS4gTm8gcnVudGltZSBHb29nbGUgRm9udHMgY2FsbHMuXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6IFwiSUJNIFBsZXggU2VyaWZcIjtcbiAgc3JjOiB1cmwoXCIvYXNzZXRzL2ZvbnRzL2libS1wbGV4LXNlcmlmL2libS1wbGV4LXNlcmlmLWxhdGluLTYwMC1ub3JtYWwud29mZjJcIikgZm9ybWF0KFwid29mZjJcIik7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC1kaXNwbGF5OiBzd2FwO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6IFwiSUJNIFBsZXggU2VyaWZcIjtcbiAgc3JjOiB1cmwoXCIvYXNzZXRzL2ZvbnRzL2libS1wbGV4LXNlcmlmL2libS1wbGV4LXNlcmlmLWxhdGluLTcwMC1ub3JtYWwud29mZjJcIikgZm9ybWF0KFwid29mZjJcIik7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC1kaXNwbGF5OiBzd2FwO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6IFwiSUJNIFBsZXggU2Fuc1wiO1xuICBzcmM6IHVybChcIi9hc3NldHMvZm9udHMvaWJtLXBsZXgtc2Fucy9pYm0tcGxleC1zYW5zLWxhdGluLTQwMC1ub3JtYWwud29mZjJcIikgZm9ybWF0KFwid29mZjJcIik7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC1kaXNwbGF5OiBzd2FwO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6IFwiSUJNIFBsZXggU2Fuc1wiO1xuICBzcmM6IHVybChcIi9hc3NldHMvZm9udHMvaWJtLXBsZXgtc2Fucy9pYm0tcGxleC1zYW5zLWxhdGluLTUwMC1ub3JtYWwud29mZjJcIikgZm9ybWF0KFwid29mZjJcIik7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC1kaXNwbGF5OiBzd2FwO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6IFwiSUJNIFBsZXggU2Fuc1wiO1xuICBzcmM6IHVybChcIi9hc3NldHMvZm9udHMvaWJtLXBsZXgtc2Fucy9pYm0tcGxleC1zYW5zLWxhdGluLTUwMC1pdGFsaWMud29mZjJcIikgZm9ybWF0KFwid29mZjJcIik7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgZm9udC1kaXNwbGF5OiBzd2FwO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6IFwiSUJNIFBsZXggU2Fuc1wiO1xuICBzcmM6IHVybChcIi9hc3NldHMvZm9udHMvaWJtLXBsZXgtc2Fucy9pYm0tcGxleC1zYW5zLWxhdGluLTYwMC1ub3JtYWwud29mZjJcIikgZm9ybWF0KFwid29mZjJcIik7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC1kaXNwbGF5OiBzd2FwO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6IFwiSUJNIFBsZXggU2Fuc1wiO1xuICBzcmM6IHVybChcIi9hc3NldHMvZm9udHMvaWJtLXBsZXgtc2Fucy9pYm0tcGxleC1zYW5zLWxhdGluLTcwMC1ub3JtYWwud29mZjJcIikgZm9ybWF0KFwid29mZjJcIik7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC1kaXNwbGF5OiBzd2FwO1xufVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIDEuIERFU0lHTiBUT0tFTlNcbiAgIENTUyBjdXN0b20gcHJvcGVydGllcyBvcmdhbml6ZWQgYnkgcm9sZTpcbiAgIFxuICAg4pSM4pSAIFBhbGV0dGUgUHJpbWl0aXZlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgIOKUgiAgU3VyZmFjZSwgTmV1dHJhbCDigJQgYmFzZSBjb2xvciBzY2FsZXMgICAgICAgICAgICAgICAgICAgIOKUglxuICAg4pSCICBGZWVkIHNlbWFudGljIHRva2VuczsgYWxzbyBjb25zdW1lZCBkaXJlY3RseSBieSBzb21lICAgIOKUglxuICAg4pSCICBjb21wb25lbnQgb3ZlcnJpZGVzIChlc3BlY2lhbGx5IC5kYXJrIHNlbGVjdG9yIGJsb2NrcykgIOKUglxuICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gICDilIzilIAgQWNjZW50IFN5c3RlbSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgIOKUgiAgLS1hY2NlbnQtcHJpbWFyeSAvIC0tYWNjZW50LXNlY29uZGFyeSArIHZhcmlhbnRzICAgICAgICDilIJcbiAgIOKUgiAgU1dBUCBiZXR3ZWVuIGRlZmF1bHQgYW5kIGFsdCB0aGVtZXMgICAgICAgICAgICAgICAgICAgICDilIJcbiAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAg4pSM4pSAIFNlbWFudGljIFRva2VucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgIOKUgiAgLS1iZy1wcmltYXJ5LCAtLXRleHQtKiwgLS1nbGFzcy0qLCAtLXBpbGwtKiwgZXRjLiAgICAgIOKUglxuICAg4pSCICBPdmVycmlkZSBpbiAuZGFyayAvIFthbHRdIC8gW2FsdF0uZGFyayAvIEBtZWRpYSAgICAgICAg4pSCXG4gICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgIOKUjOKUgCBTY2hlbWUgVG9rZW5zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAg4pSCICAtLXNjaGVtZS0qIOKAlCBjb250ZXh0LXNwZWNpZmljIG92ZXJyaWRlcyBwZXIgdGhlbWUgICAgICAg4pSCXG4gICDilIIgIEVhY2ggZGVmaW5lZCBpbiA6cm9vdCBhbmQgb3ZlcnJpZGRlbiBwZXIgdGhlbWUgYmxvY2sgICAg4pSCXG4gICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgIOKUjOKUgCBTdHJ1Y3R1cmFsIFRva2VucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgIOKUgiAgLS1jaHJvbWUtc2hhZG93LSosIC0tZ2xhc3MtaW5zZXQtKiwgLS11aS1zdXJmYWNlLSogICAgIOKUglxuICAg4pSCICAtLXRvZ2dsZS0qLCAtLWRyYXdlci1jbG9zZS0qLCAtLWJ0bi1pbnNldC0qICAgICAgICAgICAg4pSCXG4gICDilIIgIFNoYWRvd3MsIGhpZ2hsaWdodHMsIHRyYW5zbHVjZW50IG92ZXJsYXlzICAgICAgICAgICAgICAg4pSCXG4gICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgIFxuICAgVGhlbWUgc3RydWN0dXJlOlxuICAgICA6cm9vdCAgICAgICAgICAgICAgICAgICAgICAgICDihpIgRGVmYXVsdCAoT3JhbmdlKSBsaWdodCBtb2RlXG4gICAgIC5kYXJrICAgICAgICAgICAgICAgICAgICAgICAgIOKGkiBEZWZhdWx0IChPcmFuZ2UpIGRhcmsgbW9kZVxuICAgICBbZGF0YS1jb2xvci1zY2hlbWU9XCJhbHRcIl0gICAgIOKGkiBBbHQgKE9saXZlKSBsaWdodCBtb2RlXG4gICAgIFtkYXRhLWNvbG9yLXNjaGVtZT1cImFsdFwiXS5kYXJr4oaSIEFsdCAoT2xpdmUpIGRhcmsgbW9kZVxuICAgICBAbWVkaWEocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyaykg4oaSIE5vbi1KUyBkYXJrIGZhbGxiYWNrXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG46cm9vdCB7XG4gIGNvbG9yLXNjaGVtZTogbGlnaHQ7XG5cbiAgLyogU3VyZmFjZSBwYWxldHRlIOKAlCBiYXNlIGNhbnZhcyB0b25lcyBmb3IgYmFja2dyb3VuZHMgJiBsaWdodCB0ZXh0IG9uIGRhcmsgKi9cbiAgLS1zdXJmYWNlLTUwOiAjRkFGN0YyO1xuICAtLXN1cmZhY2UtMTAwOiAjRjVGMEU4O1xuICAtLXN1cmZhY2UtMjAwOiAjRUJFM0Q1O1xuICAtLXN1cmZhY2UtMzAwOiAjRDRDOEI0O1xuICAtLXN1cmZhY2UtNDAwOiAjQjhBNjhFO1xuXG4gIC8qIE5ldXRyYWwgcGFsZXR0ZSDigJQgdGV4dCwgYm9yZGVycywgYW5kIHN0cnVjdHVyYWwgdG9uZXMgKi9cbiAgLS1uZXV0cmFsLTIwMDogI0QxQkZBODtcbiAgLS1uZXV0cmFsLTMwMDogI0IwOUE3RTtcbiAgLS1uZXV0cmFsLTQwMDogIzhBNzI2MDtcbiAgLS1uZXV0cmFsLTUwMDogIzZFNUE0ODtcbiAgLS1uZXV0cmFsLTYwMDogIzVDNEEzQTtcbiAgLS1uZXV0cmFsLTcwMDogIzRBM0EyRTtcbiAgLS1uZXV0cmFsLTgwMDogIzNEMkUyMjtcbiAgLS1uZXV0cmFsLTkwMDogIzJDMTgxMDtcblxuICAvKiBHbGFzcyBjYXJkL3BhbmVsIHNoYWRvdyB0b2tlbnMgKi9cbiAgLS1jYXJkLXNoYWRvdzogICAgICAgcmdiYSg0NCwgMjQsIDE2LCAwLjA0KTtcbiAgLS1jYXJkLXNoYWRvdy1ob3ZlcjogcmdiYSgyNTUsIDkyLCAwLCAwLjA4KTtcblxuICAvKiBNYXJrZXRwbGFjZSBjb2xvcnMgKi9cbiAgLS1tbC15ZWxsb3c6ICNGRkU2MDA7XG4gIC0tbWwteWVsbG93LWhvdmVyOiAjRkZENzAwO1xuICAtLW1sLW5hdnk6ICMyRDMyNzc7XG4gIC0tbWwtc2hhZG93OiByZ2JhKDI1NSwgMjMwLCAwLCAwLjI1KTtcbiAgLS1tbC1zaGFkb3ctaG92ZXI6IHJnYmEoMjU1LCAyMzAsIDAsIDAuMzUpO1xuICAtLXNob3BlZS1vcmFuZ2U6ICNFRTREMkQ7XG4gIC0tc2hvcGVlLW9yYW5nZS1ob3ZlcjogI0Q3MzIxMTtcbiAgLS1zaG9wZWUtc2hhZG93OiByZ2JhKDIzOCwgNzcsIDQ1LCAwLjI1KTtcbiAgLS1zaG9wZWUtc2hhZG93LWhvdmVyOiByZ2JhKDIzOCwgNzcsIDQ1LCAwLjM1KTtcblxuICAvKiBGb250cyAqL1xuICAtLWZvbnQtaGVhZGluZzogXCJJQk0gUGxleCBTZXJpZlwiLCBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiLCBDYW1icmlhLCBcIk5vdG8gU2VyaWZcIiwgc2VyaWY7XG4gIC0tZm9udC1ib2R5OiBcIklCTSBQbGV4IFNhbnNcIiwgc3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBcIlNlZ29lIFVJXCIsIFJvYm90bywgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgLS1mb250LXVpOiBcIklCTSBQbGV4IFNhbnNcIiwgc3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBcIlNlZ29lIFVJXCIsIFJvYm90bywgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcblxuICAvKiBUcmFuc2l0aW9uIHByZXNldHMgKi9cbiAgLS1lYXNlLW91dDogY3ViaWMtYmV6aWVyKDAuMjIsIDEsIDAuMzYsIDEpO1xuICAtLWR1cmF0aW9uLW5vcm1hbDogMC4ycztcbiAgLS1kdXJhdGlvbi1zbG93OiAwLjNzO1xuXG4gIC8qIExheWVyIHNjYWxlIOKAlCBhY3RpdmUgcGFuZWxzIG11c3Qgc2l0IGFib3ZlIGZpeGVkIGNvbnRyb2xzIGFuZCBjYXRhbG9nIGNocm9tZS4gKi9cbiAgLS1sYXllci1mbG9hdGluZy1jb250cm9sOiA1MDtcbiAgLS1sYXllci1hY3RpdmUtcGFuZWwtYmFja2Ryb3A6IDEwMDA7XG4gIC0tbGF5ZXItYWN0aXZlLXBhbmVsOiAxMDAxO1xuXG4gIC8qIEFjY2VudCBzeXN0ZW0g4oCUIHByaW1hcnkgYWNjZW50IHdpdGggc2Vjb25kYXJ5IGFzIGZhbGxiYWNrICovXG4gIC0tYWNjZW50LXByaW1hcnk6ICNGRjVDMDA7XG4gIC0tYWNjZW50LXByaW1hcnktaG92ZXI6ICNFOTRGMDA7XG4gIC0tYWNjZW50LXByaW1hcnktbGlnaHQ6IHJnYmEoMjU1LCA5MiwgMCwgMC4xMik7XG4gIC0tYWNjZW50LXByaW1hcnktYm9yZGVyOiByZ2JhKDI1NSwgOTIsIDAsIDAuMjUpO1xuICAtLWFjY2VudC1wcmltYXJ5LXNoYWRvdzogcmdiYSgyNTUsIDkyLCAwLCAwLjI1KTtcblxuICAtLWFjY2VudC1zZWNvbmRhcnk6ICM2MzZCMkY7XG4gIC0tYWNjZW50LXNlY29uZGFyeS1saWdodDogcmdiYSg5OSwgMTA3LCA0NywgMC4xMik7XG4gIC0tYWNjZW50LXNlY29uZGFyeS1ib3JkZXI6IHJnYmEoOTksIDEwNywgNDcsIDAuMjUpO1xuXG4gIC8qIFNlbWFudGljIGNvbG9ycyDigJQgbGlnaHQgbW9kZSBkZWZhdWx0cyAqL1xuICAtLWJnLXByaW1hcnk6ICNGNUYwRTg7XG4gIC0tdGV4dC1wcmltYXJ5OiAjMkMxODEwO1xuICAtLXRleHQtc2Vjb25kYXJ5OiAjNUM0QTNBO1xuICAtLXRleHQtbXV0ZWQ6ICM3MjVFNEM7XG4gIC0tdGV4dC1wbGFjZWhvbGRlcjogcmdiYSg5MiwgNzQsIDU4LCAwLjQpO1xuICAtLWdsYXNzLWJnOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODUpO1xuICAtLWdsYXNzLWJvcmRlcjogcmdiYSgyNTUsIDkyLCAwLCAwLjE0KTtcbiAgLS1nbGFzcy1ob3Zlci1iZzogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkyKTtcbiAgLS1nbGFzcy1ob3Zlci1ib3JkZXI6IHJnYmEoMjU1LCA5MiwgMCwgMC4yKTtcbiAgLS1maWx0ZXItYmFyLWJnOiByZ2JhKDI1MCwgMjQ3LCAyNDIsIDAuODgpO1xuICAtLWZpbHRlci1iYXItYm9yZGVyOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gIC0tc2VhcmNoLWJnOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7XG4gIC0tc2VhcmNoLWJvcmRlcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xuICAtLXNlYXJjaC1mb2N1cy1iZzogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkyKTtcbiAgLS1zZWFyY2gtZm9jdXMtYm9yZGVyOiByZ2JhKDI1NSwgOTIsIDAsIDAuNCk7XG4gIC0tcGlsbC1pbmFjdGl2ZS1iZzogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1xuICAtLXBpbGwtaW5hY3RpdmUtYm9yZGVyOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gIC0tcGlsbC1pbmFjdGl2ZS10ZXh0OiAjNUM0QTNBO1xuICAtLWRyYXdlci1wYW5lbC1iZzogcmdiYSgyNTAsIDI0NywgMjQyLCAwLjkyKTtcbiAgLS1kcmF3ZXItYm9yZGVyOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gIC0tZHJhd2VyLW92ZXJsYXktYmc6IHJnYmEoNDQsIDI0LCAxNiwgMC40KTtcbiAgLS1kZXNjLWZhZGU6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44NSk7XG4gIC0tZm9vdGVyLWJnOiAjMkMxODEwO1xuICAtLWZvb3Rlci10ZXh0OiAjRTVERkQ0O1xuICAtLWZvb3Rlci1tdXRlZDogcmdiYSgyMDAsIDE5MCwgMTc1LCAwLjc1KTtcbiAgLS1zY2hlbWUtZm9vdGVyLWFjY2VudDogI0ZGOEM1QTtcbiAgLS1zY2hlbWUtZm9vdGVyLWljb246IHJnYmEoMjU1LCAxNDAsIDkwLCAwLjY1KTtcbiAgLS1zY2hlbWUtZm9vdGVyLWJvcmRlcjogcmdiYSgyNTUsIDE0MCwgOTAsIDAuMTIpO1xuICAtLWZvb3Rlci1kaXNjbGFpbWVyOiByZ2JhKDIwMCwgMTkwLCAxNzUsIDAuOCk7XG5cbiAgLyogU2NoZW1lLXNwZWNpZmljIGFjY2VudCB0b2tlbnMg4oCUIGRlZmF1bHQgKG9yYW5nZSkgdGhlbWUgKi9cbiAgLS1zY2hlbWUtaGVyby10YWdsaW5lOiAjRkY1QzAwO1xuICAvKiBUYWcsIHBpbGwsIGJhZGdlIHRva2VucyB1c2UgLS1hY2NlbnQtcHJpbWFyeSBmYW1pbHkgZGlyZWN0bHlcbiAgICAgc28gdGhleSBzd2FwIGF1dG9tYXRpY2FsbHkgd2l0aCB0aGUgYWN0aXZlIGNvbG9yIHNjaGVtZS4gKi9cbiAgLS1zY2hlbWUtYmFkZ2UtYmc6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLWFjY2VudC1wcmltYXJ5KSAwJSwgdmFyKC0tYWNjZW50LXByaW1hcnktaG92ZXIpIDEwMCUpO1xuICAtLXNjaGVtZS1zY3JvbGwtdGh1bWI6IHJnYmEoMjU1LCA5MiwgMCwgMC40KTtcbiAgLS1zY2hlbWUtZm9jdXMtcmluZzogI0ZGNUMwMDtcbiAgLS1zY2hlbWUtaGVyby1sb2dvLWJnOiByZ2JhKDI1NSwgOTIsIDAsIDAuMDYpO1xuICAtLXNjaGVtZS1oZXJvLWxvZ28tYmctZGFyazogcmdiYSgyNTUsIDE0MCwgOTAsIDAuMTYpO1xuICAtLXNjaGVtZS1oZXJvLXRydXN0OiAjNkU1QTQ4O1xuICAtLXNjaGVtZS1oZXJvLXNjcm9sbC1jb2xvcjogcmdiYSgyNTUsIDkyLCAwLCAwLjYpO1xuICAtLXNjaGVtZS1pbWFnZS13cmFwLWJnOiByZ2JhKDIzNSwgMjI3LCAyMTMsIDAuMyk7XG4gIC0tc2NoZW1lLWltYWdlLXdyYXAtYmctZGFyazogcmdiYSg0NCwgMjQsIDE2LCAwLjQpO1xuICAtLXNjaGVtZS1vdmVybGF5LWdyYWRpZW50OiByZ2JhKDQ0LCAyNCwgMTYsIDAuMik7XG4gIC0tc2NoZW1lLW92ZXJsYXktZ3JhZGllbnQtZGFyazogcmdiYSgwLCAwLCAwLCAwLjIpO1xuICAtLXNjaGVtZS1zZWFyY2gtZm9jdXMtcmluZzogcmdiYSgyNTUsIDkyLCAwLCAwLjA4KTtcbiAgLS1zY2hlbWUtc2VhcmNoLWZvY3VzLXJpbmctc3Ryb25nOiByZ2JhKDI1NSwgOTIsIDAsIDAuMSk7XG4gIC0tc2NoZW1lLXRydXN0LWRpdmlkZXI6IHJnYmEoMjU1LCAxNDAsIDkwLCAwLjMpO1xuICAtLXNjaGVtZS10cnVzdC1kaXZpZGVyLWRhcms6IHJnYmEoMjU1LCA5MiwgMCwgMC4xMik7XG4gIC8qIE1hcmtldHBsYWNlIGJhZGdlIOKAlCBzdWJ0bGUgYWNjZW50IHRpbnQgKGZvb3RlciBpcyBhbHdheXMgZGFyaykgKi9cbiAgLS1zY2hlbWUtbWFya2V0cGxhY2UtYmFkZ2UtYmc6IHJnYmEoMjU1LCAxNDAsIDkwLCAwLjE1KTtcbiAgLS1zY2hlbWUtbWFya2V0cGxhY2UtYmFkZ2UtYm9yZGVyOiByZ2JhKDI1NSwgMTQwLCA5MCwgMC4zKTtcblxuICAvKiBUYWcgaGllcmFyY2h5IOKAlCBib3RoIHVzZSBhY2NlbnQtcHJpbWFyeS1saWdodCBiZyAoaGVybyBpY29uIHN0eWxlKS5cbiAgICAgQnJhbmQgdGFnczogZnVsbCBhY2NlbnQgdGV4dCArIGZ1bGwgYWNjZW50IGJvcmRlciArIGJvbGQgPSBwb3BzLlxuICAgICBDYXRlZ29yeSB0YWdzOiBmYWRlZCBhY2NlbnQgdGV4dCArIGZhZGVkIGFjY2VudCBib3JkZXIgKyBub3JtYWwgPSByZWNlZGVzLlxuICAgICBObyBzZXBhcmF0ZSAtZGFyayB0b2tlbnMgbmVlZGVkOyBhY2NlbnQgdG9rZW5zIGF1dG8tc3dhcC4gKi9cbiAgLyog4pSA4pSAIFRleHQgb24gYWNjZW50IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgICBUZXh0IG9uIHNvbGlkL2ZpbGxlZCBhY2NlbnQgYmFja2dyb3VuZHMgKHNraXAgbGluaywgQ1RBIGJ1dHRvbnMpLiAqL1xuICAtLXRleHQtb24tYWNjZW50OiAjMkMxODEwO1xuXG4gIC8qIOKUgOKUgCBTZWxlY3Rpb24gaGlnaGxpZ2h0IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqL1xuICAtLXNlbGVjdGlvbi1iZy1kYXJrOiByZ2JhKDI1NSwgMTQwLCA5MCwgMC4zNSk7XG5cbiAgLyog4pSA4pSAIEdsYXNzIG1vcnBoaXNtIGluc2V0IGhpZ2hsaWdodHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgIFN1YnRsZSB0b3AtZWRnZSBoaWdobGlnaHQgdGhhdCBzaW11bGF0ZXMgbGlnaHQgcmVmbGVjdGlvblxuICAgICBvbiBnbGFzcyBzdXJmYWNlcyBpbiBsaWdodCBhbmQgZGFyayBtb2RlcyAqL1xuICAtLWdsYXNzLWluc2V0OiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7XG4gIC0tZ2xhc3MtaW5zZXQtaG92ZXI6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40KTtcbiAgLS1nbGFzcy1pbnNldC1kYXJrOiByZ2JhKDIyOSwgMjIzLCAyMTIsIDAuMDUpO1xuICAtLWdsYXNzLWluc2V0LWRhcmstaG92ZXI6IHJnYmEoMjI5LCAyMjMsIDIxMiwgMC4wOCk7XG5cbiAgLyog4pSA4pSAIFN0cnVjdHVyYWwgc2hhZG93cyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICAgV2FybS10aW50ZWQgZHJvcCBzaGFkb3dzIGZvciBVSSBjaHJvbWUgKHBhbmVscywgZHJhd2VycywgRkFCcykuXG4gICAgIExpZ2h0IG1vZGUgdXNlcyB3YXJtIGJyb3duIGJhc2U7IGRhcmsgbW9kZSB1c2VzIHB1cmUgYmxhY2suICovXG4gIC0tY2hyb21lLXNoYWRvdy1zbTogcmdiYSg0NCwgMjQsIDE2LCAwLjA1KTtcbiAgLS1jaHJvbWUtc2hhZG93LW1kOiByZ2JhKDQ0LCAyNCwgMTYsIDAuMDgpO1xuICAtLWNocm9tZS1zaGFkb3ctbGc6IHJnYmEoNDQsIDI0LCAxNiwgMC4xMik7XG4gIC0tY2hyb21lLXNoYWRvdy1kYXJrOiByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIC0tbG9nby1kcm9wLXNoYWRvdzogICByZ2JhKDAsIDAsIDAsIDAuMzUpOyAgLyogaGVybyBsb2dvIGdsb3cgZHJvcC1zaGFkb3cgKi9cblxuICAvKiDilIDilIAgVHJhbnNsdWNlbnQgVUkgc3VyZmFjZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgIFNlbWktdHJhbnNwYXJlbnQgd2hpdGUgb3ZlcmxheXMgZm9yIGNpcmN1bGFyIGdsYXNzIGVsZW1lbnRzXG4gICAgIChoZXJvIHNjcm9sbCBidXR0b24sIHRydXN0IGRpdmlkZXIsIHRvZ2dsZSBGQUIpLlxuICAgICBEYXJrIG1vZGUgdXNlcyBtdWNoIGxvd2VyIG9wYWNpdHkgZm9yIHN1YnRsZSB2aXNpYmlsaXR5LiAqL1xuICAtLXVpLXN1cmZhY2UtYmc6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKTtcbiAgLS11aS1zdXJmYWNlLWJvcmRlcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQpO1xuICAtLXVpLXN1cmZhY2UtaG92ZXItYmc6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcbiAgLS11aS1zdXJmYWNlLWJnLWRhcms6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7XG4gIC0tdWktc3VyZmFjZS1ib3JkZXItZGFyazogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xuICAtLXVpLXN1cmZhY2UtaG92ZXItYmctZGFyazogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTtcblxuICAvKiDilIDilIAgVG9nZ2xlIEZBQiBzdXJmYWNlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICAgVGhlIGZsb2F0aW5nIGFjdGlvbiBidXR0b24gZm9yIGRhcmsvbGlnaHQgbW9kZSBoYXMgaXRzIG93blxuICAgICBzdXJmYWNlIHRva2VucyBiZWNhdXNlIGl0IHVzZXMgYSBkaXN0aW5jdCBvcGFjaXR5IHJhbmdlLiAqL1xuICAtLXRvZ2dsZS1iZzogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xuICAtLXRvZ2dsZS1ib3JkZXI6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KTtcbiAgLS10b2dnbGUtYmctZGFyazogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xuICAtLXRvZ2dsZS1ib3JkZXItZGFyazogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KTtcblxuICAvKiDilIDilIAgRHJhd2VyIGNsb3NlIGJ1dHRvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi9cbiAgLS1kcmF3ZXItY2xvc2UtYmc6IHJnYmEoMjUwLCAyNDcsIDI0MiwgMC42KTtcbiAgLS1kcmF3ZXItY2xvc2UtYmctZGFyazogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xuICAtLWRyYXdlci1jbG9zZS1iZy1kYXJrLWhvdmVyOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpO1xuXG4gIC8qIOKUgOKUgCBCdXR0b24gaW5zZXQgaGlnaGxpZ2h0cyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICAgVG9wLWVkZ2UgaGlnaGxpZ2h0IGZvciBDVEEtc3R5bGUgYnV0dG9ucyAqL1xuICAtLWJ0bi1pbnNldDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KTtcbiAgLS1idG4taW5zZXQtaG92ZXI6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTtcbiAgLS1tbC1pbnNldDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xuICAtLW1sLWluc2V0LWhvdmVyOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNik7XG5cbiAgLyog4pSA4pSAIFNjaGVtZSBzd2F0Y2ggYm9yZGVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqL1xuICAtLXNjaGVtZS1zd2F0Y2gtYm9yZGVyOiByZ2JhKDEyOCwgMTI4LCAxMjgsIDAuMTUpO1xuXG4gIC8qIOKUgOKUgCBGb250LXdlaWdodCBzY2FsZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICAgVXNlZCBieSBoZXJvLCBmb290ZXIsIGFuZCBvdGhlciBjb21wb25lbnQgcGFydGlhbHMuICovXG4gIC0tZm9udC13ZWlnaHQtbm9ybWFsOiA0MDA7XG4gIC0tZm9udC13ZWlnaHQtbWVkaXVtOiA1MDA7XG4gIC0tZm9udC13ZWlnaHQtc2VtaWJvbGQ6IDYwMDtcbiAgLS1mb250LXdlaWdodC1ib2xkOiA3MDA7XG4gIC0tZm9udC13ZWlnaHQtZGlzcGxheTogNzAwO1xufVxuXG4vKiDilIDilIAgRGFyayBtb2RlIHRva2VucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgIFRoZXNlIHNlbWFudGljIHRva2VuIHZhbHVlcyBhcHBlYXIgVFdJQ0UgaW50ZW50aW9uYWxseTpcbiAgIDEuIC5kYXJrIHsgfSAgICAgICAgICAg4oaSIEpTLWRyaXZlbiB0b2dnbGUgKGxvY2FsU3RvcmFnZSAvIHVzZXIgY2xpY2spXG4gICAyLiBAbWVkaWEgcHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmsg4oaSIE5vbi1KUyBmYWxsYmFjayB3aGVuIG5vXG4gICAgICAubGlnaHQgb3IgLmRhcmsgY2xhc3MgaXMgcHJlc2VudCBvbiA8aHRtbD5cbiAgIERPIE5PVCBkZWR1cGxpY2F0ZSDigJQgdGhleSBzZXJ2ZSBkaWZmZXJlbnQgY29kZSBwYXRocy5cbiAgIFdoZW4gdXBkYXRpbmcgZGFyay1tb2RlIHZhbHVlcywgdXBkYXRlIEJPVEggYmxvY2tzLlxuICAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovXG5cbi8qIEpTLWRyaXZlbiBkYXJrIG1vZGUgKi9cbi5kYXJrIHtcbiAgY29sb3Itc2NoZW1lOiBkYXJrO1xuICAtLWJnLXByaW1hcnk6ICMxQTE4MTY7XG4gIC0tdGV4dC1wcmltYXJ5OiAjRTVERkQ0O1xuICAtLXRleHQtc2Vjb25kYXJ5OiAjRDRDNUI4O1xuICAtLXRleHQtbXV0ZWQ6ICNCMDlBN0U7XG4gIC0tdGV4dC1wbGFjZWhvbGRlcjogcmdiYSgyMDAsIDE5MCwgMTc1LCAwLjM1KTtcbiAgLS1nbGFzcy1iZzogcmdiYSgzNSwgMzIsIDI4LCAwLjg4KTtcbiAgLS1nbGFzcy1ib3JkZXI6IHJnYmEoMjU1LCAxNDAsIDkwLCAwLjIpO1xuICAtLWdsYXNzLWhvdmVyLWJnOiByZ2JhKDQ1LCA0MCwgMzQsIDAuOTIpO1xuICAtLWdsYXNzLWhvdmVyLWJvcmRlcjogcmdiYSgyNTUsIDE0MCwgOTAsIDAuMik7XG4gIC0tZmlsdGVyLWJhci1iZzogcmdiYSgyNiwgMjQsIDIyLCAwLjkyKTtcbiAgLS1maWx0ZXItYmFyLWJvcmRlcjogcmdiYSg2MCwgNTUsIDQ1LCAwLjUpO1xuICAtLXNlYXJjaC1iZzogcmdiYSgzNSwgMzIsIDI4LCAwLjg1KTtcbiAgLS1zZWFyY2gtYm9yZGVyOiByZ2JhKDYwLCA1NSwgNDUsIDAuNSk7XG4gIC0tc2VhcmNoLWZvY3VzLWJnOiByZ2JhKDQwLCAzNiwgMzAsIDAuOTIpO1xuICAtLXNlYXJjaC1mb2N1cy1ib3JkZXI6IHJnYmEoMjU1LCAxNDAsIDkwLCAwLjQpO1xuICAtLXBpbGwtaW5hY3RpdmUtYmc6IHJnYmEoMzUsIDMyLCAyOCwgMC43NSk7XG4gIC0tcGlsbC1pbmFjdGl2ZS1ib3JkZXI6IHJnYmEoNjAsIDU1LCA0NSwgMC41KTtcbiAgLS1waWxsLWluYWN0aXZlLXRleHQ6ICNFNURGRDQ7XG4gIC0tZHJhd2VyLXBhbmVsLWJnOiByZ2JhKDMwLCAyOCwgMjQsIDAuOTUpO1xuICAtLWRyYXdlci1ib3JkZXI6IHJnYmEoNjAsIDU1LCA0NSwgMC41KTtcbiAgLS1kcmF3ZXItb3ZlcmxheS1iZzogcmdiYSgwLCAwLCAwLCAwLjUpO1xuICAtLWRlc2MtZmFkZTogcmdiYSgzNSwgMzIsIDI4LCAwLjg1KTtcbiAgLS1mb290ZXItYmc6ICMxMzEyMTA7XG4gIC0tZm9vdGVyLWRpc2NsYWltZXI6IHJnYmEoMjAwLCAxOTAsIDE3NSwgMC43NSk7XG5cbiAgLyogRGFyayBtb2RlIHNjaGVtZSB0b2tlbiBvdmVycmlkZXMgKi9cbiAgLS1zY2hlbWUtaGVyby10YWdsaW5lOiB2YXIoLS1zY2hlbWUtZm9vdGVyLWFjY2VudCk7XG5cbiAgLyogRGFyayBtb2RlIGFjY2VudCDigJQgbGlnaHRlciBzaGFkZSBmb3IgY29udHJhc3Qgb24gZGFyayBiZyAqL1xuICAtLWFjY2VudC1wcmltYXJ5OiAjRkY4QzVBO1xuICAtLWFjY2VudC1wcmltYXJ5LWhvdmVyOiAjRkZBMDcwO1xuICAtLWFjY2VudC1wcmltYXJ5LWxpZ2h0OiByZ2JhKDI1NSwgMTQwLCA5MCwgMC4xNSk7XG4gIC0tYWNjZW50LXByaW1hcnktYm9yZGVyOiByZ2JhKDI1NSwgMTQwLCA5MCwgMC4zKTtcbiAgLS1hY2NlbnQtcHJpbWFyeS1zaGFkb3c6IHJnYmEoMjU1LCAxNDAsIDkwLCAwLjI1KTtcbiAgLS1jYXJkLXNoYWRvdy1ob3ZlcjogcmdiYSgyNTUsIDE0MCwgOTAsIDAuMDgpO1xuXG4gIC8qIEZvY3VzIHJpbmcgdXNlcyBsaWdodGVuZWQgYWNjZW50IGZvciB2aXNpYmlsaXR5IG9uIGRhcmsgYmcgKi9cbiAgLS1zY2hlbWUtZm9jdXMtcmluZzogdmFyKC0tYWNjZW50LXByaW1hcnkpO1xuXG4gIC8qIFRleHQgb24gc29saWQgYWNjZW50IGJhY2tncm91bmRzIOKAlCBkYXJrIHRpbnQgZm9yIGNvbnRyYXN0IG9uIGJyaWdodCBhY2NlbnQgKi9cbiAgLS10ZXh0LW9uLWFjY2VudDogIzU1MUYwMDtcbn1cblxuLyogU2NoZW1lIG92ZXJyaWRlOiBhbHRlcm5hdGUg4oCUIG9saXZlLWZpcnN0IHZhcmlhdGlvbiAqL1xuW2RhdGEtY29sb3Itc2NoZW1lPVwiYWx0XCJdIHtcbiAgLyogQWx0ZXJuYXRlIG9saXZlIHNjaGVtZSDigJQga2VlcHMgdGhlIG5hdHVyYWwtZm9vZCB0b25lIGF2YWlsYWJsZS4gKi9cbiAgLS1hY2NlbnQtcHJpbWFyeTogIzYzNkIyRjtcbiAgLS1hY2NlbnQtcHJpbWFyeS1ob3ZlcjogIzc0ODAzODtcbiAgLS1hY2NlbnQtcHJpbWFyeS1saWdodDogcmdiYSg5OSwgMTA3LCA0NywgMC4xNSk7XG4gIC0tYWNjZW50LXByaW1hcnktYm9yZGVyOiByZ2JhKDk5LCAxMDcsIDQ3LCAwLjI1KTtcbiAgLS1hY2NlbnQtcHJpbWFyeS1zaGFkb3c6IHJnYmEoOTksIDEwNywgNDcsIDAuMjUpO1xuICAtLWFjY2VudC1zZWNvbmRhcnk6ICNGRjVDMDA7XG4gIC0tYWNjZW50LXNlY29uZGFyeS1saWdodDogcmdiYSgyNTUsIDkyLCAwLCAwLjEyKTtcbiAgLS1hY2NlbnQtc2Vjb25kYXJ5LWJvcmRlcjogcmdiYSgyNTUsIDkyLCAwLCAwLjI1KTtcbiAgLS1jYXJkLXNoYWRvdy1ob3ZlcjogcmdiYSg5OSwgMTA3LCA0NywgMC4wOCk7XG4gIC0tZ2xhc3MtYm9yZGVyOiByZ2JhKDk5LCAxMDcsIDQ3LCAwLjE1KTtcbiAgLS1nbGFzcy1ob3Zlci1ib3JkZXI6IHJnYmEoOTksIDEwNywgNDcsIDAuMik7XG4gIC0tc2VhcmNoLWZvY3VzLWJvcmRlcjogcmdiYSg5OSwgMTA3LCA0NywgMC40KTtcblxuICAtLXNjaGVtZS1oZXJvLXRhZ2xpbmU6ICM2MzZCMkY7XG4gIC0tc2NoZW1lLXNjcm9sbC10aHVtYjogcmdiYSg5OSwgMTA3LCA0NywgMC40KTtcbiAgLS1zY2hlbWUtZm9jdXMtcmluZzogIzYzNkIyRjtcbiAgLS1zY2hlbWUtaGVyby1sb2dvLWJnOiByZ2JhKDk5LCAxMDcsIDQ3LCAwLjA4KTtcbiAgLS1zY2hlbWUtaGVyby1sb2dvLWJnLWRhcms6IHJnYmEoOTksIDEwNywgNDcsIDAuMik7XG4gIC0tc2NoZW1lLWhlcm8tdHJ1c3Q6ICM2RTVBNDg7XG4gIC0tc2NoZW1lLWhlcm8tc2Nyb2xsLWNvbG9yOiByZ2JhKDk5LCAxMDcsIDQ3LCAwLjYpO1xuICAtLXNjaGVtZS1mb290ZXItYWNjZW50OiAjQThCODU0O1xuICAtLXNjaGVtZS1mb290ZXItaWNvbjogcmdiYSgxNjgsIDE4NCwgODQsIDAuNik7XG4gIC0tc2NoZW1lLWZvb3Rlci1ib3JkZXI6IHJnYmEoMTY4LCAxODQsIDg0LCAwLjEpO1xuICAtLXNjaGVtZS1zZWFyY2gtZm9jdXMtcmluZzogcmdiYSg5OSwgMTA3LCA0NywgMC4wOCk7XG4gIC0tc2NoZW1lLXNlYXJjaC1mb2N1cy1yaW5nLXN0cm9uZzogcmdiYSg5OSwgMTA3LCA0NywgMC4xKTtcbiAgLS1zY2hlbWUtdHJ1c3QtZGl2aWRlcjogcmdiYSgxNjgsIDE4NCwgODQsIDAuMyk7XG4gIC0tc2NoZW1lLXRydXN0LWRpdmlkZXItZGFyazogcmdiYSg5OSwgMTA3LCA0NywgMC4xMik7XG4gIC0tc2NoZW1lLW1hcmtldHBsYWNlLWJhZGdlLWJnOiByZ2JhKDE2OCwgMTg0LCA4NCwgMC4xNSk7XG4gIC0tc2NoZW1lLW1hcmtldHBsYWNlLWJhZGdlLWJvcmRlcjogcmdiYSgxNjgsIDE4NCwgODQsIDAuMyk7XG4gIC0tZm9vdGVyLWRpc2NsYWltZXI6IHJnYmEoMjAwLCAxOTAsIDE3NSwgMC44KTtcbiAgLS1mb290ZXItYmc6ICMxQTIxMTA7XG4gIC0tc2VsZWN0aW9uLWJnLWRhcms6IHJnYmEoMTY4LCAxODQsIDg0LCAwLjM1KTtcbiAgLS10ZXh0LW9uLWFjY2VudDogI0ZGRkZGRjtcbn1cblxuW2RhdGEtY29sb3Itc2NoZW1lPVwiYWx0XCJdLmRhcmsge1xuICBjb2xvci1zY2hlbWU6IGRhcms7XG4gIC0tYWNjZW50LXByaW1hcnk6ICNBOEI4NTQ7XG4gIC0tYWNjZW50LXByaW1hcnktaG92ZXI6ICNCOEM4NjQ7XG4gIC0tYWNjZW50LXByaW1hcnktbGlnaHQ6IHJnYmEoMTY4LCAxODQsIDg0LCAwLjE1KTtcbiAgLS1hY2NlbnQtcHJpbWFyeS1ib3JkZXI6IHJnYmEoMTY4LCAxODQsIDg0LCAwLjMpO1xuICAtLWFjY2VudC1wcmltYXJ5LXNoYWRvdzogcmdiYSgxNjgsIDE4NCwgODQsIDAuMjUpO1xuICAtLWNhcmQtc2hhZG93LWhvdmVyOiByZ2JhKDE2OCwgMTg0LCA4NCwgMC4wOCk7XG4gIC0tZ2xhc3MtYm9yZGVyOiByZ2JhKDE2OCwgMTg0LCA4NCwgMC4yKTtcbiAgLS1nbGFzcy1ob3Zlci1ib3JkZXI6IHJnYmEoMTY4LCAxODQsIDg0LCAwLjIpO1xuICAtLXNlYXJjaC1mb2N1cy1ib3JkZXI6IHJnYmEoMTY4LCAxODQsIDg0LCAwLjQpO1xuXG4gIC0tYWNjZW50LXNlY29uZGFyeTogI0ZGOEM1QTtcbiAgLS1hY2NlbnQtc2Vjb25kYXJ5LWxpZ2h0OiByZ2JhKDI1NSwgMTQwLCA5MCwgMC4xNSk7XG4gIC0tYWNjZW50LXNlY29uZGFyeS1ib3JkZXI6IHJnYmEoMjU1LCAxNDAsIDkwLCAwLjMpO1xuICAtLXRleHQtc2Vjb25kYXJ5OiAjQzVENEI4O1xuXG4gIC0tc2NoZW1lLWhlcm8tdGFnbGluZTogdmFyKC0tc2NoZW1lLWZvb3Rlci1hY2NlbnQpO1xuICAtLXNjaGVtZS1mb2N1cy1yaW5nOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG4gIC0tZm9vdGVyLWJnOiAjMTExQTA4O1xuICAtLWZvb3Rlci1kaXNjbGFpbWVyOiByZ2JhKDIwMCwgMTkwLCAxNzUsIDAuNzUpO1xuICAtLXRleHQtb24tYWNjZW50OiAjMkMzMDE1O1xufVxuXG4vKiBMaWdodCBtb2RlIGV4cGxpY2l0IG9wdC1pbiDigJQgZm9yY2VzIG5hdGl2ZSBjb250cm9scyB0byBsaWdodCBzY2hlbWUgKi9cbi5saWdodCB7XG4gIGNvbG9yLXNjaGVtZTogbGlnaHQ7XG59XG5cbi8qIE5vbi1KUyBkYXJrIG1vZGUgZmFsbGJhY2sgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKS5cbiAqIE5PVEU6IFRoaXMgb25seSBhcHBsaWVzIHRoZSBkZWZhdWx0IEh1YlJhaXogZGFyayB0b2tlbnMuXG4gKiBVc2VycyB3aG8gc2VsZWN0ZWQgYW4gYWx0ZXJuYXRpdmUgY29sb3Igc2NoZW1lIHZpYSBKYXZhU2NyaXB0XG4gKiAoc3RvcmVkIGluIGxvY2FsU3RvcmFnZSBhcyBcImh1YnJhaXotY29sb3Itc2NoZW1lXCIpIHdpbGwgc2VlIHRoZVxuICogZGVmYXVsdCBzY2hlbWUgaWYgSmF2YVNjcmlwdCBpcyB1bmF2YWlsYWJsZSwgc2luY2VcbiAqIGRhdGEtY29sb3Itc2NoZW1lIGlzIHNldCBieSBKUyBhdCBydW50aW1lLlxuICovXG5AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7XG4gIC8qIE1pcnJvciBvZiAuZGFyayDigJQga2VlcCBpbiBzeW5jLiBXaGVuIHVwZGF0aW5nIGRhcmstbW9kZSB2YWx1ZXMsXG4gICAgIHVwZGF0ZSBCT1RIIHRoZSAuZGFyayBibG9jayAoSlMtdG9nZ2xlZCkgYW5kIHRoaXMgQG1lZGlhIGJsb2NrIChuby1KUyBmYWxsYmFjaykuICovXG4gIDpyb290Om5vdCgubGlnaHQpOm5vdCguZGFyaykge1xuICAgIGNvbG9yLXNjaGVtZTogZGFyaztcbiAgICAtLWJnLXByaW1hcnk6ICMxQTE4MTY7XG4gICAgLS10ZXh0LXByaW1hcnk6ICNFNURGRDQ7XG4gICAgLS10ZXh0LXNlY29uZGFyeTogI0Q0QzVCODtcbiAgICAtLXRleHQtbXV0ZWQ6ICNCMDlBN0U7XG4gICAgLS10ZXh0LXBsYWNlaG9sZGVyOiByZ2JhKDIwMCwgMTkwLCAxNzUsIDAuMzUpO1xuICAgIC0tZ2xhc3MtYmc6IHJnYmEoMzUsIDMyLCAyOCwgMC44OCk7XG4gICAgLS1nbGFzcy1ib3JkZXI6IHJnYmEoMjU1LCAxNDAsIDkwLCAwLjIpO1xuICAgIC0tZ2xhc3MtaG92ZXItYmc6IHJnYmEoNDUsIDQwLCAzNCwgMC45Mik7XG4gICAgLS1nbGFzcy1ob3Zlci1ib3JkZXI6IHJnYmEoMjU1LCAxNDAsIDkwLCAwLjIpO1xuICAgIC0tZmlsdGVyLWJhci1iZzogcmdiYSgyNiwgMjQsIDIyLCAwLjkyKTtcbiAgICAtLWZpbHRlci1iYXItYm9yZGVyOiByZ2JhKDYwLCA1NSwgNDUsIDAuNSk7XG4gICAgLS1zZWFyY2gtYmc6IHJnYmEoMzUsIDMyLCAyOCwgMC44NSk7XG4gICAgLS1zZWFyY2gtYm9yZGVyOiByZ2JhKDYwLCA1NSwgNDUsIDAuNSk7XG4gICAgLS1zZWFyY2gtZm9jdXMtYmc6IHJnYmEoNDAsIDM2LCAzMCwgMC45Mik7XG4gICAgLS1zZWFyY2gtZm9jdXMtYm9yZGVyOiByZ2JhKDI1NSwgMTQwLCA5MCwgMC40KTtcbiAgICAtLXBpbGwtaW5hY3RpdmUtYmc6IHJnYmEoMzUsIDMyLCAyOCwgMC43NSk7XG4gICAgLS1waWxsLWluYWN0aXZlLWJvcmRlcjogcmdiYSg2MCwgNTUsIDQ1LCAwLjUpO1xuICAgIC0tcGlsbC1pbmFjdGl2ZS10ZXh0OiAjRTVERkQ0O1xuICAgIC0tZHJhd2VyLXBhbmVsLWJnOiByZ2JhKDMwLCAyOCwgMjQsIDAuOTUpO1xuICAgIC0tZHJhd2VyLWJvcmRlcjogcmdiYSg2MCwgNTUsIDQ1LCAwLjUpO1xuICAgIC0tZHJhd2VyLW92ZXJsYXktYmc6IHJnYmEoMCwgMCwgMCwgMC41KTtcbiAgICAtLWRlc2MtZmFkZTogcmdiYSgzNSwgMzIsIDI4LCAwLjg1KTtcbiAgICAtLWZvb3Rlci1iZzogIzEzMTIxMDtcbiAgICAtLWZvb3Rlci1kaXNjbGFpbWVyOiByZ2JhKDIwMCwgMTkwLCAxNzUsIDAuNzUpO1xuICAgIC0tYWNjZW50LXByaW1hcnk6ICNGRjhDNUE7XG4gICAgLS1hY2NlbnQtcHJpbWFyeS1ob3ZlcjogI0ZGQTA3MDtcbiAgICAtLWFjY2VudC1wcmltYXJ5LWxpZ2h0OiByZ2JhKDI1NSwgMTQwLCA5MCwgMC4xNSk7XG4gICAgLS1hY2NlbnQtcHJpbWFyeS1ib3JkZXI6IHJnYmEoMjU1LCAxNDAsIDkwLCAwLjMpO1xuICAgIC0tYWNjZW50LXByaW1hcnktc2hhZG93OiByZ2JhKDI1NSwgMTQwLCA5MCwgMC4yNSk7XG4gICAgLS1jYXJkLXNoYWRvdy1ob3ZlcjogcmdiYSgyNTUsIDE0MCwgOTAsIDAuMDgpO1xuICAgIC0tc2NoZW1lLWhlcm8tdGFnbGluZTogdmFyKC0tc2NoZW1lLWZvb3Rlci1hY2NlbnQpO1xuICAgIC0tc2NoZW1lLWZvY3VzLXJpbmc6IHZhcigtLWFjY2VudC1wcmltYXJ5KTtcbiAgICAtLXRleHQtb24tYWNjZW50OiAjNTUxRjAwO1xuICB9XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgMi4gUkVTRVQgJiBCQVNFXG4gICBCb3gtc2l6aW5nIHJlc2V0LCBib2R5IGRlZmF1bHRzLCBmb2N1cyBzdGF0ZXMsIHNjcm9sbGJhciwgc2VsZWN0aW9uLFxuICAgcmVkdWNlZC1tb3Rpb24sIHNraXAgbGlua1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuKiwgKjo6YmVmb3JlLCAqOjphZnRlciB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbn1cblxuaHRtbCB7XG4gIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoO1xuICB0ZXh0LXNpemUtYWRqdXN0OiAxMDAlO1xuICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7XG59XG5cbmJvZHkge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1wcmltYXJ5KTtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtYm9keSk7XG4gIGNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnkpO1xuICBtaW4taGVpZ2h0OiAxMDB2aDtcbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG4gIGxpbmUtaGVpZ2h0OiAxLjY1O1xuICBvdmVyZmxvdy14OiBoaWRkZW47XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG59XG5cbmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYge1xuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1oZWFkaW5nKTtcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpO1xuICBsaW5lLWhlaWdodDogMS4xMjtcbiAgdGV4dC13cmFwOiBiYWxhbmNlO1xufVxuXG5wIHsgdGV4dC13cmFwOiBwcmV0dHk7IH1cblxuYSB7IGNvbG9yOiBpbmhlcml0OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH1cbmltZyB7IGRpc3BsYXk6IGJsb2NrOyBtYXgtd2lkdGg6IDEwMCU7IGhlaWdodDogYXV0bzsgfVxuYnV0dG9uLCBpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCB7IGZvbnQtZmFtaWx5OiBpbmhlcml0OyB9XG5idXR0b24geyBjdXJzb3I6IHBvaW50ZXI7IH1cbnVsIHsgbGlzdC1zdHlsZTogbm9uZTsgfVxuXG4vKiAtLS0gVXRpbGl0eTogSGlkZGVuIGJ5IGRlZmF1bHQsIHNob3duIHZpYSBKUyAtLS0gKi9cbi5pcy1oaWRkZW4geyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH1cblxuLyogLS0tIFNraXAgTGluayAtLS0gKi9cbi5za2lwLWxpbmsge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogLTEwMCU7XG4gIGxlZnQ6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG4gIGNvbG9yOiB2YXIoLS10ZXh0LW9uLWFjY2VudCk7XG4gIHBhZGRpbmc6IDAuNzVyZW0gMS41cmVtO1xuICBib3JkZXItcmFkaXVzOiAwIDAgMC43NXJlbSAwLjc1cmVtO1xuICB6LWluZGV4OiA5OTk5O1xuICBmb250LXdlaWdodDogNjAwO1xuICBmb250LXNpemU6IDAuODc1cmVtO1xuICB0cmFuc2l0aW9uOiB0b3AgdmFyKC0tZHVyYXRpb24tbm9ybWFsKSBlYXNlO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGJveC1zaGFkb3c6IDAgMCAxMnB4IHZhcigtLWNocm9tZS1zaGFkb3ctZGFyayk7XG59XG5cbi5za2lwLWxpbms6Zm9jdXMge1xuICB0b3A6IDA7XG4gIG91dGxpbmU6IDNweCBzb2xpZCB2YXIoLS1zY2hlbWUtZm9jdXMtcmluZyk7XG4gIG91dGxpbmUtb2Zmc2V0OiAycHg7XG59XG5cbi8qIC0tLSBGb2N1cyBTdGF0ZXMgLS0tICovXG4qOmZvY3VzLXZpc2libGUge1xuICBvdXRsaW5lOiAzcHggc29saWQgdmFyKC0tc2NoZW1lLWZvY3VzLXJpbmcpO1xuICBvdXRsaW5lLW9mZnNldDogM3B4O1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG59XG5cbi8qIC0tLSBTY3JvbGxiYXIgLS0tICovXG46Oi13ZWJraXQtc2Nyb2xsYmFyIHsgd2lkdGg6IDhweDsgfVxuOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyB9XG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsgYmFja2dyb3VuZDogdmFyKC0tc2NoZW1lLXNjcm9sbC10aHVtYik7IGJvcmRlci1yYWRpdXM6IDRweDsgfVxuOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7IGJhY2tncm91bmQ6IHZhcigtLXNjaGVtZS1mb2N1cy1yaW5nKTsgfVxuXG4vKiAtLS0gU2VsZWN0aW9uIC0tLSAqL1xuOjpzZWxlY3Rpb24geyBiYWNrZ3JvdW5kOiB2YXIoLS1hY2NlbnQtcHJpbWFyeS1saWdodCk7IGNvbG9yOiB2YXIoLS1uZXV0cmFsLTkwMCk7IH1cbi5kYXJrIDo6c2VsZWN0aW9uIHsgYmFja2dyb3VuZDogdmFyKC0tc2VsZWN0aW9uLWJnLWRhcmspOyBjb2xvcjogdmFyKC0tc3VyZmFjZS0xMDApOyB9XG5cbi8qIC0tLSBSZWR1Y2VkIE1vdGlvbiAtLS0gKi9cbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XG4gICosICo6OmJlZm9yZSwgKjo6YWZ0ZXIge1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMC4wMW1zICFpbXBvcnRhbnQ7XG4gICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMSAhaW1wb3J0YW50O1xuICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMDFtcyAhaW1wb3J0YW50O1xuICAgIHNjcm9sbC1iZWhhdmlvcjogYXV0byAhaW1wb3J0YW50O1xuICB9XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgMy4gVVRJTElUSUVTXG4gICBLZXlmcmFtZXMsIHN0YWdnZXIgZGVsYXlzLCBhbmltYXRpb24gdXRpbGl0aWVzLFxuICAgaWNvbiBzaXppbmcsIHRleHQgdHJ1bmNhdGlvbiwgc2NyZWVuLXJlYWRlci1vbmx5LlxuXG4gICBUaGUgcHJldmlvdXMgVGFpbHdpbmQtaW5zcGlyZWQgYXRvbWljIGB1LSpgIHV0aWxpdHkgY2xhc3NlcyB3ZXJlIHJlbW92ZWRcbiAgIGJlY2F1c2Ugbm8gdGVtcGxhdGUsIGxheW91dCwgb3IgY29tcG9uZW50IGV2ZXIgY29uc3VtZWQgdGhlbS4gVXNlIGV4aXN0aW5nXG4gICBkZXNpZ24gdG9rZW5zIChgLS1hY2NlbnQtcHJpbWFyeWAsIGAtLXRleHQtcHJpbWFyeWAsIGAtLWdsYXNzLWJnYCwgZXRjLilcbiAgIGRpcmVjdGx5IGluIGNvbXBvbmVudCBDU1MgaW5zdGVhZCBvZiBhZGRpbmcgbmV3IGF0b21pYyB1dGlsaXRpZXMuXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiAtLS0gS2V5ZnJhbWVzIC0tLSAqL1xuXG5Aa2V5ZnJhbWVzIGZhZGUtaW4ge1xuICBmcm9tIHsgb3BhY2l0eTogMDsgfVxuICB0byB7IG9wYWNpdHk6IDE7IH1cbn1cblxuQGtleWZyYW1lcyBzbGlkZS11cCB7XG4gIGZyb20geyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMjBweCk7IH1cbiAgdG8geyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH1cbn1cblxuQGtleWZyYW1lcyBmbG9hdCB7XG4gIDAlLCAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyB9XG4gIDUwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtOHB4KTsgfVxufVxuXG5Aa2V5ZnJhbWVzIGRyYXdlci1pbiB7XG4gIGZyb20geyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpOyB9XG4gIHRvIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOyB9XG59XG5cbkBrZXlmcmFtZXMgZHJhd2VyLW91dCB7XG4gIGZyb20geyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7IH1cbiAgdG8geyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpOyB9XG59XG5cbkBrZXlmcmFtZXMgZHJhd2VyLXJpZ2h0LWluIHtcbiAgZnJvbSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTsgfVxuICB0byB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsgfVxufVxuXG5Aa2V5ZnJhbWVzIGRyYXdlci1yaWdodC1vdXQge1xuICBmcm9tIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOyB9XG4gIHRvIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpOyB9XG59XG5cbkBrZXlmcmFtZXMgc2hlZXQtaW4ge1xuICBmcm9tIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpOyB9XG4gIHRvIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyB9XG59XG5cbkBrZXlmcmFtZXMgc2hlZXQtb3V0IHtcbiAgZnJvbSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgfVxuICB0byB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTsgfVxufVxuXG5Aa2V5ZnJhbWVzIG92ZXJsYXktb3V0IHtcbiAgZnJvbSB7IG9wYWNpdHk6IDE7IH1cbiAgdG8geyBvcGFjaXR5OiAwOyB9XG59XG5cbi8qIC0tLSBTdGFnZ2VyIERlbGF5cyAtLS0gKi9cbi5zdGFnZ2VyLTEgeyBhbmltYXRpb24tZGVsYXk6IDAuMDVzOyB9XG4uc3RhZ2dlci0yIHsgYW5pbWF0aW9uLWRlbGF5OiAwLjFzOyB9XG4uc3RhZ2dlci0zIHsgYW5pbWF0aW9uLWRlbGF5OiAwLjE1czsgfVxuLnN0YWdnZXItNCB7IGFuaW1hdGlvbi1kZWxheTogMC4yczsgfVxuXG4vKiAtLS0gQW5pbWF0aW9uIFV0aWxpdGllcyAtLS0gKi9cbi5hbmltYXRlLWZhZGUtaW4geyBhbmltYXRpb246IGZhZGUtaW4gMC42cyBlYXNlLW91dCBib3RoOyB9XG4uYW5pbWF0ZS1zbGlkZS11cCB7IGFuaW1hdGlvbjogc2xpZGUtdXAgMC41cyBlYXNlLW91dCBib3RoOyB9XG4uYW5pbWF0ZS1mbG9hdCB7IGFuaW1hdGlvbjogZmxvYXQgNnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7IH1cblxuLyogLS0tIEljb24gU2l6aW5nIC0tLSAqL1xuLmJ0bi1pY29uIHtcbiAgd2lkdGg6IDFyZW07XG4gIGhlaWdodDogMXJlbTtcbiAgZmxleC1zaHJpbms6IDA7XG59XG5cbi8qIC0tLSBUZXh0IFRydW5jYXRpb24gLS0tICovXG4udHJ1bmNhdGUge1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLyogLS0tIFNjcmVlbiBSZWFkZXIgT25seSAtLS0gKi9cbi5zci1vbmx5IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMXB4O1xuICBoZWlnaHQ6IDFweDtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAtMXB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBjbGlwOiByZWN0KDAsIDAsIDAsIDApO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBib3JkZXItd2lkdGg6IDA7XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgNC4gR0xBU1MgTU9SUEhJU01cbiAgIEdsYXNzIGNhcmRzLCBwYW5lbHMsIG1hcmtldHBsYWNlIGJ1dHRvbnMgKGJ0bi1tbCwgYnRuLXNob3BlZSlcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIC0tLSBHbGFzcyBDYXJkIC0tLSAqL1xuLmdsYXNzLWNhcmQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGJhY2tncm91bmQ6IHZhcigtLWdsYXNzLWJnKTtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZ2xhc3MtYm9yZGVyKTtcbiAgYm9yZGVyLXJhZGl1czogMS4yNXJlbTtcbiAgYm94LXNoYWRvdzpcbiAgICAwIDAgOHB4IHZhcigtLWNhcmQtc2hhZG93KSwgaW5zZXQgMCAwLjVweCAwIHZhcigtLWdsYXNzLWluc2V0KTtcbiAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyB2YXIoLS1kdXJhdGlvbi1zbG93KSBlYXNlLCBiYWNrZ3JvdW5kIHZhcigtLWR1cmF0aW9uLXNsb3cpIGVhc2UsIGJvcmRlci1jb2xvciB2YXIoLS1kdXJhdGlvbi1zbG93KSBlYXNlO1xuICBjb250YWluOiBsYXlvdXQ7XG59XG5cbi5nbGFzcy1jYXJkOmhvdmVyIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tZ2xhc3MtaG92ZXItYmcpO1xuICBib3gtc2hhZG93OlxuICAgIDAgMCAxNnB4IHZhcigtLWNhcmQtc2hhZG93LWhvdmVyKSwgaW5zZXQgMCAwLjVweCAwIHZhcigtLWdsYXNzLWluc2V0LWhvdmVyKTtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1nbGFzcy1ob3Zlci1ib3JkZXIpO1xufVxuXG4vKiAtLS0gR2xhc3MgUGFuZWwgLS0tICovXG4uZ2xhc3MtcGFuZWwge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1nbGFzcy1iZyk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWdsYXNzLWJvcmRlcik7XG4gIGJvcmRlci1yYWRpdXM6IDJyZW07XG4gIGJveC1zaGFkb3c6XG4gICAgMCAwIDI0cHggdmFyKC0tY2FyZC1zaGFkb3cpLCBpbnNldCAwIDAuNXB4IDAgdmFyKC0tZ2xhc3MtaW5zZXQpO1xuICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IHZhcigtLWR1cmF0aW9uLXNsb3cpIGVhc2UsIGJvcmRlci1jb2xvciB2YXIoLS1kdXJhdGlvbi1zbG93KSBlYXNlO1xufVxuXG4uZ2xhc3MtcGFuZWw6aG92ZXIge1xuICBib3gtc2hhZG93OlxuICAgIDAgMCAxNnB4IHZhcigtLWNhcmQtc2hhZG93LWhvdmVyKSwgaW5zZXQgMCAwLjVweCAwIHZhcigtLWdsYXNzLWluc2V0LWhvdmVyKTtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1nbGFzcy1ob3Zlci1ib3JkZXIpO1xufVxuXG4vKiBEYXJrIG1vZGU6IHRvbmUgZG93biB0aGUgaW5zZXQgdG9wLWhpZ2hsaWdodCBmb3IgYm90aCBjb2xvciB0aGVtZXMgKi9cbi5kYXJrIC5nbGFzcy1jYXJkIHtcbiAgYm94LXNoYWRvdzogMCAwIDhweCB2YXIoLS1jYXJkLXNoYWRvdyksIGluc2V0IDAgMC41cHggMCB2YXIoLS1nbGFzcy1pbnNldC1kYXJrKTtcbn1cbi5kYXJrIC5nbGFzcy1jYXJkOmhvdmVyIHtcbiAgYm94LXNoYWRvdzogMCAwIDE2cHggdmFyKC0tY2FyZC1zaGFkb3ctaG92ZXIpLCBpbnNldCAwIDAuNXB4IDAgdmFyKC0tZ2xhc3MtaW5zZXQtZGFyay1ob3Zlcik7XG59XG4uZGFyayAuZ2xhc3MtcGFuZWwge1xuICBib3gtc2hhZG93OiAwIDAgMjRweCB2YXIoLS1jYXJkLXNoYWRvdyksIGluc2V0IDAgMC41cHggMCB2YXIoLS1nbGFzcy1pbnNldC1kYXJrKTtcbn1cbi5kYXJrIC5nbGFzcy1wYW5lbDpob3ZlciB7XG4gIGJveC1zaGFkb3c6IDAgMCAxNnB4IHZhcigtLWNhcmQtc2hhZG93LWhvdmVyKSwgaW5zZXQgMCAwLjVweCAwIHZhcigtLWdsYXNzLWluc2V0LWRhcmstaG92ZXIpO1xufVxuXG4vKiAtLS0gU2hhcmVkIE1hcmtldHBsYWNlIEJ1dHRvbiBTdHlsZXMgLS0tICovXG4uYnRuLW1sLFxuLmJ0bi1zaG9wZWUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZ2FwOiAwLjVyZW07XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiAwLjg3NXJlbSAxLjI1cmVtO1xuICBib3JkZXItcmFkaXVzOiAwLjg3NXJlbTtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtdWkpO1xuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtYm9sZCk7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGxldHRlci1zcGFjaW5nOiAtMC4wMDVlbTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBtaW4taGVpZ2h0OiA0OHB4O1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIHZhcigtLWR1cmF0aW9uLW5vcm1hbCkgZWFzZSwgYm94LXNoYWRvdyB2YXIoLS1kdXJhdGlvbi1ub3JtYWwpIGVhc2UsIHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1ub3JtYWwpIGVhc2U7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYm9yZGVyOiBub25lO1xufVxuXG4uYnRuLW1sOmhvdmVyLFxuLmJ0bi1zaG9wZWU6aG92ZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG59XG5cbi5idG4tbWw6YWN0aXZlLFxuLmJ0bi1zaG9wZWU6YWN0aXZlIHtcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KSB0cmFuc2xhdGVZKDApO1xufVxuXG4vKiAtLS0gTWVyY2FkbyBMaXZyZSBCdXR0b24gLS0tICovXG4uYnRuLW1sIHtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tbWwteWVsbG93KSAwJSwgdmFyKC0tbWwteWVsbG93LWhvdmVyKSAxMDAlKTtcbiAgY29sb3I6IHZhcigtLW1sLW5hdnkpO1xuICBib3gtc2hhZG93OiAwIDAgMTZweCB2YXIoLS1tbC1zaGFkb3cpLCBpbnNldCAwIDFweCAwIHZhcigtLW1sLWluc2V0KTtcbn1cblxuLmJ0bi1tbDpob3ZlciB7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLW1sLXllbGxvdy1ob3ZlcikgMCUsIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tbC15ZWxsb3ctaG92ZXIpIDg1JSwgYmxhY2spIDEwMCUpO1xuICBib3gtc2hhZG93OiAwIDAgMjRweCB2YXIoLS1tbC1zaGFkb3ctaG92ZXIpLCBpbnNldCAwIDFweCAwIHZhcigtLW1sLWluc2V0LWhvdmVyKTtcbn1cblxuLyogLS0tIFNob3BlZSBCdXR0b24gLS0tICovXG4uYnRuLXNob3BlZSB7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLXNob3BlZS1vcmFuZ2UpIDAlLCB2YXIoLS1zaG9wZWUtb3JhbmdlLWhvdmVyKSAxMDAlKTtcbiAgLyogU2hvcGVlIGJyYW5kIHdoaXRlIHRleHQg4oCUIG5vdCAtLXRleHQtb24tYWNjZW50ICgzcmQtcGFydHkgYnJhbmQgY29sb3IpLlxuICAgICBXaGl0ZSBvbiAjRUU0RDJEID0gMy42NjoxIOKAlCBwYXNzZXMgbGFyZ2UtdGV4dCAoMzoxKS4gRG9jdW1lbnRlZCBleGNlcHRpb24uICovXG4gIGNvbG9yOiAjRkZGRkZGO1xuICBib3gtc2hhZG93OiAwIDAgMTZweCB2YXIoLS1zaG9wZWUtc2hhZG93KSwgaW5zZXQgMCAxcHggMCB2YXIoLS1idG4taW5zZXQpO1xufVxuXG4uYnRuLXNob3BlZTpob3ZlciB7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLXNob3BlZS1vcmFuZ2UtaG92ZXIpIDAlLCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tc2hvcGVlLW9yYW5nZS1ob3ZlcikgODUlLCBibGFjaykgMTAwJSk7XG4gIGJveC1zaGFkb3c6IDAgMCAyNHB4IHZhcigtLXNob3BlZS1zaGFkb3ctaG92ZXIpLCBpbnNldCAwIDFweCAwIHZhcigtLWJ0bi1pbnNldC1ob3Zlcik7XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgNS4gSEVST1xuICAgSGVybyBzZWN0aW9uIGxheW91dCwgbG9nbywgdGl0bGUsIHRhZ2xpbmUsIENUQXMsIHNjcm9sbCBpbmRpY2F0b3JcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5oZXJvIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtaW4taGVpZ2h0OiAxMDB2aDtcbiAgbWluLWhlaWdodDogMTAwZHZoO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmhlcm8tZG90LWdyaWQge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGluc2V0OiAwO1xuICBvcGFjaXR5OiAwLjAyNTtcbiAgYmFja2dyb3VuZC1pbWFnZTogcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAxcHggMXB4LCB2YXIoLS1uZXV0cmFsLTkwMCkgMXB4LCB0cmFuc3BhcmVudCAwKTtcbiAgYmFja2dyb3VuZC1zaXplOiAyOHB4IDI4cHg7XG59XG5cbi5kYXJrIC5oZXJvLWRvdC1ncmlkIHsgb3BhY2l0eTogMC4wMjsgfVxuXG4uaGVyby1jb250ZW50IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxMDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogNTJyZW07XG4gIG1hcmdpbjogMCBhdXRvO1xuICBwYWRkaW5nOiA1cmVtIDEuMjVyZW07XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkgeyAuaGVyby1jb250ZW50IHsgcGFkZGluZzogN3JlbSAycmVtOyB9IH1cblxuLmhlcm8tZ2xhc3Mge1xuICBwYWRkaW5nOiAycmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIG1heC13aWR0aDogNDNyZW07XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHsgLmhlcm8tZ2xhc3MgeyBwYWRkaW5nOiAzcmVtOyB9IH1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgeyAuaGVyby1nbGFzcyB7IHBhZGRpbmc6IDRyZW07IH0gfVxuXG4uaGVyby1sb2dvLXdyYXBwZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWFyZ2luLWJvdHRvbTogMS41cmVtO1xufVxuXG4uaGVyby1sb2dvLWNvbnRhaW5lciB7XG4gIHdpZHRoOiA0Ljc1cmVtO1xuICBoZWlnaHQ6IDQuNzVyZW07XG4gIGJvcmRlci1yYWRpdXM6IDEuMjVyZW07XG4gIGJhY2tncm91bmQ6IHZhcigtLXNjaGVtZS1oZXJvLWxvZ28tYmcpO1xuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1nbGFzcy1ib3JkZXIpO1xuICBib3gtc2hhZG93OiAwIDAgMThweCB2YXIoLS1jaHJvbWUtc2hhZG93LXNtKSwgaW5zZXQgMCAwLjVweCAwIHZhcigtLWdsYXNzLWluc2V0KTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi5kYXJrIC5oZXJvLWxvZ28tY29udGFpbmVyIHtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1nbGFzcy1ib3JkZXIpO1xuICBib3gtc2hhZG93OiAwIDAgMThweCB2YXIoLS1jaHJvbWUtc2hhZG93LWRhcmspLCBpbnNldCAwIDAuNXB4IDAgdmFyKC0tZ2xhc3MtaW5zZXQtZGFyayk7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkge1xuICAuaGVyby1sb2dvLWNvbnRhaW5lciB7IHdpZHRoOiA4cmVtOyBoZWlnaHQ6IDhyZW07IGJvcmRlci1yYWRpdXM6IDEuNXJlbTsgfVxufVxuXG4uaGVyby1sb2dvLWltZyB7XG4gIHdpZHRoOiA4MCU7XG4gIGhlaWdodDogODAlO1xuICBvYmplY3QtZml0OiBjb250YWluO1xuICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMCA4cHggdmFyKC0tbG9nby1kcm9wLXNoYWRvdykpO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgLmhlcm8tbG9nby1pbWcgeyB3aWR0aDogODAlOyBoZWlnaHQ6IDgwJTsgfVxufVxuXG4uaGVyby10aXRsZSB7XG4gIGZvbnQtc2l6ZTogY2xhbXAoM3JlbSwgOHZ3LCA1LjI1cmVtKTtcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWRpc3BsYXkpO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDM1ZW07XG4gIGxpbmUtaGVpZ2h0OiAwLjk1O1xuICBtYXJnaW4tYm90dG9tOiAwLjg3NXJlbTtcbn1cblxuLmhlcm8tdGl0bGUtaHViIHsgY29sb3I6IHZhcigtLW5ldXRyYWwtOTAwKTsgfVxuLmRhcmsgLmhlcm8tdGl0bGUtaHViIHsgY29sb3I6IHZhcigtLXN1cmZhY2UtMTAwKTsgfVxuLmhlcm8tdGl0bGUtcmFpeiB7IGNvbG9yOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7IH1cblxuLmhlcm8tdGFnbGluZSB7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXVpKTtcbiAgZm9udC1zaXplOiBjbGFtcCgxcmVtLCAyLjR2dywgMS4yNXJlbSk7XG4gIGNvbG9yOiB2YXIoLS1zY2hlbWUtaGVyby10YWdsaW5lKTtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKTtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDA1ZW07XG4gIG1hcmdpbi1ib3R0b206IDEuMjVyZW07XG59XG5cbi5oZXJvLWRlc2NyaXB0aW9uIHtcbiAgbWF4LXdpZHRoOiAzNXJlbTtcbiAgbWFyZ2luOiAwIGF1dG8gMnJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNzU7XG4gIGNvbG9yOiB2YXIoLS1uZXV0cmFsLTYwMCk7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbn1cblxuLmRhcmsgLmhlcm8tZGVzY3JpcHRpb24geyBjb2xvcjogdmFyKC0tc3VyZmFjZS0zMDApOyB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkgeyAuaGVyby1kZXNjcmlwdGlvbiB7IGZvbnQtc2l6ZTogMS4xMjVyZW07IH0gfVxuXG4uaGVyby1jdGFzIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiAwLjc1cmVtO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7XG4gIC5oZXJvLWN0YXMgeyBmbGV4LWRpcmVjdGlvbjogcm93OyBnYXA6IDFyZW07IH1cbn1cblxuLmhlcm8tY3RhcyAuYnRuLW1sLFxuLmhlcm8tY3RhcyAuYnRuLXNob3BlZSB7XG4gIHdpZHRoOiBhdXRvO1xuICBwYWRkaW5nOiAxcmVtIDEuNzVyZW07XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbn1cblxuLmhlcm8tdHJ1c3QtaGludCB7XG4gIG1hcmdpbi10b3A6IDEuNzVyZW07XG4gIGNvbG9yOiB2YXIoLS1zY2hlbWUtaGVyby10cnVzdCk7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXVpKTtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKTtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDFlbTtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7IC5oZXJvLXRydXN0LWhpbnQgeyBmb250LXNpemU6IDAuODc1cmVtOyB9IH1cbi5kYXJrIC5oZXJvLXRydXN0LWhpbnQgeyBjb2xvcjogdmFyKC0tc3VyZmFjZS00MDApOyB9XG5cbi5oZXJvLXNjcm9sbC1pbmRpY2F0b3Ige1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMS41cmVtO1xuICBsZWZ0OiA1MCU7XG4gIG1hcmdpbi1sZWZ0OiAtMS4yNXJlbTtcbiAgd2lkdGg6IDIuNXJlbTtcbiAgei1pbmRleDogMTA7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkgeyAuaGVyby1zY3JvbGwtaW5kaWNhdG9yIHsgYm90dG9tOiAycmVtOyB9IH1cblxuLmhlcm8tc2Nyb2xsLWJ0biB7XG4gIHdpZHRoOiAyLjVyZW07XG4gIGhlaWdodDogMi41cmVtO1xuICBib3JkZXItcmFkaXVzOiA5OTk5cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS11aS1zdXJmYWNlLWJnKTtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tdWktc3VyZmFjZS1ib3JkZXIpO1xuICBjb2xvcjogdmFyKC0tc2NoZW1lLWhlcm8tc2Nyb2xsLWNvbG9yKTtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1zbG93KSBlYXNlLCBjb2xvciB2YXIoLS1kdXJhdGlvbi1zbG93KSBlYXNlO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5kYXJrIC5oZXJvLXNjcm9sbC1idG4ge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS11aS1zdXJmYWNlLWJnLWRhcmspO1xuICBib3JkZXItY29sb3I6IHZhcigtLXVpLXN1cmZhY2UtYm9yZGVyLWRhcmspO1xuICBjb2xvcjogdmFyKC0tYWNjZW50LXByaW1hcnkpO1xufVxuXG4uaGVyby1zY3JvbGwtYnRuOmhvdmVyIHtcbiAgY29sb3I6IHZhcigtLXNjaGVtZS1mb2N1cy1yaW5nKTtcbiAgYmFja2dyb3VuZDogdmFyKC0tdWktc3VyZmFjZS1ob3Zlci1iZyk7XG59XG5cbi5kYXJrIC5oZXJvLXNjcm9sbC1idG46aG92ZXIge1xuICBjb2xvcjogdmFyKC0tYWNjZW50LXByaW1hcnktaG92ZXIpO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS11aS1zdXJmYWNlLWhvdmVyLWJnLWRhcmspO1xufVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIDYuIENBVEFMT0dcbiAgIENhdGFsb2cgc2VjdGlvbiBoZWFkZXIsIHN0aWNreSBiYXIsIGZpbHRlciBiYXIsIHNlYXJjaCBpbnB1dHMsXG4gICBmaWx0ZXIgcGlsbHMsIHZpZXcgdG9nZ2xlLCBkZXNrdG9wIGZpbHRlcnMsIHJlc3VsdHMgYmFyLCBtb2JpbGUgc3VtbWFyeVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmNhdGFsb2cge1xuICBwYWRkaW5nOiAyLjVyZW0gMXJlbSAzLjVyZW07XG4gIG1heC13aWR0aDogMTYwMHB4O1xuICBtYXJnaW46IDAgYXV0bztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxMDtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7XG4gIC5jYXRhbG9nIHsgcGFkZGluZzogNHJlbSAxLjVyZW07IH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDEwMjRweCkge1xuICAuY2F0YWxvZyB7IHBhZGRpbmctbGVmdDogMnJlbTsgcGFkZGluZy1yaWdodDogMnJlbTsgfVxufVxuXG4uY2F0YWxvZy1oZWFkZXIge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIG1hcmdpbi1ib3R0b206IDEuMTI1cmVtO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHsgLmNhdGFsb2ctaGVhZGVyIHsgbWFyZ2luLWJvdHRvbTogMnJlbTsgfSB9XG5cbi5jYXRhbG9nLXRpdGxlIHtcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpO1xuICBjb2xvcjogdmFyKC0tbmV1dHJhbC05MDApO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgbWFyZ2luLWJvdHRvbTogMC43NXJlbTtcbiAgZm9udC1zaXplOiBjbGFtcCgxLjg1cmVtLCA0dncsIDIuNzVyZW0pO1xufVxuXG4uZGFyayAuY2F0YWxvZy10aXRsZSB7IGNvbG9yOiB2YXIoLS1zdXJmYWNlLTEwMCk7IH1cblxuQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7IC5jYXRhbG9nLXRpdGxlIHsgbWFyZ2luLWJvdHRvbTogMXJlbTsgfSB9XG5cbi5jYXRhbG9nLXN1YnRpdGxlIHtcbiAgY29sb3I6IHZhcigtLW5ldXRyYWwtNjAwKTtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtdWkpO1xuICBmb250LXNpemU6IDFyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjc7XG4gIG1heC13aWR0aDogNDJyZW07XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuXG4uZGFyayAuY2F0YWxvZy1zdWJ0aXRsZSB7IGNvbG9yOiB2YXIoLS1zdXJmYWNlLTMwMCk7IH1cblxuQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7IC5jYXRhbG9nLXN1YnRpdGxlIHsgZm9udC1zaXplOiAxLjEyNXJlbTsgfSB9XG5cbi8qIC0tLSBTdGlja3kgQmFyIC0tLSAqL1xuLnN0aWNreS1iYXIge1xuICBwb3NpdGlvbjogc3RpY2t5O1xuICB0b3A6IDA7XG4gIHotaW5kZXg6IDMwO1xuICBtYXJnaW4tbGVmdDogLTFyZW07XG4gIG1hcmdpbi1yaWdodDogLTFyZW07XG4gIHBhZGRpbmc6IDAuNjI1cmVtIDFyZW07XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkge1xuICAuc3RpY2t5LWJhciB7IG1hcmdpbi1sZWZ0OiAtMS41cmVtOyBtYXJnaW4tcmlnaHQ6IC0xLjVyZW07IH1cbn1cblxuLnN0aWNreS1iYXItaGlkZGVuIHtcbiAgb3BhY2l0eTogMDtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC02cHgpO1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IHZhcigtLWR1cmF0aW9uLXNsb3cpIGVhc2UsIHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1zbG93KSBlYXNlLCB2aXNpYmlsaXR5IDBzIGxpbmVhciB2YXIoLS1kdXJhdGlvbi1zbG93KTtcbn1cblxuLnN0aWNreS1iYXItdmlzaWJsZSB7XG4gIG9wYWNpdHk6IDE7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgdmFyKC0tZHVyYXRpb24tc2xvdykgZWFzZSwgdHJhbnNmb3JtIHZhcigtLWR1cmF0aW9uLXNsb3cpIGVhc2UsIHZpc2liaWxpdHkgMHMgbGluZWFyIDBzO1xufVxuXG4uc3RpY2t5LWJhci1oaWRkZW4gLmZpbHRlci1iYXIge1xuICBvcGFjaXR5OiAwO1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IHZhcigtLWR1cmF0aW9uLXNsb3cpIGVhc2U7XG59XG5cbi5zdGlja3ktYmFyLXZpc2libGUgLmZpbHRlci1iYXIge1xuICBvcGFjaXR5OiAxO1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IHZhcigtLWR1cmF0aW9uLXNsb3cpIGVhc2U7XG59XG5cbi5zdGlja3ktYmFyLWlubmVyIHtcbiAgbWF4LXdpZHRoOiA0OHJlbTtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogMC41cmVtO1xuICBwYWRkaW5nOiAwLjYyNXJlbSAwLjc1cmVtO1xuICBib3JkZXItcmFkaXVzOiAxcmVtO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgLnN0aWNreS1iYXItaW5uZXIgeyBwYWRkaW5nOiAwLjc1cmVtOyB9XG59XG5cbi8qIENvbnRyb2xzIHJvdyDilIDilIAgZmlsdGVyIGJ1dHRvbiArIHNlYXJjaCArIHZpZXcgdG9nZ2xlLlxuICAgTGl2ZXMgaW5zaWRlIC5zdGlja3ktYmFyLWlubmVyIHNvIHRoZSAuZmlsdGVyLWJhciBnbGFzcyBzdXJmYWNlIHdyYXBzIGJvdGhcbiAgIHRoaXMgcm93IGFuZCB0aGUgKGNvbmRpdGlvbmFsbHkgdmlzaWJsZSkgbW9iaWxlLWZpbHRlcnMtc3VtbWFyeSByb3cuICovXG4uc3RpY2t5LWJhci1jb250cm9scyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMC41cmVtO1xuICB3aWR0aDogMTAwJTtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7XG4gIC5zdGlja3ktYmFyLWNvbnRyb2xzIHsgZ2FwOiAwLjc1cmVtOyB9XG59XG5cbi8qIC0tLSBGaWx0ZXIgQmFyIC0tLSAqL1xuLmZpbHRlci1iYXIge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1maWx0ZXItYmFyLWJnKTtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZmlsdGVyLWJhci1ib3JkZXIpO1xuICBib3gtc2hhZG93OiAwIDAgMjRweCB2YXIoLS1jaHJvbWUtc2hhZG93LXNtKTtcbn1cblxuLmZpbHRlci1iYWRnZSB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWluLXdpZHRoOiAyMHB4O1xuICBoZWlnaHQ6IDIwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDk5OTlweDtcbiAgYmFja2dyb3VuZDogdmFyKC0tYWNjZW50LXByaW1hcnkpO1xuICBjb2xvcjogdmFyKC0tdGV4dC1vbi1hY2NlbnQpO1xuICBmb250LXNpemU6IDAuNjI1cmVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICBwYWRkaW5nOiAwIDVweDtcbn1cblxuLyogLS0tIEZpbHRlciBCdXR0b24gLS0tICovXG4uZmlsdGVyLWJ0biB7XG4gIHdpZHRoOiAyLjVyZW07XG4gIGhlaWdodDogMi41cmVtO1xuICBib3JkZXItcmFkaXVzOiAwLjc1cmVtO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1hY2NlbnQtcHJpbWFyeS1saWdodCk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWFjY2VudC1wcmltYXJ5LWJvcmRlcik7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBmbGV4LXNocmluazogMDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQgdmFyKC0tZHVyYXRpb24tbm9ybWFsKSBlYXNlO1xufVxuXG4uZmlsdGVyLWJ0bjpob3ZlciB7IGJhY2tncm91bmQ6IHZhcigtLWFjY2VudC1wcmltYXJ5LWJvcmRlcik7IH1cblxuQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7XG4gIC5maWx0ZXItYnRuIHsgd2lkdGg6IDIuNzVyZW07IGhlaWdodDogMi43NXJlbTsgfVxufVxuXG4uZmlsdGVyLWJ0bi1iYWRnZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAtMC4zNzVyZW07XG4gIHJpZ2h0OiAtMC4zNzVyZW07XG4gIG1pbi13aWR0aDogMThweDtcbiAgaGVpZ2h0OiAxOHB4O1xuICBmb250LXNpemU6IDAuNTYyNXJlbTtcbn1cblxuLyogLS0tIFNlYXJjaCBGaWVsZCAoc2hhcmVkIGNvbXBvbmVudCkgLS0tXG4gICBCRU0tc3RydWN0dXJlZCBzZWFyY2ggaW5wdXQgdXNlZCBieSBib3RoIHN0aWNreSBiYXIgYW5kIGRlc2t0b3AgYmFyLlxuICAgVmFyaWFudCBtb2RpZmllcnM6IC5zZWFyY2gtZmllbGQtLXN0aWNreSAoY29tcGFjdCkgLyAuc2VhcmNoLWZpZWxkLS1kZXNrdG9wIChmdWxsLXNpemUpXG4gICBFbGltaW5hdGVzIHRoZSBwcmV2aW91cyAuc3RpY2t5LXNlYXJjaC0qIC8gLmRlc2t0b3Atc2VhcmNoLSogZHVwbGljYXRpb24uICovXG5cbi5zZWFyY2gtZmllbGQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsZXg6IDE7XG4gIG1pbi13aWR0aDogMDtcbn1cblxuLnNlYXJjaC1maWVsZF9faWNvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgY29sb3I6IHZhcigtLW5ldXRyYWwtNDAwKTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5kYXJrIC5zZWFyY2gtZmllbGRfX2ljb24ge1xuICBjb2xvcjogdmFyKC0tc3VyZmFjZS00MDApO1xufVxuXG4uc2VhcmNoLWZpZWxkX19pbnB1dCB7XG4gIHdpZHRoOiAxMDAlO1xuICBib3JkZXItcmFkaXVzOiAwLjc1cmVtO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1zZWFyY2gtYmcpO1xuICBib3JkZXI6IDEuNXB4IHNvbGlkIHZhcigtLXNlYXJjaC1ib3JkZXIpO1xuICBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1ub3JtYWwpIGVhc2UsIGJvcmRlci1jb2xvciB2YXIoLS1kdXJhdGlvbi1ub3JtYWwpIGVhc2UsIGJveC1zaGFkb3cgdmFyKC0tZHVyYXRpb24tbm9ybWFsKSBlYXNlO1xufVxuXG4uc2VhcmNoLWZpZWxkX19pbnB1dDo6cGxhY2Vob2xkZXIgeyBjb2xvcjogdmFyKC0tdGV4dC1wbGFjZWhvbGRlcik7IH1cblxuLnNlYXJjaC1maWVsZF9faW5wdXQ6Zm9jdXMge1xuICBvdXRsaW5lOiBub25lO1xuICBib3JkZXItY29sb3I6IHZhcigtLXNlYXJjaC1mb2N1cy1ib3JkZXIpO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1zZWFyY2gtZm9jdXMtYmcpO1xuICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tc2NoZW1lLXNlYXJjaC1mb2N1cy1yaW5nLXN0cm9uZyk7XG59XG5cbi5zZWFyY2gtZmllbGRfX2NsZWFyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICBib3JkZXI6IG5vbmU7XG4gIGNvbG9yOiB2YXIoLS1uZXV0cmFsLTMwMCk7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjogY29sb3IgdmFyKC0tZHVyYXRpb24tbm9ybWFsKSBlYXNlO1xufVxuXG4vKiBTVkcgaW5zaWRlIHRoZSBjbGVhciBidXR0b24gZGVmYXVsdHMgdG8gMzAweDE1MCB3aXRob3V0IGV4cGxpY2l0IHNpemluZy5cbiAgIFBpbiBpdCB0byB0aGUgaWNvbiBzaXplIG9mIGVhY2ggdmFyaWFudCBzbyB0aGUgYnV0dG9uIHN0YXlzIGNvbXBhY3QuICovXG4uc2VhcmNoLWZpZWxkX19jbGVhci1zdmcge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDFyZW07XG4gIGhlaWdodDogMXJlbTtcbn1cblxuLyog4pSA4pSAIFN0aWNreSB2YXJpYW50IChjb21wYWN0LCBtb2JpbGUtZmlyc3QpIOKUgOKUgCAqL1xuLnNlYXJjaC1maWVsZC0tc3RpY2t5IC5zZWFyY2gtZmllbGRfX2ljb24ge1xuICBsZWZ0OiAwLjc1cmVtO1xuICB3aWR0aDogMXJlbTtcbiAgaGVpZ2h0OiAxcmVtO1xufVxuXG4uc2VhcmNoLWZpZWxkLS1zdGlja3kgLnNlYXJjaC1maWVsZF9faW5wdXQge1xuICBwYWRkaW5nOiAwLjVyZW0gMC43NXJlbSAwLjVyZW0gMi4yNXJlbTtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbn1cblxuLnNlYXJjaC1maWVsZC0tc3RpY2t5IC5zZWFyY2gtZmllbGRfX2lucHV0OmZvY3VzIHtcbiAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHZhcigtLXNjaGVtZS1zZWFyY2gtZm9jdXMtcmluZy1zdHJvbmcpO1xufVxuXG4uZGFyayAuc2VhcmNoLWZpZWxkLS1zdGlja3kgLnNlYXJjaC1maWVsZF9faW5wdXQ6Zm9jdXMge1xuICBib3gtc2hhZG93OiAwIDAgMCAzcHggdmFyKC0tc2NoZW1lLXNlYXJjaC1mb2N1cy1yaW5nLXN0cm9uZyk7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkge1xuICAuc2VhcmNoLWZpZWxkLS1zdGlja3kgLnNlYXJjaC1maWVsZF9faW5wdXQgeyBwYWRkaW5nOiAwLjYyNXJlbSAwLjc1cmVtIDAuNjI1cmVtIDIuMjVyZW07IH1cbn1cblxuLnNlYXJjaC1maWVsZC0tc3RpY2t5IC5zZWFyY2gtZmllbGRfX2NsZWFyIHtcbiAgcmlnaHQ6IDAuNjI1cmVtO1xuICBwYWRkaW5nOiAwLjEyNXJlbTtcbn1cblxuLnNlYXJjaC1maWVsZC0tc3RpY2t5IC5zZWFyY2gtZmllbGRfX2NsZWFyOmhvdmVyIHsgY29sb3I6IHZhcigtLW5ldXRyYWwtNTAwKTsgfVxuLmRhcmsgLnNlYXJjaC1maWVsZC0tc3RpY2t5IC5zZWFyY2gtZmllbGRfX2NsZWFyOmhvdmVyIHsgY29sb3I6IHZhcigtLXN1cmZhY2UtMzAwKTsgfVxuXG4vKiDilIDilIAgRGVza3RvcCB2YXJpYW50IChmdWxsLXNpemUsIGxhcmdlciBpY29ucyAmIHBhZGRpbmcpIOKUgOKUgCAqL1xuLnNlYXJjaC1maWVsZC0tZGVza3RvcCAuc2VhcmNoLWZpZWxkX19pY29uIHtcbiAgbGVmdDogMC44NzVyZW07XG4gIHdpZHRoOiAxLjI1cmVtO1xuICBoZWlnaHQ6IDEuMjVyZW07XG59XG5cbi5zZWFyY2gtZmllbGQtLWRlc2t0b3AgLnNlYXJjaC1maWVsZF9faW5wdXQge1xuICBwYWRkaW5nOiAwLjYyNXJlbSAxcmVtIDAuNjI1cmVtIDIuNzVyZW07XG4gIGZvbnQtc2l6ZTogMC45Mzc1cmVtO1xuICBib3JkZXItcmFkaXVzOiAwLjg3NXJlbTtcbn1cblxuLnNlYXJjaC1maWVsZC0tZGVza3RvcCAuc2VhcmNoLWZpZWxkX19pbnB1dDpmb2N1cyB7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCB2YXIoLS1zY2hlbWUtc2VhcmNoLWZvY3VzLXJpbmcpO1xufVxuXG4uc2VhcmNoLWZpZWxkLS1kZXNrdG9wIC5zZWFyY2gtZmllbGRfX2NsZWFyIHtcbiAgcmlnaHQ6IDAuNzVyZW07XG4gIHBhZGRpbmc6IDAuMjVyZW07XG59XG5cbi5zZWFyY2gtZmllbGQtLWRlc2t0b3AgLnNlYXJjaC1maWVsZF9fY2xlYXI6aG92ZXIgeyBjb2xvcjogdmFyKC0tbmV1dHJhbC02MDApOyB9XG4uZGFyayAuc2VhcmNoLWZpZWxkLS1kZXNrdG9wIC5zZWFyY2gtZmllbGRfX2NsZWFyOmhvdmVyIHsgY29sb3I6IHZhcigtLXN1cmZhY2UtMjAwKTsgfVxuXG4vKiAtLS0gTW9iaWxlIEZpbHRlcnMgU3VtbWFyeSAtLS1cbiAgIFJlbmRlcmVkIGFzIGEgc2Vjb25kIHJvdyBpbnNpZGUgLnN0aWNreS1iYXItaW5uZXIgc28gaXQgaW5oZXJpdHMgdGhlXG4gICAuZmlsdGVyLWJhciBnbGFzcyBzdXJmYWNlLiBUaGUgY29sdW1uIGdhcCBvbiAuc3RpY2t5LWJhci1pbm5lciBoYW5kbGVzXG4gICB2ZXJ0aWNhbCBzcGFjaW5nOyBubyBleHRyYSBtYXJnaW4tdG9wIGlzIG5lZWRlZC4gKi9cbi5tb2JpbGUtZmlsdGVycy1zdW1tYXJ5IHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGdhcDogMC41cmVtO1xuICBmb250LXNpemU6IDAuNzVyZW07XG4gIGNvbG9yOiB2YXIoLS1uZXV0cmFsLTUwMCk7XG59XG5cbi5tb2JpbGUtZmlsdGVycy1zdW1tYXJ5LWRvdCB7XG4gIGNvbG9yOiB2YXIoLS1uZXV0cmFsLTMwMCk7XG59XG5cbi5kYXJrIC5tb2JpbGUtZmlsdGVycy1zdW1tYXJ5IHsgY29sb3I6IHZhcigtLXN1cmZhY2UtNDAwKTsgfVxuXG4ubW9iaWxlLWZpbHRlcnMtc3VtbWFyeSBidXR0b24ge1xuICBjb2xvcjogdmFyKC0tYWNjZW50LXByaW1hcnkpO1xuICBmb250LXdlaWdodDogNjAwO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgdGV4dC11bmRlcmxpbmUtb2Zmc2V0OiAycHg7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIGJvcmRlcjogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBmb250LXNpemU6IGluaGVyaXQ7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkgeyAubW9iaWxlLWZpbHRlcnMtc3VtbWFyeSB7IGRpc3BsYXk6IG5vbmU7IH0gfVxuXG4vKiAtLS0gRGVza3RvcCBJbmxpbmUgRmlsdGVycyAtLS0gKi9cbi5kZXNrdG9wLWZpbHRlcnMge1xuICBkaXNwbGF5OiBub25lO1xuICBtYXJnaW4tYm90dG9tOiAxLjg3NXJlbTtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7IC5kZXNrdG9wLWZpbHRlcnMgeyBkaXNwbGF5OiBibG9jazsgfSB9XG5cbi5kZXNrdG9wLWZpbHRlcnMgPiAqICsgKiB7IG1hcmdpbi10b3A6IDAuODc1cmVtOyB9XG5cbi5maWx0ZXItcm93IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDAuNDM3NXJlbTtcbn1cblxuLmZpbHRlci1yb3ctbGFiZWwge1xuICBmb250LXNpemU6IDAuNzVyZW07XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07XG4gIGNvbG9yOiB2YXIoLS1uZXV0cmFsLTQwMCk7XG4gIG1hcmdpbi1yaWdodDogMC4xMjVyZW07XG59XG5cbi5kYXJrIC5maWx0ZXItcm93LWxhYmVsIHsgY29sb3I6IHZhcigtLXN1cmZhY2UtNDAwKTsgfVxuXG4vKiAtLS0gRGVza3RvcCBTZWFyY2ggQmFyIChzZWFyY2ggZmllbGQgKyBjb250cm9scykgLS0tICovXG4vKiBNYXRjaGVzIHRoZSBzdGlja3kgYmFyJ3MgZmlsdGVyLWJhciBnbGFzcyBtb3JwaGlzbSBwYXR0ZXJuICovXG4uZGVza3RvcC1zZWFyY2gtYmFyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiAwLjc1cmVtO1xuICBwYWRkaW5nOiAwLjc1cmVtO1xuICBib3JkZXItcmFkaXVzOiAxcmVtO1xufVxuXG4uZGVza3RvcC1zZWFyY2gtY29udHJvbHMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDAuNXJlbTtcbiAgZmxleC1zaHJpbms6IDA7XG59XG5cbi5waWxsLWNvdW50IHtcbiAgbWFyZ2luLWxlZnQ6IDAuMzc1cmVtO1xuICBvcGFjaXR5OiAwLjU1O1xufVxuXG4vKiAtLS0gRGVza3RvcCBSZXN1bHRzIEJhciAtLS0gKi9cbi5kZXNrdG9wLXJlc3VsdHMtYmFyIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBtYXJnaW4tYm90dG9tOiAxLjEyNXJlbTtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7IC5kZXNrdG9wLXJlc3VsdHMtYmFyIHsgZGlzcGxheTogZmxleDsgfSB9XG5cbi5kZXNrdG9wLXJlc3VsdHMtY291bnQge1xuICBmb250LWZhbWlseTogdmFyKC0tZm9udC11aSk7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGNvbG9yOiB2YXIoLS1uZXV0cmFsLTUwMCk7XG59XG5cbi5kYXJrIC5kZXNrdG9wLXJlc3VsdHMtY291bnQgeyBjb2xvcjogdmFyKC0tc3VyZmFjZS00MDApOyB9XG5cbi5kZXNrdG9wLWNsZWFyLWJ0biB7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXVpKTtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSk7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICB0ZXh0LXVuZGVybGluZS1vZmZzZXQ6IDJweDtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgYm9yZGVyOiBub25lO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRyYW5zaXRpb246IGNvbG9yIHZhcigtLWR1cmF0aW9uLW5vcm1hbCkgZWFzZTtcbn1cblxuLmRlc2t0b3AtY2xlYXItYnRuOmhvdmVyIHsgY29sb3I6IHZhcigtLWFjY2VudC1wcmltYXJ5LWhvdmVyKTsgfVxuXG4vKiAtLS0gRmlsdGVyIFBpbGxzIC0tLSAqL1xuLmNhdGVnb3J5LXBpbGwsIC5icmFuZC1waWxsLCAudGFnLXBpbGwge1xuICBwYWRkaW5nOiAwLjQzNzVyZW0gMC44NzVyZW07XG4gIGJvcmRlci1yYWRpdXM6IDk5OTlweDtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtdWkpO1xuICBmb250LXNpemU6IDAuNzVyZW07XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQgdmFyKC0tZHVyYXRpb24tbm9ybWFsKSBlYXNlLCBjb2xvciB2YXIoLS1kdXJhdGlvbi1ub3JtYWwpIGVhc2UsIGJvcmRlci1jb2xvciB2YXIoLS1kdXJhdGlvbi1ub3JtYWwpIGVhc2UsIGJveC1zaGFkb3cgdmFyKC0tZHVyYXRpb24tbm9ybWFsKSBlYXNlO1xuICBib3JkZXI6IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgbWluLWhlaWdodDogMzRweDtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5jYXRlZ29yeS1waWxsLS1hY3RpdmUsIC5icmFuZC1waWxsLS1hY3RpdmUsIC50YWctcGlsbC0tYWN0aXZlIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tYWNjZW50LXByaW1hcnkpO1xuICBjb2xvcjogdmFyKC0tdGV4dC1vbi1hY2NlbnQpO1xuICBib3gtc2hhZG93OiAwIDAgMTZweCB2YXIoLS1hY2NlbnQtcHJpbWFyeS1zaGFkb3cpLCBpbnNldCAwIDFweCAwIHZhcigtLWJ0bi1pbnNldCk7XG59XG5cbi5jYXRlZ29yeS1waWxsLS1pbmFjdGl2ZSwgLmJyYW5kLXBpbGwtLWluYWN0aXZlLCAudGFnLXBpbGwtLWluYWN0aXZlIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tcGlsbC1pbmFjdGl2ZS1iZyk7XG4gIGNvbG9yOiB2YXIoLS1waWxsLWluYWN0aXZlLXRleHQpO1xuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1waWxsLWluYWN0aXZlLWJvcmRlcik7XG59XG5cblxuLmNhdGVnb3J5LXBpbGwtLWluYWN0aXZlOmhvdmVyLCAuYnJhbmQtcGlsbC0taW5hY3RpdmU6aG92ZXIsIC50YWctcGlsbC0taW5hY3RpdmU6aG92ZXIge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1nbGFzcy1ob3Zlci1iZyk7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tYWNjZW50LXByaW1hcnktYm9yZGVyKTtcbn1cblxuLyogQnJhbmQgcGlsbHMgdXNlIC0tYWNjZW50LXByaW1hcnktYm9yZGVyIG9uIGhvdmVyLCBzYW1lIGFzIGNhdGVnb3J5IHBpbGxzLFxuICAgc28gYm90aCBmb2xsb3cgdGhlIGFjdGl2ZSB0aGVtZSBjb25zaXN0ZW50bHkuICovXG5cblxuLyogLS0tIFZpZXcgVG9nZ2xlIChzaW5nbGUgYnV0dG9uKSAtLS1cbiAgIFJlcGxhY2VzIHRoZSBwcmV2aW91cyB0d28tYnV0dG9uIC52aWV3LXRvZ2dsZSBjb250YWluZXIuXG4gICBPbmUgYnV0dG9uIHRvZ2dsZXMgYmV0d2VlbiBncmlkIGFuZCBsaXN0IHZpZXc7IHRoZSB2aXNpYmxlIGljb25cbiAgIHJlcHJlc2VudHMgdGhlIFRBUkdFVCB2aWV3ICh0aGUgdmlldyB5b3Ugd2lsbCBzd2l0Y2ggdG8gb24gY2xpY2spLlxuICAgSlMgKG1haW4uanMg4oaSIHN5bmNWaWV3VG9nZ2xlcykgc3dhcHMgdGhlIGljb24gKyBhcmlhLWxhYmVsLiAqL1xuLnZpZXctdG9nZ2xlLXNpbmdsZSB7XG4gIGJhY2tncm91bmQ6IHZhcigtLXBpbGwtaW5hY3RpdmUtYmcpO1xuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1waWxsLWluYWN0aXZlLWJvcmRlcik7XG4gIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gIHBhZGRpbmc6IDAuNXJlbTtcbiAgbWluLXdpZHRoOiA0MHB4O1xuICBtaW4taGVpZ2h0OiA0MHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBjb2xvcjogdmFyKC0tdGV4dC1zZWNvbmRhcnkpO1xuICBmbGV4LXNocmluazogMDtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1ub3JtYWwpIGVhc2UsIGNvbG9yIHZhcigtLWR1cmF0aW9uLW5vcm1hbCkgZWFzZSwgYm9yZGVyLWNvbG9yIHZhcigtLWR1cmF0aW9uLW5vcm1hbCkgZWFzZSwgYm94LXNoYWRvdyB2YXIoLS1kdXJhdGlvbi1ub3JtYWwpIGVhc2U7XG59XG5cbi52aWV3LXRvZ2dsZS1zaW5nbGU6aG92ZXIge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1nbGFzcy1ob3Zlci1iZyk7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tYWNjZW50LXByaW1hcnktYm9yZGVyKTtcbiAgY29sb3I6IHZhcigtLWFjY2VudC1wcmltYXJ5KTtcbn1cblxuLmRhcmsgLnZpZXctdG9nZ2xlLXNpbmdsZSB7IGNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTsgfVxuXG4udmlldy10b2dnbGUtc2luZ2xlX19pY29uIHsgZGlzcGxheTogYmxvY2s7IH1cbi52aWV3LXRvZ2dsZS1zaW5nbGVfX2ljb24uaXMtaGlkZGVuIHsgZGlzcGxheTogbm9uZTsgfVxuXG4vKiBTdGlja3kgYmFyIHZpZXcgdG9nZ2xlIOKAlCBjb21wYWN0IG9uIG1vYmlsZSAqL1xuLnN0aWNreS1iYXIgLnZpZXctdG9nZ2xlLXNpbmdsZSB7IHBhZGRpbmc6IDZweDsgbWluLXdpZHRoOiAzNHB4OyBtaW4taGVpZ2h0OiAzNHB4OyB9XG4uc3RpY2t5LWJhciAudmlldy10b2dnbGUtc2luZ2xlX19pY29uIHsgd2lkdGg6IDE0cHg7IGhlaWdodDogMTRweDsgfVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgLnN0aWNreS1iYXIgLnZpZXctdG9nZ2xlLXNpbmdsZSB7IG1pbi13aWR0aDogMzhweDsgbWluLWhlaWdodDogMzhweDsgcGFkZGluZzogOHB4OyB9XG4gIC5zdGlja3ktYmFyIC52aWV3LXRvZ2dsZS1zaW5nbGVfX2ljb24geyB3aWR0aDogMTZweDsgaGVpZ2h0OiAxNnB4OyB9XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgNy4gUFJPRFVDVCBDQVJEXG4gICBDb21wYWN0LCBwcmVtaXVtIHByb2R1Y3Qtc2hlbGYgY2FyZHMgd2l0aCBlcXVhbC1oZWlnaHQgZ3JpZCByb3dzIGFuZCByZWR1Y2VkIGhvcml6b250YWwgdGV4dCB3YXN0ZS5cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIC0tLSBQcm9kdWN0IENhcmQgLS0tICovXG4ucHJvZHVjdC1jYXJkIHtcbiAgLS1jYXJkLWltYWdlLWhlaWdodDogY2xhbXAoMTI0cHgsIDEydncsIDE0OHB4KTtcbiAgLS1jYXJkLWNvbnRlbnQtcGFkZGluZy1ibG9jazogMC43NXJlbTtcbiAgLS1jYXJkLWNvbnRlbnQtcGFkZGluZy1pbmxpbmU6IDAuODEyNXJlbTtcbiAgLS1jYXJkLWNvbnRlbnQtZ2FwOiAwLjRyZW07XG4gIC0tY2FyZC1jaGlwLWZvbnQtc2l6ZTogMC41OTM3NXJlbTtcbiAgLS1jYXJkLWNoaXAtcGFkZGluZy1ibG9jazogMC4xNXJlbTtcbiAgLS1jYXJkLWNoaXAtcGFkZGluZy1pbmxpbmU6IDAuNDI1cmVtO1xuICAtLWNhcmQtbmFtZS1mb250LXNpemU6IDAuOXJlbTtcbiAgLS1jYXJkLW5hbWUtbGluZS1oZWlnaHQ6IDEuMjtcbiAgLS1jYXJkLWFjdGlvbi1taW4taGVpZ2h0OiAzMHB4O1xuICAtLWNhcmQtYWN0aW9uLWZvbnQtc2l6ZTogMC43MzVyZW07XG5cbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgaGVpZ2h0OiAxMDAlO1xuICBtaW4taGVpZ2h0OiAwO1xuICBjb250YWluOiBsYXlvdXQ7XG59XG5cblxuQG1lZGlhIChtYXgtd2lkdGg6IDQ3OXB4KSB7XG4gIC5wcm9kdWN0LWNhcmQge1xuICAgIC0tY2FyZC1pbWFnZS1oZWlnaHQ6IGNsYW1wKDEyNnB4LCAzNHZ3LCAxNTJweCk7XG4gICAgLS1jYXJkLW5hbWUtZm9udC1zaXplOiAwLjkzNzVyZW07XG4gICAgLS1jYXJkLWFjdGlvbi1taW4taGVpZ2h0OiAzNHB4O1xuICAgIC0tY2FyZC1hY3Rpb24tZm9udC1zaXplOiAwLjc2NXJlbTtcbiAgfVxufVxuXG4ucHJvZHVjdC1jYXJkLmxpc3QtdmlldyB7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIG1pbi1oZWlnaHQ6IDExcmVtO1xufVxuXG4ucHJvZHVjdC1jYXJkLWltYWdlLXdyYXAge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJhY2tncm91bmQ6IHZhcigtLXNjaGVtZS1pbWFnZS13cmFwLWJnKTtcbiAgZmxleC1zaHJpbms6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IHZhcigtLWNhcmQtaW1hZ2UtaGVpZ2h0KTtcbn1cblxuLmRhcmsgLnByb2R1Y3QtY2FyZC1pbWFnZS13cmFwIHsgYmFja2dyb3VuZDogdmFyKC0tc2NoZW1lLWltYWdlLXdyYXAtYmctZGFyayk7IH1cblxuLnByb2R1Y3QtY2FyZC5saXN0LXZpZXcgLnByb2R1Y3QtY2FyZC1pbWFnZS13cmFwIHtcbiAgd2lkdGg6IGNsYW1wKDcuNXJlbSwgMjR2dywgMTFyZW0pO1xuICBhc3BlY3QtcmF0aW86IGF1dG87XG4gIC8qIExldCB0aGUgZmxleCByb3cncyBhbGlnbi1pdGVtczogc3RyZXRjaCBmaWxsIHRoZSBmdWxsIGNhcmQgaGVpZ2h0LlxuICAgICBUaGUgYmFzZSAucHJvZHVjdC1jYXJkLWltYWdlLXdyYXAgc2V0cyBoZWlnaHQ6IHZhcigtLWNhcmQtaW1hZ2UtaGVpZ2h0KVxuICAgICB3aGljaCBpcyBjb3JyZWN0IGZvciBncmlkIHZpZXcgYnV0IHByZXZlbnRzIHN0cmV0Y2hpbmcgaW4gbGlzdCB2aWV3LFxuICAgICBsZWF2aW5nIGFuIGVtcHR5IGdsYXNzLWNhcmQgc3RyaXAgYmVsb3cgdGhlIGltYWdlLiAqL1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAucHJvZHVjdC1jYXJkLmxpc3QtdmlldyAucHJvZHVjdC1jYXJkLWltYWdlLXdyYXAgeyB3aWR0aDogMTJyZW07IH1cbn1cblxuLnByb2R1Y3QtY2FyZC1pbWFnZS13cmFwIHBpY3R1cmUgeyBkaXNwbGF5OiBjb250ZW50czsgfVxuXG4ucHJvZHVjdC1jYXJkLWltYWdlLXdyYXAgaW1nIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgb2JqZWN0LWZpdDogY29udGFpbjtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgcGFkZGluZzogMC4ycmVtO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4wNXMgZWFzZS1vdXQ7XG4gIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07XG59XG5cbi5wcm9kdWN0LWNhcmQ6aG92ZXIgLnByb2R1Y3QtY2FyZC1pbWFnZS13cmFwIGltZyB7XG4gIHRyYW5zZm9ybTogc2NhbGUoMS4wNSk7XG59XG5cbi8qIEltYWdlIGVycm9yIHBsYWNlaG9sZGVyIOKAlCBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgdG8gb3ZlcmxheSBpbWFnZSBhcmVhICovXG4ucHJvZHVjdC1jYXJkLWltYWdlLWVycm9yIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBpbnNldDogMDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGdhcDogMC4yNXJlbTtcbiAgY29sb3I6IHZhcigtLW5ldXRyYWwtMzAwKTtcbiAgei1pbmRleDogMTtcbn1cblxuLmRhcmsgLnByb2R1Y3QtY2FyZC1pbWFnZS1lcnJvciB7IGNvbG9yOiB2YXIoLS1zdXJmYWNlLTQwMCk7IH1cblxuLnByb2R1Y3QtY2FyZC1pbWFnZS1lcnJvci10ZXh0IHtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xufVxuXG4ucHJvZHVjdC1jYXJkLWhvdmVyLW92ZXJsYXkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGluc2V0OiAwO1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gdG9wLCB2YXIoLS1zY2hlbWUtb3ZlcmxheS1ncmFkaWVudCksIHRyYW5zcGFyZW50IDU1JSk7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgdmFyKC0tZHVyYXRpb24tc2xvdykgZWFzZTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5kYXJrIC5wcm9kdWN0LWNhcmQtaG92ZXItb3ZlcmxheSB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byB0b3AsIHZhcigtLXNjaGVtZS1vdmVybGF5LWdyYWRpZW50LWRhcmspLCB0cmFuc3BhcmVudCA1NSUpOyB9XG5cbi5wcm9kdWN0LWNhcmQ6aG92ZXIgLnByb2R1Y3QtY2FyZC1ob3Zlci1vdmVybGF5IHsgb3BhY2l0eTogMTsgfVxuXG4vKiAtLS0gQ2FyZCBDb250ZW50IC0tLSAqL1xuLnByb2R1Y3QtY2FyZC1jb250ZW50IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBzdHJldGNoO1xuICBnYXA6IHZhcigtLWNhcmQtY29udGVudC1nYXApO1xuICBmbGV4OiAxIDEgYXV0bztcbiAgbWluLXdpZHRoOiAwO1xuICBwYWRkaW5nOiB2YXIoLS1jYXJkLWNvbnRlbnQtcGFkZGluZy1ibG9jaykgdmFyKC0tY2FyZC1jb250ZW50LXBhZGRpbmctaW5saW5lKTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgLnByb2R1Y3QtY2FyZCB7XG4gICAgLS1jYXJkLWNvbnRlbnQtcGFkZGluZy1ibG9jazogMC44MTI1cmVtO1xuICAgIC0tY2FyZC1jb250ZW50LXBhZGRpbmctaW5saW5lOiAwLjg3NXJlbTtcbiAgICAtLWNhcmQtbmFtZS1mb250LXNpemU6IDAuOTM3NXJlbTtcbiAgfVxufVxuXG4ucHJvZHVjdC1jYXJkLmxpc3QtdmlldyAucHJvZHVjdC1jYXJkLWNvbnRlbnQge1xuICBwYWRkaW5nOiAwLjg3NXJlbTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5wcm9kdWN0LWNhcmQubGlzdC12aWV3IC5wcm9kdWN0LWNhcmQtY29udGVudCB7IHBhZGRpbmc6IDFyZW0gMS4xMjVyZW07IH1cbn1cblxuLyogLS0tIFRhZ3MgLS0tICovXG4ucHJvZHVjdC10YWdzIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZ2FwOiAwLjI3NXJlbTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuLnByb2R1Y3QtY2FyZC5saXN0LXZpZXcgLnByb2R1Y3QtdGFncyB7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbn1cblxuLnRhZy1icmFuZCxcbi50YWctY2F0ZWdvcnksXG4udGFnLWF0dHJpYnV0ZSxcbi50YWctbW9yZSB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIGJvcmRlci1yYWRpdXM6IDk5OTlweDtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtdWkpO1xuICBmb250LXNpemU6IHZhcigtLWNhcmQtY2hpcC1mb250LXNpemUpO1xuICBsaW5lLWhlaWdodDogMS4xODtcbiAgcGFkZGluZzogdmFyKC0tY2FyZC1jaGlwLXBhZGRpbmctYmxvY2spIHZhcigtLWNhcmQtY2hpcC1wYWRkaW5nLWlubGluZSk7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG4udGFnLWJyYW5kIHtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgYmFja2dyb3VuZDogdmFyKC0tYWNjZW50LXByaW1hcnktbGlnaHQpO1xuICBjb2xvcjogdmFyKC0tYWNjZW50LXByaW1hcnkpO1xuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1hY2NlbnQtcHJpbWFyeS1ib3JkZXIpO1xufVxuXG4udGFnLWNhdGVnb3J5LFxuLnRhZy1hdHRyaWJ1dGUsXG4udGFnLW1vcmUge1xuICBmb250LXdlaWdodDogNjAwO1xuICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tYWNjZW50LXByaW1hcnktbGlnaHQpIDQ1JSwgdmFyKC0tZ2xhc3MtYmcpKTtcbiAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hY2NlbnQtcHJpbWFyeSkgNDIlLCB2YXIoLS10ZXh0LW11dGVkKSk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hY2NlbnQtcHJpbWFyeS1ib3JkZXIpIDQyJSwgdmFyKC0tZ2xhc3MtYm9yZGVyKSk7XG59XG5cbi50YWctYXR0cmlidXRlLFxuLnRhZy1tb3JlIHtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1hY2NlbnQtcHJpbWFyeSkgMzQlLCB2YXIoLS10ZXh0LW11dGVkKSk7XG59XG5cbi50YWctbW9yZSB7XG4gIG1pbi13aWR0aDogMS40NXJlbTtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBhZGRpbmctaW5saW5lOiAwLjMyNXJlbTtcbn1cblxuXG4udGFnLWJyYW5kIHsgbWF4LXdpZHRoOiA0NSU7IH1cbi50YWctY2F0ZWdvcnkgeyBtYXgtd2lkdGg6IDEwMCU7IH1cbi50YWctYXR0cmlidXRlIHsgbWF4LXdpZHRoOiA0OCU7IH1cblxuXG4vKiBDb21wYWN0LWNhcmQgYXR0cmlidXRlIGNoaXBzIGFyZSBoaWRkZW4gb24gdmVyeSBzbWFsbCBzY3JlZW5zIHRvIGtlZXAgY2FyZFxuICAgaGVpZ2h0cyB1bmlmb3JtLiBTY29wZSB0aGlzIHRvIC5wcm9kdWN0LXRhZ3MgKHRoZSBjYXJkIGNoaXAgY29udGFpbmVyKSBvbmx5LFxuICAgc28gaXQgbmV2ZXIgcmVhY2hlcyB0aGUgUXVpY2sgVmlldyBwYW5lbCwgd2hpY2ggcmV1c2VzIC50YWctYXR0cmlidXRlIGZvciBpdHNcbiAgIG93biBhdHRyaWJ1dGUgY2hpcHMgKHNlZSBwcm9kdWN0LXF1aWNrLXZpZXcuY3NzIC8gcHJvZHVjdC1xdWljay12aWV3LmpzKS4gKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA0NzlweCkge1xuICAucHJvZHVjdC10YWdzIC50YWctYXR0cmlidXRlLFxuICAucHJvZHVjdC10YWdzIC50YWctbW9yZSB7IGRpc3BsYXk6IG5vbmU7IH1cbn1cblxuLyogLS0tIFByb2R1Y3QgUXVpY2sgVmlldyBUcmlnZ2VycyAtLS0gKi9cbi5wcm9kdWN0LWNhcmQtaW1hZ2UtYnV0dG9uLFxuLnByb2R1Y3QtbmFtZS1idXR0b24ge1xuICBhcHBlYXJhbmNlOiBub25lO1xuICBib3JkZXI6IDA7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBjb2xvcjogaW5oZXJpdDtcbiAgZm9udDogaW5oZXJpdDtcbn1cblxuLnByb2R1Y3QtY2FyZC1pbWFnZS1idXR0b24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBwYWRkaW5nOiAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5wcm9kdWN0LWNhcmQtaW1hZ2UtYnV0dG9uOmZvY3VzLXZpc2libGUsXG4ucHJvZHVjdC1uYW1lLWJ1dHRvbjpmb2N1cy12aXNpYmxlIHtcbiAgb3V0bGluZTogM3B4IHNvbGlkIHZhcigtLXNjaGVtZS1mb2N1cy1yaW5nKTtcbiAgb3V0bGluZS1vZmZzZXQ6IDNweDtcbn1cblxuLnByb2R1Y3QtY2FyZC1pbWFnZS1idXR0b246Zm9jdXMtdmlzaWJsZSB7XG4gIG91dGxpbmUtb2Zmc2V0OiAtNHB4O1xufVxuXG4vKiAtLS0gUHJvZHVjdCBOYW1lIC0tLSAqL1xuLnByb2R1Y3QtbmFtZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtaW4taGVpZ2h0OiBjYWxjKDQgKiB2YXIoLS1jYXJkLW5hbWUtbGluZS1oZWlnaHQpICogMWVtKTtcbiAgZmxleDogMSAxIGF1dG87XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGNvbG9yOiB2YXIoLS1uZXV0cmFsLTkwMCk7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LWhlYWRpbmcpO1xuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO1xuICBmb250LXNpemU6IHZhcigtLWNhcmQtbmFtZS1mb250LXNpemUpO1xuICBsaW5lLWhlaWdodDogdmFyKC0tY2FyZC1uYW1lLWxpbmUtaGVpZ2h0KTtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAwNmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5kYXJrIC5wcm9kdWN0LW5hbWUgeyBjb2xvcjogdmFyKC0tc3VyZmFjZS0xMDApOyB9XG5cbi5wcm9kdWN0LW5hbWUtYnV0dG9uIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIHdpZHRoOiAxMDAlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICAtd2Via2l0LWxpbmUtY2xhbXA6IDQ7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIHBhZGRpbmc6IDA7XG4gIHRleHQtYWxpZ246IGluaGVyaXQ7XG4gIG92ZXJmbG93LXdyYXA6IGFueXdoZXJlO1xuICBoeXBoZW5zOiBhdXRvO1xuICB0ZXh0LXdyYXA6IHByZXR0eTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4ucHJvZHVjdC1uYW1lLWJ1dHRvbjpob3ZlciB7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG59XG5cbi5wcm9kdWN0LWNhcmQubGlzdC12aWV3IC5wcm9kdWN0LW5hbWUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZmxleDogMCAwIGF1dG87XG4gIG1pbi1oZWlnaHQ6IDA7XG4gIC8qIEF1dG8gdG9wICsgYm90dG9tIG1hcmdpbnMgY2VudGVyIHRoZSB0aXRsZSB2ZXJ0aWNhbGx5IGJldHdlZW4gdGhlXG4gICAgIHRhZ3Mgcm93IChhYm92ZSkgYW5kIHRoZSBidXR0b25zIHJvdyAoYmVsb3cpLiBJbiBhIGZsZXggY29sdW1uLFxuICAgICBmcmVlIHNwYWNlIGlzIGRpc3RyaWJ1dGVkIGVxdWFsbHkgdG8gYXV0byBtYXJnaW5zLCBzbyB0aGUgdGl0bGVcbiAgICAgc2l0cyBhdCB0aGUgbWlkcG9pbnQgb2YgdGhlIHNwYWNlIGJldHdlZW4gdGFncyBhbmQgYnV0dG9ucyB3aGlsZVxuICAgICBidXR0b25zIHNldHRsZSBhdCB0aGUgYm90dG9tIG9mIHRoZSBjYXJkLiAqL1xuICBtYXJnaW4tdG9wOiBhdXRvO1xuICBtYXJnaW4tYm90dG9tOiBhdXRvO1xuICBmb250LXNpemU6IDAuOTM3NXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuMjU7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkge1xuICAucHJvZHVjdC1jYXJkLmxpc3QtdmlldyAucHJvZHVjdC1uYW1lIHsgZm9udC1zaXplOiAxcmVtOyB9XG59XG5cbi8qIC0tLSBQcm9kdWN0IEJ1dHRvbnMgLS0tICovXG4ucHJvZHVjdC1idXR0b25zIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZ2FwOiAwLjRyZW07XG4gIG1hcmdpbi10b3A6IDA7XG59XG5cbi5wcm9kdWN0LWJ1dHRvbnMgLmJ0bi1tbCxcbi5wcm9kdWN0LWJ1dHRvbnMgLmJ0bi1zaG9wZWUge1xuICBmbGV4OiAxIDEgMDtcbiAgd2lkdGg6IGF1dG87XG4gIG1pbi13aWR0aDogMDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgbWluLWhlaWdodDogdmFyKC0tY2FyZC1hY3Rpb24tbWluLWhlaWdodCk7XG4gIHBhZGRpbmc6IDAuMzc1cmVtIDAuNXJlbTtcbiAgYm9yZGVyLXJhZGl1czogMC42NXJlbTtcbiAgZm9udC1zaXplOiB2YXIoLS1jYXJkLWFjdGlvbi1mb250LXNpemUpO1xuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpO1xuICBib3gtc2hhZG93OiBub25lO1xufVxuXG5cbi5wcm9kdWN0LWJ1dHRvbnMgLmJ0bi1tbDpob3Zlcixcbi5wcm9kdWN0LWJ1dHRvbnMgLmJ0bi1zaG9wZWU6aG92ZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XG59XG5cbi5wcm9kdWN0LWJ1dHRvbnMgLmJ0bi1tbDpmb2N1cy12aXNpYmxlLFxuLnByb2R1Y3QtYnV0dG9ucyAuYnRuLXNob3BlZTpmb2N1cy12aXNpYmxlIHtcbiAgb3V0bGluZTogMnB4IHNvbGlkIHZhcigtLXNjaGVtZS1mb2N1cy1yaW5nKTtcbiAgb3V0bGluZS1vZmZzZXQ6IDJweDtcbn1cblxuLnByb2R1Y3QtYnV0dG9ucyAudHJ1bmNhdGUge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiAzNTlweCkge1xuICAucHJvZHVjdC1idXR0b25zIHtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogMC4zNzVyZW07XG4gIH1cbn1cblxuLnByb2R1Y3QtY2FyZC5saXN0LXZpZXcgLnByb2R1Y3QtYnV0dG9ucyB7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGdhcDogMC41cmVtO1xuICAvKiBObyBtYXJnaW4tdG9wOiBhdXRvIGhlcmUg4oCUIHRoZSB0aXRsZSdzIGF1dG8gbWFyZ2lucyAoc2VlXG4gICAgIC5wcm9kdWN0LWNhcmQubGlzdC12aWV3IC5wcm9kdWN0LW5hbWUpIGNvbnN1bWUgdGhlIGZyZWUgc3BhY2VcbiAgICAgYW5kIGNlbnRlciB0aGUgdGl0bGUgYmV0d2VlbiB0YWdzIGFuZCBidXR0b25zLiBCdXR0b25zIG5hdHVyYWxseVxuICAgICBzZXR0bGUgYXQgdGhlIGJvdHRvbSBvZiB0aGUgY2FyZCBhcyBhIHJlc3VsdC4gKi9cbn1cblxuLnByb2R1Y3QtY2FyZC5saXN0LXZpZXcgLnByb2R1Y3QtYnV0dG9ucyAuYnRuLW1sLFxuLnByb2R1Y3QtY2FyZC5saXN0LXZpZXcgLnByb2R1Y3QtYnV0dG9ucyAuYnRuLXNob3BlZSB7XG4gIG1pbi1oZWlnaHQ6IDMycHg7XG4gIHBhZGRpbmc6IDAuNDI1cmVtIDAuN3JlbTtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgLnByb2R1Y3QtY2FyZC5saXN0LXZpZXcgLnByb2R1Y3QtYnV0dG9ucyAuYnRuLW1sLFxuICAucHJvZHVjdC1jYXJkLmxpc3QtdmlldyAucHJvZHVjdC1idXR0b25zIC5idG4tc2hvcGVlIHtcbiAgICBtaW4taGVpZ2h0OiAzNHB4O1xuICAgIHBhZGRpbmc6IDAuNDVyZW0gMC44cmVtO1xuICAgIGZvbnQtc2l6ZTogMC43ODc1cmVtO1xuICB9XG59XG5cbi8qIC0tLSBGZWF0dXJlZCBCYWRnZSAtLS0gKi9cbi5mZWF0dXJlZC1iYWRnZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwLjYyNXJlbTtcbiAgbGVmdDogMC42MjVyZW07XG4gIHotaW5kZXg6IDI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMC4yNXJlbTtcbiAgYm9yZGVyLXJhZGl1czogOTk5OXB4O1xuICBwYWRkaW5nOiAwLjI1cmVtIDAuNjI1cmVtO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1zY2hlbWUtYmFkZ2UtYmcpO1xuICBjb2xvcjogdmFyKC0tdGV4dC1vbi1hY2NlbnQpO1xuICBib3gtc2hhZG93OiAwIDAgMTJweCB2YXIoLS1hY2NlbnQtcHJpbWFyeS1zaGFkb3cpO1xuICBmb250LWZhbWlseTogdmFyKC0tZm9udC11aSk7XG4gIGZvbnQtc2l6ZTogMC42MjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGxldHRlci1zcGFjaW5nOiAwLjAyNWVtO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xufVxuXG4uZmVhdHVyZWQtYmFkZ2Ugc3ZnIHtcbiAgd2lkdGg6IDAuNjI1cmVtO1xuICBoZWlnaHQ6IDAuNjI1cmVtO1xuICBmbGV4LXNocmluazogMDtcbn1cblxuLnByb2R1Y3QtY2FyZC5saXN0LXZpZXcgLmZlYXR1cmVkLWJhZGdlIHtcbiAgdG9wOiAwLjVyZW07XG4gIGxlZnQ6IDAuNXJlbTtcbiAgcGFkZGluZzogMC4yNXJlbSAwLjVyZW07XG4gIGZvbnQtc2l6ZTogMC42cmVtO1xufVxuXG4uZmVhdHVyZWQtdGV4dC1mdWxsIHsgZGlzcGxheTogbm9uZTsgfVxuLmZlYXR1cmVkLXRleHQtc2hvcnQgeyBkaXNwbGF5OiBpbmxpbmU7IH1cbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkge1xuICAuZmVhdHVyZWQtdGV4dC1mdWxsIHsgZGlzcGxheTogaW5saW5lOyB9XG4gIC5mZWF0dXJlZC10ZXh0LXNob3J0IHsgZGlzcGxheTogbm9uZTsgfVxufVxuXG4vKiAtLS0gRmx1aWQgR3JpZHMgLS0tICovXG4uZmx1aWQtZ3JpZC1wcm9kdWN0cyB7XG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdhcDogMC45NXJlbTtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgobWluKDEwMCUsIDI0MnB4KSwgMWZyKSk7XG4gIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xufVxuXG4ucHJvZHVjdC1saXN0IHtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG4gIGdhcDogMXJlbTtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7XG4gIC5mbHVpZC1ncmlkLXByb2R1Y3RzIHtcbiAgICBnYXA6IDFyZW07XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgobWluKDEwMCUsIDI0OHB4KSwgMWZyKSk7XG4gIH1cbiAgLnByb2R1Y3QtbGlzdCB7IGdhcDogMS4xMjVyZW07IH1cbn1cblxuLyogVHdvLWNvbHVtbiBsaXN0IHZpZXcgb24gd2lkZSBkZXNrdG9wcy5cbiAgIEF0IDEwMjRweCsgdGhlIGNhdGFsb2cgY29udGVudCBhcmVhIGlzIH45NjBweCwgd2hpY2ggZ2l2ZXMgZWFjaFxuICAgY2FyZCB+NDcxcHgg4oCUIGVub3VnaCBmb3IgdGhlIDE5MnB4IGltYWdlIHBsdXMgYSBjb21mb3J0YWJsZSBjb250ZW50XG4gICBjb2x1bW4uIEJlbG93IHRoaXMgYnJlYWtwb2ludCBjYXJkcyBzdGF5IGluIGEgc2luZ2xlIGNvbHVtbiBzbyB0aGVcbiAgIGltYWdlICsgdGV4dCBuZXZlciBmZWVsIGNyYW1wZWQuICovXG5AbWVkaWEgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC5wcm9kdWN0LWxpc3Qge1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDIsIDFmcik7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDEyODBweCkge1xuICAuZmx1aWQtZ3JpZC1wcm9kdWN0cyB7XG4gICAgZ2FwOiAxLjEyNXJlbTtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heChtaW4oMTAwJSwgMjUycHgpLCAxZnIpKTtcbiAgfVxufVxuXG4uZmx1aWQtZ3JpZC10cnVzdCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGdhcDogMS4yNXJlbTtcbn1cblxuLmZsdWlkLWdyaWQtdHJ1c3QgPiAqIHtcbiAgZmxleDogMCAxIDI2MHB4O1xuICBtaW4td2lkdGg6IDIyMHB4O1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgLmZsdWlkLWdyaWQtdHJ1c3QgeyBnYXA6IDEuNXJlbTsgfVxufVxuXG4vKiAtLS0gRW1wdHkgU3RhdGUgLS0tICovXG4uZW1wdHktc3RhdGUge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDRyZW0gMi41cmVtO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHsgLmVtcHR5LXN0YXRlIHsgcGFkZGluZzogNnJlbSAyLjVyZW07IH0gfVxuXG4uZW1wdHktc3RhdGUtaWNvbiB7IGZvbnQtc2l6ZTogM3JlbTsgbWFyZ2luLWJvdHRvbTogMXJlbTsgfVxuXG4uZW1wdHktc3RhdGUtdGl0bGUge1xuICBmb250LXNpemU6IDEuMTI1cmVtO1xuICBjb2xvcjogdmFyKC0tbmV1dHJhbC02MDApO1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG59XG5cbi5kYXJrIC5lbXB0eS1zdGF0ZS10aXRsZSB7IGNvbG9yOiB2YXIoLS1zdXJmYWNlLTIwMCk7IH1cblxuLmVtcHR5LXN0YXRlLXRleHQge1xuICBmb250LXNpemU6IDAuODc1cmVtO1xuICBjb2xvcjogdmFyKC0tbmV1dHJhbC00MDApO1xuICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG59XG5cbi5kYXJrIC5lbXB0eS1zdGF0ZS10ZXh0IHsgY29sb3I6IHZhcigtLXN1cmZhY2UtNDAwKTsgfVxuXG4uZW1wdHktc3RhdGUtYnRuIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMC41cmVtO1xuICBwYWRkaW5nOiAwLjc1cmVtIDEuNXJlbTtcbiAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgYmFja2dyb3VuZDogdmFyKC0tYWNjZW50LXByaW1hcnkpO1xuICBjb2xvcjogdmFyKC0tdGV4dC1vbi1hY2NlbnQpO1xuICBmb250LWZhbWlseTogdmFyKC0tZm9udC11aSk7XG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCk7XG4gIG1pbi1oZWlnaHQ6IDQ4cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYm9yZGVyOiBub25lO1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIHZhcigtLWR1cmF0aW9uLW5vcm1hbCkgZWFzZTtcbn1cblxuLmVtcHR5LXN0YXRlLWJ0bjpob3ZlciB7IGJhY2tncm91bmQ6IHZhcigtLWFjY2VudC1wcmltYXJ5LWhvdmVyKTsgfVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgUFJPRFVDVCBRVUlDSyBWSUVXXG4gICBTdGF0aWMgcHJvZHVjdCBkZXRhaWwgZHJhd2VyIC8gbW9iaWxlIGJvdHRvbSBzaGVldC5cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLnByb2R1Y3QtcXVpY2stdmlld1toaWRkZW5dIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4ucHJvZHVjdC1xdWljay12aWV3IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBpbnNldDogMDtcbiAgei1pbmRleDogdmFyKC0tbGF5ZXItYWN0aXZlLXBhbmVsLWJhY2tkcm9wKTtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5wcm9kdWN0LXF1aWNrLXZpZXdfX2JhY2tkcm9wIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBpbnNldDogMDtcbiAgYmFja2dyb3VuZDogdmFyKC0tZHJhd2VyLW92ZXJsYXktYmcpO1xuICBvcGFjaXR5OiAwO1xufVxuXG4ucHJvZHVjdC1xdWljay12aWV3LmlzLW9wZW4gLnByb2R1Y3QtcXVpY2stdmlld19fYmFja2Ryb3Age1xuICBhbmltYXRpb246IGZhZGUtaW4gMC4yNXMgdmFyKC0tZWFzZS1vdXQpIGJvdGg7XG59XG5cbi5wcm9kdWN0LXF1aWNrLXZpZXdfX2JhY2tkcm9wLS1jbG9zaW5nIHtcbiAgYW5pbWF0aW9uOiBvdmVybGF5LW91dCAwLjJzIHZhcigtLWVhc2Utb3V0KSBib3RoO1xufVxuXG4ucHJvZHVjdC1xdWljay12aWV3X19wYW5lbCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6IG1pbigxMDAlLCA0NDBweCk7XG4gIGhlaWdodDogMTAwZHZoO1xuICBtYXgtaGVpZ2h0OiAxMDBkdmg7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGJhY2tncm91bmQ6IHZhcigtLWRyYXdlci1wYW5lbC1iZyk7XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tZHJhd2VyLWJvcmRlcik7XG4gIGJveC1zaGFkb3c6IDAgMCA0MHB4IHZhcigtLWNocm9tZS1zaGFkb3ctbWQpO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XG4gIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICBjb250YWluOiBsYXlvdXQgcGFpbnQ7XG59XG5cbi5wcm9kdWN0LXF1aWNrLXZpZXcuaXMtb3BlbiB7XG4gIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xufVxuXG4ucHJvZHVjdC1xdWljay12aWV3LmlzLW9wZW4gLnByb2R1Y3QtcXVpY2stdmlld19fcGFuZWwge1xuICBhbmltYXRpb246IGRyYXdlci1yaWdodC1pbiAwLjNzIHZhcigtLWVhc2Utb3V0KSBib3RoO1xufVxuXG4ucHJvZHVjdC1xdWljay12aWV3X19wYW5lbC0tY2xvc2luZyB7XG4gIGFuaW1hdGlvbjogZHJhd2VyLXJpZ2h0LW91dCAwLjJzIHZhcigtLWVhc2Utb3V0KSBib3RoO1xufVxuXG4ucHJvZHVjdC1xdWljay12aWV3X19oZWFkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGdhcDogMXJlbTtcbiAgcGFkZGluZzogMXJlbTtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWdsYXNzLWJvcmRlcik7XG4gIGZsZXgtc2hyaW5rOiAwO1xufVxuXG4ucHJvZHVjdC1xdWljay12aWV3X19oZWFkZXIuZHJhd2VyLWhlYWRlciB7XG4gIHBhZGRpbmc6IDFyZW07XG59XG5cbi5wcm9kdWN0LXF1aWNrLXZpZXdfX2hlYWRlci1pY29uLXdyYXAge1xuICBmbGV4OiAwIDAgYXV0bztcbn1cblxuLnByb2R1Y3QtcXVpY2stdmlld19fZXllYnJvdyB7XG4gIG1hcmdpbi1ib3R0b206IDAuMTI1cmVtO1xuICBjb2xvcjogdmFyKC0tbmV1dHJhbC00MDApO1xuICBmb250LWZhbWlseTogdmFyKC0tZm9udC11aSk7XG4gIGZvbnQtc2l6ZTogMC42ODc1cmVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICBsaW5lLWhlaWdodDogMS4xNTtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDZlbTtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbn1cblxuLmRhcmsgLnByb2R1Y3QtcXVpY2stdmlld19fZXllYnJvdyB7IGNvbG9yOiB2YXIoLS1zdXJmYWNlLTQwMCk7IH1cblxuLnByb2R1Y3QtcXVpY2stdmlld19faGVhZGVyIC5wcm9kdWN0LXF1aWNrLXZpZXdfX2hlYWRlci10aXRsZSB7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuMjtcbn1cblxuLnByb2R1Y3QtcXVpY2stdmlld19fY2xvc2UuZHJhd2VyLWNsb3NlLWJ0biB7XG4gIGZsZXg6IDAgMCBhdXRvO1xufVxuXG4ucHJvZHVjdC1xdWljay12aWV3X19ib2R5IHtcbiAgZmxleDogMSAxIGF1dG87XG4gIG1pbi1oZWlnaHQ6IDA7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47XG4gIHBhZGRpbmc6IDFyZW07XG59XG5cbi5wcm9kdWN0LXF1aWNrLXZpZXdfX2ltYWdlLXdyYXAge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWluLWhlaWdodDogMjAwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDFyZW07XG4gIGJhY2tncm91bmQ6IHZhcigtLXNjaGVtZS1pbWFnZS13cmFwLWJnKTtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZ2xhc3MtYm9yZGVyKTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmRhcmsgLnByb2R1Y3QtcXVpY2stdmlld19faW1hZ2Utd3JhcCB7IGJhY2tncm91bmQ6IHZhcigtLXNjaGVtZS1pbWFnZS13cmFwLWJnLWRhcmspOyB9XG5cbi5wcm9kdWN0LXF1aWNrLXZpZXdfX2ltYWdlLXdyYXAgaW1nIHtcbiAgd2lkdGg6IG1pbigxMDAlLCAzMjBweCk7XG4gIGhlaWdodDogbWluKDQydmgsIDMyMHB4KTtcbiAgb2JqZWN0LWZpdDogY29udGFpbjtcbiAgcGFkZGluZzogMC4wNXJlbTtcbn1cblxuLnByb2R1Y3QtcXVpY2stdmlld19fY29udGVudCB7XG4gIHBhZGRpbmctdG9wOiAxcmVtO1xufVxuXG4ucHJvZHVjdC1xdWljay12aWV3X19jaGlwcyxcbi5wcm9kdWN0LXF1aWNrLXZpZXdfX3RhZ3Mge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMC41cmVtO1xufVxuXG4ucHJvZHVjdC1xdWljay12aWV3X19jaGlwcyB7XG4gIG1hcmdpbi1ib3R0b206IDAuNzVyZW07XG59XG5cbi5wcm9kdWN0LXF1aWNrLXZpZXdfX2NoaXBzIC50YWctYnJhbmQsXG4ucHJvZHVjdC1xdWljay12aWV3X19jaGlwcyAudGFnLWNhdGVnb3J5LFxuLnByb2R1Y3QtcXVpY2stdmlld19fdGFncyAudGFnLWF0dHJpYnV0ZSB7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgZm9udC1zaXplOiAwLjY4NzVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjE4O1xuICBwYWRkaW5nOiAwLjI1cmVtIDAuNjI1cmVtO1xufVxuXG4ucHJvZHVjdC1xdWljay12aWV3X190YWdzIC50YWctYXR0cmlidXRlIHtcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbn1cblxuLnByb2R1Y3QtcXVpY2stdmlld19fdGl0bGUge1xuICBjb2xvcjogdmFyKC0tbmV1dHJhbC05MDApO1xuICBmb250LXNpemU6IGNsYW1wKDEuMjVyZW0sIDN2dywgMS42NXJlbSk7XG4gIGxpbmUtaGVpZ2h0OiAxLjE2O1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbn1cblxuLmRhcmsgLnByb2R1Y3QtcXVpY2stdmlld19fdGl0bGUgeyBjb2xvcjogdmFyKC0tc3VyZmFjZS0xMDApOyB9XG5cbi5wcm9kdWN0LXF1aWNrLXZpZXdfX3RhZy1ibG9jayxcbi5wcm9kdWN0LXF1aWNrLXZpZXdfX2Rlc2NyaXB0aW9uLWJsb2NrIHtcbiAgcGFkZGluZy10b3A6IDFyZW07XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1nbGFzcy1ib3JkZXIpO1xufVxuXG4ucHJvZHVjdC1xdWljay12aWV3X190YWctYmxvY2sgKyAucHJvZHVjdC1xdWljay12aWV3X19kZXNjcmlwdGlvbi1ibG9jayB7XG4gIG1hcmdpbi10b3A6IDFyZW07XG59XG5cbi5wcm9kdWN0LXF1aWNrLXZpZXdfX3NlY3Rpb24tdGl0bGUge1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG4gIGNvbG9yOiB2YXIoLS1uZXV0cmFsLTUwMCk7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXVpKTtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICBsaW5lLWhlaWdodDogMS4yO1xuICBsZXR0ZXItc3BhY2luZzogMC4wNmVtO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xufVxuXG4uZGFyayAucHJvZHVjdC1xdWljay12aWV3X19zZWN0aW9uLXRpdGxlIHsgY29sb3I6IHZhcigtLXN1cmZhY2UtNDAwKTsgfVxuXG4ucHJvZHVjdC1xdWljay12aWV3X19kZXNjcmlwdGlvbiB7XG4gIGNvbG9yOiB2YXIoLS1uZXV0cmFsLTcwMCk7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXVpKTtcbiAgZm9udC1zaXplOiAwLjkyNXJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNjU7XG4gIHdoaXRlLXNwYWNlOiBwcmUtbGluZTtcbn1cblxuLmRhcmsgLnByb2R1Y3QtcXVpY2stdmlld19fZGVzY3JpcHRpb24geyBjb2xvcjogdmFyKC0tc3VyZmFjZS0zMDApOyB9XG5cbi5wcm9kdWN0LXF1aWNrLXZpZXdfX2FjdGlvbnMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IDAuNjI1cmVtO1xuICBwYWRkaW5nOiAxcmVtO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tZ2xhc3MtYm9yZGVyKTtcbiAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWRyYXdlci1wYW5lbC1iZykgOTIlLCB0cmFuc3BhcmVudCk7XG4gIGZsZXgtc2hyaW5rOiAwO1xufVxuXG4ucHJvZHVjdC1xdWljay12aWV3X19hY3Rpb25zIC5idG4tbWwsXG4ucHJvZHVjdC1xdWljay12aWV3X19hY3Rpb25zIC5idG4tc2hvcGVlIHtcbiAgZmxleDogMSAxIDA7XG4gIG1pbi13aWR0aDogMDtcbiAgbWluLWhlaWdodDogNDRweDtcbiAgcGFkZGluZzogMC42NzVyZW0gMC44NzVyZW07XG4gIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbmJvZHkucHJvZHVjdC1xdWljay12aWV3LW9wZW4gLmRhcmstdG9nZ2xlLFxuYm9keS5wcm9kdWN0LXF1aWNrLXZpZXctb3BlbiAuc2NoZW1lLXBpY2tlciB7XG4gIHotaW5kZXg6IDA7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNjM5cHgpIHtcbiAgLnByb2R1Y3QtcXVpY2stdmlldyB7XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB9XG5cbiAgLnByb2R1Y3QtcXVpY2stdmlld19fcGFuZWwge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogYXV0bztcbiAgICBtYXgtaGVpZ2h0OiA4NWR2aDtcbiAgICBib3JkZXItbGVmdDogMDtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tZHJhd2VyLWJvcmRlcik7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwJSk7XG4gIH1cblxuICAucHJvZHVjdC1xdWljay12aWV3LmlzLW9wZW4gLnByb2R1Y3QtcXVpY2stdmlld19fcGFuZWwge1xuICAgIGFuaW1hdGlvbi1uYW1lOiBzaGVldC1pbjtcbiAgfVxuXG4gIC5wcm9kdWN0LXF1aWNrLXZpZXdfX3BhbmVsLS1jbG9zaW5nIHtcbiAgICBhbmltYXRpb24tbmFtZTogc2hlZXQtb3V0O1xuICB9XG5cbiAgLnByb2R1Y3QtcXVpY2stdmlld19fYm9keSB7XG4gICAgcGFkZGluZzogMC44NzVyZW07XG4gIH1cblxuICAucHJvZHVjdC1xdWljay12aWV3X19pbWFnZS13cmFwIHtcbiAgICBtaW4taGVpZ2h0OiAxODBweDtcbiAgfVxuXG4gIC5wcm9kdWN0LXF1aWNrLXZpZXdfX2ltYWdlLXdyYXAgaW1nIHtcbiAgICBoZWlnaHQ6IG1pbigzMnZoLCAyNjBweCk7XG4gIH1cblxuICAucHJvZHVjdC1xdWljay12aWV3X19hY3Rpb25zIHtcbiAgICBwYWRkaW5nOiAwLjg3NXJlbTtcbiAgfVxufVxuXG5AbWVkaWEgKG1heC13aWR0aDogMzU5cHgpIHtcbiAgLnByb2R1Y3QtcXVpY2stdmlld19fYWN0aW9ucyB7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgfVxufVxuXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuICAucHJvZHVjdC1xdWljay12aWV3LmlzLW9wZW4gLnByb2R1Y3QtcXVpY2stdmlld19fYmFja2Ryb3AsXG4gIC5wcm9kdWN0LXF1aWNrLXZpZXdfX2JhY2tkcm9wLS1jbG9zaW5nLFxuICAucHJvZHVjdC1xdWljay12aWV3LmlzLW9wZW4gLnByb2R1Y3QtcXVpY2stdmlld19fcGFuZWwsXG4gIC5wcm9kdWN0LXF1aWNrLXZpZXdfX3BhbmVsLS1jbG9zaW5nIHtcbiAgICBhbmltYXRpb246IG5vbmU7XG4gIH1cblxuICAucHJvZHVjdC1xdWljay12aWV3LmlzLW9wZW4gLnByb2R1Y3QtcXVpY2stdmlld19fYmFja2Ryb3AgeyBvcGFjaXR5OiAxOyB9XG4gIC5wcm9kdWN0LXF1aWNrLXZpZXcuaXMtb3BlbiAucHJvZHVjdC1xdWljay12aWV3X19wYW5lbCB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsgfVxuXG4gIEBtZWRpYSAobWF4LXdpZHRoOiA2MzlweCkge1xuICAgIC5wcm9kdWN0LXF1aWNrLXZpZXcuaXMtb3BlbiAucHJvZHVjdC1xdWljay12aWV3X19wYW5lbCB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgfVxuICB9XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgOC4gRFJBV0VSXG4gICBGaWx0ZXIgZHJhd2VyIG92ZXJsYXksIHBhbmVsLCBoZWFkZXIsIHNlY3Rpb25zLCBmb290ZXIsIGRyYXdlci1vcGVuIGJvZHkgc3RhdGVcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIC0tLSBEcmF3ZXIgT3ZlcmxheSAtLS0gKi9cbi5kcmF3ZXItb3ZlcmxheSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgaW5zZXQ6IDA7XG4gIGJhY2tncm91bmQ6IHZhcigtLWRyYXdlci1vdmVybGF5LWJnKTtcbiAgei1pbmRleDogdmFyKC0tbGF5ZXItYWN0aXZlLXBhbmVsLWJhY2tkcm9wKTtcbiAgYW5pbWF0aW9uOiBmYWRlLWluIDAuMjVzIHZhcigtLWVhc2Utb3V0KSBib3RoO1xufVxuXG4uZHJhd2VyLW92ZXJsYXktLWNsb3NpbmcgeyBhbmltYXRpb246IG92ZXJsYXktb3V0IDAuMnMgdmFyKC0tZWFzZS1vdXQpIGJvdGg7IH1cblxuLyogLS0tIERyYXdlciBQYW5lbCAtLS0gKi9cbi5kcmF3ZXItcGFuZWwge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogODUlO1xuICBtYXgtd2lkdGg6IDM2MHB4O1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1kcmF3ZXItcGFuZWwtYmcpO1xuICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1kcmF3ZXItYm9yZGVyKTtcbiAgYm94LXNoYWRvdzogMCAwIDQwcHggdmFyKC0tY2hyb21lLXNoYWRvdy1tZCk7XG4gIHotaW5kZXg6IHZhcigtLWxheWVyLWFjdGl2ZS1wYW5lbCk7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIGFuaW1hdGlvbjogZHJhd2VyLWluIDAuM3MgdmFyKC0tZWFzZS1vdXQpIGJvdGg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47XG59XG5cbi5kcmF3ZXItcGFuZWwtLWNsb3NpbmcgeyBhbmltYXRpb246IGRyYXdlci1vdXQgMC4ycyB2YXIoLS1lYXNlLW91dCkgYm90aDsgfVxuXG4vKiAtLS0gRHJhd2VyIEhlYWRlciAtLS0gKi9cbi5kcmF3ZXItaGVhZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBwYWRkaW5nOiAxcmVtO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tZ2xhc3MtYm9yZGVyKTtcbn1cblxuLmRyYXdlci1oZWFkZXItbGVmdCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMC42MjVyZW07XG59XG5cbi5kcmF3ZXItaGVhZGVyLWljb24td3JhcCB7XG4gIHdpZHRoOiAyLjVyZW07XG4gIGhlaWdodDogMi41cmVtO1xuICBib3JkZXItcmFkaXVzOiAwLjc1cmVtO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1hY2NlbnQtcHJpbWFyeS1saWdodCk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWFjY2VudC1wcmltYXJ5LWJvcmRlcik7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIHZhcigtLWR1cmF0aW9uLW5vcm1hbCkgZWFzZTtcbn1cblxuLmRyYXdlci1oZWFkZXItaWNvbi13cmFwOmhvdmVyIHsgYmFja2dyb3VuZDogdmFyKC0tYWNjZW50LXByaW1hcnktYm9yZGVyKTsgfVxuXG4uZHJhd2VyLWhlYWRlci1pY29uIHsgd2lkdGg6IDEuMTI1cmVtOyBoZWlnaHQ6IDEuMTI1cmVtOyB9XG5cbi5kcmF3ZXItdGl0bGUge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgZm9udC1zaXplOiAxLjEyNXJlbTtcbiAgY29sb3I6IHZhcigtLW5ldXRyYWwtOTAwKTtcbn1cblxuLmRhcmsgLmRyYXdlci10aXRsZSB7IGNvbG9yOiB2YXIoLS1zdXJmYWNlLTEwMCk7IH1cblxuLmRyYXdlci1maWx0ZXItYmFkZ2Uge1xuICBmb250LXNpemU6IDAuNjg3NXJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbWluLXdpZHRoOiAxLjI1cmVtO1xuICBoZWlnaHQ6IDEuMjVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjI1cmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJvcmRlci1yYWRpdXM6IDAuNjI1cmVtO1xuICBwYWRkaW5nOiAwIDAuMzc1cmVtO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG4gIGNvbG9yOiB2YXIoLS10ZXh0LW9uLWFjY2VudCk7XG59XG5cbi5kcmF3ZXItY2xvc2UtYnRuIHtcbiAgd2lkdGg6IDIuMjVyZW07XG4gIGhlaWdodDogMi4yNXJlbTtcbiAgYm9yZGVyLXJhZGl1czogMC41cmVtO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1kcmF3ZXItY2xvc2UtYmcpO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYm9yZGVyOiBub25lO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGNvbG9yOiB2YXIoLS1uZXV0cmFsLTQwMCk7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQgdmFyKC0tZHVyYXRpb24tbm9ybWFsKSBlYXNlLCBjb2xvciB2YXIoLS1kdXJhdGlvbi1ub3JtYWwpIGVhc2U7XG59XG5cbi5kYXJrIC5kcmF3ZXItY2xvc2UtYnRuLFxuW2RhdGEtY29sb3Itc2NoZW1lPVwiYWx0XCJdLmRhcmsgLmRyYXdlci1jbG9zZS1idG4geyBiYWNrZ3JvdW5kOiB2YXIoLS1kcmF3ZXItY2xvc2UtYmctZGFyayk7IGNvbG9yOiB2YXIoLS1zdXJmYWNlLTMwMCk7IH1cbi5kcmF3ZXItY2xvc2UtYnRuOmhvdmVyIHsgY29sb3I6IHZhcigtLW5ldXRyYWwtNzAwKTsgYmFja2dyb3VuZDogdmFyKC0tZ2xhc3MtaG92ZXItYmcpOyB9XG4uZGFyayAuZHJhd2VyLWNsb3NlLWJ0bjpob3ZlcixcbltkYXRhLWNvbG9yLXNjaGVtZT1cImFsdFwiXS5kYXJrIC5kcmF3ZXItY2xvc2UtYnRuOmhvdmVyIHsgY29sb3I6IHZhcigtLXN1cmZhY2UtMTAwKTsgYmFja2dyb3VuZDogdmFyKC0tZHJhd2VyLWNsb3NlLWJnLWRhcmstaG92ZXIpOyB9XG5cbi8qIC0tLSBEcmF3ZXIgU2VjdGlvbnMgLS0tICovXG4uZHJhd2VyLXNlY3Rpb24geyBwYWRkaW5nOiAxcmVtIDFyZW0gMC41cmVtOyB9XG5cbi5kcmF3ZXItc2VjdGlvbi10aXRsZSB7XG4gIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcbiAgY29sb3I6IHZhcigtLW5ldXRyYWwtNDAwKTtcbiAgbWFyZ2luLWJvdHRvbTogMC43NXJlbTtcbn1cblxuLmRhcmsgLmRyYXdlci1zZWN0aW9uLXRpdGxlIHsgY29sb3I6IHZhcigtLXN1cmZhY2UtNDAwKTsgfVxuXG4uZHJhd2VyLXBpbGxzIHsgZGlzcGxheTogZmxleDsgZmxleC13cmFwOiB3cmFwOyBnYXA6IDAuNXJlbTsgfVxuXG4vKiAtLS0gRHJhd2VyIEZvb3RlciAtLS0gKi9cbi5kcmF3ZXItZm9vdGVyIHtcbiAgcGFkZGluZzogMXJlbTtcbiAgbWFyZ2luLXRvcDogYXV0bztcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWdsYXNzLWJvcmRlcik7XG59XG5cbi5kcmF3ZXItc3VibWl0LWJ0biB7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiAwLjc1cmVtIDFyZW07XG4gIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gIGJhY2tncm91bmQ6IHZhcigtLWFjY2VudC1wcmltYXJ5KTtcbiAgY29sb3I6IHZhcigtLXRleHQtb24tYWNjZW50KTtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtdWkpO1xuICBmb250LXdlaWdodDogNjAwO1xuICBmb250LXNpemU6IDAuODc1cmVtO1xuICBib3gtc2hhZG93OiAwIDAgMTZweCB2YXIoLS1hY2NlbnQtcHJpbWFyeS1zaGFkb3cpO1xuICBtaW4taGVpZ2h0OiA0OHB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGJvcmRlcjogbm9uZTtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1ub3JtYWwpIGVhc2U7XG59XG5cbi5kcmF3ZXItc3VibWl0LWJ0bjpob3ZlciB7IGJhY2tncm91bmQ6IHZhcigtLWFjY2VudC1wcmltYXJ5LWhvdmVyKTsgfVxuXG4vKiAtLS0gRHJhd2VyIE9wZW46IFByZXZlbnQgcGFnZSBzaGlmdCBvbiBmaXhlZCBlbGVtZW50cyAtLS0gKi9cbmJvZHkuZHJhd2VyLW9wZW4gLmRhcmstdG9nZ2xlIHtcbiAgcmlnaHQ6IGNhbGMoMS4yNXJlbSArIHZhcigtLXNjcm9sbGJhci1jb21wZW5zYXRpb24sIDBweCkpO1xufVxuXG5ib2R5LmRyYXdlci1vcGVuIC5kYXJrLXRvZ2dsZSxcbmJvZHkuZHJhd2VyLW9wZW4gLnNjaGVtZS1waWNrZXIge1xuICB6LWluZGV4OiAwO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICA5LiBUUlVTVFxuICAgVHJ1c3Qgc2VjdGlvbiwgZGl2aWRlciwgaGVhZGVyLCBjYXJkcywgQ1RBXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4udHJ1c3Qtc2VjdGlvbiB7XG4gIHBhZGRpbmc6IDRyZW0gMXJlbTtcbiAgbWF4LXdpZHRoOiAxNjAwcHg7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDEwO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgLnRydXN0LXNlY3Rpb24geyBwYWRkaW5nOiA1cmVtIDEuNXJlbTsgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogMTAyNHB4KSB7XG4gIC50cnVzdC1zZWN0aW9uIHsgcGFkZGluZy1sZWZ0OiAycmVtOyBwYWRkaW5nLXJpZ2h0OiAycmVtOyB9XG59XG5cbi50cnVzdC1kaXZpZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiAxcmVtO1xuICBtYXJnaW4tYm90dG9tOiAyLjVyZW07XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkgeyAudHJ1c3QtZGl2aWRlciB7IG1hcmdpbi1ib3R0b206IDNyZW07IH0gfVxuXG4udHJ1c3QtZGl2aWRlci1saW5lIHtcbiAgZmxleDogMTtcbiAgaGVpZ2h0OiAxcHg7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgdHJhbnNwYXJlbnQsIHZhcigtLXNjaGVtZS10cnVzdC1kaXZpZGVyKSwgdHJhbnNwYXJlbnQpO1xufVxuXG4uZGFyayAudHJ1c3QtZGl2aWRlci1saW5lIHsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCB0cmFuc3BhcmVudCwgdmFyKC0tc2NoZW1lLXRydXN0LWRpdmlkZXItZGFyayksIHRyYW5zcGFyZW50KTsgfVxuXG4udHJ1c3QtZGl2aWRlci1jaXJjbGUge1xuICB3aWR0aDogMi41cmVtO1xuICBoZWlnaHQ6IDIuNXJlbTtcbiAgYm9yZGVyLXJhZGl1czogOTk5OXB4O1xuICBiYWNrZ3JvdW5kOiB2YXIoLS11aS1zdXJmYWNlLWJnKTtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tdWktc3VyZmFjZS1ib3JkZXIpO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLmRhcmsgLnRydXN0LWRpdmlkZXItY2lyY2xlIHsgYmFja2dyb3VuZDogdmFyKC0tdWktc3VyZmFjZS1iZy1kYXJrKTsgYm9yZGVyLWNvbG9yOiB2YXIoLS11aS1zdXJmYWNlLWJvcmRlci1kYXJrKTsgfVxuXG4udHJ1c3QtaGVhZGVyIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBtYXJnaW4tYm90dG9tOiAyLjVyZW07XG59XG5cbi50cnVzdC10aXRsZSB7XG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcbiAgY29sb3I6IHZhcigtLW5ldXRyYWwtOTAwKTtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxNWVtO1xuICBtYXJnaW4tYm90dG9tOiAwLjc1cmVtO1xuICBmb250LXNpemU6IGNsYW1wKDEuNnJlbSwgM3Z3LCAyLjE1cmVtKTtcbn1cblxuLmRhcmsgLnRydXN0LXRpdGxlIHsgY29sb3I6IHZhcigtLXN1cmZhY2UtMTAwKTsgfVxuXG4udHJ1c3Qtc3VidGl0bGUge1xuICBjb2xvcjogdmFyKC0tbmV1dHJhbC01MDApO1xuICBmb250LWZhbWlseTogdmFyKC0tZm9udC11aSk7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjc7XG4gIG1heC13aWR0aDogMjhyZW07XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuXG4uZGFyayAudHJ1c3Qtc3VidGl0bGUgeyBjb2xvcjogdmFyKC0tc3VyZmFjZS00MDApOyB9XG5cbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkgeyAudHJ1c3Qtc3VidGl0bGUgeyBmb250LXNpemU6IDFyZW07IH0gfVxuXG4vKiAtLS0gVHJ1c3QgQ2FyZCAtLS0gKi9cbi50cnVzdC1jYXJkIHtcbiAgcGFkZGluZzogMS41cmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkgeyAudHJ1c3QtY2FyZCB7IHBhZGRpbmc6IDEuNzVyZW07IH0gfVxuXG4udHJ1c3QtY2FyZC1pY29uLXdyYXAge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHdpZHRoOiAzLjVyZW07XG4gIGhlaWdodDogMy41cmVtO1xuICBib3JkZXItcmFkaXVzOiAxcmVtO1xuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbn1cblxuLnRydXN0LWNhcmQtaWNvbi13cmFwLS1wcmltYXJ5IHtcbiAgYmFja2dyb3VuZDogdmFyKC0tYWNjZW50LXByaW1hcnktbGlnaHQpO1xuICBjb2xvcjogdmFyKC0tYWNjZW50LXByaW1hcnkpO1xuICBib3JkZXItY29sb3I6IHZhcigtLWFjY2VudC1wcmltYXJ5LWJvcmRlcik7XG59XG5cbi50cnVzdC1jYXJkLWljb24td3JhcC0tc2Vjb25kYXJ5IHtcbiAgYmFja2dyb3VuZDogdmFyKC0tYWNjZW50LXNlY29uZGFyeS1saWdodCk7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtc2Vjb25kYXJ5KTtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1hY2NlbnQtc2Vjb25kYXJ5LWJvcmRlcik7XG59XG5cbi50cnVzdC1jYXJkLXRpdGxlIHtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtaGVhZGluZyk7XG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcbiAgY29sb3I6IHZhcigtLW5ldXRyYWwtOTAwKTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG59XG5cbi5kYXJrIC50cnVzdC1jYXJkLXRpdGxlIHsgY29sb3I6IHZhcigtLXN1cmZhY2UtMTAwKTsgfVxuXG4udHJ1c3QtY2FyZC10ZXh0IHtcbiAgY29sb3I6IHZhcigtLW5ldXRyYWwtNTAwKTtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtdWkpO1xuICBmb250LXNpemU6IDAuODc1cmVtO1xuICBsaW5lLWhlaWdodDogMS42NTtcbn1cblxuLmRhcmsgLnRydXN0LWNhcmQtdGV4dCB7IGNvbG9yOiB2YXIoLS1zdXJmYWNlLTQwMCk7IH1cblxuLyogLS0tIFRydXN0IENUQSAtLS0gKi9cbi50cnVzdC1jdGEge1xuICBtYXJnaW4tdG9wOiAyLjVyZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLnRydXN0LWN0YS1wYW5lbCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogMXJlbSAycmVtO1xufVxuXG4udHJ1c3QtY3RhLXRleHQge1xuICBjb2xvcjogdmFyKC0tbmV1dHJhbC01MDApO1xuICBmb250LXNpemU6IDAuODc1cmVtO1xufVxuXG4uZGFyayAudHJ1c3QtY3RhLXRleHQgeyBjb2xvcjogdmFyKC0tc3VyZmFjZS00MDApOyB9XG5cbi50cnVzdC1jdGEtbGluayB7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICB0ZXh0LXVuZGVybGluZS1vZmZzZXQ6IDJweDtcbiAgdHJhbnNpdGlvbjogY29sb3IgdmFyKC0tZHVyYXRpb24tbm9ybWFsKSBlYXNlO1xuICBtaW4taGVpZ2h0OiA0OHB4O1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLnRydXN0LWN0YS1saW5rOmhvdmVyIHsgY29sb3I6IHZhcigtLWFjY2VudC1wcmltYXJ5LWhvdmVyKTsgfVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIDEwLiBGT09URVJcbiAgIFNpdGUgZm9vdGVyIGdyaWQsIGJyYW5kIGNvbHVtbiwgbGlua3MsIHNlY3VyaXR5IHRleHQsIGJvdHRvbSBiYXIsXG4gICBkYXJrIG1vZGUgdG9nZ2xlIEZBQlxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLnNpdGUtZm9vdGVyIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tZm9vdGVyLWJnKTtcbiAgY29sb3I6IHZhcigtLWZvb3Rlci10ZXh0KTtcbiAgcGFkZGluZzogM3JlbSAxLjI1cmVtIDJyZW07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTA7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkge1xuICAuc2l0ZS1mb290ZXIgeyBwYWRkaW5nLXRvcDogMy41cmVtOyBwYWRkaW5nLWxlZnQ6IDEuNXJlbTsgcGFkZGluZy1yaWdodDogMS41cmVtOyB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiAxMDI0cHgpIHtcbiAgLnNpdGUtZm9vdGVyIHsgcGFkZGluZy1sZWZ0OiAycmVtOyBwYWRkaW5nLXJpZ2h0OiAycmVtOyB9XG59XG5cbi5mb290ZXItaW5uZXIgeyBtYXgtd2lkdGg6IDE2MDBweDsgbWFyZ2luOiAwIGF1dG87IH1cblxuLmZvb3Rlci1ncmlkIHtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG4gIGdhcDogMnJlbTtcbiAgbWFyZ2luLWJvdHRvbTogMi41cmVtO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHsgLmZvb3Rlci1ncmlkIHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOyB9IH1cbkBtZWRpYSAobWluLXdpZHRoOiAxMDI0cHgpIHsgLmZvb3Rlci1ncmlkIHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyIDFmcjsgfSB9XG5cbi5mb290ZXItYnJhbmQtdGl0bGUge1xuICBmb250LXNpemU6IDEuMjVyZW07XG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtaGVhZGluZyk7XG4gIGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1xuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDAuNXJlbTtcbn1cblxuLmZvb3Rlci1sb2dvLWltZyB7XG4gIHdpZHRoOiAxLjc1cmVtO1xuICBoZWlnaHQ6IDEuNzVyZW07XG4gIG9iamVjdC1maXQ6IGNvbnRhaW47XG59XG5cbi5mb290ZXItYnJhbmQtaHViIHsgY29sb3I6IHZhcigtLWZvb3Rlci10ZXh0KTsgfVxuLmZvb3Rlci1icmFuZC1yYWl6IHsgY29sb3I6IHZhcigtLXNjaGVtZS1mb290ZXItYWNjZW50KTsgfVxuXG4uZm9vdGVyLWJyYW5kLWRlc2Mge1xuICBjb2xvcjogdmFyKC0tZm9vdGVyLW11dGVkKTtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtdWkpO1xuICBmb250LXNpemU6IDAuODc1cmVtO1xuICBsaW5lLWhlaWdodDogMS42NTtcbn1cblxuLmZvb3Rlci1oZWFkaW5nIHtcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpO1xuICBmb250LXNpemU6IDFyZW07XG4gIG1hcmdpbi1ib3R0b206IDAuNzVyZW07XG59XG5cbi5mb290ZXItbGlua3Mge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGdhcDogMC41cmVtIDEuMjVyZW07XG59XG5cbi5mb290ZXItbGluayB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMC41cmVtO1xuICBjb2xvcjogdmFyKC0tZm9vdGVyLW11dGVkKTtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtdWkpO1xuICBmb250LXNpemU6IDAuODc1cmVtO1xuICBtaW4taGVpZ2h0OiA0NHB4O1xuICB0cmFuc2l0aW9uOiBjb2xvciB2YXIoLS1kdXJhdGlvbi1ub3JtYWwpIGVhc2U7XG59XG5cbi5mb290ZXItbGluazpob3ZlciB7IGNvbG9yOiB2YXIoLS1zY2hlbWUtZm9vdGVyLWFjY2VudCk7IH1cblxuLmZvb3Rlci1saW5rLWljb24ge1xuICB3aWR0aDogMXJlbTtcbiAgaGVpZ2h0OiAxcmVtO1xuICBmbGV4LXNocmluazogMDtcbiAgY29sb3I6IHZhcigtLXNjaGVtZS1mb290ZXItaWNvbik7XG59XG5cbi5mb290ZXItc2VjdXJpdHktdGV4dCB7XG4gIGNvbG9yOiB2YXIoLS1mb290ZXItbXV0ZWQpO1xuICBmb250LWZhbWlseTogdmFyKC0tZm9udC11aSk7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjY1O1xuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xufVxuXG4uZm9vdGVyLW1hcmtldHBsYWNlLWJhZGdlcyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMC43NXJlbTtcbiAgY29sb3I6IHZhcigtLWZvb3Rlci1tdXRlZCk7XG59XG5cbi5mb290ZXItbWFya2V0cGxhY2UtYmFkZ2Uge1xuICBmb250LXNpemU6IDAuNzVyZW07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIHBhZGRpbmc6IDAuMjVyZW0gMC42MjVyZW07XG4gIGJvcmRlci1yYWRpdXM6IDAuMzc1cmVtO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1zY2hlbWUtbWFya2V0cGxhY2UtYmFkZ2UtYmcpO1xuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1zY2hlbWUtbWFya2V0cGxhY2UtYmFkZ2UtYm9yZGVyKTtcbiAgY29sb3I6IHZhcigtLXNjaGVtZS1mb290ZXItYWNjZW50KTtcbn1cblxuLmZvb3Rlci1tYXJrZXRwbGFjZS1wbHVzIHtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xufVxuXG4uZm9vdGVyLWVtYWlsIHtcbiAgd29yZC1icmVhazogYnJlYWstYWxsO1xufVxuXG4uZm9vdGVyLWJvdHRvbSB7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1zY2hlbWUtZm9vdGVyLWJvcmRlcik7XG4gIHBhZGRpbmctdG9wOiAxLjVyZW07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMC43NXJlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uZm9vdGVyLWNvcHlyaWdodCB7XG4gIGNvbG9yOiB2YXIoLS1mb290ZXItbXV0ZWQpO1xuICBmb250LXNpemU6IDAuNzVyZW07XG59XG5cbi5mb290ZXItZGlzY2xhaW1lciB7XG4gIGNvbG9yOiB2YXIoLS1mb290ZXItZGlzY2xhaW1lcik7XG4gIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgbWF4LXdpZHRoOiAyOHJlbTtcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAxMC4gREFSSyBNT0RFIFRPR0dMRSAoRkFCKSAmIENPTE9SIFNDSEVNRSBQSUNLRVJcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG4uZGFyay10b2dnbGUge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGJvdHRvbTogMS4yNXJlbTtcbiAgcmlnaHQ6IDEuMjVyZW07XG4gIHotaW5kZXg6IHZhcigtLWxheWVyLWZsb2F0aW5nLWNvbnRyb2wpO1xuICB3aWR0aDogM3JlbTtcbiAgaGVpZ2h0OiAzcmVtO1xuICBib3JkZXItcmFkaXVzOiA5OTk5cHg7XG4gIGJhY2tncm91bmQ6IHZhcigtLXRvZ2dsZS1iZyk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXRvZ2dsZS1ib3JkZXIpO1xuICBib3gtc2hhZG93OiAwIDAgMTZweCB2YXIoLS1jaHJvbWUtc2hhZG93LW1kKTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1zbG93KSBlYXNlLCBib3JkZXItY29sb3IgdmFyKC0tZHVyYXRpb24tc2xvdykgZWFzZSwgYm94LXNoYWRvdyB2YXIoLS1kdXJhdGlvbi1zbG93KSBlYXNlLCB0cmFuc2Zvcm0gdmFyKC0tZHVyYXRpb24tc2xvdykgZWFzZTtcbn1cblxuLmRhcmstdG9nZ2xlOmhvdmVyIHtcbiAgdHJhbnNmb3JtOiBzY2FsZSgxLjEpO1xuICBib3gtc2hhZG93OiAwIDAgMjRweCB2YXIoLS1jaHJvbWUtc2hhZG93LWxnKTtcbn1cblxuLmRhcmstdG9nZ2xlOmFjdGl2ZSB7IHRyYW5zZm9ybTogc2NhbGUoMC45NSk7IH1cblxuLmRhcmsgLmRhcmstdG9nZ2xlLFxuW2RhdGEtY29sb3Itc2NoZW1lPVwiYWx0XCJdLmRhcmsgLmRhcmstdG9nZ2xlIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tdG9nZ2xlLWJnLWRhcmspO1xuICBib3JkZXItY29sb3I6IHZhcigtLXRvZ2dsZS1ib3JkZXItZGFyayk7XG4gIGJveC1zaGFkb3c6IDAgMCAxNnB4IHZhcigtLWNocm9tZS1zaGFkb3ctZGFyayk7XG59XG5cbi5kYXJrLXRvZ2dsZS1pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMS4yNXJlbTtcbiAgaGVpZ2h0OiAxLjI1cmVtO1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IHZhcigtLWR1cmF0aW9uLXNsb3cpIGVhc2UsIHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1zbG93KSBlYXNlO1xufVxuXG4vKiBTdW4gdmlzaWJsZSBpbiBkYXJrIG1vZGUsIGhpZGRlbiBpbiBsaWdodCAqL1xuLmRhcmstdG9nZ2xlLWljb24tLXN1biB7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKSBzY2FsZSgwLjUpO1xufVxuXG4uZGFyayAuZGFyay10b2dnbGUtaWNvbi0tc3VuIHtcbiAgb3BhY2l0eTogMTtcbiAgdHJhbnNmb3JtOiByb3RhdGUoMCkgc2NhbGUoMSk7XG59XG5cbi8qIE1vb24gdmlzaWJsZSBpbiBsaWdodCBtb2RlLCBoaWRkZW4gaW4gZGFyayAqL1xuLmRhcmstdG9nZ2xlLWljb24tLW1vb24ge1xuICBjb2xvcjogdmFyKC0tYWNjZW50LXByaW1hcnkpO1xuICBvcGFjaXR5OiAxO1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgwKSBzY2FsZSgxKTtcbn1cblxuLmRhcmsgLmRhcmstdG9nZ2xlLWljb24tLW1vb24ge1xuICBvcGFjaXR5OiAwO1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgtOTBkZWcpIHNjYWxlKDAuNSk7XG59XG5cbi8qIOKUgOKUgCBMb25nLXByZXNzIGhpbnQgcHVsc2Ugb24gdG9nZ2xlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqL1xuLmRhcmstdG9nZ2xlW2RhdGEtc2NoZW1lLXBpY2tlci1oaW50XSB7XG4gIGFuaW1hdGlvbjogc2NoZW1lLWhpbnQtcHVsc2UgMC42cyBlYXNlO1xufVxuQGtleWZyYW1lcyBzY2hlbWUtaGludC1wdWxzZSB7XG4gIDAlICAgeyBib3gtc2hhZG93OiAwIDAgMCAwIHZhcigtLWFjY2VudC1wcmltYXJ5LXNoYWRvdyk7IH1cbiAgNzAlICB7IGJveC1zaGFkb3c6IDAgMCAwIDEwcHggdHJhbnNwYXJlbnQ7IH1cbiAgMTAwJSB7IGJveC1zaGFkb3c6IDAgMCAwIDAgdHJhbnNwYXJlbnQ7IH1cbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAxMi4gQ09MT1IgU0NIRU1FIFBJQ0tFUlxuICAgUG9wdXAgcGFuZWwgZm9yIHNlbGVjdGluZyBjb2xvciBzY2hlbWVzLCB0cmlnZ2VyZWQgYnkgbG9uZy1wcmVzc1xuICAgb24gdGhlIGRhcmsvbGlnaHQgbW9kZSB0b2dnbGUgRkFCXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiAtLS0gRHJvcGRvd24gUGFuZWwgKHNoYXJlZCBiYXNlKSAtLS1cbiAgIEdsYXNzIG1vcnBoaXNtIHBvcHVwIHdpdGggc2hvdy9oaWRlIHRyYW5zaXRpb24uXG4gICBVc2VkIGJ5IGJvdGggLnNjaGVtZS1waWNrZXIgYW5kIC5wZXItcGFnZS1wYW5lbC5cbiAgIFZhcmlhbnQgcG9zaXRpb25pbmcgaXMgYXBwbGllZCB2aWEgdGhlIGNvbmNyZXRlIGNvbXBvbmVudCBjbGFzc2VzLiAqL1xuXG4uZHJvcGRvd24tcGFuZWwge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1nbGFzcy1iZyk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWdsYXNzLWJvcmRlcik7XG4gIGJvcmRlci1yYWRpdXM6IDEuMjVyZW07XG4gIGJveC1zaGFkb3c6IDAgMCAzMnB4IHZhcigtLWNocm9tZS1zaGFkb3ctbGcpO1xuICBvcGFjaXR5OiAwO1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg2cHgpIHNjYWxlKDAuOTcpO1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IHZhcigtLWR1cmF0aW9uLXNsb3cpIGVhc2UsIHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1zbG93KSBlYXNlLCB2aXNpYmlsaXR5IDBzIGxpbmVhciB2YXIoLS1kdXJhdGlvbi1zbG93KTtcbn1cblxuLmRyb3Bkb3duLXBhbmVsLmlzLW9wZW4ge1xuICBvcGFjaXR5OiAxO1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgc2NhbGUoMSk7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgdmFyKC0tZHVyYXRpb24tc2xvdykgZWFzZSwgdHJhbnNmb3JtIHZhcigtLWR1cmF0aW9uLXNsb3cpIGVhc2UsIHZpc2liaWxpdHkgMHMgbGluZWFyIDBzO1xufVxuXG4uZHJvcGRvd24tb3B0aW9uIHtcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6IDAuNjI1cmVtIDAuNzVyZW07XG4gIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gIGJvcmRlcjogMS41cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1ub3JtYWwpIGVhc2UsIGJvcmRlci1jb2xvciB2YXIoLS1kdXJhdGlvbi1ub3JtYWwpIGVhc2U7XG59XG5cbi5kcm9wZG93bi1vcHRpb246aG92ZXIge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1nbGFzcy1ob3Zlci1iZyk7XG59XG5cbi5kcm9wZG93bi1vcHRpb24uaXMtYWN0aXZlIHtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG4gIGJhY2tncm91bmQ6IHZhcigtLWdsYXNzLWhvdmVyLWJnKTtcbn1cblxuLmRyb3Bkb3duLXRpdGxlIHtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xuICBmb250LXdlaWdodDogNzAwO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBsZXR0ZXItc3BhY2luZzogMC4wOGVtO1xuICBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7XG59XG5cbi5zY2hlbWUtcGlja2VyIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBib3R0b206IDVyZW07XG4gIHJpZ2h0OiAxLjI1cmVtO1xuICB6LWluZGV4OiBjYWxjKHZhcigtLWxheWVyLWZsb2F0aW5nLWNvbnRyb2wpIC0gMSk7XG4gIHdpZHRoOiAyNjBweDtcbiAgcGFkZGluZzogMXJlbTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDhweCkgc2NhbGUoMC45NSk7XG59XG5cbi5zY2hlbWUtcGlja2VyLXRpdGxlIHtcbiAgLyogLmRyb3Bkb3duLXRpdGxlIGlzIGluaGVyaXRlZCDigJQgZXh0ZW5kcyB3aXRoIHNwYWNpbmcgKi9cbiAgbWFyZ2luLWJvdHRvbTogMC43NXJlbTtcbn1cblxuLnNjaGVtZS1waWNrZXItbGlzdCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogMC4zNzVyZW07XG59XG5cbi5zY2hlbWUtb3B0aW9uIHtcbiAgLyogLmRyb3Bkb3duLW9wdGlvbiBpbmhlcml0ZWQg4oCUIGV4dGVuZHMgd2l0aCBmbGV4IGxheW91dCAqL1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDAuNzVyZW07XG59XG5cbi5zY2hlbWUtb3B0aW9uLXN3YXRjaGVzIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiAzcHg7XG4gIGZsZXgtc2hyaW5rOiAwO1xufVxuXG4uc2NoZW1lLXN3YXRjaCB7XG4gIHdpZHRoOiAxNHB4O1xuICBoZWlnaHQ6IDE0cHg7XG4gIGJvcmRlci1yYWRpdXM6IDk5OTlweDtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tc2NoZW1lLXN3YXRjaC1ib3JkZXIpO1xuICBmbGV4LXNocmluazogMDtcbn1cblxuLnNjaGVtZS1vcHRpb24taW5mbyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIG1pbi13aWR0aDogMDtcbn1cblxuLnNjaGVtZS1vcHRpb24tbmFtZSB7XG4gIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICBmb250LXdlaWdodDogNjAwO1xuICBsaW5lLWhlaWdodDogMS4yO1xufVxuXG4uc2NoZW1lLW9wdGlvbi1kZXNjIHtcbiAgZm9udC1zaXplOiAwLjY4NzVyZW07XG4gIGNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTtcbiAgbGluZS1oZWlnaHQ6IDEuMztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbi5zY2hlbWUtb3B0aW9uLWNoZWNrIHtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIHdpZHRoOiAxcmVtO1xuICBoZWlnaHQ6IDFyZW07XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG4gIG9wYWNpdHk6IDA7XG4gIGZsZXgtc2hyaW5rOiAwO1xufVxuXG4uc2NoZW1lLW9wdGlvbi5pcy1hY3RpdmUgLnNjaGVtZS1vcHRpb24tY2hlY2sge1xuICBvcGFjaXR5OiAxO1xufVxuIiwiLyog4pSA4pSAIEFsdGVybmF0ZSBvbGl2ZSBzY2hlbWUgb3ZlcnJpZGVzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgT25seSBydWxlcyB3aGVyZSB0aGUgZGVzaXJlZCBjb2xvciBkaWZmZXJzIGZyb20gd2hhdFxuICAgdmFyKC0tYWNjZW50LXByaW1hcnkpIGFuZCB2YXIoLS1hY2NlbnQtc2Vjb25kYXJ5KSByZXNvbHZlIHRvXG4gICBpbiB0aGUgYWx0ZXJuYXRlIG9saXZlIGNvbnRleHQuIE1vc3Qgc3dpdGNoaW5nIGlzIGhhbmRsZWQgYnkgdG9rZW5zLlxuICAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovXG5cbi8qIENhcmQgc2hhZG93cyAqL1xuW2RhdGEtY29sb3Itc2NoZW1lPVwiYWx0XCJdIC5maWx0ZXItYmFyIHtcbiAgYm94LXNoYWRvdzogMCAwIDI0cHggdmFyKC0tY2FyZC1zaGFkb3cpO1xufVxuXG4vKiBTZWxlY3Rpb24gKi9cbltkYXRhLWNvbG9yLXNjaGVtZT1cImFsdFwiXSA6OnNlbGVjdGlvbiB7IGJhY2tncm91bmQ6IHZhcigtLWFjY2VudC1wcmltYXJ5LWxpZ2h0KTsgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7IH1cbltkYXRhLWNvbG9yLXNjaGVtZT1cImFsdFwiXS5kYXJrIDo6c2VsZWN0aW9uIHsgYmFja2dyb3VuZDogdmFyKC0tc2VsZWN0aW9uLWJnLWRhcmspOyBjb2xvcjogdmFyKC0tc3VyZmFjZS0xMDApOyB9XG5cbi8qIENpcmN1bGFyIGdsYXNzIGVsZW1lbnRzIOKAlCBtYXRjaCB0aGUgc2NoZW1lLXRpbnRlZCBnbGFzcyBib3JkZXIgc28gdGhleSdyZVxuICAgY29uc2lzdGVudCB3aXRoIGdsYXNzLWNhcmQgLyBnbGFzcy1wYW5lbCBpbiB0aGUgb2xpdmUgdGhlbWUgKi9cbltkYXRhLWNvbG9yLXNjaGVtZT1cImFsdFwiXSAuaGVyby1zY3JvbGwtYnRuICAgeyBib3JkZXItY29sb3I6IHZhcigtLWdsYXNzLWJvcmRlcik7IH1cbltkYXRhLWNvbG9yLXNjaGVtZT1cImFsdFwiXSAudHJ1c3QtZGl2aWRlci1jaXJjbGUgeyBib3JkZXItY29sb3I6IHZhcigtLWdsYXNzLWJvcmRlcik7IH1cbi8qIGRhcmstdG9nZ2xlOiBsaWdodC1tb2RlIG9ubHkg4oCUIHRoZSBhbHQuZGFyayBzdGF0ZSBhbHJlYWR5IHVzZXMgdHJhbnNwYXJlbnQgd2hpdGUgKi9cbltkYXRhLWNvbG9yLXNjaGVtZT1cImFsdFwiXTpub3QoLmRhcmspIC5kYXJrLXRvZ2dsZSB7IGJvcmRlci1jb2xvcjogdmFyKC0tZ2xhc3MtYm9yZGVyKTsgfVxuXG4vKiBBbHQgZGFyayBtb2RlOiBoZXJvIHNjcm9sbCBidXR0b24gY29uc2lzdGVudCB3aXRoIGRlZmF1bHQgZGFyayAqL1xuW2RhdGEtY29sb3Itc2NoZW1lPVwiYWx0XCJdLmRhcmsgLmhlcm8tc2Nyb2xsLWJ0biB7XG4gIGJhY2tncm91bmQ6IHZhcigtLXVpLXN1cmZhY2UtYmctZGFyayk7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tdWktc3VyZmFjZS1ib3JkZXItZGFyayk7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG59XG5cbi8qIEFsdCBkYXJrIG1vZGU6IHRydXN0IGRpdmlkZXIgY2lyY2xlIGNvbnNpc3RlbnQgd2l0aCBkZWZhdWx0IGRhcmsgKi9cbltkYXRhLWNvbG9yLXNjaGVtZT1cImFsdFwiXS5kYXJrIC50cnVzdC1kaXZpZGVyLWNpcmNsZSB7XG4gIGJhY2tncm91bmQ6IHZhcigtLXVpLXN1cmZhY2UtYmctZGFyayk7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tdWktc3VyZmFjZS1ib3JkZXItZGFyayk7XG59XG5cbi8qIOKUgOKUgCBBbHRlcm5hdGUgb2xpdmUgZGFyazogQ29tcG9uZW50IG92ZXJyaWRlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi9cblxuLyogRGFyayB0b2dnbGUgRkFCIOKAlCBhbHJlYWR5IGNvbWJpbmVkIHdpdGggZGVmYXVsdCBkYXJrIHZpYSBzZWxlY3RvciBncm91cGluZyAqL1xuXG4vKiBMb25nLXByZXNzIGhpbnQgcHVsc2Ug4oCUIHJldXNlcyBzY2hlbWUtaGludC1wdWxzZSBrZXlmcmFtZSAoaWRlbnRpY2FsIHZhbHVlcztcbiAgIC0tYWNjZW50LXByaW1hcnktc2hhZG93IHJlc29sdmVzIGNvcnJlY3RseSBwZXItdGhlbWUgYXV0b21hdGljYWxseSkgKi9cbltkYXRhLWNvbG9yLXNjaGVtZT1cImFsdFwiXS5kYXJrIC5kYXJrLXRvZ2dsZVtkYXRhLXNjaGVtZS1waWNrZXItaGludF0ge1xuICBhbmltYXRpb246IHNjaGVtZS1oaW50LXB1bHNlIDAuNnMgZWFzZTtcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAxMS4gNDA0IFBBR0VcbiAgIE5vdCBmb3VuZCBwYWdlIHN0eWxlc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLm5vdC1mb3VuZCB7XG4gIG1pbi1oZWlnaHQ6IDEwMHZoO1xuICBtaW4taGVpZ2h0OiAxMDBkdmg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBwYWRkaW5nOiAycmVtIDEuMjVyZW07XG59XG5cbi5ub3QtZm91bmQtY29udGVudCB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDMycmVtO1xuICBtYXJnaW46IDAgYXV0bztcbn1cblxuLm5vdC1mb3VuZC1nbGFzcyB7XG4gIHBhZGRpbmc6IDNyZW0gMnJlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4ubm90LWZvdW5kLWljb24ge1xuICBjb2xvcjogdmFyKC0tYWNjZW50LXByaW1hcnkpO1xuICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG59XG5cbi5ub3QtZm91bmQtdGl0bGUge1xuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1oZWFkaW5nKTtcbiAgZm9udC1zaXplOiBjbGFtcCg0cmVtLCAxMHZ3LCA2cmVtKTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG59XG5cblxuLm5vdC1mb3VuZC10ZXh0IHtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xuICBmb250LXdlaWdodDogNjAwO1xuICBjb2xvcjogdmFyKC0tbmV1dHJhbC04MDApO1xuICBtYXJnaW4tYm90dG9tOiAwLjc1cmVtO1xufVxuXG4uZGFyayAubm90LWZvdW5kLXRleHQgeyBjb2xvcjogdmFyKC0tc3VyZmFjZS0xMDApOyB9XG5cbi5ub3QtZm91bmQtc3VidGV4dCB7XG4gIGNvbG9yOiB2YXIoLS1uZXV0cmFsLTUwMCk7XG4gIGZvbnQtc2l6ZTogMC45Mzc1cmVtO1xuICBtYXJnaW4tYm90dG9tOiAycmVtO1xufVxuXG4uZGFyayAubm90LWZvdW5kLXN1YnRleHQgeyBjb2xvcjogdmFyKC0tc3VyZmFjZS00MDApOyB9XG5cbi5ub3QtZm91bmQtYnRuIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIHdpZHRoOiBhdXRvO1xuICBwYWRkaW5nOiAwLjg3NXJlbSAxLjc1cmVtO1xufVxuXG4vKiDilIDilIAgUGFnaW5hdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi9cblxuLnBhZ2UtaGlkZGVuIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9XG5cbi8qIFRyaWdnZXIgYnV0dG9uIOKAlCBtYXRjaGVzIHZpZXctdG9nZ2xlIGNvbnRhaW5lciBzdHlsZSAqL1xuLnBlci1wYWdlLXdyYXAge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5wZXItcGFnZS10cmlnZ2VyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiAwLjM3NXJlbTtcbiAgbWluLWhlaWdodDogNDBweDtcbiAgcGFkZGluZzogMCAwLjYyNXJlbTtcbiAgYmFja2dyb3VuZDogdmFyKC0tcGlsbC1pbmFjdGl2ZS1iZyk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXBpbGwtaW5hY3RpdmUtYm9yZGVyKTtcbiAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgY29sb3I6IHZhcigtLXRleHQtc2Vjb25kYXJ5KTtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtdWkpO1xuICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgdmFyKC0tZHVyYXRpb24tbm9ybWFsKSBlYXNlLCBiYWNrZ3JvdW5kIHZhcigtLWR1cmF0aW9uLW5vcm1hbCkgZWFzZTtcbn1cblxuLnBlci1wYWdlLXRyaWdnZXI6aG92ZXIgeyBib3JkZXItY29sb3I6IHZhcigtLWFjY2VudC1wcmltYXJ5KTsgfVxuXG4ucGVyLXBhZ2UtdHJpZ2dlclthcmlhLWV4cGFuZGVkPVwidHJ1ZVwiXSB7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0tYWNjZW50LXByaW1hcnkpO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1nbGFzcy1ob3Zlci1iZyk7XG59XG5cbi5wZXItcGFnZS1jaGV2cm9uIHtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZTtcbn1cblxuLnBlci1wYWdlLXRyaWdnZXJbYXJpYS1leHBhbmRlZD1cInRydWVcIl0gLnBlci1wYWdlLWNoZXZyb24ge1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xufVxuXG4vKiDilIDilIAgU3RpY2t5IHZhcmlhbnQgKGNvbXBhY3QsIG1vYmlsZS1maXJzdCkg4pSA4pSAXG4gICBVc2VkIGluc2lkZSB0aGUgc3RpY2t5IGJhci4gU21hbGxlciBoZWlnaHQvcGFkZGluZyB0aGFuIHRoZSBkZXNrdG9wXG4gICB2YXJpYW50IHNvIGl0IGZpdHMgYWxvbmdzaWRlIHRoZSBmaWx0ZXIgYnV0dG9uLCBzZWFyY2ggZmllbGQsIGFuZFxuICAgc2luZ2xlIHZpZXctdG9nZ2xlIGJ1dHRvbiBvbiBuYXJyb3cgdmlld3BvcnRzLiAqL1xuLnBlci1wYWdlLXRyaWdnZXItLXN0aWNreSB7XG4gIG1pbi1oZWlnaHQ6IDM0cHg7XG4gIHBhZGRpbmc6IDAgMC40Mzc1cmVtO1xuICBmb250LXNpemU6IDAuNzVyZW07XG4gIGdhcDogMC4yNXJlbTtcbn1cblxuLnBlci1wYWdlLXRyaWdnZXItLXN0aWNreSAucGVyLXBhZ2UtdHJpZ2dlcl9faWNvbiB7XG4gIHdpZHRoOiAxM3B4O1xuICBoZWlnaHQ6IDEzcHg7XG59XG5cbi5wZXItcGFnZS10cmlnZ2VyLS1zdGlja3kgLnBlci1wYWdlLWNoZXZyb24ge1xuICB3aWR0aDogMTBweDtcbiAgaGVpZ2h0OiAxMHB4O1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHtcbiAgLnBlci1wYWdlLXRyaWdnZXItLXN0aWNreSB7XG4gICAgbWluLWhlaWdodDogMzhweDtcbiAgICBwYWRkaW5nOiAwIDAuNXJlbTtcbiAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgfVxuICAucGVyLXBhZ2UtdHJpZ2dlci0tc3RpY2t5IC5wZXItcGFnZS10cmlnZ2VyX19pY29uIHtcbiAgICB3aWR0aDogMTVweDtcbiAgICBoZWlnaHQ6IDE1cHg7XG4gIH1cbn1cblxuLyogUGFuZWwg4oCUIG1pcnJvcnMgLnNjaGVtZS1waWNrZXIgKi9cbi5wZXItcGFnZS1wYW5lbCB7XG4gIC8qIC5kcm9wZG93bi1wYW5lbCBpbmhlcml0ZWQg4oCUIGV4dGVuZHMgd2l0aCBwb3NpdGlvbmluZyAqL1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogY2FsYygxMDAlICsgMC41cmVtKTtcbiAgcmlnaHQ6IDA7XG4gIHotaW5kZXg6IDU1O1xuICB3aWR0aDogMTYwcHg7XG4gIHBhZGRpbmc6IDAuNzVyZW07XG59XG5cbi5wZXItcGFnZS1wYW5lbC10aXRsZSB7XG4gIC8qIC5kcm9wZG93bi10aXRsZSBpbmhlcml0ZWQg4oCUIGV4dGVuZHMgd2l0aCBzcGFjaW5nICovXG4gIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbiAgcGFkZGluZzogMCAwLjI1cmVtO1xufVxuXG4ucGVyLXBhZ2Utb3B0aW9uIHtcbiAgLyogLmRyb3Bkb3duLW9wdGlvbiBpbmhlcml0ZWQg4oCUIGV4dGVuZHMgd2l0aCB0ZXh0IHNpemluZyAqL1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogMC41cmVtIDAuNzVyZW07XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICBmb250LXdlaWdodDogNTAwO1xufVxuXG5cbi5wYWdpbmF0aW9uLWNvbnRyb2xzIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGdhcDogMXJlbTtcbiAgbWFyZ2luLXRvcDogMi41cmVtO1xuICBwYWRkaW5nLWJvdHRvbTogMXJlbTtcbn1cblxuLnBhZ2luYXRpb24tYnRuIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMC40cmVtO1xuICBwYWRkaW5nOiAwLjVyZW0gMXJlbTtcbiAgYm9yZGVyLXJhZGl1czogMC42MjVyZW07XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW5ldXRyYWwtMjAwKTtcbiAgYmFja2dyb3VuZDogdmFyKC0tc3VyZmFjZS01MCk7XG4gIGNvbG9yOiB2YXIoLS1uZXV0cmFsLTcwMCk7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBmb250LXdlaWdodDogNTAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMsIGJvcmRlci1jb2xvciAwLjE1cywgY29sb3IgMC4xNXM7XG59XG5cbi5wYWdpbmF0aW9uLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWFjY2VudC1wcmltYXJ5LWxpZ2h0KTtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG59XG5cbi5wYWdpbmF0aW9uLWJ0bjpkaXNhYmxlZCB7XG4gIG9wYWNpdHk6IDAuMzU7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbi5kYXJrIC5wYWdpbmF0aW9uLWJ0biB7XG4gIGJhY2tncm91bmQ6IHZhcigtLW5ldXRyYWwtODAwKTtcbiAgY29sb3I6IHZhcigtLXN1cmZhY2UtMzAwKTtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1uZXV0cmFsLTYwMCk7XG59XG5cbi5kYXJrIC5wYWdpbmF0aW9uLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWFjY2VudC1wcmltYXJ5LWxpZ2h0KTtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG4gIGNvbG9yOiB2YXIoLS1hY2NlbnQtcHJpbWFyeSk7XG59XG5cbi5wYWdpbmF0aW9uLWluZGljYXRvciB7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGNvbG9yOiB2YXIoLS1uZXV0cmFsLTUwMCk7XG4gIG1pbi13aWR0aDogNXJlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uZGFyayAucGFnaW5hdGlvbi1pbmRpY2F0b3IgeyBjb2xvcjogdmFyKC0tc3VyZmFjZS00MDApOyB9XG4iXX0= */