/*!***********************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[2]!./assets/ui/xn/tokens.css ***!
  \***********************************************************************************************************************************************************************************************/
/* Xentro design system — tokens & magic-layer utilities
 *
 * The rebrand token set (`--xn-*`) described in branding/07-color-system.md.
 * Two layers: a calm slate/indigo base and a sparing "aurora" magic layer
 * that only ever touches AI moments and the primary action.
 *
 * Scoped to :root so a future [data-theme="dark"] is a matter of overrides.
 * Loaded by the `app`, `work` and `design` entries — i.e. every surface.
 */

:root {
    /* base — ink & surface (slate) */
    --xn-ink:          #0f172a; /* slate-900 */
    --xn-ink-soft:     #334155; /* slate-700 */
    --xn-muted:        #64748b; /* slate-500 */
    --xn-muted-soft:   #94a3b8; /* slate-400 */
    --xn-border:       #e2e8f0; /* slate-200 */
    --xn-border-soft:  #f1f5f9; /* slate-100 */
    --xn-surface:      #ffffff;
    --xn-surface-soft: #f1f5f9; /* slate-100 */
    --xn-bg:           #f8fafc; /* slate-50 */
    --xn-chrome:       #0f172a; /* slate-900 — the dark Tier 1 topbar */
    --xn-overlay:      rgb(15 23 42 / .55);

    /* accent — indigo (the brand colour) */
    --xn-accent:       #4f46e5; /* indigo-600 */
    --xn-accent-fg:    #ffffff;
    --xn-accent-soft:  #eef2ff; /* indigo-50 */
    --xn-accent-line:  #c7d2fe; /* indigo-200 */

    /* admin surface — the operator skin (see branding/11-admin-surface.md).
     * Same shell, a darker chrome + amber "elevated rights, handle with care"
     * accent. Deliberately un-magical: the aurora never appears in admin. */
    --xn-admin-chrome:         #0a0a0a; /* near-black Tier 1 + frame */
    --xn-admin-chrome-soft:    #171717; /* Tier 2 on dark */
    --xn-admin-border:         #262626; /* hairline on dark */
    --xn-admin-accent:         #d97706; /* amber-600 — operator signal */
    --xn-admin-accent-soft:    #f59e0b; /* amber-500 */
    --xn-admin-on-chrome:      #fafafa;
    --xn-admin-on-chrome-muted:#a3a3a3;

    /* semantic */
    --xn-running:      #10b981; /* emerald-500 */
    --xn-running-soft: #d1fae5;
    --xn-success:      #10b981;
    --xn-warn:         #f59e0b; /* amber-500 */
    --xn-warn-soft:    #fef3c7;
    --xn-danger:       #e11d48; /* rose-600 */
    --xn-danger-soft:  #ffe4e6;

    /* magic — the aurora gradient (sparing!) */
    --xn-gradient-aurora: linear-gradient(100deg, #4f46e5 0%, #7c3aed 50%, #d946ef 100%);
    --xn-gradient-aurora-cool: linear-gradient(100deg, #4f46e5 0%, #7c3aed 45%, #22d3ee 100%);
    --xn-glow-aurora: radial-gradient(
        60% 60% at 50% 40%,
        rgb(124 58 237 / .28) 0%,
        rgb(79 70 229 / .14) 45%,
        transparent 75%);
    --xn-shadow-glow: 0 6px 20px -4px rgb(124 58 237 / .45), 0 2px 6px -2px rgb(79 70 229 / .35);

    /* aurora field — animated, super-subtle light hero background.
     * A white surface with three slow-drifting blurry glows. The surface stays
     * white-dominant, but the glow cores use deeper, more saturated hues so the
     * colour reads richer where it appears.
     * Editions can retune the hue/strength by overriding these three vars. */
    --xn-aurora-field-bg: #ffffff;
    --xn-aurora-field-1:  rgb(67 56 202 / .26);   /* indigo-700  */
    --xn-aurora-field-2:  rgb(192 38 211 / .22);  /* fuchsia-600 */
    --xn-aurora-field-3:  rgb(8 145 178 / .22);   /* cyan-600    */
    --xn-aurora-field-speed: 18s;

    /* type */
    --xn-font-sans: 'Space Grotesk', system-ui, -apple-system, sans-serif;
    --xn-font-mono: 'JetBrains Mono', ui-monospace, monospace;

    /* shape */
    --xn-radius-sm: 0.25rem;
    --xn-radius:    0.5rem;
    --xn-radius-lg: 0.75rem;

    /* shadow (calm; floating elements only) */
    --xn-shadow-sm: 0 1px 2px rgb(15 23 42 / 0.05);
    --xn-shadow:    0 4px 12px rgb(15 23 42 / 0.08);
    --xn-shadow-lg: 0 10px 30px rgb(15 23 42 / 0.12);
}

/* ---- magic-layer utility classes ---------------------------------------
 * Components opt into these instead of reaching for ad-hoc gradients, so
 * the aurora stays consistent and rare. */

.xn-aurora      { background-image: var(--xn-gradient-aurora); }
.xn-aurora-cool { background-image: var(--xn-gradient-aurora-cool); }

/* ---- xn-btn-aurora — the modern primary CTA finish ----------------------
 * The one place the aurora gradient lives in a button (branding/06 §5).
 * Self-contained finish (gradient + depth + glow + a moving sheen + lift) so
 * any <a> or <button> becomes the premium primary action just by adding this
 * class alongside its radius/size utilities. No constant motion — the gradient
 * glides and the sheen sweeps only on hover, keeping the magic rare. */
.xn-btn-aurora {
    position: relative;
    isolation: isolate;
    overflow: hidden;
    color: #fff;
    background-image: var(--xn-gradient-aurora);
    background-size: 180% 180%;
    background-position: 0% 50%;
    box-shadow:
        inset 0 1px 0 0 rgb(255 255 255 / .24),   /* top sheen — lit edge   */
        inset 0 -1px 0 0 rgb(49 46 129 / .35),    /* bottom — grounded edge */
        0 6px 20px -4px rgb(124 58 237 / .45),
        0 2px 6px -2px rgb(79 70 229 / .35);
    transition:
        transform .18s ease,
        box-shadow .25s ease,
        background-position .6s ease,
        filter .25s ease;
}
.xn-btn-aurora:hover {
    background-position: 100% 50%;
    transform: translateY(-1px);
    filter: saturate(1.06);
    box-shadow:
        inset 0 1px 0 0 rgb(255 255 255 / .32),
        inset 0 -1px 0 0 rgb(49 46 129 / .4),
        0 14px 32px -8px rgb(124 58 237 / .6),
        0 5px 14px -4px rgb(79 70 229 / .5);
}
.xn-btn-aurora:active {
    transform: translateY(0);
    transition-duration: .05s;
}
/* the diagonal sheen that sweeps across on hover */
.xn-btn-aurora::after {
    content: '';
    position: absolute;
    inset: 0;
    pointer-events: none;
    background: linear-gradient(
        105deg,
        transparent 38%,
        rgb(255 255 255 / .38) 50%,
        transparent 62%);
    background-size: 250% 100%;
    background-position: 180% 0;
    transition: background-position .85s cubic-bezier(.4, 0, .2, 1);
}
.xn-btn-aurora:hover::after { background-position: -90% 0; }

/* ---- xn-aurora-box — the animated aurora panel --------------------------
 * The living, premium surface for closing CTA sections. A saturated
 * indigo→violet→fuchsia base with a couple of bright, slow-drifting aurora
 * blobs and a soft top highlight — the loud sibling of `.xn-aurora-field`,
 * meant for white text on a coloured panel rather than a near-white hero.
 * Drop it on the panel itself; content renders above the drift automatically:
 *
 *   <div class="xn-aurora-box rounded-3xl px-8 py-16 text-center"> … </div>
 *
 * Self-contained (no extra DOM) and honors prefers-reduced-motion. */
.xn-aurora-box {
    position: relative;
    isolation: isolate;
    overflow: hidden;
    color: #fff;
    background-color: #312e81; /* indigo-900 — lets the blobs read */
    background-image:
        radial-gradient(42rem 24rem at 50% -25%, rgb(255 255 255 / .32), transparent 70%),
        var(--xn-gradient-aurora);
    box-shadow:
        inset 0 1px 0 0 rgb(255 255 255 / .14),
        0 24px 60px -24px rgb(79 70 229 / .55);
}
.xn-aurora-box::before,
.xn-aurora-box::after {
    content: '';
    position: absolute;
    inset: -35%;
    z-index: -1;
    pointer-events: none;
    background-repeat: no-repeat;
    filter: blur(56px);
    will-change: transform;
}
.xn-aurora-box::before {
    background-image:
        radial-gradient(30% 38% at 22% 28%, rgb(196 181 253 / .65), transparent 60%),
        radial-gradient(28% 36% at 78% 72%, rgb(244 114 182 / .55), transparent 60%);
    animation: xn-aurora-drift-a 17s linear infinite;
}
.xn-aurora-box::after {
    background-image:
        radial-gradient(32% 40% at 74% 22%, rgb(103 232 249 / .42), transparent 60%),
        radial-gradient(30% 38% at 26% 78%, rgb(129 140 248 / .6), transparent 60%);
    animation: xn-aurora-drift-b 23s linear infinite;
}

/* one accented word in a heading — text-clipped gradient */
.xn-aurora-text {
    background-image: var(--xn-gradient-aurora);
    -webkit-background-clip: text;
    background-clip: text;
    color: transparent;
}

/* ---- aurora field — animated light hero background -----------------------
 * A drop-in background layer for large hero areas: mostly white, with a few
 * heavily-blurred aurora blobs that visibly drift, rotate and scale across
 * the surface. AI-inspired and futuristic — clearly alive, yet soft enough
 * that text reads as clearly as on white.
 *
 * Built from two pseudo-element layers (no extra DOM): each carries a couple
 * of concentrated radial-gradient blobs, sized larger than the box and moved
 * with `transform` (translate + rotate + scale) so the motion is obvious
 * while the blur keeps it dreamy. Everything outside the blobs is transparent,
 * so the white background shows through and the field stays predominantly white.
 *
 * Self-contained (absolute, full-bleed, behind siblings via negative z-index).
 * Give the parent its own stacking context with `isolate` so the field stays
 * put behind the section's content (without it, the negative z-index slips
 * behind the page background and the field vanishes). Drop it as first child:
 *
 *   <section class="relative isolate overflow-hidden">
 *     <div class="xn-aurora-field" aria-hidden="true"></div>
 *     … hero content (renders above the field) …
 *   </section>
 *
 * Variants: `--cool` (cyan-leaning), `--strong` (a touch more presence).
 * Honors prefers-reduced-motion by holding a still frame. */
.xn-aurora-field {
    position: absolute;
    inset: 0;
    z-index: -10;
    overflow: hidden;
    pointer-events: none;
    background-color: var(--xn-aurora-field-bg);
}
.xn-aurora-field::before,
.xn-aurora-field::after {
    content: '';
    position: absolute;
    /* oversize the layer so rotation/scale never reveals a hard edge */
    inset: -40%;
    background-repeat: no-repeat;
    /* the "super blurry" aurora look */
    filter: blur(72px);
    will-change: transform;
}
.xn-aurora-field::before {
    background-image:
        radial-gradient(28% 28% at 28% 32%, var(--xn-aurora-field-1), transparent 62%),
        radial-gradient(26% 26% at 72% 64%, var(--xn-aurora-field-2), transparent 62%);
    animation: xn-aurora-drift-a var(--xn-aurora-field-speed) linear infinite;
}
.xn-aurora-field::after {
    background-image:
        radial-gradient(30% 30% at 64% 28%, var(--xn-aurora-field-3), transparent 62%),
        radial-gradient(24% 24% at 32% 74%, var(--xn-aurora-field-1), transparent 62%);
    animation: xn-aurora-drift-b calc(var(--xn-aurora-field-speed) * 1.35) linear infinite;
}

/* cyan-leaning mix — pairs with .xn-aurora-cool surfaces */
.xn-aurora-field--cool {
    --xn-aurora-field-1: rgb(67 56 202 / .24);
    --xn-aurora-field-2: rgb(8 145 178 / .24);
    --xn-aurora-field-3: rgb(13 148 136 / .22);
}

/* a touch more presence — still subtle, for the front-page hero */
.xn-aurora-field--strong {
    --xn-aurora-field-1: rgb(67 56 202 / .34);
    --xn-aurora-field-2: rgb(192 38 211 / .30);
    --xn-aurora-field-3: rgb(8 145 178 / .30);
}

@keyframes xn-aurora-drift-a {
    0%   { transform: translate(0, 0)        rotate(0deg)   scale(1); }
    50%  { transform: translate(7%, 9%)      rotate(180deg) scale(1.2); }
    100% { transform: translate(0, 0)        rotate(360deg) scale(1); }
}
@keyframes xn-aurora-drift-b {
    0%   { transform: translate(0, 0)        rotate(0deg)    scale(1.1); }
    50%  { transform: translate(-9%, -7%)    rotate(-180deg) scale(1.3); }
    100% { transform: translate(0, 0)        rotate(-360deg) scale(1.1); }
}

@media (prefers-reduced-motion: reduce) {
    .xn-aurora-field::before,
    .xn-aurora-field::after,
    .xn-aurora-box::before,
    .xn-aurora-box::after { animation: none; }
}

/* soft aurora glow behind agent avatars / featured cards */
.xn-glow { box-shadow: var(--xn-shadow-glow); }
.xn-glow-radial::before {
    content: '';
    position: absolute;
    inset: -40%;
    background: var(--xn-glow-aurora);
    pointer-events: none;
    z-index: 0;
}

/* thinking / streaming shimmer */
@keyframes xn-shimmer {
    0%   { background-position: -150% 0; }
    100% { background-position:  250% 0; }
}
.xn-shimmer {
    background: linear-gradient(
        100deg,
        rgb(148 163 184 / .15) 30%,
        rgb(124 58 237 / .35) 50%,
        rgb(148 163 184 / .15) 70%);
    background-size: 200% 100%;
    animation: xn-shimmer 1.8s ease-in-out infinite;
}

/* gentle pulse for live dots */
@keyframes xn-pulse-soft {
    0%, 100% { opacity: 1; }
    50%      { opacity: .4; }
}
.xn-pulse { animation: xn-pulse-soft 1.6s ease-in-out infinite; }

/* full-width buttons — xn-button is light-DOM, so stretch the host + its
 * inner control when [block] is set (used for rail / composer CTAs). */
xn-button[block] { display: block; width: 100%; }
xn-button[block] > a,
xn-button[block] > button { width: 100%; }


/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzX3VpX3huX2luZGV4X3RzLWFzc2V0c191aV94bl90b2tlbnNfY3NzLmNzcyIsIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7Ozs7RUFRRTs7QUFFRjtJQUNJLGlDQUFpQztJQUNqQywwQkFBMEIsRUFBRSxjQUFjO0lBQzFDLDBCQUEwQixFQUFFLGNBQWM7SUFDMUMsMEJBQTBCLEVBQUUsY0FBYztJQUMxQywwQkFBMEIsRUFBRSxjQUFjO0lBQzFDLDBCQUEwQixFQUFFLGNBQWM7SUFDMUMsMEJBQTBCLEVBQUUsY0FBYztJQUMxQywwQkFBMEI7SUFDMUIsMEJBQTBCLEVBQUUsY0FBYztJQUMxQywwQkFBMEIsRUFBRSxhQUFhO0lBQ3pDLDBCQUEwQixFQUFFLHVDQUF1QztJQUNuRSxzQ0FBc0M7O0lBRXRDLHVDQUF1QztJQUN2QywwQkFBMEIsRUFBRSxlQUFlO0lBQzNDLDBCQUEwQjtJQUMxQiwwQkFBMEIsRUFBRSxjQUFjO0lBQzFDLDBCQUEwQixFQUFFLGVBQWU7O0lBRTNDOzs0RUFFd0U7SUFDeEUsa0NBQWtDLEVBQUUsOEJBQThCO0lBQ2xFLGtDQUFrQyxFQUFFLG1CQUFtQjtJQUN2RCxrQ0FBa0MsRUFBRSxxQkFBcUI7SUFDekQsa0NBQWtDLEVBQUUsZ0NBQWdDO0lBQ3BFLGtDQUFrQyxFQUFFLGNBQWM7SUFDbEQsa0NBQWtDO0lBQ2xDLGtDQUFrQzs7SUFFbEMsYUFBYTtJQUNiLDBCQUEwQixFQUFFLGdCQUFnQjtJQUM1QywwQkFBMEI7SUFDMUIsMEJBQTBCO0lBQzFCLDBCQUEwQixFQUFFLGNBQWM7SUFDMUMsMEJBQTBCO0lBQzFCLDBCQUEwQixFQUFFLGFBQWE7SUFDekMsMEJBQTBCOztJQUUxQiwyQ0FBMkM7SUFDM0Msb0ZBQW9GO0lBQ3BGLHlGQUF5RjtJQUN6Rjs7Ozt3QkFJb0I7SUFDcEIsNEZBQTRGOztJQUU1Rjs7Ozs2RUFJeUU7SUFDekUsNkJBQTZCO0lBQzdCLDBDQUEwQyxJQUFJLGdCQUFnQjtJQUM5RCwyQ0FBMkMsR0FBRyxnQkFBZ0I7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LE9BQU8sNEJBQTRCLEVBQUU7SUFDckMsT0FBTyw0QkFBNEIsRUFBRTtBQUN6QztBQUNBO0lBQ0k7Ozs7bUNBSStCO0lBQy9CLDBCQUEwQjtJQUMxQiwrQ0FBK0M7QUFDbkQ7O0FBRUEsK0JBQStCO0FBQy9CO0lBQ0ksV0FBVyxVQUFVLEVBQUU7SUFDdkIsV0FBVyxXQUFXLEVBQUU7QUFDNUI7QUFDQSxZQUFZLGtEQUFrRCxFQUFFOztBQUVoRTt1RUFDdUU7QUFDdkUsbUJBQW1CLGNBQWMsRUFBRSxXQUFXLEVBQUU7QUFDaEQ7NEJBQzRCLFdBQVcsRUFBRSIsInNvdXJjZXMiOlsid2VicGFjazovL2Nsb3VkLWFnZW50cy8uL2Fzc2V0cy91aS94bi90b2tlbnMuY3NzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIFhlbnRybyBkZXNpZ24gc3lzdGVtIOKAlCB0b2tlbnMgJiBtYWdpYy1sYXllciB1dGlsaXRpZXNcbiAqXG4gKiBUaGUgcmVicmFuZCB0b2tlbiBzZXQgKGAtLXhuLSpgKSBkZXNjcmliZWQgaW4gYnJhbmRpbmcvMDctY29sb3Itc3lzdGVtLm1kLlxuICogVHdvIGxheWVyczogYSBjYWxtIHNsYXRlL2luZGlnbyBiYXNlIGFuZCBhIHNwYXJpbmcgXCJhdXJvcmFcIiBtYWdpYyBsYXllclxuICogdGhhdCBvbmx5IGV2ZXIgdG91Y2hlcyBBSSBtb21lbnRzIGFuZCB0aGUgcHJpbWFyeSBhY3Rpb24uXG4gKlxuICogU2NvcGVkIHRvIDpyb290IHNvIGEgZnV0dXJlIFtkYXRhLXRoZW1lPVwiZGFya1wiXSBpcyBhIG1hdHRlciBvZiBvdmVycmlkZXMuXG4gKiBMb2FkZWQgYnkgdGhlIGBhcHBgLCBgd29ya2AgYW5kIGBkZXNpZ25gIGVudHJpZXMg4oCUIGkuZS4gZXZlcnkgc3VyZmFjZS5cbiAqL1xuXG46cm9vdCB7XG4gICAgLyogYmFzZSDigJQgaW5rICYgc3VyZmFjZSAoc2xhdGUpICovXG4gICAgLS14bi1pbms6ICAgICAgICAgICMwZjE3MmE7IC8qIHNsYXRlLTkwMCAqL1xuICAgIC0teG4taW5rLXNvZnQ6ICAgICAjMzM0MTU1OyAvKiBzbGF0ZS03MDAgKi9cbiAgICAtLXhuLW11dGVkOiAgICAgICAgIzY0NzQ4YjsgLyogc2xhdGUtNTAwICovXG4gICAgLS14bi1tdXRlZC1zb2Z0OiAgICM5NGEzYjg7IC8qIHNsYXRlLTQwMCAqL1xuICAgIC0teG4tYm9yZGVyOiAgICAgICAjZTJlOGYwOyAvKiBzbGF0ZS0yMDAgKi9cbiAgICAtLXhuLWJvcmRlci1zb2Z0OiAgI2YxZjVmOTsgLyogc2xhdGUtMTAwICovXG4gICAgLS14bi1zdXJmYWNlOiAgICAgICNmZmZmZmY7XG4gICAgLS14bi1zdXJmYWNlLXNvZnQ6ICNmMWY1Zjk7IC8qIHNsYXRlLTEwMCAqL1xuICAgIC0teG4tYmc6ICAgICAgICAgICAjZjhmYWZjOyAvKiBzbGF0ZS01MCAqL1xuICAgIC0teG4tY2hyb21lOiAgICAgICAjMGYxNzJhOyAvKiBzbGF0ZS05MDAg4oCUIHRoZSBkYXJrIFRpZXIgMSB0b3BiYXIgKi9cbiAgICAtLXhuLW92ZXJsYXk6ICAgICAgcmdiKDE1IDIzIDQyIC8gLjU1KTtcblxuICAgIC8qIGFjY2VudCDigJQgaW5kaWdvICh0aGUgYnJhbmQgY29sb3VyKSAqL1xuICAgIC0teG4tYWNjZW50OiAgICAgICAjNGY0NmU1OyAvKiBpbmRpZ28tNjAwICovXG4gICAgLS14bi1hY2NlbnQtZmc6ICAgICNmZmZmZmY7XG4gICAgLS14bi1hY2NlbnQtc29mdDogICNlZWYyZmY7IC8qIGluZGlnby01MCAqL1xuICAgIC0teG4tYWNjZW50LWxpbmU6ICAjYzdkMmZlOyAvKiBpbmRpZ28tMjAwICovXG5cbiAgICAvKiBhZG1pbiBzdXJmYWNlIOKAlCB0aGUgb3BlcmF0b3Igc2tpbiAoc2VlIGJyYW5kaW5nLzExLWFkbWluLXN1cmZhY2UubWQpLlxuICAgICAqIFNhbWUgc2hlbGwsIGEgZGFya2VyIGNocm9tZSArIGFtYmVyIFwiZWxldmF0ZWQgcmlnaHRzLCBoYW5kbGUgd2l0aCBjYXJlXCJcbiAgICAgKiBhY2NlbnQuIERlbGliZXJhdGVseSB1bi1tYWdpY2FsOiB0aGUgYXVyb3JhIG5ldmVyIGFwcGVhcnMgaW4gYWRtaW4uICovXG4gICAgLS14bi1hZG1pbi1jaHJvbWU6ICAgICAgICAgIzBhMGEwYTsgLyogbmVhci1ibGFjayBUaWVyIDEgKyBmcmFtZSAqL1xuICAgIC0teG4tYWRtaW4tY2hyb21lLXNvZnQ6ICAgICMxNzE3MTc7IC8qIFRpZXIgMiBvbiBkYXJrICovXG4gICAgLS14bi1hZG1pbi1ib3JkZXI6ICAgICAgICAgIzI2MjYyNjsgLyogaGFpcmxpbmUgb24gZGFyayAqL1xuICAgIC0teG4tYWRtaW4tYWNjZW50OiAgICAgICAgICNkOTc3MDY7IC8qIGFtYmVyLTYwMCDigJQgb3BlcmF0b3Igc2lnbmFsICovXG4gICAgLS14bi1hZG1pbi1hY2NlbnQtc29mdDogICAgI2Y1OWUwYjsgLyogYW1iZXItNTAwICovXG4gICAgLS14bi1hZG1pbi1vbi1jaHJvbWU6ICAgICAgI2ZhZmFmYTtcbiAgICAtLXhuLWFkbWluLW9uLWNocm9tZS1tdXRlZDojYTNhM2EzO1xuXG4gICAgLyogc2VtYW50aWMgKi9cbiAgICAtLXhuLXJ1bm5pbmc6ICAgICAgIzEwYjk4MTsgLyogZW1lcmFsZC01MDAgKi9cbiAgICAtLXhuLXJ1bm5pbmctc29mdDogI2QxZmFlNTtcbiAgICAtLXhuLXN1Y2Nlc3M6ICAgICAgIzEwYjk4MTtcbiAgICAtLXhuLXdhcm46ICAgICAgICAgI2Y1OWUwYjsgLyogYW1iZXItNTAwICovXG4gICAgLS14bi13YXJuLXNvZnQ6ICAgICNmZWYzYzc7XG4gICAgLS14bi1kYW5nZXI6ICAgICAgICNlMTFkNDg7IC8qIHJvc2UtNjAwICovXG4gICAgLS14bi1kYW5nZXItc29mdDogICNmZmU0ZTY7XG5cbiAgICAvKiBtYWdpYyDigJQgdGhlIGF1cm9yYSBncmFkaWVudCAoc3BhcmluZyEpICovXG4gICAgLS14bi1ncmFkaWVudC1hdXJvcmE6IGxpbmVhci1ncmFkaWVudCgxMDBkZWcsICM0ZjQ2ZTUgMCUsICM3YzNhZWQgNTAlLCAjZDk0NmVmIDEwMCUpO1xuICAgIC0teG4tZ3JhZGllbnQtYXVyb3JhLWNvb2w6IGxpbmVhci1ncmFkaWVudCgxMDBkZWcsICM0ZjQ2ZTUgMCUsICM3YzNhZWQgNDUlLCAjMjJkM2VlIDEwMCUpO1xuICAgIC0teG4tZ2xvdy1hdXJvcmE6IHJhZGlhbC1ncmFkaWVudChcbiAgICAgICAgNjAlIDYwJSBhdCA1MCUgNDAlLFxuICAgICAgICByZ2IoMTI0IDU4IDIzNyAvIC4yOCkgMCUsXG4gICAgICAgIHJnYig3OSA3MCAyMjkgLyAuMTQpIDQ1JSxcbiAgICAgICAgdHJhbnNwYXJlbnQgNzUlKTtcbiAgICAtLXhuLXNoYWRvdy1nbG93OiAwIDZweCAyMHB4IC00cHggcmdiKDEyNCA1OCAyMzcgLyAuNDUpLCAwIDJweCA2cHggLTJweCByZ2IoNzkgNzAgMjI5IC8gLjM1KTtcblxuICAgIC8qIGF1cm9yYSBmaWVsZCDigJQgYW5pbWF0ZWQsIHN1cGVyLXN1YnRsZSBsaWdodCBoZXJvIGJhY2tncm91bmQuXG4gICAgICogQSB3aGl0ZSBzdXJmYWNlIHdpdGggdGhyZWUgc2xvdy1kcmlmdGluZyBibHVycnkgZ2xvd3MuIFRoZSBzdXJmYWNlIHN0YXlzXG4gICAgICogd2hpdGUtZG9taW5hbnQsIGJ1dCB0aGUgZ2xvdyBjb3JlcyB1c2UgZGVlcGVyLCBtb3JlIHNhdHVyYXRlZCBodWVzIHNvIHRoZVxuICAgICAqIGNvbG91ciByZWFkcyByaWNoZXIgd2hlcmUgaXQgYXBwZWFycy5cbiAgICAgKiBFZGl0aW9ucyBjYW4gcmV0dW5lIHRoZSBodWUvc3RyZW5ndGggYnkgb3ZlcnJpZGluZyB0aGVzZSB0aHJlZSB2YXJzLiAqL1xuICAgIC0teG4tYXVyb3JhLWZpZWxkLWJnOiAjZmZmZmZmO1xuICAgIC0teG4tYXVyb3JhLWZpZWxkLTE6ICByZ2IoNjcgNTYgMjAyIC8gLjI2KTsgICAvKiBpbmRpZ28tNzAwICAqL1xuICAgIC0teG4tYXVyb3JhLWZpZWxkLTI6ICByZ2IoMTkyIDM4IDIxMSAvIC4yMik7ICAvKiBmdWNoc2lhLTYwMCAqL1xuICAgIC0teG4tYXVyb3JhLWZpZWxkLTM6ICByZ2IoOCAxNDUgMTc4IC8gLjIyKTsgICAvKiBjeWFuLTYwMCAgICAqL1xuICAgIC0teG4tYXVyb3JhLWZpZWxkLXNwZWVkOiAxOHM7XG5cbiAgICAvKiB0eXBlICovXG4gICAgLS14bi1mb250LXNhbnM6ICdTcGFjZSBHcm90ZXNrJywgc3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBzYW5zLXNlcmlmO1xuICAgIC0teG4tZm9udC1tb25vOiAnSmV0QnJhaW5zIE1vbm8nLCB1aS1tb25vc3BhY2UsIG1vbm9zcGFjZTtcblxuICAgIC8qIHNoYXBlICovXG4gICAgLS14bi1yYWRpdXMtc206IDAuMjVyZW07XG4gICAgLS14bi1yYWRpdXM6ICAgIDAuNXJlbTtcbiAgICAtLXhuLXJhZGl1cy1sZzogMC43NXJlbTtcblxuICAgIC8qIHNoYWRvdyAoY2FsbTsgZmxvYXRpbmcgZWxlbWVudHMgb25seSkgKi9cbiAgICAtLXhuLXNoYWRvdy1zbTogMCAxcHggMnB4IHJnYigxNSAyMyA0MiAvIDAuMDUpO1xuICAgIC0teG4tc2hhZG93OiAgICAwIDRweCAxMnB4IHJnYigxNSAyMyA0MiAvIDAuMDgpO1xuICAgIC0teG4tc2hhZG93LWxnOiAwIDEwcHggMzBweCByZ2IoMTUgMjMgNDIgLyAwLjEyKTtcbn1cblxuLyogLS0tLSBtYWdpYy1sYXllciB1dGlsaXR5IGNsYXNzZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb21wb25lbnRzIG9wdCBpbnRvIHRoZXNlIGluc3RlYWQgb2YgcmVhY2hpbmcgZm9yIGFkLWhvYyBncmFkaWVudHMsIHNvXG4gKiB0aGUgYXVyb3JhIHN0YXlzIGNvbnNpc3RlbnQgYW5kIHJhcmUuICovXG5cbi54bi1hdXJvcmEgICAgICB7IGJhY2tncm91bmQtaW1hZ2U6IHZhcigtLXhuLWdyYWRpZW50LWF1cm9yYSk7IH1cbi54bi1hdXJvcmEtY29vbCB7IGJhY2tncm91bmQtaW1hZ2U6IHZhcigtLXhuLWdyYWRpZW50LWF1cm9yYS1jb29sKTsgfVxuXG4vKiAtLS0tIHhuLWJ0bi1hdXJvcmEg4oCUIHRoZSBtb2Rlcm4gcHJpbWFyeSBDVEEgZmluaXNoIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIFRoZSBvbmUgcGxhY2UgdGhlIGF1cm9yYSBncmFkaWVudCBsaXZlcyBpbiBhIGJ1dHRvbiAoYnJhbmRpbmcvMDYgwqc1KS5cbiAqIFNlbGYtY29udGFpbmVkIGZpbmlzaCAoZ3JhZGllbnQgKyBkZXB0aCArIGdsb3cgKyBhIG1vdmluZyBzaGVlbiArIGxpZnQpIHNvXG4gKiBhbnkgPGE+IG9yIDxidXR0b24+IGJlY29tZXMgdGhlIHByZW1pdW0gcHJpbWFyeSBhY3Rpb24ganVzdCBieSBhZGRpbmcgdGhpc1xuICogY2xhc3MgYWxvbmdzaWRlIGl0cyByYWRpdXMvc2l6ZSB1dGlsaXRpZXMuIE5vIGNvbnN0YW50IG1vdGlvbiDigJQgdGhlIGdyYWRpZW50XG4gKiBnbGlkZXMgYW5kIHRoZSBzaGVlbiBzd2VlcHMgb25seSBvbiBob3Zlciwga2VlcGluZyB0aGUgbWFnaWMgcmFyZS4gKi9cbi54bi1idG4tYXVyb3JhIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgaXNvbGF0aW9uOiBpc29sYXRlO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgY29sb3I6ICNmZmY7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdmFyKC0teG4tZ3JhZGllbnQtYXVyb3JhKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDE4MCUgMTgwJTtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwJSA1MCU7XG4gICAgYm94LXNoYWRvdzpcbiAgICAgICAgaW5zZXQgMCAxcHggMCAwIHJnYigyNTUgMjU1IDI1NSAvIC4yNCksICAgLyogdG9wIHNoZWVuIOKAlCBsaXQgZWRnZSAgICovXG4gICAgICAgIGluc2V0IDAgLTFweCAwIDAgcmdiKDQ5IDQ2IDEyOSAvIC4zNSksICAgIC8qIGJvdHRvbSDigJQgZ3JvdW5kZWQgZWRnZSAqL1xuICAgICAgICAwIDZweCAyMHB4IC00cHggcmdiKDEyNCA1OCAyMzcgLyAuNDUpLFxuICAgICAgICAwIDJweCA2cHggLTJweCByZ2IoNzkgNzAgMjI5IC8gLjM1KTtcbiAgICB0cmFuc2l0aW9uOlxuICAgICAgICB0cmFuc2Zvcm0gLjE4cyBlYXNlLFxuICAgICAgICBib3gtc2hhZG93IC4yNXMgZWFzZSxcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbiAuNnMgZWFzZSxcbiAgICAgICAgZmlsdGVyIC4yNXMgZWFzZTtcbn1cbi54bi1idG4tYXVyb3JhOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAxMDAlIDUwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XG4gICAgZmlsdGVyOiBzYXR1cmF0ZSgxLjA2KTtcbiAgICBib3gtc2hhZG93OlxuICAgICAgICBpbnNldCAwIDFweCAwIDAgcmdiKDI1NSAyNTUgMjU1IC8gLjMyKSxcbiAgICAgICAgaW5zZXQgMCAtMXB4IDAgMCByZ2IoNDkgNDYgMTI5IC8gLjQpLFxuICAgICAgICAwIDE0cHggMzJweCAtOHB4IHJnYigxMjQgNTggMjM3IC8gLjYpLFxuICAgICAgICAwIDVweCAxNHB4IC00cHggcmdiKDc5IDcwIDIyOSAvIC41KTtcbn1cbi54bi1idG4tYXVyb3JhOmFjdGl2ZSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICAgIHRyYW5zaXRpb24tZHVyYXRpb246IC4wNXM7XG59XG4vKiB0aGUgZGlhZ29uYWwgc2hlZW4gdGhhdCBzd2VlcHMgYWNyb3NzIG9uIGhvdmVyICovXG4ueG4tYnRuLWF1cm9yYTo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBpbnNldDogMDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoXG4gICAgICAgIDEwNWRlZyxcbiAgICAgICAgdHJhbnNwYXJlbnQgMzglLFxuICAgICAgICByZ2IoMjU1IDI1NSAyNTUgLyAuMzgpIDUwJSxcbiAgICAgICAgdHJhbnNwYXJlbnQgNjIlKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDI1MCUgMTAwJTtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAxODAlIDA7XG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1wb3NpdGlvbiAuODVzIGN1YmljLWJlemllciguNCwgMCwgLjIsIDEpO1xufVxuLnhuLWJ0bi1hdXJvcmE6aG92ZXI6OmFmdGVyIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTkwJSAwOyB9XG5cbi8qIC0tLS0geG4tYXVyb3JhLWJveCDigJQgdGhlIGFuaW1hdGVkIGF1cm9yYSBwYW5lbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogVGhlIGxpdmluZywgcHJlbWl1bSBzdXJmYWNlIGZvciBjbG9zaW5nIENUQSBzZWN0aW9ucy4gQSBzYXR1cmF0ZWRcbiAqIGluZGlnb+KGknZpb2xldOKGkmZ1Y2hzaWEgYmFzZSB3aXRoIGEgY291cGxlIG9mIGJyaWdodCwgc2xvdy1kcmlmdGluZyBhdXJvcmFcbiAqIGJsb2JzIGFuZCBhIHNvZnQgdG9wIGhpZ2hsaWdodCDigJQgdGhlIGxvdWQgc2libGluZyBvZiBgLnhuLWF1cm9yYS1maWVsZGAsXG4gKiBtZWFudCBmb3Igd2hpdGUgdGV4dCBvbiBhIGNvbG91cmVkIHBhbmVsIHJhdGhlciB0aGFuIGEgbmVhci13aGl0ZSBoZXJvLlxuICogRHJvcCBpdCBvbiB0aGUgcGFuZWwgaXRzZWxmOyBjb250ZW50IHJlbmRlcnMgYWJvdmUgdGhlIGRyaWZ0IGF1dG9tYXRpY2FsbHk6XG4gKlxuICogICA8ZGl2IGNsYXNzPVwieG4tYXVyb3JhLWJveCByb3VuZGVkLTN4bCBweC04IHB5LTE2IHRleHQtY2VudGVyXCI+IOKApiA8L2Rpdj5cbiAqXG4gKiBTZWxmLWNvbnRhaW5lZCAobm8gZXh0cmEgRE9NKSBhbmQgaG9ub3JzIHByZWZlcnMtcmVkdWNlZC1tb3Rpb24uICovXG4ueG4tYXVyb3JhLWJveCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGlzb2xhdGlvbjogaXNvbGF0ZTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGNvbG9yOiAjZmZmO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMzMTJlODE7IC8qIGluZGlnby05MDAg4oCUIGxldHMgdGhlIGJsb2JzIHJlYWQgKi9cbiAgICBiYWNrZ3JvdW5kLWltYWdlOlxuICAgICAgICByYWRpYWwtZ3JhZGllbnQoNDJyZW0gMjRyZW0gYXQgNTAlIC0yNSUsIHJnYigyNTUgMjU1IDI1NSAvIC4zMiksIHRyYW5zcGFyZW50IDcwJSksXG4gICAgICAgIHZhcigtLXhuLWdyYWRpZW50LWF1cm9yYSk7XG4gICAgYm94LXNoYWRvdzpcbiAgICAgICAgaW5zZXQgMCAxcHggMCAwIHJnYigyNTUgMjU1IDI1NSAvIC4xNCksXG4gICAgICAgIDAgMjRweCA2MHB4IC0yNHB4IHJnYig3OSA3MCAyMjkgLyAuNTUpO1xufVxuLnhuLWF1cm9yYS1ib3g6OmJlZm9yZSxcbi54bi1hdXJvcmEtYm94OjphZnRlciB7XG4gICAgY29udGVudDogJyc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0OiAtMzUlO1xuICAgIHotaW5kZXg6IC0xO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgZmlsdGVyOiBibHVyKDU2cHgpO1xuICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07XG59XG4ueG4tYXVyb3JhLWJveDo6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOlxuICAgICAgICByYWRpYWwtZ3JhZGllbnQoMzAlIDM4JSBhdCAyMiUgMjglLCByZ2IoMTk2IDE4MSAyNTMgLyAuNjUpLCB0cmFuc3BhcmVudCA2MCUpLFxuICAgICAgICByYWRpYWwtZ3JhZGllbnQoMjglIDM2JSBhdCA3OCUgNzIlLCByZ2IoMjQ0IDExNCAxODIgLyAuNTUpLCB0cmFuc3BhcmVudCA2MCUpO1xuICAgIGFuaW1hdGlvbjogeG4tYXVyb3JhLWRyaWZ0LWEgMTdzIGxpbmVhciBpbmZpbml0ZTtcbn1cbi54bi1hdXJvcmEtYm94OjphZnRlciB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTpcbiAgICAgICAgcmFkaWFsLWdyYWRpZW50KDMyJSA0MCUgYXQgNzQlIDIyJSwgcmdiKDEwMyAyMzIgMjQ5IC8gLjQyKSwgdHJhbnNwYXJlbnQgNjAlKSxcbiAgICAgICAgcmFkaWFsLWdyYWRpZW50KDMwJSAzOCUgYXQgMjYlIDc4JSwgcmdiKDEyOSAxNDAgMjQ4IC8gLjYpLCB0cmFuc3BhcmVudCA2MCUpO1xuICAgIGFuaW1hdGlvbjogeG4tYXVyb3JhLWRyaWZ0LWIgMjNzIGxpbmVhciBpbmZpbml0ZTtcbn1cblxuLyogb25lIGFjY2VudGVkIHdvcmQgaW4gYSBoZWFkaW5nIOKAlCB0ZXh0LWNsaXBwZWQgZ3JhZGllbnQgKi9cbi54bi1hdXJvcmEtdGV4dCB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdmFyKC0teG4tZ3JhZGllbnQtYXVyb3JhKTtcbiAgICAtd2Via2l0LWJhY2tncm91bmQtY2xpcDogdGV4dDtcbiAgICBiYWNrZ3JvdW5kLWNsaXA6IHRleHQ7XG4gICAgY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4vKiAtLS0tIGF1cm9yYSBmaWVsZCDigJQgYW5pbWF0ZWQgbGlnaHQgaGVybyBiYWNrZ3JvdW5kIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBBIGRyb3AtaW4gYmFja2dyb3VuZCBsYXllciBmb3IgbGFyZ2UgaGVybyBhcmVhczogbW9zdGx5IHdoaXRlLCB3aXRoIGEgZmV3XG4gKiBoZWF2aWx5LWJsdXJyZWQgYXVyb3JhIGJsb2JzIHRoYXQgdmlzaWJseSBkcmlmdCwgcm90YXRlIGFuZCBzY2FsZSBhY3Jvc3NcbiAqIHRoZSBzdXJmYWNlLiBBSS1pbnNwaXJlZCBhbmQgZnV0dXJpc3RpYyDigJQgY2xlYXJseSBhbGl2ZSwgeWV0IHNvZnQgZW5vdWdoXG4gKiB0aGF0IHRleHQgcmVhZHMgYXMgY2xlYXJseSBhcyBvbiB3aGl0ZS5cbiAqXG4gKiBCdWlsdCBmcm9tIHR3byBwc2V1ZG8tZWxlbWVudCBsYXllcnMgKG5vIGV4dHJhIERPTSk6IGVhY2ggY2FycmllcyBhIGNvdXBsZVxuICogb2YgY29uY2VudHJhdGVkIHJhZGlhbC1ncmFkaWVudCBibG9icywgc2l6ZWQgbGFyZ2VyIHRoYW4gdGhlIGJveCBhbmQgbW92ZWRcbiAqIHdpdGggYHRyYW5zZm9ybWAgKHRyYW5zbGF0ZSArIHJvdGF0ZSArIHNjYWxlKSBzbyB0aGUgbW90aW9uIGlzIG9idmlvdXNcbiAqIHdoaWxlIHRoZSBibHVyIGtlZXBzIGl0IGRyZWFteS4gRXZlcnl0aGluZyBvdXRzaWRlIHRoZSBibG9icyBpcyB0cmFuc3BhcmVudCxcbiAqIHNvIHRoZSB3aGl0ZSBiYWNrZ3JvdW5kIHNob3dzIHRocm91Z2ggYW5kIHRoZSBmaWVsZCBzdGF5cyBwcmVkb21pbmFudGx5IHdoaXRlLlxuICpcbiAqIFNlbGYtY29udGFpbmVkIChhYnNvbHV0ZSwgZnVsbC1ibGVlZCwgYmVoaW5kIHNpYmxpbmdzIHZpYSBuZWdhdGl2ZSB6LWluZGV4KS5cbiAqIEdpdmUgdGhlIHBhcmVudCBpdHMgb3duIHN0YWNraW5nIGNvbnRleHQgd2l0aCBgaXNvbGF0ZWAgc28gdGhlIGZpZWxkIHN0YXlzXG4gKiBwdXQgYmVoaW5kIHRoZSBzZWN0aW9uJ3MgY29udGVudCAod2l0aG91dCBpdCwgdGhlIG5lZ2F0aXZlIHotaW5kZXggc2xpcHNcbiAqIGJlaGluZCB0aGUgcGFnZSBiYWNrZ3JvdW5kIGFuZCB0aGUgZmllbGQgdmFuaXNoZXMpLiBEcm9wIGl0IGFzIGZpcnN0IGNoaWxkOlxuICpcbiAqICAgPHNlY3Rpb24gY2xhc3M9XCJyZWxhdGl2ZSBpc29sYXRlIG92ZXJmbG93LWhpZGRlblwiPlxuICogICAgIDxkaXYgY2xhc3M9XCJ4bi1hdXJvcmEtZmllbGRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2Rpdj5cbiAqICAgICDigKYgaGVybyBjb250ZW50IChyZW5kZXJzIGFib3ZlIHRoZSBmaWVsZCkg4oCmXG4gKiAgIDwvc2VjdGlvbj5cbiAqXG4gKiBWYXJpYW50czogYC0tY29vbGAgKGN5YW4tbGVhbmluZyksIGAtLXN0cm9uZ2AgKGEgdG91Y2ggbW9yZSBwcmVzZW5jZSkuXG4gKiBIb25vcnMgcHJlZmVycy1yZWR1Y2VkLW1vdGlvbiBieSBob2xkaW5nIGEgc3RpbGwgZnJhbWUuICovXG4ueG4tYXVyb3JhLWZpZWxkIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgaW5zZXQ6IDA7XG4gICAgei1pbmRleDogLTEwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0teG4tYXVyb3JhLWZpZWxkLWJnKTtcbn1cbi54bi1hdXJvcmEtZmllbGQ6OmJlZm9yZSxcbi54bi1hdXJvcmEtZmllbGQ6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgLyogb3ZlcnNpemUgdGhlIGxheWVyIHNvIHJvdGF0aW9uL3NjYWxlIG5ldmVyIHJldmVhbHMgYSBoYXJkIGVkZ2UgKi9cbiAgICBpbnNldDogLTQwJTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIC8qIHRoZSBcInN1cGVyIGJsdXJyeVwiIGF1cm9yYSBsb29rICovXG4gICAgZmlsdGVyOiBibHVyKDcycHgpO1xuICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07XG59XG4ueG4tYXVyb3JhLWZpZWxkOjpiZWZvcmUge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6XG4gICAgICAgIHJhZGlhbC1ncmFkaWVudCgyOCUgMjglIGF0IDI4JSAzMiUsIHZhcigtLXhuLWF1cm9yYS1maWVsZC0xKSwgdHJhbnNwYXJlbnQgNjIlKSxcbiAgICAgICAgcmFkaWFsLWdyYWRpZW50KDI2JSAyNiUgYXQgNzIlIDY0JSwgdmFyKC0teG4tYXVyb3JhLWZpZWxkLTIpLCB0cmFuc3BhcmVudCA2MiUpO1xuICAgIGFuaW1hdGlvbjogeG4tYXVyb3JhLWRyaWZ0LWEgdmFyKC0teG4tYXVyb3JhLWZpZWxkLXNwZWVkKSBsaW5lYXIgaW5maW5pdGU7XG59XG4ueG4tYXVyb3JhLWZpZWxkOjphZnRlciB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTpcbiAgICAgICAgcmFkaWFsLWdyYWRpZW50KDMwJSAzMCUgYXQgNjQlIDI4JSwgdmFyKC0teG4tYXVyb3JhLWZpZWxkLTMpLCB0cmFuc3BhcmVudCA2MiUpLFxuICAgICAgICByYWRpYWwtZ3JhZGllbnQoMjQlIDI0JSBhdCAzMiUgNzQlLCB2YXIoLS14bi1hdXJvcmEtZmllbGQtMSksIHRyYW5zcGFyZW50IDYyJSk7XG4gICAgYW5pbWF0aW9uOiB4bi1hdXJvcmEtZHJpZnQtYiBjYWxjKHZhcigtLXhuLWF1cm9yYS1maWVsZC1zcGVlZCkgKiAxLjM1KSBsaW5lYXIgaW5maW5pdGU7XG59XG5cbi8qIGN5YW4tbGVhbmluZyBtaXgg4oCUIHBhaXJzIHdpdGggLnhuLWF1cm9yYS1jb29sIHN1cmZhY2VzICovXG4ueG4tYXVyb3JhLWZpZWxkLS1jb29sIHtcbiAgICAtLXhuLWF1cm9yYS1maWVsZC0xOiByZ2IoNjcgNTYgMjAyIC8gLjI0KTtcbiAgICAtLXhuLWF1cm9yYS1maWVsZC0yOiByZ2IoOCAxNDUgMTc4IC8gLjI0KTtcbiAgICAtLXhuLWF1cm9yYS1maWVsZC0zOiByZ2IoMTMgMTQ4IDEzNiAvIC4yMik7XG59XG5cbi8qIGEgdG91Y2ggbW9yZSBwcmVzZW5jZSDigJQgc3RpbGwgc3VidGxlLCBmb3IgdGhlIGZyb250LXBhZ2UgaGVybyAqL1xuLnhuLWF1cm9yYS1maWVsZC0tc3Ryb25nIHtcbiAgICAtLXhuLWF1cm9yYS1maWVsZC0xOiByZ2IoNjcgNTYgMjAyIC8gLjM0KTtcbiAgICAtLXhuLWF1cm9yYS1maWVsZC0yOiByZ2IoMTkyIDM4IDIxMSAvIC4zMCk7XG4gICAgLS14bi1hdXJvcmEtZmllbGQtMzogcmdiKDggMTQ1IDE3OCAvIC4zMCk7XG59XG5cbkBrZXlmcmFtZXMgeG4tYXVyb3JhLWRyaWZ0LWEge1xuICAgIDAlICAgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKSAgICAgICAgcm90YXRlKDBkZWcpICAgc2NhbGUoMSk7IH1cbiAgICA1MCUgIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoNyUsIDklKSAgICAgIHJvdGF0ZSgxODBkZWcpIHNjYWxlKDEuMik7IH1cbiAgICAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCkgICAgICAgIHJvdGF0ZSgzNjBkZWcpIHNjYWxlKDEpOyB9XG59XG5Aa2V5ZnJhbWVzIHhuLWF1cm9yYS1kcmlmdC1iIHtcbiAgICAwJSAgIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCkgICAgICAgIHJvdGF0ZSgwZGVnKSAgICBzY2FsZSgxLjEpOyB9XG4gICAgNTAlICB7IHRyYW5zZm9ybTogdHJhbnNsYXRlKC05JSwgLTclKSAgICByb3RhdGUoLTE4MGRlZykgc2NhbGUoMS4zKTsgfVxuICAgIDEwMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKSAgICAgICAgcm90YXRlKC0zNjBkZWcpIHNjYWxlKDEuMSk7IH1cbn1cblxuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcbiAgICAueG4tYXVyb3JhLWZpZWxkOjpiZWZvcmUsXG4gICAgLnhuLWF1cm9yYS1maWVsZDo6YWZ0ZXIsXG4gICAgLnhuLWF1cm9yYS1ib3g6OmJlZm9yZSxcbiAgICAueG4tYXVyb3JhLWJveDo6YWZ0ZXIgeyBhbmltYXRpb246IG5vbmU7IH1cbn1cblxuLyogc29mdCBhdXJvcmEgZ2xvdyBiZWhpbmQgYWdlbnQgYXZhdGFycyAvIGZlYXR1cmVkIGNhcmRzICovXG4ueG4tZ2xvdyB7IGJveC1zaGFkb3c6IHZhcigtLXhuLXNoYWRvdy1nbG93KTsgfVxuLnhuLWdsb3ctcmFkaWFsOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBpbnNldDogLTQwJTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS14bi1nbG93LWF1cm9yYSk7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgei1pbmRleDogMDtcbn1cblxuLyogdGhpbmtpbmcgLyBzdHJlYW1pbmcgc2hpbW1lciAqL1xuQGtleWZyYW1lcyB4bi1zaGltbWVyIHtcbiAgICAwJSAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE1MCUgMDsgfVxuICAgIDEwMCUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAgMjUwJSAwOyB9XG59XG4ueG4tc2hpbW1lciB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KFxuICAgICAgICAxMDBkZWcsXG4gICAgICAgIHJnYigxNDggMTYzIDE4NCAvIC4xNSkgMzAlLFxuICAgICAgICByZ2IoMTI0IDU4IDIzNyAvIC4zNSkgNTAlLFxuICAgICAgICByZ2IoMTQ4IDE2MyAxODQgLyAuMTUpIDcwJSk7XG4gICAgYmFja2dyb3VuZC1zaXplOiAyMDAlIDEwMCU7XG4gICAgYW5pbWF0aW9uOiB4bi1zaGltbWVyIDEuOHMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG59XG5cbi8qIGdlbnRsZSBwdWxzZSBmb3IgbGl2ZSBkb3RzICovXG5Aa2V5ZnJhbWVzIHhuLXB1bHNlLXNvZnQge1xuICAgIDAlLCAxMDAlIHsgb3BhY2l0eTogMTsgfVxuICAgIDUwJSAgICAgIHsgb3BhY2l0eTogLjQ7IH1cbn1cbi54bi1wdWxzZSB7IGFuaW1hdGlvbjogeG4tcHVsc2Utc29mdCAxLjZzIGVhc2UtaW4tb3V0IGluZmluaXRlOyB9XG5cbi8qIGZ1bGwtd2lkdGggYnV0dG9ucyDigJQgeG4tYnV0dG9uIGlzIGxpZ2h0LURPTSwgc28gc3RyZXRjaCB0aGUgaG9zdCArIGl0c1xuICogaW5uZXIgY29udHJvbCB3aGVuIFtibG9ja10gaXMgc2V0ICh1c2VkIGZvciByYWlsIC8gY29tcG9zZXIgQ1RBcykuICovXG54bi1idXR0b25bYmxvY2tdIHsgZGlzcGxheTogYmxvY2s7IHdpZHRoOiAxMDAlOyB9XG54bi1idXR0b25bYmxvY2tdID4gYSxcbnhuLWJ1dHRvbltibG9ja10gPiBidXR0b24geyB3aWR0aDogMTAwJTsgfVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9*/