/*!**********************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/00_reset.css ***!
  \**********************************************************************************************************************/
*, ::after, ::before {
    box-sizing: border-box;
}

body {
    margin: 0;
}

ul {
    list-style-type: none;
    padding-inline-start: 0;
}
/*!*********************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/10_font.css ***!
  \*********************************************************************************************************************/
html {
    /* Il est interdit de rajouter des couleurs sans demander l'accord du PO */
    --cBlanc1: var(--cBlanc);
    /* inutilisé 2026-06-13  --cBlanc1p: #E0E0E0; */
    --cBlanc02: #F5F5F5;
    --cBlanc2: #F0F0F0;
    --cBlanc03: #dce1ea;
    --cBlanc3: #CCCFCC;
    /* inutilisé 2026-06-13  --cBlanc4: #AAAFAA; */
    --cBlanc5: #999C99;



    /* ============================================
       COULEURS TEXTE NOIR - UTILISATION OBLIGATOIRE
       ============================================ */

    /* --cNoir1 : ÉLÉMENTS D'EMPHASE
       - Titres : h1, h2, h3
       - Texte des boutons (quand pas de couleur définie)
       - Labels obligatoires (required)
       - Menus de navigation
       - Checkbox et radio boutons
       - Valeur principale dans les compteurs (ex: "3" dans "3 / 5")
    */
    --cNoir1: #181818;
    /* inutilisé 2026-06-13  --cNoir1o: #18181855; */

    /* --cNoir2 : CORPS DE TEXTE
       - Paragraphes <p>
       - Listes <li>, énumérations
       - Labels facultatifs
       - Texte saisi dans les inputs
       - Titres h4, h5, h6
       - Valeur secondaire dans les compteurs (ex: "/ 5" dans "3 / 5")
    */
    --cNoir2: #282828;

    /* --cNoir3 : TEXTE TERTIAIRE
       - Placeholders
       - Messages d'aide discrets
       - Texte désactivé
    */
    --cNoir3: #555;

    /* --cNoir4-5 : TEXTE TRÈS ATTÉNUÉ
       - Éléments désactivés
       - Texte décoratif
    */
    --cNoir4: #999;
    --cNoir5: #BBB;
    --cBlanc: #FFF;
    --cNoir: #000;
    --cTexte1: #222;
    /* inutilisé 2026-06-13  --cTexte2: #444; */
    --cForm: #000;
    /* inutilisé 2026-06-13  --cForm_b: #555; */
    --cFormFocus: var(--cCta);
    /* inutilisé 2026-06-13  --cBleu: #025BA7; */
    --cRouge: #F15B4E;

    /* inutilisé 2026-06-13  --cPrimaire: #ad0000; */
    /* inutilisé 2026-06-13  --cPrimaireh: #ce0000; */
    --cRouge6: #930000;
    --cRouge6h: #cc0000;
    --cRouge6aht: #fffDfE;

    /* inutilisé 2026-06-13  --cStatut0: #8996ac; */
    /* inutilisé 2026-06-13  --cStatut1: #308ed1; */
    /* inutilisé 2026-06-13  --cStatut2: #1ed10e; */
    /* inutilisé 2026-06-13  --cStatut3: #afc0ab; */
    /* inutilisé 2026-06-13  --cStatut4: #abb3c0; */
    
    --cBackground: var(--cBlanc);
    --cLink: #00629c;
    --cLinkh: #004269;
    --cCta: #308ed1;
    --cCtah: #2572a9;
    --cCtat: #FFF;
    --cCtath: #FFF;
    /* inutilisé 2026-06-13  --cCta2: #e3eef4; */
    /* inutilisé 2026-06-13  --cCta2h: #bed8e6; */
    /* inutilisé 2026-06-13  --cCta2t: #308ed1; */
    /* inutilisé 2026-06-13  --cCta2th: #308ed1; */

    --cBleu4: #06A;
    --cBleu4a: linear-gradient(to bottom, #17B, #059 100%);
    --cBleu4at: #F8F8FF;
    /* inutilisé 2026-06-13  --cBleu4h: #246; */
    --cBleu4ah: linear-gradient(to bottom, #17B, #17B 100%);
    --cBleu4ht: #F8F8FF;
    --cBleu7_t: #048;

    --cOr: #eab308;
    --cOrh: #ca8a04;
    /* inutilisé 2026-06-13  --cOrt: #fff; */
    --cOrFond: #fefce8;
    /* inutilisé 2026-06-13  --cOrFond2: #fef9c3; */

    --cSucces: #1ed10e;
    --cSuccesFond: #f0fff4;
    --cSuccesTexte: #276749;

    /* Layout */
    --largeur: 1360px;
    /* inutilisé 2026-06-13  --maxWidth: 760px; */
    --cBg: var(--cBlanc);
    /* inutilisé 2026-06-13  --cBg_b: #CCC; */

    /* Noir transparent — ombres */
    --cOmbre: #0002;            /* environ 15% */
    --cOmbreForte: #0004;       /* environ 30% */

    /* transparent — overlays */
    --cOverlay: #0008;          /* environ 50% */
    --cBlancOverlay: #FFFC;     /* environ 80% */

    /* Focus */
    --cFormFocusHalo: #308ED126;    /* bleu focus 15% */

    /* Ombres composées */
    --ombrePortee: 0 4px 12px var(--cOmbre);
    --ombrePortee2: 0 0px 25px #000;
    --ombreModale: 0 10px 40px var(--cOmbreForte);
    --ombreInterne: 0 0 10px 10px inset var(--cBlanc02);

    /* Couleurs Vert (vitrine) */
    /* inutilisé 2026-06-13  --cBgVert_s: linear-gradient(220deg, #EFD, #DFC); */
    /* inutilisé 2026-06-13  --cBgVert_b: #BCA; */
    /* inutilisé 2026-06-13  --cVert0: #F8FFE8; */
    /* inutilisé 2026-06-13  --cVert1: #E8FFD8; */
    /* inutilisé 2026-06-13  --cVert1_b: #CCC; */
    /* inutilisé 2026-06-13  --cVert2: #EFC; */
    /* inutilisé 2026-06-13  --cVert3: #CDA; */
    /* inutilisé 2026-06-13  --cVert3_t: #230; */
    /* inutilisé 2026-06-13  --cVert3_o: #BDAD; */
    /* inutilisé 2026-06-13  --cVert3_h: #AB7; */
    /* inutilisé 2026-06-13  --cVert3_ht: #000; */
    /* inutilisé 2026-06-13  --cVert3_b: #555; */
    /* inutilisé 2026-06-13  --cVert4: #BC8; */
    /* inutilisé 2026-06-13  --cVert4_t: #081100; */
    /* inutilisé 2026-06-13  --cVert5: #3C0; */
    /* inutilisé 2026-06-13  --cVert5_a: linear-gradient(to bottom, #6A1, #480 100%); */
    /* inutilisé 2026-06-13  --cVert5_ah: linear-gradient(to bottom, #6A1, #6A1 100%); */
    /* inutilisé 2026-06-13  --cVert5_t: #FFF; */
    /* inutilisé 2026-06-13  --cVert6: #463; */
    /* inutilisé 2026-06-13  --cVert6_h: #362; */
    /* inutilisé 2026-06-13  --cVert6_ht: #F8FFF8; */

    /* Couleurs Noir gradients */
    /* inutilisé 2026-06-13  --cNoir3_a: linear-gradient(to bottom, #505858, #303838 100%); */
    /* inutilisé 2026-06-13  --cNoir3_ah: linear-gradient(to bottom, #505858, #505858 100%); */
    /* inutilisé 2026-06-13  --cNoir3_ahLight: linear-gradient(to bottom, #707878, #707878 100%); */
    /* inutilisé 2026-06-13  --cNoir3_at: #FFF; */

    /* Couleurs Jaune */
    --cJaune5: #EB2;
    /* inutilisé 2026-06-13  --cJaune6: #F3AE17; */
    /* inutilisé 2026-06-13  --cJaune6_t: #100;        */
    /* inutilisé 2026-06-13  --cJaune6_a: linear-gradient(to bottom, #FC3, #EA1 100%); */
    /* inutilisé 2026-06-13  --cJaune6_b: #C80; */
    /* inutilisé 2026-06-13  --cJaune6_h: #FC3; */
    /* inutilisé 2026-06-13  --cJaune6_ah: linear-gradient(to bottom, #FC3, #FC3 100%); */
    /* inutilisé 2026-06-13  --cAtteste: linear-gradient(45deg, var(--cJaune5), #FC3); */
    /* inutilisé 2026-06-13  --cAtteste_b: #D39E00; */

    /* Couleurs Bleu complémentaires */
    --cBleu1: #E8F0F8;
    /* inutilisé 2026-06-13  --cBleu1_s: linear-gradient(220deg, var(--cBleu1), var(--cBleu1), var(--cBleu1), var(--cBleu3)); */
    /* inutilisé 2026-06-13  --cBleu2_s: #D8E0E8; */
    --cBleu3: #CEF;
    /* inutilisé 2026-06-13  --cBleu3_b: #282828; */
    /* inutilisé 2026-06-13  --cBleu4_b: #113; */
    /* inutilisé 2026-06-13  --cBleu6: #0AF; */
    /* inutilisé 2026-06-13  --cBleu6_ah: linear-gradient(to bottom, #6EF, #6EF 100%); */
    /* inutilisé 2026-06-13  --cBleu6_t: #181818; */

    /* Couleurs Violet */
    /* inutilisé 2026-06-13  --cViolet6: #A0F; */
    /* inutilisé 2026-06-13  --cViolet6_ah: linear-gradient(to bottom, #d79af2, #d79af2 100%); */
    /* inutilisé 2026-06-13  --cViolet6_ht: #000; */
    /* inutilisé 2026-06-13  --cViolet6_t: #FFF; */

    /* Couleurs Rouge complémentaires */
    /* inutilisé 2026-06-13  --cRouge1: #C30; */
    /* inutilisé 2026-06-13  --cRouge1_t: #FFF; */
    --cRouge2: #C44;
    /* inutilisé 2026-06-13  --cRouge3: #900; */
    /* inutilisé 2026-06-13  --cRouge5_a: linear-gradient(to bottom, #F50, #B20 100%); */
    /* inutilisé 2026-06-13  --cRouge5_ah: linear-gradient(to bottom, #F50, #F50 100%); */

    /* Couleurs spéciales */
    /* inutilisé 2026-06-13  --sAlerte_s: #DEC4C4; */
    /* inutilisé 2026-06-13  --cOk: #391; */
    --cTest: #ECF;
    --cTest2: #d2a8e0;
    --cTest3: #9B59B6;
    --cTest5_a: linear-gradient(to bottom, #9B59B6, #783b92 100%);
    --cVTest5_ah: linear-gradient(to bottom, #9B59B6, #9B59B6 100%);
    /* inutilisé 2026-06-13  --cTest_t: #000; */
    /* inutilisé 2026-06-13  --cTuto: #C6F; */
    /* inutilisé 2026-06-13  --cTuto_t: #000; */
    /* inutilisé 2026-06-13  --cTuto_ah: #d79af2; */
    /* inutilisé 2026-06-13  --cBlanc1_t: #181818; */
    /* inutilisé 2026-06-13  --cPlacehoder: #888; */
    /* inutilisé 2026-06-13  --cForm_s: #FFF; */
    /* inutilisé 2026-06-13  --bsCta: 0 7px 14px #3352, 0 3px 6px #0001; */

    /* Formulaires utilisateur */
    /* inutilisé 2026-06-13  --cFormUsr: #EEFAFF; */
    /* inutilisé 2026-06-13  --cFormUsr_b: #334; */
    /* inutilisé 2026-06-13  --cFormUsr_h: #FFF; */
    /* inutilisé 2026-06-13  --cFormUsr_bf: #0AF; */
    /* inutilisé 2026-06-13  --cFormUsr_cb: #059; */
    /* inutilisé 2026-06-13  --cForm_bf: #3C0; */
    /* inutilisé 2026-06-13  --cForm_cb: #590; */
    /* inutilisé 2026-06-13  --cOk_b: #8F8; */
    /* inutilisé 2026-06-13  --cKo_b: #F88; */

    /* Logo */
    /* inutilisé 2026-06-13  --cLogo1: #EBF7E4; */
    /* inutilisé 2026-06-13  --cLogo2: #C6E9AF; */

    --ffBase: 'Noto Sans', Arial, sans-serif;
    --ffMono: 'JetBrainsMono', 'Verdana', monospace;

    /* Il est interdit de rajouter des styles typo sans demander l'accord du PO */
    /* inutilisé 2026-06-13  --fTitre: normal normal 700 32px 'Scada', sans-serif; */
    --fH1: normal normal 700 32px 'Scada', sans-serif;
    --fH2: normal normal 700 24px 'Scada', sans-serif;
    --fH3: normal normal 400 22px 'Scada', sans-serif;
    --fH4: normal normal 400 18px 'Scada', sans-serif;
    --fMenu14: normal normal 400 14px 'Montserrat', sans-serif;
    --fMini12: normal normal 400 12px 'JetBrainsMono', sans-serif;
    --fCta16: normal normal 700 18px 'Montserrat', sans-serif;
    /* inutilisé 2026-06-13  --fMono16: normal normal 400 16px 'JetBrainsMono', 'Courier New', Courier, monospace; */
    /* inutilisé 2026-06-13  --fMono24: normal normal 400 24px 'JetBrainsMono', 'Courier New', Courier, monospace; */
    --fMono24b: normal normal 700 24px 'JetBrainsMono', 'Courier New', Courier, monospace;
    --fCta20: normal normal 700 20px 'Montserrat', sans-serif;
    /* inutilisé 2026-06-13  --fLegend16: normal normal 400 20px 'Scada', sans-serif; */
    --fLight14: italic normal 200 14px 'Noto Sans', Verdana, Geneva, Arial, sans-serif;
    --fText16: normal normal 400 16px 'Noto Sans', Verdana, Geneva, Arial, sans-serif;
    --fText16Strong: normal normal 700 16px 'Noto Sans', Verdana, Geneva, Arial, sans-serif;
    --fItalic16: italic normal 400 16px 'Noto Sans', Verdana, Geneva, Arial, sans-serif;
    --fAlerte16: italic small-caps 700 20px 'Noto Sans', Verdana, Geneva, Arial, sans-serif;
    --fLabel: normal normal 400 14px 'Noto Sans', Verdana, Geneva, Arial, sans-serif;

    --border: 1px solid #dce1ea;
    --borderR0: 3px;
    --borderR1: 5px;
    --borderR2: 7px;
    --borderCarte: 1px solid var(--cNoir4);
    --borderForm: 1px solid var(--cNoir5);
    --borderInput: 1px solid var(--cNoir5);

    /* Espacements — nommés par rôle (comme les bordures), accord PO 2026-07-03.
       Migration progressive : ne remplacer une valeur en dur que si le rôle ET la valeur
       correspondent (no-op visuel) ; aligner une dérive de valeur = décision à part. */
    --gapListe: 32px;   /* entre les éléments d'une liste. La colonne qui borde la liste (ex. panneau de filtres) prend le MÊME gap : deux rythmes différents côte à côte, c'est moche */
    --paddingCorps: 20px;   /* intérieur d'un corps de bloc / panneau / modale */
    --gapDefaut: 8px;       /* espace standard entre éléments frères (flex/grid) */
    --gapReduit: 4px;       /* variante volontairement plus serrée : listes compactes, groupes de boutons */
    --gapMoyen: 12px;    /* espacement intermédiaire entre éléments frères */
    --gapLarge: 20px;    /* espacement généreux entre groupes d'éléments */
    --paddingMiniDiv: 8px 16px; /* padding de tout les blocs avec fond colorées */
    --paddingEtiquette: 3px 6px; /* padding des span et autres etiquette */

    /* Boutons : un bouton ne choisit NI son padding, NI sa bordure, NI sa couleur
       (décision PO 2026-07-18). Il prend ces variables — ou pas de bordure, ou la
       couleur d'un rôle (primaire, danger, démo) — jamais une valeur à lui. */
    --paddingCta14: 8px 16px;             /* padding de tout bouton compact (.cta14, .ctaDiscret, toggles) */
    --borderCta: 1px solid var(--cNoir4); /* LA bordure d'un bouton : celle-ci ou aucune */
    --cCtaTexte: var(--cNoir2);         /* LE texte d'un bouton neutre : ce noir ou une couleur de rôle */

    --cEnTete: #f0f4f7;

    /* Couleurs de fond des cartes Timeline */
    /* inutilisé 2026-06-13  --cFondDistributions0: #fdfdf8; */
    --cFondDistributions0: #fafaf8;
    --cFondDistributions: #f7f6e4;
    --cFondDistributions2: #e9e5af;
    --cFondDistributions3: #A79e2e;
    --cFondDistributions4: #978e1e;
    --cFondDistributions_a: linear-gradient(to bottom, var(--cFondDistributions3), var(--cFondDistributions4) 100%);
    --cFondDistributions_ah: linear-gradient(to bottom, var(--cFondDistributions3), var(--cFondDistributions3) 100%);
    --cFondGroupes0: #f8fcfd;
    --cFondGroupes: #e4f4f7;
    --cFondGroupes2: #afdfe9;
    --cFondGroupes3: #2eA9Bf;
    --cFondGroupes4: #1e99af;
    --cFondGroupes_a: linear-gradient(to bottom, var(--cFondGroupes3), var(--cFondGroupes4) 100%);
    --cFondGroupes_ah: linear-gradient(to bottom, var(--cFondGroupes3), var(--cFondGroupes3) 100%);
    --cFondConfig0: #f2f4fa;
    --cFondConfig: #E7ECF8;
    --cFondConfig2: #c5d0e8;
    --cFondConfig3: #436bC1;
    --cFondConfig4: #335bb1;
    --cFondConfig_a: linear-gradient(to bottom, var(--cFondConfig3), var(--cFondConfig4) 100%);
    --cFondConfig_ah: linear-gradient(to bottom, var(--cFondConfig3), var(--cFondConfig3) 100%);
    --cFondScenes0: #f1f4f8;
    --cFondScenes: #e3eef8;
    --cFondScenes2: #accee8;
    --cFondScenes3: #308ed1;
    --cFondScenes4: #2678b5;
    --cFondScenes_a: linear-gradient(to bottom, var(--cFondScenes3), var(--cFondScenes4) 100%);
    --cFondScenes_ah: linear-gradient(to bottom, var(--cFondScenes3), var(--cFondScenes3) 100%);
    --cFondAffichages0: #f4f0f6;
    --cFondAffichages: #f3e8f5;
    --cFondAffichages2: #d6a5d6;
    --cFondAffichages3: #9c27b0;
    --cFondAffichages4: #8e24aa;
    --cFondAffichages_a: linear-gradient(to bottom, var(--cFondAffichages3), var(--cFondAffichages4) 100%);
    --cFondAffichages_ah: linear-gradient(to bottom, var(--cFondAffichages3), var(--cFondAffichages3) 100%);

    /* Alias numériques (correspondant à NatureBrique.value) */
    --cFondNatureBrique1: var(--cFondGroupes);   /* Participants */
    /* inutilisé 2026-06-13  --cFondNatureBrique1b: var(--cFondGroupes2); */
    --cFondNatureBrique2: var(--cFondDistributions);           /* Lots */
    /* inutilisé 2026-06-13  --cFondNatureBrique2b: var(--cFondDistributions2); */
    --cFondNatureBrique3: var(--cFondConfig);         /* Configurations */
    /* inutilisé 2026-06-13  --cFondNatureBrique3b: var(--cFondConfig2); */
    --cFondNatureBrique4: var(--cFondScenes);     /* Scenes */
    /* inutilisé 2026-06-13  --cFondNatureBrique4b: var(--cFondScenes2); */
    --cFondNatureBrique5: var(--cFondAffichages);     /* Affichage */
    /* inutilisé 2026-06-13  --cFondNatureBrique5b: var(--cFondAffichages2); */
}

/* ============================================
   TITRES ET TYPOGRAPHIE
   ============================================ */

h1, h2, h3 {
    color: var(--cNoir1);
}

h4 {
    color: var(--cNoir2);
}

h5, h6 {
    color: var(--cNoir3);
}

p, li {
    color: var(--cNoir2);
}

h1, h2, h3, h4, h5, h6 {
    font: var(--fH1);
}

button {
    font: var(--fCta16);
}

h1 {
    font: var(--fH1);
    margin: 10px 15px 5px 0;
    padding: 0;
}

h2 {
    font: var(--fH2);
    margin: 15px 10px 5px 0;
    padding: 0;
}

h3 {
    font: var(--fH3);
    padding: 0;
    margin: 25px 0 15px;
}

h4, h5 {
    font: var(--fH4);
}

h4, h5, h6 {
    margin: 25px 0 7px;
}

/* <i> est utilisée comme balise de suffixe (#2, #3…) sur les noms d'éléments.
   La balise <em> remplace <i> pour l'italique sémantique. */
i {
    display: inline-block;
    font-size: 75%;
    font-weight: 100;
    font-style: normal;
    font-family: var(--ffBase);
}
/*!*********************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/30_base.css ***!
  \*********************************************************************************************************************/
/* inutilisé 2026-06-13
#divBody {
    max-width: 920px;
    margin: 0 auto;
    padding: 10px;
}
*/

.contenu {
    padding: 10px 40px;
}

.zoneFlash {
    max-width: 1155px;
    margin: 0 auto 20px;
    min-height: 38px; /* Hauteur d'un message flash (padding 12px * 2 + font 14px) */
}

.zoneFlash .alertSucces,
.zoneFlash .alertErreur {
    margin-bottom: 10px;
}

.zoneFlash .alertSucces:last-child,
.zoneFlash .alertErreur:last-child {
    margin-bottom: 0;
}

/* Box de rappel (lecture seule) */
.divRappel {
    background: var(--cBlanc);
    border-left: var(--border);
    border-right: var(--border);
    padding: 20px 40px 25px;
    width: 335px;
    margin: 0;
}

.divRappel h3 {
    padding: 0;
    margin: 0 0 20px 0;
}

/* CTA dans les blocs divRappel : taille contenu, aligné à gauche */
.divRappel .ctaValider,
.divRappel .ctaSecondaire {
    width: fit-content;
    height: auto;
    text-align: left;
    justify-content: flex-start;
}

@media (max-width: 800px) {
    .contenu {
        padding: 10px 20px;
    }
}

/* inutilisé 2026-06-13
.divCentre {
    text-align: center;
    margin: 0 auto;
    max-width: 1200px;
    padding: 20px;
}
*/

body {
    font: var(--fText16);
    overflow-x: hidden;
    width: 100%;
    margin: 0;
    padding: 0;
    color: var(--cNoir1);
    background-color: var(--cBackground);
}

#bodyPage {
    max-width: 1280px;
    margin: 10px auto;
}

/* inutilisé 2026-06-13
.marge2 {
    margin: 5px auto;
    padding: 0 20px;
}
*/

@media all and (min-width: 750px) {
    /* inutilisé 2026-06-13
    .marge2 {
        margin: 10px auto;
        padding: 0 20px;
    }
    */
}

/* inutilisé 2026-06-13
#centrePage {
    max-width: 1440px;
    margin: 0 auto;
    width: 100%;
}

#divPage {
    margin: 25px 10px 50px;
    min-height: 25vh;
}

#quiSuisJe {
    display: flex;
    justify-content: space-between;
    flex-direction: row;
    font: var(--fLight14);
}
#quiSuisJeLogout {
    display: flex;
    align-items: center;
    gap: 6px;
    opacity: .7;
}

#quiSuisJeLogout:hover {
    background: transparent;
    color: var(--cLink);
    opacity: 1;
}
*/
/* inutilisé 2026-06-13
#divHeader {
    display: flex;
    align-items: center;
    justify-content: space-between;

}
*/
/*!********************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/31_cta.css ***!
  \********************************************************************************************************************/
button {
    user-select: none;
    -webkit-user-select: none;
    display: inline-block;
    cursor: pointer;
    margin: 0;
    color: var(--cCta);
    font: var(--fCta16);
    text-decoration: none;
}

button.ctaAnnuler,
a {
    font: var(--fText16);
    color: var(--cLink);
    background: transparent;
    border: transparent;
    text-decoration: none;
}

button.ctaAnnuler,
a.ctaAnnuler {
    display: block;
    margin: 20px 0;
    padding: 0;
    color: var(--cNoir3);
}

button.btn, a.btn {
    min-width: 180px;
    cursor: pointer;
    border: 0;
    color: var(--cCtat);
    background-color: var(--cCta);
    font: var(--fCta16);
    text-align: center;
    transition: all 0.3s;
    position: relative;
    padding: 15px 20px;
    margin: 10px 0;
    border-radius: var(--borderR1);
    width: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
    gap: var(--gapMoyen); /* aligné 10 -> 12px (échelle PO 2026-07-18) */
}

a.btn:hover, button.btn:hover {
    color: var(--cCtath);
    background-color: var(--cCtah);

}

/* inutilisé 2026-06-13
button.btn2, a.btn2 {
    min-width: 100px;
    display: block;
    cursor: pointer;
    border: 0;
    font: var(--fCta20);
    padding: 20px 40px;
    margin: 20px auto;
    text-align: center;
    transition: all 0.3s;
    color: var(--cTexte1);
    position: relative;
    background-repeat: round;
    width: fit-content;
    border-radius: 12px;
}

button#redirection.btn2 {
    background-color: transparent;
}

button#redirection.btn2:hover,
a.btn2:hover, button.btn2:hover {
    color: var(--cCtath);
    background-color: var(--cCtah);
}
*/

/* ============================================
   CTA COMPACT — socle .cta14

   LA silhouette des boutons d'action compacts (barres d'action, cartes) :
   forme, police, dimensions définies ici et nulle part ailleurs. Modèle :
   le bouton de la barre de contrôle démo (décision PO 2026-07-18).
   Se pose à côté du rôle qui apporte sa couleur : class="cta14 ctaDemoControle".
   14 = la taille de police (--fMenu14). Silhouette formulaire à venir : .cta18.
   ============================================ */

.cta14 {
    display: inline-block; /* un <a> hors barre flex reste un bouton (padding vertical réel) */
    padding: var(--paddingCta14);
    font: var(--fMenu14);
    border: none;
    border-radius: var(--borderR1);
    cursor: pointer;
    transition: background 0.2s, color 0.2s, border-color 0.2s;
}

.cta14:disabled {
    opacity: 0.4;
    cursor: auto;
}

/* Rôle démo : LE bouton qui lance une démonstration — violet démo, partout
   (catalogue, page Modifier, fiches d'animation). Une démo = violet,
   décision PO 2026-07-18. */
.ctaDemo {
    background: var(--cTest5_a);
    color: var(--cBlanc);
}

.ctaDemo:hover {
    background: var(--cVTest5_ah);
}

/* ============================================
   BADGE MODE TEST - Réutilisable partout
   ============================================ */

.badgeModeTest {
    display: inline-block;
    padding: 3px 12px;
    font: var(--fLabel);
    color: var(--cBlanc);
    background: var(--cTest3);
    border-radius: 10px;
    margin: 10px 0;
}
/*!*********************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/42_auth.css ***!
  \*********************************************************************************************************************/
/* ==========================================================================
   Pages d'authentification (login, register, inscription)
   ========================================================================== */

.authForm {
    padding: 40px 20px 20px;
    display: flex;
    justify-content: center;
}

/* Box de connexion / inscription */
.boxCenterForm {
    background: var(--cBlanc);
    border: var(--border);
    border-radius: var(--borderR2);
    padding: 30px 40px 40px;
    width: min(365px, 95%);
    box-shadow: 0 2px 10px var(--cOmbre);
    margin: 0;
}

.boxCenterForm h3 {
    padding: 0;
    margin: 0 0 20px 0;
    text-align: center;
}

/* inutilisé 2026-06-13
.boxCenterForm .sousTitre {
    font: var(--fLight14);
    text-align: center;
    margin: 0 0 20px 0;
}
*/

form > div {
    margin-bottom: 15px;
}

.boxCenterForm .ctaValider {
    margin-top: 5px;
}

/* Actions du formulaire (valider + annuler) */
.formActions {
    margin-top: 10px;
}

/* inutilisé 2026-06-13
.formActionsFlex {
    margin-top: 10px;
}

@media (min-width: 500px) {
    .formActionsFlex {
        display: flex;
        flex-direction: row-reverse;
        gap: 15px;
    }

    .formActionsFlex .ctaValider,
    .formActionsFlex .ctaSecondaire {
        width: auto;
        flex: 0 1 auto;
    }
}
*/

/* Alertes */
.alertErreur,
.alertErreurOAuth,
.alertSucces {
    background: var(--cRouge6);
    color: var(--cBlanc);
    padding: var(--paddingMiniDiv);
    margin-bottom: 20px;
    font: var(--fText16);
}

/* Message d'erreur inline OAuth */
.alertErreurOAuth {
    margin-top: 10px;
}

.alertSucces {
    background: var(--cSuccesFond);
    border: 1px solid var(--cSucces);
    color: var(--cSuccesTexte);
}

/* Lien vers autre page auth */
/* inutilisé 2026-06-13
.lienAuth {
    text-align: center;
    margin-top: 25px;
    padding-top: 20px;
    border-top: var(--border);
    font: var(--fLight14);
    font-style: normal;
}

.lienAuth a {
    color: var(--cLink);
}

.lienAuth a:hover {
    color: var(--cBlanc);
    background: var(--cCtah);
}
*/

/* Séparateur OAuth */
.boxCenterForm hr {
    margin: 50px 0;
    border: none;
    border-top: var(--border);
}

/* Séparateur avec espace blanc */
hr.separateur {
    margin: 30px 0;
    border: none;
    border-top: var(--border);
}

/* Bouton OAuth */
.btnOAuth {
    display: flex;
    flex-direction: row;
    align-items: center;
    justify-content: flex-start;
    gap: var(--gapLarge); /* aligné 16 -> 20px (échelle PO 2026-07-18) */
    width: 100%;
    padding: 8px 12px;
    border: 1px solid var(--cNoir1);
    border-radius: var(--borderR1);
    background: var(--cBlanc);
    color: var(--cNoir1);
    font: var(--fCta16);
    text-align: left;
    cursor: pointer;
    transition: all 0.2s;
}

.btnOAuth:hover {
    background: var(--cEnTete);
    color: var(--cNoir1);
}

.btnOAuth svg {
    width: 40px;
    height: 40px;
}

/* État de chargement du formulaire */
.formEnChargement {
    pointer-events: none;
}

.formEnChargement input,
.formEnChargement select,
.formEnChargement textarea,
.formEnChargement label {
    opacity: 0.5;
}


/*!******************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/hautDePageCompte.css ***!
  \******************************************************************************************************************************/
/* ============================================
   HAUT DE PAGE COMPTE
   Header simplifié pour l'espace compte Vitrine
   Logo gauche, menu droite
   ============================================ */

#hautDePageCompte {
    display: flex;
    align-items: center;
    justify-content: space-between;
    height: 42px;
    padding: 0 40px;
    border-bottom: var(--border);
}

/* ============================================
   LOGO À GAUCHE
   ============================================ */

#hautDePageCompte .headerLogo {
    flex-shrink: 0;
    display: flex;
    align-items: center;
}

#hautDePageCompte .headerLogo a {
    display: flex;
    align-items: center;
}

#hautDePageCompte .headerLogo svg {
    height: 28px;
    aspect-ratio: 245 / 36;
}

/* ============================================
   NAVIGATION COMPTE À DROITE
   ============================================ */

#headerNavCompte {
    display: flex;
    align-items: center;
}

#headerNavCompte ul {
    display: flex;
    list-style: none;
    align-items: center;
    margin: 0;
    padding: 0;
    gap: var(--gapDefaut);
}

#headerNavCompte ul li a {
    font: var(--fMenu14);
    color: var(--cLink);
    padding: 8px 16px;
    border-radius: var(--borderR1);
    transition: all 0.2s ease;
    display: block;
}

#headerNavCompte ul li a:hover {
    background-color: var(--cCta);
    color: var(--cCtat);
}

#headerNavCompte ul li a.active {
    background-color: var(--cCta);
    color: var(--cCtat);
}

/* ============================================
   RESPONSIVE - MOBILE < 600px
   ============================================ */

@media (max-width: 600px) {
    #hautDePageCompte {
        padding: 0 16px;
        justify-content: flex-end;
    }

    #hautDePageCompte .headerLogo {
        display: none;
    }
}

@media (max-width: 400px) {
    #headerNavCompte ul li a {
        padding: 8px 12px;
        font-size: 13px;
    }
}

/*!**********************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/regie/css/53_blocs.css ***!
  \**********************************************************************************************************************/
/* ============================================
   BLOCS - Composant générique Régie
   ============================================

   ⚠️ Un SOUS-ENSEMBLE « carte » de ce composant est copié dans
   studioVitrine/assets/vitrine/css/blocs.css (partie .bloc / .blocCorps /
   .blocTitre / .blocTexte / .blocActions uniquement, pour la liste des
   scénarios de démo). Si tu modifies l'une de ces règles ici → demander au PO
   s'il faut la répercuter sur la copie vitrine. Le reste du composant (stats,
   compteur, réordonnancement, formulaires) est propre à la régie.

   Composant unifié pour tous les blocs de type :
   Icône | Contenu | Actions

   Structure HTML :
   <div class="bloc blocGroupe">  ← blocGroupe conservé pour TS
       <div class="blocIcone">...</div>
       <div class="blocCorps">
           <h4 class="blocTitre">...</h4>
           <p class="blocTexte">...</p>
       </div>
       <div class="blocActions">...</div>
   </div>

   LE conteneur de contenu Régie (décision PO 2026-07-18) : toute boîte
   « titre + texte + actions » adopte ce composant — cartes du catalogue de
   scénarios, blocs de la page Modifier, blocs d'onglet. Zones optionnelles ;
   les contextes n'apportent que des modificateurs (couleur, largeur).

   Modificateurs de catégorie (couleurs d'icône) :
   - .blocGroupes (ou .blocGroupe pour compat TS)
   - .blocDistributions
   - .blocTelecharger
   - .blocGroupe (mode test, compat TS)

   ============================================ */

/* ══════════════════════════════════════
   CONTENEUR PRINCIPAL
   ══════════════════════════════════════ */

.bloc {
    display: flex;
    align-items: stretch;
    max-width: 600px;
    background: var(--cBlanc);
    border: var(--borderForm);
    border-radius: var(--borderR1);
    overflow: hidden;
    transition: box-shadow 0.2s;
}

/* ══════════════════════════════════════
   ZONE ICÔNE (wrapper uniquement)
   Le style des img/svg et les couleurs de fond
   par catégorie sont centralisés dans 54_icones.css
   ══════════════════════════════════════ */

.blocIcone {
    display: flex;
    justify-content: flex-start;
    padding: 0 4px 0 0;
}

/* ══════════════════════════════════════
   ZONE CONTENU
   ══════════════════════════════════════ */

.blocCorps {
    flex: 1;
    padding: 16px 20px;
    display: flex;
    flex-direction: column;
    gap: var(--gapReduit);
}

.blocTitre {
    font: var(--fH4);
    color: var(--cNoir1);
    margin: 0;
}

.blocTexte {
    font: var(--fText16);
    color: var(--cNoir3);
    margin: 0;
}

/* inutilisé 2026-06-13
.blocSousTitre {
    font: var(--fMenu14);
    color: var(--cNoir3);
}
*/

/* ══════════════════════════════════════
   ZONE ACTIONS
   ══════════════════════════════════════ */

.blocActions {
    display: flex;
    flex-direction: column;
    justify-content: flex-start;
    gap: var(--gapDefaut);
    padding: 16px 20px;
    border-left: var(--border);
    min-width: 240px;
}

.blocActions .toggleAvecLabel {
    justify-content: space-between;
}

/* ══════════════════════════════════════
   STATS (nombre + label)
   ══════════════════════════════════════ */

.blocStats {
    display: flex;
    align-items: baseline;
    gap: var(--gapDefaut); /* aligné 6 -> 8px (échelle PO 2026-07-18) */
    margin-top: 4px;
}

.blocNombre {
    font: var(--fMono24b);
    color: var(--cNoir1);
}

.blocLabel {
    font: var(--fText16);
    color: var(--cNoir3);
}

/* ══════════════════════════════════════
   COMPTEUR (gros chiffre avec séparateur)
   ══════════════════════════════════════ */

.blocCompteur {
    display: flex;
    align-items: baseline;
    gap: var(--gapDefaut);
}

.compteurValeur {
    font: var(--fMono24b);
    color: var(--cNoir1);
}

.compteurReste {
    display: flex;
    align-items: baseline;
    gap: var(--gapDefaut);
}

/* display:flex écraserait l'attribut hidden → on le rétablit explicitement. */
.compteurReste[hidden] {
    display: none;
}

.compteurSeparateur {
    font: var(--fH3);
    color: var(--cNoir4);
}

.compteurLabel {
    font: var(--fText16);
    color: var(--cNoir3);
}

/* ══════════════════════════════════════
   DATE / INFO SECONDAIRE
   ══════════════════════════════════════ */

.blocDate /*, .blocTest (inutilisé 2026-06-13) */, .blocReferences {
    font: var(--fLight14);
    color: var(--cNoir1);
    margin-top: auto;
}

/* Infos secondaires empilées en bas de carte : seule la première prend l'espace libre */
.blocReferences + .blocReferences,
.blocReferences + .blocDate {
    margin-top: 0;
}

/* inutilisé 2026-06-13
.blocTest {
    color: var(--cTest3);
}
*/

/* ══════════════════════════════════════
   LISTE D'ITEMS (lots)
   ══════════════════════════════════════ */

.blocListe {
    list-style: none;
    margin: 12px 0 0 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: var(--gapDefaut);
}

.blocItem {
    display: flex;
    align-items: center;
    gap: var(--gapMoyen);
    padding: 8px 12px;
    background: var(--cBlanc02);
    border-radius: var(--borderR1);
}

.blocItemImage {
    width: 32px;
    height: 32px;
    object-fit: cover;
    border-radius: var(--borderR1);
}

.blocItemLabel {
    flex: 1;
    font: var(--fText16);
    color: var(--cNoir1);
}

.blocItemStock {
    font: var(--fText16);
    color: var(--cNoir1);
}

.panneauFormulaire form > div.blocVertical,
.sectionFormulaire > div.blocVertical {
    display: flex;
    flex-direction: column;
    gap: var(--gapMoyen); /* aligné 10 -> 12px (échelle PO 2026-07-18) */
    padding: 15px 0;
    margin: 30px 20px 30px;
    border-top: var(--border);
}

/* Dans une section canonique, le retrait horizontal est porté par la section elle-même */
.sectionFormulaire > div.blocVertical {
    margin: 15px 0 12px;
}

/* ══════════════════════════════════════
   RÉORDONNANCEMENT (poignée + flèches)
   ══════════════════════════════════════ */

.listeOrdrePoignee {
    width: 14px;
    color: var(--cNoir4);
    cursor: grab;
}

.listeOrdrePoignee:active {
    cursor: grabbing;
}

.divActionClasser {
    display: flex;
    gap: var(--gapReduit);
    margin-left: auto;
}

/* Petit bouton icône compact (flèches, +/−, etc.) */
.miniAction {
    background: none;
    border: var(--border);
    border-radius: var(--borderR1);
    cursor: pointer;
    padding: 2px 8px;
    font: var(--fLabel);
    color: var(--cNoir1);
}

.miniAction:disabled {
    opacity: 0.3;
    cursor: default;
}

.miniAction:not(:disabled):hover {
    background: var(--cBlanc02);
}

.listeOrdreItem.dragging {
    opacity: 0.3;
}

/* ══════════════════════════════════════
   RESPONSIVE
   ══════════════════════════════════════ */

@media (max-width: 600px) {
    .bloc {
        flex-direction: column;
    }

    .blocActions {
        flex-direction: column;
        align-items: flex-end;
        border-left: none;
        border-top: var(--border);
        padding: 12px 20px;
    }
}

/*!***********************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/regie/css/54_icones.css ***!
  \***********************************************************************************************************************/
/* ============================================
   ICÔNES - Styles pour les briques et les blocs
   ============================================

   Ce fichier centralise le style visuel des icônes
   utilisées à la fois dans :
   - les briques du menu d'ajout (.briqueIcone sur img/svg)
   - les blocs de résumé (img/svg dans .blocIcone)

   Le wrapper .blocIcone lui-même (flex, padding) reste
   dans 53_blocs.css car c'est de la structure de composant.

   ============================================ */

/* Style de base */
.briqueIcone,
.blocIcone img,
.blocIcone svg {
    width: 64px;
    height: 64px;
    padding: 6px;
    object-fit: contain;
    border-radius: var(--borderR1);
    box-sizing: border-box;
}

/* ============================================
   FONDS PAR CATÉGORIE
   ============================================ */

.briqueGroupes .briqueIcone,
.blocGroupe .blocIcone img,
.blocGroupe .blocIcone svg,
.blocTelecharger .blocIcone img,
.blocTelecharger .blocIcone svg { background: var(--cFondGroupes); }

.briqueDistributions .briqueIcone,
.blocDistribution .blocIcone img,
.blocDistribution .blocIcone svg { background: var(--cFondDistributions); }

.briqueConfigurations .briqueIcone,
.briqueConfig .briqueIcone { background: var(--cFondConfig); }

.briqueScenes .briqueIcone { background: var(--cFondScenes); }

.briqueAffichages .briqueIcone { background: var(--cFondAffichages); }

/* ============================================
   ICÔNE D'UN SCÉNARIO
   ============================================

   Toujours à DROITE, et SANS fond (décision PO 2026-07-31) : les fonds ci-dessus
   codent une catégorie de brique, un scénario n'en a aucune.

   Le SVG est inliné (iconeScenario), pas en <img> : scenarios/{dossier}/icone.svg
   est hors public/. 64px = taille d'icône standard du projet.
   ============================================ */

.scenarioIcone {
    flex: 0 0 auto;
    align-self: flex-start;
    margin-left: auto;
    width: 64px;
    height: 64px;
    box-sizing: border-box;
}

.scenarioIcone svg {
    display: block;
    width: 100%;
    height: 100%;
}

/* Dans une carte du catalogue, l'icône se cale sur le padding du corps du bloc. */
.creerScenarioCarte .scenarioIcone {
    margin: 16px 20px 16px auto;
}

/* Page d'un scénario : description à gauche, icône à droite. */
.scenarioEntete {
    display: flex;
    align-items: flex-start;
    gap: var(--gapDefaut);
}

/*!*********************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/regie/css/55_sidebarEvenement.css ***!
  \*********************************************************************************************************************************/
/* ============================================
   SIDEBAR GESTION ÉVÉNEMENT
   ============================================ */

/* inutilisé 2026-06-13
#gestionEvenement {
    display: flex;
    min-height: calc(100vh - 60px);
}
*/

/* ============================================
   SIDEBAR
   ============================================ */

/* inutilisé 2026-06-13
#sidebarEvenement {
    width: 200px;
    min-width: 200px;
    background: var(--cBlanc02);
    border-right: var(--border);
    display: flex;
    flex-direction: column;
}

#sidebarEntete {
    padding: 20px 15px;
    border-bottom: var(--border);
}

#ctaSidebarRetour {
    font: var(--fMenu14);
    color: var(--cLink);
    display: block;
    margin-bottom: 10px;
}

#ctaSidebarRetour:hover {
    color: var(--cLinkh);
}

#sidebarTitre {
    font: var(--fH3);
    color: var(--cNoir1);
    margin: 0;
    word-break: break-word;
}
*/

/* ============================================
   MENU SIDEBAR
   ============================================ */

/* inutilisé 2026-06-13
#sidebarMenu {
    list-style: none;
    margin: 0;
    padding: 15px 0;
}

#sidebarMenu li {
    margin: 0;
}

#sidebarMenu a {
    display: block;
    padding: 12px 20px;
    font: var(--fMenu14);
    color: var(--cNoir2);
    border-left: 3px solid transparent;
    transition: background 0.15s, border-color 0.15s;
}

#sidebarMenu a:hover {
    background: var(--cBlanc03);
}

#sidebarMenu a.active {
    background: var(--cBlanc1);
    border-left-color: var(--cCta);
    color: var(--cCta);
    font-weight: 700;
}
*/

/* ============================================
   CONTENU PRINCIPAL
   ============================================ */

/* inutilisé 2026-06-13
#gestionContenu {
    flex: 1;
    padding: 30px 40px;
    background: var(--cBlanc1);
    overflow-y: auto;
}
*/

/* ============================================
   BLOC COULEURS (formulaire création)
   ============================================ */

.titreEvenement {
    display: flex;
    align-items: center;
    gap: var(--gapMoyen); /* aligné 10 -> 12px (échelle PO 2026-07-18) */
}

/* Action de l'en-tête (engrenage config ou croix de fermeture) poussée tout à droite. */
.titreEvenementAction {
    margin-left: auto;
}

.btnConfigOnglets {
    display: inline-flex;
    width: 22px;
    height: 22px;
    color: var(--cNoir4);
    transition: color 0.2s;
}

.btnConfigOnglets:hover {
    color: var(--cNoir1);
}

.blocOnglets {
    margin: 15px 0;
}

/* Titre sans icône : padding explicite */
.titreFormulaireSansIcone {
    padding: 12px 20px;
}

.blocOngletsEntrees .svgCb {
    color: var(--cFondGroupes);
}

.blocOngletsExtras .svgCb {
    color: var(--cFondDistributions);
}

.blocCouleurs {
    margin: 15px 0;
}

.blocCouleurs > label {
    display: block;
    font: var(--fLabel);
    color: var(--cNoir3);
    margin-bottom: 8px;
}

.contenuCouleurs {
    display: flex;
    flex-wrap: wrap;
    gap: var(--gapLarge);
    align-items: flex-start;
}

.ligneCouleurs {
    display: flex;
    gap: var(--gapLarge);
}

.champCouleur {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--gapReduit);
}

.champCouleur input[type="color"] {
    width: 50px;
    height: 40px;
}

.champCouleur span {
    font: var(--fLight14);
    color: var(--cNoir4);
}

/* Aperçu Configuration Fond */
#previsualisationConfigFond {
    min-height: 200px;
    margin: 20px;
    padding: var(--paddingCorps);
    background-color: var(--cBlanc03);
    background-size: cover;
    background-position: center;
    display: flex;
    align-items: center;
    justify-content: center;
}

#previsualisationConfigFondCarte {
    padding: 20px 28px;
    border-radius: var(--borderR1);
    display: flex;
    flex-direction: column;
    gap: var(--gapDefaut);
    min-width: 200px;
    transition: background-color 0.3s ease, background 0.3s ease, border 0.3s ease, box-shadow 0.3s ease;
}

#previsualisationTitreFond {
    font: var(--fH3);
    margin: 0;
}

#previsualisationTexteFond {
    font: var(--fText16);
    margin: 0;
}

/* ============================================
   ENTÊTE SECTION (bouton ajouter)
   ============================================ */

/* inutilisé 2026-06-13
.enteteSection {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: var(--gapLarge);
    margin-bottom: 20px;
}

.enteteSection h1 {
    margin: 0 0 5px;
}

.enteteSection p {
    margin: 0;
    color: var(--cNoir4);
}

.compteur {
    font: var(--fLight14);
    color: var(--cNoir4);
    margin: 0 0 20px;
}
*/

/* ============================================
   TABLE DE GESTION
   ============================================ */

/* inutilisé 2026-06-13
.tableGestion {
    width: 100%;
    border-collapse: collapse;
    background: var(--cBlanc);
    border: var(--border);
    border-radius: var(--borderR1);
}

.tableGestion th,
.tableGestion td {
    padding: 12px 15px;
    text-align: left;
    border-bottom: var(--border);
}

.tableGestion th {
    font: var(--fMenu14);
    color: var(--cNoir3);
    background: var(--cBlanc02);
}

.tableGestion tbody tr:last-child td {
    border-bottom: none;
}

.tableGestion tbody tr:hover {
    background: var(--cBlanc02);
}

.tableGestion .colActions {
    width: 100px;
    text-align: center;
}

.tableGestion .colNombre {
    width: 100px;
    text-align: center;
}

.tableGestion .epuise {
    color: var(--cRouge);
    font-weight: 700;
}
*/

/* Boutons icônes */
/* inutilisé 2026-06-13
.btnIcone {
    background: none;
    border: none;
    padding: 6px;
    cursor: pointer;
    color: var(--cNoir4);
    border-radius: var(--borderR1);
    transition: background 0.15s, color 0.15s;
}

.btnIcone:hover {
    background: var(--cBlanc03);
    color: var(--cNoir1);
}

.btnIcone svg {
    width: 18px;
    height: 18px;
    display: block;
}
*/

/* ============================================
   MODALE (dialog)
   ============================================ */

dialog {
    border: none;
    border-radius: var(--borderR2);
    box-shadow: 0 10px 40px var(--cOmbreForte);
    padding: 0;
    /* Pas de taille sur le sélecteur d'élément : elle contraindrait TOUS les
       <dialog> (la surcouche démo 16/9 du noyau y est passée). La taille est
       portée « en plus » par la classe de chaque modale — .modale : 500px
       (décision PO 2026-07-18). */
}

dialog::backdrop {
    background: var(--cOverlay);
}

dialog form {
    padding: 25px;
}

dialog h3 {
    margin: 0 0 20px;
    font: var(--fH3);
}

/* inutilisé 2026-06-13
.champFormulaire {
    margin-bottom: 15px;
}

.champFormulaire label {
    display: block;
    font: var(--fMenu14);
    color: var(--cNoir3);
    margin-bottom: 5px;
}

.champFormulaire input,
.champFormulaire textarea {
    width: 100%;
    padding: 10px 12px;
    font: var(--fText16);
    border: var(--border);
    border-radius: var(--borderR1);
    box-sizing: border-box;
}

.champFormulaire input:focus,
.champFormulaire textarea:focus {
    outline: none;
    border-color: var(--cCta);
}

.champFormulaire input[type="number"] {
    width: 100px;
}
*/

/* inutilisé 2026-06-13
.actionsModale {
    display: flex;
    justify-content: flex-end;
    gap: 10px;
    margin-top: 25px;
}
*/

/* ============================================
   RESPONSIVE
   ============================================ */

@media (max-width: 768px) {
    /* inutilisé 2026-06-13
    #gestionEvenement {
        flex-direction: column;
    }

    #sidebarEvenement {
        width: 100%;
        min-width: 100%;
        border-right: none;
        border-bottom: var(--border);
    }

    #sidebarMenu {
        display: flex;
        flex-wrap: wrap;
        padding: 10px;
        gap: 5px;
    }

    #sidebarMenu a {
        padding: 8px 12px;
        border-left: none;
        border-radius: var(--borderR1);
    }

    #sidebarMenu a.active {
        border-left: none;
        background: var(--cCta);
        color: var(--cCtat);
    }

    #gestionContenu {
        padding: 20px;
    }
    */

    /* Entête section responsive */
    /* inutilisé 2026-06-13
    .enteteSection {
        flex-direction: column;
        gap: 15px;
    }
    */

    /* Table responsive */
    /* inutilisé 2026-06-13
    .tableGestion {
        display: block;
        overflow-x: auto;
    }

    .tableGestion th,
    .tableGestion td {
        padding: 10px;
    }
    */
}

/*!***************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/regie/css/55_evenements.css ***!
  \***************************************************************************************************************************/
/* ============================================
   LISTE DES ÉVÉNEMENTS
   ============================================ */

/* Deux boutons de création côte à côte, au-dessus de la liste */
.barreCreationEvenement {
    display: flex;
    gap: var(--gapMoyen);
    margin-top: 30px;
}

/* Liste : un événement par ligne. Table = colonnes alignées sur toutes les lignes. */
.tableEvenements {
    width: 100%;
    border-collapse: collapse;
    margin-top: var(--gapLarge);
}

.tableEvenements th {
    font: var(--fMenu14);
    color: var(--cNoir3);
    text-align: left;
    padding: var(--gapMoyen) var(--gapLarge);
}

.tableEvenements td {
    padding: var(--gapMoyen) var(--gapLarge);
    border-top: var(--border);
    vertical-align: middle;
}

/* Survol : repère visuel de la ligne courante (pas une sélection) */
.tableEvenements tbody tr:hover {
    background: var(--cBlanc02);
}

/* Seule la colonne titre absorbe l'espace ; les autres se calent sur leur contenu */
.tableEvenements th:not(:first-child),
.tableEvenements td:not(:first-child) {
    width: 1%;
    white-space: nowrap;
}

/* Alignement : titre à gauche, Statut et Date centrés, Supprimer à droite */
.tableEvenements th:nth-child(2),
.tableEvenements td:nth-child(2),
.tableEvenements th:nth-child(3),
.tableEvenements td:nth-child(3) {
    text-align: center;
}

.tableEvenements th:last-child,
.tableEvenements td:last-child {
    text-align: right;
}

.ligneEvenementNom {
    font: var(--fH4);
    color: var(--cLink);
}

.ligneEvenementNom:hover {
    color: var(--cLinkh);
    text-decoration: underline;
}

.ligneEvenementDate {
    font: var(--fLight14);
    color: var(--cNoir3);
}

/* Actions de la ligne : Ouvrir / Supprimer, côte à côte, alignées à droite */
.ligneEvenementActions {
    display: flex;
    justify-content: flex-end;
    align-items: center;
    gap: var(--gapMoyen);
}

.lienOuvrirEvenement {
    font: var(--fText16);
    color: var(--cLink);
}

.lienOuvrirEvenement:hover {
    color: var(--cLinkh);
    text-decoration: underline;
}

/* Suppression : bouton d'un form POST, présenté comme un lien (pas de chrome natif) */
.lienSupprimerEvenement {
    background: none;
    border: none;
    padding: 0;
    font: var(--fText16);
    color: var(--cRouge);
    cursor: pointer;
}

.lienSupprimerEvenement:hover {
    text-decoration: underline;
}

/* Statut : Préparer / Tester / Diffuser (vocabulaire des onglets) */
.statutEvenement {
    display: inline-block;
    padding: var(--paddingEtiquette);
    border-radius: var(--borderR1);
    font: var(--fMenu14);
}

.statutPreparer {
    background: var(--cBlanc02);
    color: var(--cNoir3);
}

.statutTester {
    background: var(--cTest);
    color: var(--cTest3);
}

.statutDiffuser {
    background: var(--cSuccesFond);
    color: var(--cSuccesTexte);
}

/*!**************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/regie/css/56_rubriques.css ***!
  \**************************************************************************************************************************/
/* ============================================
   GRILLE DES GRANDES CATÉGORIES (étape 2 : créer depuis un scénario)
   Même patron que la grille des événements (55_evenements.css) : flex-wrap +
   cartes à largeur fixe, pas de grille étirée en 1fr. Dimensions et espacements
   pris sur les tokens du projet (largeur de carte 334px, gaps, bordure de carte).
   ============================================ */

#grilleRubriques {
    display: flex;
    flex-wrap: wrap;
    gap: var(--gapLarge);
    margin-top: 30px;
}

.carteRubrique {
    width: 334px;
    box-sizing: border-box;
    display: grid;
    grid-template-columns: 1fr auto;
    column-gap: var(--gapMoyen);
    row-gap: var(--gapDefaut);
    align-content: start;
    padding: var(--paddingCorps);
    background: var(--cBlanc);
    border: var(--borderCarte);
    border-radius: var(--borderR1);
    color: var(--cNoir1);
    transition: background-color 0.3s;
}

.carteRubrique:hover {
    background: var(--cBlanc02);
}

.carteRubriqueNom {
    grid-column: 1;
    grid-row: 1;
    align-self: center;
    margin: 0;
    font: var(--fH3);
}

.carteRubriqueAccroche {
    grid-column: 1 / -1;
    margin: 0;
    font: var(--fText16);
    color: var(--cNoir2);
}

/* Icône SVG inline (stroke: currentColor → colorée par la propriété color) */
.carteRubriqueIcone {
    grid-column: 2;
    grid-row: 1;
    align-self: center;
    color: var(--cCta);
}

.carteRubriqueIcone svg {
    width: 48px;
    height: 48px;
    display: block;
}

/*!************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/regie/css/55_filtres.css ***!
  \************************************************************************************************************************/
/* ============================================
   FILTRES — composant commun (« une classe = un design »)

   ⚠️ COPIE ASSUMÉE — jumelle de studioVitrine/assets/vitrine/css/filtres.css.
   Identique au départ. Toute modification ici → demander au PO s'il faut la répercuter
   sur le jumeau vitrine. Les deux copies peuvent diverger selon les besoins de chaque côté
   (régie = outil connecté ; vitrine = funnel public, cachable, SEO).

   UN SEUL design de panneau de filtres pour toute la régie : catalogue
   « Créer à partir d'un scénario » et menu « Ajouter » (section Scenes).
   Les #id des panneaux (#divFiltreScenario, #divFiltreScene) ne servent
   qu'au TypeScript et aux réglages propres à une page — jamais au design.

   .divFiltreZone     la rangée : panneau à gauche, contenu filtré à droite
   .divFiltre         le panneau vertical de filtres
   .titreFiltre       titre du panneau
   .divFiltreGroupe   groupe de puces (+ .plie : replié, seuls les actifs restent visibles)
   .titreGroupeFiltre titre d'un groupe, cliquable (chevron), replie/déplie (pliageFiltres.ts)
   .filtre            la puce cliquable (+ .actif : fond gris + coche ✓ à droite)
   ============================================ */

.divFiltreZone {
    display: flex;
    gap: var(--gapListe); /* aligné 20 → 32px (décision PO 2026-07-18) */
    align-items: flex-start;
}

.divFiltre {
    flex: 0 0 280px;
    display: flex;
    flex-direction: column;
    gap: var(--gapDefaut);
    padding: var(--paddingCorps);
    background: var(--cBlanc02);
    border: var(--border);
    border-radius: var(--borderR2);
}

.titreFiltre {
    font: var(--fH4);
    color: var(--cNoir1);
    padding-bottom: var(--gapDefaut);
    border-bottom: var(--border);
}

.divFiltreGroupe {
    display: flex;
    flex-direction: column;
    gap: var(--gapReduit);
}

/* Titre de groupe : cliquable, replie/déplie son groupe (TS pliageFiltres.ts pose .plie) */
.titreGroupeFiltre {
    position: relative;
    font: var(--fLabel);
    color: var(--cNoir3);
    margin-top: var(--gapDefaut);
    padding-right: 18px; /* place du chevron */
    cursor: pointer;
    user-select: none;
}

.titreGroupeFiltre:hover {
    color: var(--cNoir1);
}

/* Chevron dessiné en CSS (aucune icône chevron n'existe dans l'appli) : ▾ ouvert, ▸ plié */
.titreGroupeFiltre::after {
    content: '';
    position: absolute;
    right: 4px;
    top: 50%;
    width: 7px;
    height: 7px;
    border-right: 2px solid currentColor;
    border-bottom: 2px solid currentColor;
    transform: translateY(-70%) rotate(45deg);
    transition: transform 0.2s;
}

.divFiltreGroupe.plie .titreGroupeFiltre::after {
    transform: translateY(-50%) rotate(-45deg);
}

/* Groupe plié : seuls les filtres actifs restent apparents */
.divFiltreGroupe.plie .filtre:not(.actif) {
    display: none;
}

/* La puce : du texte, pas un bouton — le contour et le fond bleu plein appartiennent aux cta */
.filtre {
    position: relative;
    padding: 6px 26px 6px 12px; /* place réservée à droite pour la coche : rien ne bouge à la sélection */
    background: transparent;
    border: none; /* neutralise l'habillage natif des puces <button> */
    border-radius: var(--borderR1);
    color: var(--cNoir2);
    font: var(--fMenu14);
    text-align: left;
    cursor: pointer;
    user-select: none;
    transition: background 0.15s, color 0.15s;
}

/* Actif = le fond du survol qui reste (--cBlanc03 : fond existant des boutons discrets) */
.filtre:hover,
.filtre.actif {
    background: var(--cBlanc03);
    color: var(--cNoir1);
}

.filtre.actif::after {
    content: '✓';
    position: absolute;
    right: 8px;
    top: 50%;
    transform: translateY(-50%);
    color: var(--cNoir1);
}

/* inutilisé 2026-07-18 — premier design de la puce (contour + fond bleu cta), abandonné :
   il parlait la langue des cta (décision PO, pas de git : on garde la trace)
.filtre {
    padding: 6px 12px;
    background: var(--cBlanc);
    border: var(--borderCarte);
    border-radius: var(--borderR1);
}
.filtre:hover { border-color: var(--cCta); color: var(--cCta); }
.filtre.actif { background: var(--cCta); border-color: var(--cCta); color: var(--cCtat); }
.filtre.actif:hover { background: var(--cCtah); }
*/

/*!***********************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/regie/css/55_scenariosCatalogue.css ***!
  \***********************************************************************************************************************************/
/* ============================================
   CRÉER À PARTIR D'UN SCÉNARIO — Catalogue + filtres

   ⚠️ COPIE ASSUMÉE — jumelle de studioVitrine/assets/vitrine/css/scenariosCatalogue.css.
   Identique au départ. Toute modification ici → demander au PO s'il faut la répercuter
   sur le jumeau vitrine. Les deux copies peuvent diverger selon les besoins de chaque côté
   (régie = outil connecté ; vitrine = funnel public, cachable, SEO).

   Namespace « creerScenario » exclusif à cette page. NE PAS réutiliser « brique »,
   qui appartient aux cartes du builder de scénario (assets/regie/css/56_scenario/).
   ============================================ */

.creerScenarioIntro {
    font: var(--fText16);
    color: var(--cNoir3);
    margin-top: var(--gapDefaut);
}

/* Le design du panneau de filtres vient du composant commun (55_filtres.css). */
#creerScenario {
    margin-top: 30px;
}

/* La liste des scénarios est longue : le panneau suit le défilement (propre à cette page). */
#divFiltreScenario {
    position: sticky;
    top: 20px;
}

/* Liste des scénarios */
#creerScenarioListe {
    flex: 1;
    min-width: 0;
    max-width: 800px;
    display: flex;
    flex-direction: column;
    gap: var(--gapListe);
}

/* La carte EST un bloc (composant commun, 53_blocs.css — décision PO 2026-07-18) :
   la classe ne sert plus qu'au filtrage TS et aux réglages propres à la page. */
.creerScenarioCarte {
    max-width: none; /* la liste (800px) commande, pas le clamp 600px du bloc */
}

/* inutilisé 2026-07-18 — tags retirés des cartes (doublon des filtres avec un autre design)
.creerScenarioCarteTags {
    display: flex;
    flex-wrap: wrap;
    gap: var(--gapReduit);
}

.creerScenarioCarteTag {
    padding: 3px 10px;
    background: var(--cBlanc02);
    border: var(--borderCarte);
    border-radius: var(--borderR2);
    color: var(--cNoir3);
    font: var(--fLabel);
    cursor: pointer;
    user-select: none;
    transition: border-color 0.2s, background 0.2s, color 0.2s;
}

.creerScenarioCarteTag:hover {
    border-color: var(--cCta);
    color: var(--cCta);
}

.creerScenarioCarteTag.actif {
    background: var(--cCta);
    border-color: var(--cCta);
    color: var(--cCtat);
}
*/

/* La colonne d'actions de la carte est la zone .blocActions du composant. */

/* Boutons de la carte : .ctaDiscret (56_scenario/_modale.css), Configurer puis
   Démonstration. Pas de primaire/secondaire ni de violet ici : dans une liste,
   chaque carte répète les mêmes boutons — cinquante primaires n'ont aucun sens
   (décision PO 2026-07-18). Le violet démo reste aux boutons solo (.ctaDemo). */

.creerScenarioVide {
    font: var(--fText16);
    color: var(--cNoir3);
}

/* Masquage par le filtre */
.creerScenarioMasque {
    display: none !important;
}

/*!*********************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/regie/css/55_scenarioModifier.css ***!
  \*********************************************************************************************************************************/
/* ============================================
   MODIFIER CE SCÉNARIO — Composition par famille

   Namespace « modifierScenario » exclusif à cette page. Le stepper et les détails
   Entrées/Sorties réutilisent les classes du récapitulatif (56_scenario/_recapitulatif.css) ;
   ici uniquement le carrousel de remplaçantes, les fiches et la barre d'actions.
   ============================================ */

#modifierScenario {
    margin-top: 30px;
}

/* Les blocs de la page sont des .bloc (composant commun 53_blocs.css, décision
   PO 2026-07-18) ; ici uniquement les réglages propres à la page. */
#modifierScenario .bloc {
    position: relative; /* ancre l'icône absolue .recapTitreIcone (héritée du récap) */
    max-width: none; /* les tuiles du carrousel dépassent le clamp 600px du bloc */
}

/* Classe et non id : un carrousel par bloc, répété dans la page. */
.divActionChangerScene {
    display: flex;
    align-items: center;
    gap: var(--gapReduit); /* le padding vient du blocCorps */
}

.actionChangerScene {
    flex: 0 0 auto;
    width: 36px;
    height: 104px; /* même hauteur que les tuiles */
    background: var(--cBlanc);
    border: var(--borderCta);
    border-radius: var(--borderR1);
    color: var(--cCtaTexte);
    font: var(--fMenu14);
    cursor: pointer;
    transition: border-color 0.2s, color 0.2s;
}

.actionChangerScene:hover:not(:disabled) {
    border-color: var(--cCta);
    color: var(--cCta);
}

.actionChangerScene:disabled {
    opacity: 0.35;
    cursor: default;
}

.modifierScenarioIcones {
    display: flex;
    gap: var(--gapReduit);
    overflow-x: auto;
    padding: 10px; /* laisse respirer le halo de sélection malgré l'overflow */
    /* 8,5 icônes visibles au maximum : la demi-icône coupée signale qu'il y a une suite */
    max-width: calc(104px * 8.5 + var(--gapReduit) * 8);
}

.modifierScenarioIcone {
    flex: 0 0 auto;
    width: 104px;
    height: 104px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--cBlanc);
    border: var(--borderCarte);
    border-radius: var(--borderR1);
    cursor: pointer;
    transition: border-color 0.2s, background 0.2s;
}

/* Survol d'une tuile non retenue : ton clair de la famille (~50 % du fond), aperçu de
   l'activation. Défaut = animation, .recapBlocAffichage sur le bloc bascule en affichage. */
.modifierScenarioIcone:not(.actif):hover {
    background: var(--cFondScenes0);
}

.recapBlocAffichage .modifierScenarioIcone:not(.actif):hover {
    background: var(--cFondAffichages0);
}

/* Tuile retenue : fond plein de la famille + bordure CTA nette et halo. */
.modifierScenarioIcone.actif {
    background: var(--cFondScenes);
    border-color: var(--cNoir1);
    box-shadow: 0 0 0 2px var(--cFormFocusHalo);
    border-width: 2px;
}

.recapBlocAffichage .modifierScenarioIcone.actif {
    background: var(--cFondAffichages);
}

.modifierScenarioIcone img {
    width: 84px;
    height: 84px;
}

.modifierScenarioFiche {
    display: none;
}

.modifierScenarioFiche.actif {
    display: block;
}

/* Barre d'action de la fiche : sépare le bouton du descriptif (un bouton nu
   collé au texte, décision PO 2026-07-18). */
.divActionFiche {
    margin-top: var(--gapDefaut);
}

/* Bloc sans remplaçante : l'icône absolue du récap (84px, haut-droit) recouvre le début
   du descriptif, on lui réserve la colonne de droite (le blocCorps fournit déjà 20px). */
#modifierScenario .bloc:not(.modifierScenarioBloc) .blocTexte {
    padding-right: 78px;
}

/* Alignés à gauche, comme toute barre d'action (décision PO 2026-07-18 : pas
   d'alignement qui varie d'une barre à l'autre). */
.divActionModifierScenario {
    display: flex;
    gap: var(--gapDefaut);
    margin-top: var(--paddingCorps);
}

/* « Créer cet événement » vit dans un <form> (il POSTe la composition `remplacer`).
   display:contents efface la boîte du form : le gap de la barre s'applique aux
   boutons eux-mêmes (même solution que le catalogue). */
.divActionModifierScenario form {
    display: contents;
}

/* « Créer cet événement » : seule action primaire de la page, silhouette commune
   .cta14 (31_cta.css) — ici uniquement les couleurs. « Démonstration » qui le
   suit est un .ctaDiscret neutre, le même que le catalogue (décision PO 2026-07-18). */
.ctaModifierScenarioCreer {
    background: var(--cCta);
    color: var(--cCtat);
}

.ctaModifierScenarioCreer:hover {
    background: var(--cCtah);
}

/*!*************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/regie/css/56_scenario/_etiquettes.css ***!
  \*************************************************************************************************************************************/
/* ============================================
   ÉTIQUETTES - Marquage typographique
   ============================================

   Les étiquettes données par l'organisateur (animations, sorties, groupes)
   sont enveloppées dans .etiquetteMono par le filtre Twig `etiquetteHtml`.
   La chasse fixe les distingue des libellés du système (décision PO 2026-06-10).
*/

.etiquetteMono {
    font-family: var(--ffMono);
}

/* Marqueur d'une source provisoire, accolé à l'étiquette par le même filtre */
.etiquetteAConfigurer {
    font: var(--fLight14);
    color: var(--cRouge6);
}

.recapBlocDetail .etiquetteAConfigurer {
    color: unset;
}

/*!*********************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/regie/css/56_scenario/_grille.css ***!
  \*********************************************************************************************************************************/
/* ============================================
   SCÉNARIO - Grille de briques
   ============================================ */

#scenarioContainer {
    position: relative; /* Pour le SVG des lignes */
}

#scenarioGrille {
    display: flex;
    flex-wrap: wrap;
    gap: var(--gapLarge) var(--gapMoyen); /* aligné 10 -> 12px (échelle PO 2026-07-18) */
    margin-bottom: 30px;
}

/* SVG des lignes de connexion */
.scenarioLignesSvg {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    pointer-events: none; /* Ne bloque pas les clics */
    overflow: visible;
    z-index: 0; /* Derrière les briques */
}

.brique * {
    user-select: none;
}

body.isDragging,
body.isDragging * {
    cursor: grabbing !important;
}

/* Brique de base */
.brique {
    width: 162px;
    height: 100px;
    background: var(--cBlanc);
    border-radius: var(--borderR1);
    border: var(--borderCarte );
    cursor: pointer;
    position: relative;
    display: flex;
    flex-direction: column;
    justify-content: flex-start;
    align-items: flex-start;
    color: inherit;
    overflow: hidden;
    transition: box-shadow 0.2s;
}

.brique:hover {
    box-shadow: var(--ombrePortee);
}

/* Grille statique (page « Voir la config » des démos) : les briques se regardent, ne se cliquent pas */
.scenarioGrilleStatique .brique {
    cursor: default;
}

.brique.active {
    box-shadow: var(--ombrePortee);
}

/* Marqueur « à configurer » : même étoile rouge partout — sur la brique d’animation qui
   consomme une provisoire, et sur l'onglet où cette provisoire se configure
   (variante d'onglet dans _ongletMenu.css, avec .onglet). Le placement en coin est
   propre à la brique : ailleurs l'étoile suit le texte. */
.pastilleProvisoire {
    color: var(--cRouge6);
    font: var(--fAlerte16);
}

.brique .pastilleProvisoire {
    position: absolute;
    top: 4px;
    right: 82px;
}

/* Styles d'icônes : voir 54_icones.css */

.briqueConfig { background: var(--cFondConfig); }

.briqueTitre {
    font: var(--fMenu14);
    color: var(--cNoir1);
    padding: 8px 10px 0 10px;
    width: 100%;
    box-sizing: border-box;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* inutilisé 2026-06-13
.briqueNombre {
    font: var(--fLight14);
    color: var(--cNoir3);
    padding: 2px 10px 10px 10px;
}
*/

/* Contrats animation (sous-ligne icônes + plages) */
.briqueContrats {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 2px;
    padding: 2px 10px 8px 10px;
    font: var(--fLight14);
    color: var(--cNoir3);
    width: 100%;
    box-sizing: border-box;
}

.contratScene {
    display: inline-flex;
    align-items: center;
    gap: 2px;
}

.contratScene svg {
    width: 12px;
    height: auto;
    flex-shrink: 0;
}

.contratPlage {
    font: var(--fLight14);
    font-size: 12px;
    color: var(--cNoir2);
}

/* Brique Ajouter (bouton + générique) */
.briqueAjouter {
    border-style: dashed;
    background: var(--cBlanc02);
    justify-content: center;
    align-items: center;
}

.briqueIconePlus {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    border: 1px dashed var(--cNoir4);
    display: flex;
    justify-content: center;
    align-items: center;
    font: var(--fH2);
    color: var(--cNoir4);
}

.briqueAjouter:hover .briqueIconePlus {
    color: var(--cCta);
    border-color: var(--cCta);
}

/* Brique + désactivée (quand menu affiché) */
.briqueAjouter.briqueAjouterActif {
    pointer-events: none;
    border-style: solid;
}

.briqueAjouterActif .briqueIconePlus {
    border-style: solid;
}

/* ============================================
   COULEURS BRIQUES AJOUTER (par section)
   Utilise des CSS custom properties locales
   ============================================ */

/* Définition des variables par section */
.briqueAjouterGroupes {
    --briqueFond: var(--cFondGroupes);
    --briqueBordure: var(--cFondGroupes2);
}

.briqueAjouterDistributions {
    --briqueFond: var(--cFondDistributions);
    --briqueBordure: var(--cFondDistributions2);
}

.briqueAjouterConfigurations {
    --briqueFond: var(--cFondConfig);
    --briqueBordure: var(--cFondConfig2);
}

.briqueAjouterAffichages {
    --briqueFond: var(--cFondAffichages);
    --briqueBordure: var(--cFondAffichages2);
}

.briqueAjouterScenes {
    --briqueFond: var(--cFondScenes);
    --briqueBordure: var(--cFondScenes2);
}

/* Styles communs utilisant les variables */
.briqueAjouter.briqueAjouterGroupes,
.briqueAjouter.briqueAjouterDistributions,
.briqueAjouter.briqueAjouterConfigurations,
.briqueAjouter.briqueAjouterAffichages,
.briqueAjouter.briqueAjouterScenes {
    background: var(--briqueFond);
    border-color: var(--briqueBordure);
}

.briqueAjouterGroupes .briqueIconePlus,
.briqueAjouterDistributions .briqueIconePlus,
.briqueAjouterConfigurations .briqueIconePlus,
.briqueAjouterAffichages .briqueIconePlus,
.briqueAjouterScenes .briqueIconePlus {
    color: var(--briqueBordure);
    border-color: var(--briqueBordure);
}

/*!**************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/regie/css/56_scenario/_formulaires.css ***!
  \**************************************************************************************************************************************/
/* ============================================
   ZONE FORMULAIRE (Turbo Frame)
   ============================================ */

#scenarioPanneau {
    margin: 20px 0;
    display: block;
    border-top: var(--borderCarte);
    padding: 20px 0;
}

/* ============================================
   PANNEAU - Classes génériques réutilisables
   ============================================ */

.panneauWrapper {
    display: flex;
    gap: var(--gapListe); /* aligné 30 → 32px (décision PO 2026-07-18) */
    align-items: stretch;
}

.panneauGauche {
    width: 600px;
    flex-shrink: 0;
}

.panneauAide {
    flex: 1;
    padding: 15px 20px;
    border: var(--borderCarte);
    border-radius: var(--borderR1);
}

.panneauAide h2:first-child,
.demoPresentationArticle h2:first-child {
    margin-top: 0;
}

.panneauAide h3 {
    margin: 40px 0 10px 0;
    font: var(--fH3);
}

.panneauAide p {
    margin: 10px 0;
    font: var(--fText16);
    color: var(--cNoir2);
}

.panneauAide strong,
.panneauAide b {
    font: var(--fText16Strong);
}

.panneauAide ul {
    margin: 10px 0;
    padding-left: 20px;
    list-style: disc;
}

.panneauAide li,
.fichierPrevisualisationListe li {
    margin: 5px 0;
    font: var(--fText16);
    color: var(--cNoir2);
}

/* Encadré générique d'aperçu d'un fichier importé (construit en JS, ex. import CSV). */
.fichierPrevisualisation {
    padding: 8px 12px;
    background: var(--cBlanc02);
    border-radius: var(--borderR1);
    border: var(--borderCarte);
}

.fichierPrevisualisation h4 {
    margin: 0 0 6px;
    font: var(--fH4);
}

/* Les <p> de l'aperçu ne sont pas enfants directs du form : on neutralise la marge
   par défaut du navigateur (sinon gros trou entre un titre de liste et sa liste). */
.fichierPrevisualisation p {
    margin: 0;
    font: var(--fText16);
    color: var(--cNoir2);
}

/* Bloc « titre + liste » : séparé du compteur, mais titre collé à sa liste (proximité). */
.fichierPrevisualisationListe {
    margin-top: 12px;
}

/* Lien « Utiliser un autre fichier » DANS l'encadré (comme le bouton des aperçus d'image). */
.fichierPrevisualisation .ctaSupprimer {
    margin-top: 8px;
}

.fichierPrevisualisationListe ul {
    margin: 2px 0 0;
    padding-left: 20px;
    list-style: disc;
}

.panneauAide button {
    font: unset;
    margin: 0;
    color: var(--cCta);
    padding: 0;
    background: none;
    border: none;
    cursor: pointer;
    transition: color 0.2s;
}

@media (max-width: 1000px) {
    .panneauWrapper {
        flex-direction: column;
    }

    .panneauGauche {
        width: 100%;
        max-width: 600px;
    }

    .panneauAide {
        width: 100%;
        max-width: 600px;
    }
}

.messageAide {
    color: var(--cNoir3);
}

.messageAide p {
    font: var(--fText16);
    margin: 5px 0;
    max-width: 600px;
}

/* ============================================
   BLOC ENCADRÉ - Style unifié pour les blocs
   dans les formulaires (lots, actualisation, etc.)

   Structure HTML obligatoire : form > div > .blocEncadre
   (le .blocEncadre doit être dans une div intermédiaire)
   ============================================ */

.blocEncadre {
    padding: 15px;
    margin-bottom: 15px;
    box-shadow: var(--ombreInterne);
    border: var(--borderCarte);
    border-radius: var(--borderR1);
}

.blocEncadre .vignetteImageExistante {
    background: var(--cBlanc02);
    box-shadow: none;
}

.blocEncadre > :first-child {
    margin-top: 0;
}

.blocEncadre > :last-child {
    margin-bottom: 0;
}

.blocEncadre > div {
    padding: 0 0 20px;
}

/* Titre du formulaire avec icône et couleur */
.titreFormulaire {
    position: relative;
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
    width: 100%;
    margin: 0 0 40px 0;
    font: var(--fH3);
    box-sizing: border-box;
}

.titreFormulaire:has(+ .sousTitreFormulaire) {
    margin-bottom: 8px;
}

.sousTitreFormulaire {
    margin: 20px 0 30px 0;
    font: var(--fText16);
    color: var(--cNoir3);
}

.titreIcone {
    width: 40px;
    height: 40px;
    padding: 6px;
    border-radius: var(--borderR1);
    box-sizing: border-box;
}

/* ============================================
   VARIANTES DE COULEURS DES TITRES FORMULAIRES
   Utilise des CSS custom properties locales
   ============================================ */

/* Variables locales pour le titre et son icône (éléments enfants) */
.titreConfig,
.titreConfigurations {
    --titreFond: var(--cFondConfig);
    --titreIconeFond: var(--cFondConfig);
}

.titreGroupes {
    --titreFond: var(--cFondGroupes);
    --titreIconeFond: var(--cFondGroupes);
}

.titreDistributions {
    --titreFond: var(--cFondDistributions);
    --titreIconeFond: var(--cFondDistributions);
}

.titreScenes {
    --titreFond: var(--cFondScenes);
    --titreIconeFond: var(--cFondScenes);
}

.titreAffichages {
    --titreFond: var(--cFondAffichages);
    --titreIconeFond: var(--cFondAffichages);
}

/* Styles communs utilisant les variables locales */
.titreConfig,
.titreConfigurations,
.titreGroupes,
.titreDistributions,
.titreScenes,
.titreAffichages {
    background: var(--titreFond);
}

.titreConfig .titreIcone,
.titreConfigurations .titreIcone,
.titreGroupes .titreIcone,
.titreDistributions .titreIcone,
.titreScenes .titreIcone,
.titreAffichages .titreIcone {
    background: var(--titreIconeFond);
}

.panneauFormulaire .ctaValider {
    margin-top: 0;
    padding: 10px 40px;
    width: auto;
}

.panneauFormulaire .ctaValider:disabled {
    cursor: auto;
}

/* ============================================
   COULEURS PAR CATÉGORIE (.divConfig, .divGroupes, etc.)
   Classe ajoutée sur .panneauFormulaire par _baseCreate/_baseEdit
   ============================================ */

/* Bouton valider - Config */
.divConfig .ctaValider,
.divConfigurations .ctaValider {
    background: var(--cFondConfig_a);
}
.divConfig .ctaValider:hover,
.divConfigurations .ctaValider:hover {
    background: var(--cFondConfig_ah);
}

/* Bouton valider - Participants */
.divGroupes .ctaValider {
    background: var(--cFondGroupes_a);
}
.divGroupes .ctaValider:hover {
    background: var(--cFondGroupes_ah);
}

/* Bouton valider - Lots */
.divDistributions .ctaValider {
    background: var(--cFondDistributions_a);
}
.divDistributions .ctaValider:hover {
    background: var(--cFondDistributions_ah);
}

/* Bouton valider - Scenes */
.divScenes .ctaValider {
    background: var(--cFondScenes_a);
}
.divScenes .ctaValider:hover {
    background: var(--cFondScenes_ah);
}

/* Bouton valider - Affichages */
.divAffichages .ctaValider {
    background: var(--cFondAffichages_a);
}
.divAffichages .ctaValider:hover {
    background: var(--cFondAffichages_ah);
}

/* Focus des champs - Config */
.divConfig input:focus,
.divConfig textarea:focus,
.divConfigurations input:focus,
.divConfigurations textarea:focus {
    border-color: var(--cFondConfig4);
    outline-color: var(--cFondConfig4);
}

/* Focus des champs - Participants */
.divGroupes input:focus,
.divGroupes textarea:focus {
    border-color: var(--cFondGroupes4);
    outline-color: var(--cFondGroupes4);
}

/* Focus des champs - Lots */
.divDistributions input:focus,
.divDistributions textarea:focus {
    border-color: var(--cFondDistributions4);
    outline-color: var(--cFondDistributions4);
}

/* Focus des champs - Scenes */
.divScenes input:focus,
.divScenes textarea:focus {
    border-color: var(--cFondScenes4);
    outline-color: var(--cFondScenes4);
}

/* Focus des champs - Affichages */
.divAffichages input:focus,
.divAffichages textarea:focus {
    border-color: var(--cFondAffichages4);
    outline-color: var(--cFondAffichages4);
}

/* Textes d'aide - Config */
.divConfig .help-text,
.divConfig .facultatif,
.divConfigurations .help-text,
.divConfigurations .facultatif {
    color: var(--cFondConfig4);
}

/* Label principal d'un groupe (radio / champ) dans les formulaires de config = titre */
.divConfig > div > label:first-child {
    display: block;
    margin-bottom: 10px;
    font: var(--fText16Strong);
}

/* Textes d'aide - Participants */
.divGroupes .help-text,
.divGroupes .facultatif {
    color: var(--cFondGroupes4);
}

/* Textes d'aide - Lots */
.divDistributions .help-text,
.divDistributions .facultatif {
    color: var(--cFondDistributions4);
}

/* Textes d'aide - Scenes : pas de couleur thématique, reste gris par défaut */

/* Groupe radio pour les slots de distribution */

.radioDistributionOptions {
    display: flex;
    flex-direction: column;
    gap: var(--gapDefaut);
}

.radioDistributionOptions .divRb {
    margin: 0;
}

/* ============================================
   CHAMP NOM REPLIABLE
   ============================================ */

.champEtiquette {
    display: flex;
    align-items: center;
    gap: 0.5rem;
}

.champEtiquetteValeur {
    color: var(--cNoir2);
}

.champEtiquetteEditer {
    background: none;
    border: none;
    cursor: pointer;
    padding: 0.2rem;
    color: var(--cNoir2);
    transition: opacity 0.2s;
}

.champEtiquetteEditer:hover {
    opacity: 0.6;
}

.champEtiquette .masque {
    display: none;
}

.champEtiquetteChamp {
    flex: 1;
}

.radioDistributionOptions .divRb label {
    gap: var(--gapLarge); /* aligné 16 -> 20px (échelle PO 2026-07-18) */
}

/* Checkboxes et radios - Config */
.divConfig .svgCb,
.divConfig .svgRb,
.divConfigurations .svgCb,
.divConfigurations .svgRb {
    color: var(--cFondConfig);
}

/* Checkboxes et radios - Participants */
.divGroupes .svgCb,
.divGroupes .svgRb {
    color: var(--cFondGroupes);
}

/* Checkboxes et radios - Lots */
.divDistributions .svgCb,
.divDistributions .svgRb {
    color: var(--cFondDistributions);
}

/* Checkboxes et radios - Scenes */
.divScenes .svgCb,
.divScenes .svgRb {
    color: var(--cFondScenes);
}

/* Checkboxes et radios - Affichages */
.divAffichages .svgCb,
.divAffichages .svgRb {
    color: var(--cFondAffichages);
}

/* Dans un formulaire animation, les sections participants/lots gardent leur propre couleur */
.sectionAnimGroupes .svgCb,
.sectionAnimGroupes .svgRb { color: var(--cFondGroupes); }
.sectionAnimLots .svgCb,
.sectionAnimLots .svgRb { color: var(--cFondDistributions); }

/* Sections colorées dans les formulaires d'animation */
.panneauFormulaire form > .sectionAnimGroupes {
    margin: 20px 0;
}

/* Bouton file input - Config */
.divConfig input[type="file"]::file-selector-button,
.divConfigurations input[type="file"]::file-selector-button {
    background: var(--cFondConfig_a);
}
.divConfig input[type="file"]::file-selector-button:hover,
.divConfigurations input[type="file"]::file-selector-button:hover {
    background: var(--cFondConfig_ah);
}

/* Bouton file input - Participants */
.divGroupes input[type="file"]::file-selector-button {
    background: var(--cFondGroupes_a);
}
.divGroupes input[type="file"]::file-selector-button:hover {
    background: var(--cFondGroupes_ah);
}

/* Bouton file input - Lots */
.divDistributions input[type="file"]::file-selector-button {
    background: var(--cFondDistributions_a);
}
.divDistributions input[type="file"]::file-selector-button:hover {
    background: var(--cFondDistributions_ah);
}

/* Bouton file input - Scenes */
.divScenes input[type="file"]::file-selector-button {
    background: var(--cFondScenes_a);
}
.divScenes input[type="file"]::file-selector-button:hover {
    background: var(--cFondScenes_ah);
}

/* Bouton file input - Affichages */
.divAffichages input[type="file"]::file-selector-button {
    background: var(--cFondAffichages_a);
}
.divAffichages input[type="file"]::file-selector-button:hover {
    background: var(--cFondAffichages_ah);
}

/* Panneau formulaire : un seul form OU plusieurs .contenu */
.panneauGaucheFlex,
.panneauFormulaire {
    display: flex;
    flex-direction: column;
    gap: var(--gapListe);
}

/* form pour les formulaires, .blocContenu pour les blocs d'information */
.panneauFormulaire form,
.panneauFormulaire .blocContenu,
.panneauGaucheFlex .blocContenu {
    margin: 0;
    border: var(--borderCarte );
    border-radius: var(--borderR1);
    overflow: hidden;
}

.panneauFormulaire .blocContenu,
.panneauGaucheFlex .blocContenu {
    padding-bottom: 20px;
}

/* Bloc contenu en mode test (style violet) */
.blocContenuTest .titreFormulaire {
    --titreFond: var(--cTest);
    --titreIconeFond: var(--cTest2);
}

.panneauFormulaire .divCb,
.panneauGaucheFlex .divCb {
    margin: 0 0 20px;
}

.panneauFormulaire form > h4,
.panneauFormulaire .blocContenu > h4,
.panneauGaucheFlex .blocContenu > h4 {
    margin-top: 20px;
    padding: 0 20px;
}

.panneauFormulaire form > div,
.panneauFormulaire .blocContenu > div,
.panneauGaucheFlex .blocContenu > div,
.panneauFormulaire form > p,
.panneauFormulaire .blocContenu > p,
.panneauGaucheFlex .blocContenu > p {
    padding: 0 20px;
}

/* ============================================
   SECTIONS CANONIQUES (formulaires d'animation)
   Une section = un conteneur .sectionFormulaire qui porte son <h4>,
   ses champs (aide comprise) et ses sous-groupes. Le padding horizontal
   vient du contrat form > div ci-dessus ; ici, le rythme interne.
   Registre : animations/_partage/sections.json
   ============================================ */

.panneauFormulaire form > div.sectionFormulaire {
    margin-bottom: 25px;
}

.sectionFormulaire > h4 {
    margin: 0 0 12px;
}

.sectionFormulaire > div {
    margin-bottom: 12px;
}

.sectionFormulaire > :last-child {
    margin-bottom: 0;
}

/* Liste à puces dans un bloc d'information : le reset global (00_reset) retire les puces */
.panneauFormulaire .blocContenu ul {
    margin: 0 0 15px;
    padding-inline-start: 40px;
    list-style: disc;
}

.panneauFormulaire .blocContenu li {
    margin: 5px 0;
}

/* Le <hr> séparateur s'aligne sur le retrait horizontal des champs (20px) au lieu de couper toute la largeur */
.panneauFormulaire form > hr {
    margin-left: 20px;
    margin-right: 20px;
}

.panneauFormulaire form > div,
.espaceForm > div {
    margin-bottom: 15px;
}

.tableauPrevisualisation {
    width: 100%;
    border-collapse: collapse;
    margin-top: 20px;
    font: var(--fLabel);
}

.tableauPrevisualisation th,
.tableauPrevisualisation td {
    padding: 4px 8px;
    border: var(--border);
    text-align: left;
}

.tableauPrevisualisation th {
    background: var(--cBlanc02);
    font: var(--fLabel);
}

.tableauPrevisualisation .separateurPrevisualisation td {
    text-align: center;
    border: none;
    color: var(--cNoir3);
}

/* Toggle avec label — classes de base (déplacées depuis _modale.css) */
.toggleAvecLabel {
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
    width: 100%;
    margin: 8px 0;
    cursor: pointer;
}

.toggleLabel {
    font: var(--fMenu14);
    color: var(--cNoir2);
}

/* Toggle désactivé (bloqué) */
.toggleDisabled {
    opacity: 0.4;
    filter: grayscale(1);
    cursor: auto;
    pointer-events: none;
}

/* pointer-events:none rend le toggle transparent au survol : sans ça le cursor:pointer du label reprend la main sur toute la ligne */
.toggleAvecLabel:has(.toggleDisabled) {
    cursor: auto;
}

/* inutilisé 2026-06-14 : paramètre 'message' du toggle jamais passé par aucun appelant ; rendait un texte ROUGE d'alerte alors que décrit comme « explicatif » (ADR vérificationDocumentation, cas réel n°5)
.toggleMessage {
    font: var(--fLight14);
    color: var(--cRouge);
}
*/

.panneauFormulaire .toggleAvecLabel {
    justify-content: space-between;
}

.panneauFormulaire form .toggleAvecLabel {
    justify-content: flex-end;
    flex-direction: row-reverse;
    gap: var(--gapLarge); /* aligné 16 -> 20px (échelle PO 2026-07-18) */
}

/* Ligne toggle du thème de formulaire (div.ligneToggle > label + aide) : le conteneur
   porte l'espacement de ligne, le toggle n'a plus de marge propre. Les toggles écrits
   à la main (slots de sources) gardent leur margin 8px pour s'espacer entre eux. */
.ligneToggle > .toggleAvecLabel {
    margin: 0;
}

.panneauFormulaire .formActions {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--gapMoyen); /* aligné 10 -> 12px (échelle PO 2026-07-18) */
    padding: 10px 20px;
    padding-bottom: 0;
}
/* ctaAnnuler dans le panneau : pas de margin (le noyau met 20px, inutile ici) */
.panneauFormulaire .formActions > .ctaAnnuler {
    margin: 0;
}

/* Le style des alertes (couleurs, police, padding) vient du noyau (42_auth.css) :
   ici uniquement l'alignement sur le padding latéral du formulaire */
.panneauFormulaire .alertErreur {
    margin: 0 20px 10px;
}

.panneauFormulaire .alertErreur li {
    color: inherit;
}

.panneauFormulaire .alertErreur ul {
    margin: 6px 0 0;
    padding-left: 20px;
    list-style: disc;
}

.panneauFormulaire form > div .alertErreur {
    margin: 0 0 10px;
}

.panneauFormulaire .formActions .alertErreur {
    margin: 0;
    width: 100%;
}

.panneauFormulaire .ctaAnnuler:hover {
    text-decoration: underline;
}

/* Bouton « Remplacer par une animation similaire » : ouvre la popup des jumelles de famille
   (pas une action réelle, contrairement à Annuler/Supprimer ou Modifier voisins). Présent dans
   le formulaire d'édition ET le panneau récap (d'où .panneauGauche, leur parent commun). Même
   police et même couleur qu'Annuler/Modifier (cf. noyau 31_cta.css) : seules les actions
   marquées (Supprimer) gardent une couleur. */
.panneauGauche .lienSimilaires {
    margin: 0;
    padding: 0;
    border: none;
    background: none;
    font: var(--fText16);
    color: var(--cNoir3);
    cursor: pointer;
}

.panneauGauche .lienSimilaires:hover {
    text-decoration: underline;
}


div .ctaSupprimer {
    width: auto;
    height: auto;
    margin: 0;
    padding: 0;
    font: var(--fText16);
    color: var(--cRouge);
    background: transparent;
    border: none;
    border-radius: 0;
    cursor: pointer;
}

div .ctaSupprimer:hover {
    text-decoration: underline;
}

div .ctaSupprimerConfirm {
    position: relative;
    isolation: isolate;
    color: var(--cBlanc);
    background: transparent;
    margin-left: 10px;
}

div .ctaSupprimerConfirm::before {
    content: '';
    position: absolute;
    inset: -5px -12px;
    background: var(--cRouge);
    border-radius: var(--borderR1);
    z-index: -1;
    animation: confirmBgGrow 0.2s ease-out forwards;
}

@keyframes confirmBgGrow {
    from {
        transform: scale(0.7);
        opacity: 0;
    }
    to {
        transform: scale(1);
        opacity: 1;
    }
}

div .ctaSupprimerDesactive {
    opacity: 0.4;
    cursor: auto;
}

div .ctaSupprimer.hidden {
    display: none;
}

/* Champ enfant dépendant d'un autre champ (checkbox parent)
   Utilisé avec data-toggle-enfant sur le parent et classe champEnfant sur l'enfant */
.champEnfant {
    transition: 0.2s;
}

.champEnfant.inactif {
    opacity: 0.4;
    filter: grayscale(1);
    pointer-events: none;
    cursor: auto;
}

.divDistributionMode .champEnfant.inactif {
    display: none;
}

/* Séparateur discret avec texte centré (utilisé dans les slots d'entrées) */
.separateurDiscret {
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
    margin: 6px 0;
    color: var(--cNoir3);
    font: var(--fLight14);
}

.separateurDiscret::before,
.separateurDiscret::after {
    content: '';
    flex: 1;
    border-top: 1px solid var(--cBlanc03);
}

/* ============================================
   CONTRAT ANIMATION — VERSION DÉTAILLÉE
   ============================================ */

.contratsDetail {
    display: flex;
    flex-direction: column;
    gap: var(--gapReduit);
    padding: 10px 0;
    font: var(--fText16);
    color: var(--cNoir2);
}

.contratDetailLigne {
    display: flex;

    flex-wrap: wrap;
    align-items: center;
    gap: var(--gapDefaut);
}

.contratDetailElement {
    display: inline-flex;
    align-items: center;
    gap: var(--gapDefaut); /* aligné 5 -> 8px (échelle PO 2026-07-18) */
}

.contratDetailIcone svg {
    width: 22px;
    height: auto;
    display: block;
}

.contratDetailLabel {
    color: var(--cNoir3);
}

.contratDetailFleche {
    display: inline-flex;
    align-items: center;
}

.contratDetailFleche svg {
    width: 18px;
    height: auto;
    display: block;
    color: var(--cNoir3);
}

/* Bouton fermer le panneau formulaire */
.panneauClose {
    position: absolute;
    top: 50%;
    right: 5px;
    transform: translateY(-50%);
}

/* ============================================
   ENTRÉES GROUPES (groupes dans les animations)
   Utilise .blocEncadre comme base de design
   ============================================ */

.entreeGroupeHeader {
    margin-bottom: 10px;
}

.entreeGroupeHeader .entreeNumero {
    font: var(--fH4);
}

/* Groupe de champs en grille (option "colonnes" de form.json) : N champs par ligne.
   Surclasse le display:flex de .blocVertical ; le showIf bascule style.display (none/'') par-dessus. */
.panneauFormulaire form > div.blocVertical.champsGrille,
.sectionFormulaire > div.blocVertical.champsGrille {
    display: grid;
    gap: var(--gapDefaut) var(--gapLarge); /* aligné 6->8, 16->20px (échelle PO 2026-07-18) */
    /* Les labels n'ont pas tous la même hauteur : caler par le bas aligne les inputs d'une rangée */
    align-items: end;
}

/* Intertitre de rangée d'une grille (option "titresLignes" de form.json, ex. « Palier 1 ») */
.grilleLigneTitre {
    grid-column: 1 / -1;
    margin-top: 10px;
    color: var(--cNoir3);
    font: var(--fH4);
}

.champsGrille .grilleLigneTitre:first-child {
    margin-top: 0;
}

.panneauFormulaire form > div.blocVertical.champsGrille[data-colonnes="3"],
.sectionFormulaire > div.blocVertical.champsGrille[data-colonnes="3"] {
    grid-template-columns: repeat(3, 1fr);
}

/* Note d'aide d'un groupe (option "aide" de form.json) : pleine largeur, sous les champs. */
.grilleAide {
    display: block;
}

.champsGrille .grilleAide {
    grid-column: 1 / -1;
}

/*!*************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/regie/css/56_scenario/_ongletMenu.css ***!
  \*************************************************************************************************************************************/
/* ============================================
   TOGGLE MENU - Classe de base réutilisable
   Scene slide fluide entre les onglets
   ============================================ */

.divOngletMenu {
    display: flex;
    position: relative;
    gap: var(--gapReduit);
    margin-bottom: 20px;
    padding: 0;
    background: var(--cBlanc02);
    border-radius: var(--borderR1);
    width: fit-content;
    max-width: 100%;
    overflow-x: auto;
}

/* Indicateur qui slide — pas de couleur par défaut, chaque onglet a sa classe couleur */
.indicateurOnglet {
    position: absolute;
    top: 0;
    bottom: 0;
    background: transparent;
    transition: left 0.35s cubic-bezier(0.4, 0, 0.2, 1),
    width 0.35s cubic-bezier(0.4, 0, 0.2, 1),
    background 0.35s ease;
    z-index: 0;
    pointer-events: none;
}

/* Couleurs de l'indicateur par type */
.indicateurOnglet.indicateurOngletGroupes,
.indicateurOnglet.indicateurOngletEquipes,
.indicateurOnglet.indicateurOngletNumeros,
.indicateurOnglet.indicateurOngletBorne,
.indicateurOnglet.indicateurOngletQrCode,
.indicateurOnglet.indicateurOngletWebForm {
    background: var(--cFondGroupes_a);
}

.indicateurOnglet.indicateurOngletDistributions {
    background: var(--cFondDistributions_a);
}

.indicateurOnglet.indicateurOngletApparence,
.indicateurOnglet.indicateurOngletConfigurations {
    background: var(--cFondConfig_a);
}

.indicateurOnglet.indicateurOngletAffichages {
    background: var(--cFondAffichages_a);
}

.indicateurOnglet.indicateurOngletScenes,
.indicateurOnglet.indicateurOngletScenario {
    background: var(--cFondScenes_a);
}

[data-mode="tester"] .indicateurOnglet.indicateurOngletParticipants,
[data-mode="tester"] .indicateurOnglet.indicateurOngletEquipes,
[data-mode="tester"] .indicateurOnglet.indicateurOngletDiffusion,
[data-mode="tester"] .indicateurOnglet.indicateurOngletProgression,
[data-mode="tester"] .indicateurOnglet.indicateurOngletQrCode {
    background: var(--cTest3);
}

.indicateurOnglet.indicateurOngletRegie,
.indicateurOnglet.indicateurOngletRecapitulatif,
[data-mode="diffuser"] .indicateurOnglet.indicateurOngletDiffusion,
[data-mode="diffuser"] .indicateurOnglet.indicateurOngletProgression,
.indicateurOnglet.indicateurOngletResultats,
.indicateurOnglet.indicateurOngletPublication,
[data-mode="diffuser"] .indicateurOnglet.indicateurOngletParticipants,
[data-mode="diffuser"] .indicateurOnglet.indicateurOngletEquipes {
    background: var(--cCta);
}

/* Mode Configurer : tous les sous-onglets partagent la couleur Config — pas besoin d'enrichir ONGLETS_COLORES. */
[data-mode="config"] .indicateurOnglet {
    background: var(--cFondConfig_a);
}

/* Switch Configurer / Tester / Diffuser */
#divOngletModeWrapper {
    position: relative;
}

#divOngletMode {
    display: flex;
    margin-bottom: 20px;
    border-bottom: 1px solid var(--cNoir1);
    overflow: hidden;
}

#divOngletMode .ongletMode {
    padding: 8px 18px;
    font: var(--fMenu14);
    color: var(--cNoir3);
    background: transparent;
    user-select: none;
}

#divOngletMode .ongletMode.actif {
    color: var(--cBlanc1);
    background: var(--cLink);
    cursor: default;
    pointer-events: none;
}

#divOngletMode .ongletMode:nth-child(2).actif {
    background: var(--cTest3);
}

#divOngletMode .ongletMode.desactive {
    color: var(--cNoir5);
}

/* Onglet Supprimer : rouge (action destructive), comme le lien Supprimer de la liste */
#divOngletMode .ongletMode[data-mode="supprimer"].actif {
    color: var(--cBlanc1);
    background: var(--cRouge6);
}

/* Rappel de l'icône engrenage du titre dans l'onglet Configurer */
#divOngletMode .ongletMode[data-mode="config"] {
    display: inline-flex;
    align-items: center;
    gap: var(--gapDefaut); /* aligné 7 -> 8px (échelle PO 2026-07-18) */
}

#divOngletMode .ongletMode[data-mode="config"] svg {
    width: 16px;
    height: 16px;
}

/* Alerte redirection (test/diffusion en cours) */
.alerteRedirection {
    position: absolute;
    left: 0;
    right: 0;
    background: var(--cRouge);
    color: var(--cBlanc);
    font: var(--fCta16);
    padding: 12px 30px;
    text-align: center;
    border-radius: var(--borderR1);
    box-shadow: var(--ombrePortee);
    z-index: 10;
    animation: alerteApparition 0.3s ease;
}

@keyframes alerteApparition {
    from {
        opacity: 0;
        transform: translateY(-10px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

/* Boutons */
.onglet {
    position: relative;
    z-index: 1;
    padding: 10px 20px;
    border: none;
    font: var(--fMenu14);
    cursor: pointer;
    background: transparent;
    color: var(--cNoir2);
    user-select: none;
}

/* Étoile de rappel « à configurer » (classe définie dans _grille.css) : hors flux comme sur
   la brique, sinon ses 20px grandiraient la ligne de l'onglet, qui est en 14px — et seuls
   les onglets étoilés deviendraient plus hauts que leurs voisins. Elle se pose dans le
   padding droit de l'onglet, jamais par-dessus le libellé. */
.onglet .pastilleProvisoire {
    position: absolute;
    top: 0;
    right: 6px;
}

.onglet.actif .pastilleProvisoire {
    color: var(--cBlanc1);
    opacity: .5;
}

.onglet:hover:not(.actif) {
    color: var(--cNoir1);
}

.onglet.actif {
    color: var(--cBlanc1);
    cursor: default;
}

/* Masquer les toggles section non pertinents */
.divOngletMenu.masque {
    display: none;
}

/* Masquer les boutons individuels non pertinents */
.onglet.masque {
    display: none;
}

/* Responsive */
@media (max-width: 999px) {
    #divOngletSections {
        display: none;
    }
}

@media (max-width: 600px) {
    .onglet {
        flex-shrink: 0;
        white-space: nowrap;
    }
}

/*!**************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/regie/css/56_scenario/_menuAjouter.css ***!
  \**************************************************************************************************************************************/
/* ============================================
   MENU AJOUTER (Choix d'élément à créer)
   ============================================ */

.menuAjouter h3 {
    margin: 0 0 20px 0;
    font: var(--fH3);
}

.ligneSections {
    display: flex;
    flex-wrap: wrap;
    gap: 0 182px; /* Vertical: 0 (géré par margin-bottom) | Horizontal: largeur d'une brique */
}

.ligneSections .sectionAjouter {
    flex: 0 0 auto; /* Ne pas étirer, garder la taille naturelle */
}

.sectionAjouter {
    margin-bottom: 25px;
}

/* Masquage initial pour éviter le flash (desktop uniquement) */
@media (min-width: 1000px) {
    .sectionAjouter[data-section] {
        display: none;
    }

    .sectionAjouter[data-section].visible {
        display: block;
    }
}

.sectionAjouter h4 {
    margin: 0 0 10px 0;
    font: var(--fMenu14);
    color: var(--cNoir3);
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.sectionAjouter h4::before {
    content: "+ ";
}

.briquesAjouter {
    display: flex;
    flex-wrap: wrap;
    gap: var(--gapMoyen); /* aligné 10 -> 12px (échelle PO 2026-07-18) */
}

.briqueGroupes::before {
    color: var(--cFondGroupes2);
}

.briqueDistributions::before {
    color: var(--cFondDistributions2);
}

.briqueConfigurations::before {
    color: var(--cFondConfig2);
}

.briqueAffichages::before {
    color: var(--cFondAffichages2);
}

.briqueScenes::before {
    color: var(--cFondScenes2);
}

.brique.briqueDistributions,
.brique.briqueGroupes {
    border-radius: var(--borderR1);
}

/* Filtre par tags et entrées dans la section Scenes :
   le design du panneau vient du composant commun (55_filtres.css). */

.divFiltreZone .briquesAjouter {
    flex: 1;
    min-width: 0;
}

.briqueScenes.masque {
    display: none;
}

.briqueGroupes {
    background: var(--cFondGroupes);
}

.briqueDistributions {
    background: var(--cFondDistributions);
}

.briqueConfigurations {
    background: var(--cFondConfig);
}

.briqueAffichages {
    background: var(--cFondAffichages);
}

.briqueScenes {
    background: var(--cFondScenes);
}

/*!******************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/regie/css/56_scenario/_briquesCouleurs.css ***!
  \******************************************************************************************************************************************/
/* ============================================
   BRIQUES DU SCÉNARIO PAR TYPE
   ============================================ */

/* Brique Brouillon (en cours de création) */
.briqueBrouillon {
    opacity: 0.7;
    border-style: dashed;
}

/* Couleurs des briques du scénario par type */
.brique.briqueGroupes { background: var(--cFondGroupes); }
.brique.briqueDistributions { background: var(--cFondDistributions); }
.brique.briqueConfigurations { background: var(--cFondConfig); }
.brique.briqueAffichages { background: var(--cFondAffichages); }
.brique.briqueScenes { background: var(--cFondScenes); }

/*!***********************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/regie/css/56_scenario/_dragDrop.css ***!
  \***********************************************************************************************************************************/
/* ============================================
   DRAG & DROP
   ============================================ */

.handleDrag {
    position: absolute;
    top: 6px;
    right: 6px;
    width: 18px;
    height: 12px;
    color: var(--cNoir3);
    opacity: 0.4;
    transition: opacity 0.2s;
}

.handleDrag:hover {
    opacity: 1;
    cursor: grab;
}

.handleDrag:active {
    cursor: grabbing;
}

/* Grille statique (page « Voir la config » des démos) : la poignée reste un repère visuel, sans affordance de drag */
.scenarioGrilleStatique .handleDrag:hover {
    opacity: 0.4;
    cursor: default;
}

/* État pendant le drag */
.briqueDraggable.dragging {
    opacity: 0.5;
    border-style: dashed;
    cursor: grabbing;
}

/* Zone de drop */
#scenarioGrille.formulaireActif:hover .brique.dragOver,
.brique.dragOver {
    box-shadow: -4px -4px 0 var(--cCta);
    transform: translate(4px, 4px) scale(1);
    transition: .5s ease;
}

/* Scene FLIP au drop */
.brique.animeDrop {
    transition: transform 0.25s ease;
}

/* Fantôme pendant le drag */
.dragFantome {
    opacity: 0.9;
    box-shadow: var(--ombrePortee);
    cursor: grabbing;
}

/*!*********************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/regie/css/56_scenario/_modale.css ***!
  \*********************************************************************************************************************************/
/* ============================================
   BOUTONS BRIQUE ANIMATION (info + démo)
   Groupés en haut à droite, côte à côte
   ============================================ */

.boutonsBriqueScene {
    position: absolute;
    top: 3px;
    right: 3px;
    display: flex;
    gap: 2px;
    z-index: 2;
}

.boutonsBriqueScene button {
    width: 22px;
    height: 22px;
    padding: 3px;
    border: none;
    border-radius: 4px;
    background: var(--cBlanc);
    box-shadow: 0 1px 3px var(--cOmbre);
    cursor: pointer;
    opacity: 0.7;
    transition: opacity 0.15s, background 0.15s;
}

.boutonsBriqueScene button:hover {
    opacity: 1;
    background: var(--cBlanc);
    box-shadow: 0 1px 4px var(--cOmbreForte);
}

.boutonsBriqueScene button svg {
    width: 100%;
    height: 100%;
    display: block;
    color: var(--cNoir2);
}

/* ============================================
   MODALE - STYLES GÉNÉRIQUES
   ============================================ */

.modale {
    border: none;
    border-radius: var(--borderR1);
    padding: 0;
    max-width: 500px;
    width: 90vw;
    max-height: 80vh;
    box-shadow: var(--ombreModale);
    background: transparent;
}

.modale::backdrop {
    background: var(--cOverlay);
}

.modaleContenu {
    background: var(--cBlanc);
    border-radius: var(--borderR1);
    overflow: hidden;
    display: flex;
    flex-direction: column;
    max-height: 80vh;
}

/* ============================================
   MODALE - VARIANTES PAR CONTEXTE
   ============================================ */

/* Scenes : header jaune, plus large */
.modaleScenes {
    max-width: 600px;
}

.modaleScenes .modaleHeader {
    background: var(--cFondScenes);
}

/* Participants : header cyan */
.modaleParticipants .modaleHeader {
    background: var(--cFondGroupes);
}

/* Mode test : header lavande */
.modaleHeaderTest {
    background: var(--cTest) !important;
}

/* Récap erreur : header rouge, plus large pour le stepper */
.modaleRecap {
    max-width: 600px;
}

.modaleRecap .modaleHeader {
    background: var(--cBlanc);
    padding-left: 20px;
}

.modaleHeader {
    display: flex;
    align-items: center;
    gap: var(--gapMoyen);
    padding: 5px;
    background: var(--cFondScenes);
    border-bottom: var(--border);
    flex-shrink: 0;
}

.modaleHeader h3 {
    flex: 1;
    margin: 0;
    font: var(--fH3);
}

.modaleIcone {
    width: 40px;
    height: 40px;
    object-fit: contain;
}

/* Bouton de fermeture. La croix est dessinée par ::before (mask SVG ci-dessous).
   → En HTML, le bouton .modaleClose doit rester VIDE : ne JAMAIS y mettre × / &times; / texte. */
.modaleClose {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    padding: 0;
    border: none;
    border-radius: var(--borderR1);
    background: transparent;
    cursor: pointer;
    transition: background 0.2s;
}

.modaleClose::before {
    content: '';
    width: 24px;
    height: 24px;
    background-color: var(--cNoir1);
    mask: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2724%27 height=%2724%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%271.5%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cline x1=%2718%27 y1=%276%27 x2=%276%27 y2=%2718%27/%3E%3Cline x1=%276%27 y1=%276%27 x2=%2718%27 y2=%2718%27/%3E%3C/svg%3E") center / contain no-repeat;
    -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2724%27 height=%2724%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%271.5%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cline x1=%2718%27 y1=%276%27 x2=%276%27 y2=%2718%27/%3E%3Cline x1=%276%27 y1=%276%27 x2=%2718%27 y2=%2718%27/%3E%3C/svg%3E") center / contain no-repeat;
}

.modaleClose:hover {
    background: var(--cBlanc02);
}

.modaleCorps {
    padding: var(--paddingCorps);
    overflow-y: auto;
    font: var(--fText16);
    color: var(--cNoir2);
    /* Scroll auto quand la modale dépasse 80vh : sans min-height:0 le corps ne shrink pas
       sous son contenu et le bas serait clippé. Le header (flex-shrink:0) reste visible. */
    min-height: 0;
}

/* Barre de scroll VISIBLE (non-overlay) : l'utilisateur doit voir qu'il peut scroller, sinon il
   ne comprend pas qu'il manque du contenu. Même pattern que la pop-up de saisie (saisie.css).
   Pas de scrollbar-color : sur Chrome ≥121 il désactiverait ces règles et remettrait la barre
   overlay auto-masquée. */
.modaleCorps::-webkit-scrollbar {
    width: 12px;
}

.modaleCorps::-webkit-scrollbar-track {
    background: var(--cBlanc2);
    border-radius: var(--borderR1);
}

.modaleCorps::-webkit-scrollbar-thumb {
    background: var(--cNoir4);
    border-radius: var(--borderR1);
}

.modaleCorps h1,
.modaleCorps h2,
.modaleCorps h3 {
    margin-top: 1em;
    margin-bottom: 0.5em;
}

.modaleCorps h1:first-child,
.modaleCorps h2:first-child,
.modaleCorps h3:first-child {
    margin-top: 0;
}

.modaleCorps p {
    margin: 0.5em 0;
}

.modaleErreur {
    padding: 40px;
    text-align: center;
    font: var(--fText16);
    color: var(--cNoir3);
}

.modaleErreur {
    color: var(--cRouge);
}

/* ============================================
   MODALE - BARRE D'OUTILS
   ============================================ */

.modaleBarreOutilsFlex {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 16px;
    padding-bottom: 12px;
    border-bottom: var(--border);
}

.modaleCompteur {
    font: var(--fCta16);
    color: var(--cNoir1);
}

/* ============================================
   MODALE - BOUTONS DE TRI / ACTIONS
   ============================================ */

.modaleBoutons {
    display: flex;
    gap: var(--gapDefaut);
}

/* Le bouton discret (ex-ctaModale, renommé 2026-07-18 : né dans les modales, il
   vit partout — blocs d'onglet, formulaires, TS). Même padding que tous les
   boutons compacts : --paddingCta14 (décision PO 2026-07-18, un .ctaDiscret côtoie
   un .cta14 dans les barres — deux paddings différents, c'est ultra visible). */
/* ⚠️ La base .ctaDiscret (base + hover + désactivé ci-dessous) est copiée dans
   studioVitrine/assets/vitrine/css/ctaDiscret.css (boutons des cartes de la page démo).
   Si tu modifies ces règles → demander au PO s'il faut la répercuter sur la copie vitrine.
   Les variantes .ctaDiscret.actif contextuelles (modales) restent propres à la régie. */
.ctaDiscretPrimaire,
.ctaDiscret {
    display: inline-block; /* un <a> hors barre flex reste un bouton (padding vertical réel) — même règle que .cta14 */
    padding: var(--paddingCta14);
    text-align: center;
    border: var(--borderCta);
    border-radius: var(--borderR1);
    background: var(--cBlanc);
    font: var(--fMenu14);
    color: var(--cCtaTexte);
    cursor: pointer;
    user-select: none;
    transition: background 0.2s, color 0.2s, border-color 0.2s;
}

.ctaDiscretPrimaire.hover {
    background: var(--cBlanc02);
}
.ctaDiscretPrimaire:disabled,
.ctaDiscret:disabled {
    opacity: 0.4;
    cursor: auto;
}

.ctaDiscretPrimaire {
    background: var(--cBleu4a);
    color: var(--cBleu4at);
}

.ctaDiscretPrimaire.hover {
    background: var(--cBleu4ah);
    color: var(--cBleu4ht);
}

/* Variante <a> désactivé (un lien ne connaît pas :disabled) */
.ctaDiscret.disabled {
    opacity: 0.4;
    pointer-events: none;
}

.ctaDiscret:disabled:hover {
    background: var(--cBlanc);
}

.ctaDiscret.actif {
    color: var(--cNoir1);
}

/* Couleur du bouton actif selon le contexte */
.modaleParticipants .ctaDiscret.actif {
    background: var(--cFondGroupes);
    border-color: var(--cFondGroupes2);
}

.modaleScenes .ctaDiscret.actif {
    background: var(--cFondScenes);
    border-color: var(--cFondScenes2);
}

.modaleDistributions .ctaDiscret.actif {
    background: var(--cFondDistributions);
    border-color: var(--cFondDistributions2);
}

/* Mode test : bouton actif lavande */
.modaleCorpsTest .ctaDiscret.actif {
    background: var(--cTest);
    border-color: var(--cTest3);
}

/* Label "Données de test" sous le compteur */
.modaleTestLabel {
    display: block;
    font: var(--fLight14);
    color: var(--cTest3);
}

/* ============================================
   MODALE - TOGGLE ACTIF/DÉSACTIVÉ
   ============================================ */

.toggleActif {
    position: relative;
    display: inline-block;
    width: 38px;
    height: 22px;
    cursor: pointer;
    flex-shrink: 0;
}

.toggleActif input {
    opacity: 0;
    width: 0;
    height: 0;
}

.toggleSlider {
    position: absolute;
    inset: 0;
    background: var(--cBlanc03);
    border: var(--borderForm);
    border-radius: 20px;
    transition: background 0.2s;
}

.toggleSlider::before {
    content: '';
    position: absolute;
    width: 16px;
    height: 16px;
    left: 2px;
    bottom: 2px;
    background: var(--cBlanc);
    border-radius: 50%;
    transition: transform 0.2s;
}

.toggleActif input:checked + .toggleSlider {
    background: var(--cCta);
}

.toggleActif input:checked + .toggleSliderTest {
    background: var(--cTest3);
}

.toggleActif input:checked + .toggleSliderParticipants {
    background: var(--cFondGroupes3);
}

/* inutilisé 2026-06-13
.toggleActif input:checked + .toggleSliderDistributions {
    background: var(--cFondDistributions3);
}

.toggleActif input:checked + .toggleSliderConfig {
    background: var(--cFondConfig3);
}

.toggleActif input:checked + .toggleSliderScenes {
    background: var(--cFondScenes3);
}

.toggleActif input:checked + .toggleSliderAffichages {
    background: var(--cFondAffichages3);
}
*/

.toggleActif input:checked + .toggleSlider::before {
    transform: translateX(16px);
}

/* Lettres trouvées par la recherche (≥4 caractères) — couleur plutôt que gras. */
.rechercheMatch {
    color: var(--cCta);
}

/* État banni */
.participantBanni {
    opacity: 0.5;
}

.participantBanni .participantNom {
    text-decoration: line-through;
    color: var(--cNoir4);
}

/* ============================================
   MODALE - PRÉVISUALISATION DISTRIBUTION
   ============================================ */

.modaleDistributions .modaleHeader {
    background: var(--cFondDistributions);
}

/* inutilisé 2026-06-13
.modaleAvertissement {
    font: var(--fLight14);
    color: var(--cNoir4);
}
*/

.listePrevisualisation {
    list-style: none;
    padding: 0;
    margin: 12px 0;
}

.listePrevisualisation .blocItem {
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
    padding: 10px 0;
    background: transparent;
    border-radius: 0;
    border-bottom: var(--border);
}

.listePrevisualisation .blocItem:last-child {
    border-bottom: none;
}

.previsualiserNumero {
    font: var(--fCta16);
    color: var(--cNoir3);
    min-width: 28px;
    text-align: center;
}

.previsualiserMinute {
    font: var(--fMenu14);
    color: var(--cNoir4);
    min-width: 36px;
    text-align: right;
}

.previsualiserPerdant {
    font: var(--fLight14);
    color: var(--cRouge);
}

.previsualiserIntervalle {
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
}

.previsualiserIntervalleLabel {
    font: var(--fMenu14);
    color: var(--cNoir2);
}

.previsualiserRaison {
    font: var(--fLight14);
    color: var(--cNoir4);
    min-width: 20px;
    text-align: center;
}

/* inutilisé 2026-06-13
.previsualiserPied {
    padding: 12px 20px;
    text-align: center;
    border-top: var(--border);
    background: var(--cBlanc);
}
*/

/* ============================================
   MODALE - VOCABULAIRE DE L'ANIMATION
   ============================================ */

/* Lien discret sous les champs de l'animation, ouvre la modale de vocabulaire. */
.vocabulaireScene {
    margin-top: 12px;
}

.vocabulaireLien {
    color: var(--cLink);
    cursor: pointer;
    font: var(--fText16);
}

.vocabulaireLien:hover {
    color: var(--cLinkh);
    text-decoration: underline;
}

.vocabulaireChamp {
    margin-bottom: 12px;
}

/* Bouton aligné sur le bord gauche des champs (pas de ré-indentation, contrairement à .formActions). */
.vocabulaireActions {
    margin-top: 12px;
}

/* Séparateur menu / mots : gap délibéré et équilibré (le hr global est à 30px, trop). Le champ
   au-dessus a déjà 12px de marge basse → 4px en haut + 16px en bas = 16px de chaque côté. */
.modaleVocabulaire hr {
    margin: 4px 0 16px;
}

.vocabulaireChamp label {
    display: block;
    margin-bottom: 4px;
    font: var(--fLabel);
    color: var(--cNoir2);
}

/* Pas d'icône ici : on aligne le titre sur le corps (comme .modaleRecap). */
.modaleVocabulaire .modaleHeader {
    padding-left: 20px;
}

/* ============================================
   MODALE « ANIMATIONS SIMILAIRES »
   Jumelles de famille d'une animation du scénario
   ============================================ */

.modaleSimilaires {
    max-width: 520px;
}

/* Pas d'icône ici non plus : titre aligné sur le corps (comme .modaleRecap). */
.modaleSimilaires .modaleHeader {
    background: var(--cBlanc);
    padding-left: 20px;
}

.modaleSimilaires .modaleCorps {
    padding: 16px 20px;
}

.similairesIntro {
    margin: 0 0 12px;
    color: var(--cNoir3);
}

.similairesListe {
    display: flex;
    flex-direction: column;
    gap: var(--gapMoyen); /* aligné 10 -> 12px (échelle PO 2026-07-18) */
}

.similairesCarte {
    display: flex;
    align-items: center;
    gap: var(--gapMoyen);
    padding: 12px;
    border: var(--border);
    border-radius: var(--borderR2);
}

/* Carte de l'animation en place : fond discret, pas de bouton (juste le libellé d'état) */
.similairesCarteActuelle {
    background: var(--cBlanc02);
}

.similairesIcone {
    width: 44px;
    height: 44px;
    object-fit: contain;
    flex-shrink: 0;
}

.similairesInfos {
    flex: 1;
    display: flex;
    flex-direction: column;
    gap: var(--gapDefaut); /* aligné 6 -> 8px (échelle PO 2026-07-18) */
}

.similairesInfos h4 {
    margin: 0;
}

.similairesActuelle {
    font: var(--fMenu14);
    color: var(--cNoir3);
}

.similairesActions {
    display: flex;
    align-items: center;
    gap: var(--gapLarge); /* aligné 16 -> 20px (échelle PO 2026-07-18) */
}

/*!**********************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/regie/css/56_scenario/_alertes.css ***!
  \**********************************************************************************************************************************/
/* ========================================
   Formulaire actif : atténuation des briques
   ======================================== */

/* Atténuation des briques non actives quand un formulaire est ouvert */
#scenarioGrille.formulaireActif .brique:not(.briqueActive):not(:hover),
.briquesAjouter.formulaireActif .brique:not(.briqueActive):not(:hover) {
    background: transparent;
    border-color: var(--cNoir5);
    opacity: .7;
}

/* Atténuation des briques quand le menu d'ajout est ouvert (sauf brique +) */
#scenarioGrille.menuAjouterActif .brique:not(.briqueAjouter) {
    background: transparent;
    border-color: var(--cNoir5);
    opacity: .7;
}

/* ========================================
   Scene après confirmation
   ======================================== */

@keyframes briqueRetour {
    from {
        opacity: .7;
        background: transparent;
    }
    to {
        opacity: 1;
    }
}

#scenarioGrille.apresConfirmation .brique:not(.briqueModifiee) {
    animation: briqueRetour 0.4s ease forwards;
}

/*!**********************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/regie/css/56_scenario/_uploads.css ***!
  \**********************************************************************************************************************************/
/* ============================================
   APERÇU DES IMAGES (Formulaire upload)
   ============================================ */

.champAvecVignette {
    margin-bottom: 15px;
}

/* .vignetteImageExistante utilise .blocEncadre (défini dans _formulaires.css) */

.vignetteImageExistante img {
    max-width: 200px;
    max-height: 120px;
    object-fit: contain;
    display: block;
    margin: 10px 0;
}

.champUploadCache {
    display: none;
}

/* ============================================
   GALERIE PUBLIQUE (modale de choix d'image)
   ============================================ */

/* Règle d'autorité : les états du champ image sont pilotés par l'attribut hidden
   (galerieImages.ts). Sans !important, les display posés ailleurs (ex. noyau
   button.ctaAnnuler { display: block }) gagnent sur le hidden du navigateur. */
.champAvecVignette [hidden] {
    display: none !important;
}

/* Séparateur entre les deux façons de choisir (upload « ou charger depuis : » galeries) */
.champChoixImage .galerieOu {
    color: var(--cNoir3);
    margin: 2px 0;
    padding: 0;
    font: var(--fLabel);
}
.champChoixImage label {
    margin-bottom: 4px;
}

/* Rangée des boutons de galeries (publique / événement / toutes mes images) */
.galerieBoutons {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--gapMoyen);
}

.galerieGrille {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
    gap: var(--gapMoyen);
    padding: 20px;
}

.galerieVignette {
    border: none;
    padding: 0;
    background: transparent;
    cursor: pointer;
}

.galerieVignette img {
    width: 100%;
    aspect-ratio: 16 / 9;
    object-fit: cover;
    display: block;
    border-radius: var(--borderR1);
}

.galerieVignette:hover img {
    box-shadow: 0 1px 4px var(--cOmbreForte);
}

/* ============================================
   FORMULAIRE LOTS DYNAMIQUE
   ============================================ */

#distributionsContainer {
    margin-bottom: 20px;
}

/* .distributionItem utilise .blocEncadre (défini dans _formulaires.css) */

/* Le bouton supprimer de lot utilise .ctaSupprimer (défini dans _formulaires.css) */
.distributionItem > .ctaSupprimer {
    margin-top: 15px;
}

.distributionItemRow {
    display: flex;
    gap: var(--gapLarge);
    margin-bottom: 10px;
}

.distributionItemLabel {
    flex: 1;
}

.distributionItemStock {
    width: 100px;
    flex-shrink: 0;
}

/* inutilisé 2026-06-13
.distributionItem .champFormulaire {
    margin-bottom: 10px;
}
*/

@media (max-width: 650px) {
    .distributionItemRow {
        flex-direction: column;
        gap: var(--gapMoyen); /* aligné 10 -> 12px (échelle PO 2026-07-18) */
    }
}

#btnAjouterDistribution, #btnAjouterEquipe {
    font: var(--fText16);
    background: transparent;
    border: none;
    cursor: pointer;
    padding: 0;
    margin: 0 20px 20px 20px;
}

#btnAjouterDistribution {
    color: var(--cFondDistributions4);
}

/* Source Équipes : couleur de la section Participants */
#btnAjouterEquipe {
    color: var(--cFondGroupes4);
}

#btnAjouterDistribution:hover, #btnAjouterEquipe:hover {
    text-decoration: underline;
}

/*!*******************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/regie/css/56_scenario/_blocReseauSocial.css ***!
  \*******************************************************************************************************************************************/
/* ============================================
   BLOCS RÉSEAUX SOCIAUX - Styles communs
   Facebook, Instagram, LinkedIn
   ============================================ */

/* Bloc connexion (wrapper) */
.blocConnexion {
    margin: 10px 0 20px;
}

/* Bouton de connexion - classe commune */
.btnConnexion {
    display: inline-flex;
    align-items: center;
    gap: var(--gapDefaut);
    padding: 10px 20px;
    color: var(--cBlanc);
    border: none;
    border-radius: var(--borderR1);
    font: var(--fCta16);
    cursor: pointer;
}

.btnConnexion:disabled {
    background: var(--cBlanc03);
}

/* Variantes par réseau */
.btnConnexion.facebook {
    background: #1877F2; /* Couleur officielle de la marque Facebook */
    transition: background 0.2s;
}

.btnConnexion.facebook:hover {
    background: #166FE5; /* Couleur officielle de la marque Facebook (hover) */
}

.btnConnexion.instagram {
    background: linear-gradient(45deg, #FCAF45, #E1306C, #833AB4); /* Gradient officiel de la marque Instagram */
    transition: opacity 0.2s;
}

.btnConnexion.instagram:hover {
    opacity: 0.9;
}

.btnConnexion.linkedin {
    background: linear-gradient(135deg, #0077B5, #0A66C2); /* Gradient officiel de la marque LinkedIn */
    transition: opacity 0.2s;
}

.btnConnexion.linkedin:hover {
    opacity: 0.9;
}

/* Icône dans le bouton */
.iconeReseau {
    width: 20px;
    height: 20px;
}

/* ============================================
   État connecté (utilisé par tous les réseaux)
   ============================================ */

.connexionActive {
    display: flex;
    align-items: center;
    gap: var(--gapMoyen); /* aligné 10 -> 12px (échelle PO 2026-07-18) */
    padding: 10px 15px;
    background: var(--cSuccesFond);
    border: 1px solid var(--cSucces);
    border-radius: var(--borderR1);
}

.iconeConnecte::before {
    content: '✓';
    color: var(--cSucces);
    font-weight: bold;
}

.pageConnectee {
    font: var(--fText16);
    color: var(--cNoir1);
}

.btnDeconnecter {
    margin-left: auto;
    padding: 5px 10px;
    background: transparent;
    border: var(--borderCarte);
    border-radius: var(--borderR1);
    font: var(--fText16);
    color: var(--cNoir2);
    cursor: pointer;
}

.btnDeconnecter:hover {
    background: var(--cNoir5);
}

/* ============================================
   Alertes et messages
   ============================================ */

.alerteTokenExpire {
    margin-top: 10px;
    padding: 10px 15px;
    background: var(--cRouge6);
    border: 1px solid var(--cRouge);
    border-radius: var(--borderR1);
    font: var(--fText16);
    color: var(--cNoir1);
}

.alerteTokenExpire a {
    color: var(--cRouge);
    text-decoration: underline;
}

.messageInfo {
    padding: 10px 15px;
    background: var(--cNoir5);
    border: var(--borderCarte);
    border-radius: var(--borderR1);
    font: var(--fText16);
    color: var(--cNoir2);
}

/* ============================================
   Bloc publication/media (sélection de contenu)
   ============================================ */

.blocPublication,
.blocMedia {
    margin: 20px 0;
}

.blocPublication label,
.blocMedia label {
    display: block;
    margin-bottom: 5px;
    font: var(--fText16);
    color: var(--cNoir1);
}

.selectPublication,
.selectMedia {
    width: 100%;
    max-width: 400px;
    padding: 10px;
    border: var(--borderCarte);
    border-radius: var(--borderR1);
    font: var(--fText16);
    background: var(--cBlanc);
}

.selectPublication:disabled,
.selectMedia:disabled {
    background: var(--cNoir5);
}

.btnRefreshPublications,
.btnRefreshMedias {
    margin-left: 10px;
    padding: 10px 12px;
    background: var(--cBlanc);
    border: var(--borderCarte);
    border-radius: var(--borderR1);
    font-size: 16px;
    cursor: pointer;
    vertical-align: middle;
}

.btnRefreshPublications:hover,
.btnRefreshMedias:hover {
    background: var(--cNoir5);
}

.publicationSelectionnee,
.mediaSelectionne {
    margin-top: 5px;
    font: var(--fLight14);
    color: var(--cSucces);
}

/* ============================================
   Bloc actualisation
   ============================================ */

.infoActualisation {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 10px;
}

.labelActualisation {
    font: var(--fText16);
    color: var(--cNoir2);
}

.tempsRelatif {
    font: var(--fText16);
    font-weight: 600;
    color: var(--cNoir1);
}

.nombreParticipants {
    font: var(--fText16);
    font-weight: 600;
    color: var(--cNoir1);
}

.btnActualiser {
    padding: 10px 20px;
    background: var(--cFondGroupes_a);
    color: var(--cBlanc);
    border: none;
    border-radius: var(--borderR1);
    font: var(--fCta16);
    cursor: pointer;
    transition: background 0.2s;
}

.btnActualiser:hover {
    background: var(--cFondGroupes_ah);
}

.btnActualiser:disabled {
    background: var(--cBlanc03);
}

.erreurToken {
    margin-top: 10px;
    font: var(--fLight14);
    color: var(--cRouge);
}

.blocActualisation .messageAide {
    margin-top: 10px;
    font: var(--fLight14);
    color: var(--cNoir3);
}

/*!****************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/regie/css/56_scenario/_ongletGroupes.css ***!
  \****************************************************************************************************************************************/
/* ============================================
   ONGLET PARTICIPANTS - Styles spécifiques
   ============================================

   Les styles communs des blocs sont dans 53_blocs.css
   Ce fichier contient uniquement les éléments spécifiques
   à l'onglet participants.

   ============================================ */

/* Conteneur des blocs (commun participants et lots) */
.groupesListe,
.distributionsListe {
    display: flex;
    flex-direction: column;
    gap: var(--gapListe);
}

/* Message si vide (commun participants et lots) */
.groupesVide,
.distributionsVide {
    font: var(--fText16);
    color: var(--cNoir3);
    padding: 40px 20px;
    text-align: center;
    background: var(--cBlanc02);
    border-radius: var(--borderR2);
}

/* Liste des participants dans la modale */
.listeParticipants {
    list-style: none;
    margin: 0;
    padding: 0;
}

.listeParticipants li {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: var(--gapMoyen);
    padding: 10px 0;
    border-bottom: var(--border);
}

.listeParticipants li:last-child {
    border-bottom: none;
}

.participantNom {
    flex: 1;
    font: var(--fText16);
    color: var(--cNoir1);
}

.participantChances {
    font: var(--fLight14);
    color: var(--cNoir3);
}

.modaleVide {
    color: var(--cNoir3);
    text-align: center;
    padding: var(--paddingCorps);
}

/* ============================================
   TOGGLE MENU PARTICIPANTS
   Réutilise les styles de _ongletMenu.css
   Seule la couleur de l'indicateur change
   ============================================ */

/* Couleur spécifique pour l'indicateur participants */
.divOngletMenuGroupes .indicateurOnglet {
    background: var(--cFondGroupes3);
}

/* Sections masquées par défaut */
/* inutilisé 2026-06-13
.sectionGroupes {
    display: none;
}

.sectionGroupes.visible {
    display: block;
}
*/

/* ============================================
   TOGGLE MENU LOTS
   Réutilise les styles de _ongletMenu.css
   Seule la couleur de l'indicateur change
   ============================================ */

/* Couleur spécifique pour l'indicateur lots */
.divOngletMenuDistributions .indicateurOnglet {
    background: var(--cFondDistributions3);
}

/* Sections masquées par défaut */
/* inutilisé 2026-06-13
.sectionDistributions {
    display: none;
}

.sectionDistributions.visible {
    display: block;
}
*/


/*!**********************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/regie/css/56_scenario/_ongletDistributions.css ***!
  \**********************************************************************************************************************************************/
/* ============================================
   ONGLET LOTS - Styles spécifiques
   ============================================

   Les styles communs (.distributionsListe, .distributionsVide) sont
   définis dans _ongletGroupes.css (sélecteurs groupés)

   Ce fichier contient uniquement les éléments spécifiques
   à l'onglet lots qui diffèrent de l'onglet participants.

   ============================================ */

/*!******************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/regie/css/56_scenario/_ongletResultats.css ***!
  \******************************************************************************************************************************************/
/* ============================================
   ONGLET RÉSULTATS - Styles spécifiques
   ============================================

   Les styles communs des blocs sont dans 53_blocs.css
   Ce fichier contient uniquement les éléments spécifiques
   à l'onglet résultats (sections, gagnants, etc.)

   ============================================ */

/* Section de résultats */
.sectionResultats {
    margin-bottom: 40px;
}

.sectionResultatsTitre {
    font: var(--fH3);
    color: var(--cNoir1);
    margin: 0 0 20px 0;
    padding-bottom: 12px;
    border-bottom: var(--border);
}

/* Liste des blocs de téléchargement */
.listeTelecharger {
    display: flex;
    flex-direction: column;
    gap: var(--gapLarge); /* aligné 16 -> 20px (échelle PO 2026-07-18) */
}

/* Bloc résultat par animation — box (titre = nom de l'animation, fin trait comme les box participants) */
.blocResultatScene {
    max-width: 600px;
    margin-bottom: 16px;
    padding: 16px 20px;
    background: var(--cBlanc);
    border: var(--borderForm);
    border-radius: var(--borderR1);
}

.blocResultatScene:empty {
    display: none;
}

.blocResultatTitre {
    font: var(--fH4);
    color: var(--cNoir1);
    margin: 0 0 12px 0;
}

.blocResultatBoutons {
    display: flex;
    flex-wrap: wrap;
    gap: var(--gapDefaut);
}

/* Téléchargements résultats : une ligne par ronde/classement, petits liens par format. */
.resultatLignes {
    display: flex;
    flex-direction: column;
    gap: var(--gapDefaut); /* aligné 6 -> 8px (échelle PO 2026-07-18) */
}

.resultatLigne {
    display: flex;
    align-items: baseline;
    gap: var(--gapMoyen);
    font: var(--fText16);
}

.resultatLabel {
    color: var(--cNoir3);
    min-width: 100px;
}

.resultatLien {
    color: var(--cLink);
    cursor: pointer;
}

.resultatLien:hover {
    color: var(--cLinkh);
    text-decoration: underline;
}

/*!********************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/regie/css/56_scenario/_ongletPublication.css ***!
  \********************************************************************************************************************************************/
/* Onglet Publication — une carte par animation : titre, case « publier », lien + QR. */

.blocPublication {
    margin-bottom: 16px;
}

.publicationCaseLabel {
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
    cursor: pointer;
}

.publicationLien {
    margin-top: 12px;
}

/*!****************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/regie/css/56_scenario/_recapitulatif.css ***!
  \****************************************************************************************************************************************/
/* ============================================
   RÉCAPITULATIF SCÉNARIO (stepper vertical)
   ============================================ */

/* Container du stepper */
.recapStepper {
    display: flex;
    flex-direction: column;
    gap: 0;
}
#scenarioPanneau .recapStepper > .recapActions + .recapBloc {
    margin-top: 32px;
}

/* Connecteur vertical entre les blocs */
.recapConnecteur {
    width: 3px;
    height: 24px;
    background: var(--cBlanc03);
    margin-left: 20px;
}

/* Bloc individuel du stepper */
.recapBloc {
    position: relative;
    border-radius: var(--borderR1);
    border: var(--borderCarte);
    min-height: 66px;
    overflow: hidden;
}

/* Titre du bloc (h3) */
.recapBloc h3 {
    display: flex;
    align-items: center;
    gap: var(--gapMoyen); /* aligné 10 -> 12px (échelle PO 2026-07-18) */
    padding: 10px 14px 0;
    font: var(--fH4);
    margin: 0;
}

/* Étiquettes du récap : un SEUL style, qu'elles soient cliquables (<a>/<button> en mode
   Préparer / progression) ou statiques. Fond clair de catégorie, texte noir, bordure légère
   (choix PO 2026-07-20 : plus de pastille foncée à texte blanc — l'onglet Diffuser fait foi).
   .recapTagSortie = neutre (noir) : une sortie peut être de n'importe quelle famille.
   .recapTagSortieSecondaire = sortie `secondaire` au contrat, présentée en retrait. */
.recapTagGroupes,
.recapTagDistributions,
.recapTagSortie,
.recapTagSortieSecondaire,
.recapLienGroupes,
.recapLienDistributions {
    display: inline-block;
    margin: 2px 0;
    padding: var(--paddingEtiquette);
    border-radius: var(--borderR0);
    border: 1px solid currentColor;
    color: var(--cNoir3);
}

.recapTagSortieSecondaire {
    color: var(--cNoir4);
}

.recapTagGroupes,
.recapLienGroupes { background: var(--cFondGroupes); }

.recapTagDistributions,
.recapLienDistributions { background: var(--cFondDistributions); }

/* Titre d'animation/affichage cliquable (mode Préparer) : lien sobre, sans pastille colorée,
   pour ne pas perturber la lecture — même sobriété que le titre non cliquable de la progression. */
.recapLienScenes,
.recapLienAffichages {
    color: inherit;
}

/* Affordance « cliquable » : soulignement au survol (étiquettes d'entrée + titres) */
.recapLienGroupes:hover,
.recapLienDistributions:hover,
.recapLienScenes:hover,
.recapLienAffichages:hover {
    text-decoration: underline;
}

/* Sous-titre dans le bloc (h4) */
.recapBloc h4 {
    font: var(--fH4);
    margin: 0;
    color: var(--cNoir3);
}

/* Listes à puces dans le bloc */
.recapBloc ul {
    margin: 4px 0;
    padding-left: 20px;
}

.recapBloc li {
    font: var(--fText16);
    color: var(--cNoir3);
}

/* Détails du bloc */
.recapBlocDetail {
    padding: 4px 14px 10px;
    font: var(--fText16);
    color: var(--cNoir3);
}

.recapBlocDetail p {
    margin: 2px 0;
}

.recapBlocDetail hr {
    border: none;
    border-top: var(--borderCarte);
    margin: 20px 0;
}

/* Icône de l'animation en rappel dans le coin haut-droit du bloc.
   64px = taille d'icône standard du projet (harmonisation en cours, décision PO 2026-06-10).
   Hors flux (absolute) pour ne pas gonfler la hauteur du titre — calée sur le padding du h3. */
.recapTitreIcone {
    position: absolute;
    top: 0;
    right: 0;
    width: 64px;
    height: 64px;
    padding: 6px;
    border-radius: var(--borderR1);
}

/* Variantes couleur par type */
.recapBlocGroupes, /* .recapBlocDistributions (inutilisé 2026-06-13) */ .recapBlocEntreesSorties {
    background: var(--cBlanc1);
}

.recapBlocScene .recapTitreIcone {
    background: var(--cFondScenes);
}

.recapBlocScene.recapBlocAffichage .recapTitreIcone {
    background: var(--cFondAffichages);
}

.recapBlocConfigurations {
    background: var(--cFondConfig);
}

/* inutilisé 2026-06-13
.recapBlocFinal {
    background: var(--cBlanc02);
}
*/

/* Lien "Modifier" sous le récap */
.recapActions {
    padding: 10px 14px;
}

/* Même couleur qu'Annuler des formulaires (noyau 31_cta.css) : les actions neutres sont
   noires, les couleurs restent réservées aux actions marquées (Supprimer). */
.recapActions a {
    color: var(--cNoir3);
}

.recapActions a:hover {
    text-decoration: underline;
}

/* Image dans un bloc récap */
.recapImage {
    max-width: 100%;
    border-radius: var(--borderR1);
}

/* Pastilles couleurs dans le récap */
.recapCouleurs {
    display: flex;
    gap: var(--gapDefaut);
    margin-top: 6px;
}

.recapCouleurPastille {
    width: 28px;
    height: 28px;
    border-radius: 50%;
    border: var(--border);
}

/* Message vide */
.recapVide {
    font: var(--fItalic16);
    color: var(--cNoir3);
    padding: 16px 0;
}

/* Source list dans les détails */
/* inutilisé 2026-06-13
.recapSources {
    display: flex;
    flex-direction: column;
    gap: 2px;
}
*/

/* Alerte insuffisance */
.recapAlerte {
    color: var(--cRouge);
    font: var(--fAlerte16);
}

/* Brique récapitulatif dans la grille du scénario */
/* inutilisé 2026-06-13
.brique.briqueRecap {
    background: var(--cBlanc02);
    border-color: var(--cBlanc03);
}
*/

/* inutilisé 2026-06-15 - concept recap.js retiré
.recapAnimConfig:empty {
    display: none;
}
*/

.recapEncadre {
    margin: 10px 0;
    padding: 10px 15px;
    border: var(--borderCarte);
    border-radius: var(--borderR1);
    background: #FFF8;
}

/* inutilisé 2026-06-15 - concept recap.js retiré
.recapAnimConfig h4 {
    font: var(--fH4);
    margin: 20px 0 4px;
}

.recapAnimConfig h4:first-child {
    margin-top: 0;
}

.recapAnimConfig p {
    font: var(--fText16);
    color: var(--cNoir3);
    margin: 2px 0;
}

.recapAnimConfig ul,
.recapAnimConfig ol {
    margin: 4px 0;
    padding-left: 20px;
}

.recapAnimConfig li {
    font: var(--fText16);
    color: var(--cNoir3);
}

.recapAnimConfig table {
    width: 100%;
    border-collapse: collapse;
    margin: 6px 0;
    font: var(--fText16);
    color: var(--cNoir3);
}

.recapAnimConfig th,
.recapAnimConfig td {
    padding: 4px 8px;
    text-align: left;
    border-bottom: var(--borderCarte);
}

.recapAnimConfig th {
    font-weight: 600;
}

.recapAnimConfig hr {
    border: none;
    border-top: var(--borderCarte);
    margin: 8px 0;
}
*/

/* Boutons participants cliquables dans la progression : même étiquette que les autres
   (contour compris, cf. bloc du haut), on n'ajuste que l'interactivité. */
button.recapTagGroupes {
    cursor: pointer;
    font: inherit;
}

button.recapTagGroupes:hover {
    text-decoration: underline;
}

/* ============================================
   PROGRESSION — États des blocs
   ============================================ */

/* Bloc non actif : atténué */
#progression .recapBlocScene {
    opacity: .5;
    transition: opacity 0.3s;
}

/* Bloc actif : pleine couleur */
#progression .recapBlocScene.recapBlocActif {
    opacity: 1;
}

/* Info d'état dynamique (générée par JS) */
.progressionEtat {
    font: var(--fCta16);
    color: var(--cCta);
    padding: 6px 14px;
}

/* Aération de secours quand le bloc n'a pas encore de contenu de progression */
.progressionContenu:not(:has(*)) {
    padding-bottom: 10px;
}

/* Blocs de progression émis par l'animation (obtenirProgression → rendu unique renduBlocs.ts) */
.progressionBlocTitre {
    font: var(--fH4);
    color: var(--cNoir3);
    margin: 6px 0 2px;
}

.progressionBlocTexte {
    font: var(--fText16);
    color: var(--cNoir3);
    margin: 2px 0;
}

.progressionBlocListe {
    margin: 4px 0;
    padding-left: 20px;
}

.progressionBlocListe li {
    font: var(--fText16);
    color: var(--cNoir3);
}

.progressionBlocBarre {
    margin: 8px 0;
}

.progressionBlocBarrePiste {
    height: 10px;
    border-radius: var(--borderR1);
    background: var(--cBlanc03);
    overflow: hidden;
}

.progressionBlocBarreJauge {
    height: 100%;
    background: var(--cCta);
    transition: width 0.3s;
}

.progressionBlocBarreLabel {
    display: block;
    margin-top: 4px;
    font: var(--fCta16);
    color: var(--cCta);
}

/*!*************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/regie/css/56_scenario.css ***!
  \*************************************************************************************************************************/
/* ============================================
   SCÉNARIO - Fichier principal
   ============================================

   Ce fichier importe les partials organisés par thème.
   Chaque partial gère un aspect spécifique de la scenario.

   ============================================ */

/*!****************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/regie/css/57_ongletRegie.css ***!
  \****************************************************************************************************************************/
/* ============================================
   ONGLET RÉGIE - Lanceur / Pilotage
   Utilise .panneauWrapper / .panneauGauche / .panneauFormulaire
   définis dans 56_scenario/_formulaires.css
   ============================================ */

/* ============================================
   BLOC RÉGIE (design sobre, en premier)
   ============================================ */

.blocRegie {
    display: flex;
    flex-direction: column;
    gap: var(--gapLarge); /* aligné 16 -> 20px (échelle PO 2026-07-18) */
    padding: var(--paddingCorps);
    border: var(--borderCarte);
    border-radius: var(--borderR1);
}

.blocRegie h3 {
    margin: 0;
}

.blocRegie .ctaSupprimer {
    width: max-content;
}

/* Écran de suppression : avertissement accepté (case « J'ai compris ») — fond noir en surcharge
   du rouge d'alerte, marges et padding inchangés pour ne rien décaler. */
.alertErreur.accepteAvertissement {
    background: var(--cNoir);
}

/* ============================================
   URL BOX (copier l'URL)
   ============================================ */

.regieUrlBox {
    display: flex;
    gap: var(--gapMoyen);
}

.regieUrl {
    flex: 1;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.regieUrl:hover {
    text-decoration: underline;
}

.btnCopier {
    font: var(--fText16);
    color: var(--cNoir2);
    background: transparent;
    border: none;
    cursor: pointer;
    padding: 0;
    white-space: nowrap;
}

.btnCopier:hover {
    text-decoration: underline;
}

/* État après copie : texte vert, non interactif */
.btnCopier.copie {
    cursor: default;
    pointer-events: none;
}

/* ============================================
   QR CODE
   ============================================ */

.regieQrCode img {
    display: block;
    width: 150px;
    height: 150px;
    transform: translateX(-17px);
}


/* ============================================
   CODE D'ACCÈS (caché par défaut)
   ============================================ */

.regieCodeBox {
    display: flex;
    align-items: center;
    gap: var(--gapLarge); /* aligné 16 -> 20px (échelle PO 2026-07-18) */
}

.regieCodeMasque,
.regieCodeValeur {
    font: var(--fMono24b);
    letter-spacing: 0.3em;
    color: var(--cNoir1);
}

.regieCodeMasque {
    color: var(--cNoir4);
}

.btnDecouvrir {
    padding: 10px 20px;
    font: var(--fText16);
    color: var(--cNoir1);
    background: var(--cBlanc);
    border: var(--borderForm);
    border-radius: var(--borderR1);
    cursor: pointer;
}

.btnDecouvrir:hover {
    background: var(--cBlanc02);
    color: var(--cNoir2);
}

.btnDecouvrir[hidden] {
    visibility: hidden;
}

/* ============================================
   CHANGER MES CODES (style discret comme Supprimer)
   ============================================ */

.btnChangerCodes {
    font: var(--fText16);
    color: var(--cRouge);
    background: transparent;
    border: none;
    cursor: pointer;
    padding: 0;
}

.btnChangerCodes:hover {
    text-decoration: underline;
}

/* ============================================
   PLACEHOLDER (rien de configuré)
   ============================================ */

.regiePlaceholder {
    text-align: center;
    padding: 48px 24px;
    color: var(--cNoir3);
    font: var(--fText16);
}

/* ============================================
   COMPTEUR GLOBAL (fond blanc, au-dessus du mode test)
   ============================================ */

#compteurGlobal {
    padding: var(--paddingCorps);
    border: var(--borderCarte);
    border-radius: var(--borderR1);
    background: var(--cFondGroupes);
}

#compteurGlobal > div {
    width: max-content;
    margin-left: 40px;
}

@media (max-width: 600px) {
    #compteurGlobal > div {
        margin-left: -5px;
    }
}

/* inutilisé 2026-06-13
.compteurGlobalLimite {
    font: var(--fText16);
    color: var(--cNoir2);
    margin: 10px 0 4px;
}
*/

.compteurGlobalLigne {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    margin: 0;
}

.compteurGlobalTotal {
    margin-top: 6px;
    padding-top: 6px;
    border-top: 1px solid var(--cTest3);
}

.compteurGlobalLabel {
    font: var(--fText16);
    color: var(--cNoir2);
}

.compteurGlobalValeur,
.compteurGlobalValeurReels,
.compteurGlobalValeurFictifs {
    font: var(--fMono24b);
    color: var(--cNoir1);
    text-align: right;
    min-width: 60px;
}

.compteurGlobalTotal .compteurGlobalValeur {
    font: var(--fMono24b);
}

#compteurGlobal.modeTestActif {
    background: var(--cTest);
}

#compteurGlobal.limiteAtteinte .compteurGlobalValeur {
    color: var(--cRouge);
}

/* ============================================
   BLOC MODE TEST (participants fictifs)
   ============================================ */

.fictifActif .blocIcone img,
.fictifActif .blocIcone svg {
    background: var(--cTest);
}

/* Section fictifs */
#sectionFictifs {
    display: flex;
    flex-direction: column;
    gap: var(--gapLarge);
}

#sectionFictifs.hidden {
    display: none;
}

/* Override du bloc générique pour le mode test */
.bloc.blocGroupe {
    max-width: none;
    border: var(--borderCarte);
    background: var(--cBlanc);
    border-radius: var(--borderR1);
}

.blocGroupe .blocCorps {
    gap: var(--gapMoyen);
    padding: 16px;
}

/* Ligne 2 : Toggle - réutilise .toggleAvecLabel de _modale.css */

/* Ligne 3 : Contenu conditionnel */
.blocGroupeContenu {
    display: flex;
    flex-direction: column;
    gap: var(--gapMoyen);
}

.blocGroupeReels.hidden,
.blocGroupeFictifs.hidden {
    display: none;
}

/* Compteurs - réutilise les classes de _ongletGroupes.css */
.blocGroupeReels /*, .fictifsCompteur (inutilisé 2026-06-13) */ {
    display: flex;
    align-items: baseline;
    gap: var(--gapDefaut);
    margin-bottom: 10px;
}

/* Label avant le compteur */
#blocModeTest .compteurLabel {
    font: var(--fText16);
    color: var(--cNoir3);
}

/* Valeur principale (gros chiffre) */
#blocModeTest .compteurValeur {
    font: var(--fMono24b);
    color: var(--cNoir1);
}

/* Séparateur "/" */
#blocModeTest .compteurSeparateur {
    font: var(--fText16);
    color: var(--cNoir4);
}

/* Test en cours : formulaires désactivés */
#blocModeTest.testEnCours .toggleSlider {
    opacity: .5;
    cursor: default;
}

/* Formulaire d'ajout fictifs */
/* inutilisé 2026-06-13
.fictifsFormulaire {
    display: flex;
    align-items: center;
    gap: var(--gapMoyen);
    flex-wrap: wrap;
}
*/

/* Input et bouton même hauteur */
.inputNombreFictifs {
    width: 80px;
    padding: 4px 8px;
    text-align: center;
}

.inputNombreFictifs.hidden /*, .btnAjouterFictifs.hidden (inutilisé 2026-06-13) */ {
    display: none;
}

/* ============================================
   TABLEAU DONNÉES COLLECTÉES (dans recapBloc)
   ============================================ */

.tableauDonneesCollectees {
    border-collapse: collapse;
}

.tableauDonneesCollectees td {
    padding: 3px 12px 3px 0;
    vertical-align: baseline;
    max-width: 300px;
}

.tableauDonneesCollectees td:first-child {
    font: var(--fText16);
    color: var(--cNoir1);
    white-space: nowrap;
}

.tableauDonneesCollectees td:last-child {
    font: var(--fLight14);
    color: var(--cNoir1);
    white-space: nowrap;
}

/*!***************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/regie/css/60_accesRegie.css ***!
  \***************************************************************************************************************************/
/* ============================================
   PAGE ACCÈS RÉGIE (saisie code 5 lettres)
   Layout commun dans noyau/css/composants/formAccesCode.css
   ============================================ */

/* Lien connexion — spécifique à la régie uniquement */
.noteConnexion {
    margin-top: 24px;
    font: var(--fLight14);
    color: var(--cNoir3);
}

.noteConnexion a {
    color: var(--cLink);
    text-decoration: underline;
}

.noteConnexion a:hover {
    color: var(--cLinkh);
}

/*!***************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/studio/kitSingleton/css/carte.css ***!
  \***************************************************************************************************************************************/
/**
 * Kit CSS — Effets visuels (carte)
 *
 * Applique via data-effet sur #studioEcran.
 * Ajouter .vueCarte sur tout bloc a styliser.
 */

/* ── Variable bordure dérivée (une seule source) ── */
#studioEcran {
    --ilotBordure: 1px solid color-mix(in srgb, var(--couleurPrimaire) 30%, transparent);
}

/* ── Classes partagées ── */

.vueTitreCentre {
    font-size: var(--police1);
    font-family: 'Scada', 'Noto Sans', sans-serif;
    font-weight: 700;
    text-align: center;
    color: var(--couleurPrimaire);
}

/* Scene d'entree commune */
@keyframes vueApparition {
    from {
        opacity: 0;
        transform: translateY(0.75em);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

.vueAnimer {
    animation: vueApparition 150ms ease-out forwards;
}

/* Carte de base */
.vueCarte {
    border-radius: var(--ilotRayon);
    padding: var(--ilotPadding);
}

/* Glacis */
[data-effet="1"] .vueCarte {
    background-color: color-mix(in srgb, var(--couleurFond) 80%, transparent);
    backdrop-filter: blur(12px);
    border: 1px solid var(--couleurFond);
    box-shadow: 0 4px 20px var(--cNoir);
}

/* Transparent */
[data-effet="2"] .vueCarte {
    background-color: color-mix(in srgb, var(--couleurFond) 70%, transparent);
}

/* Voile */
[data-effet="3"] .vueCarte {
    background: linear-gradient(165deg,
        color-mix(in srgb, var(--couleurFond) 95%, transparent),
        color-mix(in srgb, var(--couleurFond) 40%, transparent));
}

/* Encadre */
[data-effet="4"] .vueCarte {
    background-color: var(--couleurFond);
    border: 2px solid var(--couleurPrimaire);
}

/* Ombre */
[data-effet="5"] .vueCarte {
    background-color: var(--couleurFond);
    box-shadow: 0 4px 20px var(--cOmbreForte);
}

/* Popup : ombre portee pour detacher du fond */
.vuePopup {
    box-shadow: 0 0 20px 10px var(--cNoir);box-shadow: 0 0 50px 50px var(--cNoir);
}

/* Ilots internes : bordure subtile dans la carte */
[data-effet] .vueCarte .vueTableau,
[data-effet] .vueCarte .vueMatchLigne {
    background: var(--couleurFond);
    border-radius: var(--ilotRayonInterne);
    border: var(--ilotBordure);
}

/* Gagnant / Perdant (generique) */
.vueGagnant {
    color: var(--couleurPrimaire);
}

.vuePerdant {
    font-weight: 200;
    opacity: 0.4;
}

/* Pagination */
.vuePagination {
    text-align: center;
}

/* Lot display */
.vueLot {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
}

.vueLotImageWrap {
    flex: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 0;
    width: 100%;
}

.vueLotImage {
    max-width: min(80%, calc(100vw * 4 / 16));
    max-height: min(90%, calc(100vh * 3 / 9));
    object-fit: contain;
    display: block;
}

/* Badge résultat — participant nommé ou numéro tombola */

@keyframes vueBadgeResultatPop {
    0%   { opacity: 0; transform: scale(0.2) rotate(-6deg); }
    60%  { opacity: 1; transform: scale(1.1) rotate(1deg); }
    80%  { transform: scale(0.96); }
    100% { opacity: 1; transform: scale(1) rotate(0deg); }
}

@keyframes vueBadgeResultatFlash {
    0%   {
        box-shadow:
            inset  6px  6px 18px 18px #FFB3C188,
            inset -6px  6px 18px 18px #B3D9FF88,
            inset  6px -6px 18px 18px #B3FFB388,
            inset -6px -6px 18px 18px #FFF3B388;
    }
    100% { box-shadow: inset 0 0 0 0 transparent; }
}

.vueBadgeResultat.vueAnimer {
    animation: vueBadgeResultatPop 550ms cubic-bezier(0.34, 1.56, 0.64, 1) forwards,
               vueBadgeResultatFlash 700ms ease-out forwards;
}

.vueBadgeResultat {
    font-size: var(--police1);
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: 0.5em 1em;
    border: 1px solid transparent;
    border-radius: var(--ilotRayonInterne);
    outline: 1px solid var(--cNoir);
    outline-offset: -1px;
    overflow: hidden;
    width: calc(var(--police1) * 20);
    max-width: 100%;
    min-height: 2.2em;
    flex-shrink: 0;
}

.vueBadgeResultatVide {
    background: #00000005;
    outline-color: #0005;
}

.vueBadgeResultatNom {
    position: relative;
    z-index: 1;
    font-weight: 700;
    color: var(--cNoir);
    text-align: center;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    min-width: 0;
}

@keyframes vueBadgeResultatEcarter {
    0%   { letter-spacing: 0; }
    100% { letter-spacing: 0.3em; }
}

.vueBadgeResultatNomChiffres {
    letter-spacing: 0.3em;
}

.vueBadgeResultat.vueAnimer .vueBadgeResultatNomChiffres {
    animation: vueBadgeResultatEcarter 500ms cubic-bezier(0.34, 1.56, 0.64, 1) 100ms both;
}

.vueBadgeResultatNumero {
    position: relative;
    z-index: 1;
    font-size: 0.75em;
    font-weight: 400;
    color: var(--cNoir);
    opacity: 0.7;
    text-align: center;
}

/* Séparateurs directionnels */
.vueSeparateurH,
.vueSeparateurV {
    flex-shrink: 0;
    background: color-mix(in srgb, var(--couleurSecondaire) 15%, transparent);
}

.vueSeparateurH { width: 100%; height: 1px; }
.vueSeparateurV { height: 100%; width: 1px; }

/*!**************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/composants/formAccesCode.css ***!
  \**************************************************************************************************************************************/
/* ============================================
   FORMULAIRE ACCÈS CODE (partagé régie + borne)
   Styles communs pour la saisie du code 5 lettres
   ============================================ */

/* ============================================
   PAGE D'ACCÈS CODE — Layout partagé
   Utilisé par regieAcces.twig et borneAcces.twig
   ============================================ */

.pageAccesCode {
    min-height: 100vh;
    min-height: 100dvh;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 20px;
    background: var(--cBlanc02);
}

.contenuAccesCode {
    width: 100%;
    max-width: 400px;
    text-align: center;
    padding: 40px 32px;
    background: var(--cBlanc);
    border-radius: var(--borderR2);
    box-shadow: var(--ombrePortee);
}

.contenuAccesCode h1 {
    font: var(--fH2);
    margin-bottom: 12px;
}

.accesCodeInstruction {
    font: var(--fText16);
    color: var(--cNoir3);
    margin-bottom: 24px;
}

.contenuAccesCode .alertErreur {
    background: var(--cRouge6aht);
    color: var(--cRouge6);
    padding: 12px 16px;
    border-radius: var(--borderR1);
    margin-bottom: 20px;
    font: var(--fText16);
}

.contenuAccesCode .alertBlocage {
    background: var(--cOrFond);
    color: var(--cOrh);
    padding: 24px;
    border-radius: var(--borderR2);
    font: var(--fText16);
}

.contenuAccesCode .alertBlocage p {
    margin: 0 0 8px;
}

.contenuAccesCode .alertBlocage p:last-child {
    margin-bottom: 0;
}

.formAccesCode {
    display: flex;
    flex-direction: column;
    gap: var(--gapLarge);
}

/* ============================================
   CHAMP CODE — Saisie 5 lettres
   ============================================ */

.champCode {
    display: flex;
    justify-content: center;
    position: relative;
    margin-bottom: 15px;
}

.inputCodeAcces {
    width: 100%;
    max-width: 240px;
    padding: 20px;
    font: var(--fH1);
    font-family: var(--ffMono);
    text-align: center;
    text-transform: uppercase;
    letter-spacing: 0.3em;
    border: var(--borderForm);
    border-radius: var(--borderR2);
}

.inputCodeAcces::placeholder {
    color: var(--cNoir5);
    letter-spacing: 0.3em;
}

.inputCodeAcces:focus {
    outline: none;
    border-color: var(--cFormFocus);
    box-shadow: 0 0 0 3px var(--cFormFocusHalo);
}

.btnAcceder {
    width: 100%;
    padding: 18px 24px;
    font: var(--fCta16);
    color: var(--cCtat);
    background: var(--cCta);
    border: none;
    border-radius: var(--borderR1);
    cursor: pointer;
    transition: background 0.15s;
}

.btnAcceder:hover {
    background: var(--cCtah);
}

/* Bouton toggle visibilité du code */
.btnTogglePassword {
    position: absolute;
    right: 55px;
    top: 45%;
    transform: translateY(-50%);
    width: 28px;
    height: 28px;
    padding: 4px;
    background: transparent;
    border: none;
    cursor: pointer;
    color: var(--cNoir4);
    transition: color 0.15s;
}

.btnTogglePassword:hover {
    color: var(--cNoir2);
}

.btnTogglePassword svg {
    width: 100%;
    height: 100%;
}

/* État par défaut : œil barré visible (code masqué) */
.btnTogglePassword .iconeOeil {
    display: none;
}

.btnTogglePassword .iconeOeilBarre {
    display: block;
}

/* État visible : œil normal visible (code affiché) */
.btnTogglePassword.visible .iconeOeil {
    display: block;
}

.btnTogglePassword.visible .iconeOeilBarre {
    display: none;
}

/*!**************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/composants/surcoucheDemo.css ***!
  \**************************************************************************************************************************************/
/* ============================================
   SURCOUCHE DÉMO — pop-up iframe (composant noyau)

   Ouvre une démo (animation ou scénario) dans la page quand la fenêtre est
   assez grande, au lieu d'un nouvel onglet. Un seul système pour toutes les
   démos, Régie comme Vitrine (décision PO 2026-07-18).

   Design DUPLIQUÉ de la modale Régie (56_scenario/_modale.css) sous un autre
   nom — l'arbitrage de fusion viendra plus tard (décision PO 2026-07-18).

   Markup généré par surcoucheDemo.ts (noyau) sur les déclencheurs [data-demo]
   (liens href ou boutons data-url), aucun template :
   .surcouche > .surcoucheContenu > .surcoucheBarre (plein écran + croix) + .surcoucheIframe

   Les seuils d'ouverture (iframe 16/9 d'au moins 960×540 + marges 80/120)
   vivent dans surcoucheDemo.ts — garder TS et dimensionnement CSS alignés.
   ============================================ */

.surcouche {
    border: none;
    border-radius: var(--borderR1);
    padding: 0;
    box-shadow: var(--ombreModale);
    background: transparent;
}

.surcouche::backdrop {
    background: var(--cOverlay);
}

.surcoucheContenu {
    background: var(--cBlanc);
    border-radius: var(--borderR1);
    overflow: hidden;
    display: flex;
    flex-direction: column;
}

.surcoucheBarre {
    display: flex;
    justify-content: flex-end;
    border-bottom: var(--border);
}

/* Boutons de la barre : l'icône est dessinée par ::before (mask SVG) — design du
   .modaleClose (boutonFermeture.md) : le bouton reste VIDE en HTML. */
.surcoucheClose,
.surcouchePleinEcran {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    padding: 0;
    border: none;
    border-radius: var(--borderR1);
    background: transparent;
    cursor: pointer;
    transition: background 0.2s;
}

.surcoucheClose:hover,
.surcouchePleinEcran:hover {
    background: var(--cBlanc02);
}

.surcoucheClose::before,
.surcouchePleinEcran::before {
    content: '';
    width: 24px;
    height: 24px;
    background-color: var(--cNoir1);
}

.surcoucheClose::before {
    mask: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2724%27 height=%2724%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%271.5%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cline x1=%2718%27 y1=%276%27 x2=%276%27 y2=%2718%27/%3E%3Cline x1=%276%27 y1=%276%27 x2=%2718%27 y2=%2718%27/%3E%3C/svg%3E") center / contain no-repeat;
    -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2724%27 height=%2724%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%271.5%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cline x1=%2718%27 y1=%276%27 x2=%276%27 y2=%2718%27/%3E%3Cline x1=%276%27 y1=%276%27 x2=%2718%27 y2=%2718%27/%3E%3C/svg%3E") center / contain no-repeat;
}

.surcouchePleinEcran::before {
    mask: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2724%27 height=%2724%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%271.5%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M8 3H5a2 2 0 0 0-2 2v3%27/%3E%3Cpath d=%27M21 8V5a2 2 0 0 0-2-2h-3%27/%3E%3Cpath d=%27M3 16v3a2 2 0 0 0 2 2h3%27/%3E%3Cpath d=%27M16 21h3a2 2 0 0 0 2-2v-3%27/%3E%3C/svg%3E") center / contain no-repeat;
    -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2724%27 height=%2724%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%271.5%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M8 3H5a2 2 0 0 0-2 2v3%27/%3E%3Cpath d=%27M21 8V5a2 2 0 0 0-2-2h-3%27/%3E%3Cpath d=%27M3 16v3a2 2 0 0 0 2 2h3%27/%3E%3Cpath d=%27M16 21h3a2 2 0 0 0 2-2v-3%27/%3E%3C/svg%3E") center / contain no-repeat;
}

/* 16/9, aussi grand que la fenêtre le permet (marges : 80 en largeur, 120 en
   hauteur — la barre de la surcouche + l'air autour). */
.surcoucheIframe {
    display: block;
    border: none;
    width: min(calc(100vw - 80px), calc((100vh - 120px) * 16 / 9));
    aspect-ratio: 16 / 9;
}

/*!******************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/form.css ***!
  \******************************************************************************************************************/
fieldset {
    background-color: var(--cBlanc);
    border: var(--border);
    border-radius: var(--borderR1);
    margin: 10px 0;
    padding: 20px;
}

fieldset h3 {
    margin: 0 0 0.9375rem;
    color: var(--cLink);
}

hr {
    margin: 30px 0;
    border-top: var(--border);
    border-bottom: none;
}

hr.mini {
    margin: 10px 0;
    border-top: var(--border);
    border-bottom: none;
}

/* inutilisé 2026-06-13
#imgForm {
    max-width: 690px;
    width: 100%;
    margin: 15px 0;
}

#imgForm > div:last-child {
    aspect-ratio: 1100/449;
    max-width: 690px;
    width: 100%;
    margin-top: 60px;
    margin-bottom: 200px;
    background-size: contain;
    border: none;
    display: none;
}

#divForm {
    max-width: 690px;
    padding: 0 5px;
}

#divGlobalForm {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    height: 100%;
    text-align: center;
    gap: 10px;
}
*/


@media all and (min-width: 1500px) {
    /* inutilisé 2026-06-13
    #divGlobalForm {
        flex-direction: row;
        align-items: center;
        justify-content: center;
        gap: 30px;
    }

    #divForm div:last-child {
        display: block;
    }

    #divForm {
        padding: 0 30px;
    }

    #imgForm div:last-child {
        display: block;
    }
    */
}

/* inutilisé 2026-06-13
input.phNoir::placeholder {
    color: var(--cNoir);
}
*/

label {
    display: flex;
    align-items: baseline;
    font: var(--fLabel);
    margin: 0 0 2px;
    padding: 0;
    color: var(--cNoir1);
    user-select: none;
}

/* Label facultatif : couleur atténuée */
label:has(.facultatif) {
    color: var(--cNoir3);
}

/* Conteneur désactivé (champ disabled) */
.disabledDiv {
    opacity: 0.5;
}

input, select, textarea {
    width: 100%;
    border: var(--borderInput);
    border-radius: var(--borderR1);
    padding: 7px 8px;
    font: var(--fText16);
    color: var(--cNoir2);
    box-sizing: border-box;
}

/* Inputs spéciaux : pas de width 100% */
input[type="color"],
input[type="checkbox"],
input[type="radio"],
input[type="range"] {
    width: auto;
}

/* Input couleur */
input[type="color"] {
    padding: 2px;
    height: 40px;
    min-width: 60px;
    cursor: pointer;
}

input:disabled,
select:disabled,
textarea:disabled {
    background: none;
    border: 1px dashed var(--cBlanc5);
    pointer-events: none;
}

input[type="file"] {
    padding: 5px;
    cursor: pointer;
    background: var(--cBlanc);
}

input[type="file"]::file-selector-button {
    font: var(--fText16);
    color: var(--cBlanc);
    background: var(--cCta);
    border: none;
    border-radius: var(--borderR1);
    padding: 6px 12px;
    cursor: pointer;
    margin-right: 10px;
}

input[type="file"]::file-selector-button:hover {
    background: var(--cCtah);
}

input::placeholder,
textarea::placeholder {
    color: var(--cNoir5);
}

textarea::placeholder {
    white-space: pre-line;
}


label .facultatif /*, label .facultatifSpan, label .modifiable (inutilisé 2026-06-13) */ {
    display: inline;
    color: var(--cBleu7_t);
    font: var(--fLight14);
    padding-left: 10px;
    text-transform: lowercase;
}

/* Cacher "Facultatif" sur les champs conditionnels */
label.sansFacultatif .facultatif {
    display: none;
}

/* Textes d'aide */
form small,
form small a,
.help-text {
    color: var(--cNoir4);
    display: block;
    font: var(--fLight14);
    margin-left: 0;
    max-width: calc(100vw - 85px);
    padding: 2px 0;
}

.help-text.help-alerte {
    color: var(--cRouge6);
}
/* inutilisé 2026-06-13
div.cbForm input {
    cursor: pointer;
    width: auto;
    margin-top: 0;
}

div.cbForm label {
    cursor: pointer;
    text-align: justify;
}
*/

form {
    margin: 0 auto;
    padding: 0;
    text-align: left;
    max-width: 600px;
    min-width: auto;
    width: 100%;
}

/* inutilisé 2026-06-13
form > div > div.rowForm div {
    margin: 5px 0;
}

form > div.rowForm {
    margin: 0;
}

form > div.rowForm div.rowFormDownTxt {
    margin: 0 20px;
}

form > div.rowForm div.rowFormDownTxt > div {
    display: flex;
    justify-content: center;
    align-items: center;
    border: 3px solid var(--cBlanc03);
    border-radius: 10px;
    margin: 0;
    font: var(--fLight14);
    text-align: center;
    height: 100%;
    width: 100%;
    background-color: var(--cBlanc);
}
*/

/* inutilisé 2026-06-13
.infoLight {
    opacity: .8;
}
*/

/* inutilisé 2026-06-13
#formGainImg {
    grid-column: 1 / 2;
}

#formFormulaire {
    grid-column: 2 / 3;
    max-width: 320px;
}

p#pML {
    margin: 0 10% 0 38%;
    grid-column: 1/3;
}
*/

/* inutilisé 2026-06-13
.rowForm {
    display: grid;
    grid-template-columns: 100% 0%;
}

.rowForm ul {
    color: var(--cRouge);
    margin-block-start: 3px;
    margin-block-end: 3px;
    padding: 10px 0 0;
}
*/

/* Checkbox (.divCb) - Structure : .divCb > input + label > .svgCb + texte */
.divCb {
    position: relative;
    margin: 5px 0;
}

.divCb input[type="checkbox"] {
    position: absolute;
    opacity: 0;
    cursor: pointer;
    width: 0;
    height: 0;
}

.divCb label {
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
    cursor: pointer;
    margin: 0;
}

.divCb input[type="checkbox"]:disabled ~ label {
    opacity: 0.65;
}

.svgCb {
    width: 22px;
    height: 22px;
    color: var(--cBlanc);
    flex-shrink: 0;
}

.svgCb .checked {
    display: none;
}

.svgCb .checked path {
    fill: var(--cNoir1);
}

input[type="checkbox"]:checked ~ label .svgCb .checked {
    display: block;
}

input[type="checkbox"]:checked ~ label .svgCb .fondCb {
    fill: var(--cForm);
}

.divCbSupp input[type="checkbox"]:checked ~ label .svgCb svg .checked path {
    fill: var(--cRouge);
}

/* Radio button (.divRb) - Structure : .divRb > input + label > .svgRb + texte */
.divRb {
    position: relative;
    margin: 8px 0 5px;
}

.divRb input[type="radio"] {
    position: absolute;
    opacity: 0;
    cursor: pointer;
    width: 0;
    height: 0;
}

.divRb label {
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
    cursor: pointer;
    margin: 0;
}

.svgRb {
    width: 22px;
    height: 22px;
    color: var(--cBleu4);
    flex-shrink: 0;
}

.svgRb .checked {
    display: none;
}

input[type="radio"]:checked ~ label .svgRb .checked {
    display: block;
}

input[type="radio"]:checked ~ label .svgRb .fondCb {
    fill: var(--cForm);
}

/* inutilisé 2026-06-13
#uploadBtn1:focus {
    box-shadow: 0 0 0 2px var(--cForm);
}
*/

input:focus,
select:focus,
textarea:focus {
    border-color: var(--cFormFocus);
    outline: 2px solid var(--cFormFocus);
}

label small {
    display: inline-block;
    transform: translateY(-6px);
}

/* inutilisé 2026-06-13
.rowFormDownTxt {
    display: none;
}
*/

/* inutilisé 2026-06-13
#homeDivHaut {
    padding: 15px 15px 1px;
}

#homeDiv button.btn {
    bottom: 47px;
}

.formulaire #accrochePage {
    margin-bottom: -60px;
}

#homeDivBas {
    padding: 1px;
    margin: auto;
    width: 80%;
    text-align: center;
}
*/

/* inutilisé 2026-06-13
.rowOptin1,
.rowOptin2,
.rowOptin3,
.rowOptin4 {
    position: relative;
    margin: 5px 0;
}

.rowOptin1 label a {
    padding: 0;
}
*/


/* inutilisé 2026-06-13
#divForm div #loadingBarSpinner {
    display: none;
    justify-content: center;
    margin: 20px;
    font: var(--fLabel);
    color: var(--cTexte1);
    padding: 15px 30px;
}
*/

/* inutilisé 2026-06-13
#spinnerIcon {
    display: inline-block;
    width: 18px;
    height: 18px;
    margin-right: 10px;
    border: solid 2px transparent;
    border-top-color: var(--cTexte1);
    border-left-color: var(--cTexte1);
    border-radius: 50%;
    animation: animeSpinnerIcon 1000ms linear infinite;
}

@keyframes animeSpinnerIcon {
    0% {
        transform: rotate(0deg);
    }
    100% {
        transform: rotate(360deg);
    }
}
*/

.ctaSupprimer,
.ctaSecondaire,
.ctaValider /*, .ctaValider2 (inutilisé 2026-06-13) */ {
    width: 100%;
    height: 50px;
    padding: 10px 20px;
    margin-top: 20px;
    margin-bottom: 8px;
    cursor: pointer;
    font: var(--fCta16);
    border-radius: var(--borderR1);
}

.ctaSecondaire {
    display: block;
    text-align: center;
    border: 2px solid var(--cBleu4);
    background: var(--cBlanc);
    color: var(--cBleu4);
}

.ctaValider /*, .ctaValider2 (inutilisé 2026-06-13) */ {
    border: none;
    background: var(--cBleu4a);
    color: var(--cBleu4at);
}

.ctaSupprimer {
    border: 2px solid var(--cBlanc03);
    color: var(--cRouge6);
}

.ctaValider:hover /*, .ctaValider2:hover (inutilisé 2026-06-13) */ {
    background: var(--cBleu4ah);
    color: var(--cBleu4ht);
}

.ctaValider:disabled,
/* .ctaValider2:disabled, (inutilisé 2026-06-13) */
.ctaSecondaire:disabled,
.ctaSupprimer:disabled {
    opacity: 0.4;
    cursor: wait;
    pointer-events: none;
    filter: grayscale(1);
}

.formulaire {
    display: grid;
    grid-template-columns: 1fr;
    grid-template-rows: auto;
}

@media (min-width: 650px) {

    .formulaire {
        grid-template-columns: 1fr 1fr;
        grid-template-rows: auto;
        gap: 0 var(--gapListe); /* aligné 30 -> 32px (échelle PO 2026-07-18) */
    }

    /* inutilisé 2026-06-13
    .formulaireBorne {
        grid-column: 1 / 2;
        grid-row: 1 / 2;
    }

    .formulaireDate {
        grid-column: 1 / 2;
        grid-row: 2 / 3;
    }

    .formulaireCommercial {
        grid-column: 1 / 2;
        grid-row: 3 / 4;
    }

    .formulaireMagasin {
        grid-column: 2 / 3;
        grid-row: 1 / 5;
        display: grid;
    }
    */

}

/* inutilisé 2026-06-13
p#messageDate {
    color: var(--cNoir3);
    font-style: italic;
}

p#messageDate.erreurDate,
p#messageDate2.erreurDate {
    color: var(--cRouge);
    font-style: normal;
}
*/

fieldset ul {
    margin: 0 0 10px 0;
}

fieldset ul li {
    color: var(--cRouge);
}

/* inutilisé 2026-06-13
.imgBorne {
    max-width: 100%;
    height: auto;
    margin: 0 auto;
    display: block;
}
*/

label.required {
    position: relative;
    width: max-content;
}
/* inutilisé 2026-06-13
label.required2:after {
    content: "*";
    margin-left: 3px;
    color: var(--cNoir2);
}
*/

textarea {
    width: 100%;
    height: 100px;
    resize: vertical;
    border-bottom-right-radius: 0;
}

/*# sourceMappingURL=data:application/json;charset=utf-8;base64,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Ozs7Ozs7S0FxQkM7O0FBRUw7O0FBRUE7Ozs7Ozs7Ozs7O0NBV0M7O0FBRUQ7SUFDSSxrQkFBa0I7QUFDdEI7O0FBRUE7SUFDSSxvQkFBb0I7QUFDeEI7O0FBRUE7Ozs7Ozs7Q0FPQzs7QUFFRDtJQUNJLGtCQUFrQjtJQUNsQixrQkFBa0I7QUFDdEI7QUFDQTs7Ozs7O0NBTUM7O0FBRUQ7SUFDSSxXQUFXO0lBQ1gsYUFBYTtJQUNiLGdCQUFnQjtJQUNoQiw2QkFBNkI7QUFDakMsQyIsInNvdXJjZXMiOlsid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9jc3MvMDBfcmVzZXQuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9jc3MvMTBfZm9udC5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy8zMF9iYXNlLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvY3NzLzMxX2N0YS5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy80Ml9hdXRoLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvY3NzL2hhdXREZVBhZ2VDb21wdGUuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9yZWdpZS9jc3MvNTNfYmxvY3MuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9yZWdpZS9jc3MvNTRfaWNvbmVzLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvcmVnaWUvY3NzLzU1X3NpZGViYXJFdmVuZW1lbnQuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9yZWdpZS9jc3MvNTVfZXZlbmVtZW50cy5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL3JlZ2llL2Nzcy81Nl9ydWJyaXF1ZXMuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9yZWdpZS9jc3MvNTVfZmlsdHJlcy5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL3JlZ2llL2Nzcy81NV9zY2VuYXJpb3NDYXRhbG9ndWUuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9yZWdpZS9jc3MvNTVfc2NlbmFyaW9Nb2RpZmllci5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL3JlZ2llL2Nzcy81Nl9zY2VuYXJpby9fZXRpcXVldHRlcy5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL3JlZ2llL2Nzcy81Nl9zY2VuYXJpby9fZ3JpbGxlLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvcmVnaWUvY3NzLzU2X3NjZW5hcmlvL19mb3JtdWxhaXJlcy5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL3JlZ2llL2Nzcy81Nl9zY2VuYXJpby9fb25nbGV0TWVudS5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL3JlZ2llL2Nzcy81Nl9zY2VuYXJpby9fbWVudUFqb3V0ZXIuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9yZWdpZS9jc3MvNTZfc2NlbmFyaW8vX2JyaXF1ZXNDb3VsZXVycy5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL3JlZ2llL2Nzcy81Nl9zY2VuYXJpby9fZHJhZ0Ryb3AuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9yZWdpZS9jc3MvNTZfc2NlbmFyaW8vX21vZGFsZS5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL3JlZ2llL2Nzcy81Nl9zY2VuYXJpby9fYWxlcnRlcy5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL3JlZ2llL2Nzcy81Nl9zY2VuYXJpby9fdXBsb2Fkcy5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL3JlZ2llL2Nzcy81Nl9zY2VuYXJpby9fYmxvY1Jlc2VhdVNvY2lhbC5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL3JlZ2llL2Nzcy81Nl9zY2VuYXJpby9fb25nbGV0R3JvdXBlcy5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL3JlZ2llL2Nzcy81Nl9zY2VuYXJpby9fb25nbGV0RGlzdHJpYnV0aW9ucy5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL3JlZ2llL2Nzcy81Nl9zY2VuYXJpby9fb25nbGV0UmVzdWx0YXRzLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvcmVnaWUvY3NzLzU2X3NjZW5hcmlvL19vbmdsZXRQdWJsaWNhdGlvbi5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL3JlZ2llL2Nzcy81Nl9zY2VuYXJpby9fcmVjYXBpdHVsYXRpZi5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL3JlZ2llL2Nzcy81Nl9zY2VuYXJpby5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL3JlZ2llL2Nzcy81N19vbmdsZXRSZWdpZS5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL3JlZ2llL2Nzcy82MF9hY2Nlc1JlZ2llLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvc3R1ZGlvL2tpdFNpbmdsZXRvbi9jc3MvY2FydGUuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9jc3MvY29tcG9zYW50cy9mb3JtQWNjZXNDb2RlLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvY3NzL2NvbXBvc2FudHMvc3VyY291Y2hlRGVtby5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9mb3JtLmNzcyJdLCJzb3VyY2VzQ29udGVudCI6WyIqLCA6OmFmdGVyLCA6OmJlZm9yZSB7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuYm9keSB7XG4gICAgbWFyZ2luOiAwO1xufVxuXG51bCB7XG4gICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAwO1xufSIsImh0bWwge1xuICAgIC8qIElsIGVzdCBpbnRlcmRpdCBkZSByYWpvdXRlciBkZXMgY291bGV1cnMgc2FucyBkZW1hbmRlciBsJ2FjY29yZCBkdSBQTyAqL1xuICAgIC0tY0JsYW5jMTogdmFyKC0tY0JsYW5jKTtcbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0JsYW5jMXA6ICNFMEUwRTA7ICovXG4gICAgLS1jQmxhbmMwMjogI0Y1RjVGNTtcbiAgICAtLWNCbGFuYzI6ICNGMEYwRjA7XG4gICAgLS1jQmxhbmMwMzogI2RjZTFlYTtcbiAgICAtLWNCbGFuYzM6ICNDQ0NGQ0M7XG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNCbGFuYzQ6ICNBQUFGQUE7ICovXG4gICAgLS1jQmxhbmM1OiAjOTk5Qzk5O1xuXG5cblxuICAgIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgQ09VTEVVUlMgVEVYVEUgTk9JUiAtIFVUSUxJU0FUSU9OIE9CTElHQVRPSVJFXG4gICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuICAgIC8qIC0tY05vaXIxIDogw4lMw4lNRU5UUyBEJ0VNUEhBU0VcbiAgICAgICAtIFRpdHJlcyA6IGgxLCBoMiwgaDNcbiAgICAgICAtIFRleHRlIGRlcyBib3V0b25zIChxdWFuZCBwYXMgZGUgY291bGV1ciBkw6lmaW5pZSlcbiAgICAgICAtIExhYmVscyBvYmxpZ2F0b2lyZXMgKHJlcXVpcmVkKVxuICAgICAgIC0gTWVudXMgZGUgbmF2aWdhdGlvblxuICAgICAgIC0gQ2hlY2tib3ggZXQgcmFkaW8gYm91dG9uc1xuICAgICAgIC0gVmFsZXVyIHByaW5jaXBhbGUgZGFucyBsZXMgY29tcHRldXJzIChleDogXCIzXCIgZGFucyBcIjMgLyA1XCIpXG4gICAgKi9cbiAgICAtLWNOb2lyMTogIzE4MTgxODtcbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY05vaXIxbzogIzE4MTgxODU1OyAqL1xuXG4gICAgLyogLS1jTm9pcjIgOiBDT1JQUyBERSBURVhURVxuICAgICAgIC0gUGFyYWdyYXBoZXMgPHA+XG4gICAgICAgLSBMaXN0ZXMgPGxpPiwgw6ludW3DqXJhdGlvbnNcbiAgICAgICAtIExhYmVscyBmYWN1bHRhdGlmc1xuICAgICAgIC0gVGV4dGUgc2Fpc2kgZGFucyBsZXMgaW5wdXRzXG4gICAgICAgLSBUaXRyZXMgaDQsIGg1LCBoNlxuICAgICAgIC0gVmFsZXVyIHNlY29uZGFpcmUgZGFucyBsZXMgY29tcHRldXJzIChleDogXCIvIDVcIiBkYW5zIFwiMyAvIDVcIilcbiAgICAqL1xuICAgIC0tY05vaXIyOiAjMjgyODI4O1xuXG4gICAgLyogLS1jTm9pcjMgOiBURVhURSBURVJUSUFJUkVcbiAgICAgICAtIFBsYWNlaG9sZGVyc1xuICAgICAgIC0gTWVzc2FnZXMgZCdhaWRlIGRpc2NyZXRzXG4gICAgICAgLSBUZXh0ZSBkw6lzYWN0aXbDqVxuICAgICovXG4gICAgLS1jTm9pcjM6ICM1NTU7XG5cbiAgICAvKiAtLWNOb2lyNC01IDogVEVYVEUgVFLDiFMgQVRUw4lOVcOJXG4gICAgICAgLSDDiWzDqW1lbnRzIGTDqXNhY3RpdsOpc1xuICAgICAgIC0gVGV4dGUgZMOpY29yYXRpZlxuICAgICovXG4gICAgLS1jTm9pcjQ6ICM5OTk7XG4gICAgLS1jTm9pcjU6ICNCQkI7XG4gICAgLS1jQmxhbmM6ICNGRkY7XG4gICAgLS1jTm9pcjogIzAwMDtcbiAgICAtLWNUZXh0ZTE6ICMyMjI7XG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNUZXh0ZTI6ICM0NDQ7ICovXG4gICAgLS1jRm9ybTogIzAwMDtcbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0Zvcm1fYjogIzU1NTsgKi9cbiAgICAtLWNGb3JtRm9jdXM6IHZhcigtLWNDdGEpO1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jQmxldTogIzAyNUJBNzsgKi9cbiAgICAtLWNSb3VnZTogI0YxNUI0RTtcblxuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jUHJpbWFpcmU6ICNhZDAwMDA7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNQcmltYWlyZWg6ICNjZTAwMDA7ICovXG4gICAgLS1jUm91Z2U2OiAjOTMwMDAwO1xuICAgIC0tY1JvdWdlNmg6ICNjYzAwMDA7XG4gICAgLS1jUm91Z2U2YWh0OiAjZmZmRGZFO1xuXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNTdGF0dXQwOiAjODk5NmFjOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jU3RhdHV0MTogIzMwOGVkMTsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY1N0YXR1dDI6ICMxZWQxMGU7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNTdGF0dXQzOiAjYWZjMGFiOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jU3RhdHV0NDogI2FiYjNjMDsgKi9cbiAgICBcbiAgICAtLWNCYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xuICAgIC0tY0xpbms6ICMwMDYyOWM7XG4gICAgLS1jTGlua2g6ICMwMDQyNjk7XG4gICAgLS1jQ3RhOiAjMzA4ZWQxO1xuICAgIC0tY0N0YWg6ICMyNTcyYTk7XG4gICAgLS1jQ3RhdDogI0ZGRjtcbiAgICAtLWNDdGF0aDogI0ZGRjtcbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0N0YTI6ICNlM2VlZjQ7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNDdGEyaDogI2JlZDhlNjsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0N0YTJ0OiAjMzA4ZWQxOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jQ3RhMnRoOiAjMzA4ZWQxOyAqL1xuXG4gICAgLS1jQmxldTQ6ICMwNkE7XG4gICAgLS1jQmxldTRhOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjMTdCLCAjMDU5IDEwMCUpO1xuICAgIC0tY0JsZXU0YXQ6ICNGOEY4RkY7XG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNCbGV1NGg6ICMyNDY7ICovXG4gICAgLS1jQmxldTRhaDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIzE3QiwgIzE3QiAxMDAlKTtcbiAgICAtLWNCbGV1NGh0OiAjRjhGOEZGO1xuICAgIC0tY0JsZXU3X3Q6ICMwNDg7XG5cbiAgICAtLWNPcjogI2VhYjMwODtcbiAgICAtLWNPcmg6ICNjYThhMDQ7XG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNPcnQ6ICNmZmY7ICovXG4gICAgLS1jT3JGb25kOiAjZmVmY2U4O1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jT3JGb25kMjogI2ZlZjljMzsgKi9cblxuICAgIC0tY1N1Y2NlczogIzFlZDEwZTtcbiAgICAtLWNTdWNjZXNGb25kOiAjZjBmZmY0O1xuICAgIC0tY1N1Y2Nlc1RleHRlOiAjMjc2NzQ5O1xuXG4gICAgLyogTGF5b3V0ICovXG4gICAgLS1sYXJnZXVyOiAxMzYwcHg7XG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLW1heFdpZHRoOiA3NjBweDsgKi9cbiAgICAtLWNCZzogdmFyKC0tY0JsYW5jKTtcbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0JnX2I6ICNDQ0M7ICovXG5cbiAgICAvKiBOb2lyIHRyYW5zcGFyZW50IOKAlCBvbWJyZXMgKi9cbiAgICAtLWNPbWJyZTogIzAwMDI7ICAgICAgICAgICAgLyogZW52aXJvbiAxNSUgKi9cbiAgICAtLWNPbWJyZUZvcnRlOiAjMDAwNDsgICAgICAgLyogZW52aXJvbiAzMCUgKi9cblxuICAgIC8qIHRyYW5zcGFyZW50IOKAlCBvdmVybGF5cyAqL1xuICAgIC0tY092ZXJsYXk6ICMwMDA4OyAgICAgICAgICAvKiBlbnZpcm9uIDUwJSAqL1xuICAgIC0tY0JsYW5jT3ZlcmxheTogI0ZGRkM7ICAgICAvKiBlbnZpcm9uIDgwJSAqL1xuXG4gICAgLyogRm9jdXMgKi9cbiAgICAtLWNGb3JtRm9jdXNIYWxvOiAjMzA4RUQxMjY7ICAgIC8qIGJsZXUgZm9jdXMgMTUlICovXG5cbiAgICAvKiBPbWJyZXMgY29tcG9zw6llcyAqL1xuICAgIC0tb21icmVQb3J0ZWU6IDAgNHB4IDEycHggdmFyKC0tY09tYnJlKTtcbiAgICAtLW9tYnJlUG9ydGVlMjogMCAwcHggMjVweCAjMDAwO1xuICAgIC0tb21icmVNb2RhbGU6IDAgMTBweCA0MHB4IHZhcigtLWNPbWJyZUZvcnRlKTtcbiAgICAtLW9tYnJlSW50ZXJuZTogMCAwIDEwcHggMTBweCBpbnNldCB2YXIoLS1jQmxhbmMwMik7XG5cbiAgICAvKiBDb3VsZXVycyBWZXJ0ICh2aXRyaW5lKSAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jQmdWZXJ0X3M6IGxpbmVhci1ncmFkaWVudCgyMjBkZWcsICNFRkQsICNERkMpOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jQmdWZXJ0X2I6ICNCQ0E7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNWZXJ0MDogI0Y4RkZFODsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY1ZlcnQxOiAjRThGRkQ4OyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jVmVydDFfYjogI0NDQzsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY1ZlcnQyOiAjRUZDOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jVmVydDM6ICNDREE7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNWZXJ0M190OiAjMjMwOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jVmVydDNfbzogI0JEQUQ7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNWZXJ0M19oOiAjQUI3OyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jVmVydDNfaHQ6ICMwMDA7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNWZXJ0M19iOiAjNTU1OyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jVmVydDQ6ICNCQzg7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNWZXJ0NF90OiAjMDgxMTAwOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jVmVydDU6ICMzQzA7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNWZXJ0NV9hOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjNkExLCAjNDgwIDEwMCUpOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jVmVydDVfYWg6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICM2QTEsICM2QTEgMTAwJSk7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNWZXJ0NV90OiAjRkZGOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jVmVydDY6ICM0NjM7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNWZXJ0Nl9oOiAjMzYyOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jVmVydDZfaHQ6ICNGOEZGRjg7ICovXG5cbiAgICAvKiBDb3VsZXVycyBOb2lyIGdyYWRpZW50cyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jTm9pcjNfYTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIzUwNTg1OCwgIzMwMzgzOCAxMDAlKTsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY05vaXIzX2FoOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjNTA1ODU4LCAjNTA1ODU4IDEwMCUpOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jTm9pcjNfYWhMaWdodDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIzcwNzg3OCwgIzcwNzg3OCAxMDAlKTsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY05vaXIzX2F0OiAjRkZGOyAqL1xuXG4gICAgLyogQ291bGV1cnMgSmF1bmUgKi9cbiAgICAtLWNKYXVuZTU6ICNFQjI7XG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNKYXVuZTY6ICNGM0FFMTc7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNKYXVuZTZfdDogIzEwMDsgICAgICAgICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNKYXVuZTZfYTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI0ZDMywgI0VBMSAxMDAlKTsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0phdW5lNl9iOiAjQzgwOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jSmF1bmU2X2g6ICNGQzM7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNKYXVuZTZfYWg6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNGQzMsICNGQzMgMTAwJSk7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNBdHRlc3RlOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsIHZhcigtLWNKYXVuZTUpLCAjRkMzKTsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0F0dGVzdGVfYjogI0QzOUUwMDsgKi9cblxuICAgIC8qIENvdWxldXJzIEJsZXUgY29tcGzDqW1lbnRhaXJlcyAqL1xuICAgIC0tY0JsZXUxOiAjRThGMEY4O1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jQmxldTFfczogbGluZWFyLWdyYWRpZW50KDIyMGRlZywgdmFyKC0tY0JsZXUxKSwgdmFyKC0tY0JsZXUxKSwgdmFyKC0tY0JsZXUxKSwgdmFyKC0tY0JsZXUzKSk7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNCbGV1Ml9zOiAjRDhFMEU4OyAqL1xuICAgIC0tY0JsZXUzOiAjQ0VGO1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jQmxldTNfYjogIzI4MjgyODsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0JsZXU0X2I6ICMxMTM7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNCbGV1NjogIzBBRjsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0JsZXU2X2FoOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjNkVGLCAjNkVGIDEwMCUpOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jQmxldTZfdDogIzE4MTgxODsgKi9cblxuICAgIC8qIENvdWxldXJzIFZpb2xldCAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jVmlvbGV0NjogI0EwRjsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY1Zpb2xldDZfYWg6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNkNzlhZjIsICNkNzlhZjIgMTAwJSk7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNWaW9sZXQ2X2h0OiAjMDAwOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jVmlvbGV0Nl90OiAjRkZGOyAqL1xuXG4gICAgLyogQ291bGV1cnMgUm91Z2UgY29tcGzDqW1lbnRhaXJlcyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jUm91Z2UxOiAjQzMwOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jUm91Z2UxX3Q6ICNGRkY7ICovXG4gICAgLS1jUm91Z2UyOiAjQzQ0O1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jUm91Z2UzOiAjOTAwOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jUm91Z2U1X2E6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNGNTAsICNCMjAgMTAwJSk7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNSb3VnZTVfYWg6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNGNTAsICNGNTAgMTAwJSk7ICovXG5cbiAgICAvKiBDb3VsZXVycyBzcMOpY2lhbGVzICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLXNBbGVydGVfczogI0RFQzRDNDsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY09rOiAjMzkxOyAqL1xuICAgIC0tY1Rlc3Q6ICNFQ0Y7XG4gICAgLS1jVGVzdDI6ICNkMmE4ZTA7XG4gICAgLS1jVGVzdDM6ICM5QjU5QjY7XG4gICAgLS1jVGVzdDVfYTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIzlCNTlCNiwgIzc4M2I5MiAxMDAlKTtcbiAgICAtLWNWVGVzdDVfYWg6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICM5QjU5QjYsICM5QjU5QjYgMTAwJSk7XG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNUZXN0X3Q6ICMwMDA7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNUdXRvOiAjQzZGOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jVHV0b190OiAjMDAwOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jVHV0b19haDogI2Q3OWFmMjsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0JsYW5jMV90OiAjMTgxODE4OyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jUGxhY2Vob2RlcjogIzg4ODsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0Zvcm1fczogI0ZGRjsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tYnNDdGE6IDAgN3B4IDE0cHggIzMzNTIsIDAgM3B4IDZweCAjMDAwMTsgKi9cblxuICAgIC8qIEZvcm11bGFpcmVzIHV0aWxpc2F0ZXVyICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNGb3JtVXNyOiAjRUVGQUZGOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jRm9ybVVzcl9iOiAjMzM0OyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jRm9ybVVzcl9oOiAjRkZGOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jRm9ybVVzcl9iZjogIzBBRjsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0Zvcm1Vc3JfY2I6ICMwNTk7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNGb3JtX2JmOiAjM0MwOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jRm9ybV9jYjogIzU5MDsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY09rX2I6ICM4Rjg7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNLb19iOiAjRjg4OyAqL1xuXG4gICAgLyogTG9nbyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jTG9nbzE6ICNFQkY3RTQ7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNMb2dvMjogI0M2RTlBRjsgKi9cblxuICAgIC0tZmZCYXNlOiAnTm90byBTYW5zJywgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgLS1mZk1vbm86ICdKZXRCcmFpbnNNb25vJywgJ1ZlcmRhbmEnLCBtb25vc3BhY2U7XG5cbiAgICAvKiBJbCBlc3QgaW50ZXJkaXQgZGUgcmFqb3V0ZXIgZGVzIHN0eWxlcyB0eXBvIHNhbnMgZGVtYW5kZXIgbCdhY2NvcmQgZHUgUE8gKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tZlRpdHJlOiBub3JtYWwgbm9ybWFsIDcwMCAzMnB4ICdTY2FkYScsIHNhbnMtc2VyaWY7ICovXG4gICAgLS1mSDE6IG5vcm1hbCBub3JtYWwgNzAwIDMycHggJ1NjYWRhJywgc2Fucy1zZXJpZjtcbiAgICAtLWZIMjogbm9ybWFsIG5vcm1hbCA3MDAgMjRweCAnU2NhZGEnLCBzYW5zLXNlcmlmO1xuICAgIC0tZkgzOiBub3JtYWwgbm9ybWFsIDQwMCAyMnB4ICdTY2FkYScsIHNhbnMtc2VyaWY7XG4gICAgLS1mSDQ6IG5vcm1hbCBub3JtYWwgNDAwIDE4cHggJ1NjYWRhJywgc2Fucy1zZXJpZjtcbiAgICAtLWZNZW51MTQ6IG5vcm1hbCBub3JtYWwgNDAwIDE0cHggJ01vbnRzZXJyYXQnLCBzYW5zLXNlcmlmO1xuICAgIC0tZk1pbmkxMjogbm9ybWFsIG5vcm1hbCA0MDAgMTJweCAnSmV0QnJhaW5zTW9ubycsIHNhbnMtc2VyaWY7XG4gICAgLS1mQ3RhMTY6IG5vcm1hbCBub3JtYWwgNzAwIDE4cHggJ01vbnRzZXJyYXQnLCBzYW5zLXNlcmlmO1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1mTW9ubzE2OiBub3JtYWwgbm9ybWFsIDQwMCAxNnB4ICdKZXRCcmFpbnNNb25vJywgJ0NvdXJpZXIgTmV3JywgQ291cmllciwgbW9ub3NwYWNlOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1mTW9ubzI0OiBub3JtYWwgbm9ybWFsIDQwMCAyNHB4ICdKZXRCcmFpbnNNb25vJywgJ0NvdXJpZXIgTmV3JywgQ291cmllciwgbW9ub3NwYWNlOyAqL1xuICAgIC0tZk1vbm8yNGI6IG5vcm1hbCBub3JtYWwgNzAwIDI0cHggJ0pldEJyYWluc01vbm8nLCAnQ291cmllciBOZXcnLCBDb3VyaWVyLCBtb25vc3BhY2U7XG4gICAgLS1mQ3RhMjA6IG5vcm1hbCBub3JtYWwgNzAwIDIwcHggJ01vbnRzZXJyYXQnLCBzYW5zLXNlcmlmO1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1mTGVnZW5kMTY6IG5vcm1hbCBub3JtYWwgNDAwIDIwcHggJ1NjYWRhJywgc2Fucy1zZXJpZjsgKi9cbiAgICAtLWZMaWdodDE0OiBpdGFsaWMgbm9ybWFsIDIwMCAxNHB4ICdOb3RvIFNhbnMnLCBWZXJkYW5hLCBHZW5ldmEsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIC0tZlRleHQxNjogbm9ybWFsIG5vcm1hbCA0MDAgMTZweCAnTm90byBTYW5zJywgVmVyZGFuYSwgR2VuZXZhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICAtLWZUZXh0MTZTdHJvbmc6IG5vcm1hbCBub3JtYWwgNzAwIDE2cHggJ05vdG8gU2FucycsIFZlcmRhbmEsIEdlbmV2YSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgLS1mSXRhbGljMTY6IGl0YWxpYyBub3JtYWwgNDAwIDE2cHggJ05vdG8gU2FucycsIFZlcmRhbmEsIEdlbmV2YSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgLS1mQWxlcnRlMTY6IGl0YWxpYyBzbWFsbC1jYXBzIDcwMCAyMHB4ICdOb3RvIFNhbnMnLCBWZXJkYW5hLCBHZW5ldmEsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIC0tZkxhYmVsOiBub3JtYWwgbm9ybWFsIDQwMCAxNHB4ICdOb3RvIFNhbnMnLCBWZXJkYW5hLCBHZW5ldmEsIEFyaWFsLCBzYW5zLXNlcmlmO1xuXG4gICAgLS1ib3JkZXI6IDFweCBzb2xpZCAjZGNlMWVhO1xuICAgIC0tYm9yZGVyUjA6IDNweDtcbiAgICAtLWJvcmRlclIxOiA1cHg7XG4gICAgLS1ib3JkZXJSMjogN3B4O1xuICAgIC0tYm9yZGVyQ2FydGU6IDFweCBzb2xpZCB2YXIoLS1jTm9pcjQpO1xuICAgIC0tYm9yZGVyRm9ybTogMXB4IHNvbGlkIHZhcigtLWNOb2lyNSk7XG4gICAgLS1ib3JkZXJJbnB1dDogMXB4IHNvbGlkIHZhcigtLWNOb2lyNSk7XG5cbiAgICAvKiBFc3BhY2VtZW50cyDigJQgbm9tbcOpcyBwYXIgcsO0bGUgKGNvbW1lIGxlcyBib3JkdXJlcyksIGFjY29yZCBQTyAyMDI2LTA3LTAzLlxuICAgICAgIE1pZ3JhdGlvbiBwcm9ncmVzc2l2ZSA6IG5lIHJlbXBsYWNlciB1bmUgdmFsZXVyIGVuIGR1ciBxdWUgc2kgbGUgcsO0bGUgRVQgbGEgdmFsZXVyXG4gICAgICAgY29ycmVzcG9uZGVudCAobm8tb3AgdmlzdWVsKSA7IGFsaWduZXIgdW5lIGTDqXJpdmUgZGUgdmFsZXVyID0gZMOpY2lzaW9uIMOgIHBhcnQuICovXG4gICAgLS1nYXBMaXN0ZTogMzJweDsgICAvKiBlbnRyZSBsZXMgw6lsw6ltZW50cyBkJ3VuZSBsaXN0ZS4gTGEgY29sb25uZSBxdWkgYm9yZGUgbGEgbGlzdGUgKGV4LiBwYW5uZWF1IGRlIGZpbHRyZXMpIHByZW5kIGxlIE3Dik1FIGdhcCA6IGRldXggcnl0aG1lcyBkaWZmw6lyZW50cyBjw7R0ZSDDoCBjw7R0ZSwgYydlc3QgbW9jaGUgKi9cbiAgICAtLXBhZGRpbmdDb3JwczogMjBweDsgICAvKiBpbnTDqXJpZXVyIGQndW4gY29ycHMgZGUgYmxvYyAvIHBhbm5lYXUgLyBtb2RhbGUgKi9cbiAgICAtLWdhcERlZmF1dDogOHB4OyAgICAgICAvKiBlc3BhY2Ugc3RhbmRhcmQgZW50cmUgw6lsw6ltZW50cyBmcsOocmVzIChmbGV4L2dyaWQpICovXG4gICAgLS1nYXBSZWR1aXQ6IDRweDsgICAgICAgLyogdmFyaWFudGUgdm9sb250YWlyZW1lbnQgcGx1cyBzZXJyw6llIDogbGlzdGVzIGNvbXBhY3RlcywgZ3JvdXBlcyBkZSBib3V0b25zICovXG4gICAgLS1nYXBNb3llbjogMTJweDsgICAgLyogZXNwYWNlbWVudCBpbnRlcm3DqWRpYWlyZSBlbnRyZSDDqWzDqW1lbnRzIGZyw6hyZXMgKi9cbiAgICAtLWdhcExhcmdlOiAyMHB4OyAgICAvKiBlc3BhY2VtZW50IGfDqW7DqXJldXggZW50cmUgZ3JvdXBlcyBkJ8OpbMOpbWVudHMgKi9cbiAgICAtLXBhZGRpbmdNaW5pRGl2OiA4cHggMTZweDsgLyogcGFkZGluZyBkZSB0b3V0IGxlcyBibG9jcyBhdmVjIGZvbmQgY29sb3LDqWVzICovXG4gICAgLS1wYWRkaW5nRXRpcXVldHRlOiAzcHggNnB4OyAvKiBwYWRkaW5nIGRlcyBzcGFuIGV0IGF1dHJlcyBldGlxdWV0dGUgKi9cblxuICAgIC8qIEJvdXRvbnMgOiB1biBib3V0b24gbmUgY2hvaXNpdCBOSSBzb24gcGFkZGluZywgTkkgc2EgYm9yZHVyZSwgTkkgc2EgY291bGV1clxuICAgICAgIChkw6ljaXNpb24gUE8gMjAyNi0wNy0xOCkuIElsIHByZW5kIGNlcyB2YXJpYWJsZXMg4oCUIG91IHBhcyBkZSBib3JkdXJlLCBvdSBsYVxuICAgICAgIGNvdWxldXIgZCd1biByw7RsZSAocHJpbWFpcmUsIGRhbmdlciwgZMOpbW8pIOKAlCBqYW1haXMgdW5lIHZhbGV1ciDDoCBsdWkuICovXG4gICAgLS1wYWRkaW5nQ3RhMTQ6IDhweCAxNnB4OyAgICAgICAgICAgICAvKiBwYWRkaW5nIGRlIHRvdXQgYm91dG9uIGNvbXBhY3QgKC5jdGExNCwgLmN0YURpc2NyZXQsIHRvZ2dsZXMpICovXG4gICAgLS1ib3JkZXJDdGE6IDFweCBzb2xpZCB2YXIoLS1jTm9pcjQpOyAvKiBMQSBib3JkdXJlIGQndW4gYm91dG9uIDogY2VsbGUtY2kgb3UgYXVjdW5lICovXG4gICAgLS1jQ3RhVGV4dGU6IHZhcigtLWNOb2lyMik7ICAgICAgICAgLyogTEUgdGV4dGUgZCd1biBib3V0b24gbmV1dHJlIDogY2Ugbm9pciBvdSB1bmUgY291bGV1ciBkZSByw7RsZSAqL1xuXG4gICAgLS1jRW5UZXRlOiAjZjBmNGY3O1xuXG4gICAgLyogQ291bGV1cnMgZGUgZm9uZCBkZXMgY2FydGVzIFRpbWVsaW5lICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNGb25kRGlzdHJpYnV0aW9uczA6ICNmZGZkZjg7ICovXG4gICAgLS1jRm9uZERpc3RyaWJ1dGlvbnMwOiAjZmFmYWY4O1xuICAgIC0tY0ZvbmREaXN0cmlidXRpb25zOiAjZjdmNmU0O1xuICAgIC0tY0ZvbmREaXN0cmlidXRpb25zMjogI2U5ZTVhZjtcbiAgICAtLWNGb25kRGlzdHJpYnV0aW9uczM6ICNBNzllMmU7XG4gICAgLS1jRm9uZERpc3RyaWJ1dGlvbnM0OiAjOTc4ZTFlO1xuICAgIC0tY0ZvbmREaXN0cmlidXRpb25zX2E6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHZhcigtLWNGb25kRGlzdHJpYnV0aW9uczMpLCB2YXIoLS1jRm9uZERpc3RyaWJ1dGlvbnM0KSAxMDAlKTtcbiAgICAtLWNGb25kRGlzdHJpYnV0aW9uc19haDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgdmFyKC0tY0ZvbmREaXN0cmlidXRpb25zMyksIHZhcigtLWNGb25kRGlzdHJpYnV0aW9uczMpIDEwMCUpO1xuICAgIC0tY0ZvbmRHcm91cGVzMDogI2Y4ZmNmZDtcbiAgICAtLWNGb25kR3JvdXBlczogI2U0ZjRmNztcbiAgICAtLWNGb25kR3JvdXBlczI6ICNhZmRmZTk7XG4gICAgLS1jRm9uZEdyb3VwZXMzOiAjMmVBOUJmO1xuICAgIC0tY0ZvbmRHcm91cGVzNDogIzFlOTlhZjtcbiAgICAtLWNGb25kR3JvdXBlc19hOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCB2YXIoLS1jRm9uZEdyb3VwZXMzKSwgdmFyKC0tY0ZvbmRHcm91cGVzNCkgMTAwJSk7XG4gICAgLS1jRm9uZEdyb3VwZXNfYWg6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHZhcigtLWNGb25kR3JvdXBlczMpLCB2YXIoLS1jRm9uZEdyb3VwZXMzKSAxMDAlKTtcbiAgICAtLWNGb25kQ29uZmlnMDogI2YyZjRmYTtcbiAgICAtLWNGb25kQ29uZmlnOiAjRTdFQ0Y4O1xuICAgIC0tY0ZvbmRDb25maWcyOiAjYzVkMGU4O1xuICAgIC0tY0ZvbmRDb25maWczOiAjNDM2YkMxO1xuICAgIC0tY0ZvbmRDb25maWc0OiAjMzM1YmIxO1xuICAgIC0tY0ZvbmRDb25maWdfYTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgdmFyKC0tY0ZvbmRDb25maWczKSwgdmFyKC0tY0ZvbmRDb25maWc0KSAxMDAlKTtcbiAgICAtLWNGb25kQ29uZmlnX2FoOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCB2YXIoLS1jRm9uZENvbmZpZzMpLCB2YXIoLS1jRm9uZENvbmZpZzMpIDEwMCUpO1xuICAgIC0tY0ZvbmRTY2VuZXMwOiAjZjFmNGY4O1xuICAgIC0tY0ZvbmRTY2VuZXM6ICNlM2VlZjg7XG4gICAgLS1jRm9uZFNjZW5lczI6ICNhY2NlZTg7XG4gICAgLS1jRm9uZFNjZW5lczM6ICMzMDhlZDE7XG4gICAgLS1jRm9uZFNjZW5lczQ6ICMyNjc4YjU7XG4gICAgLS1jRm9uZFNjZW5lc19hOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCB2YXIoLS1jRm9uZFNjZW5lczMpLCB2YXIoLS1jRm9uZFNjZW5lczQpIDEwMCUpO1xuICAgIC0tY0ZvbmRTY2VuZXNfYWg6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHZhcigtLWNGb25kU2NlbmVzMyksIHZhcigtLWNGb25kU2NlbmVzMykgMTAwJSk7XG4gICAgLS1jRm9uZEFmZmljaGFnZXMwOiAjZjRmMGY2O1xuICAgIC0tY0ZvbmRBZmZpY2hhZ2VzOiAjZjNlOGY1O1xuICAgIC0tY0ZvbmRBZmZpY2hhZ2VzMjogI2Q2YTVkNjtcbiAgICAtLWNGb25kQWZmaWNoYWdlczM6ICM5YzI3YjA7XG4gICAgLS1jRm9uZEFmZmljaGFnZXM0OiAjOGUyNGFhO1xuICAgIC0tY0ZvbmRBZmZpY2hhZ2VzX2E6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHZhcigtLWNGb25kQWZmaWNoYWdlczMpLCB2YXIoLS1jRm9uZEFmZmljaGFnZXM0KSAxMDAlKTtcbiAgICAtLWNGb25kQWZmaWNoYWdlc19haDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgdmFyKC0tY0ZvbmRBZmZpY2hhZ2VzMyksIHZhcigtLWNGb25kQWZmaWNoYWdlczMpIDEwMCUpO1xuXG4gICAgLyogQWxpYXMgbnVtw6lyaXF1ZXMgKGNvcnJlc3BvbmRhbnQgw6AgTmF0dXJlQnJpcXVlLnZhbHVlKSAqL1xuICAgIC0tY0ZvbmROYXR1cmVCcmlxdWUxOiB2YXIoLS1jRm9uZEdyb3VwZXMpOyAgIC8qIFBhcnRpY2lwYW50cyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jRm9uZE5hdHVyZUJyaXF1ZTFiOiB2YXIoLS1jRm9uZEdyb3VwZXMyKTsgKi9cbiAgICAtLWNGb25kTmF0dXJlQnJpcXVlMjogdmFyKC0tY0ZvbmREaXN0cmlidXRpb25zKTsgICAgICAgICAgIC8qIExvdHMgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0ZvbmROYXR1cmVCcmlxdWUyYjogdmFyKC0tY0ZvbmREaXN0cmlidXRpb25zMik7ICovXG4gICAgLS1jRm9uZE5hdHVyZUJyaXF1ZTM6IHZhcigtLWNGb25kQ29uZmlnKTsgICAgICAgICAvKiBDb25maWd1cmF0aW9ucyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jRm9uZE5hdHVyZUJyaXF1ZTNiOiB2YXIoLS1jRm9uZENvbmZpZzIpOyAqL1xuICAgIC0tY0ZvbmROYXR1cmVCcmlxdWU0OiB2YXIoLS1jRm9uZFNjZW5lcyk7ICAgICAvKiBTY2VuZXMgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0ZvbmROYXR1cmVCcmlxdWU0YjogdmFyKC0tY0ZvbmRTY2VuZXMyKTsgKi9cbiAgICAtLWNGb25kTmF0dXJlQnJpcXVlNTogdmFyKC0tY0ZvbmRBZmZpY2hhZ2VzKTsgICAgIC8qIEFmZmljaGFnZSAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jRm9uZE5hdHVyZUJyaXF1ZTViOiB2YXIoLS1jRm9uZEFmZmljaGFnZXMyKTsgKi9cbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFRJVFJFUyBFVCBUWVBPR1JBUEhJRVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuaDEsIGgyLCBoMyB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG59XG5cbmg0IHtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIyKTtcbn1cblxuaDUsIGg2IHtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cblxucCwgbGkge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjIpO1xufVxuXG5oMSwgaDIsIGgzLCBoNCwgaDUsIGg2IHtcbiAgICBmb250OiB2YXIoLS1mSDEpO1xufVxuXG5idXR0b24ge1xuICAgIGZvbnQ6IHZhcigtLWZDdGExNik7XG59XG5cbmgxIHtcbiAgICBmb250OiB2YXIoLS1mSDEpO1xuICAgIG1hcmdpbjogMTBweCAxNXB4IDVweCAwO1xuICAgIHBhZGRpbmc6IDA7XG59XG5cbmgyIHtcbiAgICBmb250OiB2YXIoLS1mSDIpO1xuICAgIG1hcmdpbjogMTVweCAxMHB4IDVweCAwO1xuICAgIHBhZGRpbmc6IDA7XG59XG5cbmgzIHtcbiAgICBmb250OiB2YXIoLS1mSDMpO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbWFyZ2luOiAyNXB4IDAgMTVweDtcbn1cblxuaDQsIGg1IHtcbiAgICBmb250OiB2YXIoLS1mSDQpO1xufVxuXG5oNCwgaDUsIGg2IHtcbiAgICBtYXJnaW46IDI1cHggMCA3cHg7XG59XG5cbi8qIDxpPiBlc3QgdXRpbGlzw6llIGNvbW1lIGJhbGlzZSBkZSBzdWZmaXhlICgjMiwgIzPigKYpIHN1ciBsZXMgbm9tcyBkJ8OpbMOpbWVudHMuXG4gICBMYSBiYWxpc2UgPGVtPiByZW1wbGFjZSA8aT4gcG91ciBsJ2l0YWxpcXVlIHPDqW1hbnRpcXVlLiAqL1xuaSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGZvbnQtc2l6ZTogNzUlO1xuICAgIGZvbnQtd2VpZ2h0OiAxMDA7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mZkJhc2UpO1xufSIsIi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuI2RpdkJvZHkge1xuICAgIG1heC13aWR0aDogOTIwcHg7XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gICAgcGFkZGluZzogMTBweDtcbn1cbiovXG5cbi5jb250ZW51IHtcbiAgICBwYWRkaW5nOiAxMHB4IDQwcHg7XG59XG5cbi56b25lRmxhc2gge1xuICAgIG1heC13aWR0aDogMTE1NXB4O1xuICAgIG1hcmdpbjogMCBhdXRvIDIwcHg7XG4gICAgbWluLWhlaWdodDogMzhweDsgLyogSGF1dGV1ciBkJ3VuIG1lc3NhZ2UgZmxhc2ggKHBhZGRpbmcgMTJweCAqIDIgKyBmb250IDE0cHgpICovXG59XG5cbi56b25lRmxhc2ggLmFsZXJ0U3VjY2VzLFxuLnpvbmVGbGFzaCAuYWxlcnRFcnJldXIge1xuICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG59XG5cbi56b25lRmxhc2ggLmFsZXJ0U3VjY2VzOmxhc3QtY2hpbGQsXG4uem9uZUZsYXNoIC5hbGVydEVycmV1cjpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xufVxuXG4vKiBCb3ggZGUgcmFwcGVsIChsZWN0dXJlIHNldWxlKSAqL1xuLmRpdlJhcHBlbCB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbiAgICBib3JkZXItbGVmdDogdmFyKC0tYm9yZGVyKTtcbiAgICBib3JkZXItcmlnaHQ6IHZhcigtLWJvcmRlcik7XG4gICAgcGFkZGluZzogMjBweCA0MHB4IDI1cHg7XG4gICAgd2lkdGg6IDMzNXB4O1xuICAgIG1hcmdpbjogMDtcbn1cblxuLmRpdlJhcHBlbCBoMyB7XG4gICAgcGFkZGluZzogMDtcbiAgICBtYXJnaW46IDAgMCAyMHB4IDA7XG59XG5cbi8qIENUQSBkYW5zIGxlcyBibG9jcyBkaXZSYXBwZWwgOiB0YWlsbGUgY29udGVudSwgYWxpZ27DqSDDoCBnYXVjaGUgKi9cbi5kaXZSYXBwZWwgLmN0YVZhbGlkZXIsXG4uZGl2UmFwcGVsIC5jdGFTZWNvbmRhaXJlIHtcbiAgICB3aWR0aDogZml0LWNvbnRlbnQ7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogODAwcHgpIHtcbiAgICAuY29udGVudSB7XG4gICAgICAgIHBhZGRpbmc6IDEwcHggMjBweDtcbiAgICB9XG59XG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuLmRpdkNlbnRyZSB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIG1heC13aWR0aDogMTIwMHB4O1xuICAgIHBhZGRpbmc6IDIwcHg7XG59XG4qL1xuXG5ib2R5IHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBvdmVyZmxvdy14OiBoaWRkZW47XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY0JhY2tncm91bmQpO1xufVxuXG4jYm9keVBhZ2Uge1xuICAgIG1heC13aWR0aDogMTI4MHB4O1xuICAgIG1hcmdpbjogMTBweCBhdXRvO1xufVxuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbi5tYXJnZTIge1xuICAgIG1hcmdpbjogNXB4IGF1dG87XG4gICAgcGFkZGluZzogMCAyMHB4O1xufVxuKi9cblxuQG1lZGlhIGFsbCBhbmQgKG1pbi13aWR0aDogNzUwcHgpIHtcbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbiAgICAubWFyZ2UyIHtcbiAgICAgICAgbWFyZ2luOiAxMHB4IGF1dG87XG4gICAgICAgIHBhZGRpbmc6IDAgMjBweDtcbiAgICB9XG4gICAgKi9cbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4jY2VudHJlUGFnZSB7XG4gICAgbWF4LXdpZHRoOiAxNDQwcHg7XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gICAgd2lkdGg6IDEwMCU7XG59XG5cbiNkaXZQYWdlIHtcbiAgICBtYXJnaW46IDI1cHggMTBweCA1MHB4O1xuICAgIG1pbi1oZWlnaHQ6IDI1dmg7XG59XG5cbiNxdWlTdWlzSmUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xufVxuI3F1aVN1aXNKZUxvZ291dCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogNnB4O1xuICAgIG9wYWNpdHk6IC43O1xufVxuXG4jcXVpU3Vpc0plTG9nb3V0OmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBjb2xvcjogdmFyKC0tY0xpbmspO1xuICAgIG9wYWNpdHk6IDE7XG59XG4qL1xuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4jZGl2SGVhZGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG59XG4qLyIsImJ1dHRvbiB7XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIG1hcmdpbjogMDtcbiAgICBjb2xvcjogdmFyKC0tY0N0YSk7XG4gICAgZm9udDogdmFyKC0tZkN0YTE2KTtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbmJ1dHRvbi5jdGFBbm51bGVyLFxuYSB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNMaW5rKTtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXI6IHRyYW5zcGFyZW50O1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuYnV0dG9uLmN0YUFubnVsZXIsXG5hLmN0YUFubnVsZXIge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbjogMjBweCAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbmJ1dHRvbi5idG4sIGEuYnRuIHtcbiAgICBtaW4td2lkdGg6IDE4MHB4O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBib3JkZXI6IDA7XG4gICAgY29sb3I6IHZhcigtLWNDdGF0KTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jQ3RhKTtcbiAgICBmb250OiB2YXIoLS1mQ3RhMTYpO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgcGFkZGluZzogMTVweCAyMHB4O1xuICAgIG1hcmdpbjogMTBweCAwO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBNb3llbik7IC8qIGFsaWduw6kgMTAgLT4gMTJweCAow6ljaGVsbGUgUE8gMjAyNi0wNy0xOCkgKi9cbn1cblxuYS5idG46aG92ZXIsIGJ1dHRvbi5idG46aG92ZXIge1xuICAgIGNvbG9yOiB2YXIoLS1jQ3RhdGgpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNDdGFoKTtcblxufVxuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbmJ1dHRvbi5idG4yLCBhLmJ0bjIge1xuICAgIG1pbi13aWR0aDogMTAwcHg7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGJvcmRlcjogMDtcbiAgICBmb250OiB2YXIoLS1mQ3RhMjApO1xuICAgIHBhZGRpbmc6IDIwcHggNDBweDtcbiAgICBtYXJnaW46IDIwcHggYXV0bztcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuM3M7XG4gICAgY29sb3I6IHZhcigtLWNUZXh0ZTEpO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogcm91bmQ7XG4gICAgd2lkdGg6IGZpdC1jb250ZW50O1xuICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG59XG5cbmJ1dHRvbiNyZWRpcmVjdGlvbi5idG4yIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuYnV0dG9uI3JlZGlyZWN0aW9uLmJ0bjI6aG92ZXIsXG5hLmJ0bjI6aG92ZXIsIGJ1dHRvbi5idG4yOmhvdmVyIHtcbiAgICBjb2xvcjogdmFyKC0tY0N0YXRoKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jQ3RhaCk7XG59XG4qL1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQ1RBIENPTVBBQ1Qg4oCUIHNvY2xlIC5jdGExNFxuXG4gICBMQSBzaWxob3VldHRlIGRlcyBib3V0b25zIGQnYWN0aW9uIGNvbXBhY3RzIChiYXJyZXMgZCdhY3Rpb24sIGNhcnRlcykgOlxuICAgZm9ybWUsIHBvbGljZSwgZGltZW5zaW9ucyBkw6lmaW5pZXMgaWNpIGV0IG51bGxlIHBhcnQgYWlsbGV1cnMuIE1vZMOobGUgOlxuICAgbGUgYm91dG9uIGRlIGxhIGJhcnJlIGRlIGNvbnRyw7RsZSBkw6ltbyAoZMOpY2lzaW9uIFBPIDIwMjYtMDctMTgpLlxuICAgU2UgcG9zZSDDoCBjw7R0w6kgZHUgcsO0bGUgcXVpIGFwcG9ydGUgc2EgY291bGV1ciA6IGNsYXNzPVwiY3RhMTQgY3RhRGVtb0NvbnRyb2xlXCIuXG4gICAxNCA9IGxhIHRhaWxsZSBkZSBwb2xpY2UgKC0tZk1lbnUxNCkuIFNpbGhvdWV0dGUgZm9ybXVsYWlyZSDDoCB2ZW5pciA6IC5jdGExOC5cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5jdGExNCB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrOyAvKiB1biA8YT4gaG9ycyBiYXJyZSBmbGV4IHJlc3RlIHVuIGJvdXRvbiAocGFkZGluZyB2ZXJ0aWNhbCByw6llbCkgKi9cbiAgICBwYWRkaW5nOiB2YXIoLS1wYWRkaW5nQ3RhMTQpO1xuICAgIGZvbnQ6IHZhcigtLWZNZW51MTQpO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4ycywgY29sb3IgMC4ycywgYm9yZGVyLWNvbG9yIDAuMnM7XG59XG5cbi5jdGExNDpkaXNhYmxlZCB7XG4gICAgb3BhY2l0eTogMC40O1xuICAgIGN1cnNvcjogYXV0bztcbn1cblxuLyogUsO0bGUgZMOpbW8gOiBMRSBib3V0b24gcXVpIGxhbmNlIHVuZSBkw6ltb25zdHJhdGlvbiDigJQgdmlvbGV0IGTDqW1vLCBwYXJ0b3V0XG4gICAoY2F0YWxvZ3VlLCBwYWdlIE1vZGlmaWVyLCBmaWNoZXMgZCdhbmltYXRpb24pLiBVbmUgZMOpbW8gPSB2aW9sZXQsXG4gICBkw6ljaXNpb24gUE8gMjAyNi0wNy0xOC4gKi9cbi5jdGFEZW1vIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jVGVzdDVfYSk7XG4gICAgY29sb3I6IHZhcigtLWNCbGFuYyk7XG59XG5cbi5jdGFEZW1vOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jVlRlc3Q1X2FoKTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEJBREdFIE1PREUgVEVTVCAtIFLDqXV0aWxpc2FibGUgcGFydG91dFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmJhZGdlTW9kZVRlc3Qge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBwYWRkaW5nOiAzcHggMTJweDtcbiAgICBmb250OiB2YXIoLS1mTGFiZWwpO1xuICAgIGNvbG9yOiB2YXIoLS1jQmxhbmMpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNUZXN0Myk7XG4gICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgICBtYXJnaW46IDEwcHggMDtcbn0iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgUGFnZXMgZCdhdXRoZW50aWZpY2F0aW9uIChsb2dpbiwgcmVnaXN0ZXIsIGluc2NyaXB0aW9uKVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmF1dGhGb3JtIHtcbiAgICBwYWRkaW5nOiA0MHB4IDIwcHggMjBweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4vKiBCb3ggZGUgY29ubmV4aW9uIC8gaW5zY3JpcHRpb24gKi9cbi5ib3hDZW50ZXJGb3JtIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMik7XG4gICAgcGFkZGluZzogMzBweCA0MHB4IDQwcHg7XG4gICAgd2lkdGg6IG1pbigzNjVweCwgOTUlKTtcbiAgICBib3gtc2hhZG93OiAwIDJweCAxMHB4IHZhcigtLWNPbWJyZSk7XG4gICAgbWFyZ2luOiAwO1xufVxuXG4uYm94Q2VudGVyRm9ybSBoMyB7XG4gICAgcGFkZGluZzogMDtcbiAgICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbi5ib3hDZW50ZXJGb3JtIC5zb3VzVGl0cmUge1xuICAgIGZvbnQ6IHZhcigtLWZMaWdodDE0KTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbWFyZ2luOiAwIDAgMjBweCAwO1xufVxuKi9cblxuZm9ybSA+IGRpdiB7XG4gICAgbWFyZ2luLWJvdHRvbTogMTVweDtcbn1cblxuLmJveENlbnRlckZvcm0gLmN0YVZhbGlkZXIge1xuICAgIG1hcmdpbi10b3A6IDVweDtcbn1cblxuLyogQWN0aW9ucyBkdSBmb3JtdWxhaXJlICh2YWxpZGVyICsgYW5udWxlcikgKi9cbi5mb3JtQWN0aW9ucyB7XG4gICAgbWFyZ2luLXRvcDogMTBweDtcbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4uZm9ybUFjdGlvbnNGbGV4IHtcbiAgICBtYXJnaW4tdG9wOiAxMHB4O1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNTAwcHgpIHtcbiAgICAuZm9ybUFjdGlvbnNGbGV4IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xuICAgICAgICBnYXA6IDE1cHg7XG4gICAgfVxuXG4gICAgLmZvcm1BY3Rpb25zRmxleCAuY3RhVmFsaWRlcixcbiAgICAuZm9ybUFjdGlvbnNGbGV4IC5jdGFTZWNvbmRhaXJlIHtcbiAgICAgICAgd2lkdGg6IGF1dG87XG4gICAgICAgIGZsZXg6IDAgMSBhdXRvO1xuICAgIH1cbn1cbiovXG5cbi8qIEFsZXJ0ZXMgKi9cbi5hbGVydEVycmV1cixcbi5hbGVydEVycmV1ck9BdXRoLFxuLmFsZXJ0U3VjY2VzIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jUm91Z2U2KTtcbiAgICBjb2xvcjogdmFyKC0tY0JsYW5jKTtcbiAgICBwYWRkaW5nOiB2YXIoLS1wYWRkaW5nTWluaURpdik7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbn1cblxuLyogTWVzc2FnZSBkJ2VycmV1ciBpbmxpbmUgT0F1dGggKi9cbi5hbGVydEVycmV1ck9BdXRoIHtcbiAgICBtYXJnaW4tdG9wOiAxMHB4O1xufVxuXG4uYWxlcnRTdWNjZXMge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNTdWNjZXNGb25kKTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jU3VjY2VzKTtcbiAgICBjb2xvcjogdmFyKC0tY1N1Y2Nlc1RleHRlKTtcbn1cblxuLyogTGllbiB2ZXJzIGF1dHJlIHBhZ2UgYXV0aCAqL1xuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4ubGllbkF1dGgge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXJnaW4tdG9wOiAyNXB4O1xuICAgIHBhZGRpbmctdG9wOiAyMHB4O1xuICAgIGJvcmRlci10b3A6IHZhcigtLWJvcmRlcik7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbn1cblxuLmxpZW5BdXRoIGEge1xuICAgIGNvbG9yOiB2YXIoLS1jTGluayk7XG59XG5cbi5saWVuQXV0aCBhOmhvdmVyIHtcbiAgICBjb2xvcjogdmFyKC0tY0JsYW5jKTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQ3RhaCk7XG59XG4qL1xuXG4vKiBTw6lwYXJhdGV1ciBPQXV0aCAqL1xuLmJveENlbnRlckZvcm0gaHIge1xuICAgIG1hcmdpbjogNTBweCAwO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3JkZXItdG9wOiB2YXIoLS1ib3JkZXIpO1xufVxuXG4vKiBTw6lwYXJhdGV1ciBhdmVjIGVzcGFjZSBibGFuYyAqL1xuaHIuc2VwYXJhdGV1ciB7XG4gICAgbWFyZ2luOiAzMHB4IDA7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJvcmRlci10b3A6IHZhcigtLWJvcmRlcik7XG59XG5cbi8qIEJvdXRvbiBPQXV0aCAqL1xuLmJ0bk9BdXRoIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgZ2FwOiB2YXIoLS1nYXBMYXJnZSk7IC8qIGFsaWduw6kgMTYgLT4gMjBweCAow6ljaGVsbGUgUE8gMjAyNi0wNy0xOCkgKi9cbiAgICB3aWR0aDogMTAwJTtcbiAgICBwYWRkaW5nOiA4cHggMTJweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jTm9pcjEpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xuICAgIGZvbnQ6IHZhcigtLWZDdGExNik7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7XG59XG5cbi5idG5PQXV0aDpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0VuVGV0ZSk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG59XG5cbi5idG5PQXV0aCBzdmcge1xuICAgIHdpZHRoOiA0MHB4O1xuICAgIGhlaWdodDogNDBweDtcbn1cblxuLyogw4l0YXQgZGUgY2hhcmdlbWVudCBkdSBmb3JtdWxhaXJlICovXG4uZm9ybUVuQ2hhcmdlbWVudCB7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5mb3JtRW5DaGFyZ2VtZW50IGlucHV0LFxuLmZvcm1FbkNoYXJnZW1lbnQgc2VsZWN0LFxuLmZvcm1FbkNoYXJnZW1lbnQgdGV4dGFyZWEsXG4uZm9ybUVuQ2hhcmdlbWVudCBsYWJlbCB7XG4gICAgb3BhY2l0eTogMC41O1xufVxuXG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgSEFVVCBERSBQQUdFIENPTVBURVxuICAgSGVhZGVyIHNpbXBsaWZpw6kgcG91ciBsJ2VzcGFjZSBjb21wdGUgVml0cmluZVxuICAgTG9nbyBnYXVjaGUsIG1lbnUgZHJvaXRlXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4jaGF1dERlUGFnZUNvbXB0ZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBoZWlnaHQ6IDQycHg7XG4gICAgcGFkZGluZzogMCA0MHB4O1xuICAgIGJvcmRlci1ib3R0b206IHZhcigtLWJvcmRlcik7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBMT0dPIMOAIEdBVUNIRVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuI2hhdXREZVBhZ2VDb21wdGUgLmhlYWRlckxvZ28ge1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuI2hhdXREZVBhZ2VDb21wdGUgLmhlYWRlckxvZ28gYSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4jaGF1dERlUGFnZUNvbXB0ZSAuaGVhZGVyTG9nbyBzdmcge1xuICAgIGhlaWdodDogMjhweDtcbiAgICBhc3BlY3QtcmF0aW86IDI0NSAvIDM2O1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgTkFWSUdBVElPTiBDT01QVEUgw4AgRFJPSVRFXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4jaGVhZGVyTmF2Q29tcHRlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbiNoZWFkZXJOYXZDb21wdGUgdWwge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbn1cblxuI2hlYWRlck5hdkNvbXB0ZSB1bCBsaSBhIHtcbiAgICBmb250OiB2YXIoLS1mTWVudTE0KTtcbiAgICBjb2xvcjogdmFyKC0tY0xpbmspO1xuICAgIHBhZGRpbmc6IDhweCAxNnB4O1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4jaGVhZGVyTmF2Q29tcHRlIHVsIGxpIGE6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNDdGEpO1xuICAgIGNvbG9yOiB2YXIoLS1jQ3RhdCk7XG59XG5cbiNoZWFkZXJOYXZDb21wdGUgdWwgbGkgYS5hY3RpdmUge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNDdGEpO1xuICAgIGNvbG9yOiB2YXIoLS1jQ3RhdCk7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBSRVNQT05TSVZFIC0gTU9CSUxFIDwgNjAwcHhcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkge1xuICAgICNoYXV0RGVQYWdlQ29tcHRlIHtcbiAgICAgICAgcGFkZGluZzogMCAxNnB4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgIH1cblxuICAgICNoYXV0RGVQYWdlQ29tcHRlIC5oZWFkZXJMb2dvIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA0MDBweCkge1xuICAgICNoZWFkZXJOYXZDb21wdGUgdWwgbGkgYSB7XG4gICAgICAgIHBhZGRpbmc6IDhweCAxMnB4O1xuICAgICAgICBmb250LXNpemU6IDEzcHg7XG4gICAgfVxufVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEJMT0NTIC0gQ29tcG9zYW50IGfDqW7DqXJpcXVlIFLDqWdpZVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAg4pqg77iPIFVuIFNPVVMtRU5TRU1CTEUgwqsgY2FydGUgwrsgZGUgY2UgY29tcG9zYW50IGVzdCBjb3Bpw6kgZGFuc1xuICAgc3R1ZGlvVml0cmluZS9hc3NldHMvdml0cmluZS9jc3MvYmxvY3MuY3NzIChwYXJ0aWUgLmJsb2MgLyAuYmxvY0NvcnBzIC9cbiAgIC5ibG9jVGl0cmUgLyAuYmxvY1RleHRlIC8gLmJsb2NBY3Rpb25zIHVuaXF1ZW1lbnQsIHBvdXIgbGEgbGlzdGUgZGVzXG4gICBzY8OpbmFyaW9zIGRlIGTDqW1vKS4gU2kgdHUgbW9kaWZpZXMgbCd1bmUgZGUgY2VzIHLDqGdsZXMgaWNpIOKGkiBkZW1hbmRlciBhdSBQT1xuICAgcydpbCBmYXV0IGxhIHLDqXBlcmN1dGVyIHN1ciBsYSBjb3BpZSB2aXRyaW5lLiBMZSByZXN0ZSBkdSBjb21wb3NhbnQgKHN0YXRzLFxuICAgY29tcHRldXIsIHLDqW9yZG9ubmFuY2VtZW50LCBmb3JtdWxhaXJlcykgZXN0IHByb3ByZSDDoCBsYSByw6lnaWUuXG5cbiAgIENvbXBvc2FudCB1bmlmacOpIHBvdXIgdG91cyBsZXMgYmxvY3MgZGUgdHlwZSA6XG4gICBJY8O0bmUgfCBDb250ZW51IHwgQWN0aW9uc1xuXG4gICBTdHJ1Y3R1cmUgSFRNTCA6XG4gICA8ZGl2IGNsYXNzPVwiYmxvYyBibG9jR3JvdXBlXCI+ICDihpAgYmxvY0dyb3VwZSBjb25zZXJ2w6kgcG91ciBUU1xuICAgICAgIDxkaXYgY2xhc3M9XCJibG9jSWNvbmVcIj4uLi48L2Rpdj5cbiAgICAgICA8ZGl2IGNsYXNzPVwiYmxvY0NvcnBzXCI+XG4gICAgICAgICAgIDxoNCBjbGFzcz1cImJsb2NUaXRyZVwiPi4uLjwvaDQ+XG4gICAgICAgICAgIDxwIGNsYXNzPVwiYmxvY1RleHRlXCI+Li4uPC9wPlxuICAgICAgIDwvZGl2PlxuICAgICAgIDxkaXYgY2xhc3M9XCJibG9jQWN0aW9uc1wiPi4uLjwvZGl2PlxuICAgPC9kaXY+XG5cbiAgIExFIGNvbnRlbmV1ciBkZSBjb250ZW51IFLDqWdpZSAoZMOpY2lzaW9uIFBPIDIwMjYtMDctMTgpIDogdG91dGUgYm/DrnRlXG4gICDCqyB0aXRyZSArIHRleHRlICsgYWN0aW9ucyDCuyBhZG9wdGUgY2UgY29tcG9zYW50IOKAlCBjYXJ0ZXMgZHUgY2F0YWxvZ3VlIGRlXG4gICBzY8OpbmFyaW9zLCBibG9jcyBkZSBsYSBwYWdlIE1vZGlmaWVyLCBibG9jcyBkJ29uZ2xldC4gWm9uZXMgb3B0aW9ubmVsbGVzIDtcbiAgIGxlcyBjb250ZXh0ZXMgbidhcHBvcnRlbnQgcXVlIGRlcyBtb2RpZmljYXRldXJzIChjb3VsZXVyLCBsYXJnZXVyKS5cblxuICAgTW9kaWZpY2F0ZXVycyBkZSBjYXTDqWdvcmllIChjb3VsZXVycyBkJ2ljw7RuZSkgOlxuICAgLSAuYmxvY0dyb3VwZXMgKG91IC5ibG9jR3JvdXBlIHBvdXIgY29tcGF0IFRTKVxuICAgLSAuYmxvY0Rpc3RyaWJ1dGlvbnNcbiAgIC0gLmJsb2NUZWxlY2hhcmdlclxuICAgLSAuYmxvY0dyb3VwZSAobW9kZSB0ZXN0LCBjb21wYXQgVFMpXG5cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgQ09OVEVORVVSIFBSSU5DSVBBTFxuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG5cbi5ibG9jIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgIG1heC13aWR0aDogNjAwcHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlckZvcm0pO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMC4ycztcbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBaT05FIElDw5RORSAod3JhcHBlciB1bmlxdWVtZW50KVxuICAgTGUgc3R5bGUgZGVzIGltZy9zdmcgZXQgbGVzIGNvdWxldXJzIGRlIGZvbmRcbiAgIHBhciBjYXTDqWdvcmllIHNvbnQgY2VudHJhbGlzw6lzIGRhbnMgNTRfaWNvbmVzLmNzc1xuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG5cbi5ibG9jSWNvbmUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgIHBhZGRpbmc6IDAgNHB4IDAgMDtcbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBaT05FIENPTlRFTlVcbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuXG4uYmxvY0NvcnBzIHtcbiAgICBmbGV4OiAxO1xuICAgIHBhZGRpbmc6IDE2cHggMjBweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiB2YXIoLS1nYXBSZWR1aXQpO1xufVxuXG4uYmxvY1RpdHJlIHtcbiAgICBmb250OiB2YXIoLS1mSDQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xuICAgIG1hcmdpbjogMDtcbn1cblxuLmJsb2NUZXh0ZSB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgbWFyZ2luOiAwO1xufVxuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbi5ibG9jU291c1RpdHJlIHtcbiAgICBmb250OiB2YXIoLS1mTWVudTE0KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cbiovXG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgWk9ORSBBQ1RJT05TXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cblxuLmJsb2NBY3Rpb25zIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbiAgICBwYWRkaW5nOiAxNnB4IDIwcHg7XG4gICAgYm9yZGVyLWxlZnQ6IHZhcigtLWJvcmRlcik7XG4gICAgbWluLXdpZHRoOiAyNDBweDtcbn1cblxuLmJsb2NBY3Rpb25zIC50b2dnbGVBdmVjTGFiZWwge1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBTVEFUUyAobm9tYnJlICsgbGFiZWwpXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cblxuLmJsb2NTdGF0cyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpOyAvKiBhbGlnbsOpIDYgLT4gOHB4ICjDqWNoZWxsZSBQTyAyMDI2LTA3LTE4KSAqL1xuICAgIG1hcmdpbi10b3A6IDRweDtcbn1cblxuLmJsb2NOb21icmUge1xuICAgIGZvbnQ6IHZhcigtLWZNb25vMjRiKTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLmJsb2NMYWJlbCB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgQ09NUFRFVVIgKGdyb3MgY2hpZmZyZSBhdmVjIHPDqXBhcmF0ZXVyKVxuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG5cbi5ibG9jQ29tcHRldXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lO1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbn1cblxuLmNvbXB0ZXVyVmFsZXVyIHtcbiAgICBmb250OiB2YXIoLS1mTW9ubzI0Yik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG59XG5cbi5jb21wdGV1clJlc3RlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCk7XG59XG5cbi8qIGRpc3BsYXk6ZmxleCDDqWNyYXNlcmFpdCBsJ2F0dHJpYnV0IGhpZGRlbiDihpIgb24gbGUgcsOpdGFibGl0IGV4cGxpY2l0ZW1lbnQuICovXG4uY29tcHRldXJSZXN0ZVtoaWRkZW5dIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4uY29tcHRldXJTZXBhcmF0ZXVyIHtcbiAgICBmb250OiB2YXIoLS1mSDMpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjQpO1xufVxuXG4uY29tcHRldXJMYWJlbCB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgREFURSAvIElORk8gU0VDT05EQUlSRVxuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG5cbi5ibG9jRGF0ZSAvKiwgLmJsb2NUZXN0IChpbnV0aWxpc8OpIDIwMjYtMDYtMTMpICovLCAuYmxvY1JlZmVyZW5jZXMge1xuICAgIGZvbnQ6IHZhcigtLWZMaWdodDE0KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbiAgICBtYXJnaW4tdG9wOiBhdXRvO1xufVxuXG4vKiBJbmZvcyBzZWNvbmRhaXJlcyBlbXBpbMOpZXMgZW4gYmFzIGRlIGNhcnRlIDogc2V1bGUgbGEgcHJlbWnDqHJlIHByZW5kIGwnZXNwYWNlIGxpYnJlICovXG4uYmxvY1JlZmVyZW5jZXMgKyAuYmxvY1JlZmVyZW5jZXMsXG4uYmxvY1JlZmVyZW5jZXMgKyAuYmxvY0RhdGUge1xuICAgIG1hcmdpbi10b3A6IDA7XG59XG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuLmJsb2NUZXN0IHtcbiAgICBjb2xvcjogdmFyKC0tY1Rlc3QzKTtcbn1cbiovXG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgTElTVEUgRCdJVEVNUyAobG90cylcbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuXG4uYmxvY0xpc3RlIHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIG1hcmdpbjogMTJweCAwIDAgMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCk7XG59XG5cbi5ibG9jSXRlbSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pO1xuICAgIHBhZGRpbmc6IDhweCAxMnB4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAyKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG59XG5cbi5ibG9jSXRlbUltYWdlIHtcbiAgICB3aWR0aDogMzJweDtcbiAgICBoZWlnaHQ6IDMycHg7XG4gICAgb2JqZWN0LWZpdDogY292ZXI7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xufVxuXG4uYmxvY0l0ZW1MYWJlbCB7XG4gICAgZmxleDogMTtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLmJsb2NJdGVtU3RvY2sge1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xufVxuXG4ucGFubmVhdUZvcm11bGFpcmUgZm9ybSA+IGRpdi5ibG9jVmVydGljYWwsXG4uc2VjdGlvbkZvcm11bGFpcmUgPiBkaXYuYmxvY1ZlcnRpY2FsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiB2YXIoLS1nYXBNb3llbik7IC8qIGFsaWduw6kgMTAgLT4gMTJweCAow6ljaGVsbGUgUE8gMjAyNi0wNy0xOCkgKi9cbiAgICBwYWRkaW5nOiAxNXB4IDA7XG4gICAgbWFyZ2luOiAzMHB4IDIwcHggMzBweDtcbiAgICBib3JkZXItdG9wOiB2YXIoLS1ib3JkZXIpO1xufVxuXG4vKiBEYW5zIHVuZSBzZWN0aW9uIGNhbm9uaXF1ZSwgbGUgcmV0cmFpdCBob3Jpem9udGFsIGVzdCBwb3J0w6kgcGFyIGxhIHNlY3Rpb24gZWxsZS1tw6ptZSAqL1xuLnNlY3Rpb25Gb3JtdWxhaXJlID4gZGl2LmJsb2NWZXJ0aWNhbCB7XG4gICAgbWFyZ2luOiAxNXB4IDAgMTJweDtcbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBSw4lPUkRPTk5BTkNFTUVOVCAocG9pZ27DqWUgKyBmbMOoY2hlcylcbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuXG4ubGlzdGVPcmRyZVBvaWduZWUge1xuICAgIHdpZHRoOiAxNHB4O1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjQpO1xuICAgIGN1cnNvcjogZ3JhYjtcbn1cblxuLmxpc3RlT3JkcmVQb2lnbmVlOmFjdGl2ZSB7XG4gICAgY3Vyc29yOiBncmFiYmluZztcbn1cblxuLmRpdkFjdGlvbkNsYXNzZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZ2FwOiB2YXIoLS1nYXBSZWR1aXQpO1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xufVxuXG4vKiBQZXRpdCBib3V0b24gaWPDtG5lIGNvbXBhY3QgKGZsw6hjaGVzLCArL+KIkiwgZXRjLikgKi9cbi5taW5pQWN0aW9uIHtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHBhZGRpbmc6IDJweCA4cHg7XG4gICAgZm9udDogdmFyKC0tZkxhYmVsKTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLm1pbmlBY3Rpb246ZGlzYWJsZWQge1xuICAgIG9wYWNpdHk6IDAuMztcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG59XG5cbi5taW5pQWN0aW9uOm5vdCg6ZGlzYWJsZWQpOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMik7XG59XG5cbi5saXN0ZU9yZHJlSXRlbS5kcmFnZ2luZyB7XG4gICAgb3BhY2l0eTogMC4zO1xufVxuXG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIFJFU1BPTlNJVkVcbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuXG5AbWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHtcbiAgICAuYmxvYyB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgfVxuXG4gICAgLmJsb2NBY3Rpb25zIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICAgICAgICBib3JkZXItbGVmdDogbm9uZTtcbiAgICAgICAgYm9yZGVyLXRvcDogdmFyKC0tYm9yZGVyKTtcbiAgICAgICAgcGFkZGluZzogMTJweCAyMHB4O1xuICAgIH1cbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBJQ8OUTkVTIC0gU3R5bGVzIHBvdXIgbGVzIGJyaXF1ZXMgZXQgbGVzIGJsb2NzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICBDZSBmaWNoaWVyIGNlbnRyYWxpc2UgbGUgc3R5bGUgdmlzdWVsIGRlcyBpY8O0bmVzXG4gICB1dGlsaXPDqWVzIMOgIGxhIGZvaXMgZGFucyA6XG4gICAtIGxlcyBicmlxdWVzIGR1IG1lbnUgZCdham91dCAoLmJyaXF1ZUljb25lIHN1ciBpbWcvc3ZnKVxuICAgLSBsZXMgYmxvY3MgZGUgcsOpc3Vtw6kgKGltZy9zdmcgZGFucyAuYmxvY0ljb25lKVxuXG4gICBMZSB3cmFwcGVyIC5ibG9jSWNvbmUgbHVpLW3Dqm1lIChmbGV4LCBwYWRkaW5nKSByZXN0ZVxuICAgZGFucyA1M19ibG9jcy5jc3MgY2FyIGMnZXN0IGRlIGxhIHN0cnVjdHVyZSBkZSBjb21wb3NhbnQuXG5cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIFN0eWxlIGRlIGJhc2UgKi9cbi5icmlxdWVJY29uZSxcbi5ibG9jSWNvbmUgaW1nLFxuLmJsb2NJY29uZSBzdmcge1xuICAgIHdpZHRoOiA2NHB4O1xuICAgIGhlaWdodDogNjRweDtcbiAgICBwYWRkaW5nOiA2cHg7XG4gICAgb2JqZWN0LWZpdDogY29udGFpbjtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEZPTkRTIFBBUiBDQVTDiUdPUklFXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4uYnJpcXVlR3JvdXBlcyAuYnJpcXVlSWNvbmUsXG4uYmxvY0dyb3VwZSAuYmxvY0ljb25lIGltZyxcbi5ibG9jR3JvdXBlIC5ibG9jSWNvbmUgc3ZnLFxuLmJsb2NUZWxlY2hhcmdlciAuYmxvY0ljb25lIGltZyxcbi5ibG9jVGVsZWNoYXJnZXIgLmJsb2NJY29uZSBzdmcgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZEdyb3VwZXMpOyB9XG5cbi5icmlxdWVEaXN0cmlidXRpb25zIC5icmlxdWVJY29uZSxcbi5ibG9jRGlzdHJpYnV0aW9uIC5ibG9jSWNvbmUgaW1nLFxuLmJsb2NEaXN0cmlidXRpb24gLmJsb2NJY29uZSBzdmcgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZERpc3RyaWJ1dGlvbnMpOyB9XG5cbi5icmlxdWVDb25maWd1cmF0aW9ucyAuYnJpcXVlSWNvbmUsXG4uYnJpcXVlQ29uZmlnIC5icmlxdWVJY29uZSB7IGJhY2tncm91bmQ6IHZhcigtLWNGb25kQ29uZmlnKTsgfVxuXG4uYnJpcXVlU2NlbmVzIC5icmlxdWVJY29uZSB7IGJhY2tncm91bmQ6IHZhcigtLWNGb25kU2NlbmVzKTsgfVxuXG4uYnJpcXVlQWZmaWNoYWdlcyAuYnJpcXVlSWNvbmUgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZEFmZmljaGFnZXMpOyB9XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBJQ8OUTkUgRCdVTiBTQ8OJTkFSSU9cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgIFRvdWpvdXJzIMOgIERST0lURSwgZXQgU0FOUyBmb25kIChkw6ljaXNpb24gUE8gMjAyNi0wNy0zMSkgOiBsZXMgZm9uZHMgY2ktZGVzc3VzXG4gICBjb2RlbnQgdW5lIGNhdMOpZ29yaWUgZGUgYnJpcXVlLCB1biBzY8OpbmFyaW8gbidlbiBhIGF1Y3VuZS5cblxuICAgTGUgU1ZHIGVzdCBpbmxpbsOpIChpY29uZVNjZW5hcmlvKSwgcGFzIGVuIDxpbWc+IDogc2NlbmFyaW9zL3tkb3NzaWVyfS9pY29uZS5zdmdcbiAgIGVzdCBob3JzIHB1YmxpYy8uIDY0cHggPSB0YWlsbGUgZCdpY8O0bmUgc3RhbmRhcmQgZHUgcHJvamV0LlxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLnNjZW5hcmlvSWNvbmUge1xuICAgIGZsZXg6IDAgMCBhdXRvO1xuICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgd2lkdGg6IDY0cHg7XG4gICAgaGVpZ2h0OiA2NHB4O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi5zY2VuYXJpb0ljb25lIHN2ZyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xufVxuXG4vKiBEYW5zIHVuZSBjYXJ0ZSBkdSBjYXRhbG9ndWUsIGwnaWPDtG5lIHNlIGNhbGUgc3VyIGxlIHBhZGRpbmcgZHUgY29ycHMgZHUgYmxvYy4gKi9cbi5jcmVlclNjZW5hcmlvQ2FydGUgLnNjZW5hcmlvSWNvbmUge1xuICAgIG1hcmdpbjogMTZweCAyMHB4IDE2cHggYXV0bztcbn1cblxuLyogUGFnZSBkJ3VuIHNjw6luYXJpbyA6IGRlc2NyaXB0aW9uIMOgIGdhdWNoZSwgaWPDtG5lIMOgIGRyb2l0ZS4gKi9cbi5zY2VuYXJpb0VudGV0ZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCk7XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgU0lERUJBUiBHRVNUSU9OIMOJVsOJTkVNRU5UXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbiNnZXN0aW9uRXZlbmVtZW50IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIG1pbi1oZWlnaHQ6IGNhbGMoMTAwdmggLSA2MHB4KTtcbn1cbiovXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBTSURFQkFSXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbiNzaWRlYmFyRXZlbmVtZW50IHtcbiAgICB3aWR0aDogMjAwcHg7XG4gICAgbWluLXdpZHRoOiAyMDBweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMik7XG4gICAgYm9yZGVyLXJpZ2h0OiB2YXIoLS1ib3JkZXIpO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cblxuI3NpZGViYXJFbnRldGUge1xuICAgIHBhZGRpbmc6IDIwcHggMTVweDtcbiAgICBib3JkZXItYm90dG9tOiB2YXIoLS1ib3JkZXIpO1xufVxuXG4jY3RhU2lkZWJhclJldG91ciB7XG4gICAgZm9udDogdmFyKC0tZk1lbnUxNCk7XG4gICAgY29sb3I6IHZhcigtLWNMaW5rKTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuXG4jY3RhU2lkZWJhclJldG91cjpob3ZlciB7XG4gICAgY29sb3I6IHZhcigtLWNMaW5raCk7XG59XG5cbiNzaWRlYmFyVGl0cmUge1xuICAgIGZvbnQ6IHZhcigtLWZIMyk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG4gICAgbWFyZ2luOiAwO1xuICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG59XG4qL1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgTUVOVSBTSURFQkFSXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbiNzaWRlYmFyTWVudSB7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMTVweCAwO1xufVxuXG4jc2lkZWJhck1lbnUgbGkge1xuICAgIG1hcmdpbjogMDtcbn1cblxuI3NpZGViYXJNZW51IGEge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmc6IDEycHggMjBweDtcbiAgICBmb250OiB2YXIoLS1mTWVudTE0KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIyKTtcbiAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMsIGJvcmRlci1jb2xvciAwLjE1cztcbn1cblxuI3NpZGViYXJNZW51IGE6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAzKTtcbn1cblxuI3NpZGViYXJNZW51IGEuYWN0aXZlIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMxKTtcbiAgICBib3JkZXItbGVmdC1jb2xvcjogdmFyKC0tY0N0YSk7XG4gICAgY29sb3I6IHZhcigtLWNDdGEpO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG4qL1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQ09OVEVOVSBQUklOQ0lQQUxcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuI2dlc3Rpb25Db250ZW51IHtcbiAgICBmbGV4OiAxO1xuICAgIHBhZGRpbmc6IDMwcHggNDBweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMxKTtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xufVxuKi9cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEJMT0MgQ09VTEVVUlMgKGZvcm11bGFpcmUgY3LDqWF0aW9uKVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLnRpdHJlRXZlbmVtZW50IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBNb3llbik7IC8qIGFsaWduw6kgMTAgLT4gMTJweCAow6ljaGVsbGUgUE8gMjAyNi0wNy0xOCkgKi9cbn1cblxuLyogQWN0aW9uIGRlIGwnZW4tdMOqdGUgKGVuZ3JlbmFnZSBjb25maWcgb3UgY3JvaXggZGUgZmVybWV0dXJlKSBwb3Vzc8OpZSB0b3V0IMOgIGRyb2l0ZS4gKi9cbi50aXRyZUV2ZW5lbWVudEFjdGlvbiB7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG59XG5cbi5idG5Db25maWdPbmdsZXRzIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICB3aWR0aDogMjJweDtcbiAgICBoZWlnaHQ6IDIycHg7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyNCk7XG4gICAgdHJhbnNpdGlvbjogY29sb3IgMC4ycztcbn1cblxuLmJ0bkNvbmZpZ09uZ2xldHM6aG92ZXIge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xufVxuXG4uYmxvY09uZ2xldHMge1xuICAgIG1hcmdpbjogMTVweCAwO1xufVxuXG4vKiBUaXRyZSBzYW5zIGljw7RuZSA6IHBhZGRpbmcgZXhwbGljaXRlICovXG4udGl0cmVGb3JtdWxhaXJlU2Fuc0ljb25lIHtcbiAgICBwYWRkaW5nOiAxMnB4IDIwcHg7XG59XG5cbi5ibG9jT25nbGV0c0VudHJlZXMgLnN2Z0NiIHtcbiAgICBjb2xvcjogdmFyKC0tY0ZvbmRHcm91cGVzKTtcbn1cblxuLmJsb2NPbmdsZXRzRXh0cmFzIC5zdmdDYiB7XG4gICAgY29sb3I6IHZhcigtLWNGb25kRGlzdHJpYnV0aW9ucyk7XG59XG5cbi5ibG9jQ291bGV1cnMge1xuICAgIG1hcmdpbjogMTVweCAwO1xufVxuXG4uYmxvY0NvdWxldXJzID4gbGFiZWwge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZvbnQ6IHZhcigtLWZMYWJlbCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgbWFyZ2luLWJvdHRvbTogOHB4O1xufVxuXG4uY29udGVudUNvdWxldXJzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBnYXA6IHZhcigtLWdhcExhcmdlKTtcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbn1cblxuLmxpZ25lQ291bGV1cnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZ2FwOiB2YXIoLS1nYXBMYXJnZSk7XG59XG5cbi5jaGFtcENvdWxldXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwUmVkdWl0KTtcbn1cblxuLmNoYW1wQ291bGV1ciBpbnB1dFt0eXBlPVwiY29sb3JcIl0ge1xuICAgIHdpZHRoOiA1MHB4O1xuICAgIGhlaWdodDogNDBweDtcbn1cblxuLmNoYW1wQ291bGV1ciBzcGFuIHtcbiAgICBmb250OiB2YXIoLS1mTGlnaHQxNCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyNCk7XG59XG5cbi8qIEFwZXLDp3UgQ29uZmlndXJhdGlvbiBGb25kICovXG4jcHJldmlzdWFsaXNhdGlvbkNvbmZpZ0ZvbmQge1xuICAgIG1pbi1oZWlnaHQ6IDIwMHB4O1xuICAgIG1hcmdpbjogMjBweDtcbiAgICBwYWRkaW5nOiB2YXIoLS1wYWRkaW5nQ29ycHMpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNCbGFuYzAzKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbiNwcmV2aXN1YWxpc2F0aW9uQ29uZmlnRm9uZENhcnRlIHtcbiAgICBwYWRkaW5nOiAyMHB4IDI4cHg7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCk7XG4gICAgbWluLXdpZHRoOiAyMDBweDtcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgZWFzZSwgYmFja2dyb3VuZCAwLjNzIGVhc2UsIGJvcmRlciAwLjNzIGVhc2UsIGJveC1zaGFkb3cgMC4zcyBlYXNlO1xufVxuXG4jcHJldmlzdWFsaXNhdGlvblRpdHJlRm9uZCB7XG4gICAgZm9udDogdmFyKC0tZkgzKTtcbiAgICBtYXJnaW46IDA7XG59XG5cbiNwcmV2aXN1YWxpc2F0aW9uVGV4dGVGb25kIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBtYXJnaW46IDA7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBFTlTDilRFIFNFQ1RJT04gKGJvdXRvbiBham91dGVyKVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4uZW50ZXRlU2VjdGlvbiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgZ2FwOiB2YXIoLS1nYXBMYXJnZSk7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbn1cblxuLmVudGV0ZVNlY3Rpb24gaDEge1xuICAgIG1hcmdpbjogMCAwIDVweDtcbn1cblxuLmVudGV0ZVNlY3Rpb24gcCB7XG4gICAgbWFyZ2luOiAwO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjQpO1xufVxuXG4uY29tcHRldXIge1xuICAgIGZvbnQ6IHZhcigtLWZMaWdodDE0KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXI0KTtcbiAgICBtYXJnaW46IDAgMCAyMHB4O1xufVxuKi9cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFRBQkxFIERFIEdFU1RJT05cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuLnRhYmxlR2VzdGlvbiB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG59XG5cbi50YWJsZUdlc3Rpb24gdGgsXG4udGFibGVHZXN0aW9uIHRkIHtcbiAgICBwYWRkaW5nOiAxMnB4IDE1cHg7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBib3JkZXItYm90dG9tOiB2YXIoLS1ib3JkZXIpO1xufVxuXG4udGFibGVHZXN0aW9uIHRoIHtcbiAgICBmb250OiB2YXIoLS1mTWVudTE0KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMik7XG59XG5cbi50YWJsZUdlc3Rpb24gdGJvZHkgdHI6bGFzdC1jaGlsZCB0ZCB7XG4gICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbn1cblxuLnRhYmxlR2VzdGlvbiB0Ym9keSB0cjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDIpO1xufVxuXG4udGFibGVHZXN0aW9uIC5jb2xBY3Rpb25zIHtcbiAgICB3aWR0aDogMTAwcHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4udGFibGVHZXN0aW9uIC5jb2xOb21icmUge1xuICAgIHdpZHRoOiAxMDBweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi50YWJsZUdlc3Rpb24gLmVwdWlzZSB7XG4gICAgY29sb3I6IHZhcigtLWNSb3VnZSk7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbn1cbiovXG5cbi8qIEJvdXRvbnMgaWPDtG5lcyAqL1xuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4uYnRuSWNvbmUge1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIHBhZGRpbmc6IDZweDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyNCk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMsIGNvbG9yIDAuMTVzO1xufVxuXG4uYnRuSWNvbmU6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAzKTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLmJ0bkljb25lIHN2ZyB7XG4gICAgd2lkdGg6IDE4cHg7XG4gICAgaGVpZ2h0OiAxOHB4O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuKi9cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIE1PREFMRSAoZGlhbG9nKVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuZGlhbG9nIHtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjIpO1xuICAgIGJveC1zaGFkb3c6IDAgMTBweCA0MHB4IHZhcigtLWNPbWJyZUZvcnRlKTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIC8qIFBhcyBkZSB0YWlsbGUgc3VyIGxlIHPDqWxlY3RldXIgZCfDqWzDqW1lbnQgOiBlbGxlIGNvbnRyYWluZHJhaXQgVE9VUyBsZXNcbiAgICAgICA8ZGlhbG9nPiAobGEgc3VyY291Y2hlIGTDqW1vIDE2LzkgZHUgbm95YXUgeSBlc3QgcGFzc8OpZSkuIExhIHRhaWxsZSBlc3RcbiAgICAgICBwb3J0w6llIMKrIGVuIHBsdXMgwrsgcGFyIGxhIGNsYXNzZSBkZSBjaGFxdWUgbW9kYWxlIOKAlCAubW9kYWxlIDogNTAwcHhcbiAgICAgICAoZMOpY2lzaW9uIFBPIDIwMjYtMDctMTgpLiAqL1xufVxuXG5kaWFsb2c6OmJhY2tkcm9wIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jT3ZlcmxheSk7XG59XG5cbmRpYWxvZyBmb3JtIHtcbiAgICBwYWRkaW5nOiAyNXB4O1xufVxuXG5kaWFsb2cgaDMge1xuICAgIG1hcmdpbjogMCAwIDIwcHg7XG4gICAgZm9udDogdmFyKC0tZkgzKTtcbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4uY2hhbXBGb3JtdWxhaXJlIHtcbiAgICBtYXJnaW4tYm90dG9tOiAxNXB4O1xufVxuXG4uY2hhbXBGb3JtdWxhaXJlIGxhYmVsIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmb250OiB2YXIoLS1mTWVudTE0KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICBtYXJnaW4tYm90dG9tOiA1cHg7XG59XG5cbi5jaGFtcEZvcm11bGFpcmUgaW5wdXQsXG4uY2hhbXBGb3JtdWxhaXJlIHRleHRhcmVhIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwYWRkaW5nOiAxMHB4IDEycHg7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXIpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4uY2hhbXBGb3JtdWxhaXJlIGlucHV0OmZvY3VzLFxuLmNoYW1wRm9ybXVsYWlyZSB0ZXh0YXJlYTpmb2N1cyB7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNDdGEpO1xufVxuXG4uY2hhbXBGb3JtdWxhaXJlIGlucHV0W3R5cGU9XCJudW1iZXJcIl0ge1xuICAgIHdpZHRoOiAxMDBweDtcbn1cbiovXG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuLmFjdGlvbnNNb2RhbGUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBnYXA6IDEwcHg7XG4gICAgbWFyZ2luLXRvcDogMjVweDtcbn1cbiovXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBSRVNQT05TSVZFXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbiAgICAjZ2VzdGlvbkV2ZW5lbWVudCB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgfVxuXG4gICAgI3NpZGViYXJFdmVuZW1lbnQge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWluLXdpZHRoOiAxMDAlO1xuICAgICAgICBib3JkZXItcmlnaHQ6IG5vbmU7XG4gICAgICAgIGJvcmRlci1ib3R0b206IHZhcigtLWJvcmRlcik7XG4gICAgfVxuXG4gICAgI3NpZGViYXJNZW51IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBwYWRkaW5nOiAxMHB4O1xuICAgICAgICBnYXA6IDVweDtcbiAgICB9XG5cbiAgICAjc2lkZWJhck1lbnUgYSB7XG4gICAgICAgIHBhZGRpbmc6IDhweCAxMnB4O1xuICAgICAgICBib3JkZXItbGVmdDogbm9uZTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIH1cblxuICAgICNzaWRlYmFyTWVudSBhLmFjdGl2ZSB7XG4gICAgICAgIGJvcmRlci1sZWZ0OiBub25lO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQ3RhKTtcbiAgICAgICAgY29sb3I6IHZhcigtLWNDdGF0KTtcbiAgICB9XG5cbiAgICAjZ2VzdGlvbkNvbnRlbnUge1xuICAgICAgICBwYWRkaW5nOiAyMHB4O1xuICAgIH1cbiAgICAqL1xuXG4gICAgLyogRW50w6p0ZSBzZWN0aW9uIHJlc3BvbnNpdmUgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbiAgICAuZW50ZXRlU2VjdGlvbiB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMTVweDtcbiAgICB9XG4gICAgKi9cblxuICAgIC8qIFRhYmxlIHJlc3BvbnNpdmUgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbiAgICAudGFibGVHZXN0aW9uIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgfVxuXG4gICAgLnRhYmxlR2VzdGlvbiB0aCxcbiAgICAudGFibGVHZXN0aW9uIHRkIHtcbiAgICAgICAgcGFkZGluZzogMTBweDtcbiAgICB9XG4gICAgKi9cbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBMSVNURSBERVMgw4lWw4lORU1FTlRTXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBEZXV4IGJvdXRvbnMgZGUgY3LDqWF0aW9uIGPDtHRlIMOgIGPDtHRlLCBhdS1kZXNzdXMgZGUgbGEgbGlzdGUgKi9cbi5iYXJyZUNyZWF0aW9uRXZlbmVtZW50IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pO1xuICAgIG1hcmdpbi10b3A6IDMwcHg7XG59XG5cbi8qIExpc3RlIDogdW4gw6l2w6luZW1lbnQgcGFyIGxpZ25lLiBUYWJsZSA9IGNvbG9ubmVzIGFsaWduw6llcyBzdXIgdG91dGVzIGxlcyBsaWduZXMuICovXG4udGFibGVFdmVuZW1lbnRzIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgIG1hcmdpbi10b3A6IHZhcigtLWdhcExhcmdlKTtcbn1cblxuLnRhYmxlRXZlbmVtZW50cyB0aCB7XG4gICAgZm9udDogdmFyKC0tZk1lbnUxNCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBwYWRkaW5nOiB2YXIoLS1nYXBNb3llbikgdmFyKC0tZ2FwTGFyZ2UpO1xufVxuXG4udGFibGVFdmVuZW1lbnRzIHRkIHtcbiAgICBwYWRkaW5nOiB2YXIoLS1nYXBNb3llbikgdmFyKC0tZ2FwTGFyZ2UpO1xuICAgIGJvcmRlci10b3A6IHZhcigtLWJvcmRlcik7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLyogU3Vydm9sIDogcmVww6hyZSB2aXN1ZWwgZGUgbGEgbGlnbmUgY291cmFudGUgKHBhcyB1bmUgc8OpbGVjdGlvbikgKi9cbi50YWJsZUV2ZW5lbWVudHMgdGJvZHkgdHI6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAyKTtcbn1cblxuLyogU2V1bGUgbGEgY29sb25uZSB0aXRyZSBhYnNvcmJlIGwnZXNwYWNlIDsgbGVzIGF1dHJlcyBzZSBjYWxlbnQgc3VyIGxldXIgY29udGVudSAqL1xuLnRhYmxlRXZlbmVtZW50cyB0aDpub3QoOmZpcnN0LWNoaWxkKSxcbi50YWJsZUV2ZW5lbWVudHMgdGQ6bm90KDpmaXJzdC1jaGlsZCkge1xuICAgIHdpZHRoOiAxJTtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4vKiBBbGlnbmVtZW50IDogdGl0cmUgw6AgZ2F1Y2hlLCBTdGF0dXQgZXQgRGF0ZSBjZW50csOpcywgU3VwcHJpbWVyIMOgIGRyb2l0ZSAqL1xuLnRhYmxlRXZlbmVtZW50cyB0aDpudGgtY2hpbGQoMiksXG4udGFibGVFdmVuZW1lbnRzIHRkOm50aC1jaGlsZCgyKSxcbi50YWJsZUV2ZW5lbWVudHMgdGg6bnRoLWNoaWxkKDMpLFxuLnRhYmxlRXZlbmVtZW50cyB0ZDpudGgtY2hpbGQoMykge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLnRhYmxlRXZlbmVtZW50cyB0aDpsYXN0LWNoaWxkLFxuLnRhYmxlRXZlbmVtZW50cyB0ZDpsYXN0LWNoaWxkIHtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbn1cblxuLmxpZ25lRXZlbmVtZW50Tm9tIHtcbiAgICBmb250OiB2YXIoLS1mSDQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTGluayk7XG59XG5cbi5saWduZUV2ZW5lbWVudE5vbTpob3ZlciB7XG4gICAgY29sb3I6IHZhcigtLWNMaW5raCk7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbi5saWduZUV2ZW5lbWVudERhdGUge1xuICAgIGZvbnQ6IHZhcigtLWZMaWdodDE0KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cblxuLyogQWN0aW9ucyBkZSBsYSBsaWduZSA6IE91dnJpciAvIFN1cHByaW1lciwgY8O0dGUgw6AgY8O0dGUsIGFsaWduw6llcyDDoCBkcm9pdGUgKi9cbi5saWduZUV2ZW5lbWVudEFjdGlvbnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pO1xufVxuXG4ubGllbk91dnJpckV2ZW5lbWVudCB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNMaW5rKTtcbn1cblxuLmxpZW5PdXZyaXJFdmVuZW1lbnQ6aG92ZXIge1xuICAgIGNvbG9yOiB2YXIoLS1jTGlua2gpO1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4vKiBTdXBwcmVzc2lvbiA6IGJvdXRvbiBkJ3VuIGZvcm0gUE9TVCwgcHLDqXNlbnTDqSBjb21tZSB1biBsaWVuIChwYXMgZGUgY2hyb21lIG5hdGlmKSAqL1xuLmxpZW5TdXBwcmltZXJFdmVuZW1lbnQge1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNSb3VnZSk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4ubGllblN1cHByaW1lckV2ZW5lbWVudDpob3ZlciB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbi8qIFN0YXR1dCA6IFByw6lwYXJlciAvIFRlc3RlciAvIERpZmZ1c2VyICh2b2NhYnVsYWlyZSBkZXMgb25nbGV0cykgKi9cbi5zdGF0dXRFdmVuZW1lbnQge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBwYWRkaW5nOiB2YXIoLS1wYWRkaW5nRXRpcXVldHRlKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgZm9udDogdmFyKC0tZk1lbnUxNCk7XG59XG5cbi5zdGF0dXRQcmVwYXJlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDIpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4uc3RhdHV0VGVzdGVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jVGVzdCk7XG4gICAgY29sb3I6IHZhcigtLWNUZXN0Myk7XG59XG5cbi5zdGF0dXREaWZmdXNlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY1N1Y2Nlc0ZvbmQpO1xuICAgIGNvbG9yOiB2YXIoLS1jU3VjY2VzVGV4dGUpO1xufVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEdSSUxMRSBERVMgR1JBTkRFUyBDQVTDiUdPUklFUyAow6l0YXBlIDIgOiBjcsOpZXIgZGVwdWlzIHVuIHNjw6luYXJpbylcbiAgIE3Dqm1lIHBhdHJvbiBxdWUgbGEgZ3JpbGxlIGRlcyDDqXbDqW5lbWVudHMgKDU1X2V2ZW5lbWVudHMuY3NzKSA6IGZsZXgtd3JhcCArXG4gICBjYXJ0ZXMgw6AgbGFyZ2V1ciBmaXhlLCBwYXMgZGUgZ3JpbGxlIMOpdGlyw6llIGVuIDFmci4gRGltZW5zaW9ucyBldCBlc3BhY2VtZW50c1xuICAgcHJpcyBzdXIgbGVzIHRva2VucyBkdSBwcm9qZXQgKGxhcmdldXIgZGUgY2FydGUgMzM0cHgsIGdhcHMsIGJvcmR1cmUgZGUgY2FydGUpLlxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuI2dyaWxsZVJ1YnJpcXVlcyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgZ2FwOiB2YXIoLS1nYXBMYXJnZSk7XG4gICAgbWFyZ2luLXRvcDogMzBweDtcbn1cblxuLmNhcnRlUnVicmlxdWUge1xuICAgIHdpZHRoOiAzMzRweDtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgYXV0bztcbiAgICBjb2x1bW4tZ2FwOiB2YXIoLS1nYXBNb3llbik7XG4gICAgcm93LWdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbiAgICBhbGlnbi1jb250ZW50OiBzdGFydDtcbiAgICBwYWRkaW5nOiB2YXIoLS1wYWRkaW5nQ29ycHMpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDYXJ0ZSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zcztcbn1cblxuLmNhcnRlUnVicmlxdWU6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAyKTtcbn1cblxuLmNhcnRlUnVicmlxdWVOb20ge1xuICAgIGdyaWQtY29sdW1uOiAxO1xuICAgIGdyaWQtcm93OiAxO1xuICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICBtYXJnaW46IDA7XG4gICAgZm9udDogdmFyKC0tZkgzKTtcbn1cblxuLmNhcnRlUnVicmlxdWVBY2Nyb2NoZSB7XG4gICAgZ3JpZC1jb2x1bW46IDEgLyAtMTtcbiAgICBtYXJnaW46IDA7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG59XG5cbi8qIEljw7RuZSBTVkcgaW5saW5lIChzdHJva2U6IGN1cnJlbnRDb2xvciDihpIgY29sb3LDqWUgcGFyIGxhIHByb3ByacOpdMOpIGNvbG9yKSAqL1xuLmNhcnRlUnVicmlxdWVJY29uZSB7XG4gICAgZ3JpZC1jb2x1bW46IDI7XG4gICAgZ3JpZC1yb3c6IDE7XG4gICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgIGNvbG9yOiB2YXIoLS1jQ3RhKTtcbn1cblxuLmNhcnRlUnVicmlxdWVJY29uZSBzdmcge1xuICAgIHdpZHRoOiA0OHB4O1xuICAgIGhlaWdodDogNDhweDtcbiAgICBkaXNwbGF5OiBibG9jaztcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBGSUxUUkVTIOKAlCBjb21wb3NhbnQgY29tbXVuICjCqyB1bmUgY2xhc3NlID0gdW4gZGVzaWduIMK7KVxuXG4gICDimqDvuI8gQ09QSUUgQVNTVU3DiUUg4oCUIGp1bWVsbGUgZGUgc3R1ZGlvVml0cmluZS9hc3NldHMvdml0cmluZS9jc3MvZmlsdHJlcy5jc3MuXG4gICBJZGVudGlxdWUgYXUgZMOpcGFydC4gVG91dGUgbW9kaWZpY2F0aW9uIGljaSDihpIgZGVtYW5kZXIgYXUgUE8gcydpbCBmYXV0IGxhIHLDqXBlcmN1dGVyXG4gICBzdXIgbGUganVtZWF1IHZpdHJpbmUuIExlcyBkZXV4IGNvcGllcyBwZXV2ZW50IGRpdmVyZ2VyIHNlbG9uIGxlcyBiZXNvaW5zIGRlIGNoYXF1ZSBjw7R0w6lcbiAgIChyw6lnaWUgPSBvdXRpbCBjb25uZWN0w6kgOyB2aXRyaW5lID0gZnVubmVsIHB1YmxpYywgY2FjaGFibGUsIFNFTykuXG5cbiAgIFVOIFNFVUwgZGVzaWduIGRlIHBhbm5lYXUgZGUgZmlsdHJlcyBwb3VyIHRvdXRlIGxhIHLDqWdpZSA6IGNhdGFsb2d1ZVxuICAgwqsgQ3LDqWVyIMOgIHBhcnRpciBkJ3VuIHNjw6luYXJpbyDCuyBldCBtZW51IMKrIEFqb3V0ZXIgwrsgKHNlY3Rpb24gU2NlbmVzKS5cbiAgIExlcyAjaWQgZGVzIHBhbm5lYXV4ICgjZGl2RmlsdHJlU2NlbmFyaW8sICNkaXZGaWx0cmVTY2VuZSkgbmUgc2VydmVudFxuICAgcXUnYXUgVHlwZVNjcmlwdCBldCBhdXggcsOpZ2xhZ2VzIHByb3ByZXMgw6AgdW5lIHBhZ2Ug4oCUIGphbWFpcyBhdSBkZXNpZ24uXG5cbiAgIC5kaXZGaWx0cmVab25lICAgICBsYSByYW5nw6llIDogcGFubmVhdSDDoCBnYXVjaGUsIGNvbnRlbnUgZmlsdHLDqSDDoCBkcm9pdGVcbiAgIC5kaXZGaWx0cmUgICAgICAgICBsZSBwYW5uZWF1IHZlcnRpY2FsIGRlIGZpbHRyZXNcbiAgIC50aXRyZUZpbHRyZSAgICAgICB0aXRyZSBkdSBwYW5uZWF1XG4gICAuZGl2RmlsdHJlR3JvdXBlICAgZ3JvdXBlIGRlIHB1Y2VzICgrIC5wbGllIDogcmVwbGnDqSwgc2V1bHMgbGVzIGFjdGlmcyByZXN0ZW50IHZpc2libGVzKVxuICAgLnRpdHJlR3JvdXBlRmlsdHJlIHRpdHJlIGQndW4gZ3JvdXBlLCBjbGlxdWFibGUgKGNoZXZyb24pLCByZXBsaWUvZMOpcGxpZSAocGxpYWdlRmlsdHJlcy50cylcbiAgIC5maWx0cmUgICAgICAgICAgICBsYSBwdWNlIGNsaXF1YWJsZSAoKyAuYWN0aWYgOiBmb25kIGdyaXMgKyBjb2NoZSDinJMgw6AgZHJvaXRlKVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmRpdkZpbHRyZVpvbmUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZ2FwOiB2YXIoLS1nYXBMaXN0ZSk7IC8qIGFsaWduw6kgMjAg4oaSIDMycHggKGTDqWNpc2lvbiBQTyAyMDI2LTA3LTE4KSAqL1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xufVxuXG4uZGl2RmlsdHJlIHtcbiAgICBmbGV4OiAwIDAgMjgwcHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbiAgICBwYWRkaW5nOiB2YXIoLS1wYWRkaW5nQ29ycHMpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAyKTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlcik7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjIpO1xufVxuXG4udGl0cmVGaWx0cmUge1xuICAgIGZvbnQ6IHZhcigtLWZINCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG4gICAgcGFkZGluZy1ib3R0b206IHZhcigtLWdhcERlZmF1dCk7XG4gICAgYm9yZGVyLWJvdHRvbTogdmFyKC0tYm9yZGVyKTtcbn1cblxuLmRpdkZpbHRyZUdyb3VwZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogdmFyKC0tZ2FwUmVkdWl0KTtcbn1cblxuLyogVGl0cmUgZGUgZ3JvdXBlIDogY2xpcXVhYmxlLCByZXBsaWUvZMOpcGxpZSBzb24gZ3JvdXBlIChUUyBwbGlhZ2VGaWx0cmVzLnRzIHBvc2UgLnBsaWUpICovXG4udGl0cmVHcm91cGVGaWx0cmUge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBmb250OiB2YXIoLS1mTGFiZWwpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIG1hcmdpbi10b3A6IHZhcigtLWdhcERlZmF1dCk7XG4gICAgcGFkZGluZy1yaWdodDogMThweDsgLyogcGxhY2UgZHUgY2hldnJvbiAqL1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbn1cblxuLnRpdHJlR3JvdXBlRmlsdHJlOmhvdmVyIHtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLyogQ2hldnJvbiBkZXNzaW7DqSBlbiBDU1MgKGF1Y3VuZSBpY8O0bmUgY2hldnJvbiBuJ2V4aXN0ZSBkYW5zIGwnYXBwbGkpIDog4pa+IG91dmVydCwg4pa4IHBsacOpICovXG4udGl0cmVHcm91cGVGaWx0cmU6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IDRweDtcbiAgICB0b3A6IDUwJTtcbiAgICB3aWR0aDogN3B4O1xuICAgIGhlaWdodDogN3B4O1xuICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgY3VycmVudENvbG9yO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNzAlKSByb3RhdGUoNDVkZWcpO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzO1xufVxuXG4uZGl2RmlsdHJlR3JvdXBlLnBsaWUgLnRpdHJlR3JvdXBlRmlsdHJlOjphZnRlciB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpIHJvdGF0ZSgtNDVkZWcpO1xufVxuXG4vKiBHcm91cGUgcGxpw6kgOiBzZXVscyBsZXMgZmlsdHJlcyBhY3RpZnMgcmVzdGVudCBhcHBhcmVudHMgKi9cbi5kaXZGaWx0cmVHcm91cGUucGxpZSAuZmlsdHJlOm5vdCguYWN0aWYpIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBMYSBwdWNlIDogZHUgdGV4dGUsIHBhcyB1biBib3V0b24g4oCUIGxlIGNvbnRvdXIgZXQgbGUgZm9uZCBibGV1IHBsZWluIGFwcGFydGllbm5lbnQgYXV4IGN0YSAqL1xuLmZpbHRyZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHBhZGRpbmc6IDZweCAyNnB4IDZweCAxMnB4OyAvKiBwbGFjZSByw6lzZXJ2w6llIMOgIGRyb2l0ZSBwb3VyIGxhIGNvY2hlIDogcmllbiBuZSBib3VnZSDDoCBsYSBzw6lsZWN0aW9uICovXG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyOiBub25lOyAvKiBuZXV0cmFsaXNlIGwnaGFiaWxsYWdlIG5hdGlmIGRlcyBwdWNlcyA8YnV0dG9uPiAqL1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIyKTtcbiAgICBmb250OiB2YXIoLS1mTWVudTE0KTtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzLCBjb2xvciAwLjE1cztcbn1cblxuLyogQWN0aWYgPSBsZSBmb25kIGR1IHN1cnZvbCBxdWkgcmVzdGUgKC0tY0JsYW5jMDMgOiBmb25kIGV4aXN0YW50IGRlcyBib3V0b25zIGRpc2NyZXRzKSAqL1xuLmZpbHRyZTpob3Zlcixcbi5maWx0cmUuYWN0aWYge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAzKTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLmZpbHRyZS5hY3RpZjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfinJMnO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICByaWdodDogOHB4O1xuICAgIHRvcDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA3LTE4IOKAlCBwcmVtaWVyIGRlc2lnbiBkZSBsYSBwdWNlIChjb250b3VyICsgZm9uZCBibGV1IGN0YSksIGFiYW5kb25uw6kgOlxuICAgaWwgcGFybGFpdCBsYSBsYW5ndWUgZGVzIGN0YSAoZMOpY2lzaW9uIFBPLCBwYXMgZGUgZ2l0IDogb24gZ2FyZGUgbGEgdHJhY2UpXG4uZmlsdHJlIHtcbiAgICBwYWRkaW5nOiA2cHggMTJweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyQ2FydGUpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbn1cbi5maWx0cmU6aG92ZXIgeyBib3JkZXItY29sb3I6IHZhcigtLWNDdGEpOyBjb2xvcjogdmFyKC0tY0N0YSk7IH1cbi5maWx0cmUuYWN0aWYgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jQ3RhKTsgYm9yZGVyLWNvbG9yOiB2YXIoLS1jQ3RhKTsgY29sb3I6IHZhcigtLWNDdGF0KTsgfVxuLmZpbHRyZS5hY3RpZjpob3ZlciB7IGJhY2tncm91bmQ6IHZhcigtLWNDdGFoKTsgfVxuKi9cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBDUsOJRVIgw4AgUEFSVElSIEQnVU4gU0PDiU5BUklPIOKAlCBDYXRhbG9ndWUgKyBmaWx0cmVzXG5cbiAgIOKaoO+4jyBDT1BJRSBBU1NVTcOJRSDigJQganVtZWxsZSBkZSBzdHVkaW9WaXRyaW5lL2Fzc2V0cy92aXRyaW5lL2Nzcy9zY2VuYXJpb3NDYXRhbG9ndWUuY3NzLlxuICAgSWRlbnRpcXVlIGF1IGTDqXBhcnQuIFRvdXRlIG1vZGlmaWNhdGlvbiBpY2kg4oaSIGRlbWFuZGVyIGF1IFBPIHMnaWwgZmF1dCBsYSByw6lwZXJjdXRlclxuICAgc3VyIGxlIGp1bWVhdSB2aXRyaW5lLiBMZXMgZGV1eCBjb3BpZXMgcGV1dmVudCBkaXZlcmdlciBzZWxvbiBsZXMgYmVzb2lucyBkZSBjaGFxdWUgY8O0dMOpXG4gICAocsOpZ2llID0gb3V0aWwgY29ubmVjdMOpIDsgdml0cmluZSA9IGZ1bm5lbCBwdWJsaWMsIGNhY2hhYmxlLCBTRU8pLlxuXG4gICBOYW1lc3BhY2UgwqsgY3JlZXJTY2VuYXJpbyDCuyBleGNsdXNpZiDDoCBjZXR0ZSBwYWdlLiBORSBQQVMgcsOpdXRpbGlzZXIgwqsgYnJpcXVlIMK7LFxuICAgcXVpIGFwcGFydGllbnQgYXV4IGNhcnRlcyBkdSBidWlsZGVyIGRlIHNjw6luYXJpbyAoYXNzZXRzL3JlZ2llL2Nzcy81Nl9zY2VuYXJpby8pLlxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmNyZWVyU2NlbmFyaW9JbnRybyB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgbWFyZ2luLXRvcDogdmFyKC0tZ2FwRGVmYXV0KTtcbn1cblxuLyogTGUgZGVzaWduIGR1IHBhbm5lYXUgZGUgZmlsdHJlcyB2aWVudCBkdSBjb21wb3NhbnQgY29tbXVuICg1NV9maWx0cmVzLmNzcykuICovXG4jY3JlZXJTY2VuYXJpbyB7XG4gICAgbWFyZ2luLXRvcDogMzBweDtcbn1cblxuLyogTGEgbGlzdGUgZGVzIHNjw6luYXJpb3MgZXN0IGxvbmd1ZSA6IGxlIHBhbm5lYXUgc3VpdCBsZSBkw6lmaWxlbWVudCAocHJvcHJlIMOgIGNldHRlIHBhZ2UpLiAqL1xuI2RpdkZpbHRyZVNjZW5hcmlvIHtcbiAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgIHRvcDogMjBweDtcbn1cblxuLyogTGlzdGUgZGVzIHNjw6luYXJpb3MgKi9cbiNjcmVlclNjZW5hcmlvTGlzdGUge1xuICAgIGZsZXg6IDE7XG4gICAgbWluLXdpZHRoOiAwO1xuICAgIG1heC13aWR0aDogODAwcHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogdmFyKC0tZ2FwTGlzdGUpO1xufVxuXG4vKiBMYSBjYXJ0ZSBFU1QgdW4gYmxvYyAoY29tcG9zYW50IGNvbW11biwgNTNfYmxvY3MuY3NzIOKAlCBkw6ljaXNpb24gUE8gMjAyNi0wNy0xOCkgOlxuICAgbGEgY2xhc3NlIG5lIHNlcnQgcGx1cyBxdSdhdSBmaWx0cmFnZSBUUyBldCBhdXggcsOpZ2xhZ2VzIHByb3ByZXMgw6AgbGEgcGFnZS4gKi9cbi5jcmVlclNjZW5hcmlvQ2FydGUge1xuICAgIG1heC13aWR0aDogbm9uZTsgLyogbGEgbGlzdGUgKDgwMHB4KSBjb21tYW5kZSwgcGFzIGxlIGNsYW1wIDYwMHB4IGR1IGJsb2MgKi9cbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA3LTE4IOKAlCB0YWdzIHJldGlyw6lzIGRlcyBjYXJ0ZXMgKGRvdWJsb24gZGVzIGZpbHRyZXMgYXZlYyB1biBhdXRyZSBkZXNpZ24pXG4uY3JlZXJTY2VuYXJpb0NhcnRlVGFncyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgZ2FwOiB2YXIoLS1nYXBSZWR1aXQpO1xufVxuXG4uY3JlZXJTY2VuYXJpb0NhcnRlVGFnIHtcbiAgICBwYWRkaW5nOiAzcHggMTBweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMik7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDYXJ0ZSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjIpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIGZvbnQ6IHZhcigtLWZMYWJlbCk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjJzLCBiYWNrZ3JvdW5kIDAuMnMsIGNvbG9yIDAuMnM7XG59XG5cbi5jcmVlclNjZW5hcmlvQ2FydGVUYWc6aG92ZXIge1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY0N0YSk7XG4gICAgY29sb3I6IHZhcigtLWNDdGEpO1xufVxuXG4uY3JlZXJTY2VuYXJpb0NhcnRlVGFnLmFjdGlmIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQ3RhKTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNDdGEpO1xuICAgIGNvbG9yOiB2YXIoLS1jQ3RhdCk7XG59XG4qL1xuXG4vKiBMYSBjb2xvbm5lIGQnYWN0aW9ucyBkZSBsYSBjYXJ0ZSBlc3QgbGEgem9uZSAuYmxvY0FjdGlvbnMgZHUgY29tcG9zYW50LiAqL1xuXG4vKiBCb3V0b25zIGRlIGxhIGNhcnRlIDogLmN0YURpc2NyZXQgKDU2X3NjZW5hcmlvL19tb2RhbGUuY3NzKSwgQ29uZmlndXJlciBwdWlzXG4gICBEw6ltb25zdHJhdGlvbi4gUGFzIGRlIHByaW1haXJlL3NlY29uZGFpcmUgbmkgZGUgdmlvbGV0IGljaSA6IGRhbnMgdW5lIGxpc3RlLFxuICAgY2hhcXVlIGNhcnRlIHLDqXDDqHRlIGxlcyBtw6ptZXMgYm91dG9ucyDigJQgY2lucXVhbnRlIHByaW1haXJlcyBuJ29udCBhdWN1biBzZW5zXG4gICAoZMOpY2lzaW9uIFBPIDIwMjYtMDctMTgpLiBMZSB2aW9sZXQgZMOpbW8gcmVzdGUgYXV4IGJvdXRvbnMgc29sbyAoLmN0YURlbW8pLiAqL1xuXG4uY3JlZXJTY2VuYXJpb1ZpZGUge1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4vKiBNYXNxdWFnZSBwYXIgbGUgZmlsdHJlICovXG4uY3JlZXJTY2VuYXJpb01hc3F1ZSB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIE1PRElGSUVSIENFIFNDw4lOQVJJTyDigJQgQ29tcG9zaXRpb24gcGFyIGZhbWlsbGVcblxuICAgTmFtZXNwYWNlIMKrIG1vZGlmaWVyU2NlbmFyaW8gwrsgZXhjbHVzaWYgw6AgY2V0dGUgcGFnZS4gTGUgc3RlcHBlciBldCBsZXMgZMOpdGFpbHNcbiAgIEVudHLDqWVzL1NvcnRpZXMgcsOpdXRpbGlzZW50IGxlcyBjbGFzc2VzIGR1IHLDqWNhcGl0dWxhdGlmICg1Nl9zY2VuYXJpby9fcmVjYXBpdHVsYXRpZi5jc3MpIDtcbiAgIGljaSB1bmlxdWVtZW50IGxlIGNhcnJvdXNlbCBkZSByZW1wbGHDp2FudGVzLCBsZXMgZmljaGVzIGV0IGxhIGJhcnJlIGQnYWN0aW9ucy5cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbiNtb2RpZmllclNjZW5hcmlvIHtcbiAgICBtYXJnaW4tdG9wOiAzMHB4O1xufVxuXG4vKiBMZXMgYmxvY3MgZGUgbGEgcGFnZSBzb250IGRlcyAuYmxvYyAoY29tcG9zYW50IGNvbW11biA1M19ibG9jcy5jc3MsIGTDqWNpc2lvblxuICAgUE8gMjAyNi0wNy0xOCkgOyBpY2kgdW5pcXVlbWVudCBsZXMgcsOpZ2xhZ2VzIHByb3ByZXMgw6AgbGEgcGFnZS4gKi9cbiNtb2RpZmllclNjZW5hcmlvIC5ibG9jIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7IC8qIGFuY3JlIGwnaWPDtG5lIGFic29sdWUgLnJlY2FwVGl0cmVJY29uZSAoaMOpcml0w6llIGR1IHLDqWNhcCkgKi9cbiAgICBtYXgtd2lkdGg6IG5vbmU7IC8qIGxlcyB0dWlsZXMgZHUgY2Fycm91c2VsIGTDqXBhc3NlbnQgbGUgY2xhbXAgNjAwcHggZHUgYmxvYyAqL1xufVxuXG4vKiBDbGFzc2UgZXQgbm9uIGlkIDogdW4gY2Fycm91c2VsIHBhciBibG9jLCByw6lww6l0w6kgZGFucyBsYSBwYWdlLiAqL1xuLmRpdkFjdGlvbkNoYW5nZXJTY2VuZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwUmVkdWl0KTsgLyogbGUgcGFkZGluZyB2aWVudCBkdSBibG9jQ29ycHMgKi9cbn1cblxuLmFjdGlvbkNoYW5nZXJTY2VuZSB7XG4gICAgZmxleDogMCAwIGF1dG87XG4gICAgd2lkdGg6IDM2cHg7XG4gICAgaGVpZ2h0OiAxMDRweDsgLyogbcOqbWUgaGF1dGV1ciBxdWUgbGVzIHR1aWxlcyAqL1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDdGEpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBjb2xvcjogdmFyKC0tY0N0YVRleHRlKTtcbiAgICBmb250OiB2YXIoLS1mTWVudTE0KTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMnMsIGNvbG9yIDAuMnM7XG59XG5cbi5hY3Rpb25DaGFuZ2VyU2NlbmU6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY0N0YSk7XG4gICAgY29sb3I6IHZhcigtLWNDdGEpO1xufVxuXG4uYWN0aW9uQ2hhbmdlclNjZW5lOmRpc2FibGVkIHtcbiAgICBvcGFjaXR5OiAwLjM1O1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbn1cblxuLm1vZGlmaWVyU2NlbmFyaW9JY29uZXMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZ2FwOiB2YXIoLS1nYXBSZWR1aXQpO1xuICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgcGFkZGluZzogMTBweDsgLyogbGFpc3NlIHJlc3BpcmVyIGxlIGhhbG8gZGUgc8OpbGVjdGlvbiBtYWxncsOpIGwnb3ZlcmZsb3cgKi9cbiAgICAvKiA4LDUgaWPDtG5lcyB2aXNpYmxlcyBhdSBtYXhpbXVtIDogbGEgZGVtaS1pY8O0bmUgY291cMOpZSBzaWduYWxlIHF1J2lsIHkgYSB1bmUgc3VpdGUgKi9cbiAgICBtYXgtd2lkdGg6IGNhbGMoMTA0cHggKiA4LjUgKyB2YXIoLS1nYXBSZWR1aXQpICogOCk7XG59XG5cbi5tb2RpZmllclNjZW5hcmlvSWNvbmUge1xuICAgIGZsZXg6IDAgMCBhdXRvO1xuICAgIHdpZHRoOiAxMDRweDtcbiAgICBoZWlnaHQ6IDEwNHB4O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyQ2FydGUpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMnMsIGJhY2tncm91bmQgMC4ycztcbn1cblxuLyogU3Vydm9sIGQndW5lIHR1aWxlIG5vbiByZXRlbnVlIDogdG9uIGNsYWlyIGRlIGxhIGZhbWlsbGUgKH41MCAlIGR1IGZvbmQpLCBhcGVyw6d1IGRlXG4gICBsJ2FjdGl2YXRpb24uIETDqWZhdXQgPSBhbmltYXRpb24sIC5yZWNhcEJsb2NBZmZpY2hhZ2Ugc3VyIGxlIGJsb2MgYmFzY3VsZSBlbiBhZmZpY2hhZ2UuICovXG4ubW9kaWZpZXJTY2VuYXJpb0ljb25lOm5vdCguYWN0aWYpOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZFNjZW5lczApO1xufVxuXG4ucmVjYXBCbG9jQWZmaWNoYWdlIC5tb2RpZmllclNjZW5hcmlvSWNvbmU6bm90KC5hY3RpZik6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kQWZmaWNoYWdlczApO1xufVxuXG4vKiBUdWlsZSByZXRlbnVlIDogZm9uZCBwbGVpbiBkZSBsYSBmYW1pbGxlICsgYm9yZHVyZSBDVEEgbmV0dGUgZXQgaGFsby4gKi9cbi5tb2RpZmllclNjZW5hcmlvSWNvbmUuYWN0aWYge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kU2NlbmVzKTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNOb2lyMSk7XG4gICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHZhcigtLWNGb3JtRm9jdXNIYWxvKTtcbiAgICBib3JkZXItd2lkdGg6IDJweDtcbn1cblxuLnJlY2FwQmxvY0FmZmljaGFnZSAubW9kaWZpZXJTY2VuYXJpb0ljb25lLmFjdGlmIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZEFmZmljaGFnZXMpO1xufVxuXG4ubW9kaWZpZXJTY2VuYXJpb0ljb25lIGltZyB7XG4gICAgd2lkdGg6IDg0cHg7XG4gICAgaGVpZ2h0OiA4NHB4O1xufVxuXG4ubW9kaWZpZXJTY2VuYXJpb0ZpY2hlIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4ubW9kaWZpZXJTY2VuYXJpb0ZpY2hlLmFjdGlmIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbn1cblxuLyogQmFycmUgZCdhY3Rpb24gZGUgbGEgZmljaGUgOiBzw6lwYXJlIGxlIGJvdXRvbiBkdSBkZXNjcmlwdGlmICh1biBib3V0b24gbnVcbiAgIGNvbGzDqSBhdSB0ZXh0ZSwgZMOpY2lzaW9uIFBPIDIwMjYtMDctMTgpLiAqL1xuLmRpdkFjdGlvbkZpY2hlIHtcbiAgICBtYXJnaW4tdG9wOiB2YXIoLS1nYXBEZWZhdXQpO1xufVxuXG4vKiBCbG9jIHNhbnMgcmVtcGxhw6dhbnRlIDogbCdpY8O0bmUgYWJzb2x1ZSBkdSByw6ljYXAgKDg0cHgsIGhhdXQtZHJvaXQpIHJlY291dnJlIGxlIGTDqWJ1dFxuICAgZHUgZGVzY3JpcHRpZiwgb24gbHVpIHLDqXNlcnZlIGxhIGNvbG9ubmUgZGUgZHJvaXRlIChsZSBibG9jQ29ycHMgZm91cm5pdCBkw6lqw6AgMjBweCkuICovXG4jbW9kaWZpZXJTY2VuYXJpbyAuYmxvYzpub3QoLm1vZGlmaWVyU2NlbmFyaW9CbG9jKSAuYmxvY1RleHRlIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiA3OHB4O1xufVxuXG4vKiBBbGlnbsOpcyDDoCBnYXVjaGUsIGNvbW1lIHRvdXRlIGJhcnJlIGQnYWN0aW9uIChkw6ljaXNpb24gUE8gMjAyNi0wNy0xOCA6IHBhc1xuICAgZCdhbGlnbmVtZW50IHF1aSB2YXJpZSBkJ3VuZSBiYXJyZSDDoCBsJ2F1dHJlKS4gKi9cbi5kaXZBY3Rpb25Nb2RpZmllclNjZW5hcmlvIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbiAgICBtYXJnaW4tdG9wOiB2YXIoLS1wYWRkaW5nQ29ycHMpO1xufVxuXG4vKiDCqyBDcsOpZXIgY2V0IMOpdsOpbmVtZW50IMK7IHZpdCBkYW5zIHVuIDxmb3JtPiAoaWwgUE9TVGUgbGEgY29tcG9zaXRpb24gYHJlbXBsYWNlcmApLlxuICAgZGlzcGxheTpjb250ZW50cyBlZmZhY2UgbGEgYm/DrnRlIGR1IGZvcm0gOiBsZSBnYXAgZGUgbGEgYmFycmUgcydhcHBsaXF1ZSBhdXhcbiAgIGJvdXRvbnMgZXV4LW3Dqm1lcyAobcOqbWUgc29sdXRpb24gcXVlIGxlIGNhdGFsb2d1ZSkuICovXG4uZGl2QWN0aW9uTW9kaWZpZXJTY2VuYXJpbyBmb3JtIHtcbiAgICBkaXNwbGF5OiBjb250ZW50cztcbn1cblxuLyogwqsgQ3LDqWVyIGNldCDDqXbDqW5lbWVudCDCuyA6IHNldWxlIGFjdGlvbiBwcmltYWlyZSBkZSBsYSBwYWdlLCBzaWxob3VldHRlIGNvbW11bmVcbiAgIC5jdGExNCAoMzFfY3RhLmNzcykg4oCUIGljaSB1bmlxdWVtZW50IGxlcyBjb3VsZXVycy4gwqsgRMOpbW9uc3RyYXRpb24gwrsgcXVpIGxlXG4gICBzdWl0IGVzdCB1biAuY3RhRGlzY3JldCBuZXV0cmUsIGxlIG3Dqm1lIHF1ZSBsZSBjYXRhbG9ndWUgKGTDqWNpc2lvbiBQTyAyMDI2LTA3LTE4KS4gKi9cbi5jdGFNb2RpZmllclNjZW5hcmlvQ3JlZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNDdGEpO1xuICAgIGNvbG9yOiB2YXIoLS1jQ3RhdCk7XG59XG5cbi5jdGFNb2RpZmllclNjZW5hcmlvQ3JlZXI6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNDdGFoKTtcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICDDiVRJUVVFVFRFUyAtIE1hcnF1YWdlIHR5cG9ncmFwaGlxdWVcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgIExlcyDDqXRpcXVldHRlcyBkb25uw6llcyBwYXIgbCdvcmdhbmlzYXRldXIgKGFuaW1hdGlvbnMsIHNvcnRpZXMsIGdyb3VwZXMpXG4gICBzb250IGVudmVsb3Bww6llcyBkYW5zIC5ldGlxdWV0dGVNb25vIHBhciBsZSBmaWx0cmUgVHdpZyBgZXRpcXVldHRlSHRtbGAuXG4gICBMYSBjaGFzc2UgZml4ZSBsZXMgZGlzdGluZ3VlIGRlcyBsaWJlbGzDqXMgZHUgc3lzdMOobWUgKGTDqWNpc2lvbiBQTyAyMDI2LTA2LTEwKS5cbiovXG5cbi5ldGlxdWV0dGVNb25vIHtcbiAgICBmb250LWZhbWlseTogdmFyKC0tZmZNb25vKTtcbn1cblxuLyogTWFycXVldXIgZCd1bmUgc291cmNlIHByb3Zpc29pcmUsIGFjY29sw6kgw6AgbCfDqXRpcXVldHRlIHBhciBsZSBtw6ptZSBmaWx0cmUgKi9cbi5ldGlxdWV0dGVBQ29uZmlndXJlciB7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jUm91Z2U2KTtcbn1cblxuLnJlY2FwQmxvY0RldGFpbCAuZXRpcXVldHRlQUNvbmZpZ3VyZXIge1xuICAgIGNvbG9yOiB1bnNldDtcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBTQ8OJTkFSSU8gLSBHcmlsbGUgZGUgYnJpcXVlc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuI3NjZW5hcmlvQ29udGFpbmVyIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7IC8qIFBvdXIgbGUgU1ZHIGRlcyBsaWduZXMgKi9cbn1cblxuI3NjZW5hcmlvR3JpbGxlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBnYXA6IHZhcigtLWdhcExhcmdlKSB2YXIoLS1nYXBNb3llbik7IC8qIGFsaWduw6kgMTAgLT4gMTJweCAow6ljaGVsbGUgUE8gMjAyNi0wNy0xOCkgKi9cbiAgICBtYXJnaW4tYm90dG9tOiAzMHB4O1xufVxuXG4vKiBTVkcgZGVzIGxpZ25lcyBkZSBjb25uZXhpb24gKi9cbi5zY2VuYXJpb0xpZ25lc1N2ZyB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lOyAvKiBOZSBibG9xdWUgcGFzIGxlcyBjbGljcyAqL1xuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgIHotaW5kZXg6IDA7IC8qIERlcnJpw6hyZSBsZXMgYnJpcXVlcyAqL1xufVxuXG4uYnJpcXVlICoge1xuICAgIHVzZXItc2VsZWN0OiBub25lO1xufVxuXG5ib2R5LmlzRHJhZ2dpbmcsXG5ib2R5LmlzRHJhZ2dpbmcgKiB7XG4gICAgY3Vyc29yOiBncmFiYmluZyAhaW1wb3J0YW50O1xufVxuXG4vKiBCcmlxdWUgZGUgYmFzZSAqL1xuLmJyaXF1ZSB7XG4gICAgd2lkdGg6IDE2MnB4O1xuICAgIGhlaWdodDogMTAwcHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDYXJ0ZSApO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMC4ycztcbn1cblxuLmJyaXF1ZTpob3ZlciB7XG4gICAgYm94LXNoYWRvdzogdmFyKC0tb21icmVQb3J0ZWUpO1xufVxuXG4vKiBHcmlsbGUgc3RhdGlxdWUgKHBhZ2UgwqsgVm9pciBsYSBjb25maWcgwrsgZGVzIGTDqW1vcykgOiBsZXMgYnJpcXVlcyBzZSByZWdhcmRlbnQsIG5lIHNlIGNsaXF1ZW50IHBhcyAqL1xuLnNjZW5hcmlvR3JpbGxlU3RhdGlxdWUgLmJyaXF1ZSB7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xufVxuXG4uYnJpcXVlLmFjdGl2ZSB7XG4gICAgYm94LXNoYWRvdzogdmFyKC0tb21icmVQb3J0ZWUpO1xufVxuXG4vKiBNYXJxdWV1ciDCqyDDoCBjb25maWd1cmVyIMK7IDogbcOqbWUgw6l0b2lsZSByb3VnZSBwYXJ0b3V0IOKAlCBzdXIgbGEgYnJpcXVlIGTigJlhbmltYXRpb24gcXVpXG4gICBjb25zb21tZSB1bmUgcHJvdmlzb2lyZSwgZXQgc3VyIGwnb25nbGV0IG/DuSBjZXR0ZSBwcm92aXNvaXJlIHNlIGNvbmZpZ3VyZVxuICAgKHZhcmlhbnRlIGQnb25nbGV0IGRhbnMgX29uZ2xldE1lbnUuY3NzLCBhdmVjIC5vbmdsZXQpLiBMZSBwbGFjZW1lbnQgZW4gY29pbiBlc3RcbiAgIHByb3ByZSDDoCBsYSBicmlxdWUgOiBhaWxsZXVycyBsJ8OpdG9pbGUgc3VpdCBsZSB0ZXh0ZS4gKi9cbi5wYXN0aWxsZVByb3Zpc29pcmUge1xuICAgIGNvbG9yOiB2YXIoLS1jUm91Z2U2KTtcbiAgICBmb250OiB2YXIoLS1mQWxlcnRlMTYpO1xufVxuXG4uYnJpcXVlIC5wYXN0aWxsZVByb3Zpc29pcmUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDRweDtcbiAgICByaWdodDogODJweDtcbn1cblxuLyogU3R5bGVzIGQnaWPDtG5lcyA6IHZvaXIgNTRfaWNvbmVzLmNzcyAqL1xuXG4uYnJpcXVlQ29uZmlnIHsgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRDb25maWcpOyB9XG5cbi5icmlxdWVUaXRyZSB7XG4gICAgZm9udDogdmFyKC0tZk1lbnUxNCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG4gICAgcGFkZGluZzogOHB4IDEwcHggMCAxMHB4O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbi5icmlxdWVOb21icmUge1xuICAgIGZvbnQ6IHZhcigtLWZMaWdodDE0KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICBwYWRkaW5nOiAycHggMTBweCAxMHB4IDEwcHg7XG59XG4qL1xuXG4vKiBDb250cmF0cyBhbmltYXRpb24gKHNvdXMtbGlnbmUgaWPDtG5lcyArIHBsYWdlcykgKi9cbi5icmlxdWVDb250cmF0cyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIGdhcDogMnB4O1xuICAgIHBhZGRpbmc6IDJweCAxMHB4IDhweCAxMHB4O1xuICAgIGZvbnQ6IHZhcigtLWZMaWdodDE0KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4uY29udHJhdFNjZW5lIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogMnB4O1xufVxuXG4uY29udHJhdFNjZW5lIHN2ZyB7XG4gICAgd2lkdGg6IDEycHg7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIGZsZXgtc2hyaW5rOiAwO1xufVxuXG4uY29udHJhdFBsYWdlIHtcbiAgICBmb250OiB2YXIoLS1mTGlnaHQxNCk7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjIpO1xufVxuXG4vKiBCcmlxdWUgQWpvdXRlciAoYm91dG9uICsgZ8OpbsOpcmlxdWUpICovXG4uYnJpcXVlQWpvdXRlciB7XG4gICAgYm9yZGVyLXN0eWxlOiBkYXNoZWQ7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDIpO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5icmlxdWVJY29uZVBsdXMge1xuICAgIHdpZHRoOiA0MHB4O1xuICAgIGhlaWdodDogNDBweDtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYm9yZGVyOiAxcHggZGFzaGVkIHZhcigtLWNOb2lyNCk7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGZvbnQ6IHZhcigtLWZIMik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyNCk7XG59XG5cbi5icmlxdWVBam91dGVyOmhvdmVyIC5icmlxdWVJY29uZVBsdXMge1xuICAgIGNvbG9yOiB2YXIoLS1jQ3RhKTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNDdGEpO1xufVxuXG4vKiBCcmlxdWUgKyBkw6lzYWN0aXbDqWUgKHF1YW5kIG1lbnUgYWZmaWNow6kpICovXG4uYnJpcXVlQWpvdXRlci5icmlxdWVBam91dGVyQWN0aWYge1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIGJvcmRlci1zdHlsZTogc29saWQ7XG59XG5cbi5icmlxdWVBam91dGVyQWN0aWYgLmJyaXF1ZUljb25lUGx1cyB7XG4gICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIENPVUxFVVJTIEJSSVFVRVMgQUpPVVRFUiAocGFyIHNlY3Rpb24pXG4gICBVdGlsaXNlIGRlcyBDU1MgY3VzdG9tIHByb3BlcnRpZXMgbG9jYWxlc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyogRMOpZmluaXRpb24gZGVzIHZhcmlhYmxlcyBwYXIgc2VjdGlvbiAqL1xuLmJyaXF1ZUFqb3V0ZXJHcm91cGVzIHtcbiAgICAtLWJyaXF1ZUZvbmQ6IHZhcigtLWNGb25kR3JvdXBlcyk7XG4gICAgLS1icmlxdWVCb3JkdXJlOiB2YXIoLS1jRm9uZEdyb3VwZXMyKTtcbn1cblxuLmJyaXF1ZUFqb3V0ZXJEaXN0cmlidXRpb25zIHtcbiAgICAtLWJyaXF1ZUZvbmQ6IHZhcigtLWNGb25kRGlzdHJpYnV0aW9ucyk7XG4gICAgLS1icmlxdWVCb3JkdXJlOiB2YXIoLS1jRm9uZERpc3RyaWJ1dGlvbnMyKTtcbn1cblxuLmJyaXF1ZUFqb3V0ZXJDb25maWd1cmF0aW9ucyB7XG4gICAgLS1icmlxdWVGb25kOiB2YXIoLS1jRm9uZENvbmZpZyk7XG4gICAgLS1icmlxdWVCb3JkdXJlOiB2YXIoLS1jRm9uZENvbmZpZzIpO1xufVxuXG4uYnJpcXVlQWpvdXRlckFmZmljaGFnZXMge1xuICAgIC0tYnJpcXVlRm9uZDogdmFyKC0tY0ZvbmRBZmZpY2hhZ2VzKTtcbiAgICAtLWJyaXF1ZUJvcmR1cmU6IHZhcigtLWNGb25kQWZmaWNoYWdlczIpO1xufVxuXG4uYnJpcXVlQWpvdXRlclNjZW5lcyB7XG4gICAgLS1icmlxdWVGb25kOiB2YXIoLS1jRm9uZFNjZW5lcyk7XG4gICAgLS1icmlxdWVCb3JkdXJlOiB2YXIoLS1jRm9uZFNjZW5lczIpO1xufVxuXG4vKiBTdHlsZXMgY29tbXVucyB1dGlsaXNhbnQgbGVzIHZhcmlhYmxlcyAqL1xuLmJyaXF1ZUFqb3V0ZXIuYnJpcXVlQWpvdXRlckdyb3VwZXMsXG4uYnJpcXVlQWpvdXRlci5icmlxdWVBam91dGVyRGlzdHJpYnV0aW9ucyxcbi5icmlxdWVBam91dGVyLmJyaXF1ZUFqb3V0ZXJDb25maWd1cmF0aW9ucyxcbi5icmlxdWVBam91dGVyLmJyaXF1ZUFqb3V0ZXJBZmZpY2hhZ2VzLFxuLmJyaXF1ZUFqb3V0ZXIuYnJpcXVlQWpvdXRlclNjZW5lcyB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tYnJpcXVlRm9uZCk7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1icmlxdWVCb3JkdXJlKTtcbn1cblxuLmJyaXF1ZUFqb3V0ZXJHcm91cGVzIC5icmlxdWVJY29uZVBsdXMsXG4uYnJpcXVlQWpvdXRlckRpc3RyaWJ1dGlvbnMgLmJyaXF1ZUljb25lUGx1cyxcbi5icmlxdWVBam91dGVyQ29uZmlndXJhdGlvbnMgLmJyaXF1ZUljb25lUGx1cyxcbi5icmlxdWVBam91dGVyQWZmaWNoYWdlcyAuYnJpcXVlSWNvbmVQbHVzLFxuLmJyaXF1ZUFqb3V0ZXJTY2VuZXMgLmJyaXF1ZUljb25lUGx1cyB7XG4gICAgY29sb3I6IHZhcigtLWJyaXF1ZUJvcmR1cmUpO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tYnJpcXVlQm9yZHVyZSk7XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgWk9ORSBGT1JNVUxBSVJFIChUdXJibyBGcmFtZSlcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbiNzY2VuYXJpb1Bhbm5lYXUge1xuICAgIG1hcmdpbjogMjBweCAwO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGJvcmRlci10b3A6IHZhcigtLWJvcmRlckNhcnRlKTtcbiAgICBwYWRkaW5nOiAyMHB4IDA7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBQQU5ORUFVIC0gQ2xhc3NlcyBnw6luw6lyaXF1ZXMgcsOpdXRpbGlzYWJsZXNcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5wYW5uZWF1V3JhcHBlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBnYXA6IHZhcigtLWdhcExpc3RlKTsgLyogYWxpZ27DqSAzMCDihpIgMzJweCAoZMOpY2lzaW9uIFBPIDIwMjYtMDctMTgpICovXG4gICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG59XG5cbi5wYW5uZWF1R2F1Y2hlIHtcbiAgICB3aWR0aDogNjAwcHg7XG4gICAgZmxleC1zaHJpbms6IDA7XG59XG5cbi5wYW5uZWF1QWlkZSB7XG4gICAgZmxleDogMTtcbiAgICBwYWRkaW5nOiAxNXB4IDIwcHg7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDYXJ0ZSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xufVxuXG4ucGFubmVhdUFpZGUgaDI6Zmlyc3QtY2hpbGQsXG4uZGVtb1ByZXNlbnRhdGlvbkFydGljbGUgaDI6Zmlyc3QtY2hpbGQge1xuICAgIG1hcmdpbi10b3A6IDA7XG59XG5cbi5wYW5uZWF1QWlkZSBoMyB7XG4gICAgbWFyZ2luOiA0MHB4IDAgMTBweCAwO1xuICAgIGZvbnQ6IHZhcigtLWZIMyk7XG59XG5cbi5wYW5uZWF1QWlkZSBwIHtcbiAgICBtYXJnaW46IDEwcHggMDtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIyKTtcbn1cblxuLnBhbm5lYXVBaWRlIHN0cm9uZyxcbi5wYW5uZWF1QWlkZSBiIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2U3Ryb25nKTtcbn1cblxuLnBhbm5lYXVBaWRlIHVsIHtcbiAgICBtYXJnaW46IDEwcHggMDtcbiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG4gICAgbGlzdC1zdHlsZTogZGlzYztcbn1cblxuLnBhbm5lYXVBaWRlIGxpLFxuLmZpY2hpZXJQcmV2aXN1YWxpc2F0aW9uTGlzdGUgbGkge1xuICAgIG1hcmdpbjogNXB4IDA7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG59XG5cbi8qIEVuY2FkcsOpIGfDqW7DqXJpcXVlIGQnYXBlcsOndSBkJ3VuIGZpY2hpZXIgaW1wb3J0w6kgKGNvbnN0cnVpdCBlbiBKUywgZXguIGltcG9ydCBDU1YpLiAqL1xuLmZpY2hpZXJQcmV2aXN1YWxpc2F0aW9uIHtcbiAgICBwYWRkaW5nOiA4cHggMTJweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMik7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyQ2FydGUpO1xufVxuXG4uZmljaGllclByZXZpc3VhbGlzYXRpb24gaDQge1xuICAgIG1hcmdpbjogMCAwIDZweDtcbiAgICBmb250OiB2YXIoLS1mSDQpO1xufVxuXG4vKiBMZXMgPHA+IGRlIGwnYXBlcsOndSBuZSBzb250IHBhcyBlbmZhbnRzIGRpcmVjdHMgZHUgZm9ybSA6IG9uIG5ldXRyYWxpc2UgbGEgbWFyZ2VcbiAgIHBhciBkw6lmYXV0IGR1IG5hdmlnYXRldXIgKHNpbm9uIGdyb3MgdHJvdSBlbnRyZSB1biB0aXRyZSBkZSBsaXN0ZSBldCBzYSBsaXN0ZSkuICovXG4uZmljaGllclByZXZpc3VhbGlzYXRpb24gcCB7XG4gICAgbWFyZ2luOiAwO1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjIpO1xufVxuXG4vKiBCbG9jIMKrIHRpdHJlICsgbGlzdGUgwrsgOiBzw6lwYXLDqSBkdSBjb21wdGV1ciwgbWFpcyB0aXRyZSBjb2xsw6kgw6Agc2EgbGlzdGUgKHByb3hpbWl0w6kpLiAqL1xuLmZpY2hpZXJQcmV2aXN1YWxpc2F0aW9uTGlzdGUge1xuICAgIG1hcmdpbi10b3A6IDEycHg7XG59XG5cbi8qIExpZW4gwqsgVXRpbGlzZXIgdW4gYXV0cmUgZmljaGllciDCuyBEQU5TIGwnZW5jYWRyw6kgKGNvbW1lIGxlIGJvdXRvbiBkZXMgYXBlcsOndXMgZCdpbWFnZSkuICovXG4uZmljaGllclByZXZpc3VhbGlzYXRpb24gLmN0YVN1cHByaW1lciB7XG4gICAgbWFyZ2luLXRvcDogOHB4O1xufVxuXG4uZmljaGllclByZXZpc3VhbGlzYXRpb25MaXN0ZSB1bCB7XG4gICAgbWFyZ2luOiAycHggMCAwO1xuICAgIHBhZGRpbmctbGVmdDogMjBweDtcbiAgICBsaXN0LXN0eWxlOiBkaXNjO1xufVxuXG4ucGFubmVhdUFpZGUgYnV0dG9uIHtcbiAgICBmb250OiB1bnNldDtcbiAgICBtYXJnaW46IDA7XG4gICAgY29sb3I6IHZhcigtLWNDdGEpO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnM7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiAxMDAwcHgpIHtcbiAgICAucGFubmVhdVdyYXBwZXIge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIH1cblxuICAgIC5wYW5uZWF1R2F1Y2hlIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1heC13aWR0aDogNjAwcHg7XG4gICAgfVxuXG4gICAgLnBhbm5lYXVBaWRlIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1heC13aWR0aDogNjAwcHg7XG4gICAgfVxufVxuXG4ubWVzc2FnZUFpZGUge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4ubWVzc2FnZUFpZGUgcCB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgbWFyZ2luOiA1cHggMDtcbiAgICBtYXgtd2lkdGg6IDYwMHB4O1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQkxPQyBFTkNBRFLDiSAtIFN0eWxlIHVuaWZpw6kgcG91ciBsZXMgYmxvY3NcbiAgIGRhbnMgbGVzIGZvcm11bGFpcmVzIChsb3RzLCBhY3R1YWxpc2F0aW9uLCBldGMuKVxuXG4gICBTdHJ1Y3R1cmUgSFRNTCBvYmxpZ2F0b2lyZSA6IGZvcm0gPiBkaXYgPiAuYmxvY0VuY2FkcmVcbiAgIChsZSAuYmxvY0VuY2FkcmUgZG9pdCDDqnRyZSBkYW5zIHVuZSBkaXYgaW50ZXJtw6lkaWFpcmUpXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4uYmxvY0VuY2FkcmUge1xuICAgIHBhZGRpbmc6IDE1cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTVweDtcbiAgICBib3gtc2hhZG93OiB2YXIoLS1vbWJyZUludGVybmUpO1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyQ2FydGUpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbn1cblxuLmJsb2NFbmNhZHJlIC52aWduZXR0ZUltYWdlRXhpc3RhbnRlIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMik7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbn1cblxuLmJsb2NFbmNhZHJlID4gOmZpcnN0LWNoaWxkIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xufVxuXG4uYmxvY0VuY2FkcmUgPiA6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuLmJsb2NFbmNhZHJlID4gZGl2IHtcbiAgICBwYWRkaW5nOiAwIDAgMjBweDtcbn1cblxuLyogVGl0cmUgZHUgZm9ybXVsYWlyZSBhdmVjIGljw7RuZSBldCBjb3VsZXVyICovXG4udGl0cmVGb3JtdWxhaXJlIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW46IDAgMCA0MHB4IDA7XG4gICAgZm9udDogdmFyKC0tZkgzKTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4udGl0cmVGb3JtdWxhaXJlOmhhcygrIC5zb3VzVGl0cmVGb3JtdWxhaXJlKSB7XG4gICAgbWFyZ2luLWJvdHRvbTogOHB4O1xufVxuXG4uc291c1RpdHJlRm9ybXVsYWlyZSB7XG4gICAgbWFyZ2luOiAyMHB4IDAgMzBweCAwO1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4udGl0cmVJY29uZSB7XG4gICAgd2lkdGg6IDQwcHg7XG4gICAgaGVpZ2h0OiA0MHB4O1xuICAgIHBhZGRpbmc6IDZweDtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFZBUklBTlRFUyBERSBDT1VMRVVSUyBERVMgVElUUkVTIEZPUk1VTEFJUkVTXG4gICBVdGlsaXNlIGRlcyBDU1MgY3VzdG9tIHByb3BlcnRpZXMgbG9jYWxlc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyogVmFyaWFibGVzIGxvY2FsZXMgcG91ciBsZSB0aXRyZSBldCBzb24gaWPDtG5lICjDqWzDqW1lbnRzIGVuZmFudHMpICovXG4udGl0cmVDb25maWcsXG4udGl0cmVDb25maWd1cmF0aW9ucyB7XG4gICAgLS10aXRyZUZvbmQ6IHZhcigtLWNGb25kQ29uZmlnKTtcbiAgICAtLXRpdHJlSWNvbmVGb25kOiB2YXIoLS1jRm9uZENvbmZpZyk7XG59XG5cbi50aXRyZUdyb3VwZXMge1xuICAgIC0tdGl0cmVGb25kOiB2YXIoLS1jRm9uZEdyb3VwZXMpO1xuICAgIC0tdGl0cmVJY29uZUZvbmQ6IHZhcigtLWNGb25kR3JvdXBlcyk7XG59XG5cbi50aXRyZURpc3RyaWJ1dGlvbnMge1xuICAgIC0tdGl0cmVGb25kOiB2YXIoLS1jRm9uZERpc3RyaWJ1dGlvbnMpO1xuICAgIC0tdGl0cmVJY29uZUZvbmQ6IHZhcigtLWNGb25kRGlzdHJpYnV0aW9ucyk7XG59XG5cbi50aXRyZVNjZW5lcyB7XG4gICAgLS10aXRyZUZvbmQ6IHZhcigtLWNGb25kU2NlbmVzKTtcbiAgICAtLXRpdHJlSWNvbmVGb25kOiB2YXIoLS1jRm9uZFNjZW5lcyk7XG59XG5cbi50aXRyZUFmZmljaGFnZXMge1xuICAgIC0tdGl0cmVGb25kOiB2YXIoLS1jRm9uZEFmZmljaGFnZXMpO1xuICAgIC0tdGl0cmVJY29uZUZvbmQ6IHZhcigtLWNGb25kQWZmaWNoYWdlcyk7XG59XG5cbi8qIFN0eWxlcyBjb21tdW5zIHV0aWxpc2FudCBsZXMgdmFyaWFibGVzIGxvY2FsZXMgKi9cbi50aXRyZUNvbmZpZyxcbi50aXRyZUNvbmZpZ3VyYXRpb25zLFxuLnRpdHJlR3JvdXBlcyxcbi50aXRyZURpc3RyaWJ1dGlvbnMsXG4udGl0cmVTY2VuZXMsXG4udGl0cmVBZmZpY2hhZ2VzIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS10aXRyZUZvbmQpO1xufVxuXG4udGl0cmVDb25maWcgLnRpdHJlSWNvbmUsXG4udGl0cmVDb25maWd1cmF0aW9ucyAudGl0cmVJY29uZSxcbi50aXRyZUdyb3VwZXMgLnRpdHJlSWNvbmUsXG4udGl0cmVEaXN0cmlidXRpb25zIC50aXRyZUljb25lLFxuLnRpdHJlU2NlbmVzIC50aXRyZUljb25lLFxuLnRpdHJlQWZmaWNoYWdlcyAudGl0cmVJY29uZSB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tdGl0cmVJY29uZUZvbmQpO1xufVxuXG4ucGFubmVhdUZvcm11bGFpcmUgLmN0YVZhbGlkZXIge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgcGFkZGluZzogMTBweCA0MHB4O1xuICAgIHdpZHRoOiBhdXRvO1xufVxuXG4ucGFubmVhdUZvcm11bGFpcmUgLmN0YVZhbGlkZXI6ZGlzYWJsZWQge1xuICAgIGN1cnNvcjogYXV0bztcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIENPVUxFVVJTIFBBUiBDQVTDiUdPUklFICguZGl2Q29uZmlnLCAuZGl2R3JvdXBlcywgZXRjLilcbiAgIENsYXNzZSBham91dMOpZSBzdXIgLnBhbm5lYXVGb3JtdWxhaXJlIHBhciBfYmFzZUNyZWF0ZS9fYmFzZUVkaXRcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIEJvdXRvbiB2YWxpZGVyIC0gQ29uZmlnICovXG4uZGl2Q29uZmlnIC5jdGFWYWxpZGVyLFxuLmRpdkNvbmZpZ3VyYXRpb25zIC5jdGFWYWxpZGVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZENvbmZpZ19hKTtcbn1cbi5kaXZDb25maWcgLmN0YVZhbGlkZXI6aG92ZXIsXG4uZGl2Q29uZmlndXJhdGlvbnMgLmN0YVZhbGlkZXI6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kQ29uZmlnX2FoKTtcbn1cblxuLyogQm91dG9uIHZhbGlkZXIgLSBQYXJ0aWNpcGFudHMgKi9cbi5kaXZHcm91cGVzIC5jdGFWYWxpZGVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZEdyb3VwZXNfYSk7XG59XG4uZGl2R3JvdXBlcyAuY3RhVmFsaWRlcjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRHcm91cGVzX2FoKTtcbn1cblxuLyogQm91dG9uIHZhbGlkZXIgLSBMb3RzICovXG4uZGl2RGlzdHJpYnV0aW9ucyAuY3RhVmFsaWRlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmREaXN0cmlidXRpb25zX2EpO1xufVxuLmRpdkRpc3RyaWJ1dGlvbnMgLmN0YVZhbGlkZXI6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kRGlzdHJpYnV0aW9uc19haCk7XG59XG5cbi8qIEJvdXRvbiB2YWxpZGVyIC0gU2NlbmVzICovXG4uZGl2U2NlbmVzIC5jdGFWYWxpZGVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZFNjZW5lc19hKTtcbn1cbi5kaXZTY2VuZXMgLmN0YVZhbGlkZXI6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kU2NlbmVzX2FoKTtcbn1cblxuLyogQm91dG9uIHZhbGlkZXIgLSBBZmZpY2hhZ2VzICovXG4uZGl2QWZmaWNoYWdlcyAuY3RhVmFsaWRlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRBZmZpY2hhZ2VzX2EpO1xufVxuLmRpdkFmZmljaGFnZXMgLmN0YVZhbGlkZXI6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kQWZmaWNoYWdlc19haCk7XG59XG5cbi8qIEZvY3VzIGRlcyBjaGFtcHMgLSBDb25maWcgKi9cbi5kaXZDb25maWcgaW5wdXQ6Zm9jdXMsXG4uZGl2Q29uZmlnIHRleHRhcmVhOmZvY3VzLFxuLmRpdkNvbmZpZ3VyYXRpb25zIGlucHV0OmZvY3VzLFxuLmRpdkNvbmZpZ3VyYXRpb25zIHRleHRhcmVhOmZvY3VzIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNGb25kQ29uZmlnNCk7XG4gICAgb3V0bGluZS1jb2xvcjogdmFyKC0tY0ZvbmRDb25maWc0KTtcbn1cblxuLyogRm9jdXMgZGVzIGNoYW1wcyAtIFBhcnRpY2lwYW50cyAqL1xuLmRpdkdyb3VwZXMgaW5wdXQ6Zm9jdXMsXG4uZGl2R3JvdXBlcyB0ZXh0YXJlYTpmb2N1cyB7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jRm9uZEdyb3VwZXM0KTtcbiAgICBvdXRsaW5lLWNvbG9yOiB2YXIoLS1jRm9uZEdyb3VwZXM0KTtcbn1cblxuLyogRm9jdXMgZGVzIGNoYW1wcyAtIExvdHMgKi9cbi5kaXZEaXN0cmlidXRpb25zIGlucHV0OmZvY3VzLFxuLmRpdkRpc3RyaWJ1dGlvbnMgdGV4dGFyZWE6Zm9jdXMge1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY0ZvbmREaXN0cmlidXRpb25zNCk7XG4gICAgb3V0bGluZS1jb2xvcjogdmFyKC0tY0ZvbmREaXN0cmlidXRpb25zNCk7XG59XG5cbi8qIEZvY3VzIGRlcyBjaGFtcHMgLSBTY2VuZXMgKi9cbi5kaXZTY2VuZXMgaW5wdXQ6Zm9jdXMsXG4uZGl2U2NlbmVzIHRleHRhcmVhOmZvY3VzIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNGb25kU2NlbmVzNCk7XG4gICAgb3V0bGluZS1jb2xvcjogdmFyKC0tY0ZvbmRTY2VuZXM0KTtcbn1cblxuLyogRm9jdXMgZGVzIGNoYW1wcyAtIEFmZmljaGFnZXMgKi9cbi5kaXZBZmZpY2hhZ2VzIGlucHV0OmZvY3VzLFxuLmRpdkFmZmljaGFnZXMgdGV4dGFyZWE6Zm9jdXMge1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY0ZvbmRBZmZpY2hhZ2VzNCk7XG4gICAgb3V0bGluZS1jb2xvcjogdmFyKC0tY0ZvbmRBZmZpY2hhZ2VzNCk7XG59XG5cbi8qIFRleHRlcyBkJ2FpZGUgLSBDb25maWcgKi9cbi5kaXZDb25maWcgLmhlbHAtdGV4dCxcbi5kaXZDb25maWcgLmZhY3VsdGF0aWYsXG4uZGl2Q29uZmlndXJhdGlvbnMgLmhlbHAtdGV4dCxcbi5kaXZDb25maWd1cmF0aW9ucyAuZmFjdWx0YXRpZiB7XG4gICAgY29sb3I6IHZhcigtLWNGb25kQ29uZmlnNCk7XG59XG5cbi8qIExhYmVsIHByaW5jaXBhbCBkJ3VuIGdyb3VwZSAocmFkaW8gLyBjaGFtcCkgZGFucyBsZXMgZm9ybXVsYWlyZXMgZGUgY29uZmlnID0gdGl0cmUgKi9cbi5kaXZDb25maWcgPiBkaXYgPiBsYWJlbDpmaXJzdC1jaGlsZCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2U3Ryb25nKTtcbn1cblxuLyogVGV4dGVzIGQnYWlkZSAtIFBhcnRpY2lwYW50cyAqL1xuLmRpdkdyb3VwZXMgLmhlbHAtdGV4dCxcbi5kaXZHcm91cGVzIC5mYWN1bHRhdGlmIHtcbiAgICBjb2xvcjogdmFyKC0tY0ZvbmRHcm91cGVzNCk7XG59XG5cbi8qIFRleHRlcyBkJ2FpZGUgLSBMb3RzICovXG4uZGl2RGlzdHJpYnV0aW9ucyAuaGVscC10ZXh0LFxuLmRpdkRpc3RyaWJ1dGlvbnMgLmZhY3VsdGF0aWYge1xuICAgIGNvbG9yOiB2YXIoLS1jRm9uZERpc3RyaWJ1dGlvbnM0KTtcbn1cblxuLyogVGV4dGVzIGQnYWlkZSAtIFNjZW5lcyA6IHBhcyBkZSBjb3VsZXVyIHRow6ltYXRpcXVlLCByZXN0ZSBncmlzIHBhciBkw6lmYXV0ICovXG5cbi8qIEdyb3VwZSByYWRpbyBwb3VyIGxlcyBzbG90cyBkZSBkaXN0cmlidXRpb24gKi9cblxuLnJhZGlvRGlzdHJpYnV0aW9uT3B0aW9ucyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbn1cblxuLnJhZGlvRGlzdHJpYnV0aW9uT3B0aW9ucyAuZGl2UmIge1xuICAgIG1hcmdpbjogMDtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIENIQU1QIE5PTSBSRVBMSUFCTEVcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5jaGFtcEV0aXF1ZXR0ZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogMC41cmVtO1xufVxuXG4uY2hhbXBFdGlxdWV0dGVWYWxldXIge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjIpO1xufVxuXG4uY2hhbXBFdGlxdWV0dGVFZGl0ZXIge1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBwYWRkaW5nOiAwLjJyZW07XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzO1xufVxuXG4uY2hhbXBFdGlxdWV0dGVFZGl0ZXI6aG92ZXIge1xuICAgIG9wYWNpdHk6IDAuNjtcbn1cblxuLmNoYW1wRXRpcXVldHRlIC5tYXNxdWUge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5jaGFtcEV0aXF1ZXR0ZUNoYW1wIHtcbiAgICBmbGV4OiAxO1xufVxuXG4ucmFkaW9EaXN0cmlidXRpb25PcHRpb25zIC5kaXZSYiBsYWJlbCB7XG4gICAgZ2FwOiB2YXIoLS1nYXBMYXJnZSk7IC8qIGFsaWduw6kgMTYgLT4gMjBweCAow6ljaGVsbGUgUE8gMjAyNi0wNy0xOCkgKi9cbn1cblxuLyogQ2hlY2tib3hlcyBldCByYWRpb3MgLSBDb25maWcgKi9cbi5kaXZDb25maWcgLnN2Z0NiLFxuLmRpdkNvbmZpZyAuc3ZnUmIsXG4uZGl2Q29uZmlndXJhdGlvbnMgLnN2Z0NiLFxuLmRpdkNvbmZpZ3VyYXRpb25zIC5zdmdSYiB7XG4gICAgY29sb3I6IHZhcigtLWNGb25kQ29uZmlnKTtcbn1cblxuLyogQ2hlY2tib3hlcyBldCByYWRpb3MgLSBQYXJ0aWNpcGFudHMgKi9cbi5kaXZHcm91cGVzIC5zdmdDYixcbi5kaXZHcm91cGVzIC5zdmdSYiB7XG4gICAgY29sb3I6IHZhcigtLWNGb25kR3JvdXBlcyk7XG59XG5cbi8qIENoZWNrYm94ZXMgZXQgcmFkaW9zIC0gTG90cyAqL1xuLmRpdkRpc3RyaWJ1dGlvbnMgLnN2Z0NiLFxuLmRpdkRpc3RyaWJ1dGlvbnMgLnN2Z1JiIHtcbiAgICBjb2xvcjogdmFyKC0tY0ZvbmREaXN0cmlidXRpb25zKTtcbn1cblxuLyogQ2hlY2tib3hlcyBldCByYWRpb3MgLSBTY2VuZXMgKi9cbi5kaXZTY2VuZXMgLnN2Z0NiLFxuLmRpdlNjZW5lcyAuc3ZnUmIge1xuICAgIGNvbG9yOiB2YXIoLS1jRm9uZFNjZW5lcyk7XG59XG5cbi8qIENoZWNrYm94ZXMgZXQgcmFkaW9zIC0gQWZmaWNoYWdlcyAqL1xuLmRpdkFmZmljaGFnZXMgLnN2Z0NiLFxuLmRpdkFmZmljaGFnZXMgLnN2Z1JiIHtcbiAgICBjb2xvcjogdmFyKC0tY0ZvbmRBZmZpY2hhZ2VzKTtcbn1cblxuLyogRGFucyB1biBmb3JtdWxhaXJlIGFuaW1hdGlvbiwgbGVzIHNlY3Rpb25zIHBhcnRpY2lwYW50cy9sb3RzIGdhcmRlbnQgbGV1ciBwcm9wcmUgY291bGV1ciAqL1xuLnNlY3Rpb25BbmltR3JvdXBlcyAuc3ZnQ2IsXG4uc2VjdGlvbkFuaW1Hcm91cGVzIC5zdmdSYiB7IGNvbG9yOiB2YXIoLS1jRm9uZEdyb3VwZXMpOyB9XG4uc2VjdGlvbkFuaW1Mb3RzIC5zdmdDYixcbi5zZWN0aW9uQW5pbUxvdHMgLnN2Z1JiIHsgY29sb3I6IHZhcigtLWNGb25kRGlzdHJpYnV0aW9ucyk7IH1cblxuLyogU2VjdGlvbnMgY29sb3LDqWVzIGRhbnMgbGVzIGZvcm11bGFpcmVzIGQnYW5pbWF0aW9uICovXG4ucGFubmVhdUZvcm11bGFpcmUgZm9ybSA+IC5zZWN0aW9uQW5pbUdyb3VwZXMge1xuICAgIG1hcmdpbjogMjBweCAwO1xufVxuXG4vKiBCb3V0b24gZmlsZSBpbnB1dCAtIENvbmZpZyAqL1xuLmRpdkNvbmZpZyBpbnB1dFt0eXBlPVwiZmlsZVwiXTo6ZmlsZS1zZWxlY3Rvci1idXR0b24sXG4uZGl2Q29uZmlndXJhdGlvbnMgaW5wdXRbdHlwZT1cImZpbGVcIl06OmZpbGUtc2VsZWN0b3ItYnV0dG9uIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZENvbmZpZ19hKTtcbn1cbi5kaXZDb25maWcgaW5wdXRbdHlwZT1cImZpbGVcIl06OmZpbGUtc2VsZWN0b3ItYnV0dG9uOmhvdmVyLFxuLmRpdkNvbmZpZ3VyYXRpb25zIGlucHV0W3R5cGU9XCJmaWxlXCJdOjpmaWxlLXNlbGVjdG9yLWJ1dHRvbjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRDb25maWdfYWgpO1xufVxuXG4vKiBCb3V0b24gZmlsZSBpbnB1dCAtIFBhcnRpY2lwYW50cyAqL1xuLmRpdkdyb3VwZXMgaW5wdXRbdHlwZT1cImZpbGVcIl06OmZpbGUtc2VsZWN0b3ItYnV0dG9uIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZEdyb3VwZXNfYSk7XG59XG4uZGl2R3JvdXBlcyBpbnB1dFt0eXBlPVwiZmlsZVwiXTo6ZmlsZS1zZWxlY3Rvci1idXR0b246aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kR3JvdXBlc19haCk7XG59XG5cbi8qIEJvdXRvbiBmaWxlIGlucHV0IC0gTG90cyAqL1xuLmRpdkRpc3RyaWJ1dGlvbnMgaW5wdXRbdHlwZT1cImZpbGVcIl06OmZpbGUtc2VsZWN0b3ItYnV0dG9uIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZERpc3RyaWJ1dGlvbnNfYSk7XG59XG4uZGl2RGlzdHJpYnV0aW9ucyBpbnB1dFt0eXBlPVwiZmlsZVwiXTo6ZmlsZS1zZWxlY3Rvci1idXR0b246aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kRGlzdHJpYnV0aW9uc19haCk7XG59XG5cbi8qIEJvdXRvbiBmaWxlIGlucHV0IC0gU2NlbmVzICovXG4uZGl2U2NlbmVzIGlucHV0W3R5cGU9XCJmaWxlXCJdOjpmaWxlLXNlbGVjdG9yLWJ1dHRvbiB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRTY2VuZXNfYSk7XG59XG4uZGl2U2NlbmVzIGlucHV0W3R5cGU9XCJmaWxlXCJdOjpmaWxlLXNlbGVjdG9yLWJ1dHRvbjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRTY2VuZXNfYWgpO1xufVxuXG4vKiBCb3V0b24gZmlsZSBpbnB1dCAtIEFmZmljaGFnZXMgKi9cbi5kaXZBZmZpY2hhZ2VzIGlucHV0W3R5cGU9XCJmaWxlXCJdOjpmaWxlLXNlbGVjdG9yLWJ1dHRvbiB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRBZmZpY2hhZ2VzX2EpO1xufVxuLmRpdkFmZmljaGFnZXMgaW5wdXRbdHlwZT1cImZpbGVcIl06OmZpbGUtc2VsZWN0b3ItYnV0dG9uOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZEFmZmljaGFnZXNfYWgpO1xufVxuXG4vKiBQYW5uZWF1IGZvcm11bGFpcmUgOiB1biBzZXVsIGZvcm0gT1UgcGx1c2lldXJzIC5jb250ZW51ICovXG4ucGFubmVhdUdhdWNoZUZsZXgsXG4ucGFubmVhdUZvcm11bGFpcmUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IHZhcigtLWdhcExpc3RlKTtcbn1cblxuLyogZm9ybSBwb3VyIGxlcyBmb3JtdWxhaXJlcywgLmJsb2NDb250ZW51IHBvdXIgbGVzIGJsb2NzIGQnaW5mb3JtYXRpb24gKi9cbi5wYW5uZWF1Rm9ybXVsYWlyZSBmb3JtLFxuLnBhbm5lYXVGb3JtdWxhaXJlIC5ibG9jQ29udGVudSxcbi5wYW5uZWF1R2F1Y2hlRmxleCAuYmxvY0NvbnRlbnUge1xuICAgIG1hcmdpbjogMDtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlckNhcnRlICk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5wYW5uZWF1Rm9ybXVsYWlyZSAuYmxvY0NvbnRlbnUsXG4ucGFubmVhdUdhdWNoZUZsZXggLmJsb2NDb250ZW51IHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMjBweDtcbn1cblxuLyogQmxvYyBjb250ZW51IGVuIG1vZGUgdGVzdCAoc3R5bGUgdmlvbGV0KSAqL1xuLmJsb2NDb250ZW51VGVzdCAudGl0cmVGb3JtdWxhaXJlIHtcbiAgICAtLXRpdHJlRm9uZDogdmFyKC0tY1Rlc3QpO1xuICAgIC0tdGl0cmVJY29uZUZvbmQ6IHZhcigtLWNUZXN0Mik7XG59XG5cbi5wYW5uZWF1Rm9ybXVsYWlyZSAuZGl2Q2IsXG4ucGFubmVhdUdhdWNoZUZsZXggLmRpdkNiIHtcbiAgICBtYXJnaW46IDAgMCAyMHB4O1xufVxuXG4ucGFubmVhdUZvcm11bGFpcmUgZm9ybSA+IGg0LFxuLnBhbm5lYXVGb3JtdWxhaXJlIC5ibG9jQ29udGVudSA+IGg0LFxuLnBhbm5lYXVHYXVjaGVGbGV4IC5ibG9jQ29udGVudSA+IGg0IHtcbiAgICBtYXJnaW4tdG9wOiAyMHB4O1xuICAgIHBhZGRpbmc6IDAgMjBweDtcbn1cblxuLnBhbm5lYXVGb3JtdWxhaXJlIGZvcm0gPiBkaXYsXG4ucGFubmVhdUZvcm11bGFpcmUgLmJsb2NDb250ZW51ID4gZGl2LFxuLnBhbm5lYXVHYXVjaGVGbGV4IC5ibG9jQ29udGVudSA+IGRpdixcbi5wYW5uZWF1Rm9ybXVsYWlyZSBmb3JtID4gcCxcbi5wYW5uZWF1Rm9ybXVsYWlyZSAuYmxvY0NvbnRlbnUgPiBwLFxuLnBhbm5lYXVHYXVjaGVGbGV4IC5ibG9jQ29udGVudSA+IHAge1xuICAgIHBhZGRpbmc6IDAgMjBweDtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFNFQ1RJT05TIENBTk9OSVFVRVMgKGZvcm11bGFpcmVzIGQnYW5pbWF0aW9uKVxuICAgVW5lIHNlY3Rpb24gPSB1biBjb250ZW5ldXIgLnNlY3Rpb25Gb3JtdWxhaXJlIHF1aSBwb3J0ZSBzb24gPGg0PixcbiAgIHNlcyBjaGFtcHMgKGFpZGUgY29tcHJpc2UpIGV0IHNlcyBzb3VzLWdyb3VwZXMuIExlIHBhZGRpbmcgaG9yaXpvbnRhbFxuICAgdmllbnQgZHUgY29udHJhdCBmb3JtID4gZGl2IGNpLWRlc3N1cyA7IGljaSwgbGUgcnl0aG1lIGludGVybmUuXG4gICBSZWdpc3RyZSA6IGFuaW1hdGlvbnMvX3BhcnRhZ2Uvc2VjdGlvbnMuanNvblxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLnBhbm5lYXVGb3JtdWxhaXJlIGZvcm0gPiBkaXYuc2VjdGlvbkZvcm11bGFpcmUge1xuICAgIG1hcmdpbi1ib3R0b206IDI1cHg7XG59XG5cbi5zZWN0aW9uRm9ybXVsYWlyZSA+IGg0IHtcbiAgICBtYXJnaW46IDAgMCAxMnB4O1xufVxuXG4uc2VjdGlvbkZvcm11bGFpcmUgPiBkaXYge1xuICAgIG1hcmdpbi1ib3R0b206IDEycHg7XG59XG5cbi5zZWN0aW9uRm9ybXVsYWlyZSA+IDpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xufVxuXG4vKiBMaXN0ZSDDoCBwdWNlcyBkYW5zIHVuIGJsb2MgZCdpbmZvcm1hdGlvbiA6IGxlIHJlc2V0IGdsb2JhbCAoMDBfcmVzZXQpIHJldGlyZSBsZXMgcHVjZXMgKi9cbi5wYW5uZWF1Rm9ybXVsYWlyZSAuYmxvY0NvbnRlbnUgdWwge1xuICAgIG1hcmdpbjogMCAwIDE1cHg7XG4gICAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IDQwcHg7XG4gICAgbGlzdC1zdHlsZTogZGlzYztcbn1cblxuLnBhbm5lYXVGb3JtdWxhaXJlIC5ibG9jQ29udGVudSBsaSB7XG4gICAgbWFyZ2luOiA1cHggMDtcbn1cblxuLyogTGUgPGhyPiBzw6lwYXJhdGV1ciBzJ2FsaWduZSBzdXIgbGUgcmV0cmFpdCBob3Jpem9udGFsIGRlcyBjaGFtcHMgKDIwcHgpIGF1IGxpZXUgZGUgY291cGVyIHRvdXRlIGxhIGxhcmdldXIgKi9cbi5wYW5uZWF1Rm9ybXVsYWlyZSBmb3JtID4gaHIge1xuICAgIG1hcmdpbi1sZWZ0OiAyMHB4O1xuICAgIG1hcmdpbi1yaWdodDogMjBweDtcbn1cblxuLnBhbm5lYXVGb3JtdWxhaXJlIGZvcm0gPiBkaXYsXG4uZXNwYWNlRm9ybSA+IGRpdiB7XG4gICAgbWFyZ2luLWJvdHRvbTogMTVweDtcbn1cblxuLnRhYmxlYXVQcmV2aXN1YWxpc2F0aW9uIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgIG1hcmdpbi10b3A6IDIwcHg7XG4gICAgZm9udDogdmFyKC0tZkxhYmVsKTtcbn1cblxuLnRhYmxlYXVQcmV2aXN1YWxpc2F0aW9uIHRoLFxuLnRhYmxlYXVQcmV2aXN1YWxpc2F0aW9uIHRkIHtcbiAgICBwYWRkaW5nOiA0cHggOHB4O1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyKTtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuXG4udGFibGVhdVByZXZpc3VhbGlzYXRpb24gdGgge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAyKTtcbiAgICBmb250OiB2YXIoLS1mTGFiZWwpO1xufVxuXG4udGFibGVhdVByZXZpc3VhbGlzYXRpb24gLnNlcGFyYXRldXJQcmV2aXN1YWxpc2F0aW9uIHRkIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4vKiBUb2dnbGUgYXZlYyBsYWJlbCDigJQgY2xhc3NlcyBkZSBiYXNlIChkw6lwbGFjw6llcyBkZXB1aXMgX21vZGFsZS5jc3MpICovXG4udG9nZ2xlQXZlY0xhYmVsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbjogOHB4IDA7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4udG9nZ2xlTGFiZWwge1xuICAgIGZvbnQ6IHZhcigtLWZNZW51MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjIpO1xufVxuXG4vKiBUb2dnbGUgZMOpc2FjdGl2w6kgKGJsb3F1w6kpICovXG4udG9nZ2xlRGlzYWJsZWQge1xuICAgIG9wYWNpdHk6IDAuNDtcbiAgICBmaWx0ZXI6IGdyYXlzY2FsZSgxKTtcbiAgICBjdXJzb3I6IGF1dG87XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi8qIHBvaW50ZXItZXZlbnRzOm5vbmUgcmVuZCBsZSB0b2dnbGUgdHJhbnNwYXJlbnQgYXUgc3Vydm9sIDogc2FucyDDp2EgbGUgY3Vyc29yOnBvaW50ZXIgZHUgbGFiZWwgcmVwcmVuZCBsYSBtYWluIHN1ciB0b3V0ZSBsYSBsaWduZSAqL1xuLnRvZ2dsZUF2ZWNMYWJlbDpoYXMoLnRvZ2dsZURpc2FibGVkKSB7XG4gICAgY3Vyc29yOiBhdXRvO1xufVxuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTQgOiBwYXJhbcOodHJlICdtZXNzYWdlJyBkdSB0b2dnbGUgamFtYWlzIHBhc3PDqSBwYXIgYXVjdW4gYXBwZWxhbnQgOyByZW5kYWl0IHVuIHRleHRlIFJPVUdFIGQnYWxlcnRlIGFsb3JzIHF1ZSBkw6ljcml0IGNvbW1lIMKrIGV4cGxpY2F0aWYgwrsgKEFEUiB2w6lyaWZpY2F0aW9uRG9jdW1lbnRhdGlvbiwgY2FzIHLDqWVsIG7CsDUpXG4udG9nZ2xlTWVzc2FnZSB7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jUm91Z2UpO1xufVxuKi9cblxuLnBhbm5lYXVGb3JtdWxhaXJlIC50b2dnbGVBdmVjTGFiZWwge1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcbn1cblxuLnBhbm5lYXVGb3JtdWxhaXJlIGZvcm0gLnRvZ2dsZUF2ZWNMYWJlbCB7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XG4gICAgZ2FwOiB2YXIoLS1nYXBMYXJnZSk7IC8qIGFsaWduw6kgMTYgLT4gMjBweCAow6ljaGVsbGUgUE8gMjAyNi0wNy0xOCkgKi9cbn1cblxuLyogTGlnbmUgdG9nZ2xlIGR1IHRow6htZSBkZSBmb3JtdWxhaXJlIChkaXYubGlnbmVUb2dnbGUgPiBsYWJlbCArIGFpZGUpIDogbGUgY29udGVuZXVyXG4gICBwb3J0ZSBsJ2VzcGFjZW1lbnQgZGUgbGlnbmUsIGxlIHRvZ2dsZSBuJ2EgcGx1cyBkZSBtYXJnZSBwcm9wcmUuIExlcyB0b2dnbGVzIMOpY3JpdHNcbiAgIMOgIGxhIG1haW4gKHNsb3RzIGRlIHNvdXJjZXMpIGdhcmRlbnQgbGV1ciBtYXJnaW4gOHB4IHBvdXIgcydlc3BhY2VyIGVudHJlIGV1eC4gKi9cbi5saWduZVRvZ2dsZSA+IC50b2dnbGVBdmVjTGFiZWwge1xuICAgIG1hcmdpbjogMDtcbn1cblxuLnBhbm5lYXVGb3JtdWxhaXJlIC5mb3JtQWN0aW9ucyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pOyAvKiBhbGlnbsOpIDEwIC0+IDEycHggKMOpY2hlbGxlIFBPIDIwMjYtMDctMTgpICovXG4gICAgcGFkZGluZzogMTBweCAyMHB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xufVxuLyogY3RhQW5udWxlciBkYW5zIGxlIHBhbm5lYXUgOiBwYXMgZGUgbWFyZ2luIChsZSBub3lhdSBtZXQgMjBweCwgaW51dGlsZSBpY2kpICovXG4ucGFubmVhdUZvcm11bGFpcmUgLmZvcm1BY3Rpb25zID4gLmN0YUFubnVsZXIge1xuICAgIG1hcmdpbjogMDtcbn1cblxuLyogTGUgc3R5bGUgZGVzIGFsZXJ0ZXMgKGNvdWxldXJzLCBwb2xpY2UsIHBhZGRpbmcpIHZpZW50IGR1IG5veWF1ICg0Ml9hdXRoLmNzcykgOlxuICAgaWNpIHVuaXF1ZW1lbnQgbCdhbGlnbmVtZW50IHN1ciBsZSBwYWRkaW5nIGxhdMOpcmFsIGR1IGZvcm11bGFpcmUgKi9cbi5wYW5uZWF1Rm9ybXVsYWlyZSAuYWxlcnRFcnJldXIge1xuICAgIG1hcmdpbjogMCAyMHB4IDEwcHg7XG59XG5cbi5wYW5uZWF1Rm9ybXVsYWlyZSAuYWxlcnRFcnJldXIgbGkge1xuICAgIGNvbG9yOiBpbmhlcml0O1xufVxuXG4ucGFubmVhdUZvcm11bGFpcmUgLmFsZXJ0RXJyZXVyIHVsIHtcbiAgICBtYXJnaW46IDZweCAwIDA7XG4gICAgcGFkZGluZy1sZWZ0OiAyMHB4O1xuICAgIGxpc3Qtc3R5bGU6IGRpc2M7XG59XG5cbi5wYW5uZWF1Rm9ybXVsYWlyZSBmb3JtID4gZGl2IC5hbGVydEVycmV1ciB7XG4gICAgbWFyZ2luOiAwIDAgMTBweDtcbn1cblxuLnBhbm5lYXVGb3JtdWxhaXJlIC5mb3JtQWN0aW9ucyAuYWxlcnRFcnJldXIge1xuICAgIG1hcmdpbjogMDtcbiAgICB3aWR0aDogMTAwJTtcbn1cblxuLnBhbm5lYXVGb3JtdWxhaXJlIC5jdGFBbm51bGVyOmhvdmVyIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuLyogQm91dG9uIMKrIFJlbXBsYWNlciBwYXIgdW5lIGFuaW1hdGlvbiBzaW1pbGFpcmUgwrsgOiBvdXZyZSBsYSBwb3B1cCBkZXMganVtZWxsZXMgZGUgZmFtaWxsZVxuICAgKHBhcyB1bmUgYWN0aW9uIHLDqWVsbGUsIGNvbnRyYWlyZW1lbnQgw6AgQW5udWxlci9TdXBwcmltZXIgb3UgTW9kaWZpZXIgdm9pc2lucykuIFByw6lzZW50IGRhbnNcbiAgIGxlIGZvcm11bGFpcmUgZCfDqWRpdGlvbiBFVCBsZSBwYW5uZWF1IHLDqWNhcCAoZCdvw7kgLnBhbm5lYXVHYXVjaGUsIGxldXIgcGFyZW50IGNvbW11bikuIE3Dqm1lXG4gICBwb2xpY2UgZXQgbcOqbWUgY291bGV1ciBxdSdBbm51bGVyL01vZGlmaWVyIChjZi4gbm95YXUgMzFfY3RhLmNzcykgOiBzZXVsZXMgbGVzIGFjdGlvbnNcbiAgIG1hcnF1w6llcyAoU3VwcHJpbWVyKSBnYXJkZW50IHVuZSBjb3VsZXVyLiAqL1xuLnBhbm5lYXVHYXVjaGUgLmxpZW5TaW1pbGFpcmVzIHtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5wYW5uZWF1R2F1Y2hlIC5saWVuU2ltaWxhaXJlczpob3ZlciB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cblxuZGl2IC5jdGFTdXBwcmltZXIge1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIGhlaWdodDogYXV0bztcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY1JvdWdlKTtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbmRpdiAuY3RhU3VwcHJpbWVyOmhvdmVyIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuZGl2IC5jdGFTdXBwcmltZXJDb25maXJtIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgaXNvbGF0aW9uOiBpc29sYXRlO1xuICAgIGNvbG9yOiB2YXIoLS1jQmxhbmMpO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIG1hcmdpbi1sZWZ0OiAxMHB4O1xufVxuXG5kaXYgLmN0YVN1cHByaW1lckNvbmZpcm06OmJlZm9yZSB7XG4gICAgY29udGVudDogJyc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0OiAtNXB4IC0xMnB4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNSb3VnZSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIHotaW5kZXg6IC0xO1xuICAgIGFuaW1hdGlvbjogY29uZmlybUJnR3JvdyAwLjJzIGVhc2Utb3V0IGZvcndhcmRzO1xufVxuXG5Aa2V5ZnJhbWVzIGNvbmZpcm1CZ0dyb3cge1xuICAgIGZyb20ge1xuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuNyk7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuICAgIHRvIHtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG59XG5cbmRpdiAuY3RhU3VwcHJpbWVyRGVzYWN0aXZlIHtcbiAgICBvcGFjaXR5OiAwLjQ7XG4gICAgY3Vyc29yOiBhdXRvO1xufVxuXG5kaXYgLmN0YVN1cHByaW1lci5oaWRkZW4ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIENoYW1wIGVuZmFudCBkw6lwZW5kYW50IGQndW4gYXV0cmUgY2hhbXAgKGNoZWNrYm94IHBhcmVudClcbiAgIFV0aWxpc8OpIGF2ZWMgZGF0YS10b2dnbGUtZW5mYW50IHN1ciBsZSBwYXJlbnQgZXQgY2xhc3NlIGNoYW1wRW5mYW50IHN1ciBsJ2VuZmFudCAqL1xuLmNoYW1wRW5mYW50IHtcbiAgICB0cmFuc2l0aW9uOiAwLjJzO1xufVxuXG4uY2hhbXBFbmZhbnQuaW5hY3RpZiB7XG4gICAgb3BhY2l0eTogMC40O1xuICAgIGZpbHRlcjogZ3JheXNjYWxlKDEpO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIGN1cnNvcjogYXV0bztcbn1cblxuLmRpdkRpc3RyaWJ1dGlvbk1vZGUgLmNoYW1wRW5mYW50LmluYWN0aWYge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIFPDqXBhcmF0ZXVyIGRpc2NyZXQgYXZlYyB0ZXh0ZSBjZW50csOpICh1dGlsaXPDqSBkYW5zIGxlcyBzbG90cyBkJ2VudHLDqWVzKSAqL1xuLnNlcGFyYXRldXJEaXNjcmV0IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xuICAgIG1hcmdpbjogNnB4IDA7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xufVxuXG4uc2VwYXJhdGV1ckRpc2NyZXQ6OmJlZm9yZSxcbi5zZXBhcmF0ZXVyRGlzY3JldDo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGZsZXg6IDE7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWNCbGFuYzAzKTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIENPTlRSQVQgQU5JTUFUSU9OIOKAlCBWRVJTSU9OIETDiVRBSUxMw4lFXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4uY29udHJhdHNEZXRhaWwge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IHZhcigtLWdhcFJlZHVpdCk7XG4gICAgcGFkZGluZzogMTBweCAwO1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjIpO1xufVxuXG4uY29udHJhdERldGFpbExpZ25lIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuXG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xufVxuXG4uY29udHJhdERldGFpbEVsZW1lbnQge1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpOyAvKiBhbGlnbsOpIDUgLT4gOHB4ICjDqWNoZWxsZSBQTyAyMDI2LTA3LTE4KSAqL1xufVxuXG4uY29udHJhdERldGFpbEljb25lIHN2ZyB7XG4gICAgd2lkdGg6IDIycHg7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4uY29udHJhdERldGFpbExhYmVsIHtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cblxuLmNvbnRyYXREZXRhaWxGbGVjaGUge1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5jb250cmF0RGV0YWlsRmxlY2hlIHN2ZyB7XG4gICAgd2lkdGg6IDE4cHg7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4vKiBCb3V0b24gZmVybWVyIGxlIHBhbm5lYXUgZm9ybXVsYWlyZSAqL1xuLnBhbm5lYXVDbG9zZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogNTAlO1xuICAgIHJpZ2h0OiA1cHg7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgRU5UUsOJRVMgR1JPVVBFUyAoZ3JvdXBlcyBkYW5zIGxlcyBhbmltYXRpb25zKVxuICAgVXRpbGlzZSAuYmxvY0VuY2FkcmUgY29tbWUgYmFzZSBkZSBkZXNpZ25cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5lbnRyZWVHcm91cGVIZWFkZXIge1xuICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG59XG5cbi5lbnRyZWVHcm91cGVIZWFkZXIgLmVudHJlZU51bWVybyB7XG4gICAgZm9udDogdmFyKC0tZkg0KTtcbn1cblxuLyogR3JvdXBlIGRlIGNoYW1wcyBlbiBncmlsbGUgKG9wdGlvbiBcImNvbG9ubmVzXCIgZGUgZm9ybS5qc29uKSA6IE4gY2hhbXBzIHBhciBsaWduZS5cbiAgIFN1cmNsYXNzZSBsZSBkaXNwbGF5OmZsZXggZGUgLmJsb2NWZXJ0aWNhbCA7IGxlIHNob3dJZiBiYXNjdWxlIHN0eWxlLmRpc3BsYXkgKG5vbmUvJycpIHBhci1kZXNzdXMuICovXG4ucGFubmVhdUZvcm11bGFpcmUgZm9ybSA+IGRpdi5ibG9jVmVydGljYWwuY2hhbXBzR3JpbGxlLFxuLnNlY3Rpb25Gb3JtdWxhaXJlID4gZGl2LmJsb2NWZXJ0aWNhbC5jaGFtcHNHcmlsbGUge1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpIHZhcigtLWdhcExhcmdlKTsgLyogYWxpZ27DqSA2LT44LCAxNi0+MjBweCAow6ljaGVsbGUgUE8gMjAyNi0wNy0xOCkgKi9cbiAgICAvKiBMZXMgbGFiZWxzIG4nb250IHBhcyB0b3VzIGxhIG3Dqm1lIGhhdXRldXIgOiBjYWxlciBwYXIgbGUgYmFzIGFsaWduZSBsZXMgaW5wdXRzIGQndW5lIHJhbmfDqWUgKi9cbiAgICBhbGlnbi1pdGVtczogZW5kO1xufVxuXG4vKiBJbnRlcnRpdHJlIGRlIHJhbmfDqWUgZCd1bmUgZ3JpbGxlIChvcHRpb24gXCJ0aXRyZXNMaWduZXNcIiBkZSBmb3JtLmpzb24sIGV4LiDCqyBQYWxpZXIgMSDCuykgKi9cbi5ncmlsbGVMaWduZVRpdHJlIHtcbiAgICBncmlkLWNvbHVtbjogMSAvIC0xO1xuICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgZm9udDogdmFyKC0tZkg0KTtcbn1cblxuLmNoYW1wc0dyaWxsZSAuZ3JpbGxlTGlnbmVUaXRyZTpmaXJzdC1jaGlsZCB7XG4gICAgbWFyZ2luLXRvcDogMDtcbn1cblxuLnBhbm5lYXVGb3JtdWxhaXJlIGZvcm0gPiBkaXYuYmxvY1ZlcnRpY2FsLmNoYW1wc0dyaWxsZVtkYXRhLWNvbG9ubmVzPVwiM1wiXSxcbi5zZWN0aW9uRm9ybXVsYWlyZSA+IGRpdi5ibG9jVmVydGljYWwuY2hhbXBzR3JpbGxlW2RhdGEtY29sb25uZXM9XCIzXCJdIHtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgzLCAxZnIpO1xufVxuXG4vKiBOb3RlIGQnYWlkZSBkJ3VuIGdyb3VwZSAob3B0aW9uIFwiYWlkZVwiIGRlIGZvcm0uanNvbikgOiBwbGVpbmUgbGFyZ2V1ciwgc291cyBsZXMgY2hhbXBzLiAqL1xuLmdyaWxsZUFpZGUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4uY2hhbXBzR3JpbGxlIC5ncmlsbGVBaWRlIHtcbiAgICBncmlkLWNvbHVtbjogMSAvIC0xO1xufVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFRPR0dMRSBNRU5VIC0gQ2xhc3NlIGRlIGJhc2UgcsOpdXRpbGlzYWJsZVxuICAgU2NlbmUgc2xpZGUgZmx1aWRlIGVudHJlIGxlcyBvbmdsZXRzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4uZGl2T25nbGV0TWVudSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZ2FwOiB2YXIoLS1nYXBSZWR1aXQpO1xuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgcGFkZGluZzogMDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMik7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIHdpZHRoOiBmaXQtY29udGVudDtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcbn1cblxuLyogSW5kaWNhdGV1ciBxdWkgc2xpZGUg4oCUIHBhcyBkZSBjb3VsZXVyIHBhciBkw6lmYXV0LCBjaGFxdWUgb25nbGV0IGEgc2EgY2xhc3NlIGNvdWxldXIgKi9cbi5pbmRpY2F0ZXVyT25nbGV0IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICB0cmFuc2l0aW9uOiBsZWZ0IDAuMzVzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSksXG4gICAgd2lkdGggMC4zNXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSxcbiAgICBiYWNrZ3JvdW5kIDAuMzVzIGVhc2U7XG4gICAgei1pbmRleDogMDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLyogQ291bGV1cnMgZGUgbCdpbmRpY2F0ZXVyIHBhciB0eXBlICovXG4uaW5kaWNhdGV1ck9uZ2xldC5pbmRpY2F0ZXVyT25nbGV0R3JvdXBlcyxcbi5pbmRpY2F0ZXVyT25nbGV0LmluZGljYXRldXJPbmdsZXRFcXVpcGVzLFxuLmluZGljYXRldXJPbmdsZXQuaW5kaWNhdGV1ck9uZ2xldE51bWVyb3MsXG4uaW5kaWNhdGV1ck9uZ2xldC5pbmRpY2F0ZXVyT25nbGV0Qm9ybmUsXG4uaW5kaWNhdGV1ck9uZ2xldC5pbmRpY2F0ZXVyT25nbGV0UXJDb2RlLFxuLmluZGljYXRldXJPbmdsZXQuaW5kaWNhdGV1ck9uZ2xldFdlYkZvcm0ge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kR3JvdXBlc19hKTtcbn1cblxuLmluZGljYXRldXJPbmdsZXQuaW5kaWNhdGV1ck9uZ2xldERpc3RyaWJ1dGlvbnMge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kRGlzdHJpYnV0aW9uc19hKTtcbn1cblxuLmluZGljYXRldXJPbmdsZXQuaW5kaWNhdGV1ck9uZ2xldEFwcGFyZW5jZSxcbi5pbmRpY2F0ZXVyT25nbGV0LmluZGljYXRldXJPbmdsZXRDb25maWd1cmF0aW9ucyB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRDb25maWdfYSk7XG59XG5cbi5pbmRpY2F0ZXVyT25nbGV0LmluZGljYXRldXJPbmdsZXRBZmZpY2hhZ2VzIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZEFmZmljaGFnZXNfYSk7XG59XG5cbi5pbmRpY2F0ZXVyT25nbGV0LmluZGljYXRldXJPbmdsZXRTY2VuZXMsXG4uaW5kaWNhdGV1ck9uZ2xldC5pbmRpY2F0ZXVyT25nbGV0U2NlbmFyaW8ge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kU2NlbmVzX2EpO1xufVxuXG5bZGF0YS1tb2RlPVwidGVzdGVyXCJdIC5pbmRpY2F0ZXVyT25nbGV0LmluZGljYXRldXJPbmdsZXRQYXJ0aWNpcGFudHMsXG5bZGF0YS1tb2RlPVwidGVzdGVyXCJdIC5pbmRpY2F0ZXVyT25nbGV0LmluZGljYXRldXJPbmdsZXRFcXVpcGVzLFxuW2RhdGEtbW9kZT1cInRlc3RlclwiXSAuaW5kaWNhdGV1ck9uZ2xldC5pbmRpY2F0ZXVyT25nbGV0RGlmZnVzaW9uLFxuW2RhdGEtbW9kZT1cInRlc3RlclwiXSAuaW5kaWNhdGV1ck9uZ2xldC5pbmRpY2F0ZXVyT25nbGV0UHJvZ3Jlc3Npb24sXG5bZGF0YS1tb2RlPVwidGVzdGVyXCJdIC5pbmRpY2F0ZXVyT25nbGV0LmluZGljYXRldXJPbmdsZXRRckNvZGUge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNUZXN0Myk7XG59XG5cbi5pbmRpY2F0ZXVyT25nbGV0LmluZGljYXRldXJPbmdsZXRSZWdpZSxcbi5pbmRpY2F0ZXVyT25nbGV0LmluZGljYXRldXJPbmdsZXRSZWNhcGl0dWxhdGlmLFxuW2RhdGEtbW9kZT1cImRpZmZ1c2VyXCJdIC5pbmRpY2F0ZXVyT25nbGV0LmluZGljYXRldXJPbmdsZXREaWZmdXNpb24sXG5bZGF0YS1tb2RlPVwiZGlmZnVzZXJcIl0gLmluZGljYXRldXJPbmdsZXQuaW5kaWNhdGV1ck9uZ2xldFByb2dyZXNzaW9uLFxuLmluZGljYXRldXJPbmdsZXQuaW5kaWNhdGV1ck9uZ2xldFJlc3VsdGF0cyxcbi5pbmRpY2F0ZXVyT25nbGV0LmluZGljYXRldXJPbmdsZXRQdWJsaWNhdGlvbixcbltkYXRhLW1vZGU9XCJkaWZmdXNlclwiXSAuaW5kaWNhdGV1ck9uZ2xldC5pbmRpY2F0ZXVyT25nbGV0UGFydGljaXBhbnRzLFxuW2RhdGEtbW9kZT1cImRpZmZ1c2VyXCJdIC5pbmRpY2F0ZXVyT25nbGV0LmluZGljYXRldXJPbmdsZXRFcXVpcGVzIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQ3RhKTtcbn1cblxuLyogTW9kZSBDb25maWd1cmVyIDogdG91cyBsZXMgc291cy1vbmdsZXRzIHBhcnRhZ2VudCBsYSBjb3VsZXVyIENvbmZpZyDigJQgcGFzIGJlc29pbiBkJ2VucmljaGlyIE9OR0xFVFNfQ09MT1JFUy4gKi9cbltkYXRhLW1vZGU9XCJjb25maWdcIl0gLmluZGljYXRldXJPbmdsZXQge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kQ29uZmlnX2EpO1xufVxuXG4vKiBTd2l0Y2ggQ29uZmlndXJlciAvIFRlc3RlciAvIERpZmZ1c2VyICovXG4jZGl2T25nbGV0TW9kZVdyYXBwZXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuI2Rpdk9uZ2xldE1vZGUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tY05vaXIxKTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4jZGl2T25nbGV0TW9kZSAub25nbGV0TW9kZSB7XG4gICAgcGFkZGluZzogOHB4IDE4cHg7XG4gICAgZm9udDogdmFyKC0tZk1lbnUxNCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG5cbiNkaXZPbmdsZXRNb2RlIC5vbmdsZXRNb2RlLmFjdGlmIHtcbiAgICBjb2xvcjogdmFyKC0tY0JsYW5jMSk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0xpbmspO1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuI2Rpdk9uZ2xldE1vZGUgLm9uZ2xldE1vZGU6bnRoLWNoaWxkKDIpLmFjdGlmIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jVGVzdDMpO1xufVxuXG4jZGl2T25nbGV0TW9kZSAub25nbGV0TW9kZS5kZXNhY3RpdmUge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjUpO1xufVxuXG4vKiBPbmdsZXQgU3VwcHJpbWVyIDogcm91Z2UgKGFjdGlvbiBkZXN0cnVjdGl2ZSksIGNvbW1lIGxlIGxpZW4gU3VwcHJpbWVyIGRlIGxhIGxpc3RlICovXG4jZGl2T25nbGV0TW9kZSAub25nbGV0TW9kZVtkYXRhLW1vZGU9XCJzdXBwcmltZXJcIl0uYWN0aWYge1xuICAgIGNvbG9yOiB2YXIoLS1jQmxhbmMxKTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jUm91Z2U2KTtcbn1cblxuLyogUmFwcGVsIGRlIGwnaWPDtG5lIGVuZ3JlbmFnZSBkdSB0aXRyZSBkYW5zIGwnb25nbGV0IENvbmZpZ3VyZXIgKi9cbiNkaXZPbmdsZXRNb2RlIC5vbmdsZXRNb2RlW2RhdGEtbW9kZT1cImNvbmZpZ1wiXSB7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCk7IC8qIGFsaWduw6kgNyAtPiA4cHggKMOpY2hlbGxlIFBPIDIwMjYtMDctMTgpICovXG59XG5cbiNkaXZPbmdsZXRNb2RlIC5vbmdsZXRNb2RlW2RhdGEtbW9kZT1cImNvbmZpZ1wiXSBzdmcge1xuICAgIHdpZHRoOiAxNnB4O1xuICAgIGhlaWdodDogMTZweDtcbn1cblxuLyogQWxlcnRlIHJlZGlyZWN0aW9uICh0ZXN0L2RpZmZ1c2lvbiBlbiBjb3VycykgKi9cbi5hbGVydGVSZWRpcmVjdGlvbiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY1JvdWdlKTtcbiAgICBjb2xvcjogdmFyKC0tY0JsYW5jKTtcbiAgICBmb250OiB2YXIoLS1mQ3RhMTYpO1xuICAgIHBhZGRpbmc6IDEycHggMzBweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIGJveC1zaGFkb3c6IHZhcigtLW9tYnJlUG9ydGVlKTtcbiAgICB6LWluZGV4OiAxMDtcbiAgICBhbmltYXRpb246IGFsZXJ0ZUFwcGFyaXRpb24gMC4zcyBlYXNlO1xufVxuXG5Aa2V5ZnJhbWVzIGFsZXJ0ZUFwcGFyaXRpb24ge1xuICAgIGZyb20ge1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwcHgpO1xuICAgIH1cbiAgICB0byB7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbiAgICB9XG59XG5cbi8qIEJvdXRvbnMgKi9cbi5vbmdsZXQge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAxO1xuICAgIHBhZGRpbmc6IDEwcHggMjBweDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgZm9udDogdmFyKC0tZk1lbnUxNCk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjIpO1xuICAgIHVzZXItc2VsZWN0OiBub25lO1xufVxuXG4vKiDDiXRvaWxlIGRlIHJhcHBlbCDCqyDDoCBjb25maWd1cmVyIMK7IChjbGFzc2UgZMOpZmluaWUgZGFucyBfZ3JpbGxlLmNzcykgOiBob3JzIGZsdXggY29tbWUgc3VyXG4gICBsYSBicmlxdWUsIHNpbm9uIHNlcyAyMHB4IGdyYW5kaXJhaWVudCBsYSBsaWduZSBkZSBsJ29uZ2xldCwgcXVpIGVzdCBlbiAxNHB4IOKAlCBldCBzZXVsc1xuICAgbGVzIG9uZ2xldHMgw6l0b2lsw6lzIGRldmllbmRyYWllbnQgcGx1cyBoYXV0cyBxdWUgbGV1cnMgdm9pc2lucy4gRWxsZSBzZSBwb3NlIGRhbnMgbGVcbiAgIHBhZGRpbmcgZHJvaXQgZGUgbCdvbmdsZXQsIGphbWFpcyBwYXItZGVzc3VzIGxlIGxpYmVsbMOpLiAqL1xuLm9uZ2xldCAucGFzdGlsbGVQcm92aXNvaXJlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiA2cHg7XG59XG5cbi5vbmdsZXQuYWN0aWYgLnBhc3RpbGxlUHJvdmlzb2lyZSB7XG4gICAgY29sb3I6IHZhcigtLWNCbGFuYzEpO1xuICAgIG9wYWNpdHk6IC41O1xufVxuXG4ub25nbGV0OmhvdmVyOm5vdCguYWN0aWYpIHtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLm9uZ2xldC5hY3RpZiB7XG4gICAgY29sb3I6IHZhcigtLWNCbGFuYzEpO1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbn1cblxuLyogTWFzcXVlciBsZXMgdG9nZ2xlcyBzZWN0aW9uIG5vbiBwZXJ0aW5lbnRzICovXG4uZGl2T25nbGV0TWVudS5tYXNxdWUge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIE1hc3F1ZXIgbGVzIGJvdXRvbnMgaW5kaXZpZHVlbHMgbm9uIHBlcnRpbmVudHMgKi9cbi5vbmdsZXQubWFzcXVlIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBSZXNwb25zaXZlICovXG5AbWVkaWEgKG1heC13aWR0aDogOTk5cHgpIHtcbiAgICAjZGl2T25nbGV0U2VjdGlvbnMge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSB7XG4gICAgLm9uZ2xldCB7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIH1cbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBNRU5VIEFKT1VURVIgKENob2l4IGQnw6lsw6ltZW50IMOgIGNyw6llcilcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5tZW51QWpvdXRlciBoMyB7XG4gICAgbWFyZ2luOiAwIDAgMjBweCAwO1xuICAgIGZvbnQ6IHZhcigtLWZIMyk7XG59XG5cbi5saWduZVNlY3Rpb25zIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBnYXA6IDAgMTgycHg7IC8qIFZlcnRpY2FsOiAwIChnw6lyw6kgcGFyIG1hcmdpbi1ib3R0b20pIHwgSG9yaXpvbnRhbDogbGFyZ2V1ciBkJ3VuZSBicmlxdWUgKi9cbn1cblxuLmxpZ25lU2VjdGlvbnMgLnNlY3Rpb25Bam91dGVyIHtcbiAgICBmbGV4OiAwIDAgYXV0bzsgLyogTmUgcGFzIMOpdGlyZXIsIGdhcmRlciBsYSB0YWlsbGUgbmF0dXJlbGxlICovXG59XG5cbi5zZWN0aW9uQWpvdXRlciB7XG4gICAgbWFyZ2luLWJvdHRvbTogMjVweDtcbn1cblxuLyogTWFzcXVhZ2UgaW5pdGlhbCBwb3VyIMOpdml0ZXIgbGUgZmxhc2ggKGRlc2t0b3AgdW5pcXVlbWVudCkgKi9cbkBtZWRpYSAobWluLXdpZHRoOiAxMDAwcHgpIHtcbiAgICAuc2VjdGlvbkFqb3V0ZXJbZGF0YS1zZWN0aW9uXSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuXG4gICAgLnNlY3Rpb25Bam91dGVyW2RhdGEtc2VjdGlvbl0udmlzaWJsZSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbn1cblxuLnNlY3Rpb25Bam91dGVyIGg0IHtcbiAgICBtYXJnaW46IDAgMCAxMHB4IDA7XG4gICAgZm9udDogdmFyKC0tZk1lbnUxNCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBsZXR0ZXItc3BhY2luZzogMC41cHg7XG59XG5cbi5zZWN0aW9uQWpvdXRlciBoNDo6YmVmb3JlIHtcbiAgICBjb250ZW50OiBcIisgXCI7XG59XG5cbi5icmlxdWVzQWpvdXRlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgZ2FwOiB2YXIoLS1nYXBNb3llbik7IC8qIGFsaWduw6kgMTAgLT4gMTJweCAow6ljaGVsbGUgUE8gMjAyNi0wNy0xOCkgKi9cbn1cblxuLmJyaXF1ZUdyb3VwZXM6OmJlZm9yZSB7XG4gICAgY29sb3I6IHZhcigtLWNGb25kR3JvdXBlczIpO1xufVxuXG4uYnJpcXVlRGlzdHJpYnV0aW9uczo6YmVmb3JlIHtcbiAgICBjb2xvcjogdmFyKC0tY0ZvbmREaXN0cmlidXRpb25zMik7XG59XG5cbi5icmlxdWVDb25maWd1cmF0aW9uczo6YmVmb3JlIHtcbiAgICBjb2xvcjogdmFyKC0tY0ZvbmRDb25maWcyKTtcbn1cblxuLmJyaXF1ZUFmZmljaGFnZXM6OmJlZm9yZSB7XG4gICAgY29sb3I6IHZhcigtLWNGb25kQWZmaWNoYWdlczIpO1xufVxuXG4uYnJpcXVlU2NlbmVzOjpiZWZvcmUge1xuICAgIGNvbG9yOiB2YXIoLS1jRm9uZFNjZW5lczIpO1xufVxuXG4uYnJpcXVlLmJyaXF1ZURpc3RyaWJ1dGlvbnMsXG4uYnJpcXVlLmJyaXF1ZUdyb3VwZXMge1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbn1cblxuLyogRmlsdHJlIHBhciB0YWdzIGV0IGVudHLDqWVzIGRhbnMgbGEgc2VjdGlvbiBTY2VuZXMgOlxuICAgbGUgZGVzaWduIGR1IHBhbm5lYXUgdmllbnQgZHUgY29tcG9zYW50IGNvbW11biAoNTVfZmlsdHJlcy5jc3MpLiAqL1xuXG4uZGl2RmlsdHJlWm9uZSAuYnJpcXVlc0Fqb3V0ZXIge1xuICAgIGZsZXg6IDE7XG4gICAgbWluLXdpZHRoOiAwO1xufVxuXG4uYnJpcXVlU2NlbmVzLm1hc3F1ZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLmJyaXF1ZUdyb3VwZXMge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kR3JvdXBlcyk7XG59XG5cbi5icmlxdWVEaXN0cmlidXRpb25zIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZERpc3RyaWJ1dGlvbnMpO1xufVxuXG4uYnJpcXVlQ29uZmlndXJhdGlvbnMge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kQ29uZmlnKTtcbn1cblxuLmJyaXF1ZUFmZmljaGFnZXMge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kQWZmaWNoYWdlcyk7XG59XG5cbi5icmlxdWVTY2VuZXMge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kU2NlbmVzKTtcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBCUklRVUVTIERVIFNDw4lOQVJJTyBQQVIgVFlQRVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyogQnJpcXVlIEJyb3VpbGxvbiAoZW4gY291cnMgZGUgY3LDqWF0aW9uKSAqL1xuLmJyaXF1ZUJyb3VpbGxvbiB7XG4gICAgb3BhY2l0eTogMC43O1xuICAgIGJvcmRlci1zdHlsZTogZGFzaGVkO1xufVxuXG4vKiBDb3VsZXVycyBkZXMgYnJpcXVlcyBkdSBzY8OpbmFyaW8gcGFyIHR5cGUgKi9cbi5icmlxdWUuYnJpcXVlR3JvdXBlcyB7IGJhY2tncm91bmQ6IHZhcigtLWNGb25kR3JvdXBlcyk7IH1cbi5icmlxdWUuYnJpcXVlRGlzdHJpYnV0aW9ucyB7IGJhY2tncm91bmQ6IHZhcigtLWNGb25kRGlzdHJpYnV0aW9ucyk7IH1cbi5icmlxdWUuYnJpcXVlQ29uZmlndXJhdGlvbnMgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZENvbmZpZyk7IH1cbi5icmlxdWUuYnJpcXVlQWZmaWNoYWdlcyB7IGJhY2tncm91bmQ6IHZhcigtLWNGb25kQWZmaWNoYWdlcyk7IH1cbi5icmlxdWUuYnJpcXVlU2NlbmVzIHsgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRTY2VuZXMpOyB9XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgRFJBRyAmIERST1BcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5oYW5kbGVEcmFnIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiA2cHg7XG4gICAgcmlnaHQ6IDZweDtcbiAgICB3aWR0aDogMThweDtcbiAgICBoZWlnaHQ6IDEycHg7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgb3BhY2l0eTogMC40O1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycztcbn1cblxuLmhhbmRsZURyYWc6aG92ZXIge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgY3Vyc29yOiBncmFiO1xufVxuXG4uaGFuZGxlRHJhZzphY3RpdmUge1xuICAgIGN1cnNvcjogZ3JhYmJpbmc7XG59XG5cbi8qIEdyaWxsZSBzdGF0aXF1ZSAocGFnZSDCqyBWb2lyIGxhIGNvbmZpZyDCuyBkZXMgZMOpbW9zKSA6IGxhIHBvaWduw6llIHJlc3RlIHVuIHJlcMOocmUgdmlzdWVsLCBzYW5zIGFmZm9yZGFuY2UgZGUgZHJhZyAqL1xuLnNjZW5hcmlvR3JpbGxlU3RhdGlxdWUgLmhhbmRsZURyYWc6aG92ZXIge1xuICAgIG9wYWNpdHk6IDAuNDtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG59XG5cbi8qIMOJdGF0IHBlbmRhbnQgbGUgZHJhZyAqL1xuLmJyaXF1ZURyYWdnYWJsZS5kcmFnZ2luZyB7XG4gICAgb3BhY2l0eTogMC41O1xuICAgIGJvcmRlci1zdHlsZTogZGFzaGVkO1xuICAgIGN1cnNvcjogZ3JhYmJpbmc7XG59XG5cbi8qIFpvbmUgZGUgZHJvcCAqL1xuI3NjZW5hcmlvR3JpbGxlLmZvcm11bGFpcmVBY3RpZjpob3ZlciAuYnJpcXVlLmRyYWdPdmVyLFxuLmJyaXF1ZS5kcmFnT3ZlciB7XG4gICAgYm94LXNoYWRvdzogLTRweCAtNHB4IDAgdmFyKC0tY0N0YSk7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoNHB4LCA0cHgpIHNjYWxlKDEpO1xuICAgIHRyYW5zaXRpb246IC41cyBlYXNlO1xufVxuXG4vKiBTY2VuZSBGTElQIGF1IGRyb3AgKi9cbi5icmlxdWUuYW5pbWVEcm9wIHtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXMgZWFzZTtcbn1cblxuLyogRmFudMO0bWUgcGVuZGFudCBsZSBkcmFnICovXG4uZHJhZ0ZhbnRvbWUge1xuICAgIG9wYWNpdHk6IDAuOTtcbiAgICBib3gtc2hhZG93OiB2YXIoLS1vbWJyZVBvcnRlZSk7XG4gICAgY3Vyc29yOiBncmFiYmluZztcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBCT1VUT05TIEJSSVFVRSBBTklNQVRJT04gKGluZm8gKyBkw6ltbylcbiAgIEdyb3Vww6lzIGVuIGhhdXQgw6AgZHJvaXRlLCBjw7R0ZSDDoCBjw7R0ZVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmJvdXRvbnNCcmlxdWVTY2VuZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogM3B4O1xuICAgIHJpZ2h0OiAzcHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBnYXA6IDJweDtcbiAgICB6LWluZGV4OiAyO1xufVxuXG4uYm91dG9uc0JyaXF1ZVNjZW5lIGJ1dHRvbiB7XG4gICAgd2lkdGg6IDIycHg7XG4gICAgaGVpZ2h0OiAyMnB4O1xuICAgIHBhZGRpbmc6IDNweDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHZhcigtLWNPbWJyZSk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIG9wYWNpdHk6IDAuNztcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzLCBiYWNrZ3JvdW5kIDAuMTVzO1xufVxuXG4uYm91dG9uc0JyaXF1ZVNjZW5lIGJ1dHRvbjpob3ZlciB7XG4gICAgb3BhY2l0eTogMTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDRweCB2YXIoLS1jT21icmVGb3J0ZSk7XG59XG5cbi5ib3V0b25zQnJpcXVlU2NlbmUgYnV0dG9uIHN2ZyB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjIpO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgTU9EQUxFIC0gU1RZTEVTIEfDiU7DiVJJUVVFU1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLm1vZGFsZSB7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIG1heC13aWR0aDogNTAwcHg7XG4gICAgd2lkdGg6IDkwdnc7XG4gICAgbWF4LWhlaWdodDogODB2aDtcbiAgICBib3gtc2hhZG93OiB2YXIoLS1vbWJyZU1vZGFsZSk7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG59XG5cbi5tb2RhbGU6OmJhY2tkcm9wIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jT3ZlcmxheSk7XG59XG5cbi5tb2RhbGVDb250ZW51IHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBtYXgtaGVpZ2h0OiA4MHZoO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgTU9EQUxFIC0gVkFSSUFOVEVTIFBBUiBDT05URVhURVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyogU2NlbmVzIDogaGVhZGVyIGphdW5lLCBwbHVzIGxhcmdlICovXG4ubW9kYWxlU2NlbmVzIHtcbiAgICBtYXgtd2lkdGg6IDYwMHB4O1xufVxuXG4ubW9kYWxlU2NlbmVzIC5tb2RhbGVIZWFkZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kU2NlbmVzKTtcbn1cblxuLyogUGFydGljaXBhbnRzIDogaGVhZGVyIGN5YW4gKi9cbi5tb2RhbGVQYXJ0aWNpcGFudHMgLm1vZGFsZUhlYWRlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRHcm91cGVzKTtcbn1cblxuLyogTW9kZSB0ZXN0IDogaGVhZGVyIGxhdmFuZGUgKi9cbi5tb2RhbGVIZWFkZXJUZXN0IHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jVGVzdCkgIWltcG9ydGFudDtcbn1cblxuLyogUsOpY2FwIGVycmV1ciA6IGhlYWRlciByb3VnZSwgcGx1cyBsYXJnZSBwb3VyIGxlIHN0ZXBwZXIgKi9cbi5tb2RhbGVSZWNhcCB7XG4gICAgbWF4LXdpZHRoOiA2MDBweDtcbn1cblxuLm1vZGFsZVJlY2FwIC5tb2RhbGVIZWFkZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgcGFkZGluZy1sZWZ0OiAyMHB4O1xufVxuXG4ubW9kYWxlSGVhZGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBNb3llbik7XG4gICAgcGFkZGluZzogNXB4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kU2NlbmVzKTtcbiAgICBib3JkZXItYm90dG9tOiB2YXIoLS1ib3JkZXIpO1xuICAgIGZsZXgtc2hyaW5rOiAwO1xufVxuXG4ubW9kYWxlSGVhZGVyIGgzIHtcbiAgICBmbGV4OiAxO1xuICAgIG1hcmdpbjogMDtcbiAgICBmb250OiB2YXIoLS1mSDMpO1xufVxuXG4ubW9kYWxlSWNvbmUge1xuICAgIHdpZHRoOiA0MHB4O1xuICAgIGhlaWdodDogNDBweDtcbiAgICBvYmplY3QtZml0OiBjb250YWluO1xufVxuXG4vKiBCb3V0b24gZGUgZmVybWV0dXJlLiBMYSBjcm9peCBlc3QgZGVzc2luw6llIHBhciA6OmJlZm9yZSAobWFzayBTVkcgY2ktZGVzc291cykuXG4gICDihpIgRW4gSFRNTCwgbGUgYm91dG9uIC5tb2RhbGVDbG9zZSBkb2l0IHJlc3RlciBWSURFIDogbmUgSkFNQUlTIHkgbWV0dHJlIMOXIC8gJnRpbWVzOyAvIHRleHRlLiAqL1xuLm1vZGFsZUNsb3NlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgd2lkdGg6IDQ0cHg7XG4gICAgaGVpZ2h0OiA0NHB4O1xuICAgIHBhZGRpbmc6IDA7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzO1xufVxuXG4ubW9kYWxlQ2xvc2U6OmJlZm9yZSB7XG4gICAgY29udGVudDogJyc7XG4gICAgd2lkdGg6IDI0cHg7XG4gICAgaGVpZ2h0OiAyNHB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNOb2lyMSk7XG4gICAgbWFzazogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ2xpbmUgeDE9JzE4JyB5MT0nNicgeDI9JzYnIHkyPScxOCcvJTNFJTNDbGluZSB4MT0nNicgeTE9JzYnIHgyPScxOCcgeTI9JzE4Jy8lM0UlM0Mvc3ZnJTNFXCIpIGNlbnRlciAvIGNvbnRhaW4gbm8tcmVwZWF0O1xuICAgIC13ZWJraXQtbWFzazogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ2xpbmUgeDE9JzE4JyB5MT0nNicgeDI9JzYnIHkyPScxOCcvJTNFJTNDbGluZSB4MT0nNicgeTE9JzYnIHgyPScxOCcgeTI9JzE4Jy8lM0UlM0Mvc3ZnJTNFXCIpIGNlbnRlciAvIGNvbnRhaW4gbm8tcmVwZWF0O1xufVxuXG4ubW9kYWxlQ2xvc2U6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAyKTtcbn1cblxuLm1vZGFsZUNvcnBzIHtcbiAgICBwYWRkaW5nOiB2YXIoLS1wYWRkaW5nQ29ycHMpO1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG4gICAgLyogU2Nyb2xsIGF1dG8gcXVhbmQgbGEgbW9kYWxlIGTDqXBhc3NlIDgwdmggOiBzYW5zIG1pbi1oZWlnaHQ6MCBsZSBjb3JwcyBuZSBzaHJpbmsgcGFzXG4gICAgICAgc291cyBzb24gY29udGVudSBldCBsZSBiYXMgc2VyYWl0IGNsaXBww6kuIExlIGhlYWRlciAoZmxleC1zaHJpbms6MCkgcmVzdGUgdmlzaWJsZS4gKi9cbiAgICBtaW4taGVpZ2h0OiAwO1xufVxuXG4vKiBCYXJyZSBkZSBzY3JvbGwgVklTSUJMRSAobm9uLW92ZXJsYXkpIDogbCd1dGlsaXNhdGV1ciBkb2l0IHZvaXIgcXUnaWwgcGV1dCBzY3JvbGxlciwgc2lub24gaWxcbiAgIG5lIGNvbXByZW5kIHBhcyBxdSdpbCBtYW5xdWUgZHUgY29udGVudS4gTcOqbWUgcGF0dGVybiBxdWUgbGEgcG9wLXVwIGRlIHNhaXNpZSAoc2Fpc2llLmNzcykuXG4gICBQYXMgZGUgc2Nyb2xsYmFyLWNvbG9yIDogc3VyIENocm9tZSDiiaUxMjEgaWwgZMOpc2FjdGl2ZXJhaXQgY2VzIHLDqGdsZXMgZXQgcmVtZXR0cmFpdCBsYSBiYXJyZVxuICAgb3ZlcmxheSBhdXRvLW1hc3F1w6llLiAqL1xuLm1vZGFsZUNvcnBzOjotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgd2lkdGg6IDEycHg7XG59XG5cbi5tb2RhbGVDb3Jwczo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzIpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbn1cblxuLm1vZGFsZUNvcnBzOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY05vaXI0KTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG59XG5cbi5tb2RhbGVDb3JwcyBoMSxcbi5tb2RhbGVDb3JwcyBoMixcbi5tb2RhbGVDb3JwcyBoMyB7XG4gICAgbWFyZ2luLXRvcDogMWVtO1xuICAgIG1hcmdpbi1ib3R0b206IDAuNWVtO1xufVxuXG4ubW9kYWxlQ29ycHMgaDE6Zmlyc3QtY2hpbGQsXG4ubW9kYWxlQ29ycHMgaDI6Zmlyc3QtY2hpbGQsXG4ubW9kYWxlQ29ycHMgaDM6Zmlyc3QtY2hpbGQge1xuICAgIG1hcmdpbi10b3A6IDA7XG59XG5cbi5tb2RhbGVDb3JwcyBwIHtcbiAgICBtYXJnaW46IDAuNWVtIDA7XG59XG5cbi5tb2RhbGVFcnJldXIge1xuICAgIHBhZGRpbmc6IDQwcHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4ubW9kYWxlRXJyZXVyIHtcbiAgICBjb2xvcjogdmFyKC0tY1JvdWdlKTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIE1PREFMRSAtIEJBUlJFIEQnT1VUSUxTXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4ubW9kYWxlQmFycmVPdXRpbHNGbGV4IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gICAgcGFkZGluZy1ib3R0b206IDEycHg7XG4gICAgYm9yZGVyLWJvdHRvbTogdmFyKC0tYm9yZGVyKTtcbn1cblxuLm1vZGFsZUNvbXB0ZXVyIHtcbiAgICBmb250OiB2YXIoLS1mQ3RhMTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgTU9EQUxFIC0gQk9VVE9OUyBERSBUUkkgLyBBQ1RJT05TXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4ubW9kYWxlQm91dG9ucyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCk7XG59XG5cbi8qIExlIGJvdXRvbiBkaXNjcmV0IChleC1jdGFNb2RhbGUsIHJlbm9tbcOpIDIwMjYtMDctMTggOiBuw6kgZGFucyBsZXMgbW9kYWxlcywgaWxcbiAgIHZpdCBwYXJ0b3V0IOKAlCBibG9jcyBkJ29uZ2xldCwgZm9ybXVsYWlyZXMsIFRTKS4gTcOqbWUgcGFkZGluZyBxdWUgdG91cyBsZXNcbiAgIGJvdXRvbnMgY29tcGFjdHMgOiAtLXBhZGRpbmdDdGExNCAoZMOpY2lzaW9uIFBPIDIwMjYtMDctMTgsIHVuIC5jdGFEaXNjcmV0IGPDtHRvaWVcbiAgIHVuIC5jdGExNCBkYW5zIGxlcyBiYXJyZXMg4oCUIGRldXggcGFkZGluZ3MgZGlmZsOpcmVudHMsIGMnZXN0IHVsdHJhIHZpc2libGUpLiAqL1xuLyog4pqg77iPIExhIGJhc2UgLmN0YURpc2NyZXQgKGJhc2UgKyBob3ZlciArIGTDqXNhY3RpdsOpIGNpLWRlc3NvdXMpIGVzdCBjb3Bpw6llIGRhbnNcbiAgIHN0dWRpb1ZpdHJpbmUvYXNzZXRzL3ZpdHJpbmUvY3NzL2N0YURpc2NyZXQuY3NzIChib3V0b25zIGRlcyBjYXJ0ZXMgZGUgbGEgcGFnZSBkw6ltbykuXG4gICBTaSB0dSBtb2RpZmllcyBjZXMgcsOoZ2xlcyDihpIgZGVtYW5kZXIgYXUgUE8gcydpbCBmYXV0IGxhIHLDqXBlcmN1dGVyIHN1ciBsYSBjb3BpZSB2aXRyaW5lLlxuICAgTGVzIHZhcmlhbnRlcyAuY3RhRGlzY3JldC5hY3RpZiBjb250ZXh0dWVsbGVzIChtb2RhbGVzKSByZXN0ZW50IHByb3ByZXMgw6AgbGEgcsOpZ2llLiAqL1xuLmN0YURpc2NyZXRQcmltYWlyZSxcbi5jdGFEaXNjcmV0IHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IC8qIHVuIDxhPiBob3JzIGJhcnJlIGZsZXggcmVzdGUgdW4gYm91dG9uIChwYWRkaW5nIHZlcnRpY2FsIHLDqWVsKSDigJQgbcOqbWUgcsOoZ2xlIHF1ZSAuY3RhMTQgKi9cbiAgICBwYWRkaW5nOiB2YXIoLS1wYWRkaW5nQ3RhMTQpO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlckN0YSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgZm9udDogdmFyKC0tZk1lbnUxNCk7XG4gICAgY29sb3I6IHZhcigtLWNDdGFUZXh0ZSk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4ycywgY29sb3IgMC4ycywgYm9yZGVyLWNvbG9yIDAuMnM7XG59XG5cbi5jdGFEaXNjcmV0UHJpbWFpcmUuaG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAyKTtcbn1cbi5jdGFEaXNjcmV0UHJpbWFpcmU6ZGlzYWJsZWQsXG4uY3RhRGlzY3JldDpkaXNhYmxlZCB7XG4gICAgb3BhY2l0eTogMC40O1xuICAgIGN1cnNvcjogYXV0bztcbn1cblxuLmN0YURpc2NyZXRQcmltYWlyZSB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsZXU0YSk7XG4gICAgY29sb3I6IHZhcigtLWNCbGV1NGF0KTtcbn1cblxuLmN0YURpc2NyZXRQcmltYWlyZS5ob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsZXU0YWgpO1xuICAgIGNvbG9yOiB2YXIoLS1jQmxldTRodCk7XG59XG5cbi8qIFZhcmlhbnRlIDxhPiBkw6lzYWN0aXbDqSAodW4gbGllbiBuZSBjb25uYcOudCBwYXMgOmRpc2FibGVkKSAqL1xuLmN0YURpc2NyZXQuZGlzYWJsZWQge1xuICAgIG9wYWNpdHk6IDAuNDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLmN0YURpc2NyZXQ6ZGlzYWJsZWQ6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG59XG5cbi5jdGFEaXNjcmV0LmFjdGlmIHtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLyogQ291bGV1ciBkdSBib3V0b24gYWN0aWYgc2Vsb24gbGUgY29udGV4dGUgKi9cbi5tb2RhbGVQYXJ0aWNpcGFudHMgLmN0YURpc2NyZXQuYWN0aWYge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kR3JvdXBlcyk7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jRm9uZEdyb3VwZXMyKTtcbn1cblxuLm1vZGFsZVNjZW5lcyAuY3RhRGlzY3JldC5hY3RpZiB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRTY2VuZXMpO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY0ZvbmRTY2VuZXMyKTtcbn1cblxuLm1vZGFsZURpc3RyaWJ1dGlvbnMgLmN0YURpc2NyZXQuYWN0aWYge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kRGlzdHJpYnV0aW9ucyk7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jRm9uZERpc3RyaWJ1dGlvbnMyKTtcbn1cblxuLyogTW9kZSB0ZXN0IDogYm91dG9uIGFjdGlmIGxhdmFuZGUgKi9cbi5tb2RhbGVDb3Jwc1Rlc3QgLmN0YURpc2NyZXQuYWN0aWYge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNUZXN0KTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNUZXN0Myk7XG59XG5cbi8qIExhYmVsIFwiRG9ubsOpZXMgZGUgdGVzdFwiIHNvdXMgbGUgY29tcHRldXIgKi9cbi5tb2RhbGVUZXN0TGFiZWwge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZvbnQ6IHZhcigtLWZMaWdodDE0KTtcbiAgICBjb2xvcjogdmFyKC0tY1Rlc3QzKTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIE1PREFMRSAtIFRPR0dMRSBBQ1RJRi9Ew4lTQUNUSVbDiVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLnRvZ2dsZUFjdGlmIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiAzOHB4O1xuICAgIGhlaWdodDogMjJweDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZmxleC1zaHJpbms6IDA7XG59XG5cbi50b2dnbGVBY3RpZiBpbnB1dCB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB3aWR0aDogMDtcbiAgICBoZWlnaHQ6IDA7XG59XG5cbi50b2dnbGVTbGlkZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBpbnNldDogMDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMyk7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJGb3JtKTtcbiAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4ycztcbn1cblxuLnRvZ2dsZVNsaWRlcjo6YmVmb3JlIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgd2lkdGg6IDE2cHg7XG4gICAgaGVpZ2h0OiAxNnB4O1xuICAgIGxlZnQ6IDJweDtcbiAgICBib3R0b206IDJweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycztcbn1cblxuLnRvZ2dsZUFjdGlmIGlucHV0OmNoZWNrZWQgKyAudG9nZ2xlU2xpZGVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQ3RhKTtcbn1cblxuLnRvZ2dsZUFjdGlmIGlucHV0OmNoZWNrZWQgKyAudG9nZ2xlU2xpZGVyVGVzdCB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY1Rlc3QzKTtcbn1cblxuLnRvZ2dsZUFjdGlmIGlucHV0OmNoZWNrZWQgKyAudG9nZ2xlU2xpZGVyUGFydGljaXBhbnRzIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZEdyb3VwZXMzKTtcbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4udG9nZ2xlQWN0aWYgaW5wdXQ6Y2hlY2tlZCArIC50b2dnbGVTbGlkZXJEaXN0cmlidXRpb25zIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZERpc3RyaWJ1dGlvbnMzKTtcbn1cblxuLnRvZ2dsZUFjdGlmIGlucHV0OmNoZWNrZWQgKyAudG9nZ2xlU2xpZGVyQ29uZmlnIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZENvbmZpZzMpO1xufVxuXG4udG9nZ2xlQWN0aWYgaW5wdXQ6Y2hlY2tlZCArIC50b2dnbGVTbGlkZXJTY2VuZXMge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kU2NlbmVzMyk7XG59XG5cbi50b2dnbGVBY3RpZiBpbnB1dDpjaGVja2VkICsgLnRvZ2dsZVNsaWRlckFmZmljaGFnZXMge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kQWZmaWNoYWdlczMpO1xufVxuKi9cblxuLnRvZ2dsZUFjdGlmIGlucHV0OmNoZWNrZWQgKyAudG9nZ2xlU2xpZGVyOjpiZWZvcmUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxNnB4KTtcbn1cblxuLyogTGV0dHJlcyB0cm91dsOpZXMgcGFyIGxhIHJlY2hlcmNoZSAo4omlNCBjYXJhY3TDqHJlcykg4oCUIGNvdWxldXIgcGx1dMO0dCBxdWUgZ3Jhcy4gKi9cbi5yZWNoZXJjaGVNYXRjaCB7XG4gICAgY29sb3I6IHZhcigtLWNDdGEpO1xufVxuXG4vKiDDiXRhdCBiYW5uaSAqL1xuLnBhcnRpY2lwYW50QmFubmkge1xuICAgIG9wYWNpdHk6IDAuNTtcbn1cblxuLnBhcnRpY2lwYW50QmFubmkgLnBhcnRpY2lwYW50Tm9tIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcbiAgICBjb2xvcjogdmFyKC0tY05vaXI0KTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIE1PREFMRSAtIFBSw4lWSVNVQUxJU0FUSU9OIERJU1RSSUJVVElPTlxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLm1vZGFsZURpc3RyaWJ1dGlvbnMgLm1vZGFsZUhlYWRlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmREaXN0cmlidXRpb25zKTtcbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4ubW9kYWxlQXZlcnRpc3NlbWVudCB7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjQpO1xufVxuKi9cblxuLmxpc3RlUHJldmlzdWFsaXNhdGlvbiB7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIG1hcmdpbjogMTJweCAwO1xufVxuXG4ubGlzdGVQcmV2aXN1YWxpc2F0aW9uIC5ibG9jSXRlbSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbiAgICBwYWRkaW5nOiAxMHB4IDA7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICBib3JkZXItYm90dG9tOiB2YXIoLS1ib3JkZXIpO1xufVxuXG4ubGlzdGVQcmV2aXN1YWxpc2F0aW9uIC5ibG9jSXRlbTpsYXN0LWNoaWxkIHtcbiAgICBib3JkZXItYm90dG9tOiBub25lO1xufVxuXG4ucHJldmlzdWFsaXNlck51bWVybyB7XG4gICAgZm9udDogdmFyKC0tZkN0YTE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICBtaW4td2lkdGg6IDI4cHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4ucHJldmlzdWFsaXNlck1pbnV0ZSB7XG4gICAgZm9udDogdmFyKC0tZk1lbnUxNCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyNCk7XG4gICAgbWluLXdpZHRoOiAzNnB4O1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuXG4ucHJldmlzdWFsaXNlclBlcmRhbnQge1xuICAgIGZvbnQ6IHZhcigtLWZMaWdodDE0KTtcbiAgICBjb2xvcjogdmFyKC0tY1JvdWdlKTtcbn1cblxuLnByZXZpc3VhbGlzZXJJbnRlcnZhbGxlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xufVxuXG4ucHJldmlzdWFsaXNlckludGVydmFsbGVMYWJlbCB7XG4gICAgZm9udDogdmFyKC0tZk1lbnUxNCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG59XG5cbi5wcmV2aXN1YWxpc2VyUmFpc29uIHtcbiAgICBmb250OiB2YXIoLS1mTGlnaHQxNCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyNCk7XG4gICAgbWluLXdpZHRoOiAyMHB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4ucHJldmlzdWFsaXNlclBpZWQge1xuICAgIHBhZGRpbmc6IDEycHggMjBweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgYm9yZGVyLXRvcDogdmFyKC0tYm9yZGVyKTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xufVxuKi9cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIE1PREFMRSAtIFZPQ0FCVUxBSVJFIERFIEwnQU5JTUFUSU9OXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBMaWVuIGRpc2NyZXQgc291cyBsZXMgY2hhbXBzIGRlIGwnYW5pbWF0aW9uLCBvdXZyZSBsYSBtb2RhbGUgZGUgdm9jYWJ1bGFpcmUuICovXG4udm9jYWJ1bGFpcmVTY2VuZSB7XG4gICAgbWFyZ2luLXRvcDogMTJweDtcbn1cblxuLnZvY2FidWxhaXJlTGllbiB7XG4gICAgY29sb3I6IHZhcigtLWNMaW5rKTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG59XG5cbi52b2NhYnVsYWlyZUxpZW46aG92ZXIge1xuICAgIGNvbG9yOiB2YXIoLS1jTGlua2gpO1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4udm9jYWJ1bGFpcmVDaGFtcCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMTJweDtcbn1cblxuLyogQm91dG9uIGFsaWduw6kgc3VyIGxlIGJvcmQgZ2F1Y2hlIGRlcyBjaGFtcHMgKHBhcyBkZSByw6ktaW5kZW50YXRpb24sIGNvbnRyYWlyZW1lbnQgw6AgLmZvcm1BY3Rpb25zKS4gKi9cbi52b2NhYnVsYWlyZUFjdGlvbnMge1xuICAgIG1hcmdpbi10b3A6IDEycHg7XG59XG5cbi8qIFPDqXBhcmF0ZXVyIG1lbnUgLyBtb3RzIDogZ2FwIGTDqWxpYsOpcsOpIGV0IMOpcXVpbGlicsOpIChsZSBociBnbG9iYWwgZXN0IMOgIDMwcHgsIHRyb3ApLiBMZSBjaGFtcFxuICAgYXUtZGVzc3VzIGEgZMOpasOgIDEycHggZGUgbWFyZ2UgYmFzc2Ug4oaSIDRweCBlbiBoYXV0ICsgMTZweCBlbiBiYXMgPSAxNnB4IGRlIGNoYXF1ZSBjw7R0w6kuICovXG4ubW9kYWxlVm9jYWJ1bGFpcmUgaHIge1xuICAgIG1hcmdpbjogNHB4IDAgMTZweDtcbn1cblxuLnZvY2FidWxhaXJlQ2hhbXAgbGFiZWwge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICBmb250OiB2YXIoLS1mTGFiZWwpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjIpO1xufVxuXG4vKiBQYXMgZCdpY8O0bmUgaWNpIDogb24gYWxpZ25lIGxlIHRpdHJlIHN1ciBsZSBjb3JwcyAoY29tbWUgLm1vZGFsZVJlY2FwKS4gKi9cbi5tb2RhbGVWb2NhYnVsYWlyZSAubW9kYWxlSGVhZGVyIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBNT0RBTEUgwqsgQU5JTUFUSU9OUyBTSU1JTEFJUkVTIMK7XG4gICBKdW1lbGxlcyBkZSBmYW1pbGxlIGQndW5lIGFuaW1hdGlvbiBkdSBzY8OpbmFyaW9cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5tb2RhbGVTaW1pbGFpcmVzIHtcbiAgICBtYXgtd2lkdGg6IDUyMHB4O1xufVxuXG4vKiBQYXMgZCdpY8O0bmUgaWNpIG5vbiBwbHVzIDogdGl0cmUgYWxpZ27DqSBzdXIgbGUgY29ycHMgKGNvbW1lIC5tb2RhbGVSZWNhcCkuICovXG4ubW9kYWxlU2ltaWxhaXJlcyAubW9kYWxlSGVhZGVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xuICAgIHBhZGRpbmctbGVmdDogMjBweDtcbn1cblxuLm1vZGFsZVNpbWlsYWlyZXMgLm1vZGFsZUNvcnBzIHtcbiAgICBwYWRkaW5nOiAxNnB4IDIwcHg7XG59XG5cbi5zaW1pbGFpcmVzSW50cm8ge1xuICAgIG1hcmdpbjogMCAwIDEycHg7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbi5zaW1pbGFpcmVzTGlzdGUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IHZhcigtLWdhcE1veWVuKTsgLyogYWxpZ27DqSAxMCAtPiAxMnB4ICjDqWNoZWxsZSBQTyAyMDI2LTA3LTE4KSAqL1xufVxuXG4uc2ltaWxhaXJlc0NhcnRlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBNb3llbik7XG4gICAgcGFkZGluZzogMTJweDtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlcik7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjIpO1xufVxuXG4vKiBDYXJ0ZSBkZSBsJ2FuaW1hdGlvbiBlbiBwbGFjZSA6IGZvbmQgZGlzY3JldCwgcGFzIGRlIGJvdXRvbiAoanVzdGUgbGUgbGliZWxsw6kgZCfDqXRhdCkgKi9cbi5zaW1pbGFpcmVzQ2FydGVBY3R1ZWxsZSB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDIpO1xufVxuXG4uc2ltaWxhaXJlc0ljb25lIHtcbiAgICB3aWR0aDogNDRweDtcbiAgICBoZWlnaHQ6IDQ0cHg7XG4gICAgb2JqZWN0LWZpdDogY29udGFpbjtcbiAgICBmbGV4LXNocmluazogMDtcbn1cblxuLnNpbWlsYWlyZXNJbmZvcyB7XG4gICAgZmxleDogMTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpOyAvKiBhbGlnbsOpIDYgLT4gOHB4ICjDqWNoZWxsZSBQTyAyMDI2LTA3LTE4KSAqL1xufVxuXG4uc2ltaWxhaXJlc0luZm9zIGg0IHtcbiAgICBtYXJnaW46IDA7XG59XG5cbi5zaW1pbGFpcmVzQWN0dWVsbGUge1xuICAgIGZvbnQ6IHZhcigtLWZNZW51MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4uc2ltaWxhaXJlc0FjdGlvbnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcExhcmdlKTsgLyogYWxpZ27DqSAxNiAtPiAyMHB4ICjDqWNoZWxsZSBQTyAyMDI2LTA3LTE4KSAqL1xufVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgRm9ybXVsYWlyZSBhY3RpZiA6IGF0dMOpbnVhdGlvbiBkZXMgYnJpcXVlc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBBdHTDqW51YXRpb24gZGVzIGJyaXF1ZXMgbm9uIGFjdGl2ZXMgcXVhbmQgdW4gZm9ybXVsYWlyZSBlc3Qgb3V2ZXJ0ICovXG4jc2NlbmFyaW9HcmlsbGUuZm9ybXVsYWlyZUFjdGlmIC5icmlxdWU6bm90KC5icmlxdWVBY3RpdmUpOm5vdCg6aG92ZXIpLFxuLmJyaXF1ZXNBam91dGVyLmZvcm11bGFpcmVBY3RpZiAuYnJpcXVlOm5vdCguYnJpcXVlQWN0aXZlKTpub3QoOmhvdmVyKSB7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jTm9pcjUpO1xuICAgIG9wYWNpdHk6IC43O1xufVxuXG4vKiBBdHTDqW51YXRpb24gZGVzIGJyaXF1ZXMgcXVhbmQgbGUgbWVudSBkJ2Fqb3V0IGVzdCBvdXZlcnQgKHNhdWYgYnJpcXVlICspICovXG4jc2NlbmFyaW9HcmlsbGUubWVudUFqb3V0ZXJBY3RpZiAuYnJpcXVlOm5vdCguYnJpcXVlQWpvdXRlcikge1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY05vaXI1KTtcbiAgICBvcGFjaXR5OiAuNztcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgU2NlbmUgYXByw6hzIGNvbmZpcm1hdGlvblxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5Aa2V5ZnJhbWVzIGJyaXF1ZVJldG91ciB7XG4gICAgZnJvbSB7XG4gICAgICAgIG9wYWNpdHk6IC43O1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICB9XG4gICAgdG8ge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbn1cblxuI3NjZW5hcmlvR3JpbGxlLmFwcmVzQ29uZmlybWF0aW9uIC5icmlxdWU6bm90KC5icmlxdWVNb2RpZmllZSkge1xuICAgIGFuaW1hdGlvbjogYnJpcXVlUmV0b3VyIDAuNHMgZWFzZSBmb3J3YXJkcztcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBBUEVSw4dVIERFUyBJTUFHRVMgKEZvcm11bGFpcmUgdXBsb2FkKVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmNoYW1wQXZlY1ZpZ25ldHRlIHtcbiAgICBtYXJnaW4tYm90dG9tOiAxNXB4O1xufVxuXG4vKiAudmlnbmV0dGVJbWFnZUV4aXN0YW50ZSB1dGlsaXNlIC5ibG9jRW5jYWRyZSAoZMOpZmluaSBkYW5zIF9mb3JtdWxhaXJlcy5jc3MpICovXG5cbi52aWduZXR0ZUltYWdlRXhpc3RhbnRlIGltZyB7XG4gICAgbWF4LXdpZHRoOiAyMDBweDtcbiAgICBtYXgtaGVpZ2h0OiAxMjBweDtcbiAgICBvYmplY3QtZml0OiBjb250YWluO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbjogMTBweCAwO1xufVxuXG4uY2hhbXBVcGxvYWRDYWNoZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEdBTEVSSUUgUFVCTElRVUUgKG1vZGFsZSBkZSBjaG9peCBkJ2ltYWdlKVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyogUsOoZ2xlIGQnYXV0b3JpdMOpIDogbGVzIMOpdGF0cyBkdSBjaGFtcCBpbWFnZSBzb250IHBpbG90w6lzIHBhciBsJ2F0dHJpYnV0IGhpZGRlblxuICAgKGdhbGVyaWVJbWFnZXMudHMpLiBTYW5zICFpbXBvcnRhbnQsIGxlcyBkaXNwbGF5IHBvc8OpcyBhaWxsZXVycyAoZXguIG5veWF1XG4gICBidXR0b24uY3RhQW5udWxlciB7IGRpc3BsYXk6IGJsb2NrIH0pIGdhZ25lbnQgc3VyIGxlIGhpZGRlbiBkdSBuYXZpZ2F0ZXVyLiAqL1xuLmNoYW1wQXZlY1ZpZ25ldHRlIFtoaWRkZW5dIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG5cbi8qIFPDqXBhcmF0ZXVyIGVudHJlIGxlcyBkZXV4IGZhw6dvbnMgZGUgY2hvaXNpciAodXBsb2FkIMKrIG91IGNoYXJnZXIgZGVwdWlzIDogwrsgZ2FsZXJpZXMpICovXG4uY2hhbXBDaG9peEltYWdlIC5nYWxlcmllT3Uge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIG1hcmdpbjogMnB4IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBmb250OiB2YXIoLS1mTGFiZWwpO1xufVxuLmNoYW1wQ2hvaXhJbWFnZSBsYWJlbCB7XG4gICAgbWFyZ2luLWJvdHRvbTogNHB4O1xufVxuXG4vKiBSYW5nw6llIGRlcyBib3V0b25zIGRlIGdhbGVyaWVzIChwdWJsaXF1ZSAvIMOpdsOpbmVtZW50IC8gdG91dGVzIG1lcyBpbWFnZXMpICovXG4uZ2FsZXJpZUJvdXRvbnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBNb3llbik7XG59XG5cbi5nYWxlcmllR3JpbGxlIHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDEyMHB4LCAxZnIpKTtcbiAgICBnYXA6IHZhcigtLWdhcE1veWVuKTtcbiAgICBwYWRkaW5nOiAyMHB4O1xufVxuXG4uZ2FsZXJpZVZpZ25ldHRlIHtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgcGFkZGluZzogMDtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5nYWxlcmllVmlnbmV0dGUgaW1nIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBhc3BlY3QtcmF0aW86IDE2IC8gOTtcbiAgICBvYmplY3QtZml0OiBjb3ZlcjtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG59XG5cbi5nYWxlcmllVmlnbmV0dGU6aG92ZXIgaW1nIHtcbiAgICBib3gtc2hhZG93OiAwIDFweCA0cHggdmFyKC0tY09tYnJlRm9ydGUpO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgRk9STVVMQUlSRSBMT1RTIERZTkFNSVFVRVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuI2Rpc3RyaWJ1dGlvbnNDb250YWluZXIge1xuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG59XG5cbi8qIC5kaXN0cmlidXRpb25JdGVtIHV0aWxpc2UgLmJsb2NFbmNhZHJlIChkw6lmaW5pIGRhbnMgX2Zvcm11bGFpcmVzLmNzcykgKi9cblxuLyogTGUgYm91dG9uIHN1cHByaW1lciBkZSBsb3QgdXRpbGlzZSAuY3RhU3VwcHJpbWVyIChkw6lmaW5pIGRhbnMgX2Zvcm11bGFpcmVzLmNzcykgKi9cbi5kaXN0cmlidXRpb25JdGVtID4gLmN0YVN1cHByaW1lciB7XG4gICAgbWFyZ2luLXRvcDogMTVweDtcbn1cblxuLmRpc3RyaWJ1dGlvbkl0ZW1Sb3cge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZ2FwOiB2YXIoLS1nYXBMYXJnZSk7XG4gICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cblxuLmRpc3RyaWJ1dGlvbkl0ZW1MYWJlbCB7XG4gICAgZmxleDogMTtcbn1cblxuLmRpc3RyaWJ1dGlvbkl0ZW1TdG9jayB7XG4gICAgd2lkdGg6IDEwMHB4O1xuICAgIGZsZXgtc2hyaW5rOiAwO1xufVxuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbi5kaXN0cmlidXRpb25JdGVtIC5jaGFtcEZvcm11bGFpcmUge1xuICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG59XG4qL1xuXG5AbWVkaWEgKG1heC13aWR0aDogNjUwcHgpIHtcbiAgICAuZGlzdHJpYnV0aW9uSXRlbVJvdyB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pOyAvKiBhbGlnbsOpIDEwIC0+IDEycHggKMOpY2hlbGxlIFBPIDIwMjYtMDctMTgpICovXG4gICAgfVxufVxuXG4jYnRuQWpvdXRlckRpc3RyaWJ1dGlvbiwgI2J0bkFqb3V0ZXJFcXVpcGUge1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgcGFkZGluZzogMDtcbiAgICBtYXJnaW46IDAgMjBweCAyMHB4IDIwcHg7XG59XG5cbiNidG5Bam91dGVyRGlzdHJpYnV0aW9uIHtcbiAgICBjb2xvcjogdmFyKC0tY0ZvbmREaXN0cmlidXRpb25zNCk7XG59XG5cbi8qIFNvdXJjZSDDiXF1aXBlcyA6IGNvdWxldXIgZGUgbGEgc2VjdGlvbiBQYXJ0aWNpcGFudHMgKi9cbiNidG5Bam91dGVyRXF1aXBlIHtcbiAgICBjb2xvcjogdmFyKC0tY0ZvbmRHcm91cGVzNCk7XG59XG5cbiNidG5Bam91dGVyRGlzdHJpYnV0aW9uOmhvdmVyLCAjYnRuQWpvdXRlckVxdWlwZTpob3ZlciB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQkxPQ1MgUsOJU0VBVVggU09DSUFVWCAtIFN0eWxlcyBjb21tdW5zXG4gICBGYWNlYm9vaywgSW5zdGFncmFtLCBMaW5rZWRJblxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyogQmxvYyBjb25uZXhpb24gKHdyYXBwZXIpICovXG4uYmxvY0Nvbm5leGlvbiB7XG4gICAgbWFyZ2luOiAxMHB4IDAgMjBweDtcbn1cblxuLyogQm91dG9uIGRlIGNvbm5leGlvbiAtIGNsYXNzZSBjb21tdW5lICovXG4uYnRuQ29ubmV4aW9uIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbiAgICBwYWRkaW5nOiAxMHB4IDIwcHg7XG4gICAgY29sb3I6IHZhcigtLWNCbGFuYyk7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBmb250OiB2YXIoLS1mQ3RhMTYpO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmJ0bkNvbm5leGlvbjpkaXNhYmxlZCB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDMpO1xufVxuXG4vKiBWYXJpYW50ZXMgcGFyIHLDqXNlYXUgKi9cbi5idG5Db25uZXhpb24uZmFjZWJvb2sge1xuICAgIGJhY2tncm91bmQ6ICMxODc3RjI7IC8qIENvdWxldXIgb2ZmaWNpZWxsZSBkZSBsYSBtYXJxdWUgRmFjZWJvb2sgKi9cbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnM7XG59XG5cbi5idG5Db25uZXhpb24uZmFjZWJvb2s6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6ICMxNjZGRTU7IC8qIENvdWxldXIgb2ZmaWNpZWxsZSBkZSBsYSBtYXJxdWUgRmFjZWJvb2sgKGhvdmVyKSAqL1xufVxuXG4uYnRuQ29ubmV4aW9uLmluc3RhZ3JhbSB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCAjRkNBRjQ1LCAjRTEzMDZDLCAjODMzQUI0KTsgLyogR3JhZGllbnQgb2ZmaWNpZWwgZGUgbGEgbWFycXVlIEluc3RhZ3JhbSAqL1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycztcbn1cblxuLmJ0bkNvbm5leGlvbi5pbnN0YWdyYW06aG92ZXIge1xuICAgIG9wYWNpdHk6IDAuOTtcbn1cblxuLmJ0bkNvbm5leGlvbi5saW5rZWRpbiB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzAwNzdCNSwgIzBBNjZDMik7IC8qIEdyYWRpZW50IG9mZmljaWVsIGRlIGxhIG1hcnF1ZSBMaW5rZWRJbiAqL1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycztcbn1cblxuLmJ0bkNvbm5leGlvbi5saW5rZWRpbjpob3ZlciB7XG4gICAgb3BhY2l0eTogMC45O1xufVxuXG4vKiBJY8O0bmUgZGFucyBsZSBib3V0b24gKi9cbi5pY29uZVJlc2VhdSB7XG4gICAgd2lkdGg6IDIwcHg7XG4gICAgaGVpZ2h0OiAyMHB4O1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgw4l0YXQgY29ubmVjdMOpICh1dGlsaXPDqSBwYXIgdG91cyBsZXMgcsOpc2VhdXgpXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4uY29ubmV4aW9uQWN0aXZlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBNb3llbik7IC8qIGFsaWduw6kgMTAgLT4gMTJweCAow6ljaGVsbGUgUE8gMjAyNi0wNy0xOCkgKi9cbiAgICBwYWRkaW5nOiAxMHB4IDE1cHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY1N1Y2Nlc0ZvbmQpO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNTdWNjZXMpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbn1cblxuLmljb25lQ29ubmVjdGU6OmJlZm9yZSB7XG4gICAgY29udGVudDogJ+Kckyc7XG4gICAgY29sb3I6IHZhcigtLWNTdWNjZXMpO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4ucGFnZUNvbm5lY3RlZSB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG59XG5cbi5idG5EZWNvbm5lY3RlciB7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgcGFkZGluZzogNXB4IDEwcHg7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDYXJ0ZSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjIpO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmJ0bkRlY29ubmVjdGVyOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jTm9pcjUpO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQWxlcnRlcyBldCBtZXNzYWdlc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmFsZXJ0ZVRva2VuRXhwaXJlIHtcbiAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgIHBhZGRpbmc6IDEwcHggMTVweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jUm91Z2U2KTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jUm91Z2UpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLmFsZXJ0ZVRva2VuRXhwaXJlIGEge1xuICAgIGNvbG9yOiB2YXIoLS1jUm91Z2UpO1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4ubWVzc2FnZUluZm8ge1xuICAgIHBhZGRpbmc6IDEwcHggMTVweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jTm9pcjUpO1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyQ2FydGUpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIyKTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEJsb2MgcHVibGljYXRpb24vbWVkaWEgKHPDqWxlY3Rpb24gZGUgY29udGVudSlcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5ibG9jUHVibGljYXRpb24sXG4uYmxvY01lZGlhIHtcbiAgICBtYXJnaW46IDIwcHggMDtcbn1cblxuLmJsb2NQdWJsaWNhdGlvbiBsYWJlbCxcbi5ibG9jTWVkaWEgbGFiZWwge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi1ib3R0b206IDVweDtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLnNlbGVjdFB1YmxpY2F0aW9uLFxuLnNlbGVjdE1lZGlhIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXgtd2lkdGg6IDQwMHB4O1xuICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDYXJ0ZSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG59XG5cbi5zZWxlY3RQdWJsaWNhdGlvbjpkaXNhYmxlZCxcbi5zZWxlY3RNZWRpYTpkaXNhYmxlZCB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY05vaXI1KTtcbn1cblxuLmJ0blJlZnJlc2hQdWJsaWNhdGlvbnMsXG4uYnRuUmVmcmVzaE1lZGlhcyB7XG4gICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gICAgcGFkZGluZzogMTBweCAxMnB4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDYXJ0ZSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLmJ0blJlZnJlc2hQdWJsaWNhdGlvbnM6aG92ZXIsXG4uYnRuUmVmcmVzaE1lZGlhczpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY05vaXI1KTtcbn1cblxuLnB1YmxpY2F0aW9uU2VsZWN0aW9ubmVlLFxuLm1lZGlhU2VsZWN0aW9ubmUge1xuICAgIG1hcmdpbi10b3A6IDVweDtcbiAgICBmb250OiB2YXIoLS1mTGlnaHQxNCk7XG4gICAgY29sb3I6IHZhcigtLWNTdWNjZXMpO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQmxvYyBhY3R1YWxpc2F0aW9uXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4uaW5mb0FjdHVhbGlzYXRpb24ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cblxuLmxhYmVsQWN0dWFsaXNhdGlvbiB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG59XG5cbi50ZW1wc1JlbGF0aWYge1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG59XG5cbi5ub21icmVQYXJ0aWNpcGFudHMge1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG59XG5cbi5idG5BY3R1YWxpc2VyIHtcbiAgICBwYWRkaW5nOiAxMHB4IDIwcHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRHcm91cGVzX2EpO1xuICAgIGNvbG9yOiB2YXIoLS1jQmxhbmMpO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgZm9udDogdmFyKC0tZkN0YTE2KTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzO1xufVxuXG4uYnRuQWN0dWFsaXNlcjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRHcm91cGVzX2FoKTtcbn1cblxuLmJ0bkFjdHVhbGlzZXI6ZGlzYWJsZWQge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAzKTtcbn1cblxuLmVycmV1clRva2VuIHtcbiAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgIGZvbnQ6IHZhcigtLWZMaWdodDE0KTtcbiAgICBjb2xvcjogdmFyKC0tY1JvdWdlKTtcbn1cblxuLmJsb2NBY3R1YWxpc2F0aW9uIC5tZXNzYWdlQWlkZSB7XG4gICAgbWFyZ2luLXRvcDogMTBweDtcbiAgICBmb250OiB2YXIoLS1mTGlnaHQxNCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgT05HTEVUIFBBUlRJQ0lQQU5UUyAtIFN0eWxlcyBzcMOpY2lmaXF1ZXNcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgIExlcyBzdHlsZXMgY29tbXVucyBkZXMgYmxvY3Mgc29udCBkYW5zIDUzX2Jsb2NzLmNzc1xuICAgQ2UgZmljaGllciBjb250aWVudCB1bmlxdWVtZW50IGxlcyDDqWzDqW1lbnRzIHNww6ljaWZpcXVlc1xuICAgw6AgbCdvbmdsZXQgcGFydGljaXBhbnRzLlxuXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBDb250ZW5ldXIgZGVzIGJsb2NzIChjb21tdW4gcGFydGljaXBhbnRzIGV0IGxvdHMpICovXG4uZ3JvdXBlc0xpc3RlLFxuLmRpc3RyaWJ1dGlvbnNMaXN0ZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogdmFyKC0tZ2FwTGlzdGUpO1xufVxuXG4vKiBNZXNzYWdlIHNpIHZpZGUgKGNvbW11biBwYXJ0aWNpcGFudHMgZXQgbG90cykgKi9cbi5ncm91cGVzVmlkZSxcbi5kaXN0cmlidXRpb25zVmlkZSB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgcGFkZGluZzogNDBweCAyMHB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMik7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjIpO1xufVxuXG4vKiBMaXN0ZSBkZXMgcGFydGljaXBhbnRzIGRhbnMgbGEgbW9kYWxlICovXG4ubGlzdGVQYXJ0aWNpcGFudHMge1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG59XG5cbi5saXN0ZVBhcnRpY2lwYW50cyBsaSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcE1veWVuKTtcbiAgICBwYWRkaW5nOiAxMHB4IDA7XG4gICAgYm9yZGVyLWJvdHRvbTogdmFyKC0tYm9yZGVyKTtcbn1cblxuLmxpc3RlUGFydGljaXBhbnRzIGxpOmxhc3QtY2hpbGQge1xuICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG59XG5cbi5wYXJ0aWNpcGFudE5vbSB7XG4gICAgZmxleDogMTtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLnBhcnRpY2lwYW50Q2hhbmNlcyB7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4ubW9kYWxlVmlkZSB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHBhZGRpbmc6IHZhcigtLXBhZGRpbmdDb3Jwcyk7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBUT0dHTEUgTUVOVSBQQVJUSUNJUEFOVFNcbiAgIFLDqXV0aWxpc2UgbGVzIHN0eWxlcyBkZSBfb25nbGV0TWVudS5jc3NcbiAgIFNldWxlIGxhIGNvdWxldXIgZGUgbCdpbmRpY2F0ZXVyIGNoYW5nZVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyogQ291bGV1ciBzcMOpY2lmaXF1ZSBwb3VyIGwnaW5kaWNhdGV1ciBwYXJ0aWNpcGFudHMgKi9cbi5kaXZPbmdsZXRNZW51R3JvdXBlcyAuaW5kaWNhdGV1ck9uZ2xldCB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRHcm91cGVzMyk7XG59XG5cbi8qIFNlY3Rpb25zIG1hc3F1w6llcyBwYXIgZMOpZmF1dCAqL1xuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4uc2VjdGlvbkdyb3VwZXMge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5zZWN0aW9uR3JvdXBlcy52aXNpYmxlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbn1cbiovXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBUT0dHTEUgTUVOVSBMT1RTXG4gICBSw6l1dGlsaXNlIGxlcyBzdHlsZXMgZGUgX29uZ2xldE1lbnUuY3NzXG4gICBTZXVsZSBsYSBjb3VsZXVyIGRlIGwnaW5kaWNhdGV1ciBjaGFuZ2VcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIENvdWxldXIgc3DDqWNpZmlxdWUgcG91ciBsJ2luZGljYXRldXIgbG90cyAqL1xuLmRpdk9uZ2xldE1lbnVEaXN0cmlidXRpb25zIC5pbmRpY2F0ZXVyT25nbGV0IHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZERpc3RyaWJ1dGlvbnMzKTtcbn1cblxuLyogU2VjdGlvbnMgbWFzcXXDqWVzIHBhciBkw6lmYXV0ICovXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbi5zZWN0aW9uRGlzdHJpYnV0aW9ucyB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLnNlY3Rpb25EaXN0cmlidXRpb25zLnZpc2libGUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuKi9cblxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIE9OR0xFVCBMT1RTIC0gU3R5bGVzIHNww6ljaWZpcXVlc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgTGVzIHN0eWxlcyBjb21tdW5zICguZGlzdHJpYnV0aW9uc0xpc3RlLCAuZGlzdHJpYnV0aW9uc1ZpZGUpIHNvbnRcbiAgIGTDqWZpbmlzIGRhbnMgX29uZ2xldEdyb3VwZXMuY3NzIChzw6lsZWN0ZXVycyBncm91cMOpcylcblxuICAgQ2UgZmljaGllciBjb250aWVudCB1bmlxdWVtZW50IGxlcyDDqWzDqW1lbnRzIHNww6ljaWZpcXVlc1xuICAgw6AgbCdvbmdsZXQgbG90cyBxdWkgZGlmZsOocmVudCBkZSBsJ29uZ2xldCBwYXJ0aWNpcGFudHMuXG5cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgT05HTEVUIFLDiVNVTFRBVFMgLSBTdHlsZXMgc3DDqWNpZmlxdWVzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICBMZXMgc3R5bGVzIGNvbW11bnMgZGVzIGJsb2NzIHNvbnQgZGFucyA1M19ibG9jcy5jc3NcbiAgIENlIGZpY2hpZXIgY29udGllbnQgdW5pcXVlbWVudCBsZXMgw6lsw6ltZW50cyBzcMOpY2lmaXF1ZXNcbiAgIMOgIGwnb25nbGV0IHLDqXN1bHRhdHMgKHNlY3Rpb25zLCBnYWduYW50cywgZXRjLilcblxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyogU2VjdGlvbiBkZSByw6lzdWx0YXRzICovXG4uc2VjdGlvblJlc3VsdGF0cyB7XG4gICAgbWFyZ2luLWJvdHRvbTogNDBweDtcbn1cblxuLnNlY3Rpb25SZXN1bHRhdHNUaXRyZSB7XG4gICAgZm9udDogdmFyKC0tZkgzKTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbiAgICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gICAgcGFkZGluZy1ib3R0b206IDEycHg7XG4gICAgYm9yZGVyLWJvdHRvbTogdmFyKC0tYm9yZGVyKTtcbn1cblxuLyogTGlzdGUgZGVzIGJsb2NzIGRlIHTDqWzDqWNoYXJnZW1lbnQgKi9cbi5saXN0ZVRlbGVjaGFyZ2VyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiB2YXIoLS1nYXBMYXJnZSk7IC8qIGFsaWduw6kgMTYgLT4gMjBweCAow6ljaGVsbGUgUE8gMjAyNi0wNy0xOCkgKi9cbn1cblxuLyogQmxvYyByw6lzdWx0YXQgcGFyIGFuaW1hdGlvbiDigJQgYm94ICh0aXRyZSA9IG5vbSBkZSBsJ2FuaW1hdGlvbiwgZmluIHRyYWl0IGNvbW1lIGxlcyBib3ggcGFydGljaXBhbnRzKSAqL1xuLmJsb2NSZXN1bHRhdFNjZW5lIHtcbiAgICBtYXgtd2lkdGg6IDYwMHB4O1xuICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gICAgcGFkZGluZzogMTZweCAyMHB4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJGb3JtKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG59XG5cbi5ibG9jUmVzdWx0YXRTY2VuZTplbXB0eSB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLmJsb2NSZXN1bHRhdFRpdHJlIHtcbiAgICBmb250OiB2YXIoLS1mSDQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xuICAgIG1hcmdpbjogMCAwIDEycHggMDtcbn1cblxuLmJsb2NSZXN1bHRhdEJvdXRvbnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbn1cblxuLyogVMOpbMOpY2hhcmdlbWVudHMgcsOpc3VsdGF0cyA6IHVuZSBsaWduZSBwYXIgcm9uZGUvY2xhc3NlbWVudCwgcGV0aXRzIGxpZW5zIHBhciBmb3JtYXQuICovXG4ucmVzdWx0YXRMaWduZXMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCk7IC8qIGFsaWduw6kgNiAtPiA4cHggKMOpY2hlbGxlIFBPIDIwMjYtMDctMTgpICovXG59XG5cbi5yZXN1bHRhdExpZ25lIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgICBnYXA6IHZhcigtLWdhcE1veWVuKTtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbn1cblxuLnJlc3VsdGF0TGFiZWwge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIG1pbi13aWR0aDogMTAwcHg7XG59XG5cbi5yZXN1bHRhdExpZW4ge1xuICAgIGNvbG9yOiB2YXIoLS1jTGluayk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4ucmVzdWx0YXRMaWVuOmhvdmVyIHtcbiAgICBjb2xvcjogdmFyKC0tY0xpbmtoKTtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbiIsIi8qIE9uZ2xldCBQdWJsaWNhdGlvbiDigJQgdW5lIGNhcnRlIHBhciBhbmltYXRpb24gOiB0aXRyZSwgY2FzZSDCqyBwdWJsaWVyIMK7LCBsaWVuICsgUVIuICovXG5cbi5ibG9jUHVibGljYXRpb24ge1xuICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG59XG5cbi5wdWJsaWNhdGlvbkNhc2VMYWJlbCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5wdWJsaWNhdGlvbkxpZW4ge1xuICAgIG1hcmdpbi10b3A6IDEycHg7XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgUsOJQ0FQSVRVTEFUSUYgU0PDiU5BUklPIChzdGVwcGVyIHZlcnRpY2FsKVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyogQ29udGFpbmVyIGR1IHN0ZXBwZXIgKi9cbi5yZWNhcFN0ZXBwZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IDA7XG59XG4jc2NlbmFyaW9QYW5uZWF1IC5yZWNhcFN0ZXBwZXIgPiAucmVjYXBBY3Rpb25zICsgLnJlY2FwQmxvYyB7XG4gICAgbWFyZ2luLXRvcDogMzJweDtcbn1cblxuLyogQ29ubmVjdGV1ciB2ZXJ0aWNhbCBlbnRyZSBsZXMgYmxvY3MgKi9cbi5yZWNhcENvbm5lY3RldXIge1xuICAgIHdpZHRoOiAzcHg7XG4gICAgaGVpZ2h0OiAyNHB4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAzKTtcbiAgICBtYXJnaW4tbGVmdDogMjBweDtcbn1cblxuLyogQmxvYyBpbmRpdmlkdWVsIGR1IHN0ZXBwZXIgKi9cbi5yZWNhcEJsb2Mge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDYXJ0ZSk7XG4gICAgbWluLWhlaWdodDogNjZweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4vKiBUaXRyZSBkdSBibG9jIChoMykgKi9cbi5yZWNhcEJsb2MgaDMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcE1veWVuKTsgLyogYWxpZ27DqSAxMCAtPiAxMnB4ICjDqWNoZWxsZSBQTyAyMDI2LTA3LTE4KSAqL1xuICAgIHBhZGRpbmc6IDEwcHggMTRweCAwO1xuICAgIGZvbnQ6IHZhcigtLWZINCk7XG4gICAgbWFyZ2luOiAwO1xufVxuXG4vKiDDiXRpcXVldHRlcyBkdSByw6ljYXAgOiB1biBTRVVMIHN0eWxlLCBxdSdlbGxlcyBzb2llbnQgY2xpcXVhYmxlcyAoPGE+LzxidXR0b24+IGVuIG1vZGVcbiAgIFByw6lwYXJlciAvIHByb2dyZXNzaW9uKSBvdSBzdGF0aXF1ZXMuIEZvbmQgY2xhaXIgZGUgY2F0w6lnb3JpZSwgdGV4dGUgbm9pciwgYm9yZHVyZSBsw6lnw6hyZVxuICAgKGNob2l4IFBPIDIwMjYtMDctMjAgOiBwbHVzIGRlIHBhc3RpbGxlIGZvbmPDqWUgw6AgdGV4dGUgYmxhbmMg4oCUIGwnb25nbGV0IERpZmZ1c2VyIGZhaXQgZm9pKS5cbiAgIC5yZWNhcFRhZ1NvcnRpZSA9IG5ldXRyZSAobm9pcikgOiB1bmUgc29ydGllIHBldXQgw6p0cmUgZGUgbidpbXBvcnRlIHF1ZWxsZSBmYW1pbGxlLlxuICAgLnJlY2FwVGFnU29ydGllU2Vjb25kYWlyZSA9IHNvcnRpZSBgc2Vjb25kYWlyZWAgYXUgY29udHJhdCwgcHLDqXNlbnTDqWUgZW4gcmV0cmFpdC4gKi9cbi5yZWNhcFRhZ0dyb3VwZXMsXG4ucmVjYXBUYWdEaXN0cmlidXRpb25zLFxuLnJlY2FwVGFnU29ydGllLFxuLnJlY2FwVGFnU29ydGllU2Vjb25kYWlyZSxcbi5yZWNhcExpZW5Hcm91cGVzLFxuLnJlY2FwTGllbkRpc3RyaWJ1dGlvbnMge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBtYXJnaW46IDJweCAwO1xuICAgIHBhZGRpbmc6IHZhcigtLXBhZGRpbmdFdGlxdWV0dGUpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIwKTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCBjdXJyZW50Q29sb3I7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbi5yZWNhcFRhZ1NvcnRpZVNlY29uZGFpcmUge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjQpO1xufVxuXG4ucmVjYXBUYWdHcm91cGVzLFxuLnJlY2FwTGllbkdyb3VwZXMgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZEdyb3VwZXMpOyB9XG5cbi5yZWNhcFRhZ0Rpc3RyaWJ1dGlvbnMsXG4ucmVjYXBMaWVuRGlzdHJpYnV0aW9ucyB7IGJhY2tncm91bmQ6IHZhcigtLWNGb25kRGlzdHJpYnV0aW9ucyk7IH1cblxuLyogVGl0cmUgZCdhbmltYXRpb24vYWZmaWNoYWdlIGNsaXF1YWJsZSAobW9kZSBQcsOpcGFyZXIpIDogbGllbiBzb2JyZSwgc2FucyBwYXN0aWxsZSBjb2xvcsOpZSxcbiAgIHBvdXIgbmUgcGFzIHBlcnR1cmJlciBsYSBsZWN0dXJlIOKAlCBtw6ptZSBzb2JyacOpdMOpIHF1ZSBsZSB0aXRyZSBub24gY2xpcXVhYmxlIGRlIGxhIHByb2dyZXNzaW9uLiAqL1xuLnJlY2FwTGllblNjZW5lcyxcbi5yZWNhcExpZW5BZmZpY2hhZ2VzIHtcbiAgICBjb2xvcjogaW5oZXJpdDtcbn1cblxuLyogQWZmb3JkYW5jZSDCqyBjbGlxdWFibGUgwrsgOiBzb3VsaWduZW1lbnQgYXUgc3Vydm9sICjDqXRpcXVldHRlcyBkJ2VudHLDqWUgKyB0aXRyZXMpICovXG4ucmVjYXBMaWVuR3JvdXBlczpob3Zlcixcbi5yZWNhcExpZW5EaXN0cmlidXRpb25zOmhvdmVyLFxuLnJlY2FwTGllblNjZW5lczpob3Zlcixcbi5yZWNhcExpZW5BZmZpY2hhZ2VzOmhvdmVyIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuLyogU291cy10aXRyZSBkYW5zIGxlIGJsb2MgKGg0KSAqL1xuLnJlY2FwQmxvYyBoNCB7XG4gICAgZm9udDogdmFyKC0tZkg0KTtcbiAgICBtYXJnaW46IDA7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbi8qIExpc3RlcyDDoCBwdWNlcyBkYW5zIGxlIGJsb2MgKi9cbi5yZWNhcEJsb2MgdWwge1xuICAgIG1hcmdpbjogNHB4IDA7XG4gICAgcGFkZGluZy1sZWZ0OiAyMHB4O1xufVxuXG4ucmVjYXBCbG9jIGxpIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cblxuLyogRMOpdGFpbHMgZHUgYmxvYyAqL1xuLnJlY2FwQmxvY0RldGFpbCB7XG4gICAgcGFkZGluZzogNHB4IDE0cHggMTBweDtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cblxuLnJlY2FwQmxvY0RldGFpbCBwIHtcbiAgICBtYXJnaW46IDJweCAwO1xufVxuXG4ucmVjYXBCbG9jRGV0YWlsIGhyIHtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYm9yZGVyLXRvcDogdmFyKC0tYm9yZGVyQ2FydGUpO1xuICAgIG1hcmdpbjogMjBweCAwO1xufVxuXG4vKiBJY8O0bmUgZGUgbCdhbmltYXRpb24gZW4gcmFwcGVsIGRhbnMgbGUgY29pbiBoYXV0LWRyb2l0IGR1IGJsb2MuXG4gICA2NHB4ID0gdGFpbGxlIGQnaWPDtG5lIHN0YW5kYXJkIGR1IHByb2pldCAoaGFybW9uaXNhdGlvbiBlbiBjb3VycywgZMOpY2lzaW9uIFBPIDIwMjYtMDYtMTApLlxuICAgSG9ycyBmbHV4IChhYnNvbHV0ZSkgcG91ciBuZSBwYXMgZ29uZmxlciBsYSBoYXV0ZXVyIGR1IHRpdHJlIOKAlCBjYWzDqWUgc3VyIGxlIHBhZGRpbmcgZHUgaDMuICovXG4ucmVjYXBUaXRyZUljb25lIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIHdpZHRoOiA2NHB4O1xuICAgIGhlaWdodDogNjRweDtcbiAgICBwYWRkaW5nOiA2cHg7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xufVxuXG4vKiBWYXJpYW50ZXMgY291bGV1ciBwYXIgdHlwZSAqL1xuLnJlY2FwQmxvY0dyb3VwZXMsIC8qIC5yZWNhcEJsb2NEaXN0cmlidXRpb25zIChpbnV0aWxpc8OpIDIwMjYtMDYtMTMpICovIC5yZWNhcEJsb2NFbnRyZWVzU29ydGllcyB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMSk7XG59XG5cbi5yZWNhcEJsb2NTY2VuZSAucmVjYXBUaXRyZUljb25lIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZFNjZW5lcyk7XG59XG5cbi5yZWNhcEJsb2NTY2VuZS5yZWNhcEJsb2NBZmZpY2hhZ2UgLnJlY2FwVGl0cmVJY29uZSB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRBZmZpY2hhZ2VzKTtcbn1cblxuLnJlY2FwQmxvY0NvbmZpZ3VyYXRpb25zIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZENvbmZpZyk7XG59XG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuLnJlY2FwQmxvY0ZpbmFsIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMik7XG59XG4qL1xuXG4vKiBMaWVuIFwiTW9kaWZpZXJcIiBzb3VzIGxlIHLDqWNhcCAqL1xuLnJlY2FwQWN0aW9ucyB7XG4gICAgcGFkZGluZzogMTBweCAxNHB4O1xufVxuXG4vKiBNw6ptZSBjb3VsZXVyIHF1J0FubnVsZXIgZGVzIGZvcm11bGFpcmVzIChub3lhdSAzMV9jdGEuY3NzKSA6IGxlcyBhY3Rpb25zIG5ldXRyZXMgc29udFxuICAgbm9pcmVzLCBsZXMgY291bGV1cnMgcmVzdGVudCByw6lzZXJ2w6llcyBhdXggYWN0aW9ucyBtYXJxdcOpZXMgKFN1cHByaW1lcikuICovXG4ucmVjYXBBY3Rpb25zIGEge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4ucmVjYXBBY3Rpb25zIGE6aG92ZXIge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4vKiBJbWFnZSBkYW5zIHVuIGJsb2MgcsOpY2FwICovXG4ucmVjYXBJbWFnZSB7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbn1cblxuLyogUGFzdGlsbGVzIGNvdWxldXJzIGRhbnMgbGUgcsOpY2FwICovXG4ucmVjYXBDb3VsZXVycyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCk7XG4gICAgbWFyZ2luLXRvcDogNnB4O1xufVxuXG4ucmVjYXBDb3VsZXVyUGFzdGlsbGUge1xuICAgIHdpZHRoOiAyOHB4O1xuICAgIGhlaWdodDogMjhweDtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXIpO1xufVxuXG4vKiBNZXNzYWdlIHZpZGUgKi9cbi5yZWNhcFZpZGUge1xuICAgIGZvbnQ6IHZhcigtLWZJdGFsaWMxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgcGFkZGluZzogMTZweCAwO1xufVxuXG4vKiBTb3VyY2UgbGlzdCBkYW5zIGxlcyBkw6l0YWlscyAqL1xuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4ucmVjYXBTb3VyY2VzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiAycHg7XG59XG4qL1xuXG4vKiBBbGVydGUgaW5zdWZmaXNhbmNlICovXG4ucmVjYXBBbGVydGUge1xuICAgIGNvbG9yOiB2YXIoLS1jUm91Z2UpO1xuICAgIGZvbnQ6IHZhcigtLWZBbGVydGUxNik7XG59XG5cbi8qIEJyaXF1ZSByw6ljYXBpdHVsYXRpZiBkYW5zIGxhIGdyaWxsZSBkdSBzY8OpbmFyaW8gKi9cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuLmJyaXF1ZS5icmlxdWVSZWNhcCB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDIpO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY0JsYW5jMDMpO1xufVxuKi9cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTE1IC0gY29uY2VwdCByZWNhcC5qcyByZXRpcsOpXG4ucmVjYXBBbmltQ29uZmlnOmVtcHR5IHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuKi9cblxuLnJlY2FwRW5jYWRyZSB7XG4gICAgbWFyZ2luOiAxMHB4IDA7XG4gICAgcGFkZGluZzogMTBweCAxNXB4O1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyQ2FydGUpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBiYWNrZ3JvdW5kOiAjRkZGODtcbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTE1IC0gY29uY2VwdCByZWNhcC5qcyByZXRpcsOpXG4ucmVjYXBBbmltQ29uZmlnIGg0IHtcbiAgICBmb250OiB2YXIoLS1mSDQpO1xuICAgIG1hcmdpbjogMjBweCAwIDRweDtcbn1cblxuLnJlY2FwQW5pbUNvbmZpZyBoNDpmaXJzdC1jaGlsZCB7XG4gICAgbWFyZ2luLXRvcDogMDtcbn1cblxuLnJlY2FwQW5pbUNvbmZpZyBwIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICBtYXJnaW46IDJweCAwO1xufVxuXG4ucmVjYXBBbmltQ29uZmlnIHVsLFxuLnJlY2FwQW5pbUNvbmZpZyBvbCB7XG4gICAgbWFyZ2luOiA0cHggMDtcbiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG59XG5cbi5yZWNhcEFuaW1Db25maWcgbGkge1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4ucmVjYXBBbmltQ29uZmlnIHRhYmxlIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgIG1hcmdpbjogNnB4IDA7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbi5yZWNhcEFuaW1Db25maWcgdGgsXG4ucmVjYXBBbmltQ29uZmlnIHRkIHtcbiAgICBwYWRkaW5nOiA0cHggOHB4O1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgYm9yZGVyLWJvdHRvbTogdmFyKC0tYm9yZGVyQ2FydGUpO1xufVxuXG4ucmVjYXBBbmltQ29uZmlnIHRoIHtcbiAgICBmb250LXdlaWdodDogNjAwO1xufVxuXG4ucmVjYXBBbmltQ29uZmlnIGhyIHtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYm9yZGVyLXRvcDogdmFyKC0tYm9yZGVyQ2FydGUpO1xuICAgIG1hcmdpbjogOHB4IDA7XG59XG4qL1xuXG4vKiBCb3V0b25zIHBhcnRpY2lwYW50cyBjbGlxdWFibGVzIGRhbnMgbGEgcHJvZ3Jlc3Npb24gOiBtw6ptZSDDqXRpcXVldHRlIHF1ZSBsZXMgYXV0cmVzXG4gICAoY29udG91ciBjb21wcmlzLCBjZi4gYmxvYyBkdSBoYXV0KSwgb24gbidhanVzdGUgcXVlIGwnaW50ZXJhY3Rpdml0w6kuICovXG5idXR0b24ucmVjYXBUYWdHcm91cGVzIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZm9udDogaW5oZXJpdDtcbn1cblxuYnV0dG9uLnJlY2FwVGFnR3JvdXBlczpob3ZlciB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBQUk9HUkVTU0lPTiDigJQgw4l0YXRzIGRlcyBibG9jc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyogQmxvYyBub24gYWN0aWYgOiBhdHTDqW51w6kgKi9cbiNwcm9ncmVzc2lvbiAucmVjYXBCbG9jU2NlbmUge1xuICAgIG9wYWNpdHk6IC41O1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcztcbn1cblxuLyogQmxvYyBhY3RpZiA6IHBsZWluZSBjb3VsZXVyICovXG4jcHJvZ3Jlc3Npb24gLnJlY2FwQmxvY1NjZW5lLnJlY2FwQmxvY0FjdGlmIHtcbiAgICBvcGFjaXR5OiAxO1xufVxuXG4vKiBJbmZvIGQnw6l0YXQgZHluYW1pcXVlIChnw6luw6lyw6llIHBhciBKUykgKi9cbi5wcm9ncmVzc2lvbkV0YXQge1xuICAgIGZvbnQ6IHZhcigtLWZDdGExNik7XG4gICAgY29sb3I6IHZhcigtLWNDdGEpO1xuICAgIHBhZGRpbmc6IDZweCAxNHB4O1xufVxuXG4vKiBBw6lyYXRpb24gZGUgc2Vjb3VycyBxdWFuZCBsZSBibG9jIG4nYSBwYXMgZW5jb3JlIGRlIGNvbnRlbnUgZGUgcHJvZ3Jlc3Npb24gKi9cbi5wcm9ncmVzc2lvbkNvbnRlbnU6bm90KDpoYXMoKikpIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTBweDtcbn1cblxuLyogQmxvY3MgZGUgcHJvZ3Jlc3Npb24gw6ltaXMgcGFyIGwnYW5pbWF0aW9uIChvYnRlbmlyUHJvZ3Jlc3Npb24g4oaSIHJlbmR1IHVuaXF1ZSByZW5kdUJsb2NzLnRzKSAqL1xuLnByb2dyZXNzaW9uQmxvY1RpdHJlIHtcbiAgICBmb250OiB2YXIoLS1mSDQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIG1hcmdpbjogNnB4IDAgMnB4O1xufVxuXG4ucHJvZ3Jlc3Npb25CbG9jVGV4dGUge1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIG1hcmdpbjogMnB4IDA7XG59XG5cbi5wcm9ncmVzc2lvbkJsb2NMaXN0ZSB7XG4gICAgbWFyZ2luOiA0cHggMDtcbiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG59XG5cbi5wcm9ncmVzc2lvbkJsb2NMaXN0ZSBsaSB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbi5wcm9ncmVzc2lvbkJsb2NCYXJyZSB7XG4gICAgbWFyZ2luOiA4cHggMDtcbn1cblxuLnByb2dyZXNzaW9uQmxvY0JhcnJlUGlzdGUge1xuICAgIGhlaWdodDogMTBweDtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDMpO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5wcm9ncmVzc2lvbkJsb2NCYXJyZUphdWdlIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0N0YSk7XG4gICAgdHJhbnNpdGlvbjogd2lkdGggMC4zcztcbn1cblxuLnByb2dyZXNzaW9uQmxvY0JhcnJlTGFiZWwge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi10b3A6IDRweDtcbiAgICBmb250OiB2YXIoLS1mQ3RhMTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jQ3RhKTtcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBTQ8OJTkFSSU8gLSBGaWNoaWVyIHByaW5jaXBhbFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgQ2UgZmljaGllciBpbXBvcnRlIGxlcyBwYXJ0aWFscyBvcmdhbmlzw6lzIHBhciB0aMOobWUuXG4gICBDaGFxdWUgcGFydGlhbCBnw6hyZSB1biBhc3BlY3Qgc3DDqWNpZmlxdWUgZGUgbGEgc2NlbmFyaW8uXG5cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbkBpbXBvcnQgJzU2X3NjZW5hcmlvL19ldGlxdWV0dGVzLmNzcyc7XG5AaW1wb3J0ICc1Nl9zY2VuYXJpby9fZ3JpbGxlLmNzcyc7XG5AaW1wb3J0ICc1Nl9zY2VuYXJpby9fZm9ybXVsYWlyZXMuY3NzJztcbkBpbXBvcnQgJzU2X3NjZW5hcmlvL19vbmdsZXRNZW51LmNzcyc7XG5AaW1wb3J0ICc1Nl9zY2VuYXJpby9fbWVudUFqb3V0ZXIuY3NzJztcbkBpbXBvcnQgJzU2X3NjZW5hcmlvL19icmlxdWVzQ291bGV1cnMuY3NzJztcbkBpbXBvcnQgJzU2X3NjZW5hcmlvL19kcmFnRHJvcC5jc3MnO1xuQGltcG9ydCAnNTZfc2NlbmFyaW8vX21vZGFsZS5jc3MnO1xuQGltcG9ydCAnNTZfc2NlbmFyaW8vX2FsZXJ0ZXMuY3NzJztcbkBpbXBvcnQgJzU2X3NjZW5hcmlvL191cGxvYWRzLmNzcyc7XG5AaW1wb3J0ICc1Nl9zY2VuYXJpby9fYmxvY1Jlc2VhdVNvY2lhbC5jc3MnO1xuQGltcG9ydCAnNTZfc2NlbmFyaW8vX29uZ2xldEdyb3VwZXMuY3NzJztcbkBpbXBvcnQgJzU2X3NjZW5hcmlvL19vbmdsZXREaXN0cmlidXRpb25zLmNzcyc7XG5AaW1wb3J0ICc1Nl9zY2VuYXJpby9fb25nbGV0UmVzdWx0YXRzLmNzcyc7XG5AaW1wb3J0ICc1Nl9zY2VuYXJpby9fb25nbGV0UHVibGljYXRpb24uY3NzJztcbkBpbXBvcnQgJzU2X3NjZW5hcmlvL19yZWNhcGl0dWxhdGlmLmNzcyc7XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgT05HTEVUIFLDiUdJRSAtIExhbmNldXIgLyBQaWxvdGFnZVxuICAgVXRpbGlzZSAucGFubmVhdVdyYXBwZXIgLyAucGFubmVhdUdhdWNoZSAvIC5wYW5uZWF1Rm9ybXVsYWlyZVxuICAgZMOpZmluaXMgZGFucyA1Nl9zY2VuYXJpby9fZm9ybXVsYWlyZXMuY3NzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQkxPQyBSw4lHSUUgKGRlc2lnbiBzb2JyZSwgZW4gcHJlbWllcilcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5ibG9jUmVnaWUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IHZhcigtLWdhcExhcmdlKTsgLyogYWxpZ27DqSAxNiAtPiAyMHB4ICjDqWNoZWxsZSBQTyAyMDI2LTA3LTE4KSAqL1xuICAgIHBhZGRpbmc6IHZhcigtLXBhZGRpbmdDb3Jwcyk7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDYXJ0ZSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xufVxuXG4uYmxvY1JlZ2llIGgzIHtcbiAgICBtYXJnaW46IDA7XG59XG5cbi5ibG9jUmVnaWUgLmN0YVN1cHByaW1lciB7XG4gICAgd2lkdGg6IG1heC1jb250ZW50O1xufVxuXG4vKiDDiWNyYW4gZGUgc3VwcHJlc3Npb24gOiBhdmVydGlzc2VtZW50IGFjY2VwdMOpIChjYXNlIMKrIEonYWkgY29tcHJpcyDCuykg4oCUIGZvbmQgbm9pciBlbiBzdXJjaGFyZ2VcbiAgIGR1IHJvdWdlIGQnYWxlcnRlLCBtYXJnZXMgZXQgcGFkZGluZyBpbmNoYW5nw6lzIHBvdXIgbmUgcmllbiBkw6ljYWxlci4gKi9cbi5hbGVydEVycmV1ci5hY2NlcHRlQXZlcnRpc3NlbWVudCB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY05vaXIpO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgVVJMIEJPWCAoY29waWVyIGwnVVJMKVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLnJlZ2llVXJsQm94IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pO1xufVxuXG4ucmVnaWVVcmwge1xuICAgIGZsZXg6IDE7XG4gICAgbWluLXdpZHRoOiAwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLnJlZ2llVXJsOmhvdmVyIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuLmJ0bkNvcGllciB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBwYWRkaW5nOiAwO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi5idG5Db3BpZXI6aG92ZXIge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4vKiDDiXRhdCBhcHLDqHMgY29waWUgOiB0ZXh0ZSB2ZXJ0LCBub24gaW50ZXJhY3RpZiAqL1xuLmJ0bkNvcGllci5jb3BpZSB7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgUVIgQ09ERVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLnJlZ2llUXJDb2RlIGltZyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDE1MHB4O1xuICAgIGhlaWdodDogMTUwcHg7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xN3B4KTtcbn1cblxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQ09ERSBEJ0FDQ8OIUyAoY2FjaMOpIHBhciBkw6lmYXV0KVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLnJlZ2llQ29kZUJveCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwTGFyZ2UpOyAvKiBhbGlnbsOpIDE2IC0+IDIwcHggKMOpY2hlbGxlIFBPIDIwMjYtMDctMTgpICovXG59XG5cbi5yZWdpZUNvZGVNYXNxdWUsXG4ucmVnaWVDb2RlVmFsZXVyIHtcbiAgICBmb250OiB2YXIoLS1mTW9ubzI0Yik7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuM2VtO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xufVxuXG4ucmVnaWVDb2RlTWFzcXVlIHtcbiAgICBjb2xvcjogdmFyKC0tY05vaXI0KTtcbn1cblxuLmJ0bkRlY291dnJpciB7XG4gICAgcGFkZGluZzogMTBweCAyMHB4O1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJGb3JtKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uYnRuRGVjb3V2cmlyOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG59XG5cbi5idG5EZWNvdXZyaXJbaGlkZGVuXSB7XG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQ0hBTkdFUiBNRVMgQ09ERVMgKHN0eWxlIGRpc2NyZXQgY29tbWUgU3VwcHJpbWVyKVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmJ0bkNoYW5nZXJDb2RlcyB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNSb3VnZSk7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBwYWRkaW5nOiAwO1xufVxuXG4uYnRuQ2hhbmdlckNvZGVzOmhvdmVyIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFBMQUNFSE9MREVSIChyaWVuIGRlIGNvbmZpZ3Vyw6kpXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4ucmVnaWVQbGFjZWhvbGRlciB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHBhZGRpbmc6IDQ4cHggMjRweDtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIENPTVBURVVSIEdMT0JBTCAoZm9uZCBibGFuYywgYXUtZGVzc3VzIGR1IG1vZGUgdGVzdClcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbiNjb21wdGV1ckdsb2JhbCB7XG4gICAgcGFkZGluZzogdmFyKC0tcGFkZGluZ0NvcnBzKTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlckNhcnRlKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRHcm91cGVzKTtcbn1cblxuI2NvbXB0ZXVyR2xvYmFsID4gZGl2IHtcbiAgICB3aWR0aDogbWF4LWNvbnRlbnQ7XG4gICAgbWFyZ2luLWxlZnQ6IDQwcHg7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkge1xuICAgICNjb21wdGV1ckdsb2JhbCA+IGRpdiB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtNXB4O1xuICAgIH1cbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4uY29tcHRldXJHbG9iYWxMaW1pdGUge1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjIpO1xuICAgIG1hcmdpbjogMTBweCAwIDRweDtcbn1cbiovXG5cbi5jb21wdGV1ckdsb2JhbExpZ25lIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7XG4gICAgbWFyZ2luOiAwO1xufVxuXG4uY29tcHRldXJHbG9iYWxUb3RhbCB7XG4gICAgbWFyZ2luLXRvcDogNnB4O1xuICAgIHBhZGRpbmctdG9wOiA2cHg7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWNUZXN0Myk7XG59XG5cbi5jb21wdGV1ckdsb2JhbExhYmVsIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIyKTtcbn1cblxuLmNvbXB0ZXVyR2xvYmFsVmFsZXVyLFxuLmNvbXB0ZXVyR2xvYmFsVmFsZXVyUmVlbHMsXG4uY29tcHRldXJHbG9iYWxWYWxldXJGaWN0aWZzIHtcbiAgICBmb250OiB2YXIoLS1mTW9ubzI0Yik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgbWluLXdpZHRoOiA2MHB4O1xufVxuXG4uY29tcHRldXJHbG9iYWxUb3RhbCAuY29tcHRldXJHbG9iYWxWYWxldXIge1xuICAgIGZvbnQ6IHZhcigtLWZNb25vMjRiKTtcbn1cblxuI2NvbXB0ZXVyR2xvYmFsLm1vZGVUZXN0QWN0aWYge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNUZXN0KTtcbn1cblxuI2NvbXB0ZXVyR2xvYmFsLmxpbWl0ZUF0dGVpbnRlIC5jb21wdGV1ckdsb2JhbFZhbGV1ciB7XG4gICAgY29sb3I6IHZhcigtLWNSb3VnZSk7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBCTE9DIE1PREUgVEVTVCAocGFydGljaXBhbnRzIGZpY3RpZnMpXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4uZmljdGlmQWN0aWYgLmJsb2NJY29uZSBpbWcsXG4uZmljdGlmQWN0aWYgLmJsb2NJY29uZSBzdmcge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNUZXN0KTtcbn1cblxuLyogU2VjdGlvbiBmaWN0aWZzICovXG4jc2VjdGlvbkZpY3RpZnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IHZhcigtLWdhcExhcmdlKTtcbn1cblxuI3NlY3Rpb25GaWN0aWZzLmhpZGRlbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogT3ZlcnJpZGUgZHUgYmxvYyBnw6luw6lyaXF1ZSBwb3VyIGxlIG1vZGUgdGVzdCAqL1xuLmJsb2MuYmxvY0dyb3VwZSB7XG4gICAgbWF4LXdpZHRoOiBub25lO1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyQ2FydGUpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xufVxuXG4uYmxvY0dyb3VwZSAuYmxvY0NvcnBzIHtcbiAgICBnYXA6IHZhcigtLWdhcE1veWVuKTtcbiAgICBwYWRkaW5nOiAxNnB4O1xufVxuXG4vKiBMaWduZSAyIDogVG9nZ2xlIC0gcsOpdXRpbGlzZSAudG9nZ2xlQXZlY0xhYmVsIGRlIF9tb2RhbGUuY3NzICovXG5cbi8qIExpZ25lIDMgOiBDb250ZW51IGNvbmRpdGlvbm5lbCAqL1xuLmJsb2NHcm91cGVDb250ZW51IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiB2YXIoLS1nYXBNb3llbik7XG59XG5cbi5ibG9jR3JvdXBlUmVlbHMuaGlkZGVuLFxuLmJsb2NHcm91cGVGaWN0aWZzLmhpZGRlbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogQ29tcHRldXJzIC0gcsOpdXRpbGlzZSBsZXMgY2xhc3NlcyBkZSBfb25nbGV0R3JvdXBlcy5jc3MgKi9cbi5ibG9jR3JvdXBlUmVlbHMgLyosIC5maWN0aWZzQ29tcHRldXIgKGludXRpbGlzw6kgMjAyNi0wNi0xMykgKi8ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lO1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbiAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuXG4vKiBMYWJlbCBhdmFudCBsZSBjb21wdGV1ciAqL1xuI2Jsb2NNb2RlVGVzdCAuY29tcHRldXJMYWJlbCB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbi8qIFZhbGV1ciBwcmluY2lwYWxlIChncm9zIGNoaWZmcmUpICovXG4jYmxvY01vZGVUZXN0IC5jb21wdGV1clZhbGV1ciB7XG4gICAgZm9udDogdmFyKC0tZk1vbm8yNGIpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xufVxuXG4vKiBTw6lwYXJhdGV1ciBcIi9cIiAqL1xuI2Jsb2NNb2RlVGVzdCAuY29tcHRldXJTZXBhcmF0ZXVyIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXI0KTtcbn1cblxuLyogVGVzdCBlbiBjb3VycyA6IGZvcm11bGFpcmVzIGTDqXNhY3RpdsOpcyAqL1xuI2Jsb2NNb2RlVGVzdC50ZXN0RW5Db3VycyAudG9nZ2xlU2xpZGVyIHtcbiAgICBvcGFjaXR5OiAuNTtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG59XG5cbi8qIEZvcm11bGFpcmUgZCdham91dCBmaWN0aWZzICovXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbi5maWN0aWZzRm9ybXVsYWlyZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pO1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbn1cbiovXG5cbi8qIElucHV0IGV0IGJvdXRvbiBtw6ptZSBoYXV0ZXVyICovXG4uaW5wdXROb21icmVGaWN0aWZzIHtcbiAgICB3aWR0aDogODBweDtcbiAgICBwYWRkaW5nOiA0cHggOHB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLmlucHV0Tm9tYnJlRmljdGlmcy5oaWRkZW4gLyosIC5idG5Bam91dGVyRmljdGlmcy5oaWRkZW4gKGludXRpbGlzw6kgMjAyNi0wNi0xMykgKi8ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBUQUJMRUFVIERPTk7DiUVTIENPTExFQ1TDiUVTIChkYW5zIHJlY2FwQmxvYylcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi50YWJsZWF1RG9ubmVlc0NvbGxlY3RlZXMge1xuICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG59XG5cbi50YWJsZWF1RG9ubmVlc0NvbGxlY3RlZXMgdGQge1xuICAgIHBhZGRpbmc6IDNweCAxMnB4IDNweCAwO1xuICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbiAgICBtYXgtd2lkdGg6IDMwMHB4O1xufVxuXG4udGFibGVhdURvbm5lZXNDb2xsZWN0ZWVzIHRkOmZpcnN0LWNoaWxkIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4udGFibGVhdURvbm5lZXNDb2xsZWN0ZWVzIHRkOmxhc3QtY2hpbGQge1xuICAgIGZvbnQ6IHZhcigtLWZMaWdodDE0KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFBBR0UgQUNDw4hTIFLDiUdJRSAoc2Fpc2llIGNvZGUgNSBsZXR0cmVzKVxuICAgTGF5b3V0IGNvbW11biBkYW5zIG5veWF1L2Nzcy9jb21wb3NhbnRzL2Zvcm1BY2Nlc0NvZGUuY3NzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBMaWVuIGNvbm5leGlvbiDigJQgc3DDqWNpZmlxdWUgw6AgbGEgcsOpZ2llIHVuaXF1ZW1lbnQgKi9cbi5ub3RlQ29ubmV4aW9uIHtcbiAgICBtYXJnaW4tdG9wOiAyNHB4O1xuICAgIGZvbnQ6IHZhcigtLWZMaWdodDE0KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cblxuLm5vdGVDb25uZXhpb24gYSB7XG4gICAgY29sb3I6IHZhcigtLWNMaW5rKTtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuLm5vdGVDb25uZXhpb24gYTpob3ZlciB7XG4gICAgY29sb3I6IHZhcigtLWNMaW5raCk7XG59XG4iLCIvKipcbiAqIEtpdCBDU1Mg4oCUIEVmZmV0cyB2aXN1ZWxzIChjYXJ0ZSlcbiAqXG4gKiBBcHBsaXF1ZSB2aWEgZGF0YS1lZmZldCBzdXIgI3N0dWRpb0VjcmFuLlxuICogQWpvdXRlciAudnVlQ2FydGUgc3VyIHRvdXQgYmxvYyBhIHN0eWxpc2VyLlxuICovXG5cbi8qIOKUgOKUgCBWYXJpYWJsZSBib3JkdXJlIGTDqXJpdsOpZSAodW5lIHNldWxlIHNvdXJjZSkg4pSA4pSAICovXG4jc3R1ZGlvRWNyYW4ge1xuICAgIC0taWxvdEJvcmR1cmU6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY291bGV1clByaW1haXJlKSAzMCUsIHRyYW5zcGFyZW50KTtcbn1cblxuLyog4pSA4pSAIENsYXNzZXMgcGFydGFnw6llcyDilIDilIAgKi9cblxuLnZ1ZVRpdHJlQ2VudHJlIHtcbiAgICBmb250LXNpemU6IHZhcigtLXBvbGljZTEpO1xuICAgIGZvbnQtZmFtaWx5OiAnU2NhZGEnLCAnTm90byBTYW5zJywgc2Fucy1zZXJpZjtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBjb2xvcjogdmFyKC0tY291bGV1clByaW1haXJlKTtcbn1cblxuLyogU2NlbmUgZCdlbnRyZWUgY29tbXVuZSAqL1xuQGtleWZyYW1lcyB2dWVBcHBhcml0aW9uIHtcbiAgICBmcm9tIHtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAuNzVlbSk7XG4gICAgfVxuICAgIHRvIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICAgIH1cbn1cblxuLnZ1ZUFuaW1lciB7XG4gICAgYW5pbWF0aW9uOiB2dWVBcHBhcml0aW9uIDE1MG1zIGVhc2Utb3V0IGZvcndhcmRzO1xufVxuXG4vKiBDYXJ0ZSBkZSBiYXNlICovXG4udnVlQ2FydGUge1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWlsb3RSYXlvbik7XG4gICAgcGFkZGluZzogdmFyKC0taWxvdFBhZGRpbmcpO1xufVxuXG4vKiBHbGFjaXMgKi9cbltkYXRhLWVmZmV0PVwiMVwiXSAudnVlQ2FydGUge1xuICAgIGJhY2tncm91bmQtY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb3VsZXVyRm9uZCkgODAlLCB0cmFuc3BhcmVudCk7XG4gICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEycHgpO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvdWxldXJGb25kKTtcbiAgICBib3gtc2hhZG93OiAwIDRweCAyMHB4IHZhcigtLWNOb2lyKTtcbn1cblxuLyogVHJhbnNwYXJlbnQgKi9cbltkYXRhLWVmZmV0PVwiMlwiXSAudnVlQ2FydGUge1xuICAgIGJhY2tncm91bmQtY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb3VsZXVyRm9uZCkgNzAlLCB0cmFuc3BhcmVudCk7XG59XG5cbi8qIFZvaWxlICovXG5bZGF0YS1lZmZldD1cIjNcIl0gLnZ1ZUNhcnRlIHtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTY1ZGVnLFxuICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY291bGV1ckZvbmQpIDk1JSwgdHJhbnNwYXJlbnQpLFxuICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY291bGV1ckZvbmQpIDQwJSwgdHJhbnNwYXJlbnQpKTtcbn1cblxuLyogRW5jYWRyZSAqL1xuW2RhdGEtZWZmZXQ9XCI0XCJdIC52dWVDYXJ0ZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY291bGV1ckZvbmQpO1xuICAgIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWNvdWxldXJQcmltYWlyZSk7XG59XG5cbi8qIE9tYnJlICovXG5bZGF0YS1lZmZldD1cIjVcIl0gLnZ1ZUNhcnRlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb3VsZXVyRm9uZCk7XG4gICAgYm94LXNoYWRvdzogMCA0cHggMjBweCB2YXIoLS1jT21icmVGb3J0ZSk7XG59XG5cbi8qIFBvcHVwIDogb21icmUgcG9ydGVlIHBvdXIgZGV0YWNoZXIgZHUgZm9uZCAqL1xuLnZ1ZVBvcHVwIHtcbiAgICBib3gtc2hhZG93OiAwIDAgMjBweCAxMHB4IHZhcigtLWNOb2lyKTtib3gtc2hhZG93OiAwIDAgNTBweCA1MHB4IHZhcigtLWNOb2lyKTtcbn1cblxuLyogSWxvdHMgaW50ZXJuZXMgOiBib3JkdXJlIHN1YnRpbGUgZGFucyBsYSBjYXJ0ZSAqL1xuW2RhdGEtZWZmZXRdIC52dWVDYXJ0ZSAudnVlVGFibGVhdSxcbltkYXRhLWVmZmV0XSAudnVlQ2FydGUgLnZ1ZU1hdGNoTGlnbmUge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvdWxldXJGb25kKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1pbG90UmF5b25JbnRlcm5lKTtcbiAgICBib3JkZXI6IHZhcigtLWlsb3RCb3JkdXJlKTtcbn1cblxuLyogR2FnbmFudCAvIFBlcmRhbnQgKGdlbmVyaXF1ZSkgKi9cbi52dWVHYWduYW50IHtcbiAgICBjb2xvcjogdmFyKC0tY291bGV1clByaW1haXJlKTtcbn1cblxuLnZ1ZVBlcmRhbnQge1xuICAgIGZvbnQtd2VpZ2h0OiAyMDA7XG4gICAgb3BhY2l0eTogMC40O1xufVxuXG4vKiBQYWdpbmF0aW9uICovXG4udnVlUGFnaW5hdGlvbiB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4vKiBMb3QgZGlzcGxheSAqL1xuLnZ1ZUxvdCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi52dWVMb3RJbWFnZVdyYXAge1xuICAgIGZsZXg6IDE7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgd2lkdGg6IDEwMCU7XG59XG5cbi52dWVMb3RJbWFnZSB7XG4gICAgbWF4LXdpZHRoOiBtaW4oODAlLCBjYWxjKDEwMHZ3ICogNCAvIDE2KSk7XG4gICAgbWF4LWhlaWdodDogbWluKDkwJSwgY2FsYygxMDB2aCAqIDMgLyA5KSk7XG4gICAgb2JqZWN0LWZpdDogY29udGFpbjtcbiAgICBkaXNwbGF5OiBibG9jaztcbn1cblxuLyogQmFkZ2UgcsOpc3VsdGF0IOKAlCBwYXJ0aWNpcGFudCBub21tw6kgb3UgbnVtw6lybyB0b21ib2xhICovXG5cbkBrZXlmcmFtZXMgdnVlQmFkZ2VSZXN1bHRhdFBvcCB7XG4gICAgMCUgICB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogc2NhbGUoMC4yKSByb3RhdGUoLTZkZWcpOyB9XG4gICAgNjAlICB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogc2NhbGUoMS4xKSByb3RhdGUoMWRlZyk7IH1cbiAgICA4MCUgIHsgdHJhbnNmb3JtOiBzY2FsZSgwLjk2KTsgfVxuICAgIDEwMCUgeyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHNjYWxlKDEpIHJvdGF0ZSgwZGVnKTsgfVxufVxuXG5Aa2V5ZnJhbWVzIHZ1ZUJhZGdlUmVzdWx0YXRGbGFzaCB7XG4gICAgMCUgICB7XG4gICAgICAgIGJveC1zaGFkb3c6XG4gICAgICAgICAgICBpbnNldCAgNnB4ICA2cHggMThweCAxOHB4ICNGRkIzQzE4OCxcbiAgICAgICAgICAgIGluc2V0IC02cHggIDZweCAxOHB4IDE4cHggI0IzRDlGRjg4LFxuICAgICAgICAgICAgaW5zZXQgIDZweCAtNnB4IDE4cHggMThweCAjQjNGRkIzODgsXG4gICAgICAgICAgICBpbnNldCAtNnB4IC02cHggMThweCAxOHB4ICNGRkYzQjM4ODtcbiAgICB9XG4gICAgMTAwJSB7IGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDAgdHJhbnNwYXJlbnQ7IH1cbn1cblxuLnZ1ZUJhZGdlUmVzdWx0YXQudnVlQW5pbWVyIHtcbiAgICBhbmltYXRpb246IHZ1ZUJhZGdlUmVzdWx0YXRQb3AgNTUwbXMgY3ViaWMtYmV6aWVyKDAuMzQsIDEuNTYsIDAuNjQsIDEpIGZvcndhcmRzLFxuICAgICAgICAgICAgICAgdnVlQmFkZ2VSZXN1bHRhdEZsYXNoIDcwMG1zIGVhc2Utb3V0IGZvcndhcmRzO1xufVxuXG4udnVlQmFkZ2VSZXN1bHRhdCB7XG4gICAgZm9udC1zaXplOiB2YXIoLS1wb2xpY2UxKTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBwYWRkaW5nOiAwLjVlbSAxZW07XG4gICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0taWxvdFJheW9uSW50ZXJuZSk7XG4gICAgb3V0bGluZTogMXB4IHNvbGlkIHZhcigtLWNOb2lyKTtcbiAgICBvdXRsaW5lLW9mZnNldDogLTFweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHdpZHRoOiBjYWxjKHZhcigtLXBvbGljZTEpICogMjApO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBtaW4taGVpZ2h0OiAyLjJlbTtcbiAgICBmbGV4LXNocmluazogMDtcbn1cblxuLnZ1ZUJhZGdlUmVzdWx0YXRWaWRlIHtcbiAgICBiYWNrZ3JvdW5kOiAjMDAwMDAwMDU7XG4gICAgb3V0bGluZS1jb2xvcjogIzAwMDU7XG59XG5cbi52dWVCYWRnZVJlc3VsdGF0Tm9tIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogMTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcik7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICBtaW4td2lkdGg6IDA7XG59XG5cbkBrZXlmcmFtZXMgdnVlQmFkZ2VSZXN1bHRhdEVjYXJ0ZXIge1xuICAgIDAlICAgeyBsZXR0ZXItc3BhY2luZzogMDsgfVxuICAgIDEwMCUgeyBsZXR0ZXItc3BhY2luZzogMC4zZW07IH1cbn1cblxuLnZ1ZUJhZGdlUmVzdWx0YXROb21DaGlmZnJlcyB7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuM2VtO1xufVxuXG4udnVlQmFkZ2VSZXN1bHRhdC52dWVBbmltZXIgLnZ1ZUJhZGdlUmVzdWx0YXROb21DaGlmZnJlcyB7XG4gICAgYW5pbWF0aW9uOiB2dWVCYWRnZVJlc3VsdGF0RWNhcnRlciA1MDBtcyBjdWJpYy1iZXppZXIoMC4zNCwgMS41NiwgMC42NCwgMSkgMTAwbXMgYm90aDtcbn1cblxuLnZ1ZUJhZGdlUmVzdWx0YXROdW1lcm8ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAxO1xuICAgIGZvbnQtc2l6ZTogMC43NWVtO1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyKTtcbiAgICBvcGFjaXR5OiAwLjc7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4vKiBTw6lwYXJhdGV1cnMgZGlyZWN0aW9ubmVscyAqL1xuLnZ1ZVNlcGFyYXRldXJILFxuLnZ1ZVNlcGFyYXRldXJWIHtcbiAgICBmbGV4LXNocmluazogMDtcbiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY291bGV1clNlY29uZGFpcmUpIDE1JSwgdHJhbnNwYXJlbnQpO1xufVxuXG4udnVlU2VwYXJhdGV1ckggeyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxcHg7IH1cbi52dWVTZXBhcmF0ZXVyViB7IGhlaWdodDogMTAwJTsgd2lkdGg6IDFweDsgfVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEZPUk1VTEFJUkUgQUNDw4hTIENPREUgKHBhcnRhZ8OpIHLDqWdpZSArIGJvcm5lKVxuICAgU3R5bGVzIGNvbW11bnMgcG91ciBsYSBzYWlzaWUgZHUgY29kZSA1IGxldHRyZXNcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBQQUdFIEQnQUNDw4hTIENPREUg4oCUIExheW91dCBwYXJ0YWfDqVxuICAgVXRpbGlzw6kgcGFyIHJlZ2llQWNjZXMudHdpZyBldCBib3JuZUFjY2VzLnR3aWdcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5wYWdlQWNjZXNDb2RlIHtcbiAgICBtaW4taGVpZ2h0OiAxMDB2aDtcbiAgICBtaW4taGVpZ2h0OiAxMDBkdmg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDIpO1xufVxuXG4uY29udGVudUFjY2VzQ29kZSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWF4LXdpZHRoOiA0MDBweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgcGFkZGluZzogNDBweCAzMnB4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjIpO1xuICAgIGJveC1zaGFkb3c6IHZhcigtLW9tYnJlUG9ydGVlKTtcbn1cblxuLmNvbnRlbnVBY2Nlc0NvZGUgaDEge1xuICAgIGZvbnQ6IHZhcigtLWZIMik7XG4gICAgbWFyZ2luLWJvdHRvbTogMTJweDtcbn1cblxuLmFjY2VzQ29kZUluc3RydWN0aW9uIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICBtYXJnaW4tYm90dG9tOiAyNHB4O1xufVxuXG4uY29udGVudUFjY2VzQ29kZSAuYWxlcnRFcnJldXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNSb3VnZTZhaHQpO1xuICAgIGNvbG9yOiB2YXIoLS1jUm91Z2U2KTtcbiAgICBwYWRkaW5nOiAxMnB4IDE2cHg7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG59XG5cbi5jb250ZW51QWNjZXNDb2RlIC5hbGVydEJsb2NhZ2Uge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNPckZvbmQpO1xuICAgIGNvbG9yOiB2YXIoLS1jT3JoKTtcbiAgICBwYWRkaW5nOiAyNHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIyKTtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbn1cblxuLmNvbnRlbnVBY2Nlc0NvZGUgLmFsZXJ0QmxvY2FnZSBwIHtcbiAgICBtYXJnaW46IDAgMCA4cHg7XG59XG5cbi5jb250ZW51QWNjZXNDb2RlIC5hbGVydEJsb2NhZ2UgcDpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xufVxuXG4uZm9ybUFjY2VzQ29kZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogdmFyKC0tZ2FwTGFyZ2UpO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQ0hBTVAgQ09ERSDigJQgU2Fpc2llIDUgbGV0dHJlc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmNoYW1wQ29kZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luLWJvdHRvbTogMTVweDtcbn1cblxuLmlucHV0Q29kZUFjY2VzIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXgtd2lkdGg6IDI0MHB4O1xuICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgZm9udDogdmFyKC0tZkgxKTtcbiAgICBmb250LWZhbWlseTogdmFyKC0tZmZNb25vKTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4zZW07XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJGb3JtKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMik7XG59XG5cbi5pbnB1dENvZGVBY2Nlczo6cGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjUpO1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjNlbTtcbn1cblxuLmlucHV0Q29kZUFjY2VzOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY0Zvcm1Gb2N1cyk7XG4gICAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHZhcigtLWNGb3JtRm9jdXNIYWxvKTtcbn1cblxuLmJ0bkFjY2VkZXIge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBhZGRpbmc6IDE4cHggMjRweDtcbiAgICBmb250OiB2YXIoLS1mQ3RhMTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jQ3RhdCk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0N0YSk7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cztcbn1cblxuLmJ0bkFjY2VkZXI6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNDdGFoKTtcbn1cblxuLyogQm91dG9uIHRvZ2dsZSB2aXNpYmlsaXTDqSBkdSBjb2RlICovXG4uYnRuVG9nZ2xlUGFzc3dvcmQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICByaWdodDogNTVweDtcbiAgICB0b3A6IDQ1JTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgd2lkdGg6IDI4cHg7XG4gICAgaGVpZ2h0OiAyOHB4O1xuICAgIHBhZGRpbmc6IDRweDtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjQpO1xuICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMTVzO1xufVxuXG4uYnRuVG9nZ2xlUGFzc3dvcmQ6aG92ZXIge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjIpO1xufVxuXG4uYnRuVG9nZ2xlUGFzc3dvcmQgc3ZnIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG59XG5cbi8qIMOJdGF0IHBhciBkw6lmYXV0IDogxZNpbCBiYXJyw6kgdmlzaWJsZSAoY29kZSBtYXNxdcOpKSAqL1xuLmJ0blRvZ2dsZVBhc3N3b3JkIC5pY29uZU9laWwge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5idG5Ub2dnbGVQYXNzd29yZCAuaWNvbmVPZWlsQmFycmUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4vKiDDiXRhdCB2aXNpYmxlIDogxZNpbCBub3JtYWwgdmlzaWJsZSAoY29kZSBhZmZpY2jDqSkgKi9cbi5idG5Ub2dnbGVQYXNzd29yZC52aXNpYmxlIC5pY29uZU9laWwge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4uYnRuVG9nZ2xlUGFzc3dvcmQudmlzaWJsZSAuaWNvbmVPZWlsQmFycmUge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgU1VSQ09VQ0hFIETDiU1PIOKAlCBwb3AtdXAgaWZyYW1lIChjb21wb3NhbnQgbm95YXUpXG5cbiAgIE91dnJlIHVuZSBkw6ltbyAoYW5pbWF0aW9uIG91IHNjw6luYXJpbykgZGFucyBsYSBwYWdlIHF1YW5kIGxhIGZlbsOqdHJlIGVzdFxuICAgYXNzZXogZ3JhbmRlLCBhdSBsaWV1IGQndW4gbm91dmVsIG9uZ2xldC4gVW4gc2V1bCBzeXN0w6htZSBwb3VyIHRvdXRlcyBsZXNcbiAgIGTDqW1vcywgUsOpZ2llIGNvbW1lIFZpdHJpbmUgKGTDqWNpc2lvbiBQTyAyMDI2LTA3LTE4KS5cblxuICAgRGVzaWduIERVUExJUVXDiSBkZSBsYSBtb2RhbGUgUsOpZ2llICg1Nl9zY2VuYXJpby9fbW9kYWxlLmNzcykgc291cyB1biBhdXRyZVxuICAgbm9tIOKAlCBsJ2FyYml0cmFnZSBkZSBmdXNpb24gdmllbmRyYSBwbHVzIHRhcmQgKGTDqWNpc2lvbiBQTyAyMDI2LTA3LTE4KS5cblxuICAgTWFya3VwIGfDqW7DqXLDqSBwYXIgc3VyY291Y2hlRGVtby50cyAobm95YXUpIHN1ciBsZXMgZMOpY2xlbmNoZXVycyBbZGF0YS1kZW1vXVxuICAgKGxpZW5zIGhyZWYgb3UgYm91dG9ucyBkYXRhLXVybCksIGF1Y3VuIHRlbXBsYXRlIDpcbiAgIC5zdXJjb3VjaGUgPiAuc3VyY291Y2hlQ29udGVudSA+IC5zdXJjb3VjaGVCYXJyZSAocGxlaW4gw6ljcmFuICsgY3JvaXgpICsgLnN1cmNvdWNoZUlmcmFtZVxuXG4gICBMZXMgc2V1aWxzIGQnb3V2ZXJ0dXJlIChpZnJhbWUgMTYvOSBkJ2F1IG1vaW5zIDk2MMOXNTQwICsgbWFyZ2VzIDgwLzEyMClcbiAgIHZpdmVudCBkYW5zIHN1cmNvdWNoZURlbW8udHMg4oCUIGdhcmRlciBUUyBldCBkaW1lbnNpb25uZW1lbnQgQ1NTIGFsaWduw6lzLlxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLnN1cmNvdWNoZSB7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJveC1zaGFkb3c6IHZhcigtLW9tYnJlTW9kYWxlKTtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbn1cblxuLnN1cmNvdWNoZTo6YmFja2Ryb3Age1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNPdmVybGF5KTtcbn1cblxuLnN1cmNvdWNoZUNvbnRlbnUge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xufVxuXG4uc3VyY291Y2hlQmFycmUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBib3JkZXItYm90dG9tOiB2YXIoLS1ib3JkZXIpO1xufVxuXG4vKiBCb3V0b25zIGRlIGxhIGJhcnJlIDogbCdpY8O0bmUgZXN0IGRlc3NpbsOpZSBwYXIgOjpiZWZvcmUgKG1hc2sgU1ZHKSDigJQgZGVzaWduIGR1XG4gICAubW9kYWxlQ2xvc2UgKGJvdXRvbkZlcm1ldHVyZS5tZCkgOiBsZSBib3V0b24gcmVzdGUgVklERSBlbiBIVE1MLiAqL1xuLnN1cmNvdWNoZUNsb3NlLFxuLnN1cmNvdWNoZVBsZWluRWNyYW4ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICB3aWR0aDogNDRweDtcbiAgICBoZWlnaHQ6IDQ0cHg7XG4gICAgcGFkZGluZzogMDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnM7XG59XG5cbi5zdXJjb3VjaGVDbG9zZTpob3Zlcixcbi5zdXJjb3VjaGVQbGVpbkVjcmFuOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMik7XG59XG5cbi5zdXJjb3VjaGVDbG9zZTo6YmVmb3JlLFxuLnN1cmNvdWNoZVBsZWluRWNyYW46OmJlZm9yZSB7XG4gICAgY29udGVudDogJyc7XG4gICAgd2lkdGg6IDI0cHg7XG4gICAgaGVpZ2h0OiAyNHB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNOb2lyMSk7XG59XG5cbi5zdXJjb3VjaGVDbG9zZTo6YmVmb3JlIHtcbiAgICBtYXNrOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDbGluZSB4MT0nMTgnIHkxPSc2JyB4Mj0nNicgeTI9JzE4Jy8lM0UlM0NsaW5lIHgxPSc2JyB5MT0nNicgeDI9JzE4JyB5Mj0nMTgnLyUzRSUzQy9zdmclM0VcIikgY2VudGVyIC8gY29udGFpbiBuby1yZXBlYXQ7XG4gICAgLXdlYmtpdC1tYXNrOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDbGluZSB4MT0nMTgnIHkxPSc2JyB4Mj0nNicgeTI9JzE4Jy8lM0UlM0NsaW5lIHgxPSc2JyB5MT0nNicgeDI9JzE4JyB5Mj0nMTgnLyUzRSUzQy9zdmclM0VcIikgY2VudGVyIC8gY29udGFpbiBuby1yZXBlYXQ7XG59XG5cbi5zdXJjb3VjaGVQbGVpbkVjcmFuOjpiZWZvcmUge1xuICAgIG1hc2s6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J004IDNINWEyIDIgMCAwIDAtMiAydjMnLyUzRSUzQ3BhdGggZD0nTTIxIDhWNWEyIDIgMCAwIDAtMi0yaC0zJy8lM0UlM0NwYXRoIGQ9J00zIDE2djNhMiAyIDAgMCAwIDIgMmgzJy8lM0UlM0NwYXRoIGQ9J00xNiAyMWgzYTIgMiAwIDAgMCAyLTJ2LTMnLyUzRSUzQy9zdmclM0VcIikgY2VudGVyIC8gY29udGFpbiBuby1yZXBlYXQ7XG4gICAgLXdlYmtpdC1tYXNrOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcGF0aCBkPSdNOCAzSDVhMiAyIDAgMCAwLTIgMnYzJy8lM0UlM0NwYXRoIGQ9J00yMSA4VjVhMiAyIDAgMCAwLTItMmgtMycvJTNFJTNDcGF0aCBkPSdNMyAxNnYzYTIgMiAwIDAgMCAyIDJoMycvJTNFJTNDcGF0aCBkPSdNMTYgMjFoM2EyIDIgMCAwIDAgMi0ydi0zJy8lM0UlM0Mvc3ZnJTNFXCIpIGNlbnRlciAvIGNvbnRhaW4gbm8tcmVwZWF0O1xufVxuXG4vKiAxNi85LCBhdXNzaSBncmFuZCBxdWUgbGEgZmVuw6p0cmUgbGUgcGVybWV0IChtYXJnZXMgOiA4MCBlbiBsYXJnZXVyLCAxMjAgZW5cbiAgIGhhdXRldXIg4oCUIGxhIGJhcnJlIGRlIGxhIHN1cmNvdWNoZSArIGwnYWlyIGF1dG91cikuICovXG4uc3VyY291Y2hlSWZyYW1lIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgd2lkdGg6IG1pbihjYWxjKDEwMHZ3IC0gODBweCksIGNhbGMoKDEwMHZoIC0gMTIwcHgpICogMTYgLyA5KSk7XG4gICAgYXNwZWN0LXJhdGlvOiAxNiAvIDk7XG59XG4iLCJmaWVsZHNldCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY0JsYW5jKTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlcik7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIG1hcmdpbjogMTBweCAwO1xuICAgIHBhZGRpbmc6IDIwcHg7XG59XG5cbmZpZWxkc2V0IGgzIHtcbiAgICBtYXJnaW46IDAgMCAwLjkzNzVyZW07XG4gICAgY29sb3I6IHZhcigtLWNMaW5rKTtcbn1cblxuaHIge1xuICAgIG1hcmdpbjogMzBweCAwO1xuICAgIGJvcmRlci10b3A6IHZhcigtLWJvcmRlcik7XG4gICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbn1cblxuaHIubWluaSB7XG4gICAgbWFyZ2luOiAxMHB4IDA7XG4gICAgYm9yZGVyLXRvcDogdmFyKC0tYm9yZGVyKTtcbiAgICBib3JkZXItYm90dG9tOiBub25lO1xufVxuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbiNpbWdGb3JtIHtcbiAgICBtYXgtd2lkdGg6IDY5MHB4O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbjogMTVweCAwO1xufVxuXG4jaW1nRm9ybSA+IGRpdjpsYXN0LWNoaWxkIHtcbiAgICBhc3BlY3QtcmF0aW86IDExMDAvNDQ5O1xuICAgIG1heC13aWR0aDogNjkwcHg7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLXRvcDogNjBweDtcbiAgICBtYXJnaW4tYm90dG9tOiAyMDBweDtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbiNkaXZGb3JtIHtcbiAgICBtYXgtd2lkdGg6IDY5MHB4O1xuICAgIHBhZGRpbmc6IDAgNXB4O1xufVxuXG4jZGl2R2xvYmFsRm9ybSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBnYXA6IDEwcHg7XG59XG4qL1xuXG5cbkBtZWRpYSBhbGwgYW5kIChtaW4td2lkdGg6IDE1MDBweCkge1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuICAgICNkaXZHbG9iYWxGb3JtIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGdhcDogMzBweDtcbiAgICB9XG5cbiAgICAjZGl2Rm9ybSBkaXY6bGFzdC1jaGlsZCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cblxuICAgICNkaXZGb3JtIHtcbiAgICAgICAgcGFkZGluZzogMCAzMHB4O1xuICAgIH1cblxuICAgICNpbWdGb3JtIGRpdjpsYXN0LWNoaWxkIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICAgICovXG59XG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuaW5wdXQucGhOb2lyOjpwbGFjZWhvbGRlciB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyKTtcbn1cbiovXG5cbmxhYmVsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgICBmb250OiB2YXIoLS1mTGFiZWwpO1xuICAgIG1hcmdpbjogMCAwIDJweDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xuICAgIHVzZXItc2VsZWN0OiBub25lO1xufVxuXG4vKiBMYWJlbCBmYWN1bHRhdGlmIDogY291bGV1ciBhdHTDqW51w6llICovXG5sYWJlbDpoYXMoLmZhY3VsdGF0aWYpIHtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cblxuLyogQ29udGVuZXVyIGTDqXNhY3RpdsOpIChjaGFtcCBkaXNhYmxlZCkgKi9cbi5kaXNhYmxlZERpdiB7XG4gICAgb3BhY2l0eTogMC41O1xufVxuXG5pbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJJbnB1dCk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIHBhZGRpbmc6IDdweCA4cHg7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLyogSW5wdXRzIHNww6ljaWF1eCA6IHBhcyBkZSB3aWR0aCAxMDAlICovXG5pbnB1dFt0eXBlPVwiY29sb3JcIl0sXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0sXG5pbnB1dFt0eXBlPVwicmFkaW9cIl0sXG5pbnB1dFt0eXBlPVwicmFuZ2VcIl0ge1xuICAgIHdpZHRoOiBhdXRvO1xufVxuXG4vKiBJbnB1dCBjb3VsZXVyICovXG5pbnB1dFt0eXBlPVwiY29sb3JcIl0ge1xuICAgIHBhZGRpbmc6IDJweDtcbiAgICBoZWlnaHQ6IDQwcHg7XG4gICAgbWluLXdpZHRoOiA2MHB4O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuaW5wdXQ6ZGlzYWJsZWQsXG5zZWxlY3Q6ZGlzYWJsZWQsXG50ZXh0YXJlYTpkaXNhYmxlZCB7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBib3JkZXI6IDFweCBkYXNoZWQgdmFyKC0tY0JsYW5jNSk7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbmlucHV0W3R5cGU9XCJmaWxlXCJdIHtcbiAgICBwYWRkaW5nOiA1cHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG59XG5cbmlucHV0W3R5cGU9XCJmaWxlXCJdOjpmaWxlLXNlbGVjdG9yLWJ1dHRvbiB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNCbGFuYyk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0N0YSk7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBwYWRkaW5nOiA2cHggMTJweDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xufVxuXG5pbnB1dFt0eXBlPVwiZmlsZVwiXTo6ZmlsZS1zZWxlY3Rvci1idXR0b246aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNDdGFoKTtcbn1cblxuaW5wdXQ6OnBsYWNlaG9sZGVyLFxudGV4dGFyZWE6OnBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogdmFyKC0tY05vaXI1KTtcbn1cblxudGV4dGFyZWE6OnBsYWNlaG9sZGVyIHtcbiAgICB3aGl0ZS1zcGFjZTogcHJlLWxpbmU7XG59XG5cblxubGFiZWwgLmZhY3VsdGF0aWYgLyosIGxhYmVsIC5mYWN1bHRhdGlmU3BhbiwgbGFiZWwgLm1vZGlmaWFibGUgKGludXRpbGlzw6kgMjAyNi0wNi0xMykgKi8ge1xuICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICBjb2xvcjogdmFyKC0tY0JsZXU3X3QpO1xuICAgIGZvbnQ6IHZhcigtLWZMaWdodDE0KTtcbiAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7XG4gICAgdGV4dC10cmFuc2Zvcm06IGxvd2VyY2FzZTtcbn1cblxuLyogQ2FjaGVyIFwiRmFjdWx0YXRpZlwiIHN1ciBsZXMgY2hhbXBzIGNvbmRpdGlvbm5lbHMgKi9cbmxhYmVsLnNhbnNGYWN1bHRhdGlmIC5mYWN1bHRhdGlmIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBUZXh0ZXMgZCdhaWRlICovXG5mb3JtIHNtYWxsLFxuZm9ybSBzbWFsbCBhLFxuLmhlbHAtdGV4dCB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyNCk7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIG1heC13aWR0aDogY2FsYygxMDB2dyAtIDg1cHgpO1xuICAgIHBhZGRpbmc6IDJweCAwO1xufVxuXG4uaGVscC10ZXh0LmhlbHAtYWxlcnRlIHtcbiAgICBjb2xvcjogdmFyKC0tY1JvdWdlNik7XG59XG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbmRpdi5jYkZvcm0gaW5wdXQge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB3aWR0aDogYXV0bztcbiAgICBtYXJnaW4tdG9wOiAwO1xufVxuXG5kaXYuY2JGb3JtIGxhYmVsIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdGV4dC1hbGlnbjoganVzdGlmeTtcbn1cbiovXG5cbmZvcm0ge1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBtYXgtd2lkdGg6IDYwMHB4O1xuICAgIG1pbi13aWR0aDogYXV0bztcbiAgICB3aWR0aDogMTAwJTtcbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG5mb3JtID4gZGl2ID4gZGl2LnJvd0Zvcm0gZGl2IHtcbiAgICBtYXJnaW46IDVweCAwO1xufVxuXG5mb3JtID4gZGl2LnJvd0Zvcm0ge1xuICAgIG1hcmdpbjogMDtcbn1cblxuZm9ybSA+IGRpdi5yb3dGb3JtIGRpdi5yb3dGb3JtRG93blR4dCB7XG4gICAgbWFyZ2luOiAwIDIwcHg7XG59XG5cbmZvcm0gPiBkaXYucm93Rm9ybSBkaXYucm93Rm9ybURvd25UeHQgPiBkaXYge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBib3JkZXI6IDNweCBzb2xpZCB2YXIoLS1jQmxhbmMwMyk7XG4gICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgICBtYXJnaW46IDA7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY0JsYW5jKTtcbn1cbiovXG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuLmluZm9MaWdodCB7XG4gICAgb3BhY2l0eTogLjg7XG59XG4qL1xuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbiNmb3JtR2FpbkltZyB7XG4gICAgZ3JpZC1jb2x1bW46IDEgLyAyO1xufVxuXG4jZm9ybUZvcm11bGFpcmUge1xuICAgIGdyaWQtY29sdW1uOiAyIC8gMztcbiAgICBtYXgtd2lkdGg6IDMyMHB4O1xufVxuXG5wI3BNTCB7XG4gICAgbWFyZ2luOiAwIDEwJSAwIDM4JTtcbiAgICBncmlkLWNvbHVtbjogMS8zO1xufVxuKi9cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4ucm93Rm9ybSB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDEwMCUgMCU7XG59XG5cbi5yb3dGb3JtIHVsIHtcbiAgICBjb2xvcjogdmFyKC0tY1JvdWdlKTtcbiAgICBtYXJnaW4tYmxvY2stc3RhcnQ6IDNweDtcbiAgICBtYXJnaW4tYmxvY2stZW5kOiAzcHg7XG4gICAgcGFkZGluZzogMTBweCAwIDA7XG59XG4qL1xuXG4vKiBDaGVja2JveCAoLmRpdkNiKSAtIFN0cnVjdHVyZSA6IC5kaXZDYiA+IGlucHV0ICsgbGFiZWwgPiAuc3ZnQ2IgKyB0ZXh0ZSAqL1xuLmRpdkNiIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luOiA1cHggMDtcbn1cblxuLmRpdkNiIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIG9wYWNpdHk6IDA7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHdpZHRoOiAwO1xuICAgIGhlaWdodDogMDtcbn1cblxuLmRpdkNiIGxhYmVsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBtYXJnaW46IDA7XG59XG5cbi5kaXZDYiBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl06ZGlzYWJsZWQgfiBsYWJlbCB7XG4gICAgb3BhY2l0eTogMC42NTtcbn1cblxuLnN2Z0NiIHtcbiAgICB3aWR0aDogMjJweDtcbiAgICBoZWlnaHQ6IDIycHg7XG4gICAgY29sb3I6IHZhcigtLWNCbGFuYyk7XG4gICAgZmxleC1zaHJpbms6IDA7XG59XG5cbi5zdmdDYiAuY2hlY2tlZCB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLnN2Z0NiIC5jaGVja2VkIHBhdGgge1xuICAgIGZpbGw6IHZhcigtLWNOb2lyMSk7XG59XG5cbmlucHV0W3R5cGU9XCJjaGVja2JveFwiXTpjaGVja2VkIH4gbGFiZWwgLnN2Z0NiIC5jaGVja2VkIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbn1cblxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdOmNoZWNrZWQgfiBsYWJlbCAuc3ZnQ2IgLmZvbmRDYiB7XG4gICAgZmlsbDogdmFyKC0tY0Zvcm0pO1xufVxuXG4uZGl2Q2JTdXBwIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXTpjaGVja2VkIH4gbGFiZWwgLnN2Z0NiIHN2ZyAuY2hlY2tlZCBwYXRoIHtcbiAgICBmaWxsOiB2YXIoLS1jUm91Z2UpO1xufVxuXG4vKiBSYWRpbyBidXR0b24gKC5kaXZSYikgLSBTdHJ1Y3R1cmUgOiAuZGl2UmIgPiBpbnB1dCArIGxhYmVsID4gLnN2Z1JiICsgdGV4dGUgKi9cbi5kaXZSYiB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbjogOHB4IDAgNXB4O1xufVxuXG4uZGl2UmIgaW5wdXRbdHlwZT1cInJhZGlvXCJdIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgb3BhY2l0eTogMDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgd2lkdGg6IDA7XG4gICAgaGVpZ2h0OiAwO1xufVxuXG4uZGl2UmIgbGFiZWwge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIG1hcmdpbjogMDtcbn1cblxuLnN2Z1JiIHtcbiAgICB3aWR0aDogMjJweDtcbiAgICBoZWlnaHQ6IDIycHg7XG4gICAgY29sb3I6IHZhcigtLWNCbGV1NCk7XG4gICAgZmxleC1zaHJpbms6IDA7XG59XG5cbi5zdmdSYiAuY2hlY2tlZCB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuaW5wdXRbdHlwZT1cInJhZGlvXCJdOmNoZWNrZWQgfiBsYWJlbCAuc3ZnUmIgLmNoZWNrZWQge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuXG5pbnB1dFt0eXBlPVwicmFkaW9cIl06Y2hlY2tlZCB+IGxhYmVsIC5zdmdSYiAuZm9uZENiIHtcbiAgICBmaWxsOiB2YXIoLS1jRm9ybSk7XG59XG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuI3VwbG9hZEJ0bjE6Zm9jdXMge1xuICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCB2YXIoLS1jRm9ybSk7XG59XG4qL1xuXG5pbnB1dDpmb2N1cyxcbnNlbGVjdDpmb2N1cyxcbnRleHRhcmVhOmZvY3VzIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNGb3JtRm9jdXMpO1xuICAgIG91dGxpbmU6IDJweCBzb2xpZCB2YXIoLS1jRm9ybUZvY3VzKTtcbn1cblxubGFiZWwgc21hbGwge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTZweCk7XG59XG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuLnJvd0Zvcm1Eb3duVHh0IHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuKi9cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4jaG9tZURpdkhhdXQge1xuICAgIHBhZGRpbmc6IDE1cHggMTVweCAxcHg7XG59XG5cbiNob21lRGl2IGJ1dHRvbi5idG4ge1xuICAgIGJvdHRvbTogNDdweDtcbn1cblxuLmZvcm11bGFpcmUgI2FjY3JvY2hlUGFnZSB7XG4gICAgbWFyZ2luLWJvdHRvbTogLTYwcHg7XG59XG5cbiNob21lRGl2QmFzIHtcbiAgICBwYWRkaW5nOiAxcHg7XG4gICAgbWFyZ2luOiBhdXRvO1xuICAgIHdpZHRoOiA4MCU7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuKi9cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4ucm93T3B0aW4xLFxuLnJvd09wdGluMixcbi5yb3dPcHRpbjMsXG4ucm93T3B0aW40IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luOiA1cHggMDtcbn1cblxuLnJvd09wdGluMSBsYWJlbCBhIHtcbiAgICBwYWRkaW5nOiAwO1xufVxuKi9cblxuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbiNkaXZGb3JtIGRpdiAjbG9hZGluZ0JhclNwaW5uZXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgbWFyZ2luOiAyMHB4O1xuICAgIGZvbnQ6IHZhcigtLWZMYWJlbCk7XG4gICAgY29sb3I6IHZhcigtLWNUZXh0ZTEpO1xuICAgIHBhZGRpbmc6IDE1cHggMzBweDtcbn1cbiovXG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuI3NwaW5uZXJJY29uIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IDE4cHg7XG4gICAgaGVpZ2h0OiAxOHB4O1xuICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgICBib3JkZXI6IHNvbGlkIDJweCB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItdG9wLWNvbG9yOiB2YXIoLS1jVGV4dGUxKTtcbiAgICBib3JkZXItbGVmdC1jb2xvcjogdmFyKC0tY1RleHRlMSk7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGFuaW1hdGlvbjogYW5pbWVTcGlubmVySWNvbiAxMDAwbXMgbGluZWFyIGluZmluaXRlO1xufVxuXG5Aa2V5ZnJhbWVzIGFuaW1lU3Bpbm5lckljb24ge1xuICAgIDAlIHtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gICAgfVxuICAgIDEwMCUge1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICAgIH1cbn1cbiovXG5cbi5jdGFTdXBwcmltZXIsXG4uY3RhU2Vjb25kYWlyZSxcbi5jdGFWYWxpZGVyIC8qLCAuY3RhVmFsaWRlcjIgKGludXRpbGlzw6kgMjAyNi0wNi0xMykgKi8ge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogNTBweDtcbiAgICBwYWRkaW5nOiAxMHB4IDIwcHg7XG4gICAgbWFyZ2luLXRvcDogMjBweDtcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZvbnQ6IHZhcigtLWZDdGExNik7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xufVxuXG4uY3RhU2Vjb25kYWlyZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWNCbGV1NCk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbiAgICBjb2xvcjogdmFyKC0tY0JsZXU0KTtcbn1cblxuLmN0YVZhbGlkZXIgLyosIC5jdGFWYWxpZGVyMiAoaW51dGlsaXPDqSAyMDI2LTA2LTEzKSAqLyB7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGV1NGEpO1xuICAgIGNvbG9yOiB2YXIoLS1jQmxldTRhdCk7XG59XG5cbi5jdGFTdXBwcmltZXIge1xuICAgIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWNCbGFuYzAzKTtcbiAgICBjb2xvcjogdmFyKC0tY1JvdWdlNik7XG59XG5cbi5jdGFWYWxpZGVyOmhvdmVyIC8qLCAuY3RhVmFsaWRlcjI6aG92ZXIgKGludXRpbGlzw6kgMjAyNi0wNi0xMykgKi8ge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGV1NGFoKTtcbiAgICBjb2xvcjogdmFyKC0tY0JsZXU0aHQpO1xufVxuXG4uY3RhVmFsaWRlcjpkaXNhYmxlZCxcbi8qIC5jdGFWYWxpZGVyMjpkaXNhYmxlZCwgKGludXRpbGlzw6kgMjAyNi0wNi0xMykgKi9cbi5jdGFTZWNvbmRhaXJlOmRpc2FibGVkLFxuLmN0YVN1cHByaW1lcjpkaXNhYmxlZCB7XG4gICAgb3BhY2l0eTogMC40O1xuICAgIGN1cnNvcjogd2FpdDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICBmaWx0ZXI6IGdyYXlzY2FsZSgxKTtcbn1cblxuLmZvcm11bGFpcmUge1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG4gICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjUwcHgpIHtcblxuICAgIC5mb3JtdWxhaXJlIHtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyO1xuICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IGF1dG87XG4gICAgICAgIGdhcDogMCB2YXIoLS1nYXBMaXN0ZSk7IC8qIGFsaWduw6kgMzAgLT4gMzJweCAow6ljaGVsbGUgUE8gMjAyNi0wNy0xOCkgKi9cbiAgICB9XG5cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbiAgICAuZm9ybXVsYWlyZUJvcm5lIHtcbiAgICAgICAgZ3JpZC1jb2x1bW46IDEgLyAyO1xuICAgICAgICBncmlkLXJvdzogMSAvIDI7XG4gICAgfVxuXG4gICAgLmZvcm11bGFpcmVEYXRlIHtcbiAgICAgICAgZ3JpZC1jb2x1bW46IDEgLyAyO1xuICAgICAgICBncmlkLXJvdzogMiAvIDM7XG4gICAgfVxuXG4gICAgLmZvcm11bGFpcmVDb21tZXJjaWFsIHtcbiAgICAgICAgZ3JpZC1jb2x1bW46IDEgLyAyO1xuICAgICAgICBncmlkLXJvdzogMyAvIDQ7XG4gICAgfVxuXG4gICAgLmZvcm11bGFpcmVNYWdhc2luIHtcbiAgICAgICAgZ3JpZC1jb2x1bW46IDIgLyAzO1xuICAgICAgICBncmlkLXJvdzogMSAvIDU7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgfVxuICAgICovXG5cbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG5wI21lc3NhZ2VEYXRlIHtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG59XG5cbnAjbWVzc2FnZURhdGUuZXJyZXVyRGF0ZSxcbnAjbWVzc2FnZURhdGUyLmVycmV1ckRhdGUge1xuICAgIGNvbG9yOiB2YXIoLS1jUm91Z2UpO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbn1cbiovXG5cbmZpZWxkc2V0IHVsIHtcbiAgICBtYXJnaW46IDAgMCAxMHB4IDA7XG59XG5cbmZpZWxkc2V0IHVsIGxpIHtcbiAgICBjb2xvcjogdmFyKC0tY1JvdWdlKTtcbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4uaW1nQm9ybmUge1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gICAgZGlzcGxheTogYmxvY2s7XG59XG4qL1xuXG5sYWJlbC5yZXF1aXJlZCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHdpZHRoOiBtYXgtY29udGVudDtcbn1cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xubGFiZWwucmVxdWlyZWQyOmFmdGVyIHtcbiAgICBjb250ZW50OiBcIipcIjtcbiAgICBtYXJnaW4tbGVmdDogM3B4O1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjIpO1xufVxuKi9cblxudGV4dGFyZWEge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwcHg7XG4gICAgcmVzaXplOiB2ZXJ0aWNhbDtcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=*/