/* ============================================
   TOP DESIGN - Production Stylesheet
   Website: www.topdesign.co.in
   Contact: +91 92660 41927
   ============================================ */

:root {
    --primary: #1a1a2e;
    --secondary: #16213e;
    --accent: #e94560;
    --accent-light: #ff6b6b;
    --gold: #ffd700;
    --light: #f8f9fa;
    --dark: #0f0f1a;
    --text: #333;
    --text-light: #666;
    --white: #ffffff;
    --gradient: linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f3460 100%);
    --gradient-accent: linear-gradient(135deg, #e94560 0%, #ff6b6b 100%);
    --shadow: 0 10px 40px rgba(0,0,0,0.1);
    --shadow-lg: 0 25px 50px rgba(0,0,0,0.15);
}

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

html { scroll-behavior: smooth; }

body {
    font-family: 'Outfit', sans-serif;
    color: var(--text);
    overflow-x: hidden;
    background: var(--white);
    line-height: 1.6;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}

h1, h2, h3, h4 { font-family: 'Playfair Display', serif; line-height: 1.2; }

a { text-decoration: none; color: inherit; }

img { max-width: 100%; height: auto; display: block; }

button { font-family: inherit; cursor: pointer; border: none; background: none; }

/* Scrollbar */
::-webkit-scrollbar { width: 8px; }
::-webkit-scrollbar-track { background: var(--light); }
::-webkit-scrollbar-thumb { background: var(--accent); border-radius: 4px; }
::-webkit-scrollbar-thumb:hover { background: var(--accent-light); }

::selection { background: var(--accent); color: white; }

/* ============================================
   NAVIGATION
   ============================================ */
.navbar {
    position: fixed;
    top: 0;
    width: 100%;
    z-index: 1000;
    padding: 20px 0;
    transition: all 0.4s ease;
    background: transparent;
}

.navbar.scrolled {
    background: rgba(26, 26, 46, 0.95);
    backdrop-filter: blur(20px);
    -webkit-backdrop-filter: blur(20px);
    padding: 15px 0;
    box-shadow: var(--shadow);
}

