/*!*******************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/@symfony/webpack-encore/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/css/app.css ***!
  \*******************************************************************************************************************************************************************************************************************************/
@plugin "@tailwindcss/forms";

/* ============================================================
   Design tokens STI-2000
   ============================================================ */
@theme {
    /* Palette couleurs */
    --color-primary:        #38247C;  /* violet STI-2000 */
    --color-primary-light:  #4a309e;
    --color-primary-dark:   #261a57;
    --color-secondary:      #D3C6EB;  /* parme */
    --color-accent:         #F1CC0E;  /* jaune */

    /* Couleurs UI */
    --color-success:        #16a34a;
    --color-danger:         #dc2626;
    --color-warning:        #d97706;
    --color-info:           #0284c7;

    /* Surfaces */
    --color-surface:        #ffffff;
    --color-surface-muted:  #f8f7fb;
    --color-border:         #e2ddf0;

    /* Texte */
    --color-text:           #1a1a2e;
    --color-text-muted:     #6b6b8a;

    /* Polices */
    --font-sans: 'Poppins', 'Open Sans', ui-sans-serif, system-ui, sans-serif;

    /* Rayons */
    --radius-sm:   0.25rem;
    --radius:      0.375rem;
    --radius-lg:   0.5rem;
    --radius-xl:   0.75rem;
    --radius-2xl:  1rem;

    /* Ombres */
    --shadow-card: 0 1px 3px 0 rgb(56 36 124 / 0.08), 0 1px 2px -1px rgb(56 36 124 / 0.06);
    --shadow-modal: 0 20px 25px -5px rgb(56 36 124 / 0.15), 0 8px 10px -6px rgb(56 36 124 / 0.1);
}

/* ============================================================
   Utilitaires STI-2000
   ============================================================ */
