{"id":6511,"date":"2025-10-01T14:00:00","date_gmt":"2025-10-01T12:00:00","guid":{"rendered":"https:\/\/www.adexpartners.com\/?p=6511"},"modified":"2026-07-02T12:57:04","modified_gmt":"2026-07-02T10:57:04","slug":"assess-data-strategy-maturity-honestly","status":"publish","type":"post","link":"https:\/\/www.adexpartners.com\/en\/services\/data-strategy-reifegrad-ehrlich-bewerten\/","title":{"rendered":"Data Strategy Step 2: Honestly assess maturity \u2013 rather than staging governance"},"content":{"rendered":"\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Overpass:wght@300;400;600;700&#038;display=swap\" rel=\"stylesheet\">\n\n\n<style>\n@property --gradient-angle{syntax:'<angle>';initial-value:0deg;inherits:false;}:root{--air-bg:#F5F2EE;--air-bg-alt:#EDE9E4;--air-navy:#10325E;--air-ocean:#0A5794;--air-blue-light:#658EC4;--air-blue-pale:#AFC6DF;--air-pink:#D1347D;--air-pink-dark:#703247;--air-text:#10325E;--air-text-secondary:#0A5794;--air-text-muted:rgba(16,50,94,0.45);--air-text-headline:#10325E;--air-glass-bg:rgba(255,255,255,0.88);--air-glass-border:rgba(16,50,94,0.15);--air-glass-bg-solid:rgba(255,255,255,0.95);--air-chart-track:rgba(16,50,94,0.09);--air-glass-shadow:0 2px 16px rgba(16,50,94,0.08);--air-font:'Overpass',system-ui,-apple-system,'Segoe UI',sans-serif;--air-reading-width:clamp(680px,60vw,900px);--air-breakout-width:clamp(1000px,80vw,1280px);} [data-theme=\"dark\"]{--air-bg:#0a0e1a;--air-bg-alt:#0d1225;--air-text:rgba(255,255,255,0.9);--air-text-secondary:#AFC6DF;--air-text-muted:rgba(255,255,255,0.5);--air-text-headline:#FFFFFF;--air-glass-bg:rgba(16,50,94,0.35);--air-glass-border:rgba(101,142,196,0.15);--air-glass-bg-solid:rgba(16,50,94,0.85);--air-chart-track:rgba(255,255,255,0.05);--air-glass-shadow:none;} @media (prefers-color-scheme:dark){:root:not([data-theme=\"light\"]){--air-bg:#0a0e1a;--air-bg-alt:#0d1225;--air-text:rgba(255,255,255,0.9);--air-text-secondary:#AFC6DF;--air-text-muted:rgba(255,255,255,0.5);--air-text-headline:#FFFFFF;--air-glass-bg:rgba(16,50,94,0.35);--air-glass-border:rgba(101,142,196,0.15);--air-glass-bg-solid:rgba(16,50,94,0.85);--air-chart-track:rgba(255,255,255,0.05);--air-glass-shadow:none;} } *,*::before,*::after{margin:0;padding:0;box-sizing:border-box;} body.air-cinematic{font-family:var(--air-font);background:var(--air-bg);color:var(--air-text);overflow-x:hidden;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;} #air-particles{position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:0;pointer-events:none;} .review-bar{position:sticky;top:0;z-index:1000;background:rgba(245,242,238,0.88);backdrop-filter:blur(16px) saturate(150%);-webkit-backdrop-filter:blur(16px) saturate(150%);border-bottom:1px solid var(--air-glass-border);color:var(--air-navy);padding:12px 24px;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px;} .review-bar-title{font-size:14px;font-weight:700;letter-spacing:0.5px;} .review-bar-meta{display:flex;gap:16px;font-size:12px;opacity:0.7;} .review-bar-meta span{background:rgba(16,50,94,0.1);padding:2px 10px;border-radius:0;} .review-bar a{color:white;text-decoration:none;font-size:13px;font-weight:600;background:var(--air-pink);padding:4px 14px;border-radius:2px;transition:background-color 0.2s ease;} .review-bar a:hover{background:var(--air-pink-dark);} .review-seo{max-width:900px;margin:24px auto;background:var(--air-glass-bg);backdrop-filter:blur(12px) saturate(150%);-webkit-backdrop-filter:blur(12px) saturate(150%);border:1px solid var(--air-glass-border);border-radius:0;padding:0;position:relative;z-index:1;box-shadow:var(--air-glass-shadow);} @supports not (backdrop-filter:blur(1px)){.review-seo{background:var(--air-glass-bg-solid);} } .review-seo-toggle{display:block;padding:16px 24px;font-size:14px;font-weight:700;color:var(--air-ocean);text-transform:uppercase;letter-spacing:1px;cursor:pointer;list-style:none;user-select:none;} .review-seo-toggle::-webkit-details-marker{display:none;} .review-seo-toggle::before{content:'\\25B6';display:inline-block;margin-right:8px;font-size:10px;transition:transform 0.2s ease;} .review-seo[open] .review-seo-toggle::before{transform:rotate(90deg);} .review-seo-body{padding:0 24px 20px;} .review-seo-row{display:flex;margin-bottom:8px;font-size:13px;} .review-seo-label{width:120px;min-width:120px;font-weight:700;color:var(--air-pink);} .review-seo-value{color:var(--air-text-secondary);word-break:break-word;} .review-seo-tags{display:flex;flex-wrap:wrap;gap:6px;} .review-seo-tag{background:rgba(16,50,94,0.1);padding:2px 10px;border-radius:0;font-size:12px;font-weight:600;color:var(--air-navy);} .air-stage{position:relative;z-index:1;width:100%;} .air-article{font-family:var(--air-font);color:var(--air-text);line-height:1.72;font-size:clamp(17px,1vw + 8px,18.5px);max-width:var(--air-reading-width);margin:0 auto;padding:0 24px;} .air-article h2{font-size:clamp(26px,2vw + 10px,32px);font-weight:700;color:var(--air-text-headline);margin:48px 0 16px 0;line-height:1.3;text-wrap:balance;} .air-article h3{font-size:clamp(20px,1.5vw + 8px,24px);font-weight:600;color:var(--air-ocean);margin:32px 0 12px 0;line-height:1.35;} .air-article p{font-size:clamp(17px,1vw + 8px,18.5px);margin:0 0 18px 0;color:var(--air-text);text-wrap:pretty;} .air-article strong{color:var(--air-navy);} .air-article em{color:var(--air-pink-dark);font-style:italic;} .air-article ul,.air-article ol{margin:0 0 18px 0;padding-left:24px;color:var(--air-text);} .air-article li{margin-bottom:10px;line-height:1.7;} .air-article a{color:var(--air-pink);text-decoration:none;border-bottom:1px solid rgba(209,52,125,0.3);transition:border-color 0.2s ease;} .air-article a:hover{border-color:var(--air-pink);} .air-hero-v2{width:100vw;margin-left:calc(-50vw + 50%);min-height:70vh;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:56px 32px;position:relative;overflow:hidden;background:conic-gradient( from var(--gradient-angle) at 50% 50%,rgba(10,87,148,0.12),rgba(209,52,125,0.08),rgba(16,50,94,0.10),rgba(101,142,196,0.08),rgba(10,87,148,0.12) ),linear-gradient(180deg,var(--air-bg) 0%,rgba(16,50,94,0.04) 100%);animation:gradient-rotate 20s linear infinite;} @keyframes gradient-rotate{to{--gradient-angle:360deg;} } .air-hero-v2::before{content:'';position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:600px;height:400px;background:radial-gradient(ellipse,rgba(209,52,125,0.12),rgba(10,87,148,0.08),transparent 70%);filter:blur(40px);pointer-events:none;z-index:0;} .air-hero-v2 > *{position:relative;z-index:1;} .air-hero-v2-hook{font-size:clamp(36px,6vw,64px);font-weight:700;color:var(--air-navy);line-height:1.1;letter-spacing:-0.02em;margin-bottom:16px;text-wrap:balance;} .air-hero-v2-accent{display:inline-block;width:60px;height:4px;background:var(--air-pink);border-radius:2px;margin-bottom:20px;box-shadow:0 0 12px rgba(209,52,125,0.2);} .air-hero-v2-sub{font-size:clamp(18px,2.5vw,22px);color:var(--air-text);max-width:600px;line-height:1.6;margin-bottom:20px;} .air-hero-v2-detail{font-size:14px;color:var(--air-text-muted);letter-spacing:1px;text-transform:uppercase;} .air-js .air-hero-v2 .air-hero-v2-hook{clip-path:inset(100% 0 0 0);transition:clip-path 0.6s cubic-bezier(0.16,1,0.3,1);} .air-js .air-hero-v2 .air-hero-v2-accent{transform:scaleX(0);transition:transform 0.3s cubic-bezier(0.16,1,0.3,1) 0.3s;} .air-js .air-hero-v2 .air-hero-v2-sub{opacity:0;transform:translateY(30px);transition:opacity 0.5s ease 0.5s,transform 0.5s cubic-bezier(0.16,1,0.3,1) 0.5s;} .air-js .air-hero-v2 .air-hero-v2-detail{opacity:0;transition:opacity 0.4s ease 0.8s;} .air-hero-v2.air-visible .air-hero-v2-hook{clip-path:inset(0);} .air-hero-v2.air-visible .air-hero-v2-accent{transform:scaleX(1);} .air-hero-v2.air-visible .air-hero-v2-sub{opacity:1;transform:translateY(0);} .air-hero-v2.air-visible .air-hero-v2-detail{opacity:1;} @supports not (backdrop-filter:blur(1px)){.air-glass,.air-stat,.air-domain,.air-usecase,.air-tech-card,.air-tech-section,.air-quote,.air-voice,.air-reality-check,.air-scenario,.air-sidebar,.air-claims,.air-dual-index-card,.air-stopdefer,.air-guardrail,.air-signal,.air-stakes,.air-adopt-banner,.air-insight,.air-shift,.air-context-strip,.air-series-nav,.legacy-card{background:var(--air-glass-bg-solid) !important;} } .air-stats{width:100vw;margin-left:calc(-50vw + 50%);display:flex;justify-content:center;gap:20px;padding:32px 32px;flex-wrap:wrap;} .air-stat{background:var(--air-glass-bg);backdrop-filter:blur(12px) saturate(150%);-webkit-backdrop-filter:blur(12px) saturate(150%);border:1px solid var(--air-glass-border);border-radius:0;padding:24px 24px 20px;text-align:center;min-width:140px;max-width:220px;flex:1;box-shadow:var(--air-glass-shadow);} .air-stat-num{font-size:48px;font-weight:700;color:var(--air-navy);line-height:1;margin-bottom:4px;text-shadow:0 2px 8px rgba(16,50,94,0.15);} .air-stat-label{font-size:13px;font-weight:600;color:var(--air-pink);text-transform:uppercase;letter-spacing:0.5px;margin-bottom:2px;} .air-stat-sub{font-size:12px;color:var(--air-text-muted);} .air-stat-story{margin-top:12px;font-size:14px;font-style:italic;color:var(--air-blue-light);line-height:1.5;} .air-js .air-stat{opacity:0;transform:scale(0.85);filter:blur(8px);transition:opacity 0.6s ease,transform 0.6s cubic-bezier(0.16,1,0.3,1),filter 0.6s ease;} .air-stat.air-visible{opacity:1;transform:scale(1);filter:blur(0);} .air-js .air-stat-story{opacity:0;transition:opacity 0.5s ease;} .air-stat-story.air-visible{opacity:1;} hr.air-divider,.air-divider{border:none;height:1px;max-width:200px;margin:40px auto;background:linear-gradient(90deg,transparent,rgba(209,52,125,0.5),rgba(10,87,148,0.45),transparent);background-size:200% 100%;animation:shimmer-line 3s ease-in-out infinite;} .air-breaker{margin:48px -40px;position:relative;overflow:hidden;border-radius:0;} .air-breaker-img{width:100%;height:auto;display:block;border-top:2px solid var(--air-pink);border-bottom:2px solid var(--air-pink);} .air-breaker-caption{font-size:13px;font-weight:400;color:var(--air-blue-light);text-align:center;padding:12px 24px 0;font-style:italic;letter-spacing:0.02em;} @keyframes shimmer-line{0%,100%{background-position:200% 0;} 50%{background-position:0% 0;} } .air-quote{background:var(--air-glass-bg);backdrop-filter:blur(12px) saturate(150%);-webkit-backdrop-filter:blur(12px) saturate(150%);border:1px solid var(--air-glass-border);border-left:4px solid var(--air-pink);border-radius:0;padding:28px 32px;margin:40px 0;font-size:18px;font-style:italic;color:var(--air-text);line-height:1.65;position:relative;box-shadow:var(--air-glass-shadow);} .air-quote::before{content:'\\201C';position:absolute;top:-8px;left:16px;font-size:64px;color:rgba(209,52,125,0.2);font-style:normal;line-height:1;} .air-voice{background:var(--air-glass-bg);backdrop-filter:blur(12px) saturate(150%);-webkit-backdrop-filter:blur(12px) saturate(150%);border:1px solid var(--air-glass-border);border-radius:0;padding:28px 32px;margin:32px 0;box-shadow:var(--air-glass-shadow);} .air-voice-text{font-size:16px;font-style:italic;color:var(--air-text);line-height:1.65;margin-bottom:12px;} .air-voice-name{font-size:14px;font-weight:700;color:var(--air-navy);} .air-voice-role{font-size:13px;color:var(--air-text-muted);} .air-reality-check{background:var(--air-glass-bg);backdrop-filter:blur(12px) saturate(150%);-webkit-backdrop-filter:blur(12px) saturate(150%);border:1px solid rgba(209,52,125,0.2);border-radius:0;padding:28px 32px;margin:32px 0;box-shadow:var(--air-glass-shadow);} .air-reality-check-label{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:1.5px;color:var(--air-pink);margin-bottom:10px;} .air-reality-check p{color:var(--air-text);} .air-badge{display:inline-block;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:1px;padding:3px 10px;border-radius:0;line-height:1.4;} .air-badge-adopt{background:rgba(10,87,148,0.15);color:var(--air-ocean);} .air-badge-trial{background:rgba(101,142,196,0.2);color:var(--air-blue-light);} .air-badge-assess{background:rgba(209,52,125,0.14);color:var(--air-pink);} .air-badge-hold{background:rgba(16,50,94,0.1);color:var(--air-text-muted);} .air-badge-evidence-a{background:rgba(10,87,148,0.15);color:var(--air-ocean);} .air-badge-evidence-b{background:rgba(101,142,196,0.2);color:var(--air-blue-light);} .air-badge-evidence-c{background:rgba(16,50,94,0.1);color:var(--air-text-muted);} .air-badge-horizon{background:rgba(209,52,125,0.12);color:var(--air-pink);} .air-domains-wrap{width:100vw;margin-left:calc(-50vw + 50%);padding:32px 32px;} .air-domains{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:20px;max-width:var(--air-breakout-width);margin:0 auto;} .air-domain{background:var(--air-glass-bg);backdrop-filter:blur(12px) saturate(150%);-webkit-backdrop-filter:blur(12px) saturate(150%);border:1px solid var(--air-glass-border);border-radius:0;padding:28px 24px;transition:border-color 0.3s ease,box-shadow 0.3s ease,transform 0.3s cubic-bezier(0.16,1,0.3,1);box-shadow:var(--air-glass-shadow);} .air-domain:hover{border-color:rgba(10,87,148,0.25);box-shadow:0 8px 32px rgba(16,50,94,0.15);transform:translateY(-4px) scale(1.02);} .air-domain-adopt{border-top:3px solid var(--air-ocean);} .air-domain-trial{border-top:3px solid var(--air-blue-light);} .air-domain-assess{border-top:3px solid var(--air-pink);} .air-domain-hold{border-top:3px solid rgba(16,50,94,0.15);} .air-domain h3{font-size:18px;font-weight:700;color:var(--air-navy);margin-bottom:8px;} .air-domain-meta{font-size:12px;color:var(--air-text-muted);margin-bottom:12px;} .air-domain-details{margin-top:12px;} .air-domain-details summary{font-size:13px;font-weight:600;color:var(--air-ocean);cursor:pointer;} .air-domain-detail-content{margin-top:8px;font-size:14px;color:var(--air-text);line-height:1.6;} .air-radar-wrap{width:100vw;margin-left:calc(-50vw + 50%);display:flex;align-items:center;justify-content:center;padding:48px 32px;position:relative;overflow:hidden;} .air-radar-wrap::before{content:'';position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:800px;height:800px;background:radial-gradient(circle,rgba(10,87,148,0.1),rgba(209,52,125,0.06),transparent 70%);pointer-events:none;} .air-radar-svg{max-width:min(90vw,720px);width:100%;height:auto;position:relative;z-index:1;} .air-radar-ring{fill:none;stroke-width:1.5;} .air-radar-ring-adopt{stroke:rgba(10,87,148,0.7);} .air-radar-ring-trial{stroke:rgba(101,142,196,0.6);} .air-radar-ring-assess{stroke:rgba(209,52,125,0.5);} .air-radar-ring-hold{stroke:rgba(16,50,94,0.35);} .air-radar-label{fill:var(--air-navy);font-size:11px;font-weight:600;font-family:var(--air-font);opacity:0.7;} [class*=\"air-radar-dot-\"]:not([class*=\"label\"]){fill:var(--air-navy);filter:drop-shadow(0 0 3px rgba(16,50,94,0.3));} .air-radar-dot-label{fill:var(--air-text);font-size:10px;font-weight:600;font-family:var(--air-font);} .air-radar-tooltip{position:fixed;z-index:9999;background:rgba(255,255,255,0.95);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid var(--air-glass-border);border-radius:0;padding:10px 14px;transform:translate(-50%,-100%);pointer-events:none;transition:opacity 0.2s ease;white-space:nowrap;box-shadow:0 4px 16px rgba(16,50,94,0.1);} .air-radar-tooltip-name{font-size:13px;font-weight:700;color:var(--air-navy);margin-bottom:4px;} .air-radar-tooltip-row{display:flex;align-items:center;gap:8px;} .air-radar-tooltip-mentions{font-size:11px;color:var(--air-text-muted);} .air-radar-sweep{transform-origin:240px 240px;animation:radar-sweep 8s linear infinite;filter:drop-shadow(0 0 6px rgba(209,52,125,0.4));} @keyframes radar-sweep{from{transform:rotate(0deg);} to{transform:rotate(360deg);} } @keyframes air-dot-pulse{0%,100%{opacity:1;} 50%{opacity:0.5;} } .air-radar-orbit{fill:none;stroke:none;} .air-radar-orbit-dot{opacity:0.4;} .air-chart{width:100vw;margin-left:calc(-50vw + 50%);margin-bottom:40px;background:var(--air-glass-bg);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border-top:1px solid var(--air-glass-border);border-bottom:1px solid var(--air-glass-border);padding:36px 40px;box-shadow:var(--air-glass-shadow);} .air-chart-title{font-size:22px;font-weight:700;color:var(--air-navy);margin-bottom:4px;text-align:center;} .air-chart-subtitle{font-size:14px;color:var(--air-text-muted);margin-bottom:32px;text-align:center;} .air-chart-row{display:flex;align-items:center;gap:12px;margin:0 auto 14px auto;max-width:700px;} .air-chart-year,.air-chart-label{font-size:13px;font-weight:600;color:var(--air-text);width:80px;text-align:right;flex-shrink:0;} .air-chart-track{flex:1;height:44px;background:var(--air-chart-track);border-radius:4px;overflow:hidden;position:relative;} .air-chart-track > div{height:100%;border-radius:4px;display:flex;align-items:center;padding:0 14px;font-size:13px;font-weight:600;color:white;position:relative;background:linear-gradient(135deg,var(--air-ocean),var(--air-navy));} .air-chart-bar-peak .air-chart-track > div,.air-chart-track > div.air-chart-bar-peak{background:linear-gradient(135deg,var(--air-pink),var(--air-ocean));box-shadow:0 2px 12px rgba(209,52,125,0.25);} .air-chart-bar-peak .air-chart-track > div::after,.air-chart-track > div.air-chart-bar-peak::after{content:'';position:absolute;right:4px;top:50%;transform:translateY(-50%);width:6px;height:6px;border-radius:50%;background:white;box-shadow:0 0 8px rgba(255,255,255,0.5);} .air-chart-note{font-size:12px;color:var(--air-text-muted);margin-top:16px;font-style:italic;text-align:center;max-width:700px;margin-left:auto;margin-right:auto;} .air-evidence{margin:32px 0;} .air-ev-step{display:flex;align-items:center;gap:12px;margin-bottom:12px;} .air-ev-label{font-size:13px;font-weight:600;color:var(--air-text);min-width:100px;flex-shrink:0;} .air-ev-bar{height:32px;border-radius:2px;display:flex;align-items:center;padding:0 12px;font-size:12px;font-weight:700;color:white;background:linear-gradient(135deg,var(--air-ocean),var(--air-navy));} .air-ev-weight{font-size:12px;color:var(--air-text-muted);min-width:40px;text-align:right;} .air-progress-bar{height:6px;background:var(--air-chart-track);border-radius:3px;margin:12px 0;overflow:hidden;} .air-progress-bar > div{height:100%;border-radius:3px;background:linear-gradient(90deg,var(--air-ocean),var(--air-pink));} .air-dual-index{width:100vw;margin-left:calc(-50vw + 50%);display:flex;justify-content:center;gap:20px;padding:32px 32px;flex-wrap:wrap;} .air-dual-index-card{background:var(--air-glass-bg);backdrop-filter:blur(12px) saturate(150%);-webkit-backdrop-filter:blur(12px) saturate(150%);border:1px solid var(--air-glass-border);border-radius:0;padding:32px 28px;flex:1;min-width:260px;max-width:400px;box-shadow:var(--air-glass-shadow);} .air-dual-index-card h3{font-size:18px;font-weight:700;color:var(--air-navy);margin-bottom:12px;} .air-usecases{margin:32px 0;} .air-usecase{background:var(--air-glass-bg);backdrop-filter:blur(12px) saturate(150%);-webkit-backdrop-filter:blur(12px) saturate(150%);border:1px solid var(--air-glass-border);border-radius:0;padding:28px 24px;margin-bottom:16px;box-shadow:var(--air-glass-shadow);} .air-uc-header{margin-bottom:8px;} .air-uc-title,.air-usecase h4{font-size:17px;font-weight:700;color:var(--air-navy);margin-bottom:4px;} .air-uc-badges,.air-uc-controls{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0;} .air-uc-control-tag{font-size:10px;font-weight:600;background:rgba(16,50,94,0.1);padding:2px 8px;border-radius:2px;color:var(--air-text-muted);} .air-uc-problem,.air-usecase-problem{font-size:14px;color:var(--air-text);margin-bottom:8px;} .air-uc-kpi,.air-usecase-kpis{display:flex;gap:16px;margin-top:8px;flex-wrap:wrap;} .air-uc-kpi-label,.air-usecase-kpi{font-size:12px;color:var(--air-text-muted);} .air-uc-kpi-value{font-weight:700;color:var(--air-pink);} .air-uc-owner,.air-usecase-owner{font-size:12px;color:var(--air-text-muted);margin-top:8px;} .air-uc-horizon-1{border-left:3px solid var(--air-ocean);} .air-uc-horizon-2{border-left:3px solid var(--air-blue-light);} .air-uc-horizon-3{border-left:3px solid var(--air-pink);} .air-usecase-horizon,.air-usecase-evidence{font-size:11px;color:var(--air-text-muted);margin-top:4px;} .air-usecase-h1{border-left:3px solid var(--air-ocean);} .air-usecase-h2{border-left:3px solid var(--air-blue-light);} .air-usecase-h3{border-left:3px solid var(--air-pink);} .air-tech-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(380px,1fr));gap:20px;padding:32px 0;} .air-tech-card{background:var(--air-glass-bg);backdrop-filter:blur(12px) saturate(150%);-webkit-backdrop-filter:blur(12px) saturate(150%);border:1px solid var(--air-glass-border);border-radius:0;padding:32px 28px;transition:border-color 0.3s ease,box-shadow 0.3s ease,transform 0.3s cubic-bezier(0.16,1,0.3,1);box-shadow:var(--air-glass-shadow);} .air-tech-accent-1{border-top:3px solid var(--air-ocean);} .air-tech-accent-2{border-top:3px solid var(--air-blue-light);} .air-tech-accent-3{border-top:3px solid var(--air-pink);} .air-tech-accent-4{border-top:3px solid var(--air-blue-pale);} .air-tech-accent-5{border-top:3px solid rgba(209,52,125,0.5);} .air-tech-header{margin-bottom:12px;} .air-tech-header h3{font-size:20px;font-weight:700;color:var(--air-navy);margin:0 0 4px;} .air-tech-header h3 small{display:block;font-size:13px;font-weight:400;color:var(--air-text-muted);margin-top:4px;} .air-tech-meta{font-size:12px;color:var(--air-text-muted);margin-bottom:12px;} .air-tech-body{font-size:15px;color:var(--air-text);line-height:1.65;} .air-tech-stat{display:inline-block;font-size:13px;font-weight:700;color:var(--air-pink);margin-top:8px;} .legacy-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:20px;margin:32px 0;} .legacy-card{background:var(--air-glass-bg);backdrop-filter:blur(12px) saturate(150%);-webkit-backdrop-filter:blur(12px) saturate(150%);border:1px solid var(--air-glass-border);border-radius:0;padding:28px 24px;box-shadow:var(--air-glass-shadow);border-top:3px solid var(--air-ocean);} .legacy-grid:has(.legacy-card:nth-child(4)):not(:has(.legacy-card:nth-child(5))){grid-template-columns:repeat(2,1fr);} .legacy-card-kicker{display:inline-block;font-size:13px;font-weight:700;color:var(--air-pink);text-transform:uppercase;letter-spacing:1px;margin-bottom:8px;} .legacy-card h3{font-size:18px;font-weight:700;color:var(--air-navy);margin-bottom:10px;line-height:1.35;} .legacy-card p{font-size:15px;line-height:1.65;color:var(--air-text);margin:0;} .air-tech-section{background:var(--air-glass-bg);backdrop-filter:blur(12px) saturate(150%);-webkit-backdrop-filter:blur(12px) saturate(150%);border:1px solid var(--air-glass-border);border-radius:0;padding:28px 24px;margin:24px 0;box-shadow:var(--air-glass-shadow);} .air-tech-section.air-tech-trial{border-left:3px solid var(--air-blue-light);} .air-tech-section.air-tech-assess{border-left:3px solid var(--air-pink);} .air-cta-v2,.air-cta{width:100vw;margin-left:calc(-50vw + 50%);text-align:center;padding:48px 32px;position:relative;} .air-cta-v2::before,.air-cta::before{content:'';position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:500px;height:300px;background:radial-gradient(ellipse,rgba(209,52,125,0.1),transparent 70%);filter:blur(40px);pointer-events:none;} .air-cta-v2 > *,.air-cta > *{position:relative;z-index:1;} .air-cta-v2 h2,.air-cta h2{font-size:28px;font-weight:700;color:var(--air-navy);margin-bottom:12px;} .air-cta-v2 p,.air-cta p{font-size:17px;color:var(--air-text);max-width:600px;margin:0 auto 16px;} .air-cta-v2-promise{font-size:14px;color:var(--air-text-muted);font-style:italic;} .air-timeline{margin:32px 0;position:relative;padding-left:28px;} .air-timeline::before{content:'';position:absolute;left:8px;top:0;bottom:0;width:2px;background:linear-gradient(to bottom,var(--air-ocean),rgba(209,52,125,0.2),transparent);} .air-tl-item{position:relative;margin-bottom:24px;padding-left:16px;} .air-tl-item::before{content:'';position:absolute;left:-24px;top:6px;width:10px;height:10px;border-radius:50%;background:var(--air-ocean);border:2px solid var(--air-bg);} .air-tl-item-past::before{background:var(--air-blue-light);} .air-tl-item-next::before,.air-tl-active::before{background:var(--air-pink);box-shadow:0 0 6px rgba(209,52,125,0.3);} .air-tl-item-future::before{background:rgba(16,50,94,0.25);} .air-tl-date{font-size:12px;font-weight:700;color:var(--air-text-muted);text-transform:uppercase;letter-spacing:0.5px;} .air-tl-title{font-size:16px;font-weight:700;color:var(--air-navy);margin:2px 0;} .air-tl-desc{font-size:14px;color:var(--air-text);line-height:1.55;} .air-tl-status{font-size:11px;font-weight:600;margin-top:4px;} .air-tl-active{color:var(--air-pink);} .air-tl-planned{color:var(--air-blue-light);} .air-tl-upcoming{color:var(--air-text-muted);} .air-tl-tag{display:inline-block;font-size:10px;font-weight:600;padding:2px 8px;border-radius:2px;margin-top:4px;} .air-tl-tag-active{background:rgba(209,52,125,0.1);color:var(--air-pink);} .air-tl-tag-eu{background:rgba(10,87,148,0.08);color:var(--air-ocean);} .air-tl-tag-us{background:rgba(101,142,196,0.1);color:var(--air-blue-light);} .air-tl-eu,.air-tl-us{font-size:13px;color:var(--air-text);} .air-scenario{background:var(--air-glass-bg);backdrop-filter:blur(12px) saturate(150%);-webkit-backdrop-filter:blur(12px) saturate(150%);border:1px solid var(--air-glass-border);border-radius:0;padding:28px 24px;margin:24px 0;box-shadow:var(--air-glass-shadow);} .air-scenario-label{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:1.5px;color:var(--air-pink);margin-bottom:8px;} .air-scenario-title{font-size:18px;font-weight:700;color:var(--air-navy);margin-bottom:8px;} .air-scenario-tag{display:inline-block;font-size:10px;font-weight:600;padding:2px 8px;border-radius:2px;background:rgba(209,52,125,0.12);color:var(--air-pink);margin-bottom:8px;} .air-stakes{background:var(--air-glass-bg);backdrop-filter:blur(12px) saturate(150%);-webkit-backdrop-filter:blur(12px) saturate(150%);border:1px solid rgba(209,52,125,0.2);border-radius:0;padding:32px 28px;margin:32px 0;text-align:center;box-shadow:var(--air-glass-shadow);} .air-stakes h3{font-size:20px;font-weight:700;color:var(--air-navy);margin-bottom:8px;} .air-adopt-banner{background:linear-gradient(135deg,rgba(10,87,148,0.08),rgba(16,50,94,0.06));backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid var(--air-glass-border);border-radius:0;padding:36px 32px;margin:32px 0;text-align:center;box-shadow:var(--air-glass-shadow);} .air-adopt-label{font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:1.5px;color:var(--air-pink);margin-bottom:8px;} .air-adopt-sub{font-size:16px;color:var(--air-text);} .air-shift{background:var(--air-glass-bg);backdrop-filter:blur(12px) saturate(150%);-webkit-backdrop-filter:blur(12px) saturate(150%);border:1px solid var(--air-glass-border);border-radius:0;padding:24px;margin:24px 0;display:flex;align-items:center;gap:16px;box-shadow:var(--air-glass-shadow);} .air-shift-col{flex:1;text-align:center;} .air-shift-tag{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:1px;margin-bottom:4px;} .air-shift-old{color:var(--air-text-muted);text-decoration:line-through;font-size:15px;} .air-shift-new{color:var(--air-pink);font-weight:700;font-size:15px;} .air-shift-arrow{font-size:24px;color:var(--air-pink);} .air-stopdefer{background:var(--air-glass-bg);backdrop-filter:blur(12px) saturate(150%);-webkit-backdrop-filter:blur(12px) saturate(150%);border:1px solid var(--air-glass-border);border-radius:0;padding:24px;margin:16px 0;box-shadow:var(--air-glass-shadow);} .air-stopdefer-title{font-size:16px;font-weight:700;color:var(--air-navy);margin-bottom:12px;} .air-stopdefer-item{margin-bottom:8px;} .air-stopdefer-label,.air-label-stop,.air-label-defer{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:1px;padding:2px 8px;border-radius:2px;display:inline-block;margin-bottom:4px;} .air-label-stop{background:rgba(209,52,125,0.1);color:var(--air-pink);} .air-label-defer{background:rgba(16,50,94,0.1);color:var(--air-text-muted);} .air-stopdefer-text{font-size:14px;color:var(--air-text);} .air-claims{background:var(--air-glass-bg);backdrop-filter:blur(12px) saturate(150%);-webkit-backdrop-filter:blur(12px) saturate(150%);border:1px solid var(--air-glass-border);border-radius:0;padding:28px 24px;margin:24px 0;box-shadow:var(--air-glass-shadow);} .air-claim{margin-bottom:16px;padding-bottom:16px;border-bottom:1px solid rgba(16,50,94,0.06);} .air-claim:last-child{margin-bottom:0;padding-bottom:0;border-bottom:none;} .air-claim-id{font-size:11px;font-weight:700;color:var(--air-pink);text-transform:uppercase;letter-spacing:1px;margin-bottom:4px;} .air-guardrails{margin:24px 0;} .air-guardrail{background:var(--air-glass-bg);backdrop-filter:blur(12px) saturate(150%);-webkit-backdrop-filter:blur(12px) saturate(150%);border:1px solid var(--air-glass-border);border-radius:0;padding:20px 24px;margin-bottom:12px;box-shadow:var(--air-glass-shadow);} .air-guardrail-type{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:1px;margin-bottom:4px;} .air-guardrail-stop{color:var(--air-pink);} .air-guardrail-defer{color:var(--air-text-muted);} .air-signals{margin:24px 0;} .air-signal{background:var(--air-glass-bg);backdrop-filter:blur(12px) saturate(150%);-webkit-backdrop-filter:blur(12px) saturate(150%);border:1px solid var(--air-glass-border);border-radius:0;padding:20px 24px;margin-bottom:12px;box-shadow:var(--air-glass-shadow);} .air-signal-label{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:1px;margin-bottom:4px;} .air-signal-stop{color:var(--air-pink);} .air-signal-defer{color:var(--air-text-muted);} .air-sidebar{background:var(--air-glass-bg);backdrop-filter:blur(12px) saturate(150%);-webkit-backdrop-filter:blur(12px) saturate(150%);border:1px solid var(--air-glass-border);border-radius:0;padding:24px;margin:24px 0;box-shadow:var(--air-glass-shadow);} .air-volatile-chart{width:100vw;margin-left:calc(-50vw + 50%);margin-bottom:40px;background:var(--air-glass-bg);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border-top:1px solid var(--air-glass-border);border-bottom:1px solid var(--air-glass-border);padding:36px 40px 32px;box-shadow:var(--air-glass-shadow);} .air-volatile-title{font-size:22px;font-weight:700;color:var(--air-navy);margin-bottom:4px;text-align:center;} .air-volatile-subtitle{font-size:14px;color:var(--air-text-muted);margin-bottom:32px;text-align:center;} .air-volatile-bars{display:flex;align-items:flex-end;gap:12px;justify-content:center;height:280px;padding-top:36px;} .air-volatile-col{display:flex;flex-direction:column;align-items:center;gap:4px;position:relative;} .air-volatile-bar{width:48px;border-radius:6px 6px 0 0;background:linear-gradient(to top,var(--air-ocean),var(--air-navy));transition:height 0.7s cubic-bezier(0.16,1,0.3,1);} .air-volatile-bar-up{background:var(--air-ocean);} .air-volatile-bar-down{background:var(--air-pink);} .air-volatile-bar-peak{background:linear-gradient(to top,var(--air-pink),var(--air-navy));box-shadow:0 2px 12px rgba(209,52,125,0.25);} .air-volatile-val{font-size:14px;font-weight:700;color:var(--air-navy);} .air-volatile-year{font-size:11px;color:var(--air-text-muted);margin-top:4px;} .air-volatile-delta{font-size:11px;font-weight:700;color:rgba(255,255,255,0.95);text-shadow:0 1px 3px rgba(0,0,0,0.3);} .air-volatile-delta-up{color:rgba(255,255,255,0.95);} .air-volatile-delta-down{color:rgba(255,255,255,0.95);} .air-volatile-peak-label{position:absolute;top:-18px;left:50%;transform:translateX(-50%);font-size:9px;font-weight:700;color:var(--air-pink);text-transform:uppercase;letter-spacing:1px;white-space:nowrap;} .air-volatile-annotation{font-size:12px;color:var(--air-text-muted);text-align:center;margin-top:16px;font-style:italic;} .air-growth{width:100vw;margin-left:calc(-50vw + 50%);margin-bottom:40px;background:var(--air-glass-bg);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border-top:1px solid var(--air-glass-border);border-bottom:1px solid var(--air-glass-border);padding:36px 40px;box-shadow:var(--air-glass-shadow);} .air-growth-title{font-size:22px;font-weight:700;color:var(--air-navy);margin-bottom:24px;text-align:center;} .air-growth-row{display:flex;align-items:center;gap:12px;margin:0 auto 14px auto;max-width:700px;} .air-growth-label{font-size:13px;font-weight:600;color:var(--air-text);width:200px;text-align:right;flex-shrink:0;} .air-growth-track{flex:1;height:40px;background:var(--air-chart-track);border-radius:4px;overflow:hidden;} .air-growth-bar{height:100%;border-radius:4px;display:flex;align-items:center;padding:0 14px;font-size:13px;font-weight:600;color:white;background:linear-gradient(135deg,var(--air-ocean),var(--air-navy));} .air-growth-bar-glow{box-shadow:0 2px 16px rgba(209,52,125,0.3);background:linear-gradient(135deg,var(--air-pink),var(--air-ocean));animation:glow-pulse 2s ease-in-out infinite;} @keyframes glow-pulse{0%,100%{box-shadow:0 2px 16px rgba(209,52,125,0.3);} 50%{box-shadow:0 4px 24px rgba(209,52,125,0.45);} } .air-growth-status{font-size:12px;font-weight:600;min-width:60px;} .air-context-strip{background:var(--air-glass-bg);backdrop-filter:blur(12px) saturate(150%);-webkit-backdrop-filter:blur(12px) saturate(150%);border:1px solid var(--air-glass-border);border-radius:0;padding:24px;margin:24px 0;display:flex;gap:16px;align-items:flex-start;box-shadow:var(--air-glass-shadow);} .air-context-icon{font-size:28px;flex-shrink:0;} .air-context-body{font-size:15px;color:var(--air-text);line-height:1.6;} .air-horizon{margin:16px 0;} .air-horizon-near,.air-horizon-mid,.air-horizon-far{font-size:13px;padding:4px 0;} .air-horizon-near{color:var(--air-ocean);} .air-horizon-mid{color:var(--air-blue-light);} .air-horizon-far{color:var(--air-pink);} .air-kpi{font-size:12px;color:var(--air-text-muted);margin-top:4px;} .air-insight{background:var(--air-glass-bg);backdrop-filter:blur(12px) saturate(150%);-webkit-backdrop-filter:blur(12px) saturate(150%);border:1px solid rgba(209,52,125,0.2);border-radius:0;padding:24px;margin:24px 0;box-shadow:var(--air-glass-shadow);} .air-insight-label{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:1.5px;color:var(--air-pink);margin-bottom:8px;} .air-transparency{margin:16px 0;} .air-transparency-label{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:1px;color:var(--air-text-muted);margin-bottom:4px;} .air-cta-v2,.air-reality-check,.air-signal-stop,.air-guardrail-stop{background-image:radial-gradient(circle at 0 0,var(--air-pink) 8px,transparent 8px);background-repeat:no-repeat;background-position:top left;} .air-stat,.air-quote,.air-voice,.air-reality-check,.air-scenario,.air-sidebar,.air-claims,.air-dual-index-card,.air-stopdefer,.air-guardrail,.air-signal,.air-usecase,.air-domain,.air-insight,.air-context-strip,.air-adopt-banner,.air-stakes,.air-series-nav,.legacy-card{transition:border-color 0.3s ease,box-shadow 0.3s ease,transform 0.3s cubic-bezier(0.16,1,0.3,1);cursor:default;} .air-stat:hover,.air-quote:hover,.air-voice:hover,.air-reality-check:hover,.air-scenario:hover,.air-sidebar:hover,.air-claims:hover,.air-dual-index-card:hover,.air-stopdefer:hover,.air-guardrail:hover,.air-signal:hover,.air-usecase:hover,.air-domain:hover,.air-insight:hover,.air-context-strip:hover,.air-adopt-banner:hover,.air-stakes:hover,.air-series-nav:hover,.legacy-card:hover{transform:translateY(-3px);box-shadow:0 8px 28px rgba(10,87,148,0.16),0 0 0 1px rgba(10,87,148,0.08);border-color:rgba(10,87,148,0.25);} .air-growth-row{transition:transform 0.2s ease;} .air-growth-row:hover{transform:translateX(3px);} .air-growth-row:hover .air-growth-bar{box-shadow:0 2px 12px rgba(10,87,148,0.25);} .air-growth-row:hover .air-growth-label{color:var(--air-ocean);} .air-chart-row{transition:transform 0.2s ease;} .air-chart-row:hover{transform:translateX(3px);} .air-chart-row:hover .air-chart-track > div{box-shadow:0 2px 12px rgba(10,87,148,0.3);} .air-badge{transition:transform 0.2s ease,box-shadow 0.2s ease;} .air-badge:hover{transform:scale(1.08);box-shadow:0 2px 8px rgba(16,50,94,0.2);} .air-tech-card:hover{border-color:rgba(10,87,148,0.3);box-shadow:0 12px 40px rgba(16,50,94,0.18),0 0 0 1px rgba(10,87,148,0.1);transform:translateY(-5px) scale(1.01);} .air-tech-section{transition:border-color 0.3s ease,box-shadow 0.3s ease,transform 0.3s cubic-bezier(0.16,1,0.3,1);} .air-tech-section:hover{transform:translateY(-3px);box-shadow:0 8px 28px rgba(16,50,94,0.14);} .air-cta-btn{transition:transform 0.2s ease,box-shadow 0.2s ease,background 0.3s ease;} .air-cta-btn:hover{transform:translateY(-2px) scale(1.03);box-shadow:0 4px 20px rgba(209,52,125,0.35),0 0 40px rgba(209,52,125,0.15);} .air-tl-item{transition:transform 0.2s ease,border-color 0.2s ease;} .air-tl-item:hover{transform:translateX(4px);border-color:rgba(10,87,148,0.3);} .air-stat-value{transition:transform 0.2s ease,color 0.2s ease;display:inline-block;} .air-stat-value:hover{transform:scale(1.1);color:var(--air-ocean);} .air-shimmer-line{transition:opacity 0.3s ease;} .air-shimmer-line:hover{opacity:1;} [class*=\"air-radar-dot-\"]:not([class*=\"label\"]){transition:r 0.3s ease,filter 0.3s ease;cursor:pointer;} [class*=\"air-radar-dot-\"]:not([class*=\"label\"]):hover{filter:drop-shadow(0 0 10px rgba(10,87,148,0.6)) drop-shadow(0 0 4px rgba(209,52,125,0.4));} .air-theme-toggle{transition:transform 0.2s ease,box-shadow 0.2s ease;} .air-theme-toggle:hover{transform:scale(1.15) rotate(15deg);box-shadow:0 0 16px rgba(10,87,148,0.3);} .air-js .air-reveal-clip-center{opacity:0;transform:scale(0.9);transition:opacity 0.8s ease,transform 0.8s cubic-bezier(0.16,1,0.3,1);} .air-reveal-clip-center.air-visible{opacity:1;transform:scale(1);} .air-js .air-reveal-scale-blur{opacity:0;transform:scale(0.85);filter:blur(8px);transition:opacity 0.6s ease,transform 0.6s cubic-bezier(0.16,1,0.3,1),filter 0.6s ease;} .air-reveal-scale-blur.air-visible{opacity:1;transform:scale(1);filter:blur(0);} .air-js .air-reveal-clip-left{opacity:0;transform:translateX(-24px);transition:opacity 0.7s ease,transform 0.7s cubic-bezier(0.16,1,0.3,1);} .air-reveal-clip-left.air-visible{opacity:1;transform:translateX(0);} .air-js .air-reveal-rise-deep{opacity:0;transform:translateY(40px);transition:opacity 0.9s ease,transform 0.9s cubic-bezier(0.16,1,0.3,1);} .air-reveal-rise-deep.air-visible{opacity:1;transform:translateY(0);} .air-js .air-reveal-rise-glow{opacity:0;transform:translateY(30px);filter:drop-shadow(0 0 0 transparent);transition:opacity 0.7s ease,transform 0.7s cubic-bezier(0.16,1,0.3,1),filter 0.7s ease 0.3s;} .air-reveal-rise-glow.air-visible{opacity:1;transform:translateY(0);filter:drop-shadow(0 0 12px rgba(209,52,125,0.18));} .air-js .air-reveal-blur-fade{opacity:0;filter:blur(6px);transition:opacity 0.6s ease,filter 0.6s ease;} .air-reveal-blur-fade.air-visible{opacity:1;filter:blur(0);} .air-js .air-reveal-up{opacity:0;transform:translateY(40px);transition:opacity 0.9s ease,transform 0.9s cubic-bezier(0.16,1,0.3,1);} .air-reveal-up.air-visible{opacity:1;transform:translateY(0);} .air-js .air-reveal-up-sm{opacity:0;filter:blur(6px);transition:opacity 0.6s ease,filter 0.6s ease;} .air-reveal-up-sm.air-visible{opacity:1;filter:blur(0);} .air-js .air-reveal-up-lg{opacity:0;transform:scale(0.85);filter:blur(8px);transition:opacity 0.6s ease,transform 0.6s cubic-bezier(0.16,1,0.3,1),filter 0.6s ease;} .air-reveal-up-lg.air-visible{opacity:1;transform:scale(1);filter:blur(0);} .air-js .air-reveal-right{opacity:0;transform:translateX(-24px);transition:opacity 0.7s ease,transform 0.7s cubic-bezier(0.16,1,0.3,1);} .air-reveal-right.air-visible{opacity:1;transform:translateX(0);} .air-js .air-reveal-quote{opacity:0;transform:translateX(-24px);transition:opacity 0.7s ease,transform 0.7s cubic-bezier(0.16,1,0.3,1);} .air-reveal-quote.air-visible{opacity:1;transform:translateX(0);} .air-js .air-reveal-stakes{opacity:0;transform:scale(0.95);transition:opacity 0.8s ease,transform 0.8s cubic-bezier(0.16,1,0.3,1);} .air-reveal-stakes.air-visible{opacity:1;transform:scale(1);} .dashboard{max-width:900px;margin:0 auto;padding:40px 24px;position:relative;z-index:1;} .dash-hero{background:var(--air-glass-bg);backdrop-filter:blur(12px) saturate(150%);-webkit-backdrop-filter:blur(12px) saturate(150%);border:1px solid var(--air-glass-border);border-radius:0;padding:60px 40px;text-align:center;margin-bottom:32px;box-shadow:var(--air-glass-shadow);} .dash-hero h1{font-size:36px;font-weight:700;color:var(--air-navy);margin-bottom:8px;} .dash-hero p{font-size:16px;color:var(--air-text);margin-bottom:12px;} .dash-hero-count{font-size:12px;font-weight:600;color:var(--air-pink);text-transform:uppercase;letter-spacing:1px;} .dash-cards{display:flex;flex-direction:column;gap:12px;} .dash-card{background:var(--air-glass-bg);backdrop-filter:blur(12px) saturate(150%);-webkit-backdrop-filter:blur(12px) saturate(150%);border:1px solid var(--air-glass-border);border-radius:0;padding:28px;text-decoration:none;color:inherit;display:block;transition:border-color 0.3s ease,box-shadow 0.3s ease,transform 0.3s ease;box-shadow:var(--air-glass-shadow);} .dash-card:hover{border-color:rgba(209,52,125,0.2);box-shadow:0 4px 24px rgba(16,50,94,0.12);transform:translateY(-2px);} .dash-card-num{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:1px;color:var(--air-pink);margin-bottom:4px;} .dash-card h2{font-size:20px;font-weight:700;color:var(--air-navy);margin-bottom:8px;} .dash-card p{font-size:14px;color:var(--air-text);line-height:1.5;} .dash-card-meta{display:flex;gap:8px;margin-top:12px;flex-wrap:wrap;} .dash-card-tag{font-size:11px;font-weight:600;background:rgba(16,50,94,0.1);padding:3px 10px;border-radius:0;color:var(--air-navy);} .dash-litmus{background:var(--air-glass-bg);backdrop-filter:blur(12px) saturate(150%);-webkit-backdrop-filter:blur(12px) saturate(150%);border:2px solid rgba(209,52,125,0.3);border-radius:0;padding:24px 28px;margin-top:24px;box-shadow:var(--air-glass-shadow);} .dash-litmus h3{font-size:16px;font-weight:700;color:var(--air-pink);margin-bottom:8px;} .dash-litmus p{font-size:14px;color:var(--air-text);line-height:1.5;} .dash-litmus code{background:rgba(16,50,94,0.06);padding:2px 6px;border-radius:4px;font-size:12px;} .dash-footer{text-align:center;margin-top:32px;font-size:13px;color:var(--air-text-muted);} [data-theme=\"dark\"] .review-bar{background:rgba(10,14,26,0.85);color:white;} [data-theme=\"dark\"] .review-bar-meta{opacity:0.85;} [data-theme=\"dark\"] .review-bar-meta span{background:rgba(255,255,255,0.08);} [data-theme=\"dark\"] .review-bar a{background:rgba(209,52,125,0.25);border:1px solid rgba(209,52,125,0.4);} [data-theme=\"dark\"] .review-bar a:hover{background:rgba(209,52,125,0.4);} [data-theme=\"dark\"] .review-seo-toggle{color:var(--air-blue-pale);} [data-theme=\"dark\"] .review-seo-tag{background:rgba(255,255,255,0.08);color:var(--air-text-secondary);} [data-theme=\"dark\"] .air-article h3{color:var(--air-blue-pale);} [data-theme=\"dark\"] .air-article p{color:var(--air-text-secondary);} [data-theme=\"dark\"] .air-article strong{color:var(--air-text-headline);} [data-theme=\"dark\"] .air-article em{color:var(--air-pink);} [data-theme=\"dark\"] .air-article ul,[data-theme=\"dark\"] .air-article ol{color:var(--air-text-secondary);} [data-theme=\"dark\"] .air-hero-v2{background:conic-gradient( from var(--gradient-angle) at 50% 50%,rgba(10,87,148,0.2),rgba(209,52,125,0.1),rgba(16,50,94,0.15),rgba(101,142,196,0.1),rgba(10,87,148,0.2) ),var(--air-bg);} [data-theme=\"dark\"] .air-hero-v2::before{background:radial-gradient(ellipse,rgba(209,52,125,0.15),rgba(10,87,148,0.08),transparent 70%);} [data-theme=\"dark\"] .air-hero-v2-hook{color:#FFFFFF;} [data-theme=\"dark\"] .air-hero-v2-accent{box-shadow:0 0 20px rgba(209,52,125,0.4);} [data-theme=\"dark\"] .air-hero-v2-sub{color:var(--air-blue-pale);} [data-theme=\"dark\"] .air-stat-num{color:#FFFFFF;text-shadow:0 0 40px rgba(10,87,148,0.5);} [data-theme=\"dark\"] .air-stat-story{color:var(--air-blue-pale);} [data-theme=\"dark\"] .air-voice-name{color:var(--air-text-headline);} [data-theme=\"dark\"] .air-reality-check p{color:var(--air-text-secondary);} [data-theme=\"dark\"] .air-badge-adopt{background:rgba(10,87,148,0.5);color:#AFC6DF;} [data-theme=\"dark\"] .air-badge-trial{background:rgba(101,142,196,0.35);color:#AFC6DF;} [data-theme=\"dark\"] .air-badge-assess{background:rgba(209,52,125,0.3);color:rgba(255,255,255,0.8);} [data-theme=\"dark\"] .air-badge-hold{background:rgba(255,255,255,0.08);} [data-theme=\"dark\"] .air-badge-evidence-a{background:rgba(10,87,148,0.5);color:#AFC6DF;} [data-theme=\"dark\"] .air-badge-evidence-b{background:rgba(101,142,196,0.35);color:#AFC6DF;} [data-theme=\"dark\"] .air-badge-evidence-c{background:rgba(255,255,255,0.08);} [data-theme=\"dark\"] .air-badge-horizon{background:rgba(209,52,125,0.25);color:rgba(255,255,255,0.8);} [data-theme=\"dark\"] .air-domain{transition:border-color 0.3s ease,box-shadow 0.3s ease;} [data-theme=\"dark\"] .air-domain:hover{border-color:rgba(101,142,196,0.3);box-shadow:0 0 30px rgba(10,87,148,0.15);transform:none;} [data-theme=\"dark\"] .air-domain-hold{border-top-color:rgba(255,255,255,0.2);} [data-theme=\"dark\"] .air-domain h3{color:var(--air-text-headline);} [data-theme=\"dark\"] .air-domain-details summary{color:var(--air-blue-pale);} [data-theme=\"dark\"] .air-domain-detail-content{color:var(--air-text-secondary);} [data-theme=\"dark\"] .legacy-card{border-top-color:rgba(10,87,148,0.6);} [data-theme=\"dark\"] .legacy-card h3{color:var(--air-text-headline);} [data-theme=\"dark\"] .legacy-card p{color:var(--air-text-secondary);} [data-theme=\"dark\"] .legacy-card:hover{border-color:rgba(101,142,196,0.3);box-shadow:0 0 30px rgba(10,87,148,0.15);} [data-theme=\"dark\"] .air-radar-wrap::before{background:radial-gradient(circle,rgba(10,87,148,0.15),rgba(209,52,125,0.05),transparent 70%);} [data-theme=\"dark\"] .air-radar-ring{stroke-width:1;} [data-theme=\"dark\"] .air-radar-ring-adopt{stroke:rgba(10,87,148,0.5);} [data-theme=\"dark\"] .air-radar-ring-trial{stroke:rgba(101,142,196,0.4);} [data-theme=\"dark\"] .air-radar-ring-assess{stroke:rgba(209,52,125,0.3);} [data-theme=\"dark\"] .air-radar-ring-hold{stroke:rgba(255,255,255,0.1);} [data-theme=\"dark\"] .air-radar-label{fill:var(--air-text-muted);font-weight:normal;opacity:1;} [data-theme=\"dark\"] [class*=\"air-radar-dot-\"]:not([class*=\"label\"]){fill:currentColor;filter:none;} [data-theme=\"dark\"] .air-radar-dot-label{fill:var(--air-text-secondary);font-weight:normal;} [data-theme=\"dark\"] .air-radar-tooltip{background:rgba(10,14,26,0.92);box-shadow:none;} [data-theme=\"dark\"] .air-radar-tooltip-name{color:var(--air-text-headline);} [data-theme=\"dark\"] .air-chart-title{color:var(--air-text-headline);} [data-theme=\"dark\"] .air-chart-year,[data-theme=\"dark\"] .air-chart-label{color:var(--air-text-secondary);} [data-theme=\"dark\"] .air-chart-bar-peak .air-chart-track > div,[data-theme=\"dark\"] .air-chart-track > div.air-chart-bar-peak{box-shadow:0 0 20px rgba(209,52,125,0.3);} [data-theme=\"dark\"] .air-chart-bar-peak .air-chart-track > div::after,[data-theme=\"dark\"] .air-chart-track > div.air-chart-bar-peak::after{box-shadow:0 0 12px rgba(255,255,255,0.6);} [data-theme=\"dark\"] .air-ev-label{color:var(--air-text-secondary);} [data-theme=\"dark\"] .air-uc-title,[data-theme=\"dark\"] .air-usecase h4{color:var(--air-text-headline);} [data-theme=\"dark\"] .air-uc-control-tag{background:rgba(255,255,255,0.08);} [data-theme=\"dark\"] .air-uc-problem,[data-theme=\"dark\"] .air-usecase-problem{color:var(--air-text-secondary);} [data-theme=\"dark\"] .air-tech-card{transition:border-color 0.3s ease,box-shadow 0.3s ease;} [data-theme=\"dark\"] .air-tech-card:hover{border-color:rgba(101,142,196,0.3);box-shadow:0 0 30px rgba(10,87,148,0.15);transform:none;} [data-theme=\"dark\"] .air-tech-header h3{color:var(--air-text-headline);} [data-theme=\"dark\"] .air-tech-body{color:var(--air-text-secondary);} [data-theme=\"dark\"] .air-cta-v2 h2,[data-theme=\"dark\"] .air-cta h2{color:var(--air-text-headline);} [data-theme=\"dark\"] .air-cta-v2 p,[data-theme=\"dark\"] .air-cta p{color:var(--air-text-secondary);} [data-theme=\"dark\"] .air-tl-item-future::before{background:rgba(255,255,255,0.2);} [data-theme=\"dark\"] .air-tl-title{color:var(--air-text-headline);} [data-theme=\"dark\"] .air-tl-desc{color:var(--air-text-secondary);} [data-theme=\"dark\"] .air-tl-tag-eu{background:rgba(10,87,148,0.3);color:var(--air-blue-pale);} [data-theme=\"dark\"] .air-tl-tag-us{background:rgba(101,142,196,0.2);color:var(--air-blue-pale);} [data-theme=\"dark\"] .air-tl-eu,[data-theme=\"dark\"] .air-tl-us{color:var(--air-text-secondary);} [data-theme=\"dark\"] .air-scenario-title{color:var(--air-text-headline);} [data-theme=\"dark\"] .air-scenario-tag{background:rgba(209,52,125,0.2);} [data-theme=\"dark\"] .air-stakes h3{color:var(--air-text-headline);} [data-theme=\"dark\"] .air-adopt-banner{background:linear-gradient(135deg,rgba(10,87,148,0.4),rgba(16,50,94,0.5));} [data-theme=\"dark\"] .air-adopt-sub{color:var(--air-text-secondary);} [data-theme=\"dark\"] .air-stopdefer-title{color:var(--air-text-headline);} [data-theme=\"dark\"] .air-label-defer{background:rgba(255,255,255,0.08);} [data-theme=\"dark\"] .air-stopdefer-text{color:var(--air-text-secondary);} [data-theme=\"dark\"] .air-claim{border-bottom-color:rgba(255,255,255,0.05);} [data-theme=\"dark\"] .air-volatile-title{color:var(--air-text-headline);} [data-theme=\"dark\"] .air-volatile-val{color:var(--air-text-headline);} [data-theme=\"dark\"] .air-volatile-bar-peak{box-shadow:0 0 20px rgba(209,52,125,0.3);} [data-theme=\"dark\"] .air-volatile-delta-up{color:var(--air-blue-light);} [data-theme=\"dark\"] .air-growth-title{color:var(--air-text-headline);} [data-theme=\"dark\"] .air-growth-label{color:var(--air-text-secondary);} [data-theme=\"dark\"] .air-growth-bar-glow{box-shadow:0 0 20px rgba(209,52,125,0.3);} [data-theme=\"dark\"] .air-context-body{color:var(--air-text-secondary);} [data-theme=\"dark\"] .air-horizon-near{color:var(--air-blue-pale);} [data-theme=\"dark\"] .dash-hero h1{color:var(--air-text-headline);} [data-theme=\"dark\"] .dash-hero p{color:var(--air-text-secondary);} [data-theme=\"dark\"] .dash-card h2{color:var(--air-text-headline);} [data-theme=\"dark\"] .dash-card p{color:var(--air-text-secondary);} [data-theme=\"dark\"] .dash-card:hover{border-color:rgba(209,52,125,0.3);box-shadow:0 0 30px rgba(209,52,125,0.1);} [data-theme=\"dark\"] .dash-card-tag{background:rgba(255,255,255,0.08);color:var(--air-text-secondary);} [data-theme=\"dark\"] .dash-litmus p{color:var(--air-text-secondary);} [data-theme=\"dark\"] .dash-litmus code{background:rgba(255,255,255,0.08);} [data-theme=\"dark\"] .air-series-nav-list li.air-series-current{color:var(--air-text-headline);background:rgba(209,52,125,0.1);} [data-theme=\"dark\"] .air-series-nav-list a{color:var(--air-blue-pale);} [data-theme=\"dark\"] .air-growth-bar-glow,[data-theme=\"dark\"] .air-volatile-bar-peak{box-shadow:0 0 20px rgba(209,52,125,0.3);} .air-theme-toggle{background:none;border:1px solid rgba(255,255,255,0.2);color:inherit;width:36px;height:36px;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:18px;transition:background 0.2s ease,border-color 0.2s ease;flex-shrink:0;} .air-theme-toggle:hover{background:rgba(255,255,255,0.08);border-color:rgba(255,255,255,0.35);} body:not([data-theme=\"dark\"]) .air-theme-toggle{border-color:rgba(16,50,94,0.2);color:var(--air-navy);} body:not([data-theme=\"dark\"]) .air-theme-toggle:hover{background:rgba(16,50,94,0.08);border-color:rgba(16,50,94,0.35);} @media (prefers-reduced-motion:reduce){.air-hero-v2{animation:none;} .air-divider{animation:none;} .air-radar-sweep{animation:none;} .air-growth-bar-glow{animation:none;} #air-particles{display:none;} .air-js .air-hero-v2 .air-hero-v2-hook,.air-js .air-hero-v2 .air-hero-v2-accent,.air-js .air-hero-v2 .air-hero-v2-sub,.air-js .air-hero-v2 .air-hero-v2-detail,.air-js .air-stat,.air-js .air-stat-story,.air-js .air-reveal-clip-center,.air-js .air-reveal-scale-blur,.air-js .air-reveal-clip-left,.air-js .air-reveal-rise-deep,.air-js .air-reveal-rise-glow,.air-js .air-reveal-blur-fade,.air-js .air-reveal-up,.air-js .air-reveal-up-sm,.air-js .air-reveal-up-lg,.air-js .air-reveal-right,.air-js .air-reveal-quote,.air-js .air-reveal-stakes{opacity:1 !important;transform:none !important;filter:none !important;clip-path:none !important;transition:none !important;} } @keyframes air-force-reveal{to{opacity:1;transform:none;filter:none;} } .air-js [class*=\"air-reveal-\"]:not(.air-visible){animation:air-force-reveal 0s 5s forwards;} .air-series-tag{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:2px;color:var(--air-text-muted);margin-bottom:20px;} .air-series-nav{background:var(--air-glass-bg);backdrop-filter:blur(12px) saturate(150%);-webkit-backdrop-filter:blur(12px) saturate(150%);border:1px solid var(--air-glass-border);border-radius:0;padding:28px 24px;margin:40px 0;box-shadow:var(--air-glass-shadow);} .air-series-nav-label{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:1.5px;color:var(--air-pink);margin-bottom:16px;} .air-series-nav-list{list-style:none;padding:0;margin:0 0 16px 0;display:flex;flex-direction:column;gap:4px;} .air-series-nav-list li{font-size:14px;color:var(--air-text-muted);padding:6px 12px;border-left:2px solid transparent;margin:0;} .air-series-nav-list li.air-series-current{color:var(--air-navy);font-weight:700;border-left-color:var(--air-pink);background:rgba(209,52,125,0.05);} .air-series-nav-list a{color:var(--air-ocean);text-decoration:none;border-bottom:1px solid transparent;transition:border-color 0.2s ease;} .air-series-nav-list a:hover{border-bottom-color:var(--air-ocean);} .air-series-nav-arrows{display:flex;justify-content:space-between;gap:16px;padding-top:12px;border-top:1px solid var(--air-glass-border);} .air-series-nav-arrow{font-size:14px;font-weight:600;color:var(--air-ocean);text-decoration:none;transition:color 0.2s ease;} .air-series-nav-arrow:hover{color:var(--air-pink);} @media (max-width:700px){.air-article{padding:0 16px;} .air-hero-v2{padding:60px 20px;min-height:80vh;} .air-hero-v2-hook{font-size:28px;} .air-stats{padding:32px 16px;gap:12px;} .air-stat{min-width:120px;padding:24px 16px 20px;} .air-stat-num{font-size:36px;} .air-chart,.air-volatile-chart,.air-growth{padding:32px 16px;} .air-domains-wrap{padding:32px 16px;} .air-domains{grid-template-columns:1fr;} .air-tech-cards{grid-template-columns:1fr;padding:32px 16px;} .air-dual-index{padding:32px 16px;flex-direction:column;} .air-radar-wrap{min-height:auto;padding:40px 16px;} .review-seo{margin:16px;} .air-cta-v2,.air-cta{padding:48px 20px;} .air-volatile-bars{gap:6px;} .air-volatile-bar{width:32px;} .air-series-nav-list li{padding:10px 12px;min-height:44px;display:flex;align-items:center;} .air-series-nav-arrows{flex-direction:column;gap:12px;} .air-series-nav-arrow{min-height:44px;display:flex;align-items:center;} .legacy-grid{grid-template-columns:1fr;gap:16px;} .legacy-card{padding:24px 20px;} } html{background:transparent!important} body{background:var(--air-bg)!important;overflow-x:hidden!important;color:var(--air-text)!important;font-family:'Overpass',system-ui,-apple-system,'Segoe UI',sans-serif!important} html,.site-container,#main-container,main.site-main,.site-main,article.post,article.type-post,.content-area,.post-content,.post-has-custom-content-width{background:transparent!important} .entry-content,.entry-content.is-layout-flow{max-width:none!important;overflow:visible!important;padding:0!important;background:transparent!important;position:relative;z-index:1} .entry-content.is-layout-flow>*{max-width:none!important;margin-left:unset!important;margin-right:unset!important} .entry-content .air-article *{--wp--style--global--content-size:none;--wp--style--global--wide-size:none} #air-particles{position:fixed!important;top:0!important;left:0!important;width:100vw!important;height:100vh!important;z-index:0!important;pointer-events:none!important;background:transparent!important} .air-article{max-width:var(--air-reading-width,900px)!important;margin-left:auto!important;margin-right:auto!important;padding:0 24px!important} .air-hero-v2{max-width:none!important;width:100vw!important;margin-left:calc(-50vw + 50%)!important} .review-bar,.review-seo{display:none!important} .air-theme-toggle{position:fixed!important;top:80px!important;right:20px!important;z-index:99999!important} \n<\/style>\n\n\n<div class=\"air-article\">\n<style>.air-breaker-en{display:none}html[lang=\"en-GB\"] .air-breaker-de{display:none}html[lang=\"en-GB\"] .air-breaker-en{display:block}<\/style>\n<div class=\"air-progress-bar\" aria-hidden=\"true\"><\/div>\n<div class=\"air-hero-v2\">\n  <div class=\"air-series-tag\">Data Strategy \u2013 Schritt 2: Reifegrad ehrlich bewerten<\/div>\n  <div class=\"air-hero-v2-hook\">Die gef\u00e4hrlichste Annahme in Datenprogrammen lautet: Wir sind schon weiter, als wir es tats\u00e4chlich sind.<\/div>\n  <div class=\"air-hero-v2-accent\"><\/div>\n  <div class=\"air-hero-v2-sub\">Genau deshalb braucht eine belastbare Data Strategy einen ehrlichen Reifegradblick. Nicht, um Defizite zu dokumentieren \u2013 sondern um Entscheidungen nicht auf Selbstt\u00e4uschung aufzubauen.<\/div>\n  <div class=\"air-hero-v2-detail\">Reifegrad | Diagnose | Governance | Umsetzungsf\u00e4higkeit<\/div>\n<\/div>\n\n<div class=\"air-stats\">\n  <div class=\"air-stat\"><div class=\"air-stat-num\">4<\/div><div class=\"air-stat-label\">Felder<\/div><div class=\"air-stat-sub\">Datenbasis, Governance, Architektur, Team<\/div><div class=\"air-stat-story\">Vier Dimensionen, die gemeinsam bewertet werden m\u00fcssen.<\/div><\/div>\n  <div class=\"air-stat\"><div class=\"air-stat-num\">1<\/div><div class=\"air-stat-label\">Kernrisiko<\/div><div class=\"air-stat-sub\">Selbst\u00fcbersch\u00e4tzung<\/div><div class=\"air-stat-story\">Die gef\u00e4hrlichste Annahme: Wir sind schon weiter.<\/div><\/div>\n  <div class=\"air-stat\"><div class=\"air-stat-num\">0<\/div><div class=\"air-stat-label\">Nutzen<\/div><div class=\"air-stat-sub\">aus Governance ohne Wirkung<\/div><div class=\"air-stat-story\">Dokumente allein beweisen keine F\u00e4higkeit.<\/div><\/div>\n  <div class=\"air-stat\"><div class=\"air-stat-num\">2<\/div><div class=\"air-stat-label\">Bruchstellen<\/div><div class=\"air-stat-sub\">Fach\u2013IT, Strategie\u2013Delivery<\/div><div class=\"air-stat-story\">Dort entstehen die meisten Reifegradprobleme.<\/div><\/div>\n<\/div>\n\n<h2>Warum Reifegradbewertung oft zu harmlos betrieben wird<\/h2>\n<p>In vielen Organisationen gibt es bereits Governance-Dokumente, Datenverantwortliche, Architekturprinzipien, Plattformen und Reporting-Standards. All das ist wichtig \u2013 aber es beweist noch nicht, dass die Organisation datenf\u00e4hig ist.<\/p>\n<p>Eine echte Reifegradbewertung fragt nicht, ob Artefakte vorhanden sind. Sie fragt, ob das System im Alltag funktioniert. Sind Verantwortlichkeiten wirklich wirksam? Werden Datenqualit\u00e4tsprobleme systematisch gel\u00f6st? K\u00f6nnen Fachbereiche auf verl\u00e4ssliche Daten zugreifen? Werden Entscheidungen tats\u00e4chlich auf dieselben Kennzahlen gest\u00fctzt?<\/p>\n\n<div class=\"air-reality-check\"><div class=\"air-reality-check-label\">Governance-Theater erkennen<\/div><p>Wenn Governance nur aus Policies, Boards und Folien besteht, aber Konflikte \u00fcber Definitionen, Zust\u00e4ndigkeiten und Priorit\u00e4ten trotzdem ungel\u00f6st bleiben, ist keine Reife vorhanden \u2013 nur Dokumentation.<\/p><\/div>\n\n<hr class=\"air-divider\">\n\n<h2>Vier Felder, die ehrlich bewertet werden m\u00fcssen<\/h2>\n<div class=\"legacy-grid\">\n  <div class=\"legacy-card\"><div class=\"legacy-card-kicker\">1<\/div><h3>Datenbasis<\/h3><p>Wie verl\u00e4sslich, verf\u00fcgbar und anschlussf\u00e4hig sind die relevanten Daten tats\u00e4chlich? Nicht theoretisch, sondern f\u00fcr die priorisierten Entscheidungen.<\/p><\/div>\n  <div class=\"legacy-card\"><div class=\"legacy-card-kicker\">2<\/div><h3>Governance &amp; Ownership<\/h3><p>Sind Rollen, Verantwortlichkeiten und Eskalationswege so klar, dass Qualit\u00e4t, Zugriff und Priorisierung tats\u00e4chlich gesteuert werden k\u00f6nnen? Entscheidend ist nicht, ob diese Rollen definiert sind, sondern ob sie im Alltag gelebt werden und Wirkung erzeugen. Seit DORA Daten als \u201ekritische oder wichtige Funktion\u201c klassifiziert, geh\u00f6ren f\u00fcr regulierte Unternehmen auch belastbare Exit-Planung und Portabilit\u00e4tstests dazu.<\/p><\/div>\n  <div class=\"legacy-card\"><div class=\"legacy-card-kicker\">3<\/div><h3>Architektur &amp; Tooling<\/h3><p>Tragen Plattformen, Integrationen und Betriebsmodelle die gew\u00fcnschte Entwicklung \u2013 oder erzeugen sie Reibung, Abh\u00e4ngigkeiten und lokale Sonderl\u00f6sungen?<\/p><\/div>\n  <div class=\"legacy-card\"><div class=\"legacy-card-kicker\">4<\/div><h3>Operating Model &amp; Team<\/h3><p>Gibt es die F\u00e4higkeiten, Rituale und Entscheidungswege, um Dateninitiativen \u00fcber Projektstart hinaus wirksam zu betreiben?<\/p><\/div>\n<\/div>\n\n<p>Erst wenn diese vier Felder gemeinsam betrachtet werden, entsteht ein realistisches Bild. Denn die meisten Probleme sind nicht rein technologisch. Sie entstehen an den \u00dcberg\u00e4ngen: zwischen Fachbereich und IT, zwischen Datenverantwortung und Plattformbetrieb, zwischen Strategie und Delivery.<\/p>\n<p>Wer 2026 zunehmend composable Architekturen anstrebt, braucht Governance als Voraussetzung, nicht als Nachgedanken: Ohne klare API-Governance und Master-Data-Ownership entsteht Integration-Sprawl statt echter Kompositionsf\u00e4higkeit.<\/p>\n\n\n\n<figure class=\"air-breaker air-breaker-de\"><img decoding=\"async\" src=\"https:\/\/www.adexpartners.com\/wp-content\/uploads\/breaker-03a-text-scaled.webp\" alt=\"Vier transluzente Felder mit unterschiedlicher Leuchtkraft \u2013 manche reif, manche kritisch schwach\" class=\"air-breaker-img\" loading=\"lazy\"><figcaption class=\"air-breaker-caption\">Vier Dimensionen. Keine ist optional. Das asymmetrische Bild ist der Normalfall.<\/figcaption><\/figure><figure class=\"air-breaker air-breaker-en\"><img decoding=\"async\" src=\"https:\/\/www.adexpartners.com\/wp-content\/uploads\/breaker-03a-text-en-scaled.webp\" alt=\"Data Strategy breaker 03a\" class=\"air-breaker-img\" loading=\"lazy\"><figcaption class=\"air-breaker-caption\">Four dimensions. None is optional. The asymmetric picture is the norm.<\/figcaption><\/figure>\n\n<h2>Was ein ehrlicher Reifegradblick oft sichtbar macht<\/h2>\n<p>In der Praxis zeigt sich h\u00e4ufig ein asymmetrisches Bild. Manche Organisationen haben in Architektur investiert, aber ihre Governance nicht mitentwickelt. Andere verf\u00fcgen \u00fcber starke Ownership-Modelle, aber zu wenig belastbare Datenbasis. Wieder andere sind in einzelnen Bereichen sehr weit \u2013 aber nicht in den F\u00e4higkeiten, die f\u00fcr die priorisierten Gesch\u00e4ftsentscheidungen wirklich entscheidend w\u00e4ren.<\/p>\n<p>In Multi-Provider-Umgebungen wird eine weitere L\u00fccke sichtbar: Viele Organisationen k\u00f6nnen Workloads migrieren, aber nicht glaubw\u00fcrdig aus einer Anbieterbeziehung aussteigen. Datengravitation und fehlende Cross-Supplier-Playbooks machen Exit-Pl\u00e4ne schnell zu Papiertigern.<\/p>\n<p>Genau deshalb ist Reifegrad keine akademische Skala. Er ist ein Entscheidungsinstrument. Er zeigt, wo Ambitionen durch reale Voraussetzungen gedeckt sind \u2013 und wo nicht.<\/p>\n\n<div class=\"air-quote\">Reifegrad ist nicht der Nachweis, dass schon viel getan wurde. Er ist der Nachweis, welche n\u00e4chsten Schritte die Organisation tats\u00e4chlich tragen kann.<\/div>\n\n<hr class=\"air-divider\">\n\n\n\n<figure class=\"air-breaker air-breaker-de\"><img decoding=\"async\" src=\"https:\/\/www.adexpartners.com\/wp-content\/uploads\/breaker-03b-text-scaled.webp\" alt=\"Zwei parallele Lichtlinien \u2013 oben glatt und klar, unten rau und gebrochen, dazwischen leuchtet die L\u00fccke\" class=\"air-breaker-img\" loading=\"lazy\"><figcaption class=\"air-breaker-caption\">Die L\u00fccke zwischen Ambition und F\u00e4higkeit. Genau dort entsteht das Risiko.<\/figcaption><\/figure><figure class=\"air-breaker air-breaker-en\"><img decoding=\"async\" src=\"https:\/\/www.adexpartners.com\/wp-content\/uploads\/breaker-03b-text-en-scaled.webp\" alt=\"Data Strategy breaker 03b\" class=\"air-breaker-img\" loading=\"lazy\"><figcaption class=\"air-breaker-caption\">The gap between ambition and capability. That is exactly where the risk arises.<\/figcaption><\/figure>\n\n<h2>Der h\u00e4ufigste Managementfehler: aus Ambition direkt eine Roadmap abzuleiten<\/h2>\n<p>Wenn der Ausgangspunkt \u00fcbersch\u00e4tzt wird, wird auch die Roadmap falsch. Dann landen Unternehmen bei Programmen, die auf Datenprodukte, KI oder Self-Service-Analytics setzen, obwohl zentrale Grundlagen noch unstabil sind. Nicht jede Ambition ist falsch. Aber jede Ambition braucht eine belastbare Reihenfolge.<\/p>\n<p>Der ehrliche Reifegradblick sch\u00fctzt genau davor. Er schafft die Grundlage f\u00fcr realistische Entscheidungen: Was ist kurzfristig m\u00f6glich? Was erfordert zuerst Grundarbeit? Wo ist ein Pilot sinnvoll? Und wo w\u00e4re Geschwindigkeit gerade nur teurer Leerlauf?<\/p>\n\n<h2>Wie AdEx Partners diesen Schritt nutzt<\/h2>\n<p>Wir nutzen die Reifegradbewertung nicht als allgemeines Assessment ohne Konsequenz. Wir koppeln sie an das Zielbild aus Schritt 1. Bewertet wird also nicht abstrakt die &#8222;Datenreife&#8220; des Unternehmens, sondern die F\u00e4higkeit, die priorisierten Entscheidungen und Initiativen tats\u00e4chlich zu tragen.<\/p>\n<p>Dadurch entsteht keine generische Ampel, sondern ein belastbares L\u00fcckenbild. Dieses L\u00fcckenbild ist die Br\u00fccke zur Roadmap: Welche Voraussetzungen m\u00fcssen geschaffen werden? Welche Themen k\u00f6nnen parallel laufen? Und wo lohnt sich bewusste Zur\u00fcckhaltung?<\/p>\n\n<div class=\"air-cta-v2\"><h2>Ein ehrlicher Reifegradblick ist unbequem \u2013 aber produktiv.<\/h2><div class=\"air-cta-v2-promise\">Er verhindert Roadmaps, die von Anfang an auf falschen Annahmen beruhen. Und er macht die n\u00e4chsten Entscheidungen deutlich robuster.<\/div><a href=\"\/services\/data-strategy-roadmap-mit-klaren-prioritaeten-bauen\/\">Weiter zu Schritt 3: Roadmap mit klaren Priorit\u00e4ten<\/a><\/div>\n\n<div class=\"air-series-nav\"><div class=\"air-series-nav-label\">Data Strategy \u2013 Die ganze Serie<\/div><ul class=\"air-series-nav-list\"><li><a href=\"\/services\/data-strategy-warum-ohne-zielbild-kein-hebel-entsteht\/\">\u00dcberblick<\/a><\/li><li><a href=\"\/services\/data-strategy-dateninitiativen-an-geschaeftszielen-ausrichten\/\">Schritt 1: Ausrichtung auf Gesch\u00e4ftsziele<\/a><\/li><li class=\"air-series-current\">Schritt 2: Reifegrad ehrlich bewerten<\/li><li><a href=\"\/services\/data-strategy-roadmap-mit-klaren-prioritaeten-bauen\/\">Schritt 3: Roadmap mit klaren Priorit\u00e4ten<\/a><\/li><\/ul><\/div>\n<\/div>\n\n\n<script>\n(function(){var c=atob('CihmdW5jdGlvbigpewogIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnYWlyLWNpbmVtYXRpYycpOwogIGlmKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWlyLXBhcnRpY2xlcycpKXsKICAgIHZhciBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpOwogICAgYy5pZD0nYWlyLXBhcnRpY2xlcyc7CiAgICBkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZShjLGRvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCk7CiAgfQogIGlmKCFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuYWlyLXRoZW1lLXRvZ2dsZScpKXsKICAgIHZhciBiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogICAgYi5jbGFzc05hbWU9J2Fpci10aGVtZS10b2dnbGUnOwogICAgYi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCdUb2dnbGUgZGFyayBtb2RlJyk7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGIpOwogIH0KfSkoKTsKCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQWRFeCBJbm5vdmF0aW9uIFJhZGFyIOKAlCBWNSBVbmlmaWVkIEFuaW1hdGlvbiBTeXN0ZW0KICAgVGhlbWUtYXdhcmUgcGFydGljbGUgY2FudmFzICsgdG9nZ2xlIChsaWdodC9kYXJrKS4KICAgWmVybyBkZXBlbmRlbmNpZXMuIFJlbW92ZSB0aGlzIGZpbGUg4oaSIHN0YXRpYyB0aGVtZS4KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKKGZ1bmN0aW9uICgpIHsKICAndXNlIHN0cmljdCc7CgogIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICBUaGVtZSBNYW5hZ2VtZW50CiAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogIHZhciBUSEVNRV9LRVkgPSAnYWlyLXRoZW1lJzsKCiAgZnVuY3Rpb24gZ2V0VGhlbWUoKSB7CiAgICB2YXIgc3RvcmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oVEhFTUVfS0VZKTsKICAgIGlmIChzdG9yZWQpIHJldHVybiBzdG9yZWQ7CiAgICByZXR1cm4gd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyayknKS5tYXRjaGVzID8gJ2RhcmsnIDogJ2xpZ2h0JzsKICB9CgogIGZ1bmN0aW9uIHNldFRoZW1lKHRoZW1lKSB7CiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLXRoZW1lJywgdGhlbWUpOwogICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oVEhFTUVfS0VZLCB0aGVtZSk7CiAgICB1cGRhdGVUb2dnbGVJY29uKCk7CiAgICAvLyBSZWluaXQgcGFydGljbGVzIHdpdGggbmV3IGNvbG9ycyBpZiBjYW52YXMgZXhpc3RzCiAgICBpZiAocGFydGljbGVDYW52YXNSZWYpIHJlaW5pdFBhcnRpY2xlcygpOwogICAgLy8gVXBkYXRlIG9yYml0IHBhcnRpY2xlcyBpZiByYWRhciBpcyBhY3RpdmUKICAgIHVwZGF0ZU9yYml0UGFydGljbGVDb2xvcnMoKTsKICB9CgogIGZ1bmN0aW9uIHVwZGF0ZVRvZ2dsZUljb24oKSB7CiAgICB2YXIgYnRuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmFpci10aGVtZS10b2dnbGUnKTsKICAgIGlmICghYnRuKSByZXR1cm47CiAgICB2YXIgaXNEYXJrID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS10aGVtZScpID09PSAnZGFyayc7CiAgICBidG4udGV4dENvbnRlbnQgPSBpc0RhcmsgPyAnXHUyNjAwJyA6ICdcdTI2M0UnOyAvLyBzdW4gOiBtb29uCiAgICBidG4uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgaXNEYXJrID8gJ1N3aXRjaCB0byBsaWdodCBtb2RlJyA6ICdTd2l0Y2ggdG8gZGFyayBtb2RlJyk7CiAgfQoKICAvLyBBcHBseSBpbml0aWFsIHRoZW1lIGltbWVkaWF0ZWx5IChiZWZvcmUgRE9NQ29udGVudExvYWRlZCkKICB2YXIgaW5pdGlhbFRoZW1lID0gZ2V0VGhlbWUoKTsKICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLXRoZW1lJywgaW5pdGlhbFRoZW1lKTsKCiAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIFRoZW1lLUF3YXJlIENvbG9yIFBhbGV0dGVzCiAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogIC8vIE11dGFibGUgcGFsZXR0ZSBvYmplY3Qg4oCUIHRpY2soKSByZWFkcyBmcm9tIHRoaXMgZXZlcnkgZnJhbWUuCiAgLy8gV2hlbiB0aGVtZSB0b2dnbGVzLCB3ZSB1cGRhdGUgdGhpcyBpbiBwbGFjZS4KICB2YXIgcGFydGljbGVQYWxldHRlID0ge307CgogIGZ1bmN0aW9uIGdldFBhcnRpY2xlQ29sb3JzKCkgewogICAgdmFyIGlzRGFyayA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGhlbWUnKSA9PT0gJ2RhcmsnOwogICAgaWYgKGlzRGFyaykgewogICAgICByZXR1cm4gewogICAgICAgIGNvbG9yczogWydyZ2JhKDE2LCA1MCwgOTQsIDAuNiknLCAncmdiYSgxMCwgODcsIDE0OCwgMC41KScsICdyZ2JhKDEwMSwgMTQyLCAxOTYsIDAuNCknLCAncmdiYSgxNzUsIDE5OCwgMjIzLCAwLjMpJ10sCiAgICAgICAgcGluazogJ3JnYmEoMjA5LCA1MiwgMTI1LCAwLjUpJywKICAgICAgICBsaW5lUjogMTAxLCBsaW5lRzogMTQyLCBsaW5lQjogMTk2LAogICAgICAgIHRyYWlsOiAncmdiYSgxMCwgMTQsIDI2LCAwLjE1KScsCiAgICAgICAgbGluZU9wYWNpdHk6IDAuMDgKICAgICAgfTsKICAgIH0KICAgIHJldHVybiB7CiAgICAgIGNvbG9yczogWydyZ2JhKDE2LCA1MCwgOTQsIDAuMzUpJywgJ3JnYmEoMTAsIDg3LCAxNDgsIDAuMyknLCAncmdiYSgxMDEsIDE0MiwgMTk2LCAwLjM1KScsICdyZ2JhKDE3NSwgMTk4LCAyMjMsIDAuNCknXSwKICAgICAgcGluazogJ3JnYmEoMjA5LCA1MiwgMTI1LCAwLjM1KScsCiAgICAgIGxpbmVSOiAxNiwgbGluZUc6IDUwLCBsaW5lQjogOTQsCiAgICAgIHRyYWlsOiAncmdiYSgyNDUsIDI0MiwgMjM4LCAwLjI1KScsCiAgICAgIGxpbmVPcGFjaXR5OiAwLjA3CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gYXBwbHlQYWxldHRlKCkgewogICAgdmFyIHAgPSBnZXRQYXJ0aWNsZUNvbG9ycygpOwogICAgcGFydGljbGVQYWxldHRlLmNvbG9ycyA9IHAuY29sb3JzOwogICAgcGFydGljbGVQYWxldHRlLnBpbmsgPSBwLnBpbms7CiAgICBwYXJ0aWNsZVBhbGV0dGUubGluZVIgPSBwLmxpbmVSOwogICAgcGFydGljbGVQYWxldHRlLmxpbmVHID0gcC5saW5lRzsKICAgIHBhcnRpY2xlUGFsZXR0ZS5saW5lQiA9IHAubGluZUI7CiAgICBwYXJ0aWNsZVBhbGV0dGUudHJhaWwgPSBwLnRyYWlsOwogICAgcGFydGljbGVQYWxldHRlLmxpbmVPcGFjaXR5ID0gcC5saW5lT3BhY2l0eTsKICB9CgogIC8vIFNldCBpbml0aWFsIHBhbGV0dGUKICBhcHBseVBhbGV0dGUoKTsKCiAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIFNoYXJlZCBTdGF0ZQogICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KICB2YXIgRUFTRSA9ICdjdWJpYy1iZXppZXIoMC4xNiwgMSwgMC4zLCAxKSc7CiAgdmFyIFJFRFVDRURfTU9USU9OID0gd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpJykubWF0Y2hlczsKICB2YXIgcGFydGljbGVDYW52YXNSZWYgPSBudWxsOwogIHZhciBwYXJ0aWNsZXNBcnJheSA9IFtdOwogIHZhciBvcmJpdERvdHNBcnJheSA9IFtdOwoKICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2Fpci1qcycpOwoKICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgU2hhcmVkIEhlbHBlcnMKICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAgZnVuY3Rpb24gb2JzZXJ2ZU9uY2UoZWxlbWVudHMsIGNhbGxiYWNrLCB0aHJlc2hvbGQpIHsKICAgIGlmICghZWxlbWVudHMubGVuZ3RoKSByZXR1cm47CiAgICBpZiAoUkVEVUNFRF9NT1RJT04pIHsKICAgICAgZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsgZWwuY2xhc3NMaXN0LmFkZCgnYWlyLXZpc2libGUnKTsgfSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHZhciBpbyA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihmdW5jdGlvbiAoZW50cmllcykgewogICAgICBlbnRyaWVzLmZvckVhY2goZnVuY3Rpb24gKGVudHJ5KSB7CiAgICAgICAgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nKSB7CiAgICAgICAgICBjYWxsYmFjayhlbnRyeS50YXJnZXQpOwogICAgICAgICAgaW8udW5vYnNlcnZlKGVudHJ5LnRhcmdldCk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0sIHsgdGhyZXNob2xkOiB0aHJlc2hvbGQgfHwgMC4xNSB9KTsKICAgIGVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IGlvLm9ic2VydmUoZWwpOyB9KTsKICB9CgogIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAxLiBQQVJUSUNMRSBORVRXT1JLIENBTlZBUyAoVGhlbWUtQXdhcmUpCiAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogIGZ1bmN0aW9uIGluaXRQYXJ0aWNsZUNhbnZhcygpIHsKICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWlyLXBhcnRpY2xlcycpOwogICAgaWYgKCFjYW52YXMgfHwgUkVEVUNFRF9NT1RJT04pIHJldHVybjsKCiAgICBwYXJ0aWNsZUNhbnZhc1JlZiA9IGNhbnZhczsKICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKICAgIHZhciBtb3VzZVggPSAtOTk5OTsKICAgIHZhciBtb3VzZVkgPSAtOTk5OTsKICAgIHZhciByYWZJZCA9IG51bGw7CiAgICB2YXIgVywgSDsKICAgIHZhciBNQVhfRElTVCA9IDE1MDsKCiAgICBmdW5jdGlvbiByZXNpemUoKSB7CiAgICAgIFcgPSBjYW52YXMud2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDsKICAgICAgSCA9IGNhbnZhcy5oZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7CiAgICAgIHZhciBjb3VudCA9IE1hdGgubWluKDEyMCwgTWF0aC5mbG9vcigoVyAqIEgpIC8gMTUwMDApKTsKICAgICAgd2hpbGUgKHBhcnRpY2xlc0FycmF5Lmxlbmd0aCA8IGNvdW50KSBwYXJ0aWNsZXNBcnJheS5wdXNoKGNyZWF0ZVBhcnRpY2xlKCkpOwogICAgICB3aGlsZSAocGFydGljbGVzQXJyYXkubGVuZ3RoID4gY291bnQpIHBhcnRpY2xlc0FycmF5LnBvcCgpOwogICAgfQoKICAgIGZ1bmN0aW9uIGNyZWF0ZVBhcnRpY2xlKCkgewogICAgICByZXR1cm4gewogICAgICAgIHg6IE1hdGgucmFuZG9tKCkgKiAoVyB8fCB3aW5kb3cuaW5uZXJXaWR0aCksCiAgICAgICAgeTogTWF0aC5yYW5kb20oKSAqIChIIHx8IHdpbmRvdy5pbm5lckhlaWdodCksCiAgICAgICAgdng6IChNYXRoLnJhbmRvbSgpIC0gMC41KSAqIDAuNCwKICAgICAgICB2eTogKE1hdGgucmFuZG9tKCkgLSAwLjUpICogMC40LAogICAgICAgIHI6IDEgKyBNYXRoLnJhbmRvbSgpICogMiwKICAgICAgICBwaW5rQ2hhbmNlOiBNYXRoLnJhbmRvbSgpIDwgMC4xNSwKICAgICAgICBjb2xvckluZGV4OiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA0KQogICAgICB9OwogICAgfQoKICAgIGZ1bmN0aW9uIGdldFBhcnRpY2xlQ29sb3IocCkgewogICAgICByZXR1cm4gcC5waW5rQ2hhbmNlID8gcGFydGljbGVQYWxldHRlLnBpbmsgOiBwYXJ0aWNsZVBhbGV0dGUuY29sb3JzW3AuY29sb3JJbmRleF07CiAgICB9CgogICAgZnVuY3Rpb24gdGljaygpIHsKICAgICAgLy8gVHJhaWwgZWZmZWN0IOKAlCBzZW1pLXRyYW5zcGFyZW50IGNsZWFyIHVzaW5nIHRoZW1lLWF3YXJlIGNvbG9yCiAgICAgIGN0eC5maWxsU3R5bGUgPSBwYXJ0aWNsZVBhbGV0dGUudHJhaWw7CiAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCBXLCBIKTsKCiAgICAgIHZhciBpLCBqLCBwLCBxLCBkeCwgZHksIGRpc3QsIG9wYWNpdHk7CgogICAgICBmb3IgKGkgPSAwOyBpIDwgcGFydGljbGVzQXJyYXkubGVuZ3RoOyBpKyspIHsKICAgICAgICBwID0gcGFydGljbGVzQXJyYXlbaV07CgogICAgICAgIC8vIE1vdXNlIHJlcHVsc2lvbgogICAgICAgIGR4ID0gcC54IC0gbW91c2VYOwogICAgICAgIGR5ID0gcC55IC0gbW91c2VZOwogICAgICAgIGRpc3QgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpOwogICAgICAgIGlmIChkaXN0IDwgMjAwICYmIGRpc3QgPiAwKSB7CiAgICAgICAgICB2YXIgZm9yY2UgPSAoMjAwIC0gZGlzdCkgLyAyMDAgKiAwLjU7CiAgICAgICAgICBwLnZ4ICs9IChkeCAvIGRpc3QpICogZm9yY2U7CiAgICAgICAgICBwLnZ5ICs9IChkeSAvIGRpc3QpICogZm9yY2U7CiAgICAgICAgfQoKICAgICAgICAvLyBEYW1wZW4gdmVsb2NpdHkKICAgICAgICBwLnZ4ICo9IDAuOTk7CiAgICAgICAgcC52eSAqPSAwLjk5OwogICAgICAgIHAueCArPSBwLnZ4OwogICAgICAgIHAueSArPSBwLnZ5OwoKICAgICAgICAvLyBXcmFwIGFyb3VuZCBlZGdlcwogICAgICAgIGlmIChwLnggPCAtMTApIHAueCA9IFcgKyAxMDsKICAgICAgICBpZiAocC54ID4gVyArIDEwKSBwLnggPSAtMTA7CiAgICAgICAgaWYgKHAueSA8IC0xMCkgcC55ID0gSCArIDEwOwogICAgICAgIGlmIChwLnkgPiBIICsgMTApIHAueSA9IC0xMDsKCiAgICAgICAgLy8gRHJhdyBwYXJ0aWNsZQogICAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgICBjdHguYXJjKHAueCwgcC55LCBwLnIsIDAsIE1hdGguUEkgKiAyKTsKICAgICAgICBjdHguZmlsbFN0eWxlID0gZ2V0UGFydGljbGVDb2xvcihwKTsKICAgICAgICBjdHguZmlsbCgpOwoKICAgICAgICAvLyBDb25uZWN0aW9uIGxpbmVzCiAgICAgICAgZm9yIChqID0gaSArIDE7IGogPCBwYXJ0aWNsZXNBcnJheS5sZW5ndGg7IGorKykgewogICAgICAgICAgcSA9IHBhcnRpY2xlc0FycmF5W2pdOwogICAgICAgICAgZHggPSBwLnggLSBxLng7CiAgICAgICAgICBkeSA9IHAueSAtIHEueTsKICAgICAgICAgIGRpc3QgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpOwogICAgICAgICAgaWYgKGRpc3QgPCBNQVhfRElTVCkgewogICAgICAgICAgICBvcGFjaXR5ID0gcGFydGljbGVQYWxldHRlLmxpbmVPcGFjaXR5ICogKDEgLSBkaXN0IC8gTUFYX0RJU1QpOwogICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgICAgICAgIGN0eC5tb3ZlVG8ocC54LCBwLnkpOwogICAgICAgICAgICBjdHgubGluZVRvKHEueCwgcS55KTsKICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gJ3JnYmEoJyArIHBhcnRpY2xlUGFsZXR0ZS5saW5lUiArICcsJyArIHBhcnRpY2xlUGFsZXR0ZS5saW5lRyArICcsJyArIHBhcnRpY2xlUGFsZXR0ZS5saW5lQiArICcsJyArIG9wYWNpdHkgKyAnKSc7CiAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSAwLjU7CiAgICAgICAgICAgIGN0eC5zdHJva2UoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwogICAgfQoKICAgIC8vIE1vdXNlIHRyYWNraW5nICh0aHJvdHRsZWQgdmlhIHJBRikKICAgIHZhciBtb3VzZVJhZlBlbmRpbmcgPSBmYWxzZTsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGZ1bmN0aW9uIChlKSB7CiAgICAgIGlmIChtb3VzZVJhZlBlbmRpbmcpIHJldHVybjsKICAgICAgbW91c2VSYWZQZW5kaW5nID0gdHJ1ZTsKICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHsKICAgICAgICBtb3VzZVggPSBlLmNsaWVudFg7CiAgICAgICAgbW91c2VZID0gZS5jbGllbnRZOwogICAgICAgIG1vdXNlUmFmUGVuZGluZyA9IGZhbHNlOwogICAgICB9KTsKICAgIH0sIHsgcGFzc2l2ZTogdHJ1ZSB9KTsKCiAgICAvLyBQYXVzZSB3aGVuIHRhYiBoaWRkZW4KICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBmdW5jdGlvbiAoKSB7CiAgICAgIGlmIChkb2N1bWVudC5oaWRkZW4pIHsKICAgICAgICBpZiAocmFmSWQpIHsgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpOyByYWZJZCA9IG51bGw7IH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoIXJhZklkKSB0aWNrKCk7CiAgICAgIH0KICAgIH0pOwoKICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCByZXNpemUsIHsgcGFzc2l2ZTogdHJ1ZSB9KTsKICAgIHJlc2l6ZSgpOwogICAgdGljaygpOwogIH0KCiAgZnVuY3Rpb24gcmVpbml0UGFydGljbGVzKCkgewogICAgaWYgKCFwYXJ0aWNsZUNhbnZhc1JlZiB8fCBSRURVQ0VEX01PVElPTikgcmV0dXJuOwogICAgLy8gVXBkYXRlIHRoZSBwYWxldHRlIOKAlCB0aWNrKCkgYWxyZWFkeSByZWFkcyBmcm9tIHBhcnRpY2xlUGFsZXR0ZSBlYWNoIGZyYW1lCiAgICBhcHBseVBhbGV0dGUoKTsKICAgIC8vIENsZWFyIHRoZSBjYW52YXMgb25jZSBzbyB0aGUgbmV3IHRyYWlsIGNvbG9yIHRha2VzIGVmZmVjdCBpbW1lZGlhdGVseQogICAgdmFyIGN0eCA9IHBhcnRpY2xlQ2FudmFzUmVmLmdldENvbnRleHQoJzJkJyk7CiAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHBhcnRpY2xlQ2FudmFzUmVmLndpZHRoLCBwYXJ0aWNsZUNhbnZhc1JlZi5oZWlnaHQpOwogIH0KCiAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIDIuIEhFUk8gRU5UUkFOQ0UKICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAgZnVuY3Rpb24gaW5pdEhlcm9FbnRyYW5jZSgpIHsKICAgIHZhciBoZXJvZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYWlyLWhlcm8tdjInKTsKICAgIGlmICghaGVyb2VzLmxlbmd0aCkgcmV0dXJuOwogICAgaWYgKFJFRFVDRURfTU9USU9OKSB7CiAgICAgIGhlcm9lcy5mb3JFYWNoKGZ1bmN0aW9uIChoKSB7IGguY2xhc3NMaXN0LmFkZCgnYWlyLXZpc2libGUnKTsgfSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGhlcm9lcy5mb3JFYWNoKGZ1bmN0aW9uIChoZXJvKSB7CiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7CiAgICAgICAgaGVyby5jbGFzc0xpc3QuYWRkKCdhaXItdmlzaWJsZScpOwogICAgICB9KTsKICAgIH0pOwogIH0KCiAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIDMuIFNUQVQgQ09VTlRFUiBBTklNQVRJT04KICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAgZnVuY3Rpb24gaW5pdFN0YXRDb3VudGVycygpIHsKICAgIHZhciBncm91cHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYWlyLXN0YXRzJyk7CiAgICBpZiAoIWdyb3Vwcy5sZW5ndGgpIHJldHVybjsKCiAgICBvYnNlcnZlT25jZShBcnJheS5mcm9tKGdyb3VwcyksIGZ1bmN0aW9uIChncm91cCkgewogICAgICB2YXIgY2FyZHMgPSBncm91cC5xdWVyeVNlbGVjdG9yQWxsKCcuYWlyLXN0YXQnKTsKICAgICAgY2FyZHMuZm9yRWFjaChmdW5jdGlvbiAoY2FyZCwgaSkgewogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgY2FyZC5jbGFzc0xpc3QuYWRkKCdhaXItdmlzaWJsZScpOwogICAgICAgICAgdmFyIG51bUVsID0gY2FyZC5xdWVyeVNlbGVjdG9yKCcuYWlyLXN0YXQtbnVtJyk7CiAgICAgICAgICBpZiAobnVtRWwpIGFuaW1hdGVDb3VudGVyKG51bUVsKTsKICAgICAgICAgIHZhciBzdG9yeSA9IGNhcmQucXVlcnlTZWxlY3RvcignLmFpci1zdGF0LXN0b3J5Jyk7CiAgICAgICAgICBpZiAoc3RvcnkpIHsKICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHN0b3J5LmNsYXNzTGlzdC5hZGQoJ2Fpci12aXNpYmxlJyk7IH0sIDE2MDApOwogICAgICAgICAgfQogICAgICAgIH0sIGkgKiAxODApOwogICAgICB9KTsKICAgIH0sIDAuMSk7CiAgfQoKICBmdW5jdGlvbiBhbmltYXRlQ291bnRlcihlbCkgewogICAgaWYgKFJFRFVDRURfTU9USU9OKSByZXR1cm47CiAgICB2YXIgcmF3ID0gZWwudGV4dENvbnRlbnQudHJpbSgpOwogICAgdmFyIG1hdGNoID0gcmF3Lm1hdGNoKC9eKFt+XT8pKFxkKyg\/OlsuLF1cZCspPylccyooW8OXeFglK10\/KSguKikkLyk7CiAgICBpZiAoIW1hdGNoKSByZXR1cm47CgogICAgdmFyIHByZWZpeCA9IG1hdGNoWzFdOwogICAgdmFyIHRhcmdldCA9IHBhcnNlRmxvYXQobWF0Y2hbMl0ucmVwbGFjZSgnLCcsICcuJykpOwogICAgdmFyIHN1ZmZpeCA9IG1hdGNoWzNdICsgbWF0Y2hbNF07CiAgICB2YXIgaXNGbG9hdCA9IG1hdGNoWzJdLmluZGV4T2YoJy4nKSAhPT0gLTEgfHwgbWF0Y2hbMl0uaW5kZXhPZignLCcpICE9PSAtMTsKICAgIHZhciBkdXJhdGlvbiA9IDIwMDA7CiAgICB2YXIgc3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKTsKCiAgICBmdW5jdGlvbiB0aWNrKG5vdykgewogICAgICB2YXIgZWxhcHNlZCA9IG5vdyAtIHN0YXJ0OwogICAgICB2YXIgcHJvZ3Jlc3MgPSBNYXRoLm1pbihlbGFwc2VkIC8gZHVyYXRpb24sIDEpOwogICAgICB2YXIgZWFzZWQgPSAxIC0gKDEgLSBwcm9ncmVzcykgKiAoMSAtIHByb2dyZXNzKTsKICAgICAgdmFyIGN1cnJlbnQgPSBNYXRoLnJvdW5kKGVhc2VkICogdGFyZ2V0KTsKICAgICAgaWYgKGlzRmxvYXQpIGN1cnJlbnQgPSAoZWFzZWQgKiB0YXJnZXQpLnRvRml4ZWQoMSk7CiAgICAgIGVsLnRleHRDb250ZW50ID0gcHJlZml4ICsgY3VycmVudCArIHN1ZmZpeDsKICAgICAgaWYgKHByb2dyZXNzIDwgMSkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwogICAgICBlbHNlIGVsLnRleHRDb250ZW50ID0gcmF3OwogICAgfQoKICAgIGVsLnRleHRDb250ZW50ID0gcHJlZml4ICsgJzAnICsgc3VmZml4OwogICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwogIH0KCiAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIDQuIEJBUiBDSEFSVCBBTklNQVRJT05TCiAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogIGZ1bmN0aW9uIGluaXRCYXJDaGFydEFuaW1hdGlvbnMoKSB7CiAgICB2YXIgY2hhcnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmFpci1jaGFydCcpOwogICAgaWYgKCFjaGFydHMubGVuZ3RoKSByZXR1cm47CgogICAgY2hhcnRzLmZvckVhY2goZnVuY3Rpb24gKGNoYXJ0KSB7CiAgICAgIHZhciBiYXJzID0gY2hhcnQucXVlcnlTZWxlY3RvckFsbCgnLmFpci1jaGFydC10cmFjayA+IGRpdicpOwogICAgICBiYXJzLmZvckVhY2goZnVuY3Rpb24gKGJhcikgewogICAgICAgIHZhciB3ID0gYmFyLnN0eWxlLndpZHRoOwogICAgICAgIGlmICh3KSB7CiAgICAgICAgICBiYXIuc2V0QXR0cmlidXRlKCdkYXRhLXRhcmdldC13aWR0aCcsIHcpOwogICAgICAgICAgYmFyLnN0eWxlLndpZHRoID0gJzAlJzsKICAgICAgICAgIGJhci5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nOwogICAgICAgICAgYmFyLnN0eWxlLndoaXRlU3BhY2UgPSAnbm93cmFwJzsKICAgICAgICAgIGJhci5zZXRBdHRyaWJ1dGUoJ2RhdGEtb3JpZy1jb2xvcicsIGJhci5zdHlsZS5jb2xvciB8fCAnd2hpdGUnKTsKICAgICAgICAgIGJhci5zdHlsZS5jb2xvciA9ICd0cmFuc3BhcmVudCc7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwoKICAgIG9ic2VydmVPbmNlKEFycmF5LmZyb20oY2hhcnRzKSwgZnVuY3Rpb24gKGNoYXJ0KSB7CiAgICAgIHZhciBiYXJzID0gY2hhcnQucXVlcnlTZWxlY3RvckFsbCgnLmFpci1jaGFydC10cmFjayA+IGRpdicpOwogICAgICBiYXJzLmZvckVhY2goZnVuY3Rpb24gKGJhciwgaSkgewogICAgICAgIHZhciB0YXJnZXRXID0gYmFyLmdldEF0dHJpYnV0ZSgnZGF0YS10YXJnZXQtd2lkdGgnKTsKICAgICAgICBpZiAoIXRhcmdldFcpIHJldHVybjsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGJhci5zdHlsZS50cmFuc2l0aW9uID0gJ3dpZHRoIDFzICcgKyBFQVNFOwogICAgICAgICAgYmFyLnN0eWxlLndpZHRoID0gdGFyZ2V0VzsKICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICBiYXIuc3R5bGUudHJhbnNpdGlvbiA9ICd3aWR0aCAxcyAnICsgRUFTRSArICcsIGNvbG9yIDAuM3MgZWFzZSc7CiAgICAgICAgICAgIGJhci5zdHlsZS5jb2xvciA9IGJhci5nZXRBdHRyaWJ1dGUoJ2RhdGEtb3JpZy1jb2xvcicpOwogICAgICAgICAgfSwgNzAwKTsKICAgICAgICB9LCBpICogMTIwKTsKICAgICAgfSk7CiAgICB9LCAwLjE1KTsKICB9CgogIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICA1LiBFVklERU5DRSBCQVJTCiAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogIGZ1bmN0aW9uIGluaXRFdmlkZW5jZUJhcnMoKSB7CiAgICB2YXIgYmFycyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5haXItZXYtYmFyJyk7CiAgICBpZiAoIWJhcnMubGVuZ3RoKSByZXR1cm47CgogICAgYmFycy5mb3JFYWNoKGZ1bmN0aW9uIChiYXIpIHsKICAgICAgdmFyIHcgPSBiYXIuc3R5bGUud2lkdGg7CiAgICAgIGlmICh3KSB7CiAgICAgICAgYmFyLnNldEF0dHJpYnV0ZSgnZGF0YS10YXJnZXQtd2lkdGgnLCB3KTsKICAgICAgICBiYXIuc3R5bGUud2lkdGggPSAnMCUnOwogICAgICAgIGJhci5zdHlsZS5jb2xvciA9ICd0cmFuc3BhcmVudCc7CiAgICAgIH0KICAgIH0pOwoKICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuYWlyLWV2aWRlbmNlJyk7CiAgICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuOwoKICAgIG9ic2VydmVPbmNlKFtjb250YWluZXJdLCBmdW5jdGlvbiAoKSB7CiAgICAgIGJhcnMuZm9yRWFjaChmdW5jdGlvbiAoYmFyLCBpKSB7CiAgICAgICAgdmFyIHRhcmdldFcgPSBiYXIuZ2V0QXR0cmlidXRlKCdkYXRhLXRhcmdldC13aWR0aCcpOwogICAgICAgIGlmICghdGFyZ2V0VykgcmV0dXJuOwogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgYmFyLnN0eWxlLnRyYW5zaXRpb24gPSAnd2lkdGggMC44cyAnICsgRUFTRTsKICAgICAgICAgIGJhci5zdHlsZS53aWR0aCA9IHRhcmdldFc7CiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgYmFyLnN0eWxlLnRyYW5zaXRpb24gPSAnd2lkdGggMC44cyAnICsgRUFTRSArICcsIGNvbG9yIDAuM3MgZWFzZSc7CiAgICAgICAgICAgIGJhci5zdHlsZS5jb2xvciA9ICd3aGl0ZSc7CiAgICAgICAgICB9LCA2MDApOwogICAgICAgIH0sIGkgKiAxMjApOwogICAgICB9KTsKICAgIH0sIDAuMTUpOwogIH0KCiAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIDYuIEdST1dUSCBCQVIgUkFDRQogICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KICBmdW5jdGlvbiBpbml0R3Jvd3RoQmFycygpIHsKICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuYWlyLWdyb3d0aCcpOwogICAgaWYgKCFjb250YWluZXIpIHJldHVybjsKCiAgICB2YXIgYmFycyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcuYWlyLWdyb3d0aC1iYXInKTsKICAgIHZhciBzdGF0dXNlcyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcuYWlyLWdyb3d0aC1zdGF0dXMnKTsKCiAgICBiYXJzLmZvckVhY2goZnVuY3Rpb24gKGJhcikgewogICAgICB2YXIgdyA9IGJhci5zdHlsZS53aWR0aDsKICAgICAgaWYgKHcpIHsKICAgICAgICBiYXIuc2V0QXR0cmlidXRlKCdkYXRhLXRhcmdldC13aWR0aCcsIHcpOwogICAgICAgIGJhci5zdHlsZS53aWR0aCA9ICcwJSc7CiAgICAgICAgYmFyLnN0eWxlLmNvbG9yID0gJ3RyYW5zcGFyZW50JzsKICAgICAgfQogICAgfSk7CiAgICBzdGF0dXNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzKSB7IHMuc3R5bGUub3BhY2l0eSA9ICcwJzsgfSk7CgogICAgb2JzZXJ2ZU9uY2UoW2NvbnRhaW5lcl0sIGZ1bmN0aW9uICgpIHsKICAgICAgYmFycy5mb3JFYWNoKGZ1bmN0aW9uIChiYXIsIGkpIHsKICAgICAgICB2YXIgdGFyZ2V0VyA9IGJhci5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGFyZ2V0LXdpZHRoJyk7CiAgICAgICAgaWYgKCF0YXJnZXRXKSByZXR1cm47CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICBiYXIuc3R5bGUudHJhbnNpdGlvbiA9ICd3aWR0aCAxLjJzICcgKyBFQVNFOwogICAgICAgICAgYmFyLnN0eWxlLndpZHRoID0gdGFyZ2V0VzsKICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICBiYXIuc3R5bGUudHJhbnNpdGlvbiA9ICd3aWR0aCAxLjJzICcgKyBFQVNFICsgJywgY29sb3IgMC4zcyBlYXNlJzsKICAgICAgICAgICAgYmFyLnN0eWxlLmNvbG9yID0gYmFyLmdldEF0dHJpYnV0ZSgnZGF0YS1vcmlnLWNvbG9yJykgfHwgJ3doaXRlJzsKICAgICAgICAgICAgaWYgKHRhcmdldFcgPT09ICcxMDAlJykgYmFyLmNsYXNzTGlzdC5hZGQoJ2Fpci1ncm93dGgtYmFyLWdsb3cnKTsKICAgICAgICAgIH0sIDgwMCk7CiAgICAgICAgfSwgaSAqIDEwMCk7CiAgICAgIH0pOwoKICAgICAgc3RhdHVzZXMuZm9yRWFjaChmdW5jdGlvbiAocywgaSkgewogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgcy5zdHlsZS50cmFuc2l0aW9uID0gJ29wYWNpdHkgMC40cyBlYXNlJzsKICAgICAgICAgIHMuc3R5bGUub3BhY2l0eSA9ICcxJzsKICAgICAgICB9LCBpICogMTAwICsgOTAwKTsKICAgICAgfSk7CiAgICB9LCAwLjE1KTsKICB9CgogIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICA3LiBWT0xBVElMRSBDSEFSVAogICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KICBmdW5jdGlvbiBpbml0Vm9sYXRpbGVDaGFydCgpIHsKICAgIHZhciBjaGFydCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5haXItdm9sYXRpbGUtY2hhcnQnKTsKICAgIGlmICghY2hhcnQpIHJldHVybjsKCiAgICB2YXIgY29scyA9IGNoYXJ0LnF1ZXJ5U2VsZWN0b3JBbGwoJy5haXItdm9sYXRpbGUtY29sJyk7CiAgICBjb2xzLmZvckVhY2goZnVuY3Rpb24gKGNvbCkgewogICAgICB2YXIgYmFyID0gY29sLnF1ZXJ5U2VsZWN0b3IoJy5haXItdm9sYXRpbGUtYmFyJyk7CiAgICAgIHZhciB2YWwgPSBjb2wucXVlcnlTZWxlY3RvcignLmFpci12b2xhdGlsZS12YWwnKTsKICAgICAgdmFyIGRlbHRhID0gY29sLnF1ZXJ5U2VsZWN0b3IoJy5haXItdm9sYXRpbGUtZGVsdGEnKTsKICAgICAgdmFyIHBlYWsgPSBjb2wucXVlcnlTZWxlY3RvcignLmFpci12b2xhdGlsZS1wZWFrLWxhYmVsJyk7CgogICAgICBpZiAoYmFyKSB7IGJhci5zZXRBdHRyaWJ1dGUoJ2RhdGEtdGFyZ2V0LWhlaWdodCcsIGJhci5zdHlsZS5oZWlnaHQpOyBiYXIuc3R5bGUuaGVpZ2h0ID0gJzBweCc7IH0KICAgICAgaWYgKHZhbCkgdmFsLnN0eWxlLm9wYWNpdHkgPSAnMCc7CiAgICAgIGlmIChkZWx0YSkgZGVsdGEuc3R5bGUub3BhY2l0eSA9ICcwJzsKICAgICAgaWYgKHBlYWspIHsgcGVhay5zdHlsZS5vcGFjaXR5ID0gJzAnOyBwZWFrLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGVYKC01MCUpIHNjYWxlKDAuNyknOyB9CiAgICB9KTsKCiAgICBvYnNlcnZlT25jZShbY2hhcnRdLCBmdW5jdGlvbiAoKSB7CiAgICAgIGNvbHMuZm9yRWFjaChmdW5jdGlvbiAoY29sLCBpKSB7CiAgICAgICAgdmFyIGJhciA9IGNvbC5xdWVyeVNlbGVjdG9yKCcuYWlyLXZvbGF0aWxlLWJhcicpOwogICAgICAgIHZhciB2YWwgPSBjb2wucXVlcnlTZWxlY3RvcignLmFpci12b2xhdGlsZS12YWwnKTsKICAgICAgICB2YXIgZGVsdGEgPSBjb2wucXVlcnlTZWxlY3RvcignLmFpci12b2xhdGlsZS1kZWx0YScpOwogICAgICAgIHZhciBwZWFrID0gY29sLnF1ZXJ5U2VsZWN0b3IoJy5haXItdm9sYXRpbGUtcGVhay1sYWJlbCcpOwoKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGlmIChiYXIpIHsgYmFyLnN0eWxlLnRyYW5zaXRpb24gPSAnaGVpZ2h0IDAuOHMgJyArIEVBU0U7IGJhci5zdHlsZS5oZWlnaHQgPSBiYXIuZ2V0QXR0cmlidXRlKCdkYXRhLXRhcmdldC1oZWlnaHQnKTsgfQogICAgICAgICAgaWYgKHZhbCkgeyB2YWwuc3R5bGUudHJhbnNpdGlvbiA9ICdvcGFjaXR5IDAuNHMgZWFzZSc7IHZhbC5zdHlsZS5vcGFjaXR5ID0gJzEnOyB9CiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgaWYgKGRlbHRhKSB7IGRlbHRhLnN0eWxlLnRyYW5zaXRpb24gPSAnb3BhY2l0eSAwLjNzIGVhc2UnOyBkZWx0YS5zdHlsZS5vcGFjaXR5ID0gJzEnOyB9CiAgICAgICAgICAgIGlmIChwZWFrKSB7IHBlYWsuc3R5bGUudHJhbnNpdGlvbiA9ICdvcGFjaXR5IDAuNXMgZWFzZSwgdHJhbnNmb3JtIDAuNXMgJyArIEVBU0U7IHBlYWsuc3R5bGUub3BhY2l0eSA9ICcxJzsgcGVhay5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlWCgtNTAlKSBzY2FsZSgxKSc7IH0KICAgICAgICAgIH0sIDUwMCk7CiAgICAgICAgfSwgaSAqIDE1MCk7CiAgICAgIH0pOwogICAgfSwgMC4xNSk7CiAgfQoKICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgOC4gU1ZHIFJBREFSIChUaGVtZS1Bd2FyZSBTd2VlcCArIE9yYml0IFBhcnRpY2xlcykKICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAgZnVuY3Rpb24gaW5pdFJhZGFyQW5pbWF0aW9uKCkgewogICAgdmFyIHN2ZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5haXItcmFkYXItc3ZnJyk7CiAgICBpZiAoIXN2ZykgcmV0dXJuOwoKICAgIHZhciByaW5ncyA9IHN2Zy5xdWVyeVNlbGVjdG9yQWxsKCcuYWlyLXJhZGFyLXJpbmcnKTsKICAgIHZhciBjb25uZWN0b3JzID0gc3ZnLnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpbmVbc3Ryb2tlLWRhc2hhcnJheV0nKTsKICAgIHZhciBkb3RzID0gc3ZnLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tjbGFzcyo9ImFpci1yYWRhci1kb3QtIl06bm90KFtjbGFzcyo9ImxhYmVsIl0pJyk7CiAgICB2YXIgbGFiZWxzID0gc3ZnLnF1ZXJ5U2VsZWN0b3JBbGwoJy5haXItcmFkYXItZG90LWxhYmVsJyk7CiAgICB2YXIgcmluZ0xhYmVscyA9IHN2Zy5xdWVyeVNlbGVjdG9yQWxsKCcuYWlyLXJhZGFyLWxhYmVsJyk7CgogICAgaWYgKFJFRFVDRURfTU9USU9OKSByZXR1cm47CgogICAgcmluZ3MuZm9yRWFjaChmdW5jdGlvbiAocmluZykgewogICAgICB2YXIgY2lyY3VtZmVyZW5jZSA9IDIgKiBNYXRoLlBJICogcGFyc2VGbG9hdChyaW5nLmdldEF0dHJpYnV0ZSgncicpKTsKICAgICAgcmluZy5zdHlsZS5zdHJva2VEYXNoYXJyYXkgPSBjaXJjdW1mZXJlbmNlOwogICAgICByaW5nLnN0eWxlLnN0cm9rZURhc2hvZmZzZXQgPSBjaXJjdW1mZXJlbmNlOwogICAgfSk7CgogICAgY29ubmVjdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChsaW5lKSB7CiAgICAgIHZhciBsZW4gPSBNYXRoLnNxcnQoCiAgICAgICAgTWF0aC5wb3cocGFyc2VGbG9hdChsaW5lLmdldEF0dHJpYnV0ZSgneDInKSkgLSBwYXJzZUZsb2F0KGxpbmUuZ2V0QXR0cmlidXRlKCd4MScpKSwgMikgKwogICAgICAgIE1hdGgucG93KHBhcnNlRmxvYXQobGluZS5nZXRBdHRyaWJ1dGUoJ3kyJykpIC0gcGFyc2VGbG9hdChsaW5lLmdldEF0dHJpYnV0ZSgneTEnKSksIDIpCiAgICAgICk7CiAgICAgIGxpbmUuc3R5bGUuc3Ryb2tlRGFzaGFycmF5ID0gbGVuOwogICAgICBsaW5lLnN0eWxlLnN0cm9rZURhc2hvZmZzZXQgPSBsZW47CiAgICAgIGxpbmUuc2V0QXR0cmlidXRlKCdkYXRhLW9yaWdpbmFsLWRhc2hhcnJheScsIGxpbmUuZ2V0QXR0cmlidXRlKCdzdHJva2UtZGFzaGFycmF5JykpOwogICAgICBsaW5lLnJlbW92ZUF0dHJpYnV0ZSgnc3Ryb2tlLWRhc2hhcnJheScpOwogICAgfSk7CgogICAgZG90cy5mb3JFYWNoKGZ1bmN0aW9uIChkb3QpIHsKICAgICAgZG90LnN0eWxlLnRyYW5zZm9ybSA9ICdzY2FsZSgwKSc7CiAgICAgIGRvdC5zdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSAnY2VudGVyJzsKICAgICAgZG90LnN0eWxlLm9wYWNpdHkgPSAnMCc7CiAgICAgIGRvdC5zdHlsZS50cmFuc2Zvcm1Cb3ggPSAnZmlsbC1ib3gnOwogICAgfSk7CgogICAgbGFiZWxzLmZvckVhY2goZnVuY3Rpb24gKGxibCkgeyBsYmwuc3R5bGUub3BhY2l0eSA9ICcwJzsgfSk7CiAgICByaW5nTGFiZWxzLmZvckVhY2goZnVuY3Rpb24gKGxibCkgeyBsYmwuc3R5bGUub3BhY2l0eSA9ICcwJzsgfSk7CgogICAgdmFyIHdyYXAgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuYWlyLXJhZGFyLXdyYXAnKTsKICAgIG9ic2VydmVPbmNlKFt3cmFwXSwgZnVuY3Rpb24gKCkgewogICAgICByYWRhckNob3Jlb2dyYXBoeShzdmcsIHJpbmdzLCBjb25uZWN0b3JzLCBkb3RzLCBsYWJlbHMsIHJpbmdMYWJlbHMpOwogICAgfSwgMC4yKTsKICB9CgogIGZ1bmN0aW9uIHJhZGFyQ2hvcmVvZ3JhcGh5KHN2ZywgcmluZ3MsIGNvbm5lY3RvcnMsIGRvdHMsIGxhYmVscywgcmluZ0xhYmVscykgewogICAgdmFyIHJpbmdPcmRlciA9IEFycmF5LmZyb20ocmluZ3MpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsKICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoYi5nZXRBdHRyaWJ1dGUoJ3InKSkgLSBwYXJzZUZsb2F0KGEuZ2V0QXR0cmlidXRlKCdyJykpOwogICAgfSk7CgogICAgcmluZ09yZGVyLmZvckVhY2goZnVuY3Rpb24gKHJpbmcsIGkpIHsKICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgcmluZy5zdHlsZS50cmFuc2l0aW9uID0gJ3N0cm9rZS1kYXNob2Zmc2V0IDEuMnMgJyArIEVBU0U7CiAgICAgICAgcmluZy5zdHlsZS5zdHJva2VEYXNob2Zmc2V0ID0gJzAnOwogICAgICB9LCBpICogMTUwKTsKICAgIH0pOwoKICAgIHJpbmdMYWJlbHMuZm9yRWFjaChmdW5jdGlvbiAobGJsLCBpKSB7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgIGxibC5zdHlsZS50cmFuc2l0aW9uID0gJ29wYWNpdHkgMC41cyBlYXNlJzsKICAgICAgICBsYmwuc3R5bGUub3BhY2l0eSA9ICcwLjYnOwogICAgICB9LCBpICogMTUwICsgNjAwKTsKICAgIH0pOwoKICAgIHZhciBjb25uZWN0b3JEZWxheSA9IHJpbmdPcmRlci5sZW5ndGggKiAxNTAgKyA0MDA7CiAgICBjb25uZWN0b3JzLmZvckVhY2goZnVuY3Rpb24gKGxpbmUsIGkpIHsKICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgbGluZS5zdHlsZS50cmFuc2l0aW9uID0gJ3N0cm9rZS1kYXNob2Zmc2V0IDAuOHMgJyArIEVBU0U7CiAgICAgICAgbGluZS5zdHlsZS5zdHJva2VEYXNob2Zmc2V0ID0gJzAnOwogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIG9yaWcgPSBsaW5lLmdldEF0dHJpYnV0ZSgnZGF0YS1vcmlnaW5hbC1kYXNoYXJyYXknKTsKICAgICAgICAgIGlmIChvcmlnKSBsaW5lLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLWRhc2hhcnJheScsIG9yaWcpOwogICAgICAgIH0sIDg1MCk7CiAgICAgIH0sIGNvbm5lY3RvckRlbGF5ICsgaSAqIDgwKTsKICAgIH0pOwoKICAgIHZhciBkb3REZWxheSA9IGNvbm5lY3RvckRlbGF5ICsgY29ubmVjdG9ycy5sZW5ndGggKiA4MCArIDIwMDsKICAgIGRvdHMuZm9yRWFjaChmdW5jdGlvbiAoZG90LCBpKSB7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgIGRvdC5zdHlsZS50cmFuc2l0aW9uID0gJ3RyYW5zZm9ybSAwLjVzICcgKyBFQVNFICsgJywgb3BhY2l0eSAwLjVzIGVhc2UnOwogICAgICAgIGRvdC5zdHlsZS50cmFuc2Zvcm0gPSAnc2NhbGUoMSknOwogICAgICAgIGRvdC5zdHlsZS5vcGFjaXR5ID0gJzEnOwogICAgICB9LCBkb3REZWxheSArIGkgKiAxMDApOwogICAgfSk7CgogICAgbGFiZWxzLmZvckVhY2goZnVuY3Rpb24gKGxibCwgaSkgewogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICBsYmwuc3R5bGUudHJhbnNpdGlvbiA9ICdvcGFjaXR5IDAuM3MgZWFzZSc7CiAgICAgICAgbGJsLnN0eWxlLm9wYWNpdHkgPSAnMSc7CiAgICAgIH0sIGRvdERlbGF5ICsgaSAqIDEwMCArIDIwMCk7CiAgICB9KTsKCiAgICB2YXIgYW1iaWVudERlbGF5ID0gZG90RGVsYXkgKyBkb3RzLmxlbmd0aCAqIDEwMCArIDYwMDsKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICBpbmplY3RSYWRhclN3ZWVwKHN2Zyk7CiAgICAgIHN0YXJ0RG90UHVsc2UoZG90cyk7CiAgICAgIGluamVjdE9yYml0UGFydGljbGVzKHN2Zyk7CiAgICAgIGluaXRSYWRhclBhcmFsbGF4KHN2Zyk7CiAgICB9LCBhbWJpZW50RGVsYXkpOwoKICAgIHNldHVwUmFkYXJUb29sdGlwcyhzdmcsIGRvdHMpOwoKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBzdGFydFJpbmdQdWxzZShyaW5ncyk7IH0sIGFtYmllbnREZWxheSk7CiAgfQoKICBmdW5jdGlvbiBpbmplY3RSYWRhclN3ZWVwKHN2ZykgewogICAgdmFyIG5zID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJzsKICAgIHZhciBpc0RhcmsgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXRoZW1lJykgPT09ICdkYXJrJzsKCiAgICB2YXIgZGVmcyA9IHN2Zy5xdWVyeVNlbGVjdG9yKCdkZWZzJyk7CiAgICBpZiAoIWRlZnMpIHsgZGVmcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhucywgJ2RlZnMnKTsgc3ZnLmluc2VydEJlZm9yZShkZWZzLCBzdmcuZmlyc3RDaGlsZCk7IH0KCiAgICAvLyBTd2VlcCBsaW5lIOKAlCB0aGVtZS1hd2FyZSBzdHJva2Utd2lkdGggYW5kIG9wYWNpdHkKICAgIHZhciBsaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5zLCAnbGluZScpOwogICAgbGluZS5zZXRBdHRyaWJ1dGUoJ3gxJywgJzI0MCcpOyBsaW5lLnNldEF0dHJpYnV0ZSgneTEnLCAnMjQwJyk7CiAgICBsaW5lLnNldEF0dHJpYnV0ZSgneDInLCAnMjQwJyk7IGxpbmUuc2V0QXR0cmlidXRlKCd5MicsICc0MCcpOwogICAgbGluZS5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsICcjRDEzNDdEJyk7CiAgICBsaW5lLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLXdpZHRoJywgaXNEYXJrID8gJzEuNScgOiAnMicpOwogICAgbGluZS5zZXRBdHRyaWJ1dGUoJ29wYWNpdHknLCBpc0RhcmsgPyAnMC4xNScgOiAnMC41Jyk7CiAgICBsaW5lLmNsYXNzTGlzdC5hZGQoJ2Fpci1yYWRhci1zd2VlcCcpOwogICAgc3ZnLmFwcGVuZENoaWxkKGxpbmUpOwoKICAgIC8vIFRyYWlsaW5nIGZhbiBhcmMg4oCUIHRoZW1lLWF3YXJlIG9wYWNpdHkKICAgIHZhciBmYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobnMsICdwYXRoJyk7CiAgICB2YXIgciA9IDIwMCwgZmFuQW5nbGUgPSAzMCAqIE1hdGguUEkgLyAxODA7CiAgICB2YXIgeDEgPSAyNDAgKyByICogTWF0aC5zaW4oLWZhbkFuZ2xlKSwgeTEgPSAyNDAgLSByICogTWF0aC5jb3MoLWZhbkFuZ2xlKTsKICAgIGZhbi5zZXRBdHRyaWJ1dGUoJ2QnLCAnTSAyNDAgMjQwIEwgMjQwIDQwIEEgJyArIHIgKyAnICcgKyByICsgJyAwIDAgMCAnICsgeDEudG9GaXhlZCgxKSArICcgJyArIHkxLnRvRml4ZWQoMSkgKyAnIFonKTsKICAgIGZhbi5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAndXJsKCNzd2VlcEdyYWQpJyk7CiAgICBmYW4uc2V0QXR0cmlidXRlKCdvcGFjaXR5JywgaXNEYXJrID8gJzAuMDYnIDogJzAuMicpOwogICAgZmFuLmNsYXNzTGlzdC5hZGQoJ2Fpci1yYWRhci1zd2VlcCcpOwogICAgc3ZnLmFwcGVuZENoaWxkKGZhbik7CgogICAgLy8gR3JhZGllbnQgZm9yIGZhbiDigJQgdGhlbWUtYXdhcmUgc3RvcC1vcGFjaXR5CiAgICB2YXIgZ3JhZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhucywgJ3JhZGlhbEdyYWRpZW50Jyk7CiAgICBncmFkLmlkID0gJ3N3ZWVwR3JhZCc7IGdyYWQuc2V0QXR0cmlidXRlKCdjeCcsICc1MCUnKTsgZ3JhZC5zZXRBdHRyaWJ1dGUoJ2N5JywgJzUwJScpOyBncmFkLnNldEF0dHJpYnV0ZSgncicsICc1MCUnKTsKICAgIHZhciBzMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhucywgJ3N0b3AnKTsgczEuc2V0QXR0cmlidXRlKCdvZmZzZXQnLCAnMCUnKTsgczEuc2V0QXR0cmlidXRlKCdzdG9wLWNvbG9yJywgJyNEMTM0N0QnKTsgczEuc2V0QXR0cmlidXRlKCdzdG9wLW9wYWNpdHknLCBpc0RhcmsgPyAnMC4zJyA6ICcwLjYnKTsKICAgIHZhciBzMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhucywgJ3N0b3AnKTsgczIuc2V0QXR0cmlidXRlKCdvZmZzZXQnLCAnMTAwJScpOyBzMi5zZXRBdHRyaWJ1dGUoJ3N0b3AtY29sb3InLCAnI0QxMzQ3RCcpOyBzMi5zZXRBdHRyaWJ1dGUoJ3N0b3Atb3BhY2l0eScsICcwJyk7CiAgICBncmFkLmFwcGVuZENoaWxkKHMxKTsgZ3JhZC5hcHBlbmRDaGlsZChzMik7IGRlZnMuYXBwZW5kQ2hpbGQoZ3JhZCk7CiAgfQoKICBmdW5jdGlvbiBnZXRPcmJpdFBhcnRpY2xlQ29sb3JzKCkgewogICAgdmFyIGlzRGFyayA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGhlbWUnKSA9PT0gJ2RhcmsnOwogICAgcmV0dXJuIHsKICAgICAgcGluazogaXNEYXJrID8gJ3JnYmEoMjA5LDUyLDEyNSwwLjUpJyA6ICdyZ2JhKDIwOSw1MiwxMjUsMC41KScsCiAgICAgIGJsdWU6IGlzRGFyayA\/ICdyZ2JhKDEwMSwxNDIsMTk2LDAuMyknIDogJ3JnYmEoMTAsODcsMTQ4LDAuNCknCiAgICB9OwogIH0KCiAgZnVuY3Rpb24gaW5qZWN0T3JiaXRQYXJ0aWNsZXMoc3ZnKSB7CiAgICB2YXIgbnMgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnOwogICAgdmFyIGN4ID0gMjQwLCBjeSA9IDI0MDsKICAgIHZhciBvcmJpdFJhZGlpID0gWzYwLCA5MCwgMTIwLCAxNTAsIDE4MF07CiAgICB2YXIgb3JiaXRDb2xvcnMgPSBnZXRPcmJpdFBhcnRpY2xlQ29sb3JzKCk7CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTsgaSsrKSB7CiAgICAgIHZhciByYWRpdXMgPSBvcmJpdFJhZGlpW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG9yYml0UmFkaWkubGVuZ3RoKV0gKyAoTWF0aC5yYW5kb20oKSAtIDAuNSkgKiAyMDsKICAgICAgdmFyIGFuZ2xlID0gTWF0aC5yYW5kb20oKSAqIE1hdGguUEkgKiAyOwogICAgICB2YXIgc3BlZWQgPSAwLjAwMiArIE1hdGgucmFuZG9tKCkgKiAwLjAwNDsKICAgICAgdmFyIGRvdFIgPSAwLjggKyBNYXRoLnJhbmRvbSgpICogMS4yOwogICAgICB2YXIgaXNQaW5rID0gTWF0aC5yYW5kb20oKSA8IDAuMTU7CgogICAgICB2YXIgY2lyY2xlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5zLCAnY2lyY2xlJyk7CiAgICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGUoJ3InLCBkb3RSKTsKICAgICAgY2lyY2xlLnNldEF0dHJpYnV0ZSgnZmlsbCcsIGlzUGluayA\/IG9yYml0Q29sb3JzLnBpbmsgOiBvcmJpdENvbG9ycy5ibHVlKTsKICAgICAgY2lyY2xlLmNsYXNzTGlzdC5hZGQoJ2Fpci1yYWRhci1vcmJpdC1kb3QnKTsKICAgICAgc3ZnLmFwcGVuZENoaWxkKGNpcmNsZSk7CgogICAgICBvcmJpdERvdHNBcnJheS5wdXNoKHsgZWw6IGNpcmNsZSwgcmFkaXVzOiByYWRpdXMsIGFuZ2xlOiBhbmdsZSwgc3BlZWQ6IHNwZWVkLCBjeDogY3gsIGN5OiBjeSwgaXNQaW5rOiBpc1BpbmsgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gdGlja09yYml0cygpIHsKICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBvcmJpdERvdHNBcnJheS5sZW5ndGg7IGorKykgewogICAgICAgIHZhciBkID0gb3JiaXREb3RzQXJyYXlbal07CiAgICAgICAgZC5hbmdsZSArPSBkLnNwZWVkOwogICAgICAgIGQuZWwuc2V0QXR0cmlidXRlKCdjeCcsIGQuY3ggKyBkLnJhZGl1cyAqIE1hdGguY29zKGQuYW5nbGUpKTsKICAgICAgICBkLmVsLnNldEF0dHJpYnV0ZSgnY3knLCBkLmN5ICsgZC5yYWRpdXMgKiBNYXRoLnNpbihkLmFuZ2xlKSk7CiAgICAgIH0KICAgICAgaWYgKCFkb2N1bWVudC5oaWRkZW4pIHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrT3JiaXRzKTsKICAgIH0KICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrT3JiaXRzKTsKICB9CgogIGZ1bmN0aW9uIHVwZGF0ZU9yYml0UGFydGljbGVDb2xvcnMoKSB7CiAgICBpZiAoIW9yYml0RG90c0FycmF5Lmxlbmd0aCkgcmV0dXJuOwogICAgdmFyIG9yYml0Q29sb3JzID0gZ2V0T3JiaXRQYXJ0aWNsZUNvbG9ycygpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcmJpdERvdHNBcnJheS5sZW5ndGg7IGkrKykgewogICAgICB2YXIgZCA9IG9yYml0RG90c0FycmF5W2ldOwogICAgICBkLmVsLnNldEF0dHJpYnV0ZSgnZmlsbCcsIGQuaXNQaW5rID8gb3JiaXRDb2xvcnMucGluayA6IG9yYml0Q29sb3JzLmJsdWUpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gc3RhcnREb3RQdWxzZShkb3RzKSB7CiAgICBkb3RzLmZvckVhY2goZnVuY3Rpb24gKGRvdCwgaSkgewogICAgICBkb3Quc3R5bGUuYW5pbWF0aW9uID0gJ2Fpci1kb3QtcHVsc2UgM3MgZWFzZS1pbi1vdXQgJyArIChpICogMC41KSArICdzIGluZmluaXRlJzsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gc3RhcnRSaW5nUHVsc2UocmluZ3MpIHsKICAgIHJpbmdzLmZvckVhY2goZnVuY3Rpb24gKHJpbmcsIGkpIHsKICAgICAgdmFyIHBoYXNlID0gaSAqIDAuODsKICAgICAgZnVuY3Rpb24gcHVsc2UoKSB7CiAgICAgICAgdmFyIHQgPSBwZXJmb3JtYW5jZS5ub3coKSAvIDEwMDA7CiAgICAgICAgdmFyIG9zYyA9IDAuNCArIDAuNCAqIE1hdGguc2luKHQgKiAwLjggKyBwaGFzZSk7CiAgICAgICAgcmluZy5zdHlsZS5zdHJva2VPcGFjaXR5ID0gb3NjOwogICAgICAgIGlmICghZG9jdW1lbnQuaGlkZGVuKSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocHVsc2UpOwogICAgICB9CiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShwdWxzZSk7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIGluaXRSYWRhclBhcmFsbGF4KHN2ZykgewogICAgdmFyIHdyYXAgPSBzdmcuY2xvc2VzdCgnLmFpci1yYWRhci13cmFwJyk7CiAgICBpZiAoIXdyYXApIHJldHVybjsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGZ1bmN0aW9uIChlKSB7CiAgICAgIHZhciByZWN0ID0gd3JhcC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgdmFyIGR4ID0gKGUuY2xpZW50WCAtIChyZWN0LmxlZnQgKyByZWN0LndpZHRoIC8gMikpIC8gcmVjdC53aWR0aDsKICAgICAgdmFyIGR5ID0gKGUuY2xpZW50WSAtIChyZWN0LnRvcCArIHJlY3QuaGVpZ2h0IC8gMikpIC8gcmVjdC5oZWlnaHQ7CiAgICAgIHN2Zy5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlKCcgKyAoLWR4ICogMTUpLnRvRml4ZWQoMSkgKyAncHgsICcgKyAoLWR5ICogMTUpLnRvRml4ZWQoMSkgKyAncHgpJzsKICAgICAgc3ZnLnN0eWxlLnRyYW5zaXRpb24gPSAndHJhbnNmb3JtIDAuM3MgZWFzZS1vdXQnOwogICAgfSwgeyBwYXNzaXZlOiB0cnVlIH0pOwogIH0KCiAgLyogLS0tIFJhZGFyIFRvb2x0aXBzIC0tLSAqLwogIHZhciBSQURBUl9EQVRBID0gewogICAgJ2tpJzogeyBuYW1lOiAnS0kgJiBJbnRlbGxpZ2VudGUgU3lzdGVtZScsIHN0YXR1czogJ0FET1BUJywgbWVudGlvbnM6ICczMjgnLCBzdGF0dXNDbGFzczogJ2Fkb3B0JyB9LAogICAgJ2hlYWx0aGNhcmUnOiB7IG5hbWU6ICdIZWFsdGhjYXJlICYgQmlvdGVjaCcsIHN0YXR1czogJ1RSSUFMJywgbWVudGlvbnM6ICc0NCcsIHN0YXR1c0NsYXNzOiAndHJpYWwnIH0sCiAgICAncm9ib3Rpayc6IHsgbmFtZTogJ1JvYm90aWsgJiBGZXJ0aWd1bmcnLCBzdGF0dXM6ICdBU1NFU1MnLCBtZW50aW9uczogJzM5NycsIHN0YXR1c0NsYXNzOiAnYXNzZXNzJyB9LAogICAgJ2RpZ2l0YWwnOiB7IG5hbWU6ICdEaWdpdGFsZSBBc3NldHMnLCBzdGF0dXM6ICdBU1NFU1MnLCBtZW50aW9uczogJzE4OCcsIHN0YXR1c0NsYXNzOiAnYXNzZXNzJyB9LAogICAgJ2V4cGVyaWVuY2UnOiB7IG5hbWU6ICdFeHBlcmllbmNlIFBsYXRmb3JtcycsIHN0YXR1czogJ0FTU0VTUyAvIEhPTEQnLCBtZW50aW9uczogJzU3OScsIHN0YXR1c0NsYXNzOiAnYXNzZXNzJyB9LAogICAgJ3JhdW1mYWhydCc6IHsgbmFtZTogJ1JhdW1mYWhydCAmIEVuZXJnaWUnLCBzdGF0dXM6ICdIT0xEJywgbWVudGlvbnM6ICcxNDAnLCBzdGF0dXNDbGFzczogJ2hvbGQnIH0KICB9OwoKICBmdW5jdGlvbiBzZXR1cFJhZGFyVG9vbHRpcHMoc3ZnLCBkb3RzKSB7CiAgICB2YXIgdG9vbHRpcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgdG9vbHRpcC5jbGFzc05hbWUgPSAnYWlyLXJhZGFyLXRvb2x0aXAnOwogICAgdG9vbHRpcC5zdHlsZS5vcGFjaXR5ID0gJzAnOwogICAgdG9vbHRpcC5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0b29sdGlwKTsKCiAgICBkb3RzLmZvckVhY2goZnVuY3Rpb24gKGRvdCkgewogICAgICB2YXIgY2xzID0gZG90LmdldEF0dHJpYnV0ZSgnY2xhc3MnKSB8fCAnJzsKICAgICAgdmFyIGtleSA9IG51bGw7CiAgICAgIE9iamVjdC5rZXlzKFJBREFSX0RBVEEpLmZvckVhY2goZnVuY3Rpb24gKGspIHsKICAgICAgICBpZiAoY2xzLmluZGV4T2YoJ2Fpci1yYWRhci1kb3QtJyArIGspICE9PSAtMSkga2V5ID0gazsKICAgICAgfSk7CiAgICAgIGlmICgha2V5KSByZXR1cm47CgogICAgICBkb3Quc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInOwogICAgICBkb3QuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZGF0YSA9IFJBREFSX0RBVEFba2V5XTsKICAgICAgICB0b29sdGlwLmlubmVySFRNTCA9CiAgICAgICAgICAnPGRpdiBjbGFzcz0iYWlyLXJhZGFyLXRvb2x0aXAtbmFtZSI+JyArIGRhdGEubmFtZSArICc8L2Rpdj4nICsKICAgICAgICAgICc8ZGl2IGNsYXNzPSJhaXItcmFkYXItdG9vbHRpcC1yb3ciPicgKwogICAgICAgICAgICAnPHNwYW4gY2xhc3M9ImFpci1iYWRnZSBhaXItYmFkZ2UtJyArIGRhdGEuc3RhdHVzQ2xhc3MgKyAnIiBzdHlsZT0iZm9udC1zaXplOjlweDtwYWRkaW5nOjJweCA4cHg7Ij4nICsgZGF0YS5zdGF0dXMgKyAnPC9zcGFuPicgKwogICAgICAgICAgICAnPHNwYW4gY2xhc3M9ImFpci1yYWRhci10b29sdGlwLW1lbnRpb25zIj4nICsgZGF0YS5tZW50aW9ucyArICcgRXJ3w6RobnVuZ2VuPC9zcGFuPicgKwogICAgICAgICAgJzwvZGl2Pic7CiAgICAgICAgdmFyIHJlY3QgPSBkb3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgdG9vbHRpcC5zdHlsZS5sZWZ0ID0gKHJlY3QubGVmdCArIHJlY3Qud2lkdGggLyAyKSArICdweCc7CiAgICAgICAgdG9vbHRpcC5zdHlsZS50b3AgPSAocmVjdC50b3AgLSA4KSArICdweCc7CiAgICAgICAgdG9vbHRpcC5zdHlsZS5vcGFjaXR5ID0gJzEnOwogICAgICB9KTsKICAgICAgZG90LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCBmdW5jdGlvbiAoKSB7IHRvb2x0aXAuc3R5bGUub3BhY2l0eSA9ICcwJzsgfSk7CiAgICB9KTsKICB9CgogIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICA5LiBDSU5FTUFUSUMgU0VDVElPTiBSRVZFQUxTCiAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogIGZ1bmN0aW9uIGluaXRFbGVtZW50UmV2ZWFsKCkgewogICAgdmFyIHJldmVhbE1hcCA9IFsKICAgICAgeyBzZWw6ICcuYWlyLWN0YS12MicsIGNsczogJ2Fpci1yZXZlYWwtc3Rha2VzJywgc3RhZ2dlck1zOiAwIH0sCiAgICAgIHsgc2VsOiAnLmFpci1jdGEnLCBjbHM6ICdhaXItcmV2ZWFsLXN0YWtlcycsIHN0YWdnZXJNczogMCB9LAogICAgICB7IHNlbDogJy5haXItc3Rha2VzJywgY2xzOiAnYWlyLXJldmVhbC1zdGFrZXMnLCBzdGFnZ2VyTXM6IDAgfSwKICAgICAgeyBzZWw6ICcuYWlyLWFkb3B0LWJhbm5lcicsIGNsczogJ2Fpci1yZXZlYWwtc3Rha2VzJywgc3RhZ2dlck1zOiAwIH0sCiAgICAgIHsgc2VsOiAnLmFpci10ZWNoLWNhcmQnLCBjbHM6ICdhaXItcmV2ZWFsLXVwLWxnJywgc3RhZ2dlck1zOiAyMDAgfSwKICAgICAgeyBzZWw6ICcuYWlyLXF1b3RlJywgY2xzOiAnYWlyLXJldmVhbC1xdW90ZScsIHN0YWdnZXJNczogMCB9LAogICAgICB7IHNlbDogJy5haXItdm9pY2UnLCBjbHM6ICdhaXItcmV2ZWFsLWNsaXAtbGVmdCcsIHN0YWdnZXJNczogMCB9LAogICAgICB7IHNlbDogJy5haXItZG9tYWluJywgY2xzOiAnYWlyLXJldmVhbC1yaXNlLWRlZXAnLCBzdGFnZ2VyTXM6IDEwMCB9LAogICAgICB7IHNlbDogJy5haXItdXNlY2FzZScsIGNsczogJ2Fpci1yZXZlYWwtcmlnaHQnLCBzdGFnZ2VyTXM6IDE1MCB9LAogICAgICB7IHNlbDogJy5haXItdGwtaXRlbScsIGNsczogJ2Fpci1yZXZlYWwtcmlnaHQnLCBzdGFnZ2VyTXM6IDIwMCB9LAogICAgICB7IHNlbDogJy5haXItcmVhbGl0eS1jaGVjaycsIGNsczogJ2Fpci1yZXZlYWwtYmx1ci1mYWRlJywgc3RhZ2dlck1zOiAwIH0sCiAgICAgIHsgc2VsOiAnLmFpci1zY2VuYXJpbycsIGNsczogJ2Fpci1yZXZlYWwtYmx1ci1mYWRlJywgc3RhZ2dlck1zOiAwIH0sCiAgICAgIHsgc2VsOiAnLmFpci1zaWRlYmFyJywgY2xzOiAnYWlyLXJldmVhbC1ibHVyLWZhZGUnLCBzdGFnZ2VyTXM6IDAgfSwKICAgICAgeyBzZWw6ICcuYWlyLWNsYWltcycsIGNsczogJ2Fpci1yZXZlYWwtYmx1ci1mYWRlJywgc3RhZ2dlck1zOiAwIH0sCiAgICAgIHsgc2VsOiAnLmFpci10ZWNoLXNlY3Rpb24nLCBjbHM6ICdhaXItcmV2ZWFsLWJsdXItZmFkZScsIHN0YWdnZXJNczogMCB9LAogICAgICB7IHNlbDogJy5haXItaW5zaWdodCcsIGNsczogJ2Fpci1yZXZlYWwtYmx1ci1mYWRlJywgc3RhZ2dlck1zOiAwIH0sCiAgICAgIHsgc2VsOiAnLmFpci1ndWFyZHJhaWwnLCBjbHM6ICdhaXItcmV2ZWFsLXJpc2UtZ2xvdycsIHN0YWdnZXJNczogMTAwIH0sCiAgICAgIHsgc2VsOiAnLmFpci1zaWduYWwnLCBjbHM6ICdhaXItcmV2ZWFsLXJpc2UtZ2xvdycsIHN0YWdnZXJNczogMTAwIH0sCiAgICAgIHsgc2VsOiAnLmFpci1zaGlmdCcsIGNsczogJ2Fpci1yZXZlYWwtcmlzZS1kZWVwJywgc3RhZ2dlck1zOiAwIH0sCiAgICAgIHsgc2VsOiAnLmFpci1zdG9wZGVmZXInLCBjbHM6ICdhaXItcmV2ZWFsLWJsdXItZmFkZScsIHN0YWdnZXJNczogMCB9LAogICAgICB7IHNlbDogJy5haXItZHVhbC1pbmRleC1jYXJkJywgY2xzOiAnYWlyLXJldmVhbC1zY2FsZS1ibHVyJywgc3RhZ2dlck1zOiAxNTAgfSwKICAgICAgeyBzZWw6ICcuYWlyLWNvbnRleHQtc3RyaXAnLCBjbHM6ICdhaXItcmV2ZWFsLWJsdXItZmFkZScsIHN0YWdnZXJNczogMCB9LAogICAgICB7IHNlbDogJy5sZWdhY3ktY2FyZCcsIGNsczogJ2Fpci1yZXZlYWwtcmlzZS1kZWVwJywgc3RhZ2dlck1zOiAxMjAgfSwKICAgICAgeyBzZWw6ICcuYWlyLWJyZWFrZXInLCBjbHM6ICdhaXItcmV2ZWFsLXJpc2UnLCBzdGFnZ2VyTXM6IDAgfQogICAgXTsKCiAgICBpZiAoUkVEVUNFRF9NT1RJT04pIHsKICAgICAgcmV2ZWFsTWFwLmZvckVhY2goZnVuY3Rpb24gKHIpIHsKICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHIuc2VsKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgeyBlbC5jbGFzc0xpc3QuYWRkKCdhaXItdmlzaWJsZScpOyB9KTsKICAgICAgfSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICByZXZlYWxNYXAuZm9yRWFjaChmdW5jdGlvbiAocikgewogICAgICB2YXIgZWxzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChyLnNlbCk7CiAgICAgIGlmICghZWxzLmxlbmd0aCkgcmV0dXJuOwogICAgICBlbHMuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsgZWwuY2xhc3NMaXN0LmFkZChyLmNscyk7IH0pOwoKICAgICAgaWYgKHIuc3RhZ2dlck1zID4gMCkgewogICAgICAgIHZhciBncm91cHMgPSB7fTsKICAgICAgICBlbHMuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsKICAgICAgICAgIHZhciBncm91cEtleSA9IGVsLnBhcmVudEVsZW1lbnQuY2xhc3NOYW1lIHx8ICdyb290JzsKICAgICAgICAgIGlmICghZ3JvdXBzW2dyb3VwS2V5XSkgZ3JvdXBzW2dyb3VwS2V5XSA9IFtdOwogICAgICAgICAgZ3JvdXBzW2dyb3VwS2V5XS5wdXNoKGVsKTsKICAgICAgICB9KTsKICAgICAgICBPYmplY3Qua2V5cyhncm91cHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgewogICAgICAgICAgdmFyIGdyb3VwID0gZ3JvdXBzW2tleV07CiAgICAgICAgICBvYnNlcnZlT25jZShncm91cCwgZnVuY3Rpb24gKGVsKSB7CiAgICAgICAgICAgIHZhciBzaWJsaW5ncyA9IGdyb3VwLmZpbHRlcihmdW5jdGlvbiAocykgeyByZXR1cm4gcy5wYXJlbnRFbGVtZW50ID09PSBlbC5wYXJlbnRFbGVtZW50OyB9KTsKICAgICAgICAgICAgdmFyIGlkeCA9IHNpYmxpbmdzLmluZGV4T2YoZWwpOwogICAgICAgICAgICBpZiAoaWR4ID09PSAtMSkgaWR4ID0gMDsKICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNpdGlvbkRlbGF5ID0gKGlkeCAqIHIuc3RhZ2dlck1zKSArICdtcyc7CiAgICAgICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoJ2Fpci12aXNpYmxlJyk7CiAgICAgICAgICB9LCAwLjEpOwogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIG9ic2VydmVPbmNlKEFycmF5LmZyb20oZWxzKSwgZnVuY3Rpb24gKGVsKSB7IGVsLmNsYXNzTGlzdC5hZGQoJ2Fpci12aXNpYmxlJyk7IH0sIDAuMSk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIEJPT1RTVFJBUAogICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KICAvLyBTYWZldHkgbmV0OiBmb3JjZS1yZXZlYWwgYW55IGVsZW1lbnRzIHN0aWxsIGhpZGRlbi4gQ292ZXJzIHRoZSBoZXJvIGFuZAogIC8vIHN0YXQgYm94ZXMgKHdoaWNoIHVzZSAuYWlyLXZpc2libGUgZGlyZWN0bHkpIHBsdXMgZXZlcnkgLmFpci1yZXZlYWwtKgogIC8vIHRhcmdldC4gSGFuZGxlcyBJbnRlcnNlY3Rpb25PYnNlcnZlciBuZXZlciBmaXJpbmcsIG5vLXNjcm9sbCB2aWV3cywgYW4KICAvLyBpbml0IGVycm9yLCBhbmQgVHJhbnNsYXRlUHJlc3MgbGFuZ3VhZ2Ugc3dpdGNoZXMgdGhhdCBzd2FwIHRoZSBET00uCiAgLy8gUmV2ZWFscyBvbmx5IOKAlCBpdCBjYW4gbmV2ZXIgaGlkZSBjb250ZW50LgogIGZ1bmN0aW9uIGZvcmNlUmV2ZWFsQWxsKCkgewogICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgKICAgICAgJy5haXItaGVyby12Mjpub3QoLmFpci12aXNpYmxlKSwgLmFpci1zdGF0czpub3QoLmFpci12aXNpYmxlKSwnCiAgICAgICsgJyAuYWlyLXN0YXQ6bm90KC5haXItdmlzaWJsZSksIC5haXItc3RhdC1zdG9yeTpub3QoLmFpci12aXNpYmxlKSwnCiAgICAgICsgJyBbY2xhc3MqPSJhaXItcmV2ZWFsLSJdOm5vdCguYWlyLXZpc2libGUpJwogICAgKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgeyBlbC5jbGFzc0xpc3QuYWRkKCdhaXItdmlzaWJsZScpOyB9KTsKICB9CgogIGZ1bmN0aW9uIGJvb3QoKSB7CiAgICAvLyBTY2hlZHVsZSB0aGUgc2FmZXR5IG5ldCBmaXJzdCwgc28gYSBmYWlsdXJlIGluIGFueSBpbml0IHN0ZXAgYmVsb3cKICAgIC8vIGNhbiBuZXZlciBsZWF2ZSB0aGUgcGFnZSBibGFuay4KICAgIHNldFRpbWVvdXQoZm9yY2VSZXZlYWxBbGwsIDI1MDApOwogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbiAoKSB7IHNldFRpbWVvdXQoZm9yY2VSZXZlYWxBbGwsIDgwMCk7IH0pOwoKICAgIHRyeSB7CiAgICAgIGluaXRQYXJ0aWNsZUNhbnZhcygpOwogICAgICBpbml0SGVyb0VudHJhbmNlKCk7CiAgICAgIGluaXRSYWRhckFuaW1hdGlvbigpOwogICAgICBpbml0QmFyQ2hhcnRBbmltYXRpb25zKCk7CiAgICAgIGluaXRFdmlkZW5jZUJhcnMoKTsKICAgICAgaW5pdEdyb3d0aEJhcnMoKTsKICAgICAgaW5pdFZvbGF0aWxlQ2hhcnQoKTsKICAgICAgaW5pdFN0YXRDb3VudGVycygpOwogICAgICBpbml0RWxlbWVudFJldmVhbCgpOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIGZvcmNlUmV2ZWFsQWxsKCk7CiAgICB9CgogICAgLy8gVGhlbWUgdG9nZ2xlIGJ1dHRvbgogICAgdmFyIHRvZ2dsZUJ0biA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5haXItdGhlbWUtdG9nZ2xlJyk7CiAgICBpZiAodG9nZ2xlQnRuKSB7CiAgICAgIHVwZGF0ZVRvZ2dsZUljb24oKTsKICAgICAgdG9nZ2xlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBjdXJyZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS10aGVtZScpOwogICAgICAgIHNldFRoZW1lKGN1cnJlbnQgPT09ICdkYXJrJyA\/ICdsaWdodCcgOiAnZGFyaycpOwogICAgICB9KTsKICAgIH0KICB9CgogIC8vIFJ1biBub3cgaWYgdGhlIERPTSBpcyBhbHJlYWR5IHBhcnNlZCAoZS5nLiBzY3JpcHQgaW5qZWN0ZWQgbGF0ZSBieSB0aGUKICAvLyBDTVMpLCBvdGhlcndpc2Ugd2FpdCBmb3IgRE9NQ29udGVudExvYWRlZC4KICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnKSB7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgYm9vdCk7CiAgfSBlbHNlIHsKICAgIGJvb3QoKTsKICB9Cgp9KSgpOwo=');var b=new Blob([c],{type:'text\/javascript'});var s=document.createElement('script');s.src=URL.createObjectURL(b);document.head.appendChild(s);})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Many companies believe they are further ahead than they actually are. An honest maturity assessment separates documentation from true capability \u2013 and protects against roadmaps built on false assumptions.<\/p>","protected":false},"author":18,"featured_media":7558,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_pipeline_managed":"1","footnotes":""},"categories":[41],"tags":[178,297,175,182,181,183,149],"class_list":["post-6511","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-services","tag-alexander-schweinberger","tag-artikel-3","tag-data-strategy","tag-governance","tag-maturity-assessment","tag-operating-model","tag-stark-burns"],"blocksy_meta":[],"acf":[],"_links":{"self":[{"href":"https:\/\/www.adexpartners.com\/en\/wp-json\/wp\/v2\/posts\/6511","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.adexpartners.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.adexpartners.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.adexpartners.com\/en\/wp-json\/wp\/v2\/users\/18"}],"replies":[{"embeddable":true,"href":"https:\/\/www.adexpartners.com\/en\/wp-json\/wp\/v2\/comments?post=6511"}],"version-history":[{"count":11,"href":"https:\/\/www.adexpartners.com\/en\/wp-json\/wp\/v2\/posts\/6511\/revisions"}],"predecessor-version":[{"id":7585,"href":"https:\/\/www.adexpartners.com\/en\/wp-json\/wp\/v2\/posts\/6511\/revisions\/7585"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.adexpartners.com\/en\/wp-json\/wp\/v2\/media\/7558"}],"wp:attachment":[{"href":"https:\/\/www.adexpartners.com\/en\/wp-json\/wp\/v2\/media?parent=6511"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.adexpartners.com\/en\/wp-json\/wp\/v2\/categories?post=6511"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.adexpartners.com\/en\/wp-json\/wp\/v2\/tags?post=6511"}],"curies":[{"name":"WP","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}