.nav-container {
    max-width: 1400px;
    margin: 0 auto;
    padding: 0 30px;
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.logo { display: flex; align-items: center; gap: 12px; }

.logo-icon {
    width: 50px;
    height: 50px;
    background: var(--gradient-accent);
    border-radius: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: white;
    font-size: 24px;
    font-weight: 700;
    box-shadow: 0 4px 15px rgba(233, 69, 96, 0.4);
    flex-shrink: 0;
}

.logo-text { color: white; font-size: 28px; font-weight: 700; letter-spacing: 2px; }

.logo-text span { color: var(--accent); }

.nav-links { display: flex; gap: 35px; list-style: none; align-items: center; }

.nav-links a {
    color: white;
    font-weight: 500;
    font-size: 15px;
    position: relative;
    transition: all 0.3s ease;
    padding: 5px 0;
}

.nav-links a::after {
    content: '';
    position: absolute;
    bottom: 0;
    left: 0;
    width: 0;
    height: 2px;
    background: var(--accent);
    transition: width 0.3s ease;
}

.nav-links a:hover::after,
.nav-links a.active::after { width: 100%; }

.nav-links a:hover { color: var(--accent-light); }

.nav-cta {
    background: var(--gradient-accent);
    color: white;
    padding: 12px 28px;
    border-radius: 50px;
    font-weight: 600;
    transition: all 0.3s ease;
    box-shadow: 0 4px 15px rgba(233, 69, 96, 0.3);
    display: inline-block;
}

.nav-cta:hover { transform: translateY(-2px); box-shadow: 0 8px 25px rgba(233, 69, 96, 0.4); }

.mobile-menu-btn { display: none; color: white; font-size: 24px; }

/* ============================================
   HERO SECTION
   ============================================ */
.hero {
    min-height: 100vh;
    background: var(--gradient);
    display: flex;
    align-items: center;
    position: relative;
    overflow: hidden;
    padding-top: 80px;
}

.hero::before {
    content: '';
    position: absolute;
    inset: 0;
    background: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.03'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
    opacity: 0.5;
}

.hero-particles { position: absolute; width: 100%; height: 100%; overflow: hidden; pointer-events: none; }

.particle {
    position: absolute;
    width: 10px;
    height: 10px;
    background: rgba(255,255,255,0.1);
    border-radius: 50%;
    animation: float 15s infinite;
}

@keyframes float {
    0%, 100% { transform: translateY(0) translateX(0); opacity: 0; }
    10% { opacity: 1; }
    90% { opacity: 1; }
    100% { transform: translateY(-100vh) translateX(100px); opacity: 0; }
}

.hero-container {
    max-width: 1400px;
    margin: 0 auto;
    padding: 0 30px;
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 60px;
    align-items: center;
    position: relative;
    z-index: 2;
}

.hero-content h1 { font-size: 64px; color: white; line-height: 1.1; margin-bottom: 20px; font-weight: 700; }

.hero-content h1 span { color: var(--accent); display: block; }

.hero-content p { font-size: 18px; color: rgba(255,255,255,0.8); line-height: 1.8; margin-bottom: 40px; max-width: 500px; }

.hero-buttons { display: flex; gap: 20px; flex-wrap: wrap; }

.btn-primary {
    background: var(--gradient-accent);
    color: white;
    padding: 16px 40px;
    border-radius: 50px;
    font-weight: 600;
    font-size: 16px;
    display: inline-flex;
    align-items: center;
    gap: 10px;
    transition: all 0.3s ease;
    box-shadow: 0 10px 30px rgba(233, 69, 96, 0.3);
    border: none;
}

.btn-primary:hover { transform: translateY(-3px); box-shadow: 0 15px 40px rgba(233, 69, 96, 0.4); }

.btn-outline {
    background: transparent;
    color: white;
    padding: 16px 40px;
    border-radius: 50px;
    font-weight: 600;
    font-size: 16px;
    display: inline-flex;
    align-items: center;
    gap: 10px;
    border: 2px solid rgba(255,255,255,0.3);
    transition: all 0.3s ease;
}

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

.hero-stats {
    display: flex;
    gap: 40px;
    margin-top: 60px;
    padding-top: 40px;
    border-top: 1px solid rgba(255,255,255,0.1);
}

.stat-item h3 { font-size: 36px; color: var(--accent); font-family: 'Outfit', sans-serif; font-weight: 700; }

.stat-item p { font-size: 14px; color: rgba(255,255,255,0.6); margin: 0; }

.hero-visual { position: relative; display: flex; justify-content: center; align-items: center; }

.hero-image-wrapper { position: relative; width: 100%; max-width: 600px; }

.hero-main-image {
    width: 100%;
    border-radius: 20px;
    box-shadow: var(--shadow-lg);
    position: relative;
    z-index: 2;
    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
    height: 450px;
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
}

.hero-main-image::before {
    content: '';
    position: absolute;
    width: 200%;
    height: 200%;
    background: conic-gradient(from 0deg, transparent, rgba(255,255,255,0.1), transparent 30%);
    animation: rotate 4s linear infinite;
}

@keyframes rotate { 100% { transform: rotate(360deg); } }

.hero-float-card {
    position: absolute;
    background: white;
    border-radius: 16px;
    padding: 20px;
    box-shadow: var(--shadow-lg);
    z-index: 3;
    animation: float-card 3s ease-in-out infinite;
}

.hero-float-card.card-1 { top: -20px; left: -30px; }

.hero-float-card.card-2 { bottom: 40px; right: -20px; animation-delay: 1.5s; }

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

.float-card-icon {
    width: 50px;
    height: 50px;
    border-radius: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 24px;
    margin-bottom: 10px;
}

.float-card-icon.purple { background: linear-gradient(135deg, #667eea, #764ba2); color: white; }

.float-card-icon.orange { background: linear-gradient(135deg, #f093fb, #f5576c); color: white; }

.float-card-text { font-size: 14px; font-weight: 600; color: var(--primary); }

.float-card-sub { font-size: 12px; color: var(--text-light); }

/* ============================================
   SERVICES SECTION
   ============================================ */
.services { padding: 100px 0; background: var(--light); }

.section-header { text-align: center; max-width: 700px; margin: 0 auto 60px; padding: 0 20px; }

.section-label {
    display: inline-block;
    background: var(--gradient-accent);
    color: white;
    padding: 8px 20px;
    border-radius: 50px;
    font-size: 13px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 2px;
    margin-bottom: 20px;
}

.section-header h2 { font-size: 48px; color: var(--primary); margin-bottom: 20px; }

.section-header p { font-size: 18px; color: var(--text-light); line-height: 1.7; }

.services-grid {
    max-width: 1400px;
    margin: 0 auto;
    padding: 0 30px;
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
    gap: 30px;
}

.service-card {
    background: white;
    border-radius: 24px;
    padding: 40px;
    transition: all 0.4s ease;
    position: relative;
    overflow: hidden;
    border: 1px solid rgba(0,0,0,0.05);
}

.service-card::before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 5px;
    background: var(--gradient-accent);
    transform: scaleX(0);
    transform-origin: left;
    transition: transform 0.4s ease;
}

.service-card:hover::before { transform: scaleX(1); }

.service-card:hover { transform: translateY(-10px); box-shadow: var(--shadow-lg); }

.service-icon {
    width: 70px;
    height: 70px;
    border-radius: 20px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 28px;
    margin-bottom: 25px;
    transition: all 0.3s ease;
}

.service-card:hover .service-icon { transform: scale(1.1) rotate(5deg); }

.service-icon.web { background: linear-gradient(135deg, #667eea, #764ba2); color: white; }
.service-icon.app { background: linear-gradient(135deg, #f093fb, #f5576c); color: white; }
.service-icon.marketing { background: linear-gradient(135deg, #4facfe, #00f2fe); color: white; }
.service-icon.seo { background: linear-gradient(135deg, #43e97b, #38f9d7); color: white; }
.service-icon.interior { background: linear-gradient(135deg, #fa709a, #fee140); color: white; }
.service-icon.print { background: linear-gradient(135deg, #a8edea, #fed6e3); color: var(--primary); }

.service-card h3 { font-size: 24px; color: var(--primary); margin-bottom: 15px; }

.service-card p { color: var(--text-light); line-height: 1.7; margin-bottom: 20px; }

.service-features { list-style: none; margin-bottom: 25px; }

.service-features li { padding: 8px 0; color: var(--text); font-size: 14px; display: flex; align-items: center; gap: 10px; }

.service-features li i { color: var(--accent); font-size: 12px; }

.service-link { color: var(--accent); font-weight: 600; display: inline-flex; align-items: center; gap: 8px; transition: all 0.3s ease; }

.service-link:hover { gap: 12px; color: var(--accent-light); }

/* ============================================
   PORTFOLIO SECTION
   ============================================ */
.portfolio { padding: 100px 0; background: white; }

.portfolio-filter { display: flex; justify-content: center; gap: 15px; margin-bottom: 50px; flex-wrap: wrap; padding: 0 20px; }

.filter-btn {
    padding: 12px 28px;
    border: 2px solid #e0e0e0;
    background: white;
    border-radius: 50px;
    cursor: pointer;
    font-weight: 600;
    font-size: 14px;
    transition: all 0.3s ease;
    font-family: 'Outfit', sans-serif;
}

.filter-btn:hover,
.filter-btn.active { background: var(--gradient-accent); color: white; border-color: var(--accent); box-shadow: 0 5px 20px rgba(233, 69, 96, 0.3); }

.portfolio-grid {
    max-width: 1400px;
    margin: 0 auto;
    padding: 0 30px;
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));
    gap: 30px;
}

.portfolio-item {
    border-radius: 20px;
    overflow: hidden;
    position: relative;
    cursor: pointer;
    height: 350px;
    background: var(--light);
}

.portfolio-item img { width: 100%; height: 100%; object-fit: cover; transition: all 0.5s ease; }

.portfolio-overlay {
    position: absolute;
    inset: 0;
    background: linear-gradient(to top, rgba(26, 26, 46, 0.95), transparent);
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
    padding: 30px;
    opacity: 0;
    transition: all 0.4s ease;
}

.portfolio-item:hover .portfolio-overlay { opacity: 1; }

.portfolio-item:hover img { transform: scale(1.1); }

.portfolio-overlay h3 { color: white; font-size: 22px; margin-bottom: 8px; transform: translateY(20px); transition: all 0.4s ease 0.1s; }

.portfolio-overlay p { color: rgba(255,255,255,0.8); font-size: 14px; transform: translateY(20px); transition: all 0.4s ease 0.2s; }

.portfolio-item:hover .portfolio-overlay h3,
.portfolio-item:hover .portfolio-overlay p { transform: translateY(0); }

.portfolio-tag {
    position: absolute;
    top: 20px;
    right: 20px;
    background: var(--accent);
    color: white;
    padding: 6px 16px;
    border-radius: 50px;
    font-size: 12px;
    font-weight: 600;
}

/* ============================================
   TESTIMONIALS
   ============================================ */
.testimonials { padding: 100px 0; background: var(--gradient); position: relative; overflow: hidden; }

.testimonials .section-header h2,
.testimonials .section-header p { color: white; }

.testimonials-slider { max-width: 1200px; margin: 0 auto; padding: 0 30px; position: relative; overflow: hidden; }

.testimonials-track { display: flex; gap: 0; transition: transform 0.5s ease; }

.testimonial-card {
    min-width: 100%;
    background: rgba(255,255,255,0.1);
    backdrop-filter: blur(20px);
    -webkit-backdrop-filter: blur(20px);
    border-radius: 24px;
    padding: 50px;
    border: 1px solid rgba(255,255,255,0.1);
    text-align: center;
}

.testimonial-avatar {
    width: 80px;
    height: 80px;
    border-radius: 50%;
    background: var(--gradient-accent);
    margin: 0 auto 25px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 32px;
    color: white;
    font-weight: 700;
}

.testimonial-text { font-size: 20px; color: rgba(255,255,255,0.9); line-height: 1.8; margin-bottom: 30px; font-style: italic; }

.testimonial-author { color: white; font-weight: 600; font-size: 18px; }

.testimonial-role { color: var(--accent-light); font-size: 14px; }

.testimonial-rating { color: var(--gold); margin-bottom: 20px; font-size: 20px; }

.slider-nav { display: flex; justify-content: center; gap: 15px; margin-top: 40px; }

.slider-dot { width: 12px; height: 12px; border-radius: 50%; background: rgba(255,255,255,0.3); cursor: pointer; transition: all 0.3s ease; }

.slider-dot.active { background: var(--accent); width: 30px; border-radius: 6px; }

/* ============================================
   BLOG SECTION
   ============================================ */
.blog { padding: 100px 0; background: var(--light); }

.blog-grid {
    max-width: 1400px;
    margin: 0 auto;
    padding: 0 30px;
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
    gap: 30px;
}

.blog-card {
    background: white;
    border-radius: 24px;
    overflow: hidden;
    transition: all 0.4s ease;
    border: 1px solid rgba(0,0,0,0.05);
}

.blog-card:hover { transform: translateY(-10px); box-shadow: var(--shadow-lg); }

.blog-image { height: 240px; background: var(--gradient); position: relative; overflow: hidden; }

.blog-image img { width: 100%; height: 100%; object-fit: cover; transition: all 0.5s ease; }

.blog-card:hover .blog-image img { transform: scale(1.1); }

.blog-category {
    position: absolute;
    top: 20px;
    left: 20px;
    background: var(--accent);
    color: white;
    padding: 6px 16px;
    border-radius: 50px;
    font-size: 12px;
    font-weight: 600;
}

.blog-content { padding: 30px; }

.blog-meta { display: flex; gap: 20px; margin-bottom: 15px; font-size: 13px; color: var(--text-light); }

.blog-content h3 { font-size: 22px; color: var(--primary); margin-bottom: 15px; line-height: 1.4; }

.blog-content p { color: var(--text-light); line-height: 1.7; margin-bottom: 20px; }

.read-more { color: var(--accent); font-weight: 600; display: inline-flex; align-items: center; gap: 8px; transition: all 0.3s ease; }

.read-more:hover { gap: 12px; }

/* ============================================
   CTA SECTION
   ============================================ */
.cta-section {
    padding: 100px 0;
    background: linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f3460 100%);
    position: relative;
    overflow: hidden;
    text-align: center;
}

.cta-section::before {
    content: '';
    position: absolute;
    width: 600px;
    height: 600px;
    background: radial-gradient(circle, rgba(233, 69, 96, 0.2), transparent 70%);
    top: -200px;
    right: -200px;
    border-radius: 50%;
}

.cta-section::after {
    content: '';
    position: absolute;
    width: 400px;
    height: 400px;
    background: radial-gradient(circle, rgba(255, 107, 107, 0.15), transparent 70%);
    bottom: -100px;
    left: -100px;
    border-radius: 50%;
}

.cta-content { max-width: 800px; margin: 0 auto; padding: 0 30px; position: relative; z-index: 2; }

.cta-content h2 { font-size: 48px; color: white; margin-bottom: 20px; }

.cta-content p { font-size: 18px; color: rgba(255,255,255,0.8); margin-bottom: 40px; line-height: 1.7; }

/* ============================================
   FOOTER
   ============================================ */
.footer { background: var(--dark); padding: 80px 0 0; color: white; }

.footer-grid {
    max-width: 1400px;
    margin: 0 auto;
    padding: 0 30px;
    display: grid;
    grid-template-columns: 2fr 1fr 1fr 1fr;
    gap: 60px;
    margin-bottom: 60px;
}

.footer-brand p { color: rgba(255,255,255,0.6); line-height: 1.8; margin-bottom: 25px; }

.social-links { display: flex; gap: 15px; }

.social-links a {
    width: 45px;
    height: 45px;
    border-radius: 12px;
    background: rgba(255,255,255,0.1);
    display: flex;
    align-items: center;
    justify-content: center;
    color: white;
    transition: all 0.3s ease;
    font-size: 18px;
}

.social-links a:hover { background: var(--accent); transform: translateY(-3px); }

.footer-column h4 { font-size: 18px; margin-bottom: 25px; color: white; font-family: 'Outfit', sans-serif; font-weight: 600; }

.footer-links { list-style: none; }

.footer-links li { margin-bottom: 12px; }

.footer-links a { color: rgba(255,255,255,0.6); transition: all 0.3s ease; display: inline-flex; align-items: center; gap: 8px; }

.footer-links a:hover { color: var(--accent); padding-left: 5px; }

.footer-contact p { color: rgba(255,255,255,0.6); margin-bottom: 15px; display: flex; align-items: flex-start; gap: 12px; line-height: 1.6; }

.footer-contact i { color: var(--accent); margin-top: 3px; font-size: 16px; flex-shrink: 0; }

.footer-bottom {
    border-top: 1px solid rgba(255,255,255,0.1);
    padding: 30px;
    text-align: center;
    color: rgba(255,255,255,0.5);
    font-size: 14px;
}

/* ============================================
   ENQUIRY POPUP
   ============================================ */
.popup-overlay {
    position: fixed;
    inset: 0;
    background: rgba(0,0,0,0.7);
    backdrop-filter: blur(10px);
    -webkit-backdrop-filter: blur(10px);
    z-index: 2000;
    display: flex;
    align-items: center;
    justify-content: center;
    opacity: 0;
    visibility: hidden;
    transition: all 0.4s ease;
    padding: 20px;
}

.popup-overlay.active { opacity: 1; visibility: visible; }

.popup-container {
    background: white;
    border-radius: 24px;
    width: 100%;
    max-width: 600px;
    max-height: 90vh;
    overflow-y: auto;
    transform: scale(0.9) translateY(20px);
    transition: all 0.4s ease;
    position: relative;
}

.popup-overlay.active .popup-container { transform: scale(1) translateY(0); }

.popup-header {
    background: var(--gradient);
    padding: 40px;
    border-radius: 24px 24px 0 0;
    text-align: center;
    position: relative;
}

.popup-header h2 { color: white; font-size: 28px; margin-bottom: 10px; }

.popup-header p { color: rgba(255,255,255,0.8); }

.popup-close {
    position: absolute;
    top: 20px;
    right: 20px;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background: rgba(255,255,255,0.2);
    color: white;
    font-size: 20px;
    transition: all 0.3s ease;
    display: flex;
    align-items: center;
    justify-content: center;
}

.popup-close:hover { background: var(--accent); }

.popup-body { padding: 40px; }

.form-group { margin-bottom: 25px; }

.form-group label { display: block; margin-bottom: 8px; font-weight: 600; color: var(--primary); font-size: 14px; }

.form-group input,
.form-group select,
.form-group textarea {
    width: 100%;
    padding: 14px 18px;
    border: 2px solid #e8e8e8;
    border-radius: 12px;
    font-family: 'Outfit', sans-serif;
    font-size: 15px;
    transition: all 0.3s ease;
    outline: none;
    background: white;
}

.form-group input:focus,
.form-group select:focus,
.form-group textarea:focus { border-color: var(--accent); box-shadow: 0 0 0 4px rgba(233, 69, 96, 0.1); }

.form-group textarea { resize: vertical; min-height: 120px; }

.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }

.submit-btn {
    width: 100%;
    padding: 16px;
    background: var(--gradient-accent);
    color: white;
    border-radius: 12px;
    font-size: 16px;
    font-weight: 600;
    transition: all 0.3s ease;
    font-family: 'Outfit', sans-serif;
}

.submit-btn:hover { transform: translateY(-2px); box-shadow: 0 10px 30px rgba(233, 69, 96, 0.3); }

.floating-enquiry-btn {
    position: fixed;
    bottom: 30px;
    right: 30px;
    width: 60px;
    height: 60px;
    border-radius: 50%;
    background: var(--gradient-accent);
    color: white;
    font-size: 24px;
    box-shadow: 0 10px 30px rgba(233, 69, 96, 0.4);
    z-index: 999;
    transition: all 0.3s ease;
    display: flex;
    align-items: center;
    justify-content: center;
    animation: pulse 2s infinite;
}

@keyframes pulse {
    0%, 100% { box-shadow: 0 10px 30px rgba(233, 69, 96, 0.4); }
    50% { box-shadow: 0 10px 40px rgba(233, 69, 96, 0.6); }
}

.floating-enquiry-btn:hover { transform: scale(1.1); }

/* ============================================
   TOAST NOTIFICATION
   ============================================ */
.toast {
    position: fixed;
    bottom: 100px;
    right: 30px;
    background: var(--primary);
    color: white;
    padding: 16px 24px;
    border-radius: 12px;
    box-shadow: var(--shadow-lg);
    z-index: 5000;
    transform: translateX(400px);
    transition: all 0.4s ease;
    display: flex;
    align-items: center;
    gap: 12px;
}

.toast.show { transform: translateX(0); }

.toast i { color: var(--accent); font-size: 20px; }

/* ============================================
   SERVICE PAGES
   ============================================ */
.service-page { display: none; padding: 120px 0 80px; background: white; }

.service-page.active { display: block; }

.service-hero { background: var(--gradient); padding: 100px 0; text-align: center; color: white; margin-bottom: 60px; }

.service-hero h1 { font-size: 48px; margin-bottom: 20px; }

.service-hero p { font-size: 18px; opacity: 0.8; max-width: 600px; margin: 0 auto; padding: 0 20px; }

.service-content { max-width: 1200px; margin: 0 auto; padding: 0 30px; }

.service-features-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 30px; margin: 60px 0; }

.feature-box { background: var(--light); padding: 40px; border-radius: 20px; text-align: center; transition: all 0.3s ease; }

.feature-box:hover { transform: translateY(-5px); box-shadow: var(--shadow); }

.feature-box i { font-size: 40px; color: var(--accent); margin-bottom: 20px; }

.feature-box h3 { margin-bottom: 15px; color: var(--primary); }

.feature-box p { color: var(--text-light); line-height: 1.7; }

.process-section { background: var(--light); padding: 80px 0; margin: 60px 0; }

.process-steps { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 30px; max-width: 1200px; margin: 0 auto; padding: 0 30px; }

.process-step { text-align: center; position: relative; }

.step-number { width: 60px; height: 60px; background: var(--gradient-accent); color: white; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 24px; font-weight: 700; margin: 0 auto 20px; }

.process-step h3 { margin-bottom: 10px; color: var(--primary); }

.process-step p { color: var(--text-light); font-size: 14px; }

.back-btn { display: inline-flex; align-items: center; gap: 8px; color: var(--accent); font-weight: 600; margin-bottom: 30px; transition: all 0.3s ease; }

.back-btn:hover { gap: 12px; }

/* ============================================
   ANIMATIONS
   ============================================ */
.fade-in { opacity: 0; transform: translateY(30px); transition: all 0.6s ease; }

.fade-in.visible { opacity: 1; transform: translateY(0); }

/* ============================================
   RESPONSIVE DESIGN
   ============================================ */
@media (max-width: 1024px) {
    .hero-container { grid-template-columns: 1fr; text-align: center; }
    .hero-content p { margin: 0 auto 40px; }
    .hero-buttons { justify-content: center; }
    .hero-stats { justify-content: center; }
    .hero-visual { display: none; }
    .footer-grid { grid-template-columns: 1fr 1fr; }
}

@media (max-width: 768px) {
    .nav-links {
        display: none;
        position: absolute;
        top: 100%;
        left: 0;
        right: 0;
        background: var(--primary);
        flex-direction: column;
        padding: 30px;
        gap: 20px;
    }
    .nav-links.active { display: flex; }
    .mobile-menu-btn { display: block; }
    .hero-content h1 { font-size: 40px; }
    .section-header h2 { font-size: 32px; }
    .services-grid, .portfolio-grid, .blog-grid { grid-template-columns: 1fr; }
    .footer-grid { grid-template-columns: 1fr; gap: 40px; }
    .form-row { grid-template-columns: 1fr; }
    .service-hero h1 { font-size: 36px; }
    .cta-content h2 { font-size: 36px; }
}

@media (max-width: 480px) {
    .hero-content h1 { font-size: 32px; }
    .hero-stats { flex-direction: column; gap: 20px; align-items: center; }
    .section-header h2 { font-size: 28px; }
    .btn-primary, .btn-outline { padding: 14px 28px; font-size: 14px; }
    .popup-body { padding: 25px; }
    .floating-enquiry-btn { width: 50px; height: 50px; font-size: 20px; bottom: 20px; right: 20px; }
}

/* ============================================
   ACCESSIBILITY
   ============================================ */
@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
    }
}

/* Focus styles for keyboard navigation */
a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible {
    outline: 2px solid var(--accent);
    outline-offset: 2px;
}

/* Skip to content link for screen readers */
.skip-link {
    position: absolute;
    top: -40px;
    left: 0;
    background: var(--accent);
    color: white;
    padding: 8px 16px;
    z-index: 10000;
    transition: top 0.3s;
}

.skip-link:focus { top: 0; }

/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jc3MvbWFpbi5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEiLCJmaWxlIjoibWFpbi5taW4uY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFRPUCBERVNJR04gLSBQcm9kdWN0aW9uIFN0eWxlc2hlZXRcbiAgIFdlYnNpdGU6IHd3dy50b3BkZXNpZ24uY28uaW5cbiAgIENvbnRhY3Q6ICs5MSA5MjY2MCA0MTkyN1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuOnJvb3Qge1xuICAgIC0tcHJpbWFyeTogIzFhMWEyZTtcbiAgICAtLXNlY29uZGFyeTogIzE2MjEzZTtcbiAgICAtLWFjY2VudDogI2U5NDU2MDtcbiAgICAtLWFjY2VudC1saWdodDogI2ZmNmI2YjtcbiAgICAtLWdvbGQ6ICNmZmQ3MDA7XG4gICAgLS1saWdodDogI2Y4ZjlmYTtcbiAgICAtLWRhcms6ICMwZjBmMWE7XG4gICAgLS10ZXh0OiAjMzMzO1xuICAgIC0tdGV4dC1saWdodDogIzY2NjtcbiAgICAtLXdoaXRlOiAjZmZmZmZmO1xuICAgIC0tZ3JhZGllbnQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICMxYTFhMmUgMCUsICMxNjIxM2UgNTAlLCAjMGYzNDYwIDEwMCUpO1xuICAgIC0tZ3JhZGllbnQtYWNjZW50OiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjZTk0NTYwIDAlLCAjZmY2YjZiIDEwMCUpO1xuICAgIC0tc2hhZG93OiAwIDEwcHggNDBweCByZ2JhKDAsMCwwLDAuMSk7XG4gICAgLS1zaGFkb3ctbGc6IDAgMjVweCA1MHB4IHJnYmEoMCwwLDAsMC4xNSk7XG59XG5cbiosICo6OmJlZm9yZSwgKjo6YWZ0ZXIgeyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH1cblxuaHRtbCB7IHNjcm9sbC1iZWhhdmlvcjogc21vb3RoOyB9XG5cbmJvZHkge1xuICAgIGZvbnQtZmFtaWx5OiAnT3V0Zml0Jywgc2Fucy1zZXJpZjtcbiAgICBjb2xvcjogdmFyKC0tdGV4dCk7XG4gICAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLXdoaXRlKTtcbiAgICBsaW5lLWhlaWdodDogMS42O1xuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG59XG5cbmgxLCBoMiwgaDMsIGg0IHsgZm9udC1mYW1pbHk6ICdQbGF5ZmFpciBEaXNwbGF5Jywgc2VyaWY7IGxpbmUtaGVpZ2h0OiAxLjI7IH1cblxuYSB7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgY29sb3I6IGluaGVyaXQ7IH1cblxuaW1nIHsgbWF4LXdpZHRoOiAxMDAlOyBoZWlnaHQ6IGF1dG87IGRpc3BsYXk6IGJsb2NrOyB9XG5cbmJ1dHRvbiB7IGZvbnQtZmFtaWx5OiBpbmhlcml0OyBjdXJzb3I6IHBvaW50ZXI7IGJvcmRlcjogbm9uZTsgYmFja2dyb3VuZDogbm9uZTsgfVxuXG4vKiBTY3JvbGxiYXIgKi9cbjo6LXdlYmtpdC1zY3JvbGxiYXIgeyB3aWR0aDogOHB4OyB9XG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsgYmFja2dyb3VuZDogdmFyKC0tbGlnaHQpOyB9XG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsgYmFja2dyb3VuZDogdmFyKC0tYWNjZW50KTsgYm9yZGVyLXJhZGl1czogNHB4OyB9XG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsgYmFja2dyb3VuZDogdmFyKC0tYWNjZW50LWxpZ2h0KTsgfVxuXG46OnNlbGVjdGlvbiB7IGJhY2tncm91bmQ6IHZhcigtLWFjY2VudCk7IGNvbG9yOiB3aGl0ZTsgfVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgTkFWSUdBVElPTlxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi5uYXZiYXIge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB0b3A6IDA7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgei1pbmRleDogMTAwMDtcbiAgICBwYWRkaW5nOiAyMHB4IDA7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuNHMgZWFzZTtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbn1cblxuLm5hdmJhci5zY3JvbGxlZCB7XG4gICAgYmFja2dyb3VuZDogcmdiYSgyNiwgMjYsIDQ2LCAwLjk1KTtcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMjBweCk7XG4gICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoMjBweCk7XG4gICAgcGFkZGluZzogMTVweCAwO1xuICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdyk7XG59XG5cbi5uYXYtY29udGFpbmVyIHtcbiAgICBtYXgtd2lkdGg6IDE0MDBweDtcbiAgICBtYXJnaW46IDAgYXV0bztcbiAgICBwYWRkaW5nOiAwIDMwcHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLmxvZ28geyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDEycHg7IH1cblxuLmxvZ28taWNvbiB7XG4gICAgd2lkdGg6IDUwcHg7XG4gICAgaGVpZ2h0OiA1MHB4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWdyYWRpZW50LWFjY2VudCk7XG4gICAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGJveC1zaGFkb3c6IDAgNHB4IDE1cHggcmdiYSgyMzMsIDY5LCA5NiwgMC40KTtcbiAgICBmbGV4LXNocmluazogMDtcbn1cblxuLmxvZ28tdGV4dCB7IGNvbG9yOiB3aGl0ZTsgZm9udC1zaXplOiAyOHB4OyBmb250LXdlaWdodDogNzAwOyBsZXR0ZXItc3BhY2luZzogMnB4OyB9XG5cbi5sb2dvLXRleHQgc3BhbiB7IGNvbG9yOiB2YXIoLS1hY2NlbnQpOyB9XG5cbi5uYXYtbGlua3MgeyBkaXNwbGF5OiBmbGV4OyBnYXA6IDM1cHg7IGxpc3Qtc3R5bGU6IG5vbmU7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cblxuLm5hdi1saW5rcyBhIHtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBmb250LXNpemU6IDE1cHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7XG4gICAgcGFkZGluZzogNXB4IDA7XG59XG5cbi5uYXYtbGlua3MgYTo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcbiAgICB3aWR0aDogMDtcbiAgICBoZWlnaHQ6IDJweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hY2NlbnQpO1xuICAgIHRyYW5zaXRpb246IHdpZHRoIDAuM3MgZWFzZTtcbn1cblxuLm5hdi1saW5rcyBhOmhvdmVyOjphZnRlcixcbi5uYXYtbGlua3MgYS5hY3RpdmU6OmFmdGVyIHsgd2lkdGg6IDEwMCU7IH1cblxuLm5hdi1saW5rcyBhOmhvdmVyIHsgY29sb3I6IHZhcigtLWFjY2VudC1saWdodCk7IH1cblxuLm5hdi1jdGEge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWdyYWRpZW50LWFjY2VudCk7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIHBhZGRpbmc6IDEycHggMjhweDtcbiAgICBib3JkZXItcmFkaXVzOiA1MHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTtcbiAgICBib3gtc2hhZG93OiAwIDRweCAxNXB4IHJnYmEoMjMzLCA2OSwgOTYsIDAuMyk7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4ubmF2LWN0YTpob3ZlciB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTsgYm94LXNoYWRvdzogMCA4cHggMjVweCByZ2JhKDIzMywgNjksIDk2LCAwLjQpOyB9XG5cbi5tb2JpbGUtbWVudS1idG4geyBkaXNwbGF5OiBub25lOyBjb2xvcjogd2hpdGU7IGZvbnQtc2l6ZTogMjRweDsgfVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgSEVSTyBTRUNUSU9OXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuLmhlcm8ge1xuICAgIG1pbi1oZWlnaHQ6IDEwMHZoO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWdyYWRpZW50KTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcGFkZGluZy10b3A6IDgwcHg7XG59XG5cbi5oZXJvOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBpbnNldDogMDtcbiAgICBiYWNrZ3JvdW5kOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPSc2MCcgaGVpZ2h0PSc2MCcgdmlld0JveD0nMCAwIDYwIDYwJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSdub25lJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnJTNFJTNDZyBmaWxsPSclMjNmZmZmZmYnIGZpbGwtb3BhY2l0eT0nMC4wMyclM0UlM0NwYXRoIGQ9J00zNiAzNHYtNGgtMnY0aC00djJoNHY0aDJ2LTRoNHYtMmgtNHptMC0zMFYwaC0ydjRoLTR2Mmg0djRoMlY2aDRWNGgtNHpNNiAzNHYtNEg0djRIMHYyaDR2NGgydi00aDR2LTJINnpNNiA0VjBINHY0SDB2Mmg0djRoMlY2aDRWNEg2eicvJTNFJTNDL2clM0UlM0MvZyUzRSUzQy9zdmclM0VcIik7XG4gICAgb3BhY2l0eTogMC41O1xufVxuXG4uaGVyby1wYXJ0aWNsZXMgeyBwb3NpdGlvbjogYWJzb2x1dGU7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IG92ZXJmbG93OiBoaWRkZW47IHBvaW50ZXItZXZlbnRzOiBub25lOyB9XG5cbi5wYXJ0aWNsZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHdpZHRoOiAxMHB4O1xuICAgIGhlaWdodDogMTBweDtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMSk7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGFuaW1hdGlvbjogZmxvYXQgMTVzIGluZmluaXRlO1xufVxuXG5Aa2V5ZnJhbWVzIGZsb2F0IHtcbiAgICAwJSwgMTAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKSB0cmFuc2xhdGVYKDApOyBvcGFjaXR5OiAwOyB9XG4gICAgMTAlIHsgb3BhY2l0eTogMTsgfVxuICAgIDkwJSB7IG9wYWNpdHk6IDE7IH1cbiAgICAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMDB2aCkgdHJhbnNsYXRlWCgxMDBweCk7IG9wYWNpdHk6IDA7IH1cbn1cblxuLmhlcm8tY29udGFpbmVyIHtcbiAgICBtYXgtd2lkdGg6IDE0MDBweDtcbiAgICBtYXJnaW46IDAgYXV0bztcbiAgICBwYWRkaW5nOiAwIDMwcHg7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7XG4gICAgZ2FwOiA2MHB4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDI7XG59XG5cbi5oZXJvLWNvbnRlbnQgaDEgeyBmb250LXNpemU6IDY0cHg7IGNvbG9yOiB3aGl0ZTsgbGluZS1oZWlnaHQ6IDEuMTsgbWFyZ2luLWJvdHRvbTogMjBweDsgZm9udC13ZWlnaHQ6IDcwMDsgfVxuXG4uaGVyby1jb250ZW50IGgxIHNwYW4geyBjb2xvcjogdmFyKC0tYWNjZW50KTsgZGlzcGxheTogYmxvY2s7IH1cblxuLmhlcm8tY29udGVudCBwIHsgZm9udC1zaXplOiAxOHB4OyBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjgpOyBsaW5lLWhlaWdodDogMS44OyBtYXJnaW4tYm90dG9tOiA0MHB4OyBtYXgtd2lkdGg6IDUwMHB4OyB9XG5cbi5oZXJvLWJ1dHRvbnMgeyBkaXNwbGF5OiBmbGV4OyBnYXA6IDIwcHg7IGZsZXgtd3JhcDogd3JhcDsgfVxuXG4uYnRuLXByaW1hcnkge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWdyYWRpZW50LWFjY2VudCk7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIHBhZGRpbmc6IDE2cHggNDBweDtcbiAgICBib3JkZXItcmFkaXVzOiA1MHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiAxMHB4O1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7XG4gICAgYm94LXNoYWRvdzogMCAxMHB4IDMwcHggcmdiYSgyMzMsIDY5LCA5NiwgMC4zKTtcbiAgICBib3JkZXI6IG5vbmU7XG59XG5cbi5idG4tcHJpbWFyeTpob3ZlciB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtM3B4KTsgYm94LXNoYWRvdzogMCAxNXB4IDQwcHggcmdiYSgyMzMsIDY5LCA5NiwgMC40KTsgfVxuXG4uYnRuLW91dGxpbmUge1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBwYWRkaW5nOiAxNnB4IDQwcHg7XG4gICAgYm9yZGVyLXJhZGl1czogNTBweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogMTBweDtcbiAgICBib3JkZXI6IDJweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMyk7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTtcbn1cblxuLmJ0bi1vdXRsaW5lOmhvdmVyIHsgYmFja2dyb3VuZDogd2hpdGU7IGNvbG9yOiB2YXIoLS1wcmltYXJ5KTsgYm9yZGVyLWNvbG9yOiB3aGl0ZTsgfVxuXG4uaGVyby1zdGF0cyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBnYXA6IDQwcHg7XG4gICAgbWFyZ2luLXRvcDogNjBweDtcbiAgICBwYWRkaW5nLXRvcDogNDBweDtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEpO1xufVxuXG4uc3RhdC1pdGVtIGgzIHsgZm9udC1zaXplOiAzNnB4OyBjb2xvcjogdmFyKC0tYWNjZW50KTsgZm9udC1mYW1pbHk6ICdPdXRmaXQnLCBzYW5zLXNlcmlmOyBmb250LXdlaWdodDogNzAwOyB9XG5cbi5zdGF0LWl0ZW0gcCB7IGZvbnQtc2l6ZTogMTRweDsgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC42KTsgbWFyZ2luOiAwOyB9XG5cbi5oZXJvLXZpc3VhbCB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cblxuLmhlcm8taW1hZ2Utd3JhcHBlciB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgd2lkdGg6IDEwMCU7IG1heC13aWR0aDogNjAwcHg7IH1cblxuLmhlcm8tbWFpbi1pbWFnZSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYm9yZGVyLXJhZGl1czogMjBweDtcbiAgICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctbGcpO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAyO1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICM2NjdlZWEgMCUsICM3NjRiYTIgMTAwJSk7XG4gICAgaGVpZ2h0OiA0NTBweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmhlcm8tbWFpbi1pbWFnZTo6YmVmb3JlIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgd2lkdGg6IDIwMCU7XG4gICAgaGVpZ2h0OiAyMDAlO1xuICAgIGJhY2tncm91bmQ6IGNvbmljLWdyYWRpZW50KGZyb20gMGRlZywgdHJhbnNwYXJlbnQsIHJnYmEoMjU1LDI1NSwyNTUsMC4xKSwgdHJhbnNwYXJlbnQgMzAlKTtcbiAgICBhbmltYXRpb246IHJvdGF0ZSA0cyBsaW5lYXIgaW5maW5pdGU7XG59XG5cbkBrZXlmcmFtZXMgcm90YXRlIHsgMTAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH0gfVxuXG4uaGVyby1mbG9hdC1jYXJkIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgYm9yZGVyLXJhZGl1czogMTZweDtcbiAgICBwYWRkaW5nOiAyMHB4O1xuICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1sZyk7XG4gICAgei1pbmRleDogMztcbiAgICBhbmltYXRpb246IGZsb2F0LWNhcmQgM3MgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG59XG5cbi5oZXJvLWZsb2F0LWNhcmQuY2FyZC0xIHsgdG9wOiAtMjBweDsgbGVmdDogLTMwcHg7IH1cblxuLmhlcm8tZmxvYXQtY2FyZC5jYXJkLTIgeyBib3R0b206IDQwcHg7IHJpZ2h0OiAtMjBweDsgYW5pbWF0aW9uLWRlbGF5OiAxLjVzOyB9XG5cbkBrZXlmcmFtZXMgZmxvYXQtY2FyZCB7IDAlLCAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyB9IDUwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTVweCk7IH0gfVxuXG4uZmxvYXQtY2FyZC1pY29uIHtcbiAgICB3aWR0aDogNTBweDtcbiAgICBoZWlnaHQ6IDUwcHg7XG4gICAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgZm9udC1zaXplOiAyNHB4O1xuICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG59XG5cbi5mbG9hdC1jYXJkLWljb24ucHVycGxlIHsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzY2N2VlYSwgIzc2NGJhMik7IGNvbG9yOiB3aGl0ZTsgfVxuXG4uZmxvYXQtY2FyZC1pY29uLm9yYW5nZSB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICNmMDkzZmIsICNmNTU3NmMpOyBjb2xvcjogd2hpdGU7IH1cblxuLmZsb2F0LWNhcmQtdGV4dCB7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDYwMDsgY29sb3I6IHZhcigtLXByaW1hcnkpOyB9XG5cbi5mbG9hdC1jYXJkLXN1YiB7IGZvbnQtc2l6ZTogMTJweDsgY29sb3I6IHZhcigtLXRleHQtbGlnaHQpOyB9XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBTRVJWSUNFUyBTRUNUSU9OXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuLnNlcnZpY2VzIHsgcGFkZGluZzogMTAwcHggMDsgYmFja2dyb3VuZDogdmFyKC0tbGlnaHQpOyB9XG5cbi5zZWN0aW9uLWhlYWRlciB7IHRleHQtYWxpZ246IGNlbnRlcjsgbWF4LXdpZHRoOiA3MDBweDsgbWFyZ2luOiAwIGF1dG8gNjBweDsgcGFkZGluZzogMCAyMHB4OyB9XG5cbi5zZWN0aW9uLWxhYmVsIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tZ3JhZGllbnQtYWNjZW50KTtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgcGFkZGluZzogOHB4IDIwcHg7XG4gICAgYm9yZGVyLXJhZGl1czogNTBweDtcbiAgICBmb250LXNpemU6IDEzcHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGxldHRlci1zcGFjaW5nOiAycHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbn1cblxuLnNlY3Rpb24taGVhZGVyIGgyIHsgZm9udC1zaXplOiA0OHB4OyBjb2xvcjogdmFyKC0tcHJpbWFyeSk7IG1hcmdpbi1ib3R0b206IDIwcHg7IH1cblxuLnNlY3Rpb24taGVhZGVyIHAgeyBmb250LXNpemU6IDE4cHg7IGNvbG9yOiB2YXIoLS10ZXh0LWxpZ2h0KTsgbGluZS1oZWlnaHQ6IDEuNzsgfVxuXG4uc2VydmljZXMtZ3JpZCB7XG4gICAgbWF4LXdpZHRoOiAxNDAwcHg7XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gICAgcGFkZGluZzogMCAzMHB4O1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgzNTBweCwgMWZyKSk7XG4gICAgZ2FwOiAzMHB4O1xufVxuXG4uc2VydmljZS1jYXJkIHtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBib3JkZXItcmFkaXVzOiAyNHB4O1xuICAgIHBhZGRpbmc6IDQwcHg7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuNHMgZWFzZTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsMCwwLDAuMDUpO1xufVxuXG4uc2VydmljZS1jYXJkOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDVweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ncmFkaWVudC1hY2NlbnQpO1xuICAgIHRyYW5zZm9ybTogc2NhbGVYKDApO1xuICAgIHRyYW5zZm9ybS1vcmlnaW46IGxlZnQ7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNHMgZWFzZTtcbn1cblxuLnNlcnZpY2UtY2FyZDpob3Zlcjo6YmVmb3JlIHsgdHJhbnNmb3JtOiBzY2FsZVgoMSk7IH1cblxuLnNlcnZpY2UtY2FyZDpob3ZlciB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTBweCk7IGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1sZyk7IH1cblxuLnNlcnZpY2UtaWNvbiB7XG4gICAgd2lkdGg6IDcwcHg7XG4gICAgaGVpZ2h0OiA3MHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGZvbnQtc2l6ZTogMjhweDtcbiAgICBtYXJnaW4tYm90dG9tOiAyNXB4O1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7XG59XG5cbi5zZXJ2aWNlLWNhcmQ6aG92ZXIgLnNlcnZpY2UtaWNvbiB7IHRyYW5zZm9ybTogc2NhbGUoMS4xKSByb3RhdGUoNWRlZyk7IH1cblxuLnNlcnZpY2UtaWNvbi53ZWIgeyBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjNjY3ZWVhLCAjNzY0YmEyKTsgY29sb3I6IHdoaXRlOyB9XG4uc2VydmljZS1pY29uLmFwcCB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICNmMDkzZmIsICNmNTU3NmMpOyBjb2xvcjogd2hpdGU7IH1cbi5zZXJ2aWNlLWljb24ubWFya2V0aW5nIHsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzRmYWNmZSwgIzAwZjJmZSk7IGNvbG9yOiB3aGl0ZTsgfVxuLnNlcnZpY2UtaWNvbi5zZW8geyBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjNDNlOTdiLCAjMzhmOWQ3KTsgY29sb3I6IHdoaXRlOyB9XG4uc2VydmljZS1pY29uLmludGVyaW9yIHsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgI2ZhNzA5YSwgI2ZlZTE0MCk7IGNvbG9yOiB3aGl0ZTsgfVxuLnNlcnZpY2UtaWNvbi5wcmludCB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICNhOGVkZWEsICNmZWQ2ZTMpOyBjb2xvcjogdmFyKC0tcHJpbWFyeSk7IH1cblxuLnNlcnZpY2UtY2FyZCBoMyB7IGZvbnQtc2l6ZTogMjRweDsgY29sb3I6IHZhcigtLXByaW1hcnkpOyBtYXJnaW4tYm90dG9tOiAxNXB4OyB9XG5cbi5zZXJ2aWNlLWNhcmQgcCB7IGNvbG9yOiB2YXIoLS10ZXh0LWxpZ2h0KTsgbGluZS1oZWlnaHQ6IDEuNzsgbWFyZ2luLWJvdHRvbTogMjBweDsgfVxuXG4uc2VydmljZS1mZWF0dXJlcyB7IGxpc3Qtc3R5bGU6IG5vbmU7IG1hcmdpbi1ib3R0b206IDI1cHg7IH1cblxuLnNlcnZpY2UtZmVhdHVyZXMgbGkgeyBwYWRkaW5nOiA4cHggMDsgY29sb3I6IHZhcigtLXRleHQpOyBmb250LXNpemU6IDE0cHg7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogMTBweDsgfVxuXG4uc2VydmljZS1mZWF0dXJlcyBsaSBpIHsgY29sb3I6IHZhcigtLWFjY2VudCk7IGZvbnQtc2l6ZTogMTJweDsgfVxuXG4uc2VydmljZS1saW5rIHsgY29sb3I6IHZhcigtLWFjY2VudCk7IGZvbnQtd2VpZ2h0OiA2MDA7IGRpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDhweDsgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsgfVxuXG4uc2VydmljZS1saW5rOmhvdmVyIHsgZ2FwOiAxMnB4OyBjb2xvcjogdmFyKC0tYWNjZW50LWxpZ2h0KTsgfVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgUE9SVEZPTElPIFNFQ1RJT05cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG4ucG9ydGZvbGlvIHsgcGFkZGluZzogMTAwcHggMDsgYmFja2dyb3VuZDogd2hpdGU7IH1cblxuLnBvcnRmb2xpby1maWx0ZXIgeyBkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZ2FwOiAxNXB4OyBtYXJnaW4tYm90dG9tOiA1MHB4OyBmbGV4LXdyYXA6IHdyYXA7IHBhZGRpbmc6IDAgMjBweDsgfVxuXG4uZmlsdGVyLWJ0biB7XG4gICAgcGFkZGluZzogMTJweCAyOHB4O1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICNlMGUwZTA7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgYm9yZGVyLXJhZGl1czogNTBweDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTtcbiAgICBmb250LWZhbWlseTogJ091dGZpdCcsIHNhbnMtc2VyaWY7XG59XG5cbi5maWx0ZXItYnRuOmhvdmVyLFxuLmZpbHRlci1idG4uYWN0aXZlIHsgYmFja2dyb3VuZDogdmFyKC0tZ3JhZGllbnQtYWNjZW50KTsgY29sb3I6IHdoaXRlOyBib3JkZXItY29sb3I6IHZhcigtLWFjY2VudCk7IGJveC1zaGFkb3c6IDAgNXB4IDIwcHggcmdiYSgyMzMsIDY5LCA5NiwgMC4zKTsgfVxuXG4ucG9ydGZvbGlvLWdyaWQge1xuICAgIG1heC13aWR0aDogMTQwMHB4O1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIHBhZGRpbmc6IDAgMzBweDtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDM1MHB4LCAxZnIpKTtcbiAgICBnYXA6IDMwcHg7XG59XG5cbi5wb3J0Zm9saW8taXRlbSB7XG4gICAgYm9yZGVyLXJhZGl1czogMjBweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgaGVpZ2h0OiAzNTBweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1saWdodCk7XG59XG5cbi5wb3J0Zm9saW8taXRlbSBpbWcgeyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyBvYmplY3QtZml0OiBjb3ZlcjsgdHJhbnNpdGlvbjogYWxsIDAuNXMgZWFzZTsgfVxuXG4ucG9ydGZvbGlvLW92ZXJsYXkge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBpbnNldDogMDtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gdG9wLCByZ2JhKDI2LCAyNiwgNDYsIDAuOTUpLCB0cmFuc3BhcmVudCk7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgcGFkZGluZzogMzBweDtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjRzIGVhc2U7XG59XG5cbi5wb3J0Zm9saW8taXRlbTpob3ZlciAucG9ydGZvbGlvLW92ZXJsYXkgeyBvcGFjaXR5OiAxOyB9XG5cbi5wb3J0Zm9saW8taXRlbTpob3ZlciBpbWcgeyB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7IH1cblxuLnBvcnRmb2xpby1vdmVybGF5IGgzIHsgY29sb3I6IHdoaXRlOyBmb250LXNpemU6IDIycHg7IG1hcmdpbi1ib3R0b206IDhweDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDIwcHgpOyB0cmFuc2l0aW9uOiBhbGwgMC40cyBlYXNlIDAuMXM7IH1cblxuLnBvcnRmb2xpby1vdmVybGF5IHAgeyBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjgpOyBmb250LXNpemU6IDE0cHg7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgyMHB4KTsgdHJhbnNpdGlvbjogYWxsIDAuNHMgZWFzZSAwLjJzOyB9XG5cbi5wb3J0Zm9saW8taXRlbTpob3ZlciAucG9ydGZvbGlvLW92ZXJsYXkgaDMsXG4ucG9ydGZvbGlvLWl0ZW06aG92ZXIgLnBvcnRmb2xpby1vdmVybGF5IHAgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH1cblxuLnBvcnRmb2xpby10YWcge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDIwcHg7XG4gICAgcmlnaHQ6IDIwcHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tYWNjZW50KTtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgcGFkZGluZzogNnB4IDE2cHg7XG4gICAgYm9yZGVyLXJhZGl1czogNTBweDtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFRFU1RJTU9OSUFMU1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi50ZXN0aW1vbmlhbHMgeyBwYWRkaW5nOiAxMDBweCAwOyBiYWNrZ3JvdW5kOiB2YXIoLS1ncmFkaWVudCk7IHBvc2l0aW9uOiByZWxhdGl2ZTsgb3ZlcmZsb3c6IGhpZGRlbjsgfVxuXG4udGVzdGltb25pYWxzIC5zZWN0aW9uLWhlYWRlciBoMixcbi50ZXN0aW1vbmlhbHMgLnNlY3Rpb24taGVhZGVyIHAgeyBjb2xvcjogd2hpdGU7IH1cblxuLnRlc3RpbW9uaWFscy1zbGlkZXIgeyBtYXgtd2lkdGg6IDEyMDBweDsgbWFyZ2luOiAwIGF1dG87IHBhZGRpbmc6IDAgMzBweDsgcG9zaXRpb246IHJlbGF0aXZlOyBvdmVyZmxvdzogaGlkZGVuOyB9XG5cbi50ZXN0aW1vbmlhbHMtdHJhY2sgeyBkaXNwbGF5OiBmbGV4OyBnYXA6IDA7IHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjVzIGVhc2U7IH1cblxuLnRlc3RpbW9uaWFsLWNhcmQge1xuICAgIG1pbi13aWR0aDogMTAwJTtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMSk7XG4gICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDIwcHgpO1xuICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDIwcHgpO1xuICAgIGJvcmRlci1yYWRpdXM6IDI0cHg7XG4gICAgcGFkZGluZzogNTBweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMSk7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4udGVzdGltb25pYWwtYXZhdGFyIHtcbiAgICB3aWR0aDogODBweDtcbiAgICBoZWlnaHQ6IDgwcHg7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWdyYWRpZW50LWFjY2VudCk7XG4gICAgbWFyZ2luOiAwIGF1dG8gMjVweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgZm9udC1zaXplOiAzMnB4O1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBmb250LXdlaWdodDogNzAwO1xufVxuXG4udGVzdGltb25pYWwtdGV4dCB7IGZvbnQtc2l6ZTogMjBweDsgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC45KTsgbGluZS1oZWlnaHQ6IDEuODsgbWFyZ2luLWJvdHRvbTogMzBweDsgZm9udC1zdHlsZTogaXRhbGljOyB9XG5cbi50ZXN0aW1vbmlhbC1hdXRob3IgeyBjb2xvcjogd2hpdGU7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogMThweDsgfVxuXG4udGVzdGltb25pYWwtcm9sZSB7IGNvbG9yOiB2YXIoLS1hY2NlbnQtbGlnaHQpOyBmb250LXNpemU6IDE0cHg7IH1cblxuLnRlc3RpbW9uaWFsLXJhdGluZyB7IGNvbG9yOiB2YXIoLS1nb2xkKTsgbWFyZ2luLWJvdHRvbTogMjBweDsgZm9udC1zaXplOiAyMHB4OyB9XG5cbi5zbGlkZXItbmF2IHsgZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGdhcDogMTVweDsgbWFyZ2luLXRvcDogNDBweDsgfVxuXG4uc2xpZGVyLWRvdCB7IHdpZHRoOiAxMnB4OyBoZWlnaHQ6IDEycHg7IGJvcmRlci1yYWRpdXM6IDUwJTsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjMpOyBjdXJzb3I6IHBvaW50ZXI7IHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7IH1cblxuLnNsaWRlci1kb3QuYWN0aXZlIHsgYmFja2dyb3VuZDogdmFyKC0tYWNjZW50KTsgd2lkdGg6IDMwcHg7IGJvcmRlci1yYWRpdXM6IDZweDsgfVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQkxPRyBTRUNUSU9OXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuLmJsb2cgeyBwYWRkaW5nOiAxMDBweCAwOyBiYWNrZ3JvdW5kOiB2YXIoLS1saWdodCk7IH1cblxuLmJsb2ctZ3JpZCB7XG4gICAgbWF4LXdpZHRoOiAxNDAwcHg7XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gICAgcGFkZGluZzogMCAzMHB4O1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgzNTBweCwgMWZyKSk7XG4gICAgZ2FwOiAzMHB4O1xufVxuXG4uYmxvZy1jYXJkIHtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBib3JkZXItcmFkaXVzOiAyNHB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuNHMgZWFzZTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsMCwwLDAuMDUpO1xufVxuXG4uYmxvZy1jYXJkOmhvdmVyIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMHB4KTsgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LWxnKTsgfVxuXG4uYmxvZy1pbWFnZSB7IGhlaWdodDogMjQwcHg7IGJhY2tncm91bmQ6IHZhcigtLWdyYWRpZW50KTsgcG9zaXRpb246IHJlbGF0aXZlOyBvdmVyZmxvdzogaGlkZGVuOyB9XG5cbi5ibG9nLWltYWdlIGltZyB7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IG9iamVjdC1maXQ6IGNvdmVyOyB0cmFuc2l0aW9uOiBhbGwgMC41cyBlYXNlOyB9XG5cbi5ibG9nLWNhcmQ6aG92ZXIgLmJsb2ctaW1hZ2UgaW1nIHsgdHJhbnNmb3JtOiBzY2FsZSgxLjEpOyB9XG5cbi5ibG9nLWNhdGVnb3J5IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAyMHB4O1xuICAgIGxlZnQ6IDIwcHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tYWNjZW50KTtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgcGFkZGluZzogNnB4IDE2cHg7XG4gICAgYm9yZGVyLXJhZGl1czogNTBweDtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbn1cblxuLmJsb2ctY29udGVudCB7IHBhZGRpbmc6IDMwcHg7IH1cblxuLmJsb2ctbWV0YSB7IGRpc3BsYXk6IGZsZXg7IGdhcDogMjBweDsgbWFyZ2luLWJvdHRvbTogMTVweDsgZm9udC1zaXplOiAxM3B4OyBjb2xvcjogdmFyKC0tdGV4dC1saWdodCk7IH1cblxuLmJsb2ctY29udGVudCBoMyB7IGZvbnQtc2l6ZTogMjJweDsgY29sb3I6IHZhcigtLXByaW1hcnkpOyBtYXJnaW4tYm90dG9tOiAxNXB4OyBsaW5lLWhlaWdodDogMS40OyB9XG5cbi5ibG9nLWNvbnRlbnQgcCB7IGNvbG9yOiB2YXIoLS10ZXh0LWxpZ2h0KTsgbGluZS1oZWlnaHQ6IDEuNzsgbWFyZ2luLWJvdHRvbTogMjBweDsgfVxuXG4ucmVhZC1tb3JlIHsgY29sb3I6IHZhcigtLWFjY2VudCk7IGZvbnQtd2VpZ2h0OiA2MDA7IGRpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDhweDsgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsgfVxuXG4ucmVhZC1tb3JlOmhvdmVyIHsgZ2FwOiAxMnB4OyB9XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBDVEEgU0VDVElPTlxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi5jdGEtc2VjdGlvbiB7XG4gICAgcGFkZGluZzogMTAwcHggMDtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMWExYTJlIDAlLCAjMTYyMTNlIDUwJSwgIzBmMzQ2MCAxMDAlKTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5jdGEtc2VjdGlvbjo6YmVmb3JlIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgd2lkdGg6IDYwMHB4O1xuICAgIGhlaWdodDogNjAwcHg7XG4gICAgYmFja2dyb3VuZDogcmFkaWFsLWdyYWRpZW50KGNpcmNsZSwgcmdiYSgyMzMsIDY5LCA5NiwgMC4yKSwgdHJhbnNwYXJlbnQgNzAlKTtcbiAgICB0b3A6IC0yMDBweDtcbiAgICByaWdodDogLTIwMHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbn1cblxuLmN0YS1zZWN0aW9uOjphZnRlciB7XG4gICAgY29udGVudDogJyc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHdpZHRoOiA0MDBweDtcbiAgICBoZWlnaHQ6IDQwMHB4O1xuICAgIGJhY2tncm91bmQ6IHJhZGlhbC1ncmFkaWVudChjaXJjbGUsIHJnYmEoMjU1LCAxMDcsIDEwNywgMC4xNSksIHRyYW5zcGFyZW50IDcwJSk7XG4gICAgYm90dG9tOiAtMTAwcHg7XG4gICAgbGVmdDogLTEwMHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbn1cblxuLmN0YS1jb250ZW50IHsgbWF4LXdpZHRoOiA4MDBweDsgbWFyZ2luOiAwIGF1dG87IHBhZGRpbmc6IDAgMzBweDsgcG9zaXRpb246IHJlbGF0aXZlOyB6LWluZGV4OiAyOyB9XG5cbi5jdGEtY29udGVudCBoMiB7IGZvbnQtc2l6ZTogNDhweDsgY29sb3I6IHdoaXRlOyBtYXJnaW4tYm90dG9tOiAyMHB4OyB9XG5cbi5jdGEtY29udGVudCBwIHsgZm9udC1zaXplOiAxOHB4OyBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjgpOyBtYXJnaW4tYm90dG9tOiA0MHB4OyBsaW5lLWhlaWdodDogMS43OyB9XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBGT09URVJcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG4uZm9vdGVyIHsgYmFja2dyb3VuZDogdmFyKC0tZGFyayk7IHBhZGRpbmc6IDgwcHggMCAwOyBjb2xvcjogd2hpdGU7IH1cblxuLmZvb3Rlci1ncmlkIHtcbiAgICBtYXgtd2lkdGg6IDE0MDBweDtcbiAgICBtYXJnaW46IDAgYXV0bztcbiAgICBwYWRkaW5nOiAwIDMwcHg7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDJmciAxZnIgMWZyIDFmcjtcbiAgICBnYXA6IDYwcHg7XG4gICAgbWFyZ2luLWJvdHRvbTogNjBweDtcbn1cblxuLmZvb3Rlci1icmFuZCBwIHsgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC42KTsgbGluZS1oZWlnaHQ6IDEuODsgbWFyZ2luLWJvdHRvbTogMjVweDsgfVxuXG4uc29jaWFsLWxpbmtzIHsgZGlzcGxheTogZmxleDsgZ2FwOiAxNXB4OyB9XG5cbi5zb2NpYWwtbGlua3MgYSB7XG4gICAgd2lkdGg6IDQ1cHg7XG4gICAgaGVpZ2h0OiA0NXB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjEpO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTtcbiAgICBmb250LXNpemU6IDE4cHg7XG59XG5cbi5zb2NpYWwtbGlua3MgYTpob3ZlciB7IGJhY2tncm91bmQ6IHZhcigtLWFjY2VudCk7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtM3B4KTsgfVxuXG4uZm9vdGVyLWNvbHVtbiBoNCB7IGZvbnQtc2l6ZTogMThweDsgbWFyZ2luLWJvdHRvbTogMjVweDsgY29sb3I6IHdoaXRlOyBmb250LWZhbWlseTogJ091dGZpdCcsIHNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0OiA2MDA7IH1cblxuLmZvb3Rlci1saW5rcyB7IGxpc3Qtc3R5bGU6IG5vbmU7IH1cblxuLmZvb3Rlci1saW5rcyBsaSB7IG1hcmdpbi1ib3R0b206IDEycHg7IH1cblxuLmZvb3Rlci1saW5rcyBhIHsgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC42KTsgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsgZGlzcGxheTogaW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogOHB4OyB9XG5cbi5mb290ZXItbGlua3MgYTpob3ZlciB7IGNvbG9yOiB2YXIoLS1hY2NlbnQpOyBwYWRkaW5nLWxlZnQ6IDVweDsgfVxuXG4uZm9vdGVyLWNvbnRhY3QgcCB7IGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuNik7IG1hcmdpbi1ib3R0b206IDE1cHg7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OyBnYXA6IDEycHg7IGxpbmUtaGVpZ2h0OiAxLjY7IH1cblxuLmZvb3Rlci1jb250YWN0IGkgeyBjb2xvcjogdmFyKC0tYWNjZW50KTsgbWFyZ2luLXRvcDogM3B4OyBmb250LXNpemU6IDE2cHg7IGZsZXgtc2hyaW5rOiAwOyB9XG5cbi5mb290ZXItYm90dG9tIHtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEpO1xuICAgIHBhZGRpbmc6IDMwcHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuNSk7XG4gICAgZm9udC1zaXplOiAxNHB4O1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgRU5RVUlSWSBQT1BVUFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi5wb3B1cC1vdmVybGF5IHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgaW5zZXQ6IDA7XG4gICAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjcpO1xuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTtcbiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTtcbiAgICB6LWluZGV4OiAyMDAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC40cyBlYXNlO1xuICAgIHBhZGRpbmc6IDIwcHg7XG59XG5cbi5wb3B1cC1vdmVybGF5LmFjdGl2ZSB7IG9wYWNpdHk6IDE7IHZpc2liaWxpdHk6IHZpc2libGU7IH1cblxuLnBvcHVwLWNvbnRhaW5lciB7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgYm9yZGVyLXJhZGl1czogMjRweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXgtd2lkdGg6IDYwMHB4O1xuICAgIG1heC1oZWlnaHQ6IDkwdmg7XG4gICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOSkgdHJhbnNsYXRlWSgyMHB4KTtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC40cyBlYXNlO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLnBvcHVwLW92ZXJsYXkuYWN0aXZlIC5wb3B1cC1jb250YWluZXIgeyB0cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZVkoMCk7IH1cblxuLnBvcHVwLWhlYWRlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tZ3JhZGllbnQpO1xuICAgIHBhZGRpbmc6IDQwcHg7XG4gICAgYm9yZGVyLXJhZGl1czogMjRweCAyNHB4IDAgMDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4ucG9wdXAtaGVhZGVyIGgyIHsgY29sb3I6IHdoaXRlOyBmb250LXNpemU6IDI4cHg7IG1hcmdpbi1ib3R0b206IDEwcHg7IH1cblxuLnBvcHVwLWhlYWRlciBwIHsgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC44KTsgfVxuXG4ucG9wdXAtY2xvc2Uge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDIwcHg7XG4gICAgcmlnaHQ6IDIwcHg7XG4gICAgd2lkdGg6IDQwcHg7XG4gICAgaGVpZ2h0OiA0MHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMik7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLnBvcHVwLWNsb3NlOmhvdmVyIHsgYmFja2dyb3VuZDogdmFyKC0tYWNjZW50KTsgfVxuXG4ucG9wdXAtYm9keSB7IHBhZGRpbmc6IDQwcHg7IH1cblxuLmZvcm0tZ3JvdXAgeyBtYXJnaW4tYm90dG9tOiAyNXB4OyB9XG5cbi5mb3JtLWdyb3VwIGxhYmVsIHsgZGlzcGxheTogYmxvY2s7IG1hcmdpbi1ib3R0b206IDhweDsgZm9udC13ZWlnaHQ6IDYwMDsgY29sb3I6IHZhcigtLXByaW1hcnkpOyBmb250LXNpemU6IDE0cHg7IH1cblxuLmZvcm0tZ3JvdXAgaW5wdXQsXG4uZm9ybS1ncm91cCBzZWxlY3QsXG4uZm9ybS1ncm91cCB0ZXh0YXJlYSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgcGFkZGluZzogMTRweCAxOHB4O1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICNlOGU4ZTg7XG4gICAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgICBmb250LWZhbWlseTogJ091dGZpdCcsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1zaXplOiAxNXB4O1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbn1cblxuLmZvcm0tZ3JvdXAgaW5wdXQ6Zm9jdXMsXG4uZm9ybS1ncm91cCBzZWxlY3Q6Zm9jdXMsXG4uZm9ybS1ncm91cCB0ZXh0YXJlYTpmb2N1cyB7IGJvcmRlci1jb2xvcjogdmFyKC0tYWNjZW50KTsgYm94LXNoYWRvdzogMCAwIDAgNHB4IHJnYmEoMjMzLCA2OSwgOTYsIDAuMSk7IH1cblxuLmZvcm0tZ3JvdXAgdGV4dGFyZWEgeyByZXNpemU6IHZlcnRpY2FsOyBtaW4taGVpZ2h0OiAxMjBweDsgfVxuXG4uZm9ybS1yb3cgeyBkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7IGdhcDogMjBweDsgfVxuXG4uc3VibWl0LWJ0biB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgcGFkZGluZzogMTZweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ncmFkaWVudC1hY2NlbnQpO1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7XG4gICAgZm9udC1mYW1pbHk6ICdPdXRmaXQnLCBzYW5zLXNlcmlmO1xufVxuXG4uc3VibWl0LWJ0bjpob3ZlciB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTsgYm94LXNoYWRvdzogMCAxMHB4IDMwcHggcmdiYSgyMzMsIDY5LCA5NiwgMC4zKTsgfVxuXG4uZmxvYXRpbmctZW5xdWlyeS1idG4ge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICBib3R0b206IDMwcHg7XG4gICAgcmlnaHQ6IDMwcHg7XG4gICAgd2lkdGg6IDYwcHg7XG4gICAgaGVpZ2h0OiA2MHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ncmFkaWVudC1hY2NlbnQpO1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBmb250LXNpemU6IDI0cHg7XG4gICAgYm94LXNoYWRvdzogMCAxMHB4IDMwcHggcmdiYSgyMzMsIDY5LCA5NiwgMC40KTtcbiAgICB6LWluZGV4OiA5OTk7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYW5pbWF0aW9uOiBwdWxzZSAycyBpbmZpbml0ZTtcbn1cblxuQGtleWZyYW1lcyBwdWxzZSB7XG4gICAgMCUsIDEwMCUgeyBib3gtc2hhZG93OiAwIDEwcHggMzBweCByZ2JhKDIzMywgNjksIDk2LCAwLjQpOyB9XG4gICAgNTAlIHsgYm94LXNoYWRvdzogMCAxMHB4IDQwcHggcmdiYSgyMzMsIDY5LCA5NiwgMC42KTsgfVxufVxuXG4uZmxvYXRpbmctZW5xdWlyeS1idG46aG92ZXIgeyB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7IH1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFRPQVNUIE5PVElGSUNBVElPTlxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi50b2FzdCB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIGJvdHRvbTogMTAwcHg7XG4gICAgcmlnaHQ6IDMwcHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tcHJpbWFyeSk7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIHBhZGRpbmc6IDE2cHggMjRweDtcbiAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1sZyk7XG4gICAgei1pbmRleDogNTAwMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoNDAwcHgpO1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjRzIGVhc2U7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogMTJweDtcbn1cblxuLnRvYXN0LnNob3cgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7IH1cblxuLnRvYXN0IGkgeyBjb2xvcjogdmFyKC0tYWNjZW50KTsgZm9udC1zaXplOiAyMHB4OyB9XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBTRVJWSUNFIFBBR0VTXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuLnNlcnZpY2UtcGFnZSB7IGRpc3BsYXk6IG5vbmU7IHBhZGRpbmc6IDEyMHB4IDAgODBweDsgYmFja2dyb3VuZDogd2hpdGU7IH1cblxuLnNlcnZpY2UtcGFnZS5hY3RpdmUgeyBkaXNwbGF5OiBibG9jazsgfVxuXG4uc2VydmljZS1oZXJvIHsgYmFja2dyb3VuZDogdmFyKC0tZ3JhZGllbnQpOyBwYWRkaW5nOiAxMDBweCAwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiB3aGl0ZTsgbWFyZ2luLWJvdHRvbTogNjBweDsgfVxuXG4uc2VydmljZS1oZXJvIGgxIHsgZm9udC1zaXplOiA0OHB4OyBtYXJnaW4tYm90dG9tOiAyMHB4OyB9XG5cbi5zZXJ2aWNlLWhlcm8gcCB7IGZvbnQtc2l6ZTogMThweDsgb3BhY2l0eTogMC44OyBtYXgtd2lkdGg6IDYwMHB4OyBtYXJnaW46IDAgYXV0bzsgcGFkZGluZzogMCAyMHB4OyB9XG5cbi5zZXJ2aWNlLWNvbnRlbnQgeyBtYXgtd2lkdGg6IDEyMDBweDsgbWFyZ2luOiAwIGF1dG87IHBhZGRpbmc6IDAgMzBweDsgfVxuXG4uc2VydmljZS1mZWF0dXJlcy1ncmlkIHsgZGlzcGxheTogZ3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgzMDBweCwgMWZyKSk7IGdhcDogMzBweDsgbWFyZ2luOiA2MHB4IDA7IH1cblxuLmZlYXR1cmUtYm94IHsgYmFja2dyb3VuZDogdmFyKC0tbGlnaHQpOyBwYWRkaW5nOiA0MHB4OyBib3JkZXItcmFkaXVzOiAyMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7IH1cblxuLmZlYXR1cmUtYm94OmhvdmVyIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01cHgpOyBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3cpOyB9XG5cbi5mZWF0dXJlLWJveCBpIHsgZm9udC1zaXplOiA0MHB4OyBjb2xvcjogdmFyKC0tYWNjZW50KTsgbWFyZ2luLWJvdHRvbTogMjBweDsgfVxuXG4uZmVhdHVyZS1ib3ggaDMgeyBtYXJnaW4tYm90dG9tOiAxNXB4OyBjb2xvcjogdmFyKC0tcHJpbWFyeSk7IH1cblxuLmZlYXR1cmUtYm94IHAgeyBjb2xvcjogdmFyKC0tdGV4dC1saWdodCk7IGxpbmUtaGVpZ2h0OiAxLjc7IH1cblxuLnByb2Nlc3Mtc2VjdGlvbiB7IGJhY2tncm91bmQ6IHZhcigtLWxpZ2h0KTsgcGFkZGluZzogODBweCAwOyBtYXJnaW46IDYwcHggMDsgfVxuXG4ucHJvY2Vzcy1zdGVwcyB7IGRpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMjAwcHgsIDFmcikpOyBnYXA6IDMwcHg7IG1heC13aWR0aDogMTIwMHB4OyBtYXJnaW46IDAgYXV0bzsgcGFkZGluZzogMCAzMHB4OyB9XG5cbi5wcm9jZXNzLXN0ZXAgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuXG4uc3RlcC1udW1iZXIgeyB3aWR0aDogNjBweDsgaGVpZ2h0OiA2MHB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1ncmFkaWVudC1hY2NlbnQpOyBjb2xvcjogd2hpdGU7IGJvcmRlci1yYWRpdXM6IDUwJTsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZvbnQtc2l6ZTogMjRweDsgZm9udC13ZWlnaHQ6IDcwMDsgbWFyZ2luOiAwIGF1dG8gMjBweDsgfVxuXG4ucHJvY2Vzcy1zdGVwIGgzIHsgbWFyZ2luLWJvdHRvbTogMTBweDsgY29sb3I6IHZhcigtLXByaW1hcnkpOyB9XG5cbi5wcm9jZXNzLXN0ZXAgcCB7IGNvbG9yOiB2YXIoLS10ZXh0LWxpZ2h0KTsgZm9udC1zaXplOiAxNHB4OyB9XG5cbi5iYWNrLWJ0biB7IGRpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDhweDsgY29sb3I6IHZhcigtLWFjY2VudCk7IGZvbnQtd2VpZ2h0OiA2MDA7IG1hcmdpbi1ib3R0b206IDMwcHg7IHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7IH1cblxuLmJhY2stYnRuOmhvdmVyIHsgZ2FwOiAxMnB4OyB9XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBBTklNQVRJT05TXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuLmZhZGUtaW4geyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMzBweCk7IHRyYW5zaXRpb246IGFsbCAwLjZzIGVhc2U7IH1cblxuLmZhZGUtaW4udmlzaWJsZSB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgfVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgUkVTUE9OU0lWRSBERVNJR05cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5AbWVkaWEgKG1heC13aWR0aDogMTAyNHB4KSB7XG4gICAgLmhlcm8tY29udGFpbmVyIHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7IHRleHQtYWxpZ246IGNlbnRlcjsgfVxuICAgIC5oZXJvLWNvbnRlbnQgcCB7IG1hcmdpbjogMCBhdXRvIDQwcHg7IH1cbiAgICAuaGVyby1idXR0b25zIHsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IH1cbiAgICAuaGVyby1zdGF0cyB7IGp1c3RpZnktY29udGVudDogY2VudGVyOyB9XG4gICAgLmhlcm8tdmlzdWFsIHsgZGlzcGxheTogbm9uZTsgfVxuICAgIC5mb290ZXItZ3JpZCB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsgfVxufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAubmF2LWxpbmtzIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDEwMCU7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wcmltYXJ5KTtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgcGFkZGluZzogMzBweDtcbiAgICAgICAgZ2FwOiAyMHB4O1xuICAgIH1cbiAgICAubmF2LWxpbmtzLmFjdGl2ZSB7IGRpc3BsYXk6IGZsZXg7IH1cbiAgICAubW9iaWxlLW1lbnUtYnRuIHsgZGlzcGxheTogYmxvY2s7IH1cbiAgICAuaGVyby1jb250ZW50IGgxIHsgZm9udC1zaXplOiA0MHB4OyB9XG4gICAgLnNlY3Rpb24taGVhZGVyIGgyIHsgZm9udC1zaXplOiAzMnB4OyB9XG4gICAgLnNlcnZpY2VzLWdyaWQsIC5wb3J0Zm9saW8tZ3JpZCwgLmJsb2ctZ3JpZCB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOyB9XG4gICAgLmZvb3Rlci1ncmlkIHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7IGdhcDogNDBweDsgfVxuICAgIC5mb3JtLXJvdyB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOyB9XG4gICAgLnNlcnZpY2UtaGVybyBoMSB7IGZvbnQtc2l6ZTogMzZweDsgfVxuICAgIC5jdGEtY29udGVudCBoMiB7IGZvbnQtc2l6ZTogMzZweDsgfVxufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgICAuaGVyby1jb250ZW50IGgxIHsgZm9udC1zaXplOiAzMnB4OyB9XG4gICAgLmhlcm8tc3RhdHMgeyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBnYXA6IDIwcHg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cbiAgICAuc2VjdGlvbi1oZWFkZXIgaDIgeyBmb250LXNpemU6IDI4cHg7IH1cbiAgICAuYnRuLXByaW1hcnksIC5idG4tb3V0bGluZSB7IHBhZGRpbmc6IDE0cHggMjhweDsgZm9udC1zaXplOiAxNHB4OyB9XG4gICAgLnBvcHVwLWJvZHkgeyBwYWRkaW5nOiAyNXB4OyB9XG4gICAgLmZsb2F0aW5nLWVucXVpcnktYnRuIHsgd2lkdGg6IDUwcHg7IGhlaWdodDogNTBweDsgZm9udC1zaXplOiAyMHB4OyBib3R0b206IDIwcHg7IHJpZ2h0OiAyMHB4OyB9XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBBQ0NFU1NJQklMSVRZXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcbiAgICAqLCAqOjpiZWZvcmUsICo6OmFmdGVyIHtcbiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjAxbXMgIWltcG9ydGFudDtcbiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMSAhaW1wb3J0YW50O1xuICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjAxbXMgIWltcG9ydGFudDtcbiAgICB9XG59XG5cbi8qIEZvY3VzIHN0eWxlcyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiAqL1xuYTpmb2N1cy12aXNpYmxlLFxuYnV0dG9uOmZvY3VzLXZpc2libGUsXG5pbnB1dDpmb2N1cy12aXNpYmxlLFxuc2VsZWN0OmZvY3VzLXZpc2libGUsXG50ZXh0YXJlYTpmb2N1cy12aXNpYmxlIHtcbiAgICBvdXRsaW5lOiAycHggc29saWQgdmFyKC0tYWNjZW50KTtcbiAgICBvdXRsaW5lLW9mZnNldDogMnB4O1xufVxuXG4vKiBTa2lwIHRvIGNvbnRlbnQgbGluayBmb3Igc2NyZWVuIHJlYWRlcnMgKi9cbi5za2lwLWxpbmsge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IC00MHB4O1xuICAgIGxlZnQ6IDA7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tYWNjZW50KTtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgcGFkZGluZzogOHB4IDE2cHg7XG4gICAgei1pbmRleDogMTAwMDA7XG4gICAgdHJhbnNpdGlvbjogdG9wIDAuM3M7XG59XG5cbi5za2lwLWxpbms6Zm9jdXMgeyB0b3A6IDA7IH1cbiJdfQ== */