@layer utilities {
    .text-primary    { color: var(--color-primary); }
    .bg-primary      { background-color: var(--color-primary); }
    .border-primary  { border-color: var(--color-primary); }

    .text-secondary  { color: var(--color-secondary); }
    .bg-secondary    { background-color: var(--color-secondary); }

    .text-accent     { color: var(--color-accent); }
    .bg-accent       { background-color: var(--color-accent); }

    /* ── Compatibilité Bootstrap → Tailwind ──────────────────────────
       Couche transitionnelle Phase D — à supprimer en Phase E quand
       tous les templates auront été migrés vers les classes Tailwind.
    ── */

    /* Affichage */
    .d-none         { display: none; }
    .d-block        { display: block; }
    .d-flex         { display: flex; }
    .d-inline-flex  { display: inline-flex; }
    .d-grid         { display: grid; }
    .d-inline       { display: inline; }
    .d-inline-block { display: inline-block; }

    /* Grille Bootstrap 12 colonnes */
    .row {
        display: flex;
        flex-wrap: wrap;
        margin-left: -0.375rem;
        margin-right: -0.375rem;
    }
    .row > * { padding-left: 0.375rem; padding-right: 0.375rem; }
    .col      { flex: 1 1 0%; min-width: 0; padding: 0 0.375rem; }
    .col-auto { flex: 0 0 auto; width: auto; padding: 0 0.375rem; }
    .col-1    { flex: 0 0 8.3333%;   max-width: 8.3333%;  }
    .col-2    { flex: 0 0 16.6667%;  max-width: 16.6667%; }
    .col-3    { flex: 0 0 25%;       max-width: 25%;      }
    .col-4    { flex: 0 0 33.3333%;  max-width: 33.3333%; }
    .col-5    { flex: 0 0 41.6667%;  max-width: 41.6667%; }
    .col-6    { flex: 0 0 50%;       max-width: 50%;      }
    .col-7    { flex: 0 0 58.3333%;  max-width: 58.3333%; }
    .col-8    { flex: 0 0 66.6667%;  max-width: 66.6667%; }
    .col-9    { flex: 0 0 75%;       max-width: 75%;      }
    .col-10   { flex: 0 0 83.3333%;  max-width: 83.3333%; }
    .col-11   { flex: 0 0 91.6667%;  max-width: 91.6667%; }
    .col-12   { flex: 0 0 100%;      max-width: 100%;     }

    /* Alignements Bootstrap */
    .justify-content-between { justify-content: space-between; }
    .justify-content-center  { justify-content: center; }
    .justify-content-end     { justify-content: flex-end; }
    .justify-content-start   { justify-content: flex-start; }
    .align-items-center      { align-items: center; }
    .align-items-start       { align-items: flex-start; }
    .align-items-end         { align-items: flex-end; }
    .ml-auto  { margin-left: auto; }
    .mr-auto  { margin-right: auto; }

    /* Container Bootstrap */
    .container       { width: 100%; max-width: 1200px; margin: 0 auto; padding: 0 0.75rem; }
    .container-fluid { width: 100%; padding: 0 0.75rem; }

    /* Texte */
    .text-center { text-align: center; }
    .text-right  { text-align: right; }
    .text-left   { text-align: left; }
    .text-small  { font-size: 0.875rem; }
    .text-dark   { color: var(--color-text); }

    /* Espacement Bootstrap (subset) */
    .p-0 { padding: 0; }
    .p-1 { padding: 0.25rem; }
    .p-2 { padding: 0.5rem; }
    .p-3 { padding: 0.75rem; }
    .p-4 { padding: 1rem; }
    .px-1 { padding-left: 0.25rem;  padding-right: 0.25rem; }
    .px-3 { padding-left: 0.75rem;  padding-right: 0.75rem; }
    .px-lg-5 { padding-left: 2rem;  padding-right: 2rem; }
    .pr-0 { padding-right: 0; }
    .pr-1 { padding-right: 0.25rem; }
    .pr-2 { padding-right: 0.5rem; }
    .pt-0 { padding-top: 0; }
    .mb-0 { margin-bottom: 0; }
    .mb-1 { margin-bottom: 0.25rem; }
    .mb-2 { margin-bottom: 0.5rem; }
    .mb-3 { margin-bottom: 0.75rem; }
    .mb-4 { margin-bottom: 1rem; }
    .mt-0 { margin-top: 0; }
    .mt-1 { margin-top: 0.25rem; }
    .mt-2 { margin-top: 0.5rem; }
    .mt-3 { margin-top: 0.75rem; }
    .mt-4 { margin-top: 1rem; }
    .my-4 { margin-top: 1rem; margin-bottom: 1rem; }
    .ml-2 { margin-left: 0.5rem; }
    .w-100 { width: 100%; }

    /* Couleurs utilitaires */
    .bg-light   { background-color: #f8f9fa; }
    .bg-warning { background-color: #ffc107; }
    .bg-secondary { background-color: #6c757d; }
    .text-muted { color: var(--color-text-muted); }

    /* Bordures */
    .border-bottom { border-bottom: 1px solid var(--color-border); }
    .rounded       { border-radius: var(--radius); }

    /* Overflow */
    .overflow-auto  { overflow: auto; }
    .table-responsive { overflow-x: auto; }

    /* Formulaires Bootstrap compat */
    .form-inline  { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem; }
    .form-control-sm { font-size: 0.8125rem; padding: 0.25rem 0.5rem; }
    .needs-validation { }
    .was-validated  { }
    .invalid-feedback {
        display: none;
        font-size: 0.75rem;
        color: var(--color-danger);
        margin-top: 0.25rem;
    }
    .is-invalid ~ .invalid-feedback { display: block; }
    .is-invalid { border-color: var(--color-danger) !important; }

    /* Dropdown Bootstrap */
    .dropdown { position: relative; display: inline-block; }
    .dropdown-menu {
        display: none;
        position: absolute;
        z-index: 1000;
        background: white;
        border: 1px solid var(--color-border);
        border-radius: var(--radius);
        box-shadow: var(--shadow-card);
        min-width: 10rem;
        padding: 0.25rem 0;
    }
    .dropdown-menu.show { display: block; }
    .dropdown-item {
        display: block;
        padding: 0.375rem 1rem;
        color: var(--color-text);
        font-size: 0.875rem;
        text-decoration: none;
        white-space: nowrap;
    }
    .dropdown-item:hover   { background-color: var(--color-surface-muted); }
    .dropdown-item.active  { background-color: var(--color-primary); color: white; }
    .dropdown-divider      { border-top: 1px solid var(--color-border); margin: 0.25rem 0; }

    /* Collapse Bootstrap */
    .collapse      { display: none; }
    .collapse.show { display: block; }

    /* Tables Bootstrap */
    .table { width: 100%; border-collapse: collapse; }
    .table thead th {
        font-weight: 600;
        font-size: 0.75rem;
        text-transform: uppercase;
        letter-spacing: 0.04em;
        color: var(--color-text-muted);
        padding: 0.5rem 0.75rem;
        border-bottom: 2px solid var(--color-border);
    }
    .table td { padding: 0.5rem 0.75rem; vertical-align: middle; }
    .table-striped tbody tr:nth-of-type(odd) { background-color: var(--color-surface-muted); }

    /* Badge Bootstrap compat */
    .badge-pill { border-radius: 9999px; }
    .badge-secondary { background-color: #6c757d; color: white; }
    .badge-warning { background-color: #ffc107; color: #000; }
    .rounded-pill { border-radius: 9999px; }

    /* Switch MDB compat — stub pendant migration */
    .switch label { display: flex; align-items: center; gap: 0.5rem; cursor: pointer; }
    .lever {
        display: inline-block;
        width: 2rem;
        height: 1rem;
        border-radius: 9999px;
        background-color: var(--color-border);
        transition: background-color 150ms;
        position: relative;
    }
    input[type="checkbox"]:checked + .lever { background-color: var(--color-primary); }
}

/* ============================================================
   Composants de base STI-2000
   ============================================================ */
@layer components {
    /* Boutons */
    .btn {
        display: inline-flex;
        align-items: center;
        justify-content: center;
        gap: 0.375rem;
        padding: 0.5rem 1rem;
        border-radius: var(--radius);
        font-size: 0.875rem;
        font-weight: 500;
        line-height: 1.25rem;
        transition: background-color 150ms, opacity 150ms, box-shadow 150ms;
        cursor: pointer;
        border: 1px solid transparent;
    }

    .btn-primary {
        background-color: var(--color-primary);
        color: #ffffff;
        border-color: var(--color-primary);
    }
    .btn-primary:hover {
        background-color: var(--color-primary-light);
        border-color: var(--color-primary-light);
    }

    .btn-secondary {
        background-color: var(--color-secondary);
        color: var(--color-primary);
        border-color: var(--color-secondary);
    }

    .btn-outline-primary {
        background-color: transparent;
        color: var(--color-primary);
        border-color: var(--color-primary);
    }
    .btn-outline-primary:hover {
        background-color: var(--color-primary);
        color: #ffffff;
    }

    .btn-danger {
        background-color: var(--color-danger);
        color: #ffffff;
        border-color: var(--color-danger);
    }

    .btn-sm {
        padding: 0.25rem 0.625rem;
        font-size: 0.75rem;
    }

    .btn-lg {
        padding: 0.75rem 1.5rem;
        font-size: 1rem;
    }

    /* Cartes */
    .card {
        background-color: var(--color-surface);
        border: 1px solid var(--color-border);
        border-radius: var(--radius-lg);
        box-shadow: var(--shadow-card);
    }

    .card-body {
        padding: 1.25rem;
    }

    .card-header {
        padding: 0.875rem 1.25rem;
        border-bottom: 1px solid var(--color-border);
        font-weight: 600;
        color: var(--color-primary);
    }

    /* Badges */
    .badge {
        display: inline-flex;
        align-items: center;
        padding: 0.125rem 0.5rem;
        border-radius: 9999px;
        font-size: 0.75rem;
        font-weight: 500;
        line-height: 1.25rem;
    }

    .badge-primary {
        background-color: var(--color-secondary);
        color: var(--color-primary);
    }

    .badge-success {
        background-color: #dcfce7;
        color: #166534;
    }

    .badge-danger {
        background-color: #fee2e2;
        color: #991b1b;
    }

    .badge-warning {
        background-color: #fef9c3;
        color: #854d0e;
    }

    /* Alertes */
    .alert {
        padding: 0.875rem 1rem;
        border-radius: var(--radius);
        border: 1px solid transparent;
        font-size: 0.875rem;
    }

    .alert-success {
        background-color: #dcfce7;
        border-color: #bbf7d0;
        color: #166534;
    }

    .alert-danger {
        background-color: #fee2e2;
        border-color: #fecaca;
        color: #991b1b;
    }

    .alert-warning {
        background-color: #fef9c3;
        border-color: #fef08a;
        color: #854d0e;
    }

    .alert-info {
        background-color: #e0f2fe;
        border-color: #bae6fd;
        color: #0c4a6e;
    }

    /* ── Boutons STI-2000 (variantes métier) ─────────────────── */

    /* btn-violet : bouton principal violet (74 occurrences) */
    .btn-violet {
        display: inline-flex;
        align-items: center;
        justify-content: center;
        gap: 0.375rem;
        padding: 0.5rem 1rem;
        background-color: var(--color-primary);
        color: #ffffff;
        font-weight: 600;
        font-size: 0.875rem;
        line-height: 1.25rem;
        border-radius: 6px;
        border: 1px solid var(--color-primary);
        text-transform: none;
        cursor: pointer;
        transition: background-color 150ms, color 150ms, border-color 150ms;
    }
    .btn-violet:hover,
    .btn-violet:focus {
        background-color: #22164a;
        border-color: #22164a;
        color: var(--color-accent);
    }
    .btn-violet.bdb {
        box-shadow: none;
        border: 2px solid #ffffff;
    }
    .btn-violet.bdb:hover {
        border-color: var(--color-accent);
    }

    /* btn-violet-border : bouton outline violet (2 occurrences) */
    .btn-violet-border {
        display: inline-flex;
        align-items: center;
        justify-content: center;
        gap: 0.375rem;
        padding: 0.3125rem 0.625rem;
        background-color: #ffffff;
        color: var(--color-primary);
        font-weight: 600;
        font-size: 0.875rem;
        border: 2px solid var(--color-primary);
        border-radius: 3px;
        text-transform: none;
        cursor: pointer;
        transition: background-color 150ms, color 150ms;
    }
    .btn-violet-border:hover {
        background-color: #22164a;
        color: var(--color-accent);
    }

    /* btn-discret : bouton secondaire discret (23 occurrences) */
    .btn-discret {
        border: 2px solid #ABADC9;
        background-color: transparent;
        color: #383150;
        border-radius: 0.3rem;
        text-transform: none;
        font-weight: 500;
        box-shadow: none;
        padding: 0.45rem 0.6rem;
        transition: background-color 150ms, color 150ms, border-color 150ms;
        cursor: pointer;
    }
    .btn-discret:hover {
        background-color: #383150;
        border-color: #383150;
        color: #ffffff;
    }

    /* waves-effect — stub pendant la migration (MDB supprimé en Phase E) */
    .waves-effect { /* aucun style ajouté, l'effet sera supprimé en Phase E */ }

    /* ── Formulaires STI-2000 ────────────────────────────────── */

    /* form-control : champ de saisie (83 occurrences) */
    .form-control {
        display: block;
        width: 100%;
        padding: 0.5rem 0.75rem;
        font-size: 0.875rem;
        line-height: 1.5;
        color: var(--color-text);
        background-color: #F5F7FF;
        border: 1px solid var(--color-border);
        border-radius: var(--radius);
        transition: border-color 150ms, box-shadow 150ms;
        appearance: none;
    }
    .form-control:focus {
        outline: none;
        border-color: var(--color-primary);
        box-shadow: 0 0 0 3px rgba(56, 36, 124, 0.15);
        background-color: #ffffff;
    }
    .form-control::placeholder {
        color: var(--color-text-muted);
    }
    .form-control:disabled,
    .form-control[readonly] {
        background-color: var(--color-surface-muted);
        opacity: 0.7;
        cursor: not-allowed;
    }

    /* form-row : conteneur de champs (équivalent Bootstrap .form-row) */
    .form-row {
        display: flex;
        flex-wrap: wrap;
        gap: 0.75rem;
    }

    /* form-group : groupe label + input */
    .form-group {
        margin-bottom: 1rem;
    }

    /* form-check : cases à cocher et radio */
    .form-check {
        display: flex;
        align-items: center;
        gap: 0.5rem;
        padding: 0;
    }
    .form-check-input {
        width: 1rem;
        height: 1rem;
        accent-color: var(--color-primary);
        cursor: pointer;
        flex-shrink: 0;
    }
    .form-check-label {
        font-size: 0.875rem;
        cursor: pointer;
        color: var(--color-text);
    }

    /* Champ mot de passe avec icône afficher/masquer */
    .mask-password {
        position: relative;
        width: 100%;
    }
    .mask-password .unmask {
        position: absolute;
        right: 0.625rem;
        top: 50%;
        transform: translateY(-50%);
        cursor: pointer;
        border: none;
        background: transparent;
        color: var(--color-text-muted);
        padding: 0.25rem;
        line-height: 1;
    }
    .mask-password .unmask:hover {
        color: var(--color-primary);
    }

    /* ── Bloc blanc (cards de contenu) ──────────────────────── */

    .bloc-blanc {
        background-color: #ffffff;
        border-radius: var(--radius-lg);
        padding: 0.75rem;
        font-size: 0.9em;
        box-shadow: var(--shadow-card);
    }
    .bloc-blanc h2 {
        font-size: 1em;
        color: #383150;
        font-weight: 600;
    }

    /* ── Modals STI-2000 ─────────────────────────────────────── */
    /* Bootstrap JS contrôle la visibilité (.modal.show).
       Tailwind stylise uniquement le contenant et le contenu. */

    .modal-content {
        border: none;
        border-radius: var(--radius-xl);
        box-shadow: var(--shadow-modal);
        overflow: hidden;
    }

    .modal-header {
        padding: 1rem 1.25rem;
        border-bottom: 1px solid var(--color-border);
        display: flex;
        align-items: center;
        justify-content: space-between;
        background-color: var(--color-surface);
    }
    .modal-header .modal-title {
        font-size: 1rem;
        font-weight: 600;
        color: var(--color-primary);
    }

    .modal-body {
        padding: 1.25rem;
        background-color: var(--color-surface);
    }

    .modal-footer {
        padding: 0.875rem 1.25rem;
        border-top: 1px solid var(--color-border);
        display: flex;
        align-items: center;
        justify-content: flex-end;
        gap: 0.5rem;
        background-color: var(--color-surface);
    }

    /* Spinner de chargement dans les modals */
    .modal-content .loading {
        display: flex;
        align-items: center;
        justify-content: center;
        min-height: 8rem;
    }
}

/* ============================================================
   Phase E — remplacement ciblé de Bootstrap/MDB CSS
   Les styles ci-dessous permettent de retirer les imports
   bootstrap.css et mdb.css des fichiers SCSS.
   ============================================================ */

/* ── Animations et backdrop des modals Bootstrap ────────────
   Le JS Bootstrap/MDB s'appuie sur ces classes pour afficher
   les modals avec transition. Sans elles les modals s'ouvrent
   sans animation et le fond assombri n'apparaît pas.
── */
@layer utilities {
    /* Modal base */
    .modal {
        display: none;
        position: fixed;
        top: 0; left: 0;
        width: 100%; height: 100%;
        overflow-x: hidden; overflow-y: auto;
        z-index: 1050;
        outline: 0;
    }
    .modal.fade .modal-dialog {
        transform: translate(0, -50px);
        transition: transform 0.3s ease-out;
    }
    .modal.show .modal-dialog {
        transform: none;
    }
    .modal.show { display: block; }

    /* Backdrop */
    .modal-backdrop {
        position: fixed;
        top: 0; left: 0;
        width: 100vw; height: 100vh;
        background-color: #000;
        z-index: 1040;
    }
    .modal-backdrop.fade  { opacity: 0; }
    .modal-backdrop.show  { opacity: 0.5; }

    /* Dialog sizing */
    .modal-dialog {
        position: relative;
        width: auto;
        margin: 1.75rem auto;
        pointer-events: none;
        max-width: 500px;
    }
    .modal-dialog-centered {
        display: flex;
        align-items: center;
        min-height: calc(100% - 3.5rem);
    }
    .modal-lg  { max-width: 800px; }
    .modal-xl  { max-width: 1140px; }
    .modal-sm  { max-width: 300px; }
    .modal-dialog .modal-content { pointer-events: auto; width: 100%; }
    body.modal-open { overflow: hidden; }

    /* ── Grille Bootstrap responsive (col-md/lg/sm/xl) ──────────
       27 occurrences dans les templates non encore migrés.
    ── */
    @media (min-width: 576px) {
        .col-sm-1  { flex: 0 0 8.3333%;  max-width: 8.3333%;  }
        .col-sm-2  { flex: 0 0 16.6667%; max-width: 16.6667%; }
        .col-sm-3  { flex: 0 0 25%;      max-width: 25%;      }
        .col-sm-4  { flex: 0 0 33.3333%; max-width: 33.3333%; }
        .col-sm-5  { flex: 0 0 41.6667%; max-width: 41.6667%; }
        .col-sm-6  { flex: 0 0 50%;      max-width: 50%;      }
        .col-sm-7  { flex: 0 0 58.3333%; max-width: 58.3333%; }
        .col-sm-8  { flex: 0 0 66.6667%; max-width: 66.6667%; }
        .col-sm-9  { flex: 0 0 75%;      max-width: 75%;      }
        .col-sm-10 { flex: 0 0 83.3333%; max-width: 83.3333%; }
        .col-sm-11 { flex: 0 0 91.6667%; max-width: 91.6667%; }
        .col-sm-12 { flex: 0 0 100%;     max-width: 100%;     }
    }
    @media (min-width: 768px) {
        .col-md-1  { flex: 0 0 8.3333%;  max-width: 8.3333%;  }
        .col-md-2  { flex: 0 0 16.6667%; max-width: 16.6667%; }
        .col-md-3  { flex: 0 0 25%;      max-width: 25%;      }
        .col-md-4  { flex: 0 0 33.3333%; max-width: 33.3333%; }
        .col-md-5  { flex: 0 0 41.6667%; max-width: 41.6667%; }
        .col-md-6  { flex: 0 0 50%;      max-width: 50%;      }
        .col-md-7  { flex: 0 0 58.3333%; max-width: 58.3333%; }
        .col-md-8  { flex: 0 0 66.6667%; max-width: 66.6667%; }
        .col-md-9  { flex: 0 0 75%;      max-width: 75%;      }
        .col-md-10 { flex: 0 0 83.3333%; max-width: 83.3333%; }
        .col-md-11 { flex: 0 0 91.6667%; max-width: 91.6667%; }
        .col-md-12 { flex: 0 0 100%;     max-width: 100%;     }
    }
    @media (min-width: 992px) {
        .col-lg-1  { flex: 0 0 8.3333%;  max-width: 8.3333%;  }
        .col-lg-2  { flex: 0 0 16.6667%; max-width: 16.6667%; }
        .col-lg-3  { flex: 0 0 25%;      max-width: 25%;      }
        .col-lg-4  { flex: 0 0 33.3333%; max-width: 33.3333%; }
        .col-lg-5  { flex: 0 0 41.6667%; max-width: 41.6667%; }
        .col-lg-6  { flex: 0 0 50%;      max-width: 50%;      }
        .col-lg-7  { flex: 0 0 58.3333%; max-width: 58.3333%; }
        .col-lg-8  { flex: 0 0 66.6667%; max-width: 66.6667%; }
        .col-lg-9  { flex: 0 0 75%;      max-width: 75%;      }
        .col-lg-10 { flex: 0 0 83.3333%; max-width: 83.3333%; }
        .col-lg-11 { flex: 0 0 91.6667%; max-width: 91.6667%; }
        .col-lg-12 { flex: 0 0 100%;     max-width: 100%;     }
    }
    @media (min-width: 1200px) {
        .col-xl-1  { flex: 0 0 8.3333%;  max-width: 8.3333%;  }
        .col-xl-2  { flex: 0 0 16.6667%; max-width: 16.6667%; }
        .col-xl-3  { flex: 0 0 25%;      max-width: 25%;      }
        .col-xl-4  { flex: 0 0 33.3333%; max-width: 33.3333%; }
        .col-xl-5  { flex: 0 0 41.6667%; max-width: 41.6667%; }
        .col-xl-6  { flex: 0 0 50%;      max-width: 50%;      }
        .col-xl-7  { flex: 0 0 58.3333%; max-width: 58.3333%; }
        .col-xl-8  { flex: 0 0 66.6667%; max-width: 66.6667%; }
        .col-xl-9  { flex: 0 0 75%;      max-width: 75%;      }
        .col-xl-10 { flex: 0 0 83.3333%; max-width: 83.3333%; }
        .col-xl-11 { flex: 0 0 91.6667%; max-width: 91.6667%; }
        .col-xl-12 { flex: 0 0 100%;     max-width: 100%;     }
    }

    /* ── Tabs Bootstrap ─────────────────────────────────────────
       24 occurrences dans les templates (profil, calendrier…).
    ── */
    .nav { display: flex; flex-wrap: wrap; padding-left: 0; list-style: none; }
    .nav-tabs {
        border-bottom: 2px solid var(--color-border);
        gap: 0.25rem;
    }
    .nav-tabs .nav-item { margin-bottom: -2px; }
    .nav-tabs .nav-link {
        display: block;
        padding: 0.5rem 1rem;
        font-size: 0.875rem;
        font-weight: 500;
        color: var(--color-text-muted);
        border: 2px solid transparent;
        border-radius: var(--radius) var(--radius) 0 0;
        transition: color 150ms, border-color 150ms;
        cursor: pointer;
        text-decoration: none;
    }
    .nav-tabs .nav-link:hover { color: var(--color-primary); }
    .nav-tabs .nav-link.active {
        color: var(--color-primary);
        border-color: var(--color-border) var(--color-border) #fff;
        background-color: #fff;
    }

    .tab-content > .tab-pane { display: none; }
    .tab-content > .active   { display: block; }

    /* ── Collapsing Bootstrap ───────────────────────────────────
       Transition pour les collapse animés (accordéon, collapse).
    ── */
    .collapsing {
        height: 0;
        overflow: hidden;
        transition: height 0.35s ease;
    }

    /* ── Scrollbar personnalisée ────────────────────────────────
       Remplace perfect-scrollbar dont l'import est supprimé.
    ── */
    .my-custom-scrollbar::-webkit-scrollbar { width: 6px; height: 6px; }
    .my-custom-scrollbar::-webkit-scrollbar-track { background: transparent; }
    .my-custom-scrollbar::-webkit-scrollbar-thumb {
        background-color: rgba(56, 36, 124, 0.3);
        border-radius: 3px;
    }
    .my-custom-scrollbar::-webkit-scrollbar-thumb:hover {
        background-color: rgba(56, 36, 124, 0.6);
    }
    .scrollbar { scrollbar-width: thin; scrollbar-color: rgba(56,36,124,0.3) transparent; }
}


/*# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q3pCO0lBQ0EsNEJBQTRCLDJCQUEyQixFQUFFO0lBQ3pEO1FBQ0ksMkJBQTJCO1FBQzNCLDBEQUEwRDtRQUMxRCxzQkFBc0I7SUFDMUI7O0lBRUEsMkJBQTJCLGFBQWEsRUFBRTtJQUMxQywyQkFBMkIsY0FBYyxFQUFFOztJQUUzQzs7UUFFSTtJQUNKO1FBQ0ksU0FBUztRQUNULGdCQUFnQjtRQUNoQiw2QkFBNkI7SUFDakM7O0lBRUE7O1FBRUk7SUFDSiwwQ0FBMEMsVUFBVSxFQUFFLFdBQVcsRUFBRTtJQUNuRSxnREFBZ0QsdUJBQXVCLEVBQUU7SUFDekU7UUFDSSx3Q0FBd0M7UUFDeEMsa0JBQWtCO0lBQ3RCO0lBQ0E7UUFDSSx3Q0FBd0M7SUFDNUM7SUFDQSxhQUFhLHFCQUFxQixFQUFFLGdEQUFnRCxFQUFFO0FBQzFGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2Nzcy9hcHAuY3NzIl0sInNvdXJjZXNDb250ZW50IjpbIkBpbXBvcnQgXCJ0YWlsd2luZGNzc1wiO1xuQHBsdWdpbiBcIkB0YWlsd2luZGNzcy9mb3Jtc1wiO1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIERlc2lnbiB0b2tlbnMgU1RJLTIwMDBcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuQHRoZW1lIHtcbiAgICAvKiBQYWxldHRlIGNvdWxldXJzICovXG4gICAgLS1jb2xvci1wcmltYXJ5OiAgICAgICAgIzM4MjQ3QzsgIC8qIHZpb2xldCBTVEktMjAwMCAqL1xuICAgIC0tY29sb3ItcHJpbWFyeS1saWdodDogICM0YTMwOWU7XG4gICAgLS1jb2xvci1wcmltYXJ5LWRhcms6ICAgIzI2MWE1NztcbiAgICAtLWNvbG9yLXNlY29uZGFyeTogICAgICAjRDNDNkVCOyAgLyogcGFybWUgKi9cbiAgICAtLWNvbG9yLWFjY2VudDogICAgICAgICAjRjFDQzBFOyAgLyogamF1bmUgKi9cblxuICAgIC8qIENvdWxldXJzIFVJICovXG4gICAgLS1jb2xvci1zdWNjZXNzOiAgICAgICAgIzE2YTM0YTtcbiAgICAtLWNvbG9yLWRhbmdlcjogICAgICAgICAjZGMyNjI2O1xuICAgIC0tY29sb3Itd2FybmluZzogICAgICAgICNkOTc3MDY7XG4gICAgLS1jb2xvci1pbmZvOiAgICAgICAgICAgIzAyODRjNztcblxuICAgIC8qIFN1cmZhY2VzICovXG4gICAgLS1jb2xvci1zdXJmYWNlOiAgICAgICAgI2ZmZmZmZjtcbiAgICAtLWNvbG9yLXN1cmZhY2UtbXV0ZWQ6ICAjZjhmN2ZiO1xuICAgIC0tY29sb3ItYm9yZGVyOiAgICAgICAgICNlMmRkZjA7XG5cbiAgICAvKiBUZXh0ZSAqL1xuICAgIC0tY29sb3ItdGV4dDogICAgICAgICAgICMxYTFhMmU7XG4gICAgLS1jb2xvci10ZXh0LW11dGVkOiAgICAgIzZiNmI4YTtcblxuICAgIC8qIFBvbGljZXMgKi9cbiAgICAtLWZvbnQtc2FuczogJ1BvcHBpbnMnLCAnT3BlbiBTYW5zJywgdWktc2Fucy1zZXJpZiwgc3lzdGVtLXVpLCBzYW5zLXNlcmlmO1xuXG4gICAgLyogUmF5b25zICovXG4gICAgLS1yYWRpdXMtc206ICAgMC4yNXJlbTtcbiAgICAtLXJhZGl1czogICAgICAwLjM3NXJlbTtcbiAgICAtLXJhZGl1cy1sZzogICAwLjVyZW07XG4gICAgLS1yYWRpdXMteGw6ICAgMC43NXJlbTtcbiAgICAtLXJhZGl1cy0yeGw6ICAxcmVtO1xuXG4gICAgLyogT21icmVzICovXG4gICAgLS1zaGFkb3ctY2FyZDogMCAxcHggM3B4IDAgcmdiKDU2IDM2IDEyNCAvIDAuMDgpLCAwIDFweCAycHggLTFweCByZ2IoNTYgMzYgMTI0IC8gMC4wNik7XG4gICAgLS1zaGFkb3ctbW9kYWw6IDAgMjBweCAyNXB4IC01cHggcmdiKDU2IDM2IDEyNCAvIDAuMTUpLCAwIDhweCAxMHB4IC02cHggcmdiKDU2IDM2IDEyNCAvIDAuMSk7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgVXRpbGl0YWlyZXMgU1RJLTIwMDBcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuQGxheWVyIHV0aWxpdGllcyB7XG4gICAgLnRleHQtcHJpbWFyeSAgICB7IGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTsgfVxuICAgIC5iZy1wcmltYXJ5ICAgICAgeyBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTsgfVxuICAgIC5ib3JkZXItcHJpbWFyeSAgeyBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpOyB9XG5cbiAgICAudGV4dC1zZWNvbmRhcnkgIHsgY29sb3I6IHZhcigtLWNvbG9yLXNlY29uZGFyeSk7IH1cbiAgICAuYmctc2Vjb25kYXJ5ICAgIHsgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3Itc2Vjb25kYXJ5KTsgfVxuXG4gICAgLnRleHQtYWNjZW50ICAgICB7IGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQpOyB9XG4gICAgLmJnLWFjY2VudCAgICAgICB7IGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudCk7IH1cblxuICAgIC8qIOKUgOKUgCBDb21wYXRpYmlsaXTDqSBCb290c3RyYXAg4oaSIFRhaWx3aW5kIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgICAgIENvdWNoZSB0cmFuc2l0aW9ubmVsbGUgUGhhc2UgRCDigJQgw6Agc3VwcHJpbWVyIGVuIFBoYXNlIEUgcXVhbmRcbiAgICAgICB0b3VzIGxlcyB0ZW1wbGF0ZXMgYXVyb250IMOpdMOpIG1pZ3LDqXMgdmVycyBsZXMgY2xhc3NlcyBUYWlsd2luZC5cbiAgICDilIDilIAgKi9cblxuICAgIC8qIEFmZmljaGFnZSAqL1xuICAgIC5kLW5vbmUgICAgICAgICB7IGRpc3BsYXk6IG5vbmU7IH1cbiAgICAuZC1ibG9jayAgICAgICAgeyBkaXNwbGF5OiBibG9jazsgfVxuICAgIC5kLWZsZXggICAgICAgICB7IGRpc3BsYXk6IGZsZXg7IH1cbiAgICAuZC1pbmxpbmUtZmxleCAgeyBkaXNwbGF5OiBpbmxpbmUtZmxleDsgfVxuICAgIC5kLWdyaWQgICAgICAgICB7IGRpc3BsYXk6IGdyaWQ7IH1cbiAgICAuZC1pbmxpbmUgICAgICAgeyBkaXNwbGF5OiBpbmxpbmU7IH1cbiAgICAuZC1pbmxpbmUtYmxvY2sgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH1cblxuICAgIC8qIEdyaWxsZSBCb290c3RyYXAgMTIgY29sb25uZXMgKi9cbiAgICAucm93IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBtYXJnaW4tbGVmdDogLTAuMzc1cmVtO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IC0wLjM3NXJlbTtcbiAgICB9XG4gICAgLnJvdyA+ICogeyBwYWRkaW5nLWxlZnQ6IDAuMzc1cmVtOyBwYWRkaW5nLXJpZ2h0OiAwLjM3NXJlbTsgfVxuICAgIC5jb2wgICAgICB7IGZsZXg6IDEgMSAwJTsgbWluLXdpZHRoOiAwOyBwYWRkaW5nOiAwIDAuMzc1cmVtOyB9XG4gICAgLmNvbC1hdXRvIHsgZmxleDogMCAwIGF1dG87IHdpZHRoOiBhdXRvOyBwYWRkaW5nOiAwIDAuMzc1cmVtOyB9XG4gICAgLmNvbC0xICAgIHsgZmxleDogMCAwIDguMzMzMyU7ICAgbWF4LXdpZHRoOiA4LjMzMzMlOyAgfVxuICAgIC5jb2wtMiAgICB7IGZsZXg6IDAgMCAxNi42NjY3JTsgIG1heC13aWR0aDogMTYuNjY2NyU7IH1cbiAgICAuY29sLTMgICAgeyBmbGV4OiAwIDAgMjUlOyAgICAgICBtYXgtd2lkdGg6IDI1JTsgICAgICB9XG4gICAgLmNvbC00ICAgIHsgZmxleDogMCAwIDMzLjMzMzMlOyAgbWF4LXdpZHRoOiAzMy4zMzMzJTsgfVxuICAgIC5jb2wtNSAgICB7IGZsZXg6IDAgMCA0MS42NjY3JTsgIG1heC13aWR0aDogNDEuNjY2NyU7IH1cbiAgICAuY29sLTYgICAgeyBmbGV4OiAwIDAgNTAlOyAgICAgICBtYXgtd2lkdGg6IDUwJTsgICAgICB9XG4gICAgLmNvbC03ICAgIHsgZmxleDogMCAwIDU4LjMzMzMlOyAgbWF4LXdpZHRoOiA1OC4zMzMzJTsgfVxuICAgIC5jb2wtOCAgICB7IGZsZXg6IDAgMCA2Ni42NjY3JTsgIG1heC13aWR0aDogNjYuNjY2NyU7IH1cbiAgICAuY29sLTkgICAgeyBmbGV4OiAwIDAgNzUlOyAgICAgICBtYXgtd2lkdGg6IDc1JTsgICAgICB9XG4gICAgLmNvbC0xMCAgIHsgZmxleDogMCAwIDgzLjMzMzMlOyAgbWF4LXdpZHRoOiA4My4zMzMzJTsgfVxuICAgIC5jb2wtMTEgICB7IGZsZXg6IDAgMCA5MS42NjY3JTsgIG1heC13aWR0aDogOTEuNjY2NyU7IH1cbiAgICAuY29sLTEyICAgeyBmbGV4OiAwIDAgMTAwJTsgICAgICBtYXgtd2lkdGg6IDEwMCU7ICAgICB9XG5cbiAgICAvKiBBbGlnbmVtZW50cyBCb290c3RyYXAgKi9cbiAgICAuanVzdGlmeS1jb250ZW50LWJldHdlZW4geyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IH1cbiAgICAuanVzdGlmeS1jb250ZW50LWNlbnRlciAgeyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgfVxuICAgIC5qdXN0aWZ5LWNvbnRlbnQtZW5kICAgICB7IGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7IH1cbiAgICAuanVzdGlmeS1jb250ZW50LXN0YXJ0ICAgeyBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IH1cbiAgICAuYWxpZ24taXRlbXMtY2VudGVyICAgICAgeyBhbGlnbi1pdGVtczogY2VudGVyOyB9XG4gICAgLmFsaWduLWl0ZW1zLXN0YXJ0ICAgICAgIHsgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7IH1cbiAgICAuYWxpZ24taXRlbXMtZW5kICAgICAgICAgeyBhbGlnbi1pdGVtczogZmxleC1lbmQ7IH1cbiAgICAubWwtYXV0byAgeyBtYXJnaW4tbGVmdDogYXV0bzsgfVxuICAgIC5tci1hdXRvICB7IG1hcmdpbi1yaWdodDogYXV0bzsgfVxuXG4gICAgLyogQ29udGFpbmVyIEJvb3RzdHJhcCAqL1xuICAgIC5jb250YWluZXIgICAgICAgeyB3aWR0aDogMTAwJTsgbWF4LXdpZHRoOiAxMjAwcHg7IG1hcmdpbjogMCBhdXRvOyBwYWRkaW5nOiAwIDAuNzVyZW07IH1cbiAgICAuY29udGFpbmVyLWZsdWlkIHsgd2lkdGg6IDEwMCU7IHBhZGRpbmc6IDAgMC43NXJlbTsgfVxuXG4gICAgLyogVGV4dGUgKi9cbiAgICAudGV4dC1jZW50ZXIgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbiAgICAudGV4dC1yaWdodCAgeyB0ZXh0LWFsaWduOiByaWdodDsgfVxuICAgIC50ZXh0LWxlZnQgICB7IHRleHQtYWxpZ246IGxlZnQ7IH1cbiAgICAudGV4dC1zbWFsbCAgeyBmb250LXNpemU6IDAuODc1cmVtOyB9XG4gICAgLnRleHQtZGFyayAgIHsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQpOyB9XG5cbiAgICAvKiBFc3BhY2VtZW50IEJvb3RzdHJhcCAoc3Vic2V0KSAqL1xuICAgIC5wLTAgeyBwYWRkaW5nOiAwOyB9XG4gICAgLnAtMSB7IHBhZGRpbmc6IDAuMjVyZW07IH1cbiAgICAucC0yIHsgcGFkZGluZzogMC41cmVtOyB9XG4gICAgLnAtMyB7IHBhZGRpbmc6IDAuNzVyZW07IH1cbiAgICAucC00IHsgcGFkZGluZzogMXJlbTsgfVxuICAgIC5weC0xIHsgcGFkZGluZy1sZWZ0OiAwLjI1cmVtOyAgcGFkZGluZy1yaWdodDogMC4yNXJlbTsgfVxuICAgIC5weC0zIHsgcGFkZGluZy1sZWZ0OiAwLjc1cmVtOyAgcGFkZGluZy1yaWdodDogMC43NXJlbTsgfVxuICAgIC5weC1sZy01IHsgcGFkZGluZy1sZWZ0OiAycmVtOyAgcGFkZGluZy1yaWdodDogMnJlbTsgfVxuICAgIC5wci0wIHsgcGFkZGluZy1yaWdodDogMDsgfVxuICAgIC5wci0xIHsgcGFkZGluZy1yaWdodDogMC4yNXJlbTsgfVxuICAgIC5wci0yIHsgcGFkZGluZy1yaWdodDogMC41cmVtOyB9XG4gICAgLnB0LTAgeyBwYWRkaW5nLXRvcDogMDsgfVxuICAgIC5tYi0wIHsgbWFyZ2luLWJvdHRvbTogMDsgfVxuICAgIC5tYi0xIHsgbWFyZ2luLWJvdHRvbTogMC4yNXJlbTsgfVxuICAgIC5tYi0yIHsgbWFyZ2luLWJvdHRvbTogMC41cmVtOyB9XG4gICAgLm1iLTMgeyBtYXJnaW4tYm90dG9tOiAwLjc1cmVtOyB9XG4gICAgLm1iLTQgeyBtYXJnaW4tYm90dG9tOiAxcmVtOyB9XG4gICAgLm10LTAgeyBtYXJnaW4tdG9wOiAwOyB9XG4gICAgLm10LTEgeyBtYXJnaW4tdG9wOiAwLjI1cmVtOyB9XG4gICAgLm10LTIgeyBtYXJnaW4tdG9wOiAwLjVyZW07IH1cbiAgICAubXQtMyB7IG1hcmdpbi10b3A6IDAuNzVyZW07IH1cbiAgICAubXQtNCB7IG1hcmdpbi10b3A6IDFyZW07IH1cbiAgICAubXktNCB7IG1hcmdpbi10b3A6IDFyZW07IG1hcmdpbi1ib3R0b206IDFyZW07IH1cbiAgICAubWwtMiB7IG1hcmdpbi1sZWZ0OiAwLjVyZW07IH1cbiAgICAudy0xMDAgeyB3aWR0aDogMTAwJTsgfVxuXG4gICAgLyogQ291bGV1cnMgdXRpbGl0YWlyZXMgKi9cbiAgICAuYmctbGlnaHQgICB7IGJhY2tncm91bmQtY29sb3I6ICNmOGY5ZmE7IH1cbiAgICAuYmctd2FybmluZyB7IGJhY2tncm91bmQtY29sb3I6ICNmZmMxMDc7IH1cbiAgICAuYmctc2Vjb25kYXJ5IHsgYmFja2dyb3VuZC1jb2xvcjogIzZjNzU3ZDsgfVxuICAgIC50ZXh0LW11dGVkIHsgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtbXV0ZWQpOyB9XG5cbiAgICAvKiBCb3JkdXJlcyAqL1xuICAgIC5ib3JkZXItYm90dG9tIHsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlcik7IH1cbiAgICAucm91bmRlZCAgICAgICB7IGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cyk7IH1cblxuICAgIC8qIE92ZXJmbG93ICovXG4gICAgLm92ZXJmbG93LWF1dG8gIHsgb3ZlcmZsb3c6IGF1dG87IH1cbiAgICAudGFibGUtcmVzcG9uc2l2ZSB7IG92ZXJmbG93LXg6IGF1dG87IH1cblxuICAgIC8qIEZvcm11bGFpcmVzIEJvb3RzdHJhcCBjb21wYXQgKi9cbiAgICAuZm9ybS1pbmxpbmUgIHsgZGlzcGxheTogZmxleDsgZmxleC13cmFwOiB3cmFwOyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDAuNXJlbTsgfVxuICAgIC5mb3JtLWNvbnRyb2wtc20geyBmb250LXNpemU6IDAuODEyNXJlbTsgcGFkZGluZzogMC4yNXJlbSAwLjVyZW07IH1cbiAgICAubmVlZHMtdmFsaWRhdGlvbiB7IH1cbiAgICAud2FzLXZhbGlkYXRlZCAgeyB9XG4gICAgLmludmFsaWQtZmVlZGJhY2sge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1kYW5nZXIpO1xuICAgICAgICBtYXJnaW4tdG9wOiAwLjI1cmVtO1xuICAgIH1cbiAgICAuaXMtaW52YWxpZCB+IC5pbnZhbGlkLWZlZWRiYWNrIHsgZGlzcGxheTogYmxvY2s7IH1cbiAgICAuaXMtaW52YWxpZCB7IGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItZGFuZ2VyKSAhaW1wb3J0YW50OyB9XG5cbiAgICAvKiBEcm9wZG93biBCb290c3RyYXAgKi9cbiAgICAuZHJvcGRvd24geyBwb3NpdGlvbjogcmVsYXRpdmU7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgfVxuICAgIC5kcm9wZG93bi1tZW51IHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB6LWluZGV4OiAxMDAwO1xuICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzKTtcbiAgICAgICAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LWNhcmQpO1xuICAgICAgICBtaW4td2lkdGg6IDEwcmVtO1xuICAgICAgICBwYWRkaW5nOiAwLjI1cmVtIDA7XG4gICAgfVxuICAgIC5kcm9wZG93bi1tZW51LnNob3cgeyBkaXNwbGF5OiBibG9jazsgfVxuICAgIC5kcm9wZG93bi1pdGVtIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHBhZGRpbmc6IDAuMzc1cmVtIDFyZW07XG4gICAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0KTtcbiAgICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIH1cbiAgICAuZHJvcGRvd24taXRlbTpob3ZlciAgIHsgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3Itc3VyZmFjZS1tdXRlZCk7IH1cbiAgICAuZHJvcGRvd24taXRlbS5hY3RpdmUgIHsgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7IGNvbG9yOiB3aGl0ZTsgfVxuICAgIC5kcm9wZG93bi1kaXZpZGVyICAgICAgeyBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTsgbWFyZ2luOiAwLjI1cmVtIDA7IH1cblxuICAgIC8qIENvbGxhcHNlIEJvb3RzdHJhcCAqL1xuICAgIC5jb2xsYXBzZSAgICAgIHsgZGlzcGxheTogbm9uZTsgfVxuICAgIC5jb2xsYXBzZS5zaG93IHsgZGlzcGxheTogYmxvY2s7IH1cblxuICAgIC8qIFRhYmxlcyBCb290c3RyYXAgKi9cbiAgICAudGFibGUgeyB3aWR0aDogMTAwJTsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgfVxuICAgIC50YWJsZSB0aGVhZCB0aCB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDRlbTtcbiAgICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtbXV0ZWQpO1xuICAgICAgICBwYWRkaW5nOiAwLjVyZW0gMC43NXJlbTtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlcik7XG4gICAgfVxuICAgIC50YWJsZSB0ZCB7IHBhZGRpbmc6IDAuNXJlbSAwLjc1cmVtOyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyB9XG4gICAgLnRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUob2RkKSB7IGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXN1cmZhY2UtbXV0ZWQpOyB9XG5cbiAgICAvKiBCYWRnZSBCb290c3RyYXAgY29tcGF0ICovXG4gICAgLmJhZGdlLXBpbGwgeyBib3JkZXItcmFkaXVzOiA5OTk5cHg7IH1cbiAgICAuYmFkZ2Utc2Vjb25kYXJ5IHsgYmFja2dyb3VuZC1jb2xvcjogIzZjNzU3ZDsgY29sb3I6IHdoaXRlOyB9XG4gICAgLmJhZGdlLXdhcm5pbmcgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZjMTA3OyBjb2xvcjogIzAwMDsgfVxuICAgIC5yb3VuZGVkLXBpbGwgeyBib3JkZXItcmFkaXVzOiA5OTk5cHg7IH1cblxuICAgIC8qIFN3aXRjaCBNREIgY29tcGF0IOKAlCBzdHViIHBlbmRhbnQgbWlncmF0aW9uICovXG4gICAgLnN3aXRjaCBsYWJlbCB7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogMC41cmVtOyBjdXJzb3I6IHBvaW50ZXI7IH1cbiAgICAubGV2ZXIge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHdpZHRoOiAycmVtO1xuICAgICAgICBoZWlnaHQ6IDFyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYm9yZGVyKTtcbiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAxNTBtcztcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIH1cbiAgICBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl06Y2hlY2tlZCArIC5sZXZlciB7IGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpOyB9XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQ29tcG9zYW50cyBkZSBiYXNlIFNUSS0yMDAwXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbkBsYXllciBjb21wb25lbnRzIHtcbiAgICAvKiBCb3V0b25zICovXG4gICAgLmJ0biB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiAwLjM3NXJlbTtcbiAgICAgICAgcGFkZGluZzogMC41cmVtIDFyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cyk7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI1cmVtO1xuICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDE1MG1zLCBvcGFjaXR5IDE1MG1zLCBib3gtc2hhZG93IDE1MG1zO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgIH1cblxuICAgIC5idG4tcHJpbWFyeSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICAgICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgICB9XG4gICAgLmJ0bi1wcmltYXJ5OmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1saWdodCk7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeS1saWdodCk7XG4gICAgfVxuXG4gICAgLmJ0bi1zZWNvbmRhcnkge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1zZWNvbmRhcnkpO1xuICAgICAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3Itc2Vjb25kYXJ5KTtcbiAgICB9XG5cbiAgICAuYnRuLW91dGxpbmUtcHJpbWFyeSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gICAgfVxuICAgIC5idG4tb3V0bGluZS1wcmltYXJ5OmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gICAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgIH1cblxuICAgIC5idG4tZGFuZ2VyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItZGFuZ2VyKTtcbiAgICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItZGFuZ2VyKTtcbiAgICB9XG5cbiAgICAuYnRuLXNtIHtcbiAgICAgICAgcGFkZGluZzogMC4yNXJlbSAwLjYyNXJlbTtcbiAgICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgIH1cblxuICAgIC5idG4tbGcge1xuICAgICAgICBwYWRkaW5nOiAwLjc1cmVtIDEuNXJlbTtcbiAgICAgICAgZm9udC1zaXplOiAxcmVtO1xuICAgIH1cblxuICAgIC8qIENhcnRlcyAqL1xuICAgIC5jYXJkIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3Itc3VyZmFjZSk7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlcik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG4gICAgICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1jYXJkKTtcbiAgICB9XG5cbiAgICAuY2FyZC1ib2R5IHtcbiAgICAgICAgcGFkZGluZzogMS4yNXJlbTtcbiAgICB9XG5cbiAgICAuY2FyZC1oZWFkZXIge1xuICAgICAgICBwYWRkaW5nOiAwLjg3NXJlbSAxLjI1cmVtO1xuICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICAgIH1cblxuICAgIC8qIEJhZGdlcyAqL1xuICAgIC5iYWRnZSB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBwYWRkaW5nOiAwLjEyNXJlbSAwLjVyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OTlweDtcbiAgICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4yNXJlbTtcbiAgICB9XG5cbiAgICAuYmFkZ2UtcHJpbWFyeSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXNlY29uZGFyeSk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgICB9XG5cbiAgICAuYmFkZ2Utc3VjY2VzcyB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNkY2ZjZTc7XG4gICAgICAgIGNvbG9yOiAjMTY2NTM0O1xuICAgIH1cblxuICAgIC5iYWRnZS1kYW5nZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmVlMmUyO1xuICAgICAgICBjb2xvcjogIzk5MWIxYjtcbiAgICB9XG5cbiAgICAuYmFkZ2Utd2FybmluZyB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZWY5YzM7XG4gICAgICAgIGNvbG9yOiAjODU0ZDBlO1xuICAgIH1cblxuICAgIC8qIEFsZXJ0ZXMgKi9cbiAgICAuYWxlcnQge1xuICAgICAgICBwYWRkaW5nOiAwLjg3NXJlbSAxcmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMpO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICB9XG5cbiAgICAuYWxlcnQtc3VjY2VzcyB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNkY2ZjZTc7XG4gICAgICAgIGJvcmRlci1jb2xvcjogI2JiZjdkMDtcbiAgICAgICAgY29sb3I6ICMxNjY1MzQ7XG4gICAgfVxuXG4gICAgLmFsZXJ0LWRhbmdlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZWUyZTI7XG4gICAgICAgIGJvcmRlci1jb2xvcjogI2ZlY2FjYTtcbiAgICAgICAgY29sb3I6ICM5OTFiMWI7XG4gICAgfVxuXG4gICAgLmFsZXJ0LXdhcm5pbmcge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmVmOWMzO1xuICAgICAgICBib3JkZXItY29sb3I6ICNmZWYwOGE7XG4gICAgICAgIGNvbG9yOiAjODU0ZDBlO1xuICAgIH1cblxuICAgIC5hbGVydC1pbmZvIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UwZjJmZTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAjYmFlNmZkO1xuICAgICAgICBjb2xvcjogIzBjNGE2ZTtcbiAgICB9XG5cbiAgICAvKiDilIDilIAgQm91dG9ucyBTVEktMjAwMCAodmFyaWFudGVzIG3DqXRpZXIpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqL1xuXG4gICAgLyogYnRuLXZpb2xldCA6IGJvdXRvbiBwcmluY2lwYWwgdmlvbGV0ICg3NCBvY2N1cnJlbmNlcykgKi9cbiAgICAuYnRuLXZpb2xldCB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiAwLjM3NXJlbTtcbiAgICAgICAgcGFkZGluZzogMC41cmVtIDFyZW07XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICAgICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjVyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTUwbXMsIGNvbG9yIDE1MG1zLCBib3JkZXItY29sb3IgMTUwbXM7XG4gICAgfVxuICAgIC5idG4tdmlvbGV0OmhvdmVyLFxuICAgIC5idG4tdmlvbGV0OmZvY3VzIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzIyMTY0YTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAjMjIxNjRhO1xuICAgICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTtcbiAgICB9XG4gICAgLmJ0bi12aW9sZXQuYmRiIHtcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgYm9yZGVyOiAycHggc29saWQgI2ZmZmZmZjtcbiAgICB9XG4gICAgLmJ0bi12aW9sZXQuYmRiOmhvdmVyIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQpO1xuICAgIH1cblxuICAgIC8qIGJ0bi12aW9sZXQtYm9yZGVyIDogYm91dG9uIG91dGxpbmUgdmlvbGV0ICgyIG9jY3VycmVuY2VzKSAqL1xuICAgIC5idG4tdmlvbGV0LWJvcmRlciB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiAwLjM3NXJlbTtcbiAgICAgICAgcGFkZGluZzogMC4zMTI1cmVtIDAuNjI1cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xuICAgICAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICAgIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTUwbXMsIGNvbG9yIDE1MG1zO1xuICAgIH1cbiAgICAuYnRuLXZpb2xldC1ib3JkZXI6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjIxNjRhO1xuICAgICAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTtcbiAgICB9XG5cbiAgICAvKiBidG4tZGlzY3JldCA6IGJvdXRvbiBzZWNvbmRhaXJlIGRpc2NyZXQgKDIzIG9jY3VycmVuY2VzKSAqL1xuICAgIC5idG4tZGlzY3JldCB7XG4gICAgICAgIGJvcmRlcjogMnB4IHNvbGlkICNBQkFEQzk7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICBjb2xvcjogIzM4MzE1MDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC4zcmVtO1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgcGFkZGluZzogMC40NXJlbSAwLjZyZW07XG4gICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTUwbXMsIGNvbG9yIDE1MG1zLCBib3JkZXItY29sb3IgMTUwbXM7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG4gICAgLmJ0bi1kaXNjcmV0OmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzM4MzE1MDtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAjMzgzMTUwO1xuICAgICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICB9XG5cbiAgICAvKiB3YXZlcy1lZmZlY3Qg4oCUIHN0dWIgcGVuZGFudCBsYSBtaWdyYXRpb24gKE1EQiBzdXBwcmltw6kgZW4gUGhhc2UgRSkgKi9cbiAgICAud2F2ZXMtZWZmZWN0IHsgLyogYXVjdW4gc3R5bGUgYWpvdXTDqSwgbCdlZmZldCBzZXJhIHN1cHByaW3DqSBlbiBQaGFzZSBFICovIH1cblxuICAgIC8qIOKUgOKUgCBGb3JtdWxhaXJlcyBTVEktMjAwMCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi9cblxuICAgIC8qIGZvcm0tY29udHJvbCA6IGNoYW1wIGRlIHNhaXNpZSAoODMgb2NjdXJyZW5jZXMpICovXG4gICAgLmZvcm0tY29udHJvbCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgcGFkZGluZzogMC41cmVtIDAuNzVyZW07XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0KTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Y1RjdGRjtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzKTtcbiAgICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDE1MG1zLCBib3gtc2hhZG93IDE1MG1zO1xuICAgICAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgIH1cbiAgICAuZm9ybS1jb250cm9sOmZvY3VzIHtcbiAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHJnYmEoNTYsIDM2LCAxMjQsIDAuMTUpO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xuICAgIH1cbiAgICAuZm9ybS1jb250cm9sOjpwbGFjZWhvbGRlciB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTtcbiAgICB9XG4gICAgLmZvcm0tY29udHJvbDpkaXNhYmxlZCxcbiAgICAuZm9ybS1jb250cm9sW3JlYWRvbmx5XSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXN1cmZhY2UtbXV0ZWQpO1xuICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgfVxuXG4gICAgLyogZm9ybS1yb3cgOiBjb250ZW5ldXIgZGUgY2hhbXBzICjDqXF1aXZhbGVudCBCb290c3RyYXAgLmZvcm0tcm93KSAqL1xuICAgIC5mb3JtLXJvdyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgZ2FwOiAwLjc1cmVtO1xuICAgIH1cblxuICAgIC8qIGZvcm0tZ3JvdXAgOiBncm91cGUgbGFiZWwgKyBpbnB1dCAqL1xuICAgIC5mb3JtLWdyb3VwIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbiAgICB9XG5cbiAgICAvKiBmb3JtLWNoZWNrIDogY2FzZXMgw6AgY29jaGVyIGV0IHJhZGlvICovXG4gICAgLmZvcm0tY2hlY2sge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDAuNXJlbTtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICB9XG4gICAgLmZvcm0tY2hlY2staW5wdXQge1xuICAgICAgICB3aWR0aDogMXJlbTtcbiAgICAgICAgaGVpZ2h0OiAxcmVtO1xuICAgICAgICBhY2NlbnQtY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIH1cbiAgICAuZm9ybS1jaGVjay1sYWJlbCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQpO1xuICAgIH1cblxuICAgIC8qIENoYW1wIG1vdCBkZSBwYXNzZSBhdmVjIGljw7RuZSBhZmZpY2hlci9tYXNxdWVyICovXG4gICAgLm1hc2stcGFzc3dvcmQge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbiAgICAubWFzay1wYXNzd29yZCAudW5tYXNrIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogMC42MjVyZW07XG4gICAgICAgIHRvcDogNTAlO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtbXV0ZWQpO1xuICAgICAgICBwYWRkaW5nOiAwLjI1cmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMTtcbiAgICB9XG4gICAgLm1hc2stcGFzc3dvcmQgLnVubWFzazpob3ZlciB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcbiAgICB9XG5cbiAgICAvKiDilIDilIAgQmxvYyBibGFuYyAoY2FyZHMgZGUgY29udGVudSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovXG5cbiAgICAuYmxvYy1ibGFuYyB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZyk7XG4gICAgICAgIHBhZGRpbmc6IDAuNzVyZW07XG4gICAgICAgIGZvbnQtc2l6ZTogMC45ZW07XG4gICAgICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1jYXJkKTtcbiAgICB9XG4gICAgLmJsb2MtYmxhbmMgaDIge1xuICAgICAgICBmb250LXNpemU6IDFlbTtcbiAgICAgICAgY29sb3I6ICMzODMxNTA7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgfVxuXG4gICAgLyog4pSA4pSAIE1vZGFscyBTVEktMjAwMCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi9cbiAgICAvKiBCb290c3RyYXAgSlMgY29udHLDtGxlIGxhIHZpc2liaWxpdMOpICgubW9kYWwuc2hvdykuXG4gICAgICAgVGFpbHdpbmQgc3R5bGlzZSB1bmlxdWVtZW50IGxlIGNvbnRlbmFudCBldCBsZSBjb250ZW51LiAqL1xuXG4gICAgLm1vZGFsLWNvbnRlbnQge1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy14bCk7XG4gICAgICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1tb2RhbCk7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgfVxuXG4gICAgLm1vZGFsLWhlYWRlciB7XG4gICAgICAgIHBhZGRpbmc6IDFyZW0gMS4yNXJlbTtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlcik7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3Itc3VyZmFjZSk7XG4gICAgfVxuICAgIC5tb2RhbC1oZWFkZXIgLm1vZGFsLXRpdGxlIHtcbiAgICAgICAgZm9udC1zaXplOiAxcmVtO1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gICAgfVxuXG4gICAgLm1vZGFsLWJvZHkge1xuICAgICAgICBwYWRkaW5nOiAxLjI1cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1zdXJmYWNlKTtcbiAgICB9XG5cbiAgICAubW9kYWwtZm9vdGVyIHtcbiAgICAgICAgcGFkZGluZzogMC44NzVyZW0gMS4yNXJlbTtcbiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWJvcmRlcik7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgICAgIGdhcDogMC41cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1zdXJmYWNlKTtcbiAgICB9XG5cbiAgICAvKiBTcGlubmVyIGRlIGNoYXJnZW1lbnQgZGFucyBsZXMgbW9kYWxzICovXG4gICAgLm1vZGFsLWNvbnRlbnQgLmxvYWRpbmcge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgbWluLWhlaWdodDogOHJlbTtcbiAgICB9XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgUGhhc2UgRSDigJQgcmVtcGxhY2VtZW50IGNpYmzDqSBkZSBCb290c3RyYXAvTURCIENTU1xuICAgTGVzIHN0eWxlcyBjaS1kZXNzb3VzIHBlcm1ldHRlbnQgZGUgcmV0aXJlciBsZXMgaW1wb3J0c1xuICAgYm9vdHN0cmFwLmNzcyBldCBtZGIuY3NzIGRlcyBmaWNoaWVycyBTQ1NTLlxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIOKUgOKUgCBBbmltYXRpb25zIGV0IGJhY2tkcm9wIGRlcyBtb2RhbHMgQm9vdHN0cmFwIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgTGUgSlMgQm9vdHN0cmFwL01EQiBzJ2FwcHVpZSBzdXIgY2VzIGNsYXNzZXMgcG91ciBhZmZpY2hlclxuICAgbGVzIG1vZGFscyBhdmVjIHRyYW5zaXRpb24uIFNhbnMgZWxsZXMgbGVzIG1vZGFscyBzJ291dnJlbnRcbiAgIHNhbnMgYW5pbWF0aW9uIGV0IGxlIGZvbmQgYXNzb21icmkgbidhcHBhcmHDrnQgcGFzLlxu4pSA4pSAICovXG5AbGF5ZXIgdXRpbGl0aWVzIHtcbiAgICAvKiBNb2RhbCBiYXNlICovXG4gICAgLm1vZGFsIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgICB0b3A6IDA7IGxlZnQ6IDA7XG4gICAgICAgIHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsgb3ZlcmZsb3cteTogYXV0bztcbiAgICAgICAgei1pbmRleDogMTA1MDtcbiAgICAgICAgb3V0bGluZTogMDtcbiAgICB9XG4gICAgLm1vZGFsLmZhZGUgLm1vZGFsLWRpYWxvZyB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC01MHB4KTtcbiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MgZWFzZS1vdXQ7XG4gICAgfVxuICAgIC5tb2RhbC5zaG93IC5tb2RhbC1kaWFsb2cge1xuICAgICAgICB0cmFuc2Zvcm06IG5vbmU7XG4gICAgfVxuICAgIC5tb2RhbC5zaG93IHsgZGlzcGxheTogYmxvY2s7IH1cblxuICAgIC8qIEJhY2tkcm9wICovXG4gICAgLm1vZGFsLWJhY2tkcm9wIHtcbiAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgICB0b3A6IDA7IGxlZnQ6IDA7XG4gICAgICAgIHdpZHRoOiAxMDB2dzsgaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDtcbiAgICAgICAgei1pbmRleDogMTA0MDtcbiAgICB9XG4gICAgLm1vZGFsLWJhY2tkcm9wLmZhZGUgIHsgb3BhY2l0eTogMDsgfVxuICAgIC5tb2RhbC1iYWNrZHJvcC5zaG93ICB7IG9wYWNpdHk6IDAuNTsgfVxuXG4gICAgLyogRGlhbG9nIHNpemluZyAqL1xuICAgIC5tb2RhbC1kaWFsb2cge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgICBtYXJnaW46IDEuNzVyZW0gYXV0bztcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIG1heC13aWR0aDogNTAwcHg7XG4gICAgfVxuICAgIC5tb2RhbC1kaWFsb2ctY2VudGVyZWQge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBtaW4taGVpZ2h0OiBjYWxjKDEwMCUgLSAzLjVyZW0pO1xuICAgIH1cbiAgICAubW9kYWwtbGcgIHsgbWF4LXdpZHRoOiA4MDBweDsgfVxuICAgIC5tb2RhbC14bCAgeyBtYXgtd2lkdGg6IDExNDBweDsgfVxuICAgIC5tb2RhbC1zbSAgeyBtYXgtd2lkdGg6IDMwMHB4OyB9XG4gICAgLm1vZGFsLWRpYWxvZyAubW9kYWwtY29udGVudCB7IHBvaW50ZXItZXZlbnRzOiBhdXRvOyB3aWR0aDogMTAwJTsgfVxuICAgIGJvZHkubW9kYWwtb3BlbiB7IG92ZXJmbG93OiBoaWRkZW47IH1cblxuICAgIC8qIOKUgOKUgCBHcmlsbGUgQm9vdHN0cmFwIHJlc3BvbnNpdmUgKGNvbC1tZC9sZy9zbS94bCkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgICAgMjcgb2NjdXJyZW5jZXMgZGFucyBsZXMgdGVtcGxhdGVzIG5vbiBlbmNvcmUgbWlncsOpcy5cbiAgICDilIDilIAgKi9cbiAgICBAbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpIHtcbiAgICAgICAgLmNvbC1zbS0xICB7IGZsZXg6IDAgMCA4LjMzMzMlOyAgbWF4LXdpZHRoOiA4LjMzMzMlOyAgfVxuICAgICAgICAuY29sLXNtLTIgIHsgZmxleDogMCAwIDE2LjY2NjclOyBtYXgtd2lkdGg6IDE2LjY2NjclOyB9XG4gICAgICAgIC5jb2wtc20tMyAgeyBmbGV4OiAwIDAgMjUlOyAgICAgIG1heC13aWR0aDogMjUlOyAgICAgIH1cbiAgICAgICAgLmNvbC1zbS00ICB7IGZsZXg6IDAgMCAzMy4zMzMzJTsgbWF4LXdpZHRoOiAzMy4zMzMzJTsgfVxuICAgICAgICAuY29sLXNtLTUgIHsgZmxleDogMCAwIDQxLjY2NjclOyBtYXgtd2lkdGg6IDQxLjY2NjclOyB9XG4gICAgICAgIC5jb2wtc20tNiAgeyBmbGV4OiAwIDAgNTAlOyAgICAgIG1heC13aWR0aDogNTAlOyAgICAgIH1cbiAgICAgICAgLmNvbC1zbS03ICB7IGZsZXg6IDAgMCA1OC4zMzMzJTsgbWF4LXdpZHRoOiA1OC4zMzMzJTsgfVxuICAgICAgICAuY29sLXNtLTggIHsgZmxleDogMCAwIDY2LjY2NjclOyBtYXgtd2lkdGg6IDY2LjY2NjclOyB9XG4gICAgICAgIC5jb2wtc20tOSAgeyBmbGV4OiAwIDAgNzUlOyAgICAgIG1heC13aWR0aDogNzUlOyAgICAgIH1cbiAgICAgICAgLmNvbC1zbS0xMCB7IGZsZXg6IDAgMCA4My4zMzMzJTsgbWF4LXdpZHRoOiA4My4zMzMzJTsgfVxuICAgICAgICAuY29sLXNtLTExIHsgZmxleDogMCAwIDkxLjY2NjclOyBtYXgtd2lkdGg6IDkxLjY2NjclOyB9XG4gICAgICAgIC5jb2wtc20tMTIgeyBmbGV4OiAwIDAgMTAwJTsgICAgIG1heC13aWR0aDogMTAwJTsgICAgIH1cbiAgICB9XG4gICAgQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gICAgICAgIC5jb2wtbWQtMSAgeyBmbGV4OiAwIDAgOC4zMzMzJTsgIG1heC13aWR0aDogOC4zMzMzJTsgIH1cbiAgICAgICAgLmNvbC1tZC0yICB7IGZsZXg6IDAgMCAxNi42NjY3JTsgbWF4LXdpZHRoOiAxNi42NjY3JTsgfVxuICAgICAgICAuY29sLW1kLTMgIHsgZmxleDogMCAwIDI1JTsgICAgICBtYXgtd2lkdGg6IDI1JTsgICAgICB9XG4gICAgICAgIC5jb2wtbWQtNCAgeyBmbGV4OiAwIDAgMzMuMzMzMyU7IG1heC13aWR0aDogMzMuMzMzMyU7IH1cbiAgICAgICAgLmNvbC1tZC01ICB7IGZsZXg6IDAgMCA0MS42NjY3JTsgbWF4LXdpZHRoOiA0MS42NjY3JTsgfVxuICAgICAgICAuY29sLW1kLTYgIHsgZmxleDogMCAwIDUwJTsgICAgICBtYXgtd2lkdGg6IDUwJTsgICAgICB9XG4gICAgICAgIC5jb2wtbWQtNyAgeyBmbGV4OiAwIDAgNTguMzMzMyU7IG1heC13aWR0aDogNTguMzMzMyU7IH1cbiAgICAgICAgLmNvbC1tZC04ICB7IGZsZXg6IDAgMCA2Ni42NjY3JTsgbWF4LXdpZHRoOiA2Ni42NjY3JTsgfVxuICAgICAgICAuY29sLW1kLTkgIHsgZmxleDogMCAwIDc1JTsgICAgICBtYXgtd2lkdGg6IDc1JTsgICAgICB9XG4gICAgICAgIC5jb2wtbWQtMTAgeyBmbGV4OiAwIDAgODMuMzMzMyU7IG1heC13aWR0aDogODMuMzMzMyU7IH1cbiAgICAgICAgLmNvbC1tZC0xMSB7IGZsZXg6IDAgMCA5MS42NjY3JTsgbWF4LXdpZHRoOiA5MS42NjY3JTsgfVxuICAgICAgICAuY29sLW1kLTEyIHsgZmxleDogMCAwIDEwMCU7ICAgICBtYXgtd2lkdGg6IDEwMCU7ICAgICB9XG4gICAgfVxuICAgIEBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xuICAgICAgICAuY29sLWxnLTEgIHsgZmxleDogMCAwIDguMzMzMyU7ICBtYXgtd2lkdGg6IDguMzMzMyU7ICB9XG4gICAgICAgIC5jb2wtbGctMiAgeyBmbGV4OiAwIDAgMTYuNjY2NyU7IG1heC13aWR0aDogMTYuNjY2NyU7IH1cbiAgICAgICAgLmNvbC1sZy0zICB7IGZsZXg6IDAgMCAyNSU7ICAgICAgbWF4LXdpZHRoOiAyNSU7ICAgICAgfVxuICAgICAgICAuY29sLWxnLTQgIHsgZmxleDogMCAwIDMzLjMzMzMlOyBtYXgtd2lkdGg6IDMzLjMzMzMlOyB9XG4gICAgICAgIC5jb2wtbGctNSAgeyBmbGV4OiAwIDAgNDEuNjY2NyU7IG1heC13aWR0aDogNDEuNjY2NyU7IH1cbiAgICAgICAgLmNvbC1sZy02ICB7IGZsZXg6IDAgMCA1MCU7ICAgICAgbWF4LXdpZHRoOiA1MCU7ICAgICAgfVxuICAgICAgICAuY29sLWxnLTcgIHsgZmxleDogMCAwIDU4LjMzMzMlOyBtYXgtd2lkdGg6IDU4LjMzMzMlOyB9XG4gICAgICAgIC5jb2wtbGctOCAgeyBmbGV4OiAwIDAgNjYuNjY2NyU7IG1heC13aWR0aDogNjYuNjY2NyU7IH1cbiAgICAgICAgLmNvbC1sZy05ICB7IGZsZXg6IDAgMCA3NSU7ICAgICAgbWF4LXdpZHRoOiA3NSU7ICAgICAgfVxuICAgICAgICAuY29sLWxnLTEwIHsgZmxleDogMCAwIDgzLjMzMzMlOyBtYXgtd2lkdGg6IDgzLjMzMzMlOyB9XG4gICAgICAgIC5jb2wtbGctMTEgeyBmbGV4OiAwIDAgOTEuNjY2NyU7IG1heC13aWR0aDogOTEuNjY2NyU7IH1cbiAgICAgICAgLmNvbC1sZy0xMiB7IGZsZXg6IDAgMCAxMDAlOyAgICAgbWF4LXdpZHRoOiAxMDAlOyAgICAgfVxuICAgIH1cbiAgICBAbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7XG4gICAgICAgIC5jb2wteGwtMSAgeyBmbGV4OiAwIDAgOC4zMzMzJTsgIG1heC13aWR0aDogOC4zMzMzJTsgIH1cbiAgICAgICAgLmNvbC14bC0yICB7IGZsZXg6IDAgMCAxNi42NjY3JTsgbWF4LXdpZHRoOiAxNi42NjY3JTsgfVxuICAgICAgICAuY29sLXhsLTMgIHsgZmxleDogMCAwIDI1JTsgICAgICBtYXgtd2lkdGg6IDI1JTsgICAgICB9XG4gICAgICAgIC5jb2wteGwtNCAgeyBmbGV4OiAwIDAgMzMuMzMzMyU7IG1heC13aWR0aDogMzMuMzMzMyU7IH1cbiAgICAgICAgLmNvbC14bC01ICB7IGZsZXg6IDAgMCA0MS42NjY3JTsgbWF4LXdpZHRoOiA0MS42NjY3JTsgfVxuICAgICAgICAuY29sLXhsLTYgIHsgZmxleDogMCAwIDUwJTsgICAgICBtYXgtd2lkdGg6IDUwJTsgICAgICB9XG4gICAgICAgIC5jb2wteGwtNyAgeyBmbGV4OiAwIDAgNTguMzMzMyU7IG1heC13aWR0aDogNTguMzMzMyU7IH1cbiAgICAgICAgLmNvbC14bC04ICB7IGZsZXg6IDAgMCA2Ni42NjY3JTsgbWF4LXdpZHRoOiA2Ni42NjY3JTsgfVxuICAgICAgICAuY29sLXhsLTkgIHsgZmxleDogMCAwIDc1JTsgICAgICBtYXgtd2lkdGg6IDc1JTsgICAgICB9XG4gICAgICAgIC5jb2wteGwtMTAgeyBmbGV4OiAwIDAgODMuMzMzMyU7IG1heC13aWR0aDogODMuMzMzMyU7IH1cbiAgICAgICAgLmNvbC14bC0xMSB7IGZsZXg6IDAgMCA5MS42NjY3JTsgbWF4LXdpZHRoOiA5MS42NjY3JTsgfVxuICAgICAgICAuY29sLXhsLTEyIHsgZmxleDogMCAwIDEwMCU7ICAgICBtYXgtd2lkdGg6IDEwMCU7ICAgICB9XG4gICAgfVxuXG4gICAgLyog4pSA4pSAIFRhYnMgQm9vdHN0cmFwIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgICAgIDI0IG9jY3VycmVuY2VzIGRhbnMgbGVzIHRlbXBsYXRlcyAocHJvZmlsLCBjYWxlbmRyaWVy4oCmKS5cbiAgICDilIDilIAgKi9cbiAgICAubmF2IHsgZGlzcGxheTogZmxleDsgZmxleC13cmFwOiB3cmFwOyBwYWRkaW5nLWxlZnQ6IDA7IGxpc3Qtc3R5bGU6IG5vbmU7IH1cbiAgICAubmF2LXRhYnMge1xuICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyKTtcbiAgICAgICAgZ2FwOiAwLjI1cmVtO1xuICAgIH1cbiAgICAubmF2LXRhYnMgLm5hdi1pdGVtIHsgbWFyZ2luLWJvdHRvbTogLTJweDsgfVxuICAgIC5uYXYtdGFicyAubmF2LWxpbmsge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcGFkZGluZzogMC41cmVtIDFyZW07XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTtcbiAgICAgICAgYm9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cykgdmFyKC0tcmFkaXVzKSAwIDA7XG4gICAgICAgIHRyYW5zaXRpb246IGNvbG9yIDE1MG1zLCBib3JkZXItY29sb3IgMTUwbXM7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIH1cbiAgICAubmF2LXRhYnMgLm5hdi1saW5rOmhvdmVyIHsgY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnkpOyB9XG4gICAgLm5hdi10YWJzIC5uYXYtbGluay5hY3RpdmUge1xuICAgICAgICBjb2xvcjogdmFyKC0tY29sb3ItcHJpbWFyeSk7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItYm9yZGVyKSB2YXIoLS1jb2xvci1ib3JkZXIpICNmZmY7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgfVxuXG4gICAgLnRhYi1jb250ZW50ID4gLnRhYi1wYW5lIHsgZGlzcGxheTogbm9uZTsgfVxuICAgIC50YWItY29udGVudCA+IC5hY3RpdmUgICB7IGRpc3BsYXk6IGJsb2NrOyB9XG5cbiAgICAvKiDilIDilIAgQ29sbGFwc2luZyBCb290c3RyYXAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgICAgVHJhbnNpdGlvbiBwb3VyIGxlcyBjb2xsYXBzZSBhbmltw6lzIChhY2NvcmTDqW9uLCBjb2xsYXBzZSkuXG4gICAg4pSA4pSAICovXG4gICAgLmNvbGxhcHNpbmcge1xuICAgICAgICBoZWlnaHQ6IDA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHRyYW5zaXRpb246IGhlaWdodCAwLjM1cyBlYXNlO1xuICAgIH1cblxuICAgIC8qIOKUgOKUgCBTY3JvbGxiYXIgcGVyc29ubmFsaXPDqWUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgICAgUmVtcGxhY2UgcGVyZmVjdC1zY3JvbGxiYXIgZG9udCBsJ2ltcG9ydCBlc3Qgc3VwcHJpbcOpLlxuICAgIOKUgOKUgCAqL1xuICAgIC5teS1jdXN0b20tc2Nyb2xsYmFyOjotd2Via2l0LXNjcm9sbGJhciB7IHdpZHRoOiA2cHg7IGhlaWdodDogNnB4OyB9XG4gICAgLm15LWN1c3RvbS1zY3JvbGxiYXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7IH1cbiAgICAubXktY3VzdG9tLXNjcm9sbGJhcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDU2LCAzNiwgMTI0LCAwLjMpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgfVxuICAgIC5teS1jdXN0b20tc2Nyb2xsYmFyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoNTYsIDM2LCAxMjQsIDAuNik7XG4gICAgfVxuICAgIC5zY3JvbGxiYXIgeyBzY3JvbGxiYXItd2lkdGg6IHRoaW47IHNjcm9sbGJhci1jb2xvcjogcmdiYSg1NiwzNiwxMjQsMC4zKSB0cmFuc3BhcmVudDsgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9*/