1import { createHotContext as __vite__createHotContext } from "/@vite/client";import.meta.hot = __vite__createHotContext("/src/components/DoctorSoulDashboard.jsx");import __vite__cjsImport0_react_jsxDevRuntime from "/node_modules/.vite/deps/react_jsx-dev-runtime.js?v=dfc5466a"; const Fragment = __vite__cjsImport0_react_jsxDevRuntime["Fragment"]; const jsxDEV = __vite__cjsImport0_react_jsxDevRuntime["jsxDEV"]; 2var _s = $RefreshSig$(), _s2 = $RefreshSig$(), _s3 = $RefreshSig$(), _s4 = $RefreshSig$(), _s5 = $RefreshSig$(); 3import __vite__cjsImport1_react from "/node_modules/.vite/deps/react.js?v=dfc5466a"; const useState = __vite__cjsImport1_react["useState"]; const useEffect = __vite__cjsImport1_react["useEffect"]; const useCallback = __vite__cjsImport1_react["useCallback"]; const useMemo = __vite__cjsImport1_react["useMemo"]; 4const BASE_URL = "https://doctorassist.ai//api/hms/users/ai-legacy/soul"; 5function getDoctorId() { 6 const p = new URLSearchParams(window.location.search); 7 return p.get("doctor_id") || p.get("doctorId") || (window.location.pathname.match(/DOC-[a-f0-9-]+/i) || [])[0] || null; 8} 9const G = ` 10 @import url('https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300;0,400;0,600;0,700;1,300&display=swap'); 11 *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } 12 body { font-family: 'Open Sans', sans-serif; background: #ffffff; } 13 ::-webkit-scrollbar { width: 4px; height: 4px; } 14 ::-webkit-scrollbar-track { background: #ffffff; } 15 ::-webkit-scrollbar-thumb { background: #000000; border-radius: 2px; } 16 @keyframes spin { to { transform: rotate(360deg); } } 17 @keyframes fadeIn { from { opacity:0; transform:translateY(8px); } to { opacity:1; transform:none; } } 18 @keyframes fillBar { from { width: 0; } } 19 @keyframes drawRing { from { stroke-dasharray: 0 999; } } 20 @keyframes slideDown { from { opacity:0; max-height:0; } to { opacity:1; max-height:2000px; } } 21 button { cursor: pointer; font-family: inherit; } 22 input { font-family: inherit; } 23`; 24function Spinner({ size = 32 }) { 25 return /* @__PURE__ */ jsxDEV("div", { style: { 26 width: size, 27 height: size, 28 border: `2px solid #000000`, 29 borderTopColor: "#ffffff", 30 borderRadius: "50%", 31 animation: "spin 0.7s linear infinite" 32 } }, void 0, false, { 33 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 34 lineNumber: 34, 35 columnNumber: 5 36 }, this); 37} 38_c = Spinner; 39function Tag({ children, filled }) { 40 return /* @__PURE__ */ jsxDEV("span", { style: { 41 display: "inline-block", 42 padding: "3px 10px", 43 background: filled ? "#000000" : "#ffffff", 44 color: filled ? "#ffffff" : "#000000", 45 border: "1px solid #000000", 46 fontSize: 10, 47 fontWeight: 600, 48 letterSpacing: "0.06em", 49 textTransform: "uppercase", 50 borderRadius: 2, 51 marginRight: 5, 52 marginBottom: 5 53 }, children }, void 0, false, { 54 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 55 lineNumber: 41, 56 columnNumber: 5 57 }, this); 58} 59_c2 = Tag; 60function Pill({ val, label }) { 61 const score = Math.round(val || 0); 62 return /* @__PURE__ */ jsxDEV("div", { style: { textAlign: "center", padding: "10px 8px" }, children: [ 63 /* @__PURE__ */ jsxDEV("div", { style: { fontSize: 28, fontWeight: 300, color: "#ffffff", fontFamily: "monospace", lineHeight: 1 }, children: score }, void 0, false, { 64 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 65 lineNumber: 56, 66 columnNumber: 7 67 }, this), 68 /* @__PURE__ */ jsxDEV("div", { style: { fontSize: 9, fontWeight: 600, color: "rgba(255,255,255,0.6)", letterSpacing: "0.1em", textTransform: "uppercase", marginTop: 4 }, children: label }, void 0, false, { 69 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 70 lineNumber: 57, 71 columnNumber: 7 72 }, this) 73 ] }, void 0, true, { 74 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 75 lineNumber: 55, 76 columnNumber: 5 77 }, this); 78} 79_c3 = Pill; 80function Ring({ value, size = 80, strokeW = 5, label }) { 81 const r = (size - strokeW * 2) / 2; 82 const circ = 2 * Math.PI * r; 83 const pct = Math.min(Math.max(value || 0, 0), 100) / 100; 84 const dash = pct * circ; 85 return /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", flexDirection: "column", alignItems: "center", gap: 8 }, children: [
86 /* @__PURE__ */ jsxDEV("svg", { width: size, height: size, children: [ 87 /* @__PURE__ */ jsxDEV("circle", { cx: size / 2, cy: size / 2, r, fill: "none", stroke: "#e0e0e0", strokeWidth: strokeW }, void 0, false, { 88 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 89 lineNumber: 70, 90 columnNumber: 9 91 }, this), 92 /* @__PURE__ */ jsxDEV( 93 "circle", 94 { 95 cx: size / 2, 96 cy: size / 2, 97 r, 98 fill: "none", 99 stroke: "#000000", 100 strokeWidth: strokeW, 101 strokeDasharray: `${dash} ${circ}`, 102 strokeLinecap: "round", 103 transform: `rotate(-90 ${size / 2} ${size / 2})`, 104 style: { animation: "drawRing 1.2s ease forwards", transition: "stroke-dasharray 1s ease" } 105 }, 106 void 0, 107 false, 108 { 109 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 110 lineNumber: 71, 111 columnNumber: 9 112 }, 113 this 114 ), 115 /* @__PURE__ */ jsxDEV( 116 "text", 117 { 118 x: "50%", 119 y: "50%", 120 textAnchor: "middle", 121 dominantBaseline: "central", 122 style: { fontSize: size * 0.2, fontWeight: 600, fill: "#000000", fontFamily: "monospace" }, 123 children: Math.round(value || 0) 124 }, 125 void 0, 126 false, 127 { 128 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 129 lineNumber: 75, 130 columnNumber: 9 131 }, 132 this 133 ) 134 ] }, void 0, true, { 135 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 136 lineNumber: 69, 137 columnNumber: 7 138 }, this), 139 label && /* @__PURE__ */ jsxDEV("div", { style: { 140 fontSize: 9, 141 fontWeight: 600, 142 letterSpacing: "0.09em", 143 textTransform: "uppercase", 144 color: "#000000", 145 textAlign: "center", 146 maxWidth: size + 10 147 }, children: label }, void 0, false, { 148 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 149 lineNumber: 80, 150 columnNumber: 17 151 }, this) 152 ] }, void 0, true, { 153 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 154 lineNumber: 68, 155 columnNumber: 5 156 }, this); 157} 158_c4 = Ring; 159function Bar({ label, value, sublabel, bold }) { 160 const pct = Math.min(Math.max(value || 0, 0), 100); 161 return /* @__PURE__ */ jsxDEV("div", { style: { marginBottom: 16 }, children: [ 162 /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", justifyContent: "space-between", marginBottom: 4, alignItems: "baseline" }, children: [
163 /* @__PURE__ */ jsxDEV("span", { style: { fontSize: 12, fontWeight: bold ? 600 : 400, color: "#000000" }, children: label }, void 0, false, { 164 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 165 lineNumber: 91, 166 columnNumber: 9 167 }, this), 168 /* @__PURE__ */ jsxDEV("span", { style: { fontSize: 14, fontWeight: 700, color: "#000000", fontFamily: "monospace" }, children: Math.round(pct) }, void 0, false, { 169 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 170 lineNumber: 92, 171 columnNumber: 9 172 }, this) 173 ] }, void 0, true, { 174 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 175 lineNumber: 90, 176 columnNumber: 7 177 }, this), 178 sublabel && /* @__PURE__ */ jsxDEV("div", { style: { fontSize: 10, color: "#000000", marginBottom: 5 }, children: sublabel }, void 0, false, { 179 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 180 lineNumber: 94, 181 columnNumber: 20 182 }, this), 183 /* @__PURE__ */ jsxDEV("div", { style: { background: "#e0e0e0", height: 4, borderRadius: 2, overflow: "hidden" }, children: /* @__PURE__ */ jsxDEV("div", { style: { 184 width: `${pct}%`, 185 height: "100%", 186 background: "#000000", 187 borderRadius: 2, 188 animation: "fillBar 1s ease forwards", 189 transition: "width 1s ease" 190 } }, void 0, false, { 191 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 192 lineNumber: 96, 193 columnNumber: 9 194 }, this) }, void 0, false, { 195 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 196 lineNumber: 95, 197 columnNumber: 7 198 }, this) 199 ] }, void 0, true, { 200 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 201 lineNumber: 89, 202 columnNumber: 5 203 }, this); 204} 205_c5 = Bar; 206function Radar({ data, size = 260 }) { 207 const keys = Object.keys(data); 208 const n = keys.length; 209 if (n < 3) return null; 210 const cx = size / 2, cy = size / 2; 211 const r = size * 0.34; 212 const angle = (i) => i / n * 2 * Math.PI - Math.PI / 2; 213 const pt = (i, scale) => ({ 214 x: cx + Math.cos(angle(i)) * r * scale, 215 y: cy + Math.sin(angle(i)) * r * scale 216 }); 217 const gridLines = [0.25, 0.5, 0.75, 1]; 218 const dataPoints = keys.map((k, i) => pt(i, Math.min(data[k] / 100, 1))); 219 const dataPoly = dataPoints.map((p) => `${p.x},${p.y}`).join(" "); 220 return /* @__PURE__ */ jsxDEV("svg", { width: size, height: size, style: { overflow: "visible" }, children: [ 221 gridLines.map( 222 (lvl) => /* @__PURE__ */ jsxDEV( 223 "polygon", 224 { 225 points: keys.map((_, i) => { 226 const p = pt(i, lvl); 227 return `${p.x},${p.y}`; 228 }).join(" "), 229 fill: "none", 230 stroke: "#000000", 231 strokeWidth: 0.5, 232 strokeOpacity: 0.2 233 }, 234 lvl, 235 false, 236 { 237 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 238 lineNumber: 120, 239 columnNumber: 7 240 }, 241 this 242 ) 243 ), 244 keys.map((_, i) => { 245 const outer = pt(i, 1); 246 return /* @__PURE__ */ jsxDEV("line", { x1: cx, y1: cy, x2: outer.x, y2: outer.y, stroke: "#000000", strokeWidth: 0.5, strokeOpacity: 0.2 }, i, false, { 247 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 248 lineNumber: 126, 249 columnNumber: 16 250 }, this); 251 }), 252 /* @__PURE__ */ jsxDEV("polygon", { points: dataPoly, fill: "rgba(0,0,0,0.07)", stroke: "#000000", strokeWidth: 1.5 }, void 0, false, { 253 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 254 lineNumber: 128, 255 columnNumber: 7 256 }, this), 257 dataPoints.map((p, i) => /* @__PURE__ */ jsxDEV("circle", { cx: p.x, cy: p.y, r: 3.5, fill: "#000000" }, i, false, { 258 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 259 lineNumber: 129, 260 columnNumber: 33 261 }, this)), 262 keys.map((k, i) => { 263 const lp = pt(i, 1.22); 264 return /* @__PURE__ */ jsxDEV( 265 "text", 266 { 267 x: lp.x, 268 y: lp.y, 269 textAnchor: "middle", 270 dominantBaseline: "central", 271 style: { fontSize: 9, fontWeight: 600, fill: "#000000", letterSpacing: "0.08em", fontFamily: "'Open Sans',sans-serif" }, 272 children: k.toUpperCase() 273 }, 274 k, 275 false, 276 { 277 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 278 lineNumber: 133, 279 columnNumber: 11 280 }, 281 this 282 ); 283 }) 284 ] }, void 0, true, { 285 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 286 lineNumber: 118, 287 columnNumber: 5 288 }, this); 289} 290_c6 = Radar; 291function Gauge({ score, size = 180 }) { 292 const cx = size / 2, cy = size * 0.68; 293 const r = size * 0.38; 294 const circ = Math.PI * r; 295 const dash = Math.min(score || 0, 100) / 100 * circ; 296 const label = score >= 80 ? "Excellent" : score >= 65 ? "Good" : score >= 45 ? "Moderate" : "Developing"; 297 return /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", flexDirection: "column", alignItems: "center" }, children: /* @__PURE__ */ jsxDEV("svg", { width: size, height: size * 0.65, children: [
298 /* @__PURE__ */ jsxDEV( 299 "path", 300 { 301 d: `M ${cx - r} ${cy} A ${r} ${r} 0 0 1 ${cx + r} ${cy}`, 302 fill: "none", 303 stroke: "#e0e0e0", 304 strokeWidth: 10, 305 strokeLinecap: "round" 306 }, 307 void 0, 308 false, 309 { 310 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 311 lineNumber: 152, 312 columnNumber: 9 313 }, 314 this 315 ), 316 /* @__PURE__ */ jsxDEV( 317 "path", 318 { 319 d: `M ${cx - r} ${cy} A ${r} ${r} 0 0 1 ${cx + r} ${cy}`, 320 fill: "none", 321 stroke: "#000000", 322 strokeWidth: 10, 323 strokeLinecap: "round", 324 strokeDasharray: `${dash} ${circ}`, 325 style: { transition: "stroke-dasharray 1.4s ease" } 326 }, 327 void 0, 328 false, 329 { 330 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 331 lineNumber: 154, 332 columnNumber: 9 333 }, 334 this 335 ), 336 [0, 25, 50, 75, 100].map((v) => { 337 const a = Math.PI - v / 100 * Math.PI; 338 const x1 = cx + Math.cos(a) * (r - 12); 339 const y1 = cy - Math.sin(a) * (r - 12); 340 const x2 = cx + Math.cos(a) * (r + 2); 341 const y2 = cy - Math.sin(a) * (r + 2); 342 return /* @__PURE__ */ jsxDEV("line", { x1, y1, x2, y2, stroke: "#000000", strokeWidth: 1.5 }, v, false, { 343 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 344 lineNumber: 164, 345 columnNumber: 18 346 }, this); 347 }), 348 /* @__PURE__ */ jsxDEV( 349 "text", 350 { 351 x: cx, 352 y: cy - 10, 353 textAnchor: "middle", 354 style: { fontSize: 32, fontWeight: 300, fill: "#000000", fontFamily: "monospace" }, 355 children: Math.round(score || 0) 356 }, 357 void 0, 358 false, 359 { 360 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 361 lineNumber: 166, 362 columnNumber: 9 363 }, 364 this 365 ), 366 /* @__PURE__ */ jsxDEV( 367 "text", 368 { 369 x: cx, 370 y: cy + 12, 371 textAnchor: "middle", 372 style: { fontSize: 10, fontWeight: 600, fill: "#000000", letterSpacing: "0.12em", fontFamily: "'Open Sans',sans-serif" }, 373 children: label.toUpperCase() 374 }, 375 void 0, 376 false, 377 { 378 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 379 lineNumber: 170, 380 columnNumber: 9 381 }, 382 this 383 ) 384 ] }, void 0, true, { 385 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 386 lineNumber: 151, 387 columnNumber: 7 388 }, this) }, void 0, false, { 389 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 390 lineNumber: 150, 391 columnNumber: 5 392 }, this); 393} 394_c7 = Gauge; 395function DecisionFlowEnhanced({ sf, bm, qm, sp }) { 396 _s(); 397 const [selectedNode, setSelectedNode] = useState(null); 398 const [hovNode, setHovNode] = useState(null); 399 if (!sf || !bm) return null; 400 const risk = (sf.risk_profile?.value || "moderate").replace(/_/g, " "); 401 const riskConf = sf.risk_profile?.confidence || "low"; 402 const style_v = (sf.decision_style?.primary || "evidence first").replace(/_/g, " "); 403 const styleConf = sf.decision_style?.confidence || "low"; 404 const inv = sf.diagnostic_rigor?.investigation_intensity || "standard"; 405 const invRate = bm.investigation_order_rate || 0; 406 const noteRate = bm.clinical_note_rate || 0; 407 const treat = (sf.treatment_philosophy?.approach || "balanced").replace(/_/g, " "); 408 const treatConf = sf.treatment_philosophy?.confidence || "low"; 409 const docLevel = sf.documentation_quality?.detail_level || "standard"; 410 const patScore = sf.communication_style?.patient_centered_score || 0; 411 const safetyConf = sf.safety_behaviors?.double_check_frequency || "medium"; 412 const confDot = (conf) => { 413 const colors = { high: "#000", medium: "#666", low: "#aaa" }; 414 return /* @__PURE__ */ jsxDEV("span", { style: { 415 display: "inline-block", 416 width: 7, 417 height: 7, 418 borderRadius: "50%", 419 background: colors[conf] || "#aaa", 420 marginRight: 5, 421 verticalAlign: "middle" 422 } }, void 0, false, { 423 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 424 lineNumber: 202, 425 columnNumber: 7 426 }, this); 427 }; 428 const nodes = [ 429 { 430 id: "encounter", 431 title: "PATIENT ENCOUNTER", 432 category: "entry", 433 metrics: [ 434 { label: "Total Consultations", value: bm.consultation_count || 0 }, 435 { label: "Unique Patients", value: bm.unique_patients_seen || 0 }, 436 { label: "Avg Conditions/Visit", value: (bm.avg_conditions_surfaced_per_visit || 0
436).toFixed(1) }, 437 { label: "Agentic Sessions", value: bm.agentic_engagement_count || 0 } 438 ], 439 description: "Every encounter begins here. Real metrics show the doctor's practice volume and patient breadth.", 440 tags: [] 441 }, 442 { 443 id: "risk", 444 title: "RISK ASSESSMENT", 445 category: "assessment", 446 metrics: [ 447 { label: "Risk Profile", value: risk }, 448 { label: "Confidence", value: riskConf }, 449 { label: "Decision Style", value: style_v }, 450 { label: "Style Confidence", value: styleConf } 451 ], 452 description: sf.risk_profile?.evidence || "Risk profile inferred from observed clinical patterns.", 453 tags: [risk, style_v] 454 }, 455 { 456 id: "investigation", 457 title: "INVESTIGATION & DIAGNOSTICS", 458 category: "diagnostic", 459 metrics: [ 460 { label: "Order Rate", value: invRate.toFixed(3) }, 461 { label: "Intensity", value: inv }, 462 { label: "Escalation", value: sf.diagnostic_rigor?.escalation_pattern || "standard" }, 463 { label: "Diagnostic QA", value: `${Math.round(qm?.diagnostic_quality_score || 0)}/100` }, 464 { label: "Investigation QA", value: `${Math.round(qm?.investigation_appropriateness_score || 0)}/100` } 465 ], 466 description: sf.diagnostic_rigor?.evidence || "Investigation pattern inferred from order rate and note correlation.", 467 tags: [inv] 468 }, 469 { 470 id: "decision", 471 title: "CLINICAL DECISION", 472 category: "decision", 473 metrics: [ 474 { label: "Primary Style", value: style_v }, 475 { label: "Secondary Style", value: sf.decision_style?.secondary || "â" }, 476 { label: "Guideline Score", value: `${Math.round(qm?.guideline_compliance_score || 0)}/100` }, 477 { label: "Intervention Threshold", value: sf.treatment_philosophy?.intervention_threshold || "medium" } 478 ], 479 description: sf.decision_style?.evidence || "Decision style derived from clinical note patterns and investigation ratios.", 480 tags: [style_v] 481 }, 482 { 483 id: "treatment", 484 title: "TREATMENT & PRESCRIBING", 485 category: "treatment", 486 metrics: [ 487 { label: "Philosophy", value: treat }, 488 { label: "Medication Rate", value: (bm.medication_prescription_rate || 0).toFixed(3) }, 489 { label: "Medication Safety", value: `${Math.round(qm?.medication_safety_score || 0)}/100` }, 490 { label: "Guideline Align", value: `${Math.round(qm?.guideline_compliance_score || 0)}/100` }, 491 { label: "Confidence", value: treatConf } 492 ], 493 description: sf.treatment_philosophy?.evidence || "Treatment philosophy inferred from prescribing patterns and intervention rate.", 494 tags: [treat] 495 }, 496 { 497 id: "documentation", 498 title: "DOCUMENTATION", 499 category: "documentation", 500 metrics: [ 501 { label: "Note Rate", value: noteRate.toFixed(3) }, 502 { label: "Detail Level", value: docLevel }, 503 { label: "Structure", value: sf.documentation_quality?.structure_preference || "mixed" }, 504 { label: "Doc QA Score", value: `${Math.round(qm?.documentation_quality_score || 0)}/100` } 505 ], 506 description: sf.documentation_quality?.evidence || "Documentation style inferred from clinical note rate.", 507 tags: [docLevel] 508 }, 509 { 510 id: "safety", 511 title: "SAFETY BEHAVIORS", 512 category: "safety", 513 metrics: [ 514 { label: "Double-Check Freq.", value: safetyConf }, 515 { label: "Risk Flags", value: (sp?.risk_flags || []).length }, 516 { label: "Safety Score", value: `${Math.round(qm?.overall_quality_score || 0)}/100` }, 517 ...(sf.safety_behaviors?.traits || []).map((t) => ({ label: "Trait", value: t })) 518 ], 519 description: sf.safety_behaviors?.evidence || "Safety behaviors inferred from documentation patterns and safety rule compliance.", 520 tags: sf.safety_behaviors?.traits || [] 521 }, 522 { 523 id: "outcome", 524 title: "OUTCOME & FOLLOW-UP", 525 category: "outcome", 526 metrics: [ 527 { label: "Outcome QA", value: `${Math.round(qm?.outcome_quality_score || 0)}/100` },
528 { label: "Patient-Centered", value: `${Math.round(patScore)}/100` }, 529 { label: "Conditions Surfaced", value: (bm.avg_conditions_surfaced_per_visit || 0).toFixed(1) + "/visit" }, 530 { label: "Overall Intelligence", value: "see header" } 531 ], 532 description: "Final outcome quality measured by conditions surfaced, patient-centered score, and follow-up signals.", 533 tags: [] 534 } 535 ]; 536 const edges = [ 537 { from: "encounter", to: "risk", label: "Assessment" }, 538 { from: "risk", to: "investigation", label: "Diagnostic path" }, 539 { from: "risk", to: "decision", label: "Clinical judgment" }, 540 { from: "investigation", to: "treatment", label: "Evidence informs" }, 541 { from: "decision", to: "treatment", label: "Decides" }, 542 { from: "treatment", to: "documentation", label: "Record" }, 543 { from: "treatment", to: "safety", label: "Safety check" }, 544 { from: "documentation", to: "outcome", label: "Documented" }, 545 { from: "safety", to: "outcome", label: "Validated" } 546 ]; 547 const catColors = { 548 entry: "#000", 549 assessment: "#111", 550 diagnostic: "#222", 551 decision: "#000", 552 treatment: "#111", 553 documentation: "#222", 554 safety: "#000", 555 outcome: "#000" 556 }; 557 const selected = nodes.find((n) => n.id === selectedNode); 558 const layout = [ 559 ["encounter"], 560 ["risk"], 561 ["investigation", "decision"], 562 ["treatment", "documentation"], 563 ["safety", "outcome"] 564 ]; 565 const connectedIds = selectedNode ? /* @__PURE__ */ new Set( 566 [ 567 ...edges.filter((e) => e.from === selectedNode).map((e) => e.to), 568 ...edges.filter((e) => e.to === selectedNode).map((e) => e.from), 569 selectedNode 570 ] 571 ) : null; 572 return /* @__PURE__ */ jsxDEV("div", { children: [ 573 /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", flexDirection: "column", gap: 16, marginBottom: 24 }, children: layout.map( 574 (row, ri) => /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", gap: 16, justifyContent: "center" }, children: row.map((nodeId) => { 575 const node = nodes.find((n) => n.id === nodeId); 576 const isSelected = selectedNode === nodeId; 577 const isHov = hovNode === nodeId; 578 const isDimmed = connectedIds && !connectedIds.has(nodeId); 579 const outEdges = edges.filter((e) => e.from === nodeId); 580 return /* @__PURE__ */ jsxDEV("div", { style: { flex: row.length > 1 ? 1 : void 0, maxWidth: row.length === 1 ? 480 : void 0, width: row.length === 1 ? "100%" : void 0 }, children: /* @__PURE__ */ jsxDEV( 581 "div", 582 { 583 onClick: () => setSelectedNode(selectedNode === nodeId ? null : nodeId), 584 onMouseEnter: () => setHovNode(nodeId), 585 onMouseLeave: () => setHovNode(null), 586 style: { 587 border: `${isSelected ? 2 : 1}px solid #000`, 588 background: isSelected ? "#000" : isHov ? "#f8f8f8" : "#fff", 589 padding: "14px 16px", 590 cursor: "pointer", 591 opacity: isDimmed ? 0.35 : 1, 592 transition: "all 0.2s", 593 position: "relative" 594 }, 595 children: [
596 /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "flex-start", marginBottom: 10 }, children: [ 597 /* @__PURE__ */ jsxDEV("div", { style: { 598 fontSize: 9, 599 fontWeight: 700, 600 letterSpacing: "0.12em", 601 color: isSelected ? "#fff" : "#000", 602 textTransform: "uppercase" 603 }, children: node.title }, void 0, false, { 604 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 605 lineNumber: 388, 606 columnNumber: 23 607 }, this), 608 /* @__PURE__ */ jsxDEV("div", { style: { 609 fontSize: 8, 610 fontWeight: 600, 611 color: isSelected ? "rgba(255,255,255,0.5)" : "#888", 612 letterSpacing: "0.08em" 613 }, children: isSelected ? "CLICK TO CLOSE" : "CLICK FOR DETAIL" }, void 0, false, { 614 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 615 lineNumber: 392, 616 columnNumber: 23 617 }, this) 618 ] }, void 0, true, { 619 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 620 lineNumber: 387, 621 columnNumber: 21 622 }, this),
623 /* @__PURE__ */ jsxDEV("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr", gap: "4px 16px" }, children: node.metrics.slice(0, 4).map( 624 (m, i) => /* @__PURE__ */ jsxDEV("div", { style: { borderBottom: `1px solid ${isSelected ? "rgba(255,255,255,0.15)" : "#e8e8e8"}`, paddingBottom: 4, marginBottom: 2 }, children: [ 625 /* @__PURE__ */ jsxDEV("div", { style: { 626 fontSize: 8, 627 fontWeight: 600, 628 letterSpacing: "0.07em", 629 textTransform: "uppercase", 630 color: isSelected ? "rgba(255,255,255,0.55)" : "#888", 631 marginBottom: 1 632 }, children: m.label }, void 0, false, { 633 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 634 lineNumber: 402, 635 columnNumber: 27 636 }, this), 637 /* @__PURE__ */ jsxDEV("div", { style: { 638 fontSize: 11, 639 fontWeight: 600, 640 color: isSelected ? "#fff" : "#000", 641 fontFamily: "monospace", 642 textTransform: "capitalize" 643 }, children: String(m.value) }, void 0, false, { 644 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 645 lineNumber: 406, 646 columnNumber: 27 647 }, this) 648 ] }, i, true, { 649 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 650 lineNumber: 401, 651 columnNumber: 21 652 }, this) 653 ) }, void 0, false, { 654 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 655 lineNumber: 399, 656 columnNumber: 21 657 }, this), 658 node.tags.length > 0 && /* @__PURE__ */ jsxDEV("div", { style: { marginTop: 10, display: "flex", flexWrap: "wrap", gap: 4 }, children: node.tags.map( 659 (t, i) => /* @__PURE__ */ jsxDEV("span", { style: { 660 padding: "2px 7px", 661 fontSize: 8, 662 fontWeight: 700, 663 letterSpacing: "0.08em", 664 textTransform: "uppercase", 665 border: `1px solid ${isSelected ? "rgba(255,255,255,0.4)" : "#000"}`, 666 color: isSelected ? "#fff" : "#000", 667 background: "transparent" 668 }, children: t }, i, false, { 669 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 670 lineNumber: 418, 671 columnNumber: 21 672 }, this) 673 ) }, void 0, false, { 674 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 675 lineNumber: 416, 676 columnNumber: 19 677 }, this), 678 outEdges.length >
678 0 && !isSelected && /* @__PURE__ */ jsxDEV("div", { style: { 679 position: "absolute", 680 bottom: -14, 681 left: "50%", 682 transform: "translateX(-50%)", 683 fontSize: 10, 684 color: "#aaa", 685 zIndex: 1 686 }, children: "â¼" }, void 0, false, { 687 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 688 lineNumber: 431, 689 columnNumber: 19 690 }, this) 691 ] 692 }, 693 void 0, 694 true, 695 { 696 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 697 lineNumber: 373, 698 columnNumber: 19 699 }, 700 this 701 ) }, nodeId, false, { 702 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 703 lineNumber: 372, 704 columnNumber: 15 705 }, this); 706 }) }, ri, false, { 707 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 708 lineNumber: 363, 709 columnNumber: 9 710 }, this) 711 ) }, void 0, false, { 712 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 713 lineNumber: 361, 714 columnNumber: 7 715 }, this),
716 selected && /* @__PURE__ */ jsxDEV("div", { style: { border: "1.5px solid #000", padding: 24, animation: "fadeIn 0.2s ease", marginBottom: 24 }, children: [ 717 /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "flex-start", marginBottom: 20 }, children: [ 718 /* @__PURE__ */ jsxDEV("div", { children: [ 719 /* @__PURE__ */ jsxDEV("div", { style: { 720 fontSize: 10, 721 fontWeight: 700, 722 letterSpacing: "0.14em", 723 textTransform: "uppercase", 724 color: "#000", 725 marginBottom: 6 726 }, children: [ 727 selected.title, 728 " â Detail View" 729 ] }, void 0, true, { 730 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 731 lineNumber: 447, 732 columnNumber: 15 733 }, this), 734 /* @__PURE__ */ jsxDEV("div", { style: { fontSize: 13, fontWeight: 300, color: "#000", lineHeight: 1.7, maxWidth: 600 }, children: selected.description }, void 0, false, { 735 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 736 lineNumber: 449, 737 columnNumber: 15 738 }, this) 739 ] }, void 0, true, { 740 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 741 lineNumber: 446, 742 columnNumber: 13 743 }, this),
744 /* @__PURE__ */ jsxDEV( 745 "button", 746 { 747 onClick: () => setSelectedNode(null), 748 style: { 749 background: "#000", 750 color: "#fff", 751 border: "none", 752 padding: "6px 14px", 753 fontSize: 9, 754 fontWeight: 700, 755 letterSpacing: "0.1em", 756 textTransform: "uppercase" 757 }, 758 children: "CLOSE â" 759 }, 760 void 0, 761 false, 762 { 763 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 764 lineNumber: 453, 765 columnNumber: 13 766 }, 767 this 768 ) 769 ] }, void 0, true, { 770 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 771 lineNumber: 445, 772 columnNumber: 11 773 }, this), 774 /* @__PURE__ */ jsxDEV("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr 1fr", gap: 16, marginBottom: 20 }, children: selected.metrics.map( 775 (m, i) => /* @__PURE__ */ jsxDEV("div", { style: { padding: "12px 14px", border: "1px solid #000", background: "#fafafa" }, children: [
776 /* @__PURE__ */ jsxDEV("div", { style: { 777 fontSize: 8, 778 fontWeight: 700, 779 letterSpacing: "0.1em", 780 textTransform: "uppercase", 781 color: "#888", 782 marginBottom: 6 783 }, children: m.label }, void 0, false, { 784 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 785 lineNumber: 463, 786 columnNumber: 17 787 }, this), 788 /* @__PURE__ */ jsxDEV("div", { style: { 789 fontSize: 18, 790 fontWeight: 300, 791 color: "#000", 792 fontFamily: "monospace", 793 textTransform: "capitalize" 794 }, children: String(m.value) }, void 0, false, { 795 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 796 lineNumber: 465, 797 columnNumber: 17 798 }, this) 799 ] }, i, true, { 800 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 801 lineNumber: 462, 802 columnNumber: 11 803 }, this) 804 ) }, void 0, false, { 805 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 806 lineNumber: 460, 807 columnNumber: 11 808 }, this),
809 /* @__PURE__ */ jsxDEV("div", { children: [ 810 /* @__PURE__ */ jsxDEV("div", { style: { 811 fontSize: 9, 812 fontWeight: 700, 813 letterSpacing: "0.12em", 814 textTransform: "uppercase", 815 color: "#000", 816 marginBottom: 10 817 }, children: "Connected Stages" }, void 0, false, { 818 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 819 lineNumber: 473, 820 columnNumber: 13 821 }, this), 822 /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", gap: 8, flexWrap: "wrap" }, children: edges.filter((e) => e.from === selected.id || e.to === selected.id).map((e, i) => { 823 const otherId = e.from === selected.id ? e.to : e.from; 824 const direction = e.from === selected.id ? "â" : "â"; 825 const otherNode = nodes.find((n) => n.id === otherId); 826 return /* @__PURE__ */ jsxDEV( 827 "div", 828 { 829 onClick: () => setSelectedNode(otherId), 830 style: { 831 padding: "6px 12px", 832 border: "1px solid #000", 833 cursor: "pointer", 834 background: "#fff", 835 display: "flex", 836 alignItems: "center", 837 gap: 6, 838 fontSize: 10, 839 fontWeight: 600, 840 letterSpacing: "0.05em" 841 }, 842 children: [
843 /* @__PURE__ */ jsxDEV("span", { style: { color: "#888" }, children: direction }, void 0, false, { 844 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 845 lineNumber: 485, 846 columnNumber: 21 847 }, this), 848 /* @__PURE__ */ jsxDEV("span", { children: otherNode?.title }, void 0, false, { 849 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 850 lineNumber: 486, 851 columnNumber: 21 852 }, this), 853 /* @__PURE__ */ jsxDEV("span", { style: { color: "#888", fontSize: 9 }, children: [ 854 "(", 855 e.label, 856 ")" 857 ] }, void 0, true, { 858 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 859 lineNumber: 487, 860 columnNumber: 21 861 }, this) 862 ] 863 }, 864 i, 865 true, 866 { 867 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 868 lineNumber: 481, 869 columnNumber: 17 870 }, 871 this 872 ); 873 }) }, void 0, false, { 874 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 875 lineNumber: 475, 876 columnNumber: 13 877 }, this) 878 ] }, void 0, true, { 879 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 880 lineNumber: 472, 881 columnNumber: 11 882 }, this) 883 ] }, void 0, true, { 884 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 885 lineNumber: 444, 886 columnNumber: 7 887 }, this), 888 /* @__PURE__ */ jsxDEV("div", { style: { borderTop: "1px solid #e0e0e0", paddingTop: 16, marginTop: 8 }, children: [
889 /* @__PURE__ */ jsxDEV("div", { style: { 890 fontSize: 9, 891 fontWeight: 700, 892 letterSpacing: "0.12em", 893 textTransform: "uppercase", 894 color: "#000", 895 marginBottom: 10 896 }, children: "Flow Connections" }, void 0, false, { 897 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 898 lineNumber: 498, 899 columnNumber: 9 900 }, this), 901 /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", flexWrap: "wrap", gap: "6px 20px" }, children: edges.map( 902 (e, i) => /* @__PURE__ */ jsxDEV("div", { style: { fontSize: 10, fontWeight: 300, color: "#000", display: "flex", alignItems: "center", gap: 5 }, children: [ 903 /* @__PURE__ */ jsxDEV("span", { style: { fontWeight: 600, fontSize: 9 }, children: nodes.find((n) => n.id === e.from)?.title?.split(" ")[0] }, void 0, false, { 904 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 905 lineNumber: 503, 906 columnNumber: 15 907 }, this), 908 /* @__PURE__ */ jsxDEV("span", { style: { color: "#888" }, children: "â" }, void 0, false, { 909 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 910 lineNumber: 504, 911 columnNumber: 15 912 }, this),
913 /* @__PURE__ */ jsxDEV("span", { style: { fontWeight: 600, fontSize: 9 }, children: nodes.find((n) => n.id === e.to)?.title?.split(" ")[0] }, void 0, false, { 914 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 915 lineNumber: 505, 916 columnNumber: 15 917 }, this), 918 /* @__PURE__ */ jsxDEV("span", { style: { color: "#aaa", fontSize: 9 }, children: [ 919 "(", 920 e.label, 921 ")" 922 ] }, void 0, true, { 923 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 924 lineNumber: 506, 925 columnNumber: 15 926 }, this) 927 ] }, i, true, { 928 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 929 lineNumber: 502, 930 columnNumber: 11 931 }, this) 932 ) }, void 0, false, { 933 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 934 lineNumber: 500, 935 columnNumber: 9 936 }, this) 937 ] }, void 0, true, { 938 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 939 lineNumber: 497, 940 columnNumber: 7 941 }, this) 942 ] }, void 0, true, { 943 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 944 lineNumber: 359, 945 columnNumber: 5 946 }, this); 947} 948_s(DecisionFlowEnhanced, "ltmZTBxGpPs9ttLb0gIB2Y0YgxA="); 949_c8 = DecisionFlowEnhanced; 950function BehaviorHeatmap({ bm }) { 951 if (!bm) return null; 952 const cells = [ 953 { label: "Consultations", value: bm.consultation_count, max: 100, unit: "" }, 954 { label: "Unique Patients", value: bm.unique_patients_seen, max: 80, unit: "" }, 955 { label: "Investigation Rate", value: bm.investigation_order_rate * 100, max: 100, unit: "%" }, 956 { label: "Medication Rate", value: bm.medication_prescription_rate * 100, max: 100, unit: "%" }, 957 { label: "Clinical Note Rate", value: bm.clinical_note_rate * 100, max: 100, unit: "%" }, 958 { label: "Conditions/Visit", value: bm.avg_conditions_surfaced_per_visit * 20, max: 100, unit: `(${bm.avg_conditions_surfaced_per_visit?.toFixed(1)})` }, 959 { label: "Agentic Sessions", value: bm.agentic_engagement_count, max: 50, unit: "" }, 960 { label: "Data Sufficiency", value: bm.weighted_sufficiency_score, max: 100, unit: "/100" } 961 ]; 962 return /* @__PURE__ */ jsxDEV("div", { style: { display: "grid", gridTemplateColumns: "repeat(4, 1fr)", gap: 1, background: "#000000" }, children: cells.map((c) => { 963 const pct = Math.min(Math.max((c.value || 0) / c.max * 100, 0), 100); 964 const raw = c.label.includes("Rate") ? `${(c.value || 0).toFixed(0)}%` : Math.round(c.value || 0) + " " + c.unit; 965 return /* @__PURE__ */ jsxDEV("div", { style: { background: "#ffffff", padding: "16px 14px", position: "relative", overflow: "hidden" }, children: [
966 /* @__PURE__ */ jsxDEV("div", { style: { 967 position: "absolute", 968 bottom: 0, 969 left: 0, 970 height: 3, 971 width: `${pct}%`, 972 background: "#000000", 973 transition: "width 1.2s ease" 974 } }, void 0, false, { 975 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 976 lineNumber: 534, 977 columnNumber: 13 978 }, this), 979 /* @__PURE__ */ jsxDEV("div", { style: { fontSize: 22, fontWeight: 300, color: "#000000", fontFamily: "monospace", lineHeight: 1 }, children: raw }, void 0, false, { 980 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 981 lineNumber: 536, 982 columnNumber: 13 983 }, this), 984 /* @__PURE__ */ jsxDEV("div", { style: { 985 fontSize: 9, 986 fontWeight: 600, 987 color: "#000000", 988 letterSpacing: "0.09em", 989 textTransform: "uppercase", 990 marginTop: 5 991 }, children: c.label }, void 0, false, { 992 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 993 lineNumber: 537, 994 columnNumber: 13 995 }, this) 996 ] }, c.label, true, { 997 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 998 lineNumber: 533, 999 columnNumber: 11 1000 }, this); 1001 }) }, void 0, false, { 1002 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1003 lineNumber: 528, 1004 columnNumber: 5 1005 }, this); 1006} 1007_c9 = BehaviorHeatmap; 1008function SafetyPipeline({ sp }) { 1009 _s2(); 1010 const [active, setActive] = useState(null); 1011 if (!sp) return null; 1012 const stages = [ 1013 { 1014 id: "guideline", 1015 label: "Guideline Alignment", 1016 status: sp.guideline_alignment?.confidence || "low", 1017 detail: (sp.guideline_alignment?.observed_compliant_patterns || []).slice(0, 2).join("; ") || "No data" 1018 }, 1019 { 1020 id: "medication", 1021 label: "Medication Safety", 1022 status: sp.medication_safety?.confidence || "low", 1023 detail: (sp.medication_safety?.observed_safe_patterns || []).slice(0, 1).join("; ") || "No data" 1024 }, 1025 { 1026 id: "diagnostic", 1027 label: "Diagnostic Accuracy", 1028 status: sp.diagnostic_accuracy?.confidence || "low", 1029 detail: (sp.diagnostic_accuracy?.consistency_observations || []).slice(0, 1).join("; ") || "No data" 1030 }, 1031 { 1032 id: "outcome", 1033 label: "Outcome Quality", 1034 status: sp.outcome_quality?.confidence || "low", 1035 detail: (sp.outcome_quality?.positive_signals || []).slice(0, 1).join("; ") || "No data" 1036 } 1037 ]; 1038 return /* @__PURE__ */ jsxDEV("div", { children: [ 1039 /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", alignItems: "stretch", gap: 0, marginBottom: 20 }, children: stages.map( 1040 (s, i) => /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", flex: 1 }, children: [
1041 /* @__PURE__ */ jsxDEV( 1042 "div", 1043 { 1044 onClick: () => setActive(active === s.id ? null : s.id), 1045 style: { 1046 flex: 1, 1047 padding: "12px 10px", 1048 border: `1.5px solid #000000`, 1049 background: active === s.id ? "#000000" : "#ffffff", 1050 cursor: "pointer", 1051 textAlign: "center", 1052 transition: "all 0.2s" 1053 }, 1054 children: [ 1055 /* @__PURE__ */ jsxDEV("div", { style: { 1056 width: 8, 1057 height: 8, 1058 borderRadius: "50%", 1059 background: active === s.id ? "#ffffff" : "#000000", 1060 margin: "0 auto 7px" 1061 } }, void 0, false, { 1062 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1063 lineNumber: 581, 1064 columnNumber: 15 1065 }, this), 1066 /* @__PURE__ */ jsxDEV("div", { style: { 1067 fontSize: 9, 1068 fontWeight: 700, 1069 letterSpacing: "0.09em", 1070 textTransform: "uppercase", 1071 color: active === s.id ? "#ffffff" : "#000000" 1072 }, children: s.label }, void 0, false, { 1073 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1074 lineNumber: 584, 1075 columnNumber: 15 1076 }, this),
1077 /* @__PURE__ */ jsxDEV("div", { style: { 1078 fontSize: 9, 1079 fontWeight: 600, 1080 color: active === s.id ? "rgba(255,255,255,0.7)" : "#000000", 1081 textTransform: "uppercase", 1082 marginTop: 3 1083 }, children: s.status }, void 0, false, { 1084 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1085 lineNumber: 586, 1086 columnNumber: 15 1087 }, this) 1088 ] 1089 }, 1090 void 0, 1091 true, 1092 { 1093 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1094 lineNumber: 576, 1095 columnNumber: 13 1096 }, 1097 this 1098 ), 1099 i < stages.length - 1 && /* @__PURE__ */ jsxDEV("div", { style: { width: 1, background: "#000000" } }, void 0, false, { 1100 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1101 lineNumber: 591, 1102 columnNumber: 11 1103 }, this) 1104 ] }, s.id, true, { 1105 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1106 lineNumber: 575, 1107 columnNumber: 9 1108 }, this) 1109 ) }, void 0, false, { 1110 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1111 lineNumber: 573, 1112 columnNumber: 7 1113 }, this), 1114 active && (() => { 1115 const s = stages.find((s2) => s2.id === active); 1116 return /* @__PURE__ */ jsxDEV("div", { style: { 1117 padding: "14px 16px", 1118 background: "#ffffff", 1119 border: `1px solid #000000`, 1120 borderLeft: `3px solid #000000`, 1121 animation: "fadeIn 0.2s ease", 1122 marginBottom: 16 1123 }, children: [
1124 /* @__PURE__ */ jsxDEV("div", { style: { 1125 fontSize: 9, 1126 fontWeight: 700, 1127 color: "#000000", 1128 letterSpacing: "0.1em", 1129 textTransform: "uppercase", 1130 marginBottom: 6 1131 }, children: [ 1132 s.label, 1133 " â Detail" 1134 ] }, void 0, true, { 1135 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1136 lineNumber: 601, 1137 columnNumber: 13 1138 }, this), 1139 /* @__PURE__ */ jsxDEV("div", { style: { fontSize: 12, fontWeight: 300, color: "#000000", lineHeight: 1.7 }, children: s.detail }, void 0, false, { 1140 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1141 lineNumber: 603, 1142 columnNumber: 13 1143 }, this) 1144 ] }, void 0, true, { 1145 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1146 lineNumber: 599, 1147 columnNumber: 11 1148 }, this); 1149 })(), 1150 (sp.risk_flags || []).length > 0 && /* @__PURE__ */ jsxDEV("div", { children: [ 1151 /* @__PURE__ */ jsxDEV("div", { style: { 1152 fontSize: 9, 1153 fontWeight: 700, 1154 letterSpacing: "0.12em", 1155 textTransform: "uppercase", 1156 color: "#000000", 1157 marginBottom: 10 1158 }, children: [ 1159 "Risk Flags (", 1160 sp.risk_flags.length, 1161 ")" 1162 ] }, void 0, true, { 1163 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1164 lineNumber: 609, 1165 columnNumber: 11 1166 }, this), 1167 sp.risk_flags.map( 1168 (f, i) => /* @__PURE__ */ jsxDEV("div", { style: { 1169 display: "flex", 1170 gap: 12, 1171 padding: "10px 14px", 1172 marginBottom: 6, 1173 border: `1px solid #000000`, 1174 background: "#ffffff", 1175 borderLeft: `3px solid #000000` 1176 }, children: [
1177 /* @__PURE__ */ jsxDEV("div", { style: { flexShrink: 0, paddingTop: 2 }, children: /* @__PURE__ */ jsxDEV("div", { style: { width: 7, height: 7, borderRadius: "50%", background: "#000000" } }, void 0, false, { 1178 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1179 lineNumber: 615, 1180 columnNumber: 17 1181 }, this) }, void 0, false, { 1182 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1183 lineNumber: 614, 1184 columnNumber: 15 1185 }, this), 1186 /* @__PURE__ */ jsxDEV("div", { children: [ 1187 /* @__PURE__ */ jsxDEV("div", { style: { 1188 fontSize: 9, 1189 fontWeight: 700, 1190 textTransform: "uppercase", 1191 letterSpacing: "0.08em", 1192 color: "#000000", 1193 marginBottom: 3 1194 }, children: [ 1195 (f.category || "").replace(/_/g, " "), 1196 " · ", 1197 f.severity 1198 ] }, void 0, true, { 1199 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1200 lineNumber: 618, 1201 columnNumber: 17 1202 }, this),
1203 /* @__PURE__ */ jsxDEV("div", { style: { fontSize: 12, fontWeight: 300, color: "#000000", lineHeight: 1.6 }, children: f.description }, void 0, false, { 1204 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1205 lineNumber: 620, 1206 columnNumber: 17 1207 }, this) 1208 ] }, void 0, true, { 1209 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1210 lineNumber: 617, 1211 columnNumber: 15 1212 }, this) 1213 ] }, i, true, { 1214 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1215 lineNumber: 612, 1216 columnNumber: 9 1217 }, this) 1218 ) 1219 ] }, void 0, true, { 1220 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1221 lineNumber: 608, 1222 columnNumber: 7 1223 }, this) 1224 ] }, void 0, true, { 1225 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1226 lineNumber: 572, 1227 columnNumber: 5 1228 }, this); 1229} 1230_s2(SafetyPipeline, "UiziKGcot5E8nbuQQ2ZlRLdhk5k="); 1231_c0 = SafetyPipeline; 1232function Section({ title, subtitle, children, badge, defaultOpen = true }) { 1233 _s3(); 1234 const [open, setOpen] = useState(defaultOpen); 1235 const [hovered, setHovered] = useState(false); 1236 return /* @__PURE__ */ jsxDEV("div", { style: { border: `1px solid #000000`, background: "#ffffff", marginBottom: 10 }, children: [ 1237 /* @__PURE__ */ jsxDEV( 1238 "div", 1239 { 1240 onClick: () => setOpen((o) => !o), 1241 onMouseEnter: () => setHovered(true), 1242 onMouseLeave: () => setHovered(false), 1243 style: { 1244 display: "flex", 1245 justifyContent: "space-between", 1246 alignItems: "center", 1247 padding: "14px 18px", 1248 cursor: "pointer", 1249 userSelect: "none", 1250 background: hovered ? "#000000" : "transparent", 1251 transition: "background 0.2s" 1252 }, 1253 children: [
1254 /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", alignItems: "center", gap: 12 }, children: [ 1255 /* @__PURE__ */ jsxDEV("div", { children: [ 1256 /* @__PURE__ */ jsxDEV("div", { style: { 1257 fontSize: 12, 1258 fontWeight: 600, 1259 color: hovered ? "#ffffff" : "#000000", 1260 letterSpacing: "0.02em", 1261 transition: "color 0.2s" 1262 }, children: title }, void 0, false, { 1263 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1264 lineNumber: 644, 1265 columnNumber: 13 1266 }, this), 1267 subtitle && /* @__PURE__ */ jsxDEV("div", { style: { 1268 fontSize: 10, 1269 fontWeight: 300, 1270 color: hovered ? "rgba(255,255,255,0.7)" : "#000000", 1271 marginTop: 2, 1272 transition: "color 0.2s" 1273 }, children: subtitle }, void 0, false, { 1274 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1275 lineNumber: 646, 1276 columnNumber: 26 1277 }, this) 1278 ] }, void 0, true, { 1279 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1280 lineNumber: 643, 1281 columnNumber: 11 1282 }, this), 1283 badge && /* @__PURE__ */ jsxDEV(Tag, { children: badge }, void 0, false, { 1284 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1285 lineNumber: 650, 1286 columnNumber: 21 1287 }, this) 1288 ] }, void 0, true, { 1289 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1290 lineNumber: 642, 1291 columnNumber: 9 1292 }, this),
1293 /* @__PURE__ */ jsxDEV("span", { style: { 1294 fontSize: 11, 1295 color: hovered ? "#ffffff" : "#000000", 1296 fontWeight: 300, 1297 transition: "transform 0.2s, color 0.2s", 1298 transform: open ? "rotate(180deg)" : "none", 1299 display: "inline-block" 1300 }, children: "â¼" }, void 0, false, { 1301 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1302 lineNumber: 652, 1303 columnNumber: 9 1304 }, this) 1305 ] 1306 }, 1307 void 0, 1308 true, 1309 { 1310 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1311 lineNumber: 636, 1312 columnNumber: 7 1313 }, 1314 this 1315 ), 1316 open && /* @__PURE__ */ jsxDEV("div", { style: { borderTop: `1px solid #000000`, padding: "16px 18px", animation: "fadeIn 0.2s ease" }, children }, void 0, false, { 1317 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1318 lineNumber: 657, 1319 columnNumber: 7 1320 }, this) 1321 ] }, void 0, true, { 1322 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1323 lineNumber: 635, 1324 columnNumber: 5 1325 }, this); 1326} 1327_s3(Section, "09PnztDdxGtE6fj+psyw3rJe5O0="); 1328_c1 = Section; 1329function FRow({ label, value, conf, evidence }) { 1330 _s4(); 1331 const [open, setOpen] = useState(false); 1332 return /* @__PURE__ */ jsxDEV("div", { style: { borderBottom: `1px solid #e0e0e0` }, children: [ 1333 /* @__PURE__ */ jsxDEV( 1334 "div", 1335 { 1336 onClick: () => evidence && setOpen((o) => !o), 1337 style: { 1338 display: "flex", 1339 justifyContent: "space-between", 1340 alignItems: "center", 1341 padding: "9px 0", 1342 cursor: evidence ? "pointer" : "default" 1343 }, 1344 children: [
1345 /* @__PURE__ */ jsxDEV("span", { style: { 1346 fontSize: 10, 1347 fontWeight: 600, 1348 textTransform: "uppercase", 1349 letterSpacing: "0.07em", 1350 color: "#000000" 1351 }, children: label }, void 0, false, { 1352 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1353 lineNumber: 672, 1354 columnNumber: 9 1355 }, this), 1356 /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", alignItems: "center", gap: 10 }, children: [ 1357 /* @__PURE__ */ jsxDEV("span", { style: { 1358 fontSize: 12, 1359 fontWeight: 400, 1360 color: "#000000", 1361 textTransform: "capitalize" 1362 }, children: (value || "â").replace(/_/g, " ") }, void 0, false, { 1363 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1364 lineNumber: 675, 1365 columnNumber: 11 1366 }, this), 1367 conf && /* @__PURE__ */ jsxDEV("span", { style: { display: "flex", alignItems: "center", gap: 4, fontSize: 9, fontWeight: 600, color: "#000000" }, children: [
1368 /* @__PURE__ */ jsxDEV("span", { style: { width: 6, height: 6, borderRadius: "50%", background: "#000000", flexShrink: 0 } }, void 0, false, { 1369 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1370 lineNumber: 679, 1371 columnNumber: 15 1372 }, this), 1373 conf 1374 ] }, void 0, true, { 1375 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1376 lineNumber: 678, 1377 columnNumber: 11 1378 }, this), 1379 evidence && /* @__PURE__ */ jsxDEV("span", { style: { fontSize: 10, color: "#000000" }, children: open ? "â²" : "â¼" }, void 0, false, { 1380 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1381 lineNumber: 683, 1382 columnNumber: 24 1383 }, this) 1384 ] }, void 0, true, { 1385 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1386 lineNumber: 674, 1387 columnNumber: 9 1388 }, this) 1389 ] 1390 }, 1391 void 0, 1392 true, 1393 { 1394 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1395 lineNumber: 669, 1396 columnNumber: 7 1397 }, 1398 this 1399 ), 1400 open && evidence && /* @__PURE__ */ jsxDEV("div", { style: { 1401 margin: "0 0 10px", 1402 padding: "10px 12px", 1403 background: "#f8f8f8", 1404 fontSize: 11, 1405 fontWeight: 300, 1406 color: "#000000", 1407 lineHeight: 1.7, 1408 borderLeft: `2px solid #000000`, 1409 animation: "fadeIn 0.15s ease" 1410 }, children: evidence }, void 0, false, { 1411 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1412 lineNumber: 687, 1413 columnNumber: 7 1414 }, this) 1415 ] }, void 0, true, { 1416 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1417 lineNumber: 668, 1418 columnNumber: 5 1419 }, this); 1420} 1421_s4(FRow, "xG1TONbKtDWtdOTrXaTAsNhPg/Q="); 1422_c10 = FRow; 1423function DirBlock({ label, items }) { 1424 if (!items?.length) return null; 1425 return /* @__PURE__ */ jsxDEV("div", { style: { marginBottom: 20 }, children: [ 1426 /* @__PURE__ */ jsxDEV("div", { style: { 1427 fontSize: 10, 1428 fontWeight: 700, 1429 letterSpacing: "0.12em", 1430 textTransform: "uppercase", 1431 color: "#000000", 1432 marginBottom: 8, 1433 paddingBottom: 6, 1434 borderBottom: `1px solid #000000` 1435 }, children: label }, void 0, false, { 1436 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1437 lineNumber: 701, 1438 columnNumber: 7 1439 }, this), 1440 items.map( 1441 (d, i) => /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", gap: 10, padding: "6px 0", borderBottom: `1px solid #e0e0e0` }, children: [
1442 /* @__PURE__ */ jsxDEV("span", { style: { fontSize: 12, color: "#000000", flexShrink: 0 }, children: "â" }, void 0, false, { 1443 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1444 lineNumber: 705, 1445 columnNumber: 11 1446 }, this), 1447 /* @__PURE__ */ jsxDEV("span", { style: { fontSize: 12, fontWeight: 300, color: "#000000", lineHeight: 1.6 }, children: d }, void 0, false, { 1448 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1449 lineNumber: 706, 1450 columnNumber: 11 1451 }, this) 1452 ] }, i, true, { 1453 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1454 lineNumber: 704, 1455 columnNumber: 7 1456 }, this) 1457 ) 1458 ] }, void 0, true, { 1459 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1460 lineNumber: 700, 1461 columnNumber: 5 1462 }, this); 1463} 1464_c11 = DirBlock; 1465function TopBar({ data, doctorId, generating, onGenerate }) { 1466 const ss = data?.soul_scores || {}; 1467 const intel = data?.intelligence_score || {}; 1468 const bm = data?.behavior_metrics || {}; 1469 return /* @__PURE__ */ jsxDEV("div", { style: { background: "#000000", color: "#ffffff", padding: "0 32px" }, children: [ 1470 /* @__PURE__ */ jsxDEV("div", { style: { 1471 display: "flex", 1472 justifyContent: "space-between", 1473 alignItems: "center", 1474 borderBottom: "1px solid rgba(255,255,255,0.15)", 1475 paddingTop: 20, 1476 paddingBottom: 20 1477 }, children: [
1478 /* @__PURE__ */ jsxDEV("div", { children: [ 1479 /* @__PURE__ */ jsxDEV("div", { style: { 1480 fontSize: 10, 1481 fontWeight: 600, 1482 letterSpacing: "0.2em", 1483 textTransform: "uppercase", 1484 color: "rgba(255,255,255,0.5)", 1485 marginBottom: 4 1486 }, children: "Soul Engine" }, void 0, false, { 1487 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1488 lineNumber: 722, 1489 columnNumber: 11 1490 }, this), 1491 /* @__PURE__ */ jsxDEV("div", { style: { fontSize: 22, fontWeight: 300, lineHeight: 1.2, color: "#ffffff" }, children: data?.doctor_name || "Doctor Soul Intelligence" }, void 0, false, { 1492 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1493 lineNumber: 724, 1494 columnNumber: 11 1495 }, this), 1496 /* @__PURE__ */ jsxDEV("div", { style: { fontSize: 12, fontWeight: 300, color: "rgba(255,255,255,0.6)", marginTop: 4 }, children: [ 1497 data?.specialization || "â", 1498 "  · ", 1499 /* @__P
1499URE__ */ jsxDEV("span", { style: { fontFamily: "monospace", fontSize: 11 }, children: doctorId }, void 0, false, { 1500 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1501 lineNumber: 729, 1502 columnNumber: 13 1503 }, this) 1504 ] }, void 0, true, { 1505 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1506 lineNumber: 727, 1507 columnNumber: 11 1508 }, this) 1509 ] }, void 0, true, { 1510 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1511 lineNumber: 721, 1512 columnNumber: 9 1513 }, this), 1514 /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", alignItems: "center", gap: 24 }, children: [ 1515 data && /* @__PURE__ */ jsxDEV(Fragment, { children: [ 1516 /* @__PURE__ */ jsxDEV(Pill, { val: intel.overall_intelligence_score, label: "Intelligence" }, void 0, false, { 1517 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1518 lineNumber: 735, 1519 columnNumber: 15 1520 }, this),
1521 /* @__PURE__ */ jsxDEV(Pill, { val: ss.overall_soul_score, label: "Soul Score" }, void 0, false, { 1522 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1523 lineNumber: 736, 1524 columnNumber: 15 1525 }, this), 1526 /* @__PURE__ */ jsxDEV(Pill, { val: bm.consultation_count, label: "Consultations" }, void 0, false, { 1527 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1528 lineNumber: 737, 1529 columnNumber: 15 1530 }, this) 1531 ] }, void 0, true, { 1532 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1533 lineNumber: 734, 1534 columnNumber: 11 1535 }, this), 1536 /* @__PURE__ */ jsxDEV( 1537 "button", 1538 { 1539 onClick: onGenerate, 1540 disabled: generating, 1541 style: { 1542 padding: "10px 22px", 1543 background: "transparent", 1544 border: "1px solid rgba(255,255,255,0.4)", 1545 color: "#ffffff", 1546 fontSize: 10, 1547 fontWeight: 600, 1548 letterSpacing: "0.12em", 1549 textTransform: "uppercase", 1550 opacity: generating ? 0.5 : 1, 1551 transition: "border-color 0.2s, background 0.2s" 1552 }, 1553 onMouseEnter: (e) => { 1554 if (!generating) { 1555 e.currentTarget.style.background = "rgba(255,255,255,0.1)"; 1556 e.currentTarget.style.borderColor = "rgba(255,255,255,0.8)"; 1557 } 1558 }, 1559 onMouseLeave: (e) => { 1560 e.currentTarget.style.background = "transparent"; 1561 e.currentTarget.style.borderColor = "rgba(255,255,255,0.4)"; 1562 }, 1563 children: generating ? "Generatingâ¦" : data ? "â» Regenerate" : "+ Generate Soul" 1564 }, 1565 void 0, 1566 false, 1567 { 1568 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1569 lineNumber: 740, 1570 columnNumber: 11 1571 }, 1572 this 1573 ) 1574 ] }, void 0, true, { 1575 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1576 lineNumber: 732, 1577 columnNumber: 9 1578 }, this) 1579 ] }, void 0, true, { 1580 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1581 lineNumber: 719, 1582 columnNumber: 7 1583 }, this),
1584 data && /* @__PURE__ */ jsxDEV("div", { style: { 1585 display: "flex", 1586 gap: 32, 1587 padding: "12px 0", 1588 fontSize: 10, 1589 fontWeight: 300, 1590 color: "rgba(255,255,255,0.5)" 1591 }, children: [ 1592 /* @__PURE__ */ jsxDEV("span", { children: [ 1593 "Data: ", 1594 /* @__PURE__ */ jsxDEV("b", { style: { color: "#ffffff", fontWeight: 600 }, children: (data.data_sufficiency || "low").toUpperCase() }, void 0, false, { 1595 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1596 lineNumber: 754, 1597 columnNumber: 23 1598 }, this) 1599 ] }, void 0, true, { 1600 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1601 lineNumber: 754, 1602 columnNumber: 11 1603 }, this), 1604 /* @__PURE__ */ jsxDEV("span", { children: [ 1605 "Records: ", 1606 /* @__PURE__ */ jsxDEV("b", { style: { color: "#ffffff", fontWeight: 600 }, children: data.behavioral_record_count || 0 }, void 0, false, { 1607 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1608 lineNumber: 755, 1609 columnNumber: 26 1610 }, this) 1611 ] }, void 0, true, { 1612 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1613 lineNumber: 755, 1614 columnNumber: 11 1615 }, this),
1616 /* @__PURE__ */ jsxDEV("span", { children: [ 1617 "Generated: ", 1618 /* @__PURE__ */ jsxDEV("b", { style: { color: "#ffffff", fontWeight: 600 }, children: data.generated_at ? new Date(data.generated_at).toLocaleDateString("en-GB", { day: "numeric", month: "short", year: "numeric" }) : "â" }, void 0, false, { 1619 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1620 lineNumber: 756, 1621 columnNumber: 28 1622 }, this) 1623 ] }, void 0, true, { 1624 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1625 lineNumber: 756, 1626 columnNumber: 11 1627 }, this) 1628 ] }, void 0, true, { 1629 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1630 lineNumber: 752, 1631 columnNumber: 7 1632 }, this) 1633 ] }, void 0, true, { 1634 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1635 lineNumber: 718, 1636 columnNumber: 5 1637 }, this); 1638} 1639_c12 = TopBar; 1640const TABS = [ 1641 { id: "overview", label: "Overview" }, 1642 { id: "soul", label: "Behavioral Profile" }, 1643 { id: "quality", label: "Clinical QA" }, 1644 { id: "flow", label: "Decision Flow" }, 1645 { id: "directives", label: "Directives" }, 1646 { id: "markdown", label: "SOUL.md" } 1647]; 1648export default function DoctorSoulDashboard() { 1649 _s5(); 1650 const doctorId = getDoctorId(); 1651 const [data, setData] = useState(null); 1652 const [loading, setLoading] = useState(false); 1653 const [generating, setGen] = useState(false); 1654 const [error, setError] = useState(null); 1655 const [genMsg, setGenMsg] = useState(null); 1656 const [tab, setTab] = useState("overview"); 1657 const [copied, setCopied] = useState(false); 1658 const fetchProfile = useCallback(async (id) => { 1659 if (!id) return; 1660 setLoading(true); 1661 setError(null); 1662 try { 1663 const res = await fetch(`${BASE_URL}/get/${id}`); 1664 const json = await res.json(); 1665 if (res.ok && json.status === "success") setData(json.data); 1666 else if (res.status === 404) { 1667 setData(null); 1668 setError("No soul profile found. Click Generate to create one."); 1669 } else 1670 setError(json.detail || "Failed to load profile."); 1671 } catch (e) { 1672 setError("Network error: " + e.message); 1673 } finally { 1674 setLoading(false); 1675 } 1676 }, []); 1677 useEffect(() => { 1678 if (doctorId) fetchProfile(doctorId); 1679 }, [doctorId, fetchProfile]); 1680 const generateSoul = async () => { 1681 if (!doctorId || generating) return; 1682 setGen(true); 1683 setError(null); 1684 setGenMsg("Collecting behavioral dataâ¦"); 1685 try { 1686 setGenMsg("Running LLM analysis â takes 20â40 sâ¦"); 1687 const res = await fetch(`${BASE_URL}/generate/${doctorId}`, { method: "POST" }); 1688 const json = await res.json(); 1689 if (res.status === 422) { 1690 setError(json.message + " " + (json.tip || "")); 1691 return; 1692 } 1693 if (!res.ok) throw new Error(json.detail || "Generation failed."); 1694 setGenMsg("Done â loading profileâ¦"); 1695 await fetchProfile(doctorId); 1696 } catch (e) { 1697 setError("Error: " + e.message); 1698 } finally { 1699 setGen(false); 1700 setGenMsg(null); 1701 } 1702 }; 1703 const sf = data?.soul_features || {}; 1704 const bm = data?.behavior_metrics || {}; 1705 const ss = data?.soul_scores || {}; 1706 const qm = data?.quality_metrics || {}; 1707 const intel = data?.intelligence_score || {}; 1708 const sp = data?.safety_profile || {}; 1709 const radarData = useMemo(() => ({ 1710 Evidence: Math.round(ss.evidence_score || 0), 1711 Safety: Math.round(ss.safety_score || 0), 1712 Patient: Math.round(ss.patient_centered_score || 0), 1713 Docs: Math.round(ss.documentation_score || 0), 1714 Guideline: Math.round(qm.guideline_compliance_score || 0) 1715 }), [ss, qm]); 1716 if (!doctorId) return /* @__PURE__ */ jsxDEV(Fragment, { children: [ 1717 /* @__PURE__ */ jsxDEV("style", { children: G }, void 0, false, { 1718 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1719 lineNumber: 831, 1720 columnNumber: 7 1721 }, this), 1722 /* @__PURE__ */ jsxDEV("div", { style: { 1723 height: "100vh", 1724 display: "flex", 1725 alignItems: "center", 1726 justifyContent: "center", 1727 flexDirection: "column", 1728 gap: 12, 1729 background: "#ffffff" 1730 }, children: [
1731 /* @__PURE__ */ jsxDEV("div", { style: { fontSize: 11, fontWeight: 700, color: "#000000", letterSpacing: "0.16em", textTransform: "uppercase" }, children: "No Doctor ID" }, void 0, false, { 1732 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1733 lineNumber: 834, 1734 columnNumber: 9 1735 }, this), 1736 /* @__PURE__ */ jsxDEV("div", { style: { fontSize: 13, fontWeight: 300, color: "#000000" }, children: "Add ?doctor_id=DOC-xxxx to the URL" }, void 0, false, { 1737 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1738 lineNumber: 835, 1739 columnNumber: 9 1740 }, this) 1741 ] }, void 0, true, { 1742 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1743 lineNumber: 832, 1744 columnNumber: 7 1745 }, this) 1746 ] }, void 0, true, { 1747 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1748 lineNumber: 830, 1749 columnNumber: 5 1750 }, this); 1751 if (loading || generating) return /* @__PURE__ */ jsxDEV(Fragment, { children: [ 1752 /* @__PURE__ */ jsxDEV("style", { children: G }, void 0, false, { 1753 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1754 lineNumber: 842, 1755 columnNumber: 7 1756 }, this), 1757 /* @__PURE__ */ jsxDEV("div", { style: { 1758 height: "100vh", 1759 display: "flex", 1760 alignItems: "center", 1761 justifyContent: "center", 1762 flexDirection: "column", 1763 gap: 20, 1764 background: "#ffffff" 1765 }, children: [
1766 /* @__PURE__ */ jsxDEV(Spinner, { size: 40 }, void 0, false, { 1767 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1768 lineNumber: 845, 1769 columnNumber: 9 1770 }, this), 1771 /* @__PURE__ */ jsxDEV("div", { style: { fontSize: 11, fontWeight: 300, color: "#000000", letterSpacing: "0.1em" }, children: generating ? genMsg || "GENERATING SOUL PROFILEâ¦" : "LOADING PROFILEâ¦" }, void 0, false, { 1772 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1773 lineNumber: 846, 1774 columnNumber: 9 1775 }, this), 1776 generating && genMsg && /* @__PURE__ */ jsxDEV("div", { style: { fontSize: 10, fontWeight: 300, color: "#000000", maxWidth: 300, textAlign: "center" }, children: genMsg }, void 0, false, { 1777 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1778 lineNumber: 850, 1779 columnNumber: 9 1780 }, this) 1781 ] }, void 0, true, { 1782 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1783 lineNumber: 843, 1784 columnNumber: 7 1785 }, this) 1786 ] }, void 0, true, { 1787 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1788 lineNumber: 841, 1789 columnNumber: 5 1790 }, this); 1791 return /* @__PURE__ */ jsxDEV(Fragment, { children: [ 1792 /* @__PURE__ */ jsxDEV("style", { children: G }, void 0, false, { 1793 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1794 lineNumber: 858, 1795 columnNumber: 7 1796 }, this), 1797 /* @__PURE__ */ jsxDEV("div", { style: { minHeight: "100vh", background: "#ffffff", fontFamily: "'Open Sans',sans-serif" }, children: [
1798 /* @__PURE__ */ jsxDEV(TopBar, { data, doctorId, generating, onGenerate: generateSoul }, void 0, false, { 1799 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1800 lineNumber: 861, 1801 columnNumber: 9 1802 }, this), 1803 error && /* @__PURE__ */ jsxDEV("div", { style: { 1804 background: "#ffffff", 1805 borderBottom: `1px solid #000000`, 1806 padding: "12px 32px", 1807 fontSize: 12, 1808 fontWeight: 300, 1809 color: "#000000", 1810 borderLeft: "4px solid #000000" 1811 }, children: error }, void 0, false, { 1812 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1813 lineNumber: 864, 1814 columnNumber: 9 1815 }, this), 1816 !data && !loading && !error && /* @__PURE__ */ jsxDEV("div", { style: { 1817 display: "flex", 1818 alignItems: "center", 1819 justifyContent: "center", 1820 flexDirection: "column", 1821 gap: 16, 1822 height: "60vh" 1823 }, children: [ 1824 /* @__PURE__ */ jsxDEV("div", { style: { fontSize: 11, fontWeight: 700, color: "#000000", letterSpacing: "0.16em", textTransform: "uppercase" }, children: "No Profile" }, void 0, false, { 1825 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1826 lineNumber: 873, 1827 columnNumber: 13 1828 }, this),
1829 /* @__PURE__ */ jsxDEV("div", { style: { fontSize: 13, fontWeight: 300, color: "#000000" }, children: "Click Generate to build this doctor's soul profile." }, void 0, false, { 1830 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1831 lineNumber: 874, 1832 columnNumber: 13 1833 }, this) 1834 ] }, void 0, true, { 1835 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1836 lineNumber: 871, 1837 columnNumber: 9 1838 }, this), 1839 data && /* @__PURE__ */ jsxDEV(Fragment, { children: [ 1840 /* @__PURE__ */ jsxDEV("div", { style: { 1841 background: "#ffffff", 1842 borderBottom: `1px solid #000000`, 1843 padding: "0 32px", 1844 display: "flex", 1845 gap: 0, 1846 overflowX: "auto" 1847 }, children: TABS.map( 1848 (t) => /* @__PURE__ */ jsxDEV( 1849 "button", 1850 { 1851 onClick: () => setTab(t.id), 1852 style: { 1853 padding: "14px 20px", 1854 fontSize: 11, 1855 fontWeight: tab === t.id ? 700 : 400, 1856 background: tab === t.id ? "#000000" : "transparent", 1857 color: tab === t.id ? "#ffffff" : "#000000", 1858 border: "none", 1859 letterSpacing: "0.04em", 1860 whiteSpace: "nowrap", 1861 transition: "all 0.15s" 1862 }, 1863 children: t.label 1864 }, 1865 t.id, 1866 false, 1867 { 1868 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1869 lineNumber: 884, 1870 columnNumber: 13 1871 }, 1872 this 1873 ) 1874 ) }, void 0, false, { 1875 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1876 lineNumber: 881, 1877 columnNumber: 13 1878 }, this),
1879 /* @__PURE__ */ jsxDEV("div", { style: { padding: "28px 32px", maxWidth: 1400, margin: "0 auto", animation: "fadeIn 0.3s ease" }, children: [ 1880 tab === "overview" && /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", flexDirection: "column", gap: 10 }, children: [ 1881 /* @__PURE__ */ jsxDEV(Section, { title: "Unified Intelligence Score", subtitle: "Combined Soul + Clinical QA metric", defaultOpen: true, children: /* @__PURE__ */ jsxDEV("div", { style: { display: "grid", gridTemplateColumns: "auto 1fr", gap: 32, alignItems: "center" }, children: [ 1882 /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", justifyContent: "center" }, children: /* @__PURE__ */ jsxDEV(Gauge, { score: intel.overall_intelligence_score, size: 200 }, void 0, false, { 1883 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1884 lineNumber: 906, 1885 columnNumber: 25 1886 }, this) }, void 0, false, { 1887 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1888 lineNumber: 905, 1889 columnNumber: 23 1890 }, this),
1891 /* @__PURE__ */ jsxDEV("div", { children: [ 1892 /* @__PURE__ */ jsxDEV("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr", gap: 1, background: "#000000", marginBottom: 16 }, children: [ 1893 { l: "Soul", v: intel.soul_score, w: "40%" }, 1894 { l: "Guideline", v: intel.guideline_score, w: "20%" }, 1895 { l: "Medication", v: intel.medication_score, w: "15%" }, 1896 { l: "Diagnostic", v: intel.diagnostic_score, w: "15%" }, 1897 { l: "Outcome", v: intel.outcome_score, w: "10%" } 1898 ].map( 1899 (it) => /* @__PURE__ */ jsxDEV("div", { style: { background: "#ffffff", padding: "10px 14px" }, children: [ 1900 /* @__PURE__ */ jsxDEV("div", { style: { fontSize: 18, fontWeight: 300, fontFamily: "monospace", color: "#000000" }, children: Math.round(it.v || 0) }, void 0, false, { 1901 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1902 lineNumber: 918, 1903 columnNumber: 31 1904 }, this),
1905 /* @__PURE__ */ jsxDEV("div", { style: { 1906 fontSize: 8, 1907 fontWeight: 600, 1908 color: "#000000", 1909 letterSpacing: "0.08em", 1910 textTransform: "uppercase", 1911 marginTop: 2 1912 }, children: [ 1913 it.l, 1914 " · ", 1915 it.w 1916 ] }, void 0, true, { 1917 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1918 lineNumber: 919, 1919 columnNumber: 31 1920 }, this) 1921 ] }, it.l, true, { 1922 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1923 lineNumber: 917, 1924 columnNumber: 23 1925 }, this) 1926 ) }, void 0, false, { 1927 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1928 lineNumber: 909, 1929 columnNumber: 25 1930 }, this),
1931 /* @__PURE__ */ jsxDEV("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr", gap: "0 40px" }, children: [ 1932 /* @__PURE__ */ jsxDEV(Bar, { label: "Soul (Behavioral)", value: intel.soul_score, bold: true }, void 0, false, { 1933 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1934 lineNumber: 925, 1935 columnNumber: 27 1936 }, this), 1937 /* @__PURE__ */ jsxDEV(Bar, { label: "Guideline Compliance", value: intel.guideline_score }, void 0, false, { 1938 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1939 lineNumber: 926, 1940 columnNumber: 27 1941 }, this), 1942 /* @__PURE__ */ jsxDEV(Bar, { label: "Medication Safety", value: intel.medication_score }, void 0, false, { 1943 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1944 lineNumber: 927, 1945 columnNumber: 27 1946 }, this),
1947 /* @__PURE__ */ jsxDEV(Bar, { label: "Diagnostic Quality", value: intel.diagnostic_score }, void 0, false, { 1948 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1949 lineNumber: 928, 1950 columnNumber: 27 1951 }, this), 1952 /* @__PURE__ */ jsxDEV(Bar, { label: "Outcome Quality", value: intel.outcome_score }, void 0, false, { 1953 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1954 lineNumber: 929, 1955 columnNumber: 27 1956 }, this) 1957 ] }, void 0, true, { 1958 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1959 lineNumber: 924, 1960 columnNumber: 25 1961 }, this) 1962 ] }, void 0, true, { 1963 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1964 lineNumber: 908, 1965 columnNumber: 23 1966 }, this) 1967 ] }, void 0, true, { 1968 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1969 lineNumber: 904, 1970 columnNumber: 21 1971 }, this) }, void 0, false, { 1972 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1973 lineNumber: 903, 1974 columnNumber: 19 1975 }, this),
1976 /* @__PURE__ */ jsxDEV(Section, { title: "Soul Dimensions", subtitle: "Radar view across core clinical dimensions", defaultOpen: true, children: /* @__PURE__ */ jsxDEV("div", { style: { display: "grid", gridTemplateColumns: "auto 1fr", gap: 32, alignItems: "center" }, children: [ 1977 /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", justifyContent: "center" }, children: /* @__PURE__ */ jsxDEV(Radar, { data: radarData, size: 240 }, void 0, false, { 1978 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1979 lineNumber: 938, 1980 columnNumber: 25 1981 }, this) }, void 0, false, { 1982 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1983 lineNumber: 937, 1984 columnNumber: 23 1985 }, this), 1986 /* @__PURE__ */ jsxDEV("div", { children: [ 1987 /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", justifyContent: "space-around", marginBottom: 24 }, children: [ 1988 /* @__P
1988URE__ */ jsxDEV(Ring, { value: ss.overall_soul_score, size: 72, label: "Soul" }, void 0, false, { 1989 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1990 lineNumber: 942, 1991 columnNumber: 27 1992 }, this), 1993 /* @__PURE__ */ jsxDEV(Ring, { value: qm.overall_quality_score, size: 72, label: "QA" }, void 0, false, { 1994 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 1995 lineNumber: 943, 1996 columnNumber: 27 1997 }, this), 1998 /* @__PURE__ */ jsxDEV(Ring, { value: intel.overall_intelligence_score, size: 72, label: "Intelligence" }, void 0, false, { 1999 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2000 lineNumber: 944, 2001 columnNumber: 27 2002 }, this) 2003 ] }, void 0, true, { 2004 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2005 lineNumber: 941, 2006 columnNumber: 25 2007 }, this),
2008 /* @__PURE__ */ jsxDEV("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr", gap: 16 }, children: [ 2009 /* @__PURE__ */ jsxDEV(Ring, { value: ss.evidence_score, size: 64, label: "Evidence" }, void 0, false, { 2010 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2011 lineNumber: 947, 2012 columnNumber: 27 2013 }, this), 2014 /* @__PURE__ */ jsxDEV(Ring, { value: ss.safety_score, size: 64, label: "Safety" }, void 0, false, { 2015 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2016 lineNumber: 948, 2017 columnNumber: 27 2018 }, this), 2019 /* @__PURE__ */ jsxDEV(Ring, { value: ss.patient_centered_score, size: 64, label: "Patient" }, void 0, false, { 2020 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2021 lineNumber: 949, 2022 columnNumber: 27 2023 }, this),
2024 /* @__PURE__ */ jsxDEV(Ring, { value: ss.documentation_score, size: 64, label: "Docs" }, void 0, false, { 2025 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2026 lineNumber: 950, 2027 columnNumber: 27 2028 }, this) 2029 ] }, void 0, true, { 2030 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2031 lineNumber: 946, 2032 columnNumber: 25 2033 }, this) 2034 ] }, void 0, true, { 2035 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2036 lineNumber: 940, 2037 columnNumber: 23 2038 }, this) 2039 ] }, void 0, true, { 2040 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2041 lineNumber: 936, 2042 columnNumber: 21 2043 }, this) }, void 0, false, { 2044 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2045 lineNumber: 935, 2046 columnNumber: 19 2047 }, this),
2048 /* @__PURE__ */ jsxDEV(Section, { title: "Quick Profile Summary", subtitle: "At-a-glance clinical attributes", defaultOpen: true, children: /* @__PURE__ */ jsxDEV("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr 1fr", gap: "0 40px" }, children: sf.risk_profile && [ 2049 { k: "Risk profile", v: sf.risk_profile?.value }, 2050 { k: "Decision style", v: sf.decision_style?.primary }, 2051 { k: "Intervention", v: sf.treatment_philosophy?.intervention_threshold }, 2052 { k: "Investigation", v: sf.diagnostic_rigor?.investigation_intensity }, 2053 { k: "Documentation", v: sf.documentation_quality?.detail_level }, 2054 { k: "Treatment approach", v: sf.treatment_philosophy?.approach } 2055 ].map( 2056 ({ k, v }) => /* @__PURE__ */ jsxDEV("div", { style: { 2057 display: "flex", 2058 justifyContent: "space-between", 2059 padding: "7px 0", 2060 borderBottom: `1px solid #e0e0e0` 2061 }, children: [
2062 /* @__PURE__ */ jsxDEV("span", { style: { 2063 fontSize: 9, 2064 fontWeight: 600, 2065 color: "#000000", 2066 textTransform: "uppercase", 2067 letterSpacing: "0.07em" 2068 }, children: k }, void 0, false, { 2069 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2070 lineNumber: 968, 2071 columnNumber: 27 2072 }, this), 2073 /* @__PURE__ */ jsxDEV("span", { style: { 2074 fontSize: 11, 2075 fontWeight: 400, 2076 color: "#000000", 2077 textTransform: "capitalize" 2078 }, children: (v || "â").replace(/_/g, " ") }, void 0, false, { 2079 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2080 lineNumber: 970, 2081 columnNumber: 27 2082 }, this) 2083 ] }, k, true, { 2084 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2085 lineNumber: 966, 2086 columnNumber: 19 2087 }, this) 2088 ) }, void 0, false, { 2089 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2090 lineNumber: 957, 2091 columnNumber: 21 2092 }, this) }, void 0, false, { 2093 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2094 lineNumber: 956, 2095 columnNumber: 19 2096 }, this),
2097 /* @__PURE__ */ jsxDEV(Section, { title: "Activity Metrics", subtitle: "Real observed data from the doctor's practice", defaultOpen: true, children: /* @__PURE__ */ jsxDEV(BehaviorHeatmap, { bm }, void 0, false, { 2098 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2099 lineNumber: 978, 2100 columnNumber: 21 2101 }, this) }, void 0, false, { 2102 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2103 lineNumber: 977, 2104 columnNumber: 19 2105 }, this), 2106 data.observed_behavior_report?.key_observations?.length > 0 && /* @__PURE__ */ jsxDEV(Section, { title: "Key Behavioral Observations", subtitle: "LLM-extracted patterns from clinical activity", defaultOpen: true, children: /* @__PURE__ */ jsxDEV("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr 1fr", gap: 12 }, children: data.observed_behavior_report.key_observations.map( 2107 (o, i) => /* @__PURE__ */ jsxDEV("div", { style: { padding: "12px 14px", background: "#ffffff", border: `1px solid #000000` }, children: [
2108 /* @__PURE__ */ jsxDEV("div", { style: { 2109 fontSize: 10, 2110 fontWeight: 700, 2111 color: "#000000", 2112 fontFamily: "monospace", 2113 marginBottom: 6 2114 }, children: [ 2115 "#", 2116 String(i + 1).padStart(2, "0") 2117 ] }, void 0, true, { 2118 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2119 lineNumber: 986, 2120 columnNumber: 29 2121 }, this), 2122 /* @__PURE__ */ jsxDEV("div", { style: { fontSize: 12, fontWeight: 300, color: "#000000", lineHeight: 1.6 }, children: o }, void 0, false, { 2123 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2124 lineNumber: 988, 2125 columnNumber: 29 2126 }, this) 2127 ] }, i, true, { 2128 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2129 lineNumber: 985, 2130 columnNumber: 19 2131 }, this) 2132 ) }, void 0, false, { 2133 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2134 lineNumber: 983, 2135 columnNumber: 23 2136 }, this) }, void 0, false, { 2137 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2138 lineNumber: 982, 2139 columnNumber: 15 2140 }, this) 2141 ] }, void 0, true, { 2142 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2143 lineNumber: 901, 2144 columnNumber: 13 2145 }, this), 2146 tab === "soul" && /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", flexDirection: "column", gap: 10 }, children: [
2147 /* @__PURE__ */ jsxDEV(Section, { title: "Behavioral Features", subtitle: "Click any row with evidence to expand it", defaultOpen: true, children: /* @__PURE__ */ jsxDEV("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr", gap: "0 40px" }, children: [ 2148 /* @__PURE__ */ jsxDEV("div", { children: [ 2149 /* @__PURE__ */ jsxDEV(FRow, { label: "Risk Profile", value: sf.risk_profile?.value, conf: sf.risk_profile?.confidence, evidence: sf.risk_profile?.evidence }, void 0, false, { 2150 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2151 lineNumber: 1004, 2152 columnNumber: 25 2153 }, this), 2154 /* @__PURE__ */ jsxDEV(FRow, { label: "Decision Style", value: sf.decision_style?.primary, conf: sf.decision_style?.confidence, evidence: sf.decision_style?.evidence }, void 0, false, { 2155 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2156 lineNumber: 1005, 2157 columnNumber: 25 2158 }, this),
2159 /* @__PURE__ */ jsxDEV(FRow, { label: "Treatment Philosophy", value: sf.treatment_philosophy?.approach, conf: sf.treatment_philosophy?.confidence, evidence: sf.treatment_philosophy?.evidence }, void 0, false, { 2160 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2161 lineNumber: 1006, 2162 columnNumber: 25 2163 }, this), 2164 /* @__PURE__ */ jsxDEV(FRow, { label: "Intervention Threshold", value: sf.treatment_philosophy?.intervention_threshold }, void 0, false, { 2165 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2166 lineNumber: 1007, 2167 columnNumber: 25 2168 }, this) 2169 ] }, void 0, true, { 2170 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2171 lineNumber: 1003, 2172 columnNumber: 23 2173 }, this), 2174 /* @__PURE__ */ jsxDEV("div", { children: [ 2175 /* @__PURE__ */ jsxDEV(FRow, { label: "Investigation Intensity", value: sf.diagnostic_rigor?.investigation_intensity, conf: sf.diagnostic_rigor?.confidence, evidence: sf.diagnostic_rigor?.evidence }, void 0, false, { 2176 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2177 lineNumber: 1010, 2178 columnNumber: 25 2179 }, this),
2180 /* @__PURE__ */ jsxDEV(FRow, { label: "Escalation Pattern", value: sf.diagnostic_rigor?.escalation_pattern }, void 0, false, { 2181 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2182 lineNumber: 1011, 2183 columnNumber: 25 2184 }, this), 2185 /* @__PURE__ */ jsxDEV(FRow, { label: "Documentation Detail", value: sf.documentation_quality?.detail_level, conf: sf.documentation_quality?.confidence, evidence: sf.documentation_quality?.evidence }, void 0, false, { 2186 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2187 lineNumber: 1012, 2188 columnNumber: 25 2189 }, this), 2190 /* @__PURE__ */ jsxDEV(FRow, { label: "Safety Check Freq.", value: sf.safety_behaviors?.double_check_frequency, conf: sf.safety_behaviors?.confidence, evidence: sf.safety_behaviors?.evidence }, void 0, false, { 2191 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2192 lineNumber: 1013, 2193 columnNumber: 25 2194 }, this) 2195 ] }, void 0, true, { 2196 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2197 lineNumber: 1009, 2198 columnNumber: 23 2199 }, this) 2200 ] }, void 0, true, { 2201 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2202 lineNumber: 1002, 2203 columnNumber: 21 2204 }, this) }, void 0, false, { 2205 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2206 lineNumber: 1001, 2207 columnNumber: 19 2208 }, this),
2209 /* @__PURE__ */ jsxDEV(Section, { title: "Core Values", subtitle: "What this doctor fundamentally cares about", defaultOpen: true, children: [ 2210 /* @__PURE__ */ jsxDEV("div", { style: { marginBottom: 10 }, children: (sf.core_values?.values || []).map((v, i) => /* @__PURE__ */ jsxDEV(Tag, { filled: true, children: v }, i, false, { 2211 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2212 lineNumber: 1020, 2213 columnNumber: 69 2214 }, this)) }, void 0, false, { 2215 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2216 lineNumber: 1019, 2217 columnNumber: 21 2218 }, this), 2219 sf.core_values?.evidence && /* @__PURE__ */ jsxDEV("div", { style: { fontSize: 11, fontWeight: 300, color: "#000000", fontStyle: "italic", lineHeight: 1.7, marginTop: 10 }, children: sf.core_values.evidence }, void 0, false, { 2220 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2221 lineNumber: 1023, 2222 columnNumber: 17 2223 }, this) 2224 ] }, void 0, true, { 2225 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2226 lineNumber: 1018, 2227 columnNumber: 19 2228 }, this),
2229 /* @__PURE__ */ jsxDEV(Section, { title: "Clinical Principles", subtitle: "How this doctor approaches clinical decisions", defaultOpen: true, children: (sf.clinical_principles?.principles || []).map( 2230 (p, i) => /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", gap: 10, padding: "7px 0", borderBottom: `1px solid #e0e0e0` }, children: [ 2231 /* @__PURE__ */ jsxDEV("span", { style: { fontSize: 12, color: "#000000", flexShrink: 0 }, children: "â" }, void 0, false, { 2232 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2233 lineNumber: 1032, 2234 columnNumber: 25 2235 }, this), 2236 /* @__PURE__ */ jsxDEV("span", { style: { fontSize: 12, fontWeight: 300, color: "#000000", lineHeight: 1.6 }, children: p }, void 0, false, { 2237 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2238 lineNumber: 1033, 2239 columnNumber: 25 2240 }, this) 2241 ] }, i, true, { 2242 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2243 lineNumber: 1031, 2244 columnNumber: 17 2245 }, this) 2246 ) }, void 0, false, { 2247 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2248 lineNumber: 1029, 2249 columnNumber: 19 2250 }, this),
2251 /* @__PURE__ */ jsxDEV(Section, { title: "Red Lines", subtitle: "Non-negotiables â what this doctor will never compromise on", badge: `${(sf.red_lines?.lines || []).length} rules`, defaultOpen: true, children: (sf.red_lines?.lines || []).map( 2252 (l, i) => /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", gap: 10, padding: "8px 0", borderBottom: `1px solid #e0e0e0` }, children: [ 2253 /* @__PURE__ */ jsxDEV("span", { style: { fontSize: 11, color: "#000000", fontWeight: 700, flexShrink: 0, marginTop: 1 }, children: "â" }, void 0, false, { 2254 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2255 lineNumber: 1041, 2256 columnNumber: 25 2257 }, this), 2258 /* @__PURE__ */ jsxDEV("span", { style: { fontSize: 12, fontWeight: 300, color: "#000000", lineHeight: 1.6 }, children: l }, void 0, false, { 2259 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2260 lineNumber: 1042, 2261 columnNumber: 25 2262 }, this) 2263 ] }, i, true, { 2264 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2265 lineNumber: 1040, 2266 columnNumber: 17 2267 }, this) 2268 ) }, void 0, false, { 2269 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2270 lineNumber: 1038, 2271 columnNumber: 19 2272 }, this), 2273 data.priority_order?.ordered_priorities?.length > 0 && /* @__PURE__ */ jsxDEV(Section, { title: "Clinical Priority Order", subtitle: "When priorities conflict, follow this order", defaultOpen: true, children: [ 2274 data.priority_order.ordered_priorities.map( 2275 (p, i) => /* @__PURE__ */ jsxDEV("div", { style: { 2276 display: "flex", 2277 gap: 14, 2278 alignItems: "center", 2279 padding: "8px 0", 2280 borderBottom: `1px solid #e0e0e0` 2281 }, children: [
2282 /* @__PURE__ */ jsxDEV("span", { style: { 2283 width: 24, 2284 height: 24, 2285 border: `1.5px solid #000000`, 2286 display: "flex", 2287 alignItems: "center", 2288 justifyContent: "center", 2289 fontSize: 10, 2290 fontWeight: 700, 2291 flexShrink: 0, 2292 color: "#000000" 2293 }, children: i + 1 }, void 0, false, { 2294 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2295 lineNumber: 1052, 2296 columnNumber: 27 2297 }, this), 2298 /* @__PURE__ */ jsxDEV("span", { style: { 2299 fontSize: 12, 2300 fontWeight: 300, 2301 color: "#000000", 2302 textTransform: "capitalize" 2303 }, children: p.replace(/_/g, " ") }, void 0, false, { 2304 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2305 lineNumber: 1055, 2306 columnNumber: 27 2307 }, this) 2308 ] }, i, true, { 2309 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2310 lineNumber: 1050, 2311 columnNumber: 17 2312 }, this) 2313 ), 2314 data.priority_order.conflict_resolution_rule && /* @__PURE__ */ jsxDEV("div", { style: { 2315 marginTop: 12, 2316 fontSize: 11, 2317 fontWeight: 300, 2318 color: "#000000", 2319 fontStyle: "italic", 2320 lineHeight: 1.6 2321 }, children: data.priority_order.conflict_resolution_rule }, void 0, false, { 2322 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2323 lineNumber: 1060, 2324 columnNumber: 17 2325 }, this) 2326 ] }, void 0, true, { 2327 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2328 lineNumber: 1048, 2329 columnNumber: 15 2330 }, this), 2331 data.safety_rules && /* @__PURE__ */ jsxDEV(Section, { title: "Safety Rules", subtitle: "Hard rules encoded into the AI agent", defaultOpen: true, children: /* @__PURE__ */ jsxDEV("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr", gap: 20 }, children: [
2332 /* @__PURE__ */ jsxDEV("div", { children: [ 2333 /* @__PURE__ */ jsxDEV("div", { style: { 2334 fontSize: 9, 2335 fontWeight: 700, 2336 color: "#000000", 2337 letterSpacing: "0.1em", 2338 textTransform: "uppercase", 2339 marginBottom: 10 2340 }, children: "Never" }, void 0, false, { 2341 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2342 lineNumber: 1070, 2343 columnNumber: 27 2344 }, this), 2345 (data.safety_rules.never || []).map( 2346 (r, i) => /* @__PURE__ */ jsxDEV("div", { style: { 2347 fontSize: 11, 2348 fontWeight: 300, 2349 color: "#000000", 2350 padding: "6px 0", 2351 borderBottom: `1px solid #e0e0e0`, 2352 lineHeight: 1.6 2353 }, children: r }, i, false, { 2354 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2355 lineNumber: 1073, 2356 columnNumber: 21 2357 }, this) 2358 ) 2359 ] }, void 0, true, { 2360 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2361 lineNumber: 1069, 2362 columnNumber: 25 2363 }, this),
2364 /* @__PURE__ */ jsxDEV("div", { children: [ 2365 /* @__PURE__ */ jsxDEV("div", { style: { 2366 fontSize: 9, 2367 fontWeight: 700, 2368 color: "#000000", 2369 letterSpacing: "0.1em", 2370 textTransform: "uppercase", 2371 marginBottom: 10 2372 }, children: "Always" }, void 0, false, { 2373 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2374 lineNumber: 1078, 2375 columnNumber: 27 2376 }, this), 2377 (data.safety_rules.always || []).map( 2378 (r, i) => /* @__PURE__ */ jsxDEV("div", { style: { 2379 fontSize: 11, 2380 fontWeight: 300, 2381 color: "#000000", 2382 padding: "6px 0", 2383 borderBottom: `1px solid #e0e0e0`, 2384 lineHeight: 1.6 2385 }, children: r }, i, false, { 2386 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2387 lineNumber: 1081, 2388 columnNumber: 21 2389 }, this) 2390 ) 2391 ] }, void 0, true, { 2392 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2393 lineNumber: 1077, 2394 columnNumber: 25 2395 }, this) 2396 ] }, void 0, true, { 2397 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2398 lineNumber: 1068, 2399 columnNumber: 23 2400 }, this) }, void 0, false, { 2401 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2402 lineNumber: 1067, 2403 columnNumber: 15 2404 }, this) 2405 ] }, void 0, true, { 2406 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2407 lineNumber: 999, 2408 columnNumber: 13 2409 }, this), 2410 tab === "quality" && /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", flexDirection: "column", gap: 10 }, children: [
2411 /* @__PURE__ */ jsxDEV(Section, { title: "Clinical QA Scores", subtitle: "Six evidence-based quality dimensions", defaultOpen: true, children: [ 2412 /* @__PURE__ */ jsxDEV("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr", gap: "0 40px" }, children: [ 2413 /* @__PURE__ */ jsxDEV("div", { children: [ 2414 /* @__PURE__ */ jsxDEV(Bar, { label: "Guideline Compliance", value: qm.guideline_compliance_score, sublabel: "Evidence-based treatment alignment", bold: true }, void 0, false, { 2415 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2416 lineNumber: 1098, 2417 columnNumber: 25 2418 }, this), 2419 /* @__PURE__ */ jsxDEV(Bar, { label: "Medication Safety", value: qm.medication_safety_score, sublabel: "Prescribing pattern vs safety band" }, void 0, false, { 2420 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2421 lineNumber: 1099, 2422 columnNumber: 25 2423 }, this),
2424 /* @__PURE__ */ jsxDEV(Bar, { label: "Diagnostic Quality", value: qm.diagnostic_quality_score, sublabel: "Structured note rate as proxy" }, void 0, false, { 2425 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2426 lineNumber: 1100, 2427 columnNumber: 25 2428 }, this) 2429 ] }, void 0, true, { 2430 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2431 lineNumber: 1097, 2432 columnNumber: 23 2433 }, this), 2434 /* @__PURE__ */ jsxDEV("div", { children: [ 2435 /* @__PURE__ */ jsxDEV(Bar, { label: "Investigation Appropriateness", value: qm.investigation_appropriateness_score, sublabel: "Ideal: 0.4â1.0 investigations/consultation" }, void 0, false, { 2436 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2437 lineNumber: 1103, 2438 columnNumber: 25 2439 }, this), 2440 /* @__P
2440URE__ */ jsxDEV(Bar, { label: "Documentation Quality", value: qm.documentation_quality_score, sublabel: "Completeness and reasoning depth" }, void 0, false, { 2441 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2442 lineNumber: 1104, 2443 columnNumber: 25 2444 }, this), 2445 /* @__PURE__ */ jsxDEV(Bar, { label: "Outcome Quality", value: qm.outcome_quality_score, sublabel: "Conditions surfaced per visit" }, void 0, false, { 2446 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2447 lineNumber: 1105, 2448 columnNumber: 25 2449 }, this) 2450 ] }, void 0, true, { 2451 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2452 lineNumber: 1102, 2453 columnNumber: 23 2454 }, this) 2455 ] }, void 0, true, { 2456 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2457 lineNumber: 1096, 2458 columnNumber: 21 2459 }, this),
2460 /* @__PURE__ */ jsxDEV("div", { style: { borderTop: `2px solid #000000`, paddingTop: 14, marginTop: 8 }, children: /* @__PURE__ */ jsxDEV(Bar, { label: "Overall Quality Score", value: qm.overall_quality_score, bold: true }, void 0, false, { 2461 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2462 lineNumber: 1109, 2463 columnNumber: 23 2464 }, this) }, void 0, false, { 2465 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2466 lineNumber: 1108, 2467 columnNumber: 21 2468 }, this) 2469 ] }, void 0, true, { 2470 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2471 lineNumber: 1095, 2472 columnNumber: 19 2473 }, this), 2474 /* @__PURE__ */ jsxDEV(Section, { title: "Safety Assessment Pipeline", subtitle: "Click a stage to expand its detail", defaultOpen: true, children: /* @__PURE__ */ jsxDEV(SafetyPipeline, { sp }, void 0, false, { 2475 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2476 lineNumber: 1114, 2477 columnNumber: 21 2478 }, this) }, void 0, false, { 2479 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2480 lineNumber: 1113, 2481 columnNumber: 19 2482 }, this), 2483 sp.guideline_alignment && /* @__PURE__ */ jsxDEV(Section, { title: "Guideline Alignment Detail", subtitle: "Observed patterns vs evidence-based standards", defaultOpen: true, children: [
2484 /* @__PURE__ */ jsxDEV("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr", gap: 24 }, children: [ 2485 /* @__PURE__ */ jsxDEV("div", { children: [ 2486 /* @__PURE__ */ jsxDEV("div", { style: { 2487 fontSize: 9, 2488 fontWeight: 700, 2489 color: "#000000", 2490 letterSpacing: "0.1em", 2491 textTransform: "uppercase", 2492 marginBottom: 8 2493 }, children: "Compliant Patterns" }, void 0, false, { 2494 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2495 lineNumber: 1121, 2496 columnNumber: 27 2497 }, this), 2498 (sp.guideline_alignment.observed_compliant_patterns || []).map( 2499 (p, i) => /* @__PURE__ */ jsxDEV("div", { style: { 2500 fontSize: 12, 2501 fontWeight: 300, 2502 color: "#000000", 2503 padding: "5px 0", 2504 borderBottom: `1px solid #e0e0e0`, 2505 lineHeight: 1.6 2506 }, children: [ 2507 "· ", 2508 p 2509 ] }, i, true, { 2510 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2511 lineNumber: 1124, 2512 columnNumber: 21 2513 }, this) 2514 ) 2515 ] }, void 0, true, { 2516 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2517 lineNumber: 1120, 2518 columnNumber: 25 2519 }, this),
2520 /* @__PURE__ */ jsxDEV("div", { children: [ 2521 /* @__PURE__ */ jsxDEV("div", { style: { 2522 fontSize: 9, 2523 fontWeight: 700, 2524 color: "#000000", 2525 letterSpacing: "0.1em", 2526 textTransform: "uppercase", 2527 marginBottom: 8 2528 }, children: "Observed Gaps" }, void 0, false, { 2529 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2530 lineNumber: 1129, 2531 columnNumber: 27 2532 }, this), 2533 (sp.guideline_alignment.observed_gaps || []).map( 2534 (g, i) => /* @__PURE__ */ jsxDEV("div", { style: { 2535 fontSize: 12, 2536 fontWeight: 300, 2537 color: "#000000", 2538 padding: "5px 0", 2539 borderBottom: `1px solid #e0e0e0`, 2540 lineHeight: 1.6 2541 }, children: [ 2542 "· ", 2543 g 2544 ] }, i, true, { 2545 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2546 lineNumber: 1132, 2547 columnNumber: 21 2548 }, this) 2549 ) 2550 ] }, void 0, true, { 2551 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2552 lineNumber: 1128, 2553 columnNumber: 25 2554 }, this) 2555 ] }, void 0, true, { 2556 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2557 lineNumber: 1119, 2558 columnNumber: 23 2559 }, this), 2560 (sp.guideline_alignment.references || []).length > 0 && /* @__PURE__ */ jsxDEV("div", { style: { marginTop: 12 }, children: sp.guideline_alignment.references.map((r) => /* @__PURE__ */ jsxDEV(Tag, { children: r }, r, false, { 2561 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2562 lineNumber: 1139, 2563 columnNumber: 73 2564 }, this)) }, void 0, false, { 2565 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2566 lineNumber: 1138, 2567 columnNumber: 17 2568 }, this) 2569 ] }, void 0, true, { 2570 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2571 lineNumber: 1118, 2572 columnNumber: 15 2573 }, this),
2574 /* @__PURE__ */ jsxDEV(Section, { title: "Medication Safety & Diagnostic", subtitle: "Prescribing patterns and diagnosis consistency", defaultOpen: true, children: [ 2575 sp.medication_safety && /* @__PURE__ */ jsxDEV("div", { style: { marginBottom: 20 }, children: [ 2576 /* @__PURE__ */ jsxDEV("div", { style: { 2577 fontSize: 9, 2578 fontWeight: 700, 2579 color: "#000000", 2580 letterSpacing: "0.1em", 2581 textTransform: "uppercase", 2582 marginBottom: 8 2583 }, children: "Safe Prescribing Patterns" }, void 0, false, { 2584 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2585 lineNumber: 1148, 2586 columnNumber: 25 2587 }, this), 2588 (sp.medication_safety.observed_safe_patterns || []).map( 2589 (p, i) => /* @__PURE__ */ jsxDEV("div", { style: { 2590 fontSize: 12, 2591 fontWeight: 300, 2592 color: "#000000", 2593 padding: "5px 0", 2594 borderBottom: `1px solid #e0e0e0` 2595 }, children: [ 2596 "· ", 2597 p 2598 ] }, i, true, { 2599 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2600 lineNumber: 1151, 2601 columnNumber: 19 2602 }, this) 2603 ), 2604 (sp.medication_safety.potential_flags || []).length > 0 && /* @__PURE__ */ jsxDEV(Fragment, { children: [
2605 /* @__PURE__ */ jsxDEV("div", { style: { 2606 fontSize: 9, 2607 fontWeight: 700, 2608 color: "#000000", 2609 letterSpacing: "0.1em", 2610 textTransform: "uppercase", 2611 margin: "14px 0 8px" 2612 }, children: "Potential Flags" }, void 0, false, { 2613 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2614 lineNumber: 1156, 2615 columnNumber: 29 2616 }, this), 2617 sp.medication_safety.potential_flags.map( 2618 (f, i) => /* @__PURE__ */ jsxDEV("div", { style: { 2619 fontSize: 12, 2620 fontWeight: 300, 2621 color: "#000000", 2622 padding: "5px 0", 2623 borderBottom: `1px solid #e0e0e0` 2624 }, children: [ 2625 "â ", 2626 f 2627 ] }, i, true, { 2628 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2629 lineNumber: 1159, 2630 columnNumber: 21 2631 }, this) 2632 ) 2633 ] }, void 0, true, { 2634 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2635 lineNumber: 1155, 2636 columnNumber: 19 2637 }, this) 2638 ] }, void 0, true, { 2639 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2640 lineNumber: 1147, 2641 columnNumber: 17 2642 }, this),
2643 sp.diagnostic_accuracy && /* @__PURE__ */ jsxDEV("div", { children: [ 2644 /* @__PURE__ */ jsxDEV("div", { style: { 2645 fontSize: 9, 2646 fontWeight: 700, 2647 color: "#000000", 2648 letterSpacing: "0.1em", 2649 textTransform: "uppercase", 2650 margin: "0 0 8px" 2651 }, children: "Diagnostic Consistency" }, void 0, false, { 2652 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2653 lineNumber: 1168, 2654 columnNumber: 25 2655 }, this), 2656 (sp.diagnostic_accuracy.consistency_observations || []).map( 2657 (o, i) => /* @__PURE__ */ jsxDEV("div", { style: { 2658 fontSize: 12, 2659 fontWeight: 300, 2660 color: "#000000", 2661 padding: "5px 0", 2662 borderBottom: `1px solid #e0e0e0`, 2663 lineHeight: 1.6 2664 }, children: [ 2665 "· ", 2666 o 2667 ] }, i, true, { 2668 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2669 lineNumber: 1171, 2670 columnNumber: 19 2671 }, this) 2672 ),
2673 /* @__PURE__ */ jsxDEV("div", { style: { marginTop: 10, fontSize: 11, fontWeight: 400, color: "#000000" }, children: [ 2674 "Escalation: ", 2675 /* @__PURE__ */ jsxDEV("b", { children: sp.diagnostic_accuracy.escalation_appropriateness || "â" }, void 0, false, { 2676 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2677 lineNumber: 1175, 2678 columnNumber: 39 2679 }, this) 2680 ] }, void 0, true, { 2681 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2682 lineNumber: 1174, 2683 columnNumber: 25 2684 }, this) 2685 ] }, void 0, true, { 2686 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2687 lineNumber: 1167, 2688 columnNumber: 17 2689 }, this) 2690 ] }, void 0, true, { 2691 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2692 lineNumber: 1145, 2693 columnNumber: 19 2694 }, this) 2695 ] }, void 0, true, { 2696 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2697 lineNumber: 1093, 2698 columnNumber: 13 2699 }, this), 2700 tab === "flow" && /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", flexDirection: "column", gap: 10 }, children: [
2701 /* @__PURE__ */ jsxDEV(Section, { title: "Clinical Decision Flow", subtitle: "Click any stage node to see full detail and navigate connections", defaultOpen: true, children: [ 2702 /* @__PURE__ */ jsxDEV("div", { style: { 2703 fontSize: 12, 2704 fontWeight: 300, 2705 color: "#000000", 2706 marginBottom: 20, 2707 lineHeight: 1.6, 2708 padding: "10px 14px", 2709 background: "#f8f8f8", 2710 borderLeft: "3px solid #000" 2711 }, children: "This flow maps the doctor's full clinical pipeline â from patient encounter to outcome. Each stage shows real metrics from observed activity. Click a node to expand its details and see which stages it connects to. Selecting a node highlights its direct connections." }, void 0, false, { 2712 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2713 lineNumber: 1188, 2714 columnNumber: 21 2715 }, this), 2716 /* @__PURE__ */ jsxDEV(DecisionFlowEnhanced, { sf, bm, qm, sp }, void 0, false, { 2717 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2718 lineNumber: 1194, 2719 columnNumber: 21 2720 }, this) 2721 ] }, void 0, true, { 2722 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2723 lineNumber: 1187, 2724 columnNumber: 19 2725 }, this), 2726 data.observed_behavior_report?.inferences?.length > 0 && /* @__PURE__ */ jsxDEV(Section, { title: "Evidence-Based Inferences", subtitle: "Logical conclusions drawn from behavioral pattern analysis", defaultOpen: true, children: data.observed_behavior_report.inferences.map( 2727 (inf, i) => /* @__PURE__ */ jsxDEV("div", { style: { 2728 display: "flex", 2729 gap: 14, 2730 padding: "12px 0", 2731 borderBottom: `1px solid #e0e0e0`, 2732 alignItems: "flex-start" 2733 }, children: [
2734 /* @__PURE__ */ jsxDEV("span", { style: { 2735 fontSize: 9, 2736 fontWeight: 700, 2737 color: "#000000", 2738 fontFamily: "monospace", 2739 flexShrink: 0, 2740 marginTop: 2 2741 }, children: [ 2742 "INF ", 2743 String(i + 1).padStart(2, "0") 2744 ] }, void 0, true, { 2745 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2746 lineNumber: 1202, 2747 columnNumber: 27 2748 }, this), 2749 /* @__PURE__ */ jsxDEV("span", { style: { fontSize: 12, fontWeight: 300, color: "#000000", lineHeight: 1.7 }, children: inf }, void 0, false, { 2750 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2751 lineNumber: 1204, 2752 columnNumber: 27 2753 }, this) 2754 ] }, i, true, { 2755 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2756 lineNumber: 1200, 2757 columnNumber: 17 2758 }, this) 2759 ) }, void 0, false, { 2760 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2761 lineNumber: 1198, 2762 columnNumber: 15 2763 }, this),
2764 /* @__PURE__ */ jsxDEV("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr", gap: 10 }, children: [ 2765 sf.communication_style && /* @__PURE__ */ jsxDEV(Section, { title: "Communication Style", subtitle: "How this doctor interacts with patients", defaultOpen: true, children: [ 2766 /* @__PURE__ */ jsxDEV("div", { style: { marginBottom: 12 }, children: (sf.communication_style.traits || []).map((t, i) => /* @__PURE__ */ jsxDEV(Tag, { children: t }, i, false, { 2767 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2768 lineNumber: 1214, 2769 columnNumber: 80 2770 }, this)) }, void 0, false, { 2771 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2772 lineNumber: 1213, 2773 columnNumber: 25 2774 }, this), 2775 sf.communication_style.evidence && /* @__PURE__ */ jsxDEV("div", { style: { fontSize: 12, fontWeight: 300, color: "#000000", fontStyle: "italic", lineHeight: 1.7, marginBottom: 12 }, children: sf.communication_style.evidence }, void 0, false, { 2776 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2777 lineNumber: 1217, 2778 columnNumber: 19 2779 }, this),
2780 /* @__PURE__ */ jsxDEV("div", { style: { padding: "10px 12px", background: "#000000" }, children: [ 2781 /* @__PURE__ */ jsxDEV("div", { style: { 2782 fontSize: 9, 2783 fontWeight: 600, 2784 color: "rgba(255,255,255,0.6)", 2785 letterSpacing: "0.08em", 2786 textTransform: "uppercase" 2787 }, children: "Patient-Centered Score" }, void 0, false, { 2788 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2789 lineNumber: 1222, 2790 columnNumber: 27 2791 }, this), 2792 /* @__PURE__ */ jsxDEV("div", { style: { fontSize: 26, fontWeight: 300, fontFamily: "monospace", color: "#ffffff", marginTop: 4 }, children: [ 2793 Math.round(sf.communication_style.patient_centered_score || 0), 2794 /* @__PURE__ */ jsxDEV("span", { style: { fontSize: 12, fontWeight: 300, color: "rgba(255,255,255,0.5)" }, children: "/100" }, void 0, false, { 2795 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2796 lineNumber: 1226, 2797 columnNumber: 29 2798 }, this) 2799 ] }, void 0, true, { 2800 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2801 lineNumber: 1224, 2802 columnNumber: 27 2803 }, this) 2804 ] }, void 0, true, { 2805 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2806 lineNumber: 1221, 2807 columnNumber: 25 2808 }, this) 2809 ] }, void 0, true, { 2810 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2811 lineNumber: 1212, 2812 columnNumber: 17 2813 }, this), 2814 sf.safety_behaviors && /* @__PURE__ */ jsxDEV(Section, { title: "Safety Behaviors", subtitle: "Observed safety and verification patterns", defaultOpen: true, children: [
2815 /* @__PURE__ */ jsxDEV("div", { style: { marginBottom: 12 }, children: (sf.safety_behaviors.traits || []).map((t, i) => /* @__PURE__ */ jsxDEV(Tag, { children: t }, i, false, { 2816 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2817 lineNumber: 1234, 2818 columnNumber: 77 2819 }, this)) }, void 0, false, { 2820 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2821 lineNumber: 1233, 2822 columnNumber: 25 2823 }, this), 2824 /* @__PURE__ */ jsxDEV("div", { style: { 2825 fontSize: 9, 2826 fontWeight: 600, 2827 color: "#000000", 2828 textTransform: "uppercase", 2829 letterSpacing: "0.08em" 2830 }, children: "Double-Check Frequency" }, void 0, false, { 2831 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2832 lineNumber: 1236, 2833 columnNumber: 25 2834 }, this),
2835 /* @__PURE__ */ jsxDEV("div", { style: { 2836 fontSize: 20, 2837 fontWeight: 300, 2838 color: "#000000", 2839 marginTop: 6, 2840 textTransform: "capitalize", 2841 marginBottom: 12 2842 }, children: sf.safety_behaviors.double_check_frequency || "â" }, void 0, false, { 2843 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2844 lineNumber: 1238, 2845 columnNumber: 25 2846 }, this), 2847 sf.safety_behaviors.evidence && /* @__PURE__ */ jsxDEV("div", { style: { 2848 fontSize: 11, 2849 fontWeight: 300, 2850 color: "#000000", 2851 lineHeight: 1.7, 2852 fontStyle: "italic" 2853 }, children: sf.safety_behaviors.evidence }, void 0, false, { 2854 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2855 lineNumber: 1241, 2856 columnNumber: 19 2857 }, this) 2858 ] }, void 0, true, { 2859 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2860 lineNumber: 1232, 2861 columnNumber: 17 2862 }, this) 2863 ] }, void 0, true, { 2864 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2865 lineNumber: 1210, 2866 columnNumber: 19 2867 }, this) 2868 ] }, void 0, true, { 2869 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2870 lineNumber: 1185, 2871 columnNumber: 13 2872 }, this), 2873 tab === "directives" && /* @__PURE__ */ jsxDEV("div", { style: { display: "flex", flexDirection: "column", gap: 10 }, children: [
2874 /* @__PURE__ */ jsxDEV(Section, { title: "AI Behavior Directives", subtitle: "Injected before SKILL.md â shapes HOW the AI reasons, not what it knows", defaultOpen: true, children: [ 2875 /* @__PURE__ */ jsxDEV("div", { style: { 2876 fontSize: 12, 2877 fontWeight: 300, 2878 color: "#000000", 2879 lineHeight: 1.7, 2880 marginBottom: 20, 2881 padding: "10px 14px", 2882 background: "#f8f8f8", 2883 borderLeft: "3px solid #000" 2884 }, children: "These directives are injected before SKILL.md and patient context in the doctor agent system prompt. They encode the doctor's clinical style into the AI so it reasons the way this doctor would." }, void 0, false, { 2885 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2886 lineNumber: 1255, 2887 columnNumber: 21 2888 }, this), 2889 data.ai_behavior_directives && /* @__PURE__ */ jsxDEV("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr", gap: 24 }, children: [
2890 /* @__PURE__ */ jsxDEV("div", { children: [ 2891 /* @__PURE__ */ jsxDEV(DirBlock, { label: "Diagnostic", items: data.ai_behavior_directives.diagnostic }, void 0, false, { 2892 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2893 lineNumber: 1263, 2894 columnNumber: 27 2895 }, this), 2896 /* @__PURE__ */ jsxDEV(DirBlock, { label: "Treatment", items: data.ai_behavior_directives.treatment }, void 0, false, { 2897 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2898 lineNumber: 1264, 2899 columnNumber: 27 2900 }, this) 2901 ] }, void 0, true, { 2902 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2903 lineNumber: 1262, 2904 columnNumber: 25 2905 }, this), 2906 /* @__PURE__ */ jsxDEV("div", { children: [ 2907 /* @__PURE__ */ jsxDEV(DirBlock, { label: "Communication", items: data.ai_behavior_directives.communication }, void 0, false, { 2908 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2909 lineNumber: 1267, 2910 columnNumber: 27 2911 }, this),
2912 /* @__PURE__ */ jsxDEV(DirBlock, { label: "Documentation", items: data.ai_behavior_directives.documentation }, void 0, false, { 2913 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2914 lineNumber: 1268, 2915 columnNumber: 27 2916 }, this) 2917 ] }, void 0, true, { 2918 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2919 lineNumber: 1266, 2920 columnNumber: 25 2921 }, this) 2922 ] }, void 0, true, { 2923 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2924 lineNumber: 1261, 2925 columnNumber: 17 2926 }, this) 2927 ] }, void 0, true, { 2928 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2929 lineNumber: 1254, 2930 columnNumber: 19 2931 }, this), 2932 data.safety_rules && /* @__PURE__ */ jsxDEV(Section, { title: "Runtime Safety Rules", subtitle: "Hard constraints enforced at every AI inference step", defaultOpen: true, children: /* @__PURE__ */ jsxDEV("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr", gap: 20 }, children: [
2933 /* @__PURE__ */ jsxDEV("div", { children: [ 2934 /* @__PURE__ */ jsxDEV("div", { style: { 2935 fontSize: 9, 2936 fontWeight: 700, 2937 color: "#000000", 2938 letterSpacing: "0.1em", 2939 textTransform: "uppercase", 2940 marginBottom: 10 2941 }, children: "Never" }, void 0, false, { 2942 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2943 lineNumber: 1278, 2944 columnNumber: 27 2945 }, this), 2946 (data.safety_rules.never || []).map( 2947 (r, i) => /* @__PURE__ */ jsxDEV("div", { style: { 2948 fontSize: 11, 2949 fontWeight: 300, 2950 color: "#000000", 2951 padding: "6px 0", 2952 borderBottom: `1px solid #e0e0e0`, 2953 lineHeight: 1.5 2954 }, children: r }, i, false, { 2955 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2956 lineNumber: 1281, 2957 columnNumber: 21 2958 }, this) 2959 ) 2960 ] }, void 0, true, { 2961 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2962 lineNumber: 1277, 2963 columnNumber: 25 2964 }, this),
2965 /* @__PURE__ */ jsxDEV("div", { children: [ 2966 /* @__PURE__ */ jsxDEV("div", { style: { 2967 fontSize: 9, 2968 fontWeight: 700, 2969 color: "#000000", 2970 letterSpacing: "0.1em", 2971 textTransform: "uppercase", 2972 marginBottom: 10 2973 }, children: "Always" }, void 0, false, { 2974 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2975 lineNumber: 1286, 2976 columnNumber: 27 2977 }, this), 2978 (data.safety_rules.always || []).map( 2979 (r, i) => /* @__PURE__ */ jsxDEV("div", { style: { 2980 fontSize: 11, 2981 fontWeight: 300, 2982 color: "#000000", 2983 padding: "6px 0", 2984 borderBottom: `1px solid #e0e0e0`, 2985 lineHeight: 1.5 2986 }, children: r }, i, false, { 2987 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2988 lineNumber: 1289, 2989 columnNumber: 21 2990 }, this) 2991 ) 2992 ] }, void 0, true, { 2993 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2994 lineNumber: 1285, 2995 columnNumber: 25 2996 }, this) 2997 ] }, void 0, true, { 2998 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 2999 lineNumber: 1276, 3000 columnNumber: 23 3001 }, this) }, void 0, false, { 3002 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 3003 lineNumber: 1275, 3004 columnNumber: 15 3005 }, this),
3006 sp.safety_md && /* @__PURE__ */ jsxDEV(Section, { title: "SAFETY.md Preview", subtitle: "Runtime safety profile injected alongside SOUL.md", defaultOpen: true, children: /* @__PURE__ */ jsxDEV("div", { style: { maxHeight: 400, overflow: "auto", border: `1px solid #000000` }, children: /* @__PURE__ */ jsxDEV("pre", { style: { 3007 whiteSpace: "pre-wrap", 3008 fontSize: 11, 3009 fontWeight: 300, 3010 color: "#000000", 3011 lineHeight: 1.7, 3012 padding: 16, 3013 margin: 0, 3014 fontFamily: "inherit" 3015 }, children: sp.safety_md }, void 0, false, { 3016 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 3017 lineNumber: 1300, 3018 columnNumber: 25 3019 }, this) }, void 0, false, { 3020 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 3021 lineNumber: 1299, 3022 columnNumber: 23 3023 }, this) }, void 0, false, { 3024 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 3025 lineNumber: 1298, 3026 columnNumber: 15 3027 }, this) 3028 ] }, void 0, true, { 3029 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 3030 lineNumber: 1252, 3031 columnNumber: 13 3032 }, this), 3033 tab === "markdown" && /* @__PURE__ */ jsxDEV("div", { style: { background: "#ffffff", border: `1px solid #000000` }, children: [
3034 /* @__PURE__ */ jsxDEV("div", { style: { 3035 display: "flex", 3036 justifyContent: "space-between", 3037 alignItems: "center", 3038 padding: "16px 24px", 3039 borderBottom: `1px solid #000000` 3040 }, children: [ 3041 /* @__PURE__ */ jsxDEV("div", { children: [ 3042 /* @__PURE__ */ jsxDEV("div", { style: { fontSize: 12, fontWeight: 600, color: "#000000" }, children: "SOUL.md â Full Doctor Profile" }, void 0, false, { 3043 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 3044 lineNumber: 1316, 3045 columnNumber: 23 3046 }, this), 3047 /* @__PURE__ */ jsxDEV("div", { style: { fontSize: 11, fontWeight: 300, color: "#000000", marginTop: 3 }, children: "Inject this before SKILL.md and patient context in the agent system prompt" }, void 0, false, { 3048 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 3049 lineNumber: 1317, 3050 columnNumber: 23 3051 }, this) 3052 ] }, void 0, true, { 3053 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 3054 lineNumber: 1315, 3055 columnNumber: 21 3056 }, this),
3057 /* @__PURE__ */ jsxDEV( 3058 "button", 3059 { 3060 onClick: () => { 3061 navigator.clipboard?.writeText(data.soul_markdown || ""); 3062 setCopied(true); 3063 setTimeout(() => setCopied(false), 2e3); 3064 }, 3065 style: { 3066 padding: "9px 20px", 3067 background: copied ? "#000000" : "#ffffff", 3068 color: copied ? "#ffffff" : "#000000", 3069 border: `1px solid #000000`, 3070 fontSize: 10, 3071 fontWeight: 600, 3072 letterSpacing: "0.1em", 3073 textTransform: "uppercase", 3074 transition: "all 0.2s" 3075 }, 3076 children: copied ? "Copied â" : "Copy to Clipboard" 3077 }, 3078 void 0, 3079 false, 3080 { 3081 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 3082 lineNumber: 1321, 3083 columnNumber: 21 3084 }, 3085 this 3086 ) 3087 ] }, void 0, true, { 3088 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 3089 lineNumber: 1313, 3090 columnNumber: 19 3091 }, this),
3092 /* @__PURE__ */ jsxDEV("pre", { style: { 3093 whiteSpace: "pre-wrap", 3094 fontFamily: "inherit", 3095 fontSize: 12, 3096 fontWeight: 300, 3097 color: "#000000", 3098 lineHeight: 1.8, 3099 padding: 28, 3100 background: "#ffffff", 3101 margin: 0, 3102 maxHeight: "70vh", 3103 overflowY: "auto" 3104 }, children: data.soul_markdown || "No content." }, void 0, false, { 3105 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 3106 lineNumber: 1330, 3107 columnNumber: 19 3108 }, this) 3109 ] }, void 0, true, { 3110 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 3111 lineNumber: 1312, 3112 columnNumber: 13 3113 }, this) 3114 ] }, void 0, true, { 3115 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 3116 lineNumber: 897, 3117 columnNumber: 13 3118 }, this) 3119 ] }, void 0, true, { 3120 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 3121 lineNumber: 879, 3122 columnNumber: 9 3123 }, this) 3124 ] }, void 0, true, { 3125 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 3126 lineNumber: 859, 3127 columnNumber: 7 3128 }, this) 3129 ] }, void 0, true, { 3130 fileName: "/app/src/components/DoctorSoulDashboard.jsx", 3131 lineNumber: 857, 3132 columnNumber: 5 3133 }, this); 3134} 3135_s5(DoctorSoulDashboard, "YmQYdNDjfyWEFXZuEPKbUAjAZyk="); 3136_c13 = DoctorSoulDashboard; 3137var _c, _c2, _c3, _c4, _c5, _c6, _c7, _c8, _c9, _c0, _c1, _c10, _c11, _c12, _c13; 3138$RefreshReg$(_c, "Spinner"); 3139$RefreshReg$(_c2, "Tag"); 3140$RefreshReg$(_c3, "Pill"); 3141$RefreshReg$(_c4, "Ring"); 3142$RefreshReg$(_c5, "Bar"); 3143$RefreshReg$(_c6, "Radar"); 3144$RefreshReg$(_c7, "Gauge"); 3145$RefreshReg$(_c8, "DecisionFlowEnhanced"); 3146$RefreshReg$(_c9, "BehaviorHeatmap"); 3147$RefreshReg$(_c0, "SafetyPipeline"); 3148$RefreshReg$(_c1, "Section"); 3149$RefreshReg$(_c10, "FRow"); 3150$RefreshReg$(_c11, "DirBlock"); 3151$RefreshReg$(_c12, "TopBar"); 3152$RefreshReg$(_c13, "DoctorSoulDashboard"); 3153import * as RefreshRuntime from "/@react-refresh"; 3154const inWebWorker = typeof WorkerGlobalScope !== "undefined" && self instanceof WorkerGlobalScope; 3155if (import.meta.hot && !inWebWorker) { 3156 if (!window.$RefreshReg$) { 3157 throw new Error( 3158 "@vitejs/plugin-react can't detect preamble. Something is wrong." 3159 ); 3160 } 3161 RefreshRuntime.__hmr_import(import.meta.url).then((currentExports) => { 3162 RefreshRuntime.registerExportsForReactRefresh("/app/src/components/DoctorSoulDashboard.jsx", currentExports); 3163 import.meta.hot.accept((nextExports) => { 3164 if (!nextExports) return; 3165 const invalidateMessage = RefreshRuntime.validateRefreshBoundaryAndEnqueueUpdate("/app/src/components/DoctorSoulDashboard.jsx", currentExports, nextExports); 3166 if (invalidateMessage) import.meta.hot.invalidate(invalidateMessage); 3167 }); 3168 }); 3169} 3170function $RefreshReg$(type, id) { 3171 return RefreshRuntime.register(type, "/app/src/components/DoctorSoulDashboard.jsx " + id); 3172} 3173function $RefreshSig$() { 3174 return RefreshRuntime.createSignatureFunctionForTransform(); 3175} 3176 3177//# sourceMappingURL=data:application/json;base64,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9BQU9rUyxTQUFTLFlBQVk7QUFBQSxvQkFDNUI3UyxRQUFRO0FBQUEsb0JBQXFCWSxVQUFVO0FBQUEsb0JBQUlDLFlBQVk7QUFBQSxvQkFDdkRDLGVBQWU7QUFBQSxvQkFBU0MsZUFBZTtBQUFBLG9CQUFhNEIsWUFBWTtBQUFBLGtCQUFXO0FBQUEsa0JBQzVFa1EsbUJBQVMsYUFBYTtBQUFBO0FBQUEsZ0JBTnpCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxjQU9BO0FBQUEsaUJBZkY7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFnQkE7QUFBQSxZQUNBLHVCQUFDLFNBQUksT0FBTztBQUFBLGNBQUUwQixZQUFZO0FBQUEsY0FBWTdTLFlBQVk7QUFBQSxjQUFXZCxVQUFVO0FBQUEsY0FDckVDLFlBQVk7QUFBQSxjQUFLRixPQUFPO0FBQUEsY0FBV2dCLFlBQVk7QUFBQSxjQUFLbEIsU0FBUztBQUFBLGNBQzdEQyxZQUFZO0FBQUEsY0FBV29PLFFBQVE7QUFBQSxjQUFHNEgsV0FBVztBQUFBLGNBQVFNLFdBQVc7QUFBQSxZQUFPLEdBQ3RFMVQsZUFBS3dULGlCQUFpQixpQkFIekI7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFJQTtBQUFBLGVBdEJGO0FBQUE7QUFBQTtBQUFBO0FBQUEsaUJBdUJBO0FBQUEsYUF0Yko7QUFBQTtBQUFBO0FBQUE7QUFBQSxlQXliQTtBQUFBLFdBM2NGO0FBQUE7QUFBQTtBQUFBO0FBQUEsYUE0Y0E7QUFBQSxTQWhlSjtBQUFBO0FBQUE7QUFBQTtBQUFBLFdBa2VBO0FBQUEsT0FwZUY7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQXFlQTtBQUVKO0FBQUM1RSxJQTFqQnVCRCxxQkFBbUI7QUFBQWdGLE9BQW5CaEY7QUFBbUIsSUFBQTdSLElBQUFjLEtBQUFXLEtBQUFpQixLQUFBTSxLQUFBNEIsS0FBQVEsS0FBQTZILEtBQUFRLEtBQUFzQixLQUFBWSxLQUFBRyxNQUFBSSxNQUFBeUIsTUF
3177BQWtGO0FBQUFDLGFBQUE5VyxJQUFBO0FBQUE4VyxhQUFBaFcsS0FBQTtBQUFBZ1csYUFBQXJWLEtBQUE7QUFBQXFWLGFBQUFwVSxLQUFBO0FBQUFvVSxhQUFBOVQsS0FBQTtBQUFBOFQsYUFBQWxTLEtBQUE7QUFBQWtTLGFBQUExUixLQUFBO0FBQUEwUixhQUFBN0osS0FBQTtBQUFBNkosYUFBQXJKLEtBQUE7QUFBQXFKLGFBQUEvSCxLQUFBO0FBQUErSCxhQUFBbkgsS0FBQTtBQUFBbUgsYUFBQWhILE1BQUE7QUFBQWdILGFBQUE1RyxNQUFBO0FBQUE0RyxhQUFBbkYsTUFBQTtBQUFBbUYsYUFBQUQsTUFBQSIsIm5hbWVzIjpbInVzZVN0YXRlIiwidXNlRWZmZWN0IiwidXNlQ2FsbGJhY2siLCJ1c2VNZW1vIiwiQkFTRV9VUkwiLCJnZXREb2N0b3JJZCIsInAiLCJVUkxTZWFyY2hQYXJhbXMiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsInNlYXJjaCIsImdldCIsInBhdGhuYW1lIiwibWF0Y2giLCJHIiwiU3Bpbm5lciIsInNpemUiLCJ3aWR0aCIsImhlaWdodCIsImJvcmRlciIsImJvcmRlclRvcENvbG9yIiwiYm9yZGVyUmFkaXVzIiwiYW5pbWF0aW9uIiwiX2MiLCJUYWciLCJjaGlsZHJlbiIsImZpbGxlZCIsImRpc3BsYXkiLCJwYWRkaW5nIiwiYmFja2dyb3VuZCIsImNvbG9yIiwiZm9udFNpemUiLCJmb250V2VpZ2h0IiwibGV0dGVyU3BhY2luZyIsInRleHRUcmFuc2Zvcm0iLCJtYXJnaW5SaWdodCIsIm1hcmdpbkJvdHRvbSIsIl9jMiIsIlBpbGwiLCJ2YWwiLCJsYWJlbCIsInNjb3JlIiwiTWF0aCIsInJvdW5kIiwidGV4dEFsaWduIiwiZm9udEZhbWlseSIsImxpbmVIZWlnaHQiLCJtYXJnaW5Ub3AiLCJfYzMiLCJSaW5nIiwidmFsdWUiLCJzdHJva2VXIiwiciIsImNpcmMiLCJQSSIsInBjdCIsIm1pbiIsIm1heCIsImRhc2giLCJmbGV4RGlyZWN0aW9uIiwiYWxpZ25JdGVtcyIsImdhcCIsInRyYW5zaXRpb24iLCJmaWxsIiwibWF4V2lkdGgiLCJfYzQiLCJCYXIiLCJzdWJsYWJlbCIsImJvbGQiLCJqdXN0aWZ5Q29udGVudCIsIm92ZXJmbG93IiwiX2M1IiwiUmFkYXIiLCJkYXRhIiwia2V5cyIsIk9iamVjdCIsIm4iLCJsZW5ndGgiLCJjeCIsImN5IiwiYW5nbGUiLCJpIiwicHQiLCJzY2FsZSIsIngiLCJjb3MiLCJ5Iiwic2luIiwiZ3JpZExpbmVzIiwiZGF0YVBvaW50cyIsIm1hcCIsImsiLCJkYXRhUG9seSIsImpvaW4iLCJsdmwiLCJfIiwib3V0ZXIiLCJscCIsInRvVXBwZXJDYXNlIiwiX2M2IiwiR2F1Z2UiLCJ2IiwiYSIsIngxIiwieTEiLCJ4MiIsInkyIiwiX2M3IiwiRGVjaXNpb25GbG93RW5oYW5jZWQiLCJzZiIsImJtIiwicW0iLCJzcCIsIl9zIiwic2VsZWN0ZWROb2RlIiwic2V0U2VsZWN0ZWROb2RlIiwiaG92Tm9kZSIsInNldEhvdk5vZGUiLCJyaXNrIiwicmlza19wcm9maWxlIiwicmVwbGFjZSIsInJpc2tDb25mIiwiY29uZmlkZW5jZSIsInN0eWxlX3YiLCJkZWNpc2lvbl9zdHlsZSIsInByaW1hcnkiLCJzdHlsZUNvbmYiLCJpbnYiLCJkaWFnbm9zdGljX3JpZ29yIiwiaW52ZXN0aWdhdGlvbl9pbnRlbnNpdHkiLCJpbnZSYXRlIiwiaW52ZXN0aWdhdGlvbl9vcmRlcl9yYXRlIiwibm90ZVJhdGUiLCJjbGluaWNhbF9ub3RlX3JhdGUiLCJ0cmVhdCIsInRyZWF0bWVudF9waGlsb3NvcGh5IiwiYXBwcm9hY2giLCJ0cmVhdENvbmYiLCJkb2NMZXZlbCIsImRvY3VtZW50YXRpb25fcXVhbGl0eSIsImRldGFpbF9sZXZlbCIsInBhdFNjb3JlIiwiY29tbXVuaWNhdGlvbl9zdHlsZSIsInBhdGllbnRfY2VudGVyZWRfc2NvcmUiLCJzYWZldHlDb25mIiwic2FmZXR5X2JlaGF2aW9ycyIsImRvdWJsZV9jaGVja19mcmVxdWVuY3kiLCJjb25mRG90IiwiY29uZiIsImNvbG9ycyIsImhpZ2giLCJtZWRpdW0iLCJsb3ciLCJ2ZXJ0aWNhbEFsaWduIiwibm9kZXMiLCJpZCIsInRpdGxlIiwiY2F0ZWdvcnkiLCJtZXRyaWNzIiwiY29uc3VsdGF0aW9uX2NvdW50IiwidW5pcXVlX3BhdGllbnRzX3NlZW4iLCJhdmdfY29uZGl0aW9uc19zdXJmYWNlZF9wZXJfdmlzaXQiLCJ0b0ZpeGVkIiwiYWdlbnRpY19lbmdhZ2VtZW50X2NvdW50IiwiZGVzY3JpcHRpb24iLCJ0YWdzIiwiZXZpZGVuY2UiLCJlc2NhbGF0aW9uX3BhdHRlcm4iLCJkaWFnbm9zdGljX3F1YWxpdHlfc2NvcmUiLCJpbnZlc3RpZ2F0aW9uX2FwcHJvcHJpYXRlbmVzc19zY29yZSIsInNlY29uZGFyeSIsImd1aWRlbGluZV9jb21wbGlhbmNlX3Njb3JlIiwiaW50ZXJ2ZW50aW9uX3RocmVzaG9sZCIsIm1lZGljYXRpb25fcHJlc2NyaXB0aW9uX3JhdGUiLCJtZWRpY2F0aW9uX3NhZmV0eV9zY29yZSIsInN0cnVjdHVyZV9wcmVmZXJlbmNlIiwiZG9jdW1lbnRhdGlvbl9xdWFsaXR5X3Njb3JlIiwicmlza19mbGFncyIsIm92ZXJhbGxfcXVhbGl0eV9zY29yZSIsInRyYWl0cyIsInQiLCJvdXRjb21lX3F1YWxpdHlfc2NvcmUiLCJlZGdlcyIsImZyb20iLCJ0byIsImNhdENvbG9ycyIsImVudHJ5IiwiYXNzZXNzbWVudCIsImRpYWdub3N0aWMiLCJkZWNpc2lvbiIsInRyZWF0bWVudCIsImRvY3VtZW50YXRpb24iLCJzYWZldHkiLCJvdXRjb21lIiwic2VsZWN0ZWQiLCJmaW5kIiwibGF5b3V0IiwiY29ubmVjdGVkSWRzIiwiU2V0IiwiZmlsdGVyIiwiZSIsInJvdyIsInJpIiwibm9kZUlkIiwibm9kZSIsImlzU2VsZWN0ZWQiLCJpc0hvdiIsImlzRGltbWVkIiwiaGFzIiwib3V0RWRnZXMiLCJmbGV4IiwidW5kZWZpbmVkIiwiY3Vyc29yIiwib3BhY2l0eSIsInBvc2l0aW9uIiwiZ3JpZFRlbXBsYXRlQ29sdW1ucyIsInNsaWNlIiwibSIsImJvcmRlckJvdHRvbSIsInBhZGRpbmdCb3R0b20iLCJTdHJpbmciLCJmbGV4V3JhcCIsImJvdHRvbSIsImxlZnQiLCJ0cmFuc2Zvcm0iLCJ6SW5kZXgiLCJvdGhlcklkIiwiZGlyZWN0aW9uIiwib3RoZXJOb2RlIiwiYm9yZGVyVG9wIiwicGFkZGluZ1RvcCIsInNwbGl0IiwiX2M4IiwiQmVoYXZpb3JIZWF0bWFwIiwiY2VsbHMiLCJ1bml0Iiwid2VpZ2h0ZWRfc3VmZmljaWVuY3lfc2NvcmUiLCJjIiwicmF3IiwiaW5jbHVkZXMiLCJfYzkiLCJTYWZldHlQaXBlbGluZSIsIl9zMiIsImFjdGl2ZSIsInNldEFjdGl2ZSIsInN0YWdlcyIsInN0YXR1cyIsImd1aWRlbGluZV9hbGlnbm1lbnQiLCJkZXRhaWwiLCJvYnNlcnZlZF9jb21wbGlhbnRfcGF0dGVybnMiLCJtZWRpY2F0aW9uX3NhZmV0eSIsIm9ic2VydmVkX3NhZmVfcGF0dGVybnMiLCJkaWFnbm9zdGljX2FjY3VyYWN5IiwiY29uc2lzdGVuY3lfb2JzZXJ2YXRpb25zIiwib3V0Y29tZV9xdWFsaXR5IiwicG9zaXRpdmVfc2lnbmFscyIsInMiLCJtYXJnaW4iLCJib3JkZXJMZWZ0IiwiZiIsImZsZXhTaHJpbmsiLCJzZXZlcml0eSIsIl9jMCIsIlNlY3Rpb24iLCJzdWJ0aXRsZSIsImJhZGdlIiwiZGVmYXVsdE9wZW4iLCJfczMiLCJvcGVuIiwic2V0T3BlbiIsImhvdmVyZWQiLCJzZXRIb3ZlcmVkIiwibyIsInVzZXJTZWxlY3QiLCJfYzEiLCJGUm93IiwiX3M0IiwiX2MxMCIsIkRpckJsb2NrIiwiaXRlbXMiLCJkIiwiX2MxMSIsIlRvcEJhciIsImRvY3RvcklkIiwiZ2VuZXJhdGluZyIsIm9uR2VuZXJhdGUiLCJzcyIsInNvdWxfc2NvcmVzIiwiaW50ZWwiLCJpbnRlbGxpZ2VuY2Vfc2NvcmUiLCJiZWhhdmlvcl9tZXRyaWNzIiwiZG9jdG9yX25hbWUiLCJzcGVjaWFsaXphdGlvbiIsIm92ZXJhbGxfaW50ZWxsaWdlbmNlX3Njb3JlIiwib3ZlcmFsbF9zb3VsX3Njb3JlIiwiY3VycmVudFRhcmdldCIsInN0eWxlIiwiYm9yZGVyQ29sb3IiLCJkYXRhX3N1
3177ZmZpY2llbmN5IiwiYmVoYXZpb3JhbF9yZWNvcmRfY291bnQiLCJnZW5lcmF0ZWRfYXQiLCJEYXRlIiwidG9Mb2NhbGVEYXRlU3RyaW5nIiwiZGF5IiwibW9udGgiLCJ5ZWFyIiwiX2MxMiIsIlRBQlMiLCJEb2N0b3JTb3VsRGFzaGJvYXJkIiwiX3M1Iiwic2V0RGF0YSIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwic2V0R2VuIiwiZXJyb3IiLCJzZXRFcnJvciIsImdlbk1zZyIsInNldEdlbk1zZyIsInRhYiIsInNldFRhYiIsImNvcGllZCIsInNldENvcGllZCIsImZldGNoUHJvZmlsZSIsInJlcyIsImZldGNoIiwianNvbiIsIm9rIiwibWVzc2FnZSIsImdlbmVyYXRlU291bCIsIm1ldGhvZCIsInRpcCIsIkVycm9yIiwic291bF9mZWF0dXJlcyIsInF1YWxpdHlfbWV0cmljcyIsInNhZmV0eV9wcm9maWxlIiwicmFkYXJEYXRhIiwiRXZpZGVuY2UiLCJldmlkZW5jZV9zY29yZSIsIlNhZmV0eSIsInNhZmV0eV9zY29yZSIsIlBhdGllbnQiLCJEb2NzIiwiZG9jdW1lbnRhdGlvbl9zY29yZSIsIkd1aWRlbGluZSIsIm1pbkhlaWdodCIsIm92ZXJmbG93WCIsIndoaXRlU3BhY2UiLCJsIiwic291bF9zY29yZSIsInciLCJndWlkZWxpbmVfc2NvcmUiLCJtZWRpY2F0aW9uX3Njb3JlIiwiZGlhZ25vc3RpY19zY29yZSIsIm91dGNvbWVfc2NvcmUiLCJpdCIsIm9ic2VydmVkX2JlaGF2aW9yX3JlcG9ydCIsImtleV9vYnNlcnZhdGlvbnMiLCJwYWRTdGFydCIsImNvcmVfdmFsdWVzIiwidmFsdWVzIiwiZm9udFN0eWxlIiwiY2xpbmljYWxfcHJpbmNpcGxlcyIsInByaW5jaXBsZXMiLCJyZWRfbGluZXMiLCJsaW5lcyIsInByaW9yaXR5X29yZGVyIiwib3JkZXJlZF9wcmlvcml0aWVzIiwiY29uZmxpY3RfcmVzb2x1dGlvbl9ydWxlIiwic2FmZXR5X3J1bGVzIiwibmV2ZXIiLCJhbHdheXMiLCJvYnNlcnZlZF9nYXBzIiwiZyIsInJlZmVyZW5jZXMiLCJwb3RlbnRpYWxfZmxhZ3MiLCJlc2NhbGF0aW9uX2FwcHJvcHJpYXRlbmVzcyIsImluZmVyZW5jZXMiLCJpbmYiLCJhaV9iZWhhdmlvcl9kaXJlY3RpdmVzIiwiY29tbXVuaWNhdGlvbiIsInNhZmV0eV9tZCIsIm1heEhlaWdodCIsIm5hdmlnYXRvciIsImNsaXBib2FyZCIsIndyaXRlVGV4dCIsInNvdWxfbWFya2Rvd24iLCJzZXRUaW1lb3V0Iiwib3ZlcmZsb3dZIiwiX2MxMyIsIiRSZWZyZXNoUmVnJCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJEb2N0b3JTb3VsRGFzaGJvYXJkLmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERvY3RvclNvdWxEYXNoYm9hcmQuanN4IOKAlCBDb21wbGV0ZSBSZWRlc2lnbiB2MlxuICogQWxsIHNlY3Rpb25zIGV4cGFuZGFibGUgYnkgZGVmYXVsdCDCtyBFbmhhbmNlZCBEZWNpc2lvbiBGbG93IMK3IEZ1bGwgZGV0YWlsc1xuICovXG5cbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZUNhbGxiYWNrLCB1c2VNZW1vIH0gZnJvbSBcInJlYW
3177N0XCI7XG5cbmNvbnN0IEJBU0VfVVJMID0gXCJodHRwczovL2RvY3RvcmFzc2lzdC5haS8vYXBpL2htcy91c2Vycy9haS1sZWdhY3kvc291bFwiO1xuXG5mdW5jdGlvbiBnZXREb2N0b3JJZCgpIHtcbiAgY29uc3QgcCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gIHJldHVybiBwLmdldChcImRvY3Rvcl9pZFwiKSB8fCBwLmdldChcImRvY3RvcklkXCIpIHx8XG4gICAgKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5tYXRjaCgvRE9DLVthLWYwLTktXSsvaSkgfHwgW10pWzBdIHx8IG51bGw7XG59XG5cbmNvbnN0IEcgPSBgXG4gIEBpbXBvcnQgdXJsKCdodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PU9wZW4rU2FuczppdGFsLHdnaHRAMCwzMDA7MCw0MDA7MCw2MDA7MCw3MDA7MSwzMDAmZGlzcGxheT1zd2FwJyk7XG4gICosICo6OmJlZm9yZSwgKjo6YWZ0ZXIgeyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IH1cbiAgYm9keSB7IGZvbnQtZmFtaWx5OiAnT3BlbiBTYW5zJywgc2Fucy1zZXJpZjsgYmFja2dyb3VuZDogI2ZmZmZmZjsgfVxuICA6Oi13ZWJraXQtc2Nyb2xsYmFyIHsgd2lkdGg6IDRweDsgaGVpZ2h0OiA0cHg7IH1cbiAgOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7IGJhY2tncm91bmQ6ICNmZmZmZmY7IH1cbiAgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7IGJhY2tncm91bmQ6ICMwMDAwMDA7IGJvcmRlci1yYWRpdXM6IDJweDsgfVxuICBAa2V5ZnJhbWVzIHNwaW4gIHsgdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOyB9IH1cbiAgQGtleWZyYW1lcyBmYWRlSW4geyBmcm9tIHsgb3BhY2l0eTowOyB0cmFuc2Zvcm06dHJhbnNsYXRlWSg4cHgpOyB9IHRvIHsgb3BhY2l0eToxOyB0cmFuc2Zvcm06bm9uZTsgfSB9XG4gIEBrZXlmcmFtZXMgZmlsbEJhciB7IGZyb20geyB3aWR0aDogMDsgfSB9XG4gIEBrZXlmcmFtZXMgZHJhd1JpbmcgeyBmcm9tIHsgc3Ryb2tlLWRhc2hhcnJheTogMCA5OTk7IH0gfVxuICBAa2V5ZnJhbWVzIHNsaWRlRG93biB7IGZyb20geyBvcGFjaXR5OjA7IG1heC1oZWlnaHQ6MDsgfSB0byB7IG9wYWNpdHk6MTsgbWF4LWhlaWdodDoyMDAwcHg7IH0gfVxuICBidXR0b24geyBjdXJzb3I6IHBvaW50ZXI7IGZvbnQtZmFtaWx5OiBpbmhlcml0OyB9XG4gIGlucHV0ICB7IGZvbnQtZmFtaWx5OiBpbmhlcml0OyB9XG5gO1xuXG5mdW5jdGlvbiBTcGlubmVyKHsgc2l6ZSA9IDMyIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IHN0eWxlPXt7IHdpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemUsIGJvcmRlcjogYDJweCBzb2xpZCAjMDAwMDAwYCxcbiAgICAgIGJvcmRlclRvcENvbG9yOiBcIiNmZmZmZmZcIiwgYm9yZGVyUmFkaXVzOiBcIjUwJVwiLCBhbmltYXRpb246IFwic3BpbiAwLjdzIGxpbmVhciBpbmZpbml0ZVwiIH19IC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFRhZyh7IGNoaWxkcmVuLCBmaWxsZWQgfSkge1xuICByZXR1cm4gKFxuICAgIDxzcGFuIHN0eWxlPXt7IGRpc3BsYXk6IFwiaW5saW5lLWJsb2NrXCIsIHBhZGRpbmc6IFwiM3B4IDEwcHhcIixcbiAgICAgIGJhY2tncm91bmQ6IGZpbGxlZCA/IFwiIzAwMDAwMFwiIDogXCIjZmZmZmZmXCIsXG4gICAgICBjb2xvcjogZmlsbGVkID8gXCIjZmZmZmZmXCIgOiBcIiMwMDAwMDBcIixcbiAgICAgIGJvcmRlcjogXCIxcHggc29saWQgIzAwMDAwMFwiLFxuICAgICAgZm9udFNpemU6IDEwLCBmb250V2VpZ2h0OiA2MDAsIGxldHRlclNwYWNpbmc6IFwiMC4wNmVtXCIsXG4gICAgICB0ZXh0VHJhbnNmb3JtOiBcInVwcGVyY2FzZVwiLCBib3JkZXJSYWRpdXM6IDIsIG1hcmdpblJpZ2h0OiA1LCBtYXJnaW5Cb3R0b206IDUgfX0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9zcGFuPlxuICApO1xufVxuXG5mdW5jdGlvbiBQaWxsKHsgdmFsLCBsYWJlbCB9KSB7XG4gIGNvbnN0IHNjb3JlID0gTWF0aC5yb3VuZCh2YWwgfHwgMCk7XG4gIHJldHVybiAoXG4gICAgPGRpdiBzdHlsZT17eyB0ZXh0QWxpZ246IFwiY2VudGVyXCIsIHBhZGRpbmc6IFwiMTBweCA4cHhcIiB9fT5cbiAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6IDI4LCBmb250V2VpZ2h0OiAzMDAsIGNvbG9yOiBcIiNmZmZmZmZcIiwgZm9udEZhbWlseTogXCJtb25vc3BhY2VcIiwgbGluZUhlaWdodDogMSB9fT57c2NvcmV9PC9kaXY+XG4gICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiA5LCBmb250V2VpZ2h0OiA2MDAsIGNvbG9yOiBcInJnYmEoMjU1LDI1NSwyNTUsMC42KVwiLCBsZXR0ZXJTcGFjaW5nOiBcIjAuMWVtXCIsIHRleHRUcmFuc2Zvcm06IFwidXBwZXJjYXNlXCIsIG1hcmdpblRvcDogNCB9fT57bGFiZWx9PC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFJpbmcoeyB2YWx1ZSwgc2l6ZSA9IDgwLCBzdHJva2VXID0gNSwgbGFiZWwgfSkge1xuICBjb25zdCByICAgPSAoc2l6ZSAtIHN0cm9rZVcgKiAyKSAvIDI7XG4gIGNvbnN0IGNpcmMgPSAyICogTWF0aC5QSSAqIHI7XG4gIGNvbnN0IHBjdCAgPSBNYXRoLm1pbihNYXRoLm1heCh2YWx1ZSB8fCAwLCAwKSwgMTAwKSAvIDEwMDtcbiAgY29uc3QgZGFzaCA9IHBjdCAqIGNpcmM7XG4gIHJldHVybiAoXG4gICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiBcImZsZXhcIiwgZmxleERpcmVjdGlvbjogXCJjb2x1bW5cIiwgYWxpZ25JdGVtczogXCJjZW50ZXJcIiwgZ2FwOiA4IH19PlxuICAgICAgPHN2ZyB3aWR0aD17c2l6ZX0gaGVpZ2h0PXtzaXplfT5cbiAgICAgICAgPGNpcmNsZSBjeD17c2l6ZS8yfSBjeT17c2l6ZS8yfSByPXtyfSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiNlMGUwZTBcIiBzdHJva2VXaWR0aD17c3Ryb2tlV30gLz5cbiAgICAgICAgPGNpcmNsZSBjeD17c2l6ZS8yfSBjeT17c2l6ZS8yfSByPXtyfSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDAwMDBcIiBzdHJva2VXaWR0aD17c3Ryb2tlV31cbiAgICAgICAgICBzdHJva2VEYXNoYXJyYXk9e2Ake2Rhc2h9ICR7Y2lyY31gfSBzdHJva2VMaW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgI
3177HRyYW5zZm9ybT17YHJvdGF0ZSgtOTAgJHtzaXplLzJ9ICR7c2l6ZS8yfSlgfVxuICAgICAgICAgIHN0eWxlPXt7IGFuaW1hdGlvbjogXCJkcmF3UmluZyAxLjJzIGVhc2UgZm9yd2FyZHNcIiwgdHJhbnNpdGlvbjogXCJzdHJva2UtZGFzaGFycmF5IDFzIGVhc2VcIiB9fSAvPlxuICAgICAgICA8dGV4dCB4PVwiNTAlXCIgeT1cIjUwJVwiIHRleHRBbmNob3I9XCJtaWRkbGVcIiBkb21pbmFudEJhc2VsaW5lPVwiY2VudHJhbFwiXG4gICAgICAgICAgc3R5bGU9e3sgZm9udFNpemU6IHNpemUgKiAwLjIsIGZvbnRXZWlnaHQ6IDYwMCwgZmlsbDogXCIjMDAwMDAwXCIsIGZvbnRGYW1pbHk6IFwibW9ub3NwYWNlXCIgfX0+XG4gICAgICAgICAge01hdGgucm91bmQodmFsdWUgfHwgMCl9XG4gICAgICAgIDwvdGV4dD5cbiAgICAgIDwvc3ZnPlxuICAgICAge2xhYmVsICYmIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6IDksIGZvbnRXZWlnaHQ6IDYwMCwgbGV0dGVyU3BhY2luZzogXCIwLjA5ZW1cIixcbiAgICAgICAgdGV4dFRyYW5zZm9ybTogXCJ1cHBlcmNhc2VcIiwgY29sb3I6IFwiIzAwMDAwMFwiLCB0ZXh0QWxpZ246IFwiY2VudGVyXCIsIG1heFdpZHRoOiBzaXplICsgMTAgfX0+e2xhYmVsfTwvZGl2Pn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gQmFyKHsgbGFiZWwsIHZhbHVlLCBzdWJsYWJlbCwgYm9sZCB9KSB7XG4gIGNvbnN0IHBjdCA9IE1hdGgubWluKE1hdGgubWF4KHZhbHVlIHx8IDAsIDApLCAxMDApO1xuICByZXR1cm4gKFxuICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAxNiB9fT5cbiAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogXCJmbGV4XCIsIGp1c3RpZnlDb250ZW50OiBcInNwYWNlLWJldHdlZW5cIiwgbWFyZ2luQm90dG9tOiA0LCBhbGlnbkl0ZW1zOiBcImJhc2VsaW5lXCIgfX0+XG4gICAgICAgIDxzcGFuIHN0eWxlPXt7IGZvbnRTaXplOiAxMiwgZm9udFdlaWdodDogYm9sZCA/IDYwMCA6IDQwMCwgY29sb3I6IFwiIzAwMDAwMFwiIH19PntsYWJlbH08L3NwYW4+XG4gICAgICAgIDxzcGFuIHN0eWxlPXt7IGZvbnRTaXplOiAxNCwgZm9udFdlaWdodDogNzAwLCBjb2xvcjogXCIjMDAwMDAwXCIsIGZvbnRGYW1pbHk6IFwibW9ub3NwYWNlXCIgfX0+e01hdGgucm91bmQocGN0KX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIHtzdWJsYWJlbCAmJiA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAxMCwgY29sb3I6IFwiIzAwMDAwMFwiLCBtYXJnaW5Cb3R0b206IDUgfX0+e3N1YmxhYmVsfTwvZGl2Pn1cbiAgICAgIDxkaXYgc3R5bGU9e3sgYmFja2dyb3VuZDogXCIjZTBlMGUwXCIsIGhlaWdodDogNCwgYm9yZGVyUmFkaXVzOiAyLCBvdmVyZmxvdzogXCJoaWRkZW5cIiB9fT5cbiAgICAgICAgPGRpdiBzdHlsZT17eyB3aWR0aDogYCR7cGN0fSVgLCBoZWlnaHQ6IFwiMTAwJVwiLCBiYWNrZ3JvdW5kOiBcIiMwMDAwMDBcIixcbiAgICAgICAgICBib3JkZXJSYWRpdXM6IDIsIGFuaW1hdGlvbjogXCJmaWxsQmFyIDFzIGVhc2UgZm9yd2FyZHNcIiwgdHJhbnNpdGlvbjogXCJ3aWR0aCAxcyBlYXNlXCIgfX0gLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBSYWRhcih7IGRhdGEsIHNpemUgPSAyNjAgfSkge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGF0YSk7XG4gIGNvbnN0IG4gPSBrZXlzLmxlbmd0aDtcbiAgaWYgKG4gPCAzKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgY3ggPSBzaXplIC8gMiwgY3kgPSBzaXplIC8gMjtcbiAgY29uc3QgciAgPSBzaXplICogMC4zNDtcbiAgY29uc3QgYW5nbGUgPSBpID0+IChpIC8gbikgKiAyICogTWF0aC5QSSAtIE1hdGguUEkgLyAyO1xuICBjb25zdCBwdCA9IChpLCBzY2FsZSkgPT4gKHtcbiAgICB4OiBjeCArIE1hdGguY29zKGFuZ2xlKGkpKSAqIHIgKiBzY2FsZSxcbiAgICB5OiBjeSArIE1hdGguc2luKGFuZ2xlKGkpKSAqIHIgKiBzY2FsZSxcbiAgfSk7XG4gIGNvbnN0IGdyaWRMaW5lcyA9IFswLjI1LCAwLjUsIDAuNzUsIDFdO1xuICBjb25zdCBkYXRhUG9pbnRzID0ga2V5cy5tYXAoKGssIGkpID0+IHB0KGksIE1hdGgubWluKGRhdGFba10gLyAxMDAsIDEpKSk7XG4gIGNvbnN0IGRhdGFQb2x5ID0gZGF0YVBvaW50cy5tYXAocCA9PiBgJHtwLnh9LCR7cC55fWApLmpvaW4oXCIgXCIpO1xuICByZXR1cm4gKFxuICAgIDxzdmcgd2lkdGg9e3NpemV9IGhlaWdodD17c2l6ZX0gc3R5bGU9e3sgb3ZlcmZsb3c6IFwidmlzaWJsZVwiIH19PlxuICAgICAge2dyaWRMaW5lcy5tYXAobHZsID0+IChcbiAgICAgICAgPHBvbHlnb24ga2V5PXtsdmx9XG4gICAgICAgICAgcG9pbnRzPXtrZXlzLm1hcCgoXywgaSkgPT4geyBjb25zdCBwID0gcHQoaSwgbHZsKTsgcmV0dXJuIGAke3AueH0sJHtwLnl9YDsgfSkuam9pbihcIiBcIil9XG4gICAgICAgICAgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwMDAwXCIgc3Ryb2tlV2lkdGg9ezAuNX0gc3Ryb2tlT3BhY2l0eT17MC4yfSAvPlxuICAgICAgKSl9XG4gICAgICB7a2V5cy5tYXAoKF8sIGkpID0+IHtcbiAgICAgICAgY29uc3Qgb3V0ZXIgPSBwdChpLCAxKTtcbiAgICAgICAgcmV0dXJuIDxsaW5lIGtleT17aX0geDE9e2N4fSB5MT17Y3l9IHgyPXtvdXRlci54fSB5Mj17b3V0ZXIueX0gc3Ryb2tlPVwiIzAwMDAwMFwiIHN0cm9rZVdpZHRoP
3177XswLjV9IHN0cm9rZU9wYWNpdHk9ezAuMn0gLz47XG4gICAgICB9KX1cbiAgICAgIDxwb2x5Z29uIHBvaW50cz17ZGF0YVBvbHl9IGZpbGw9XCJyZ2JhKDAsMCwwLDAuMDcpXCIgc3Ryb2tlPVwiIzAwMDAwMFwiIHN0cm9rZVdpZHRoPXsxLjV9IC8+XG4gICAgICB7ZGF0YVBvaW50cy5tYXAoKHAsIGkpID0+IDxjaXJjbGUga2V5PXtpfSBjeD17cC54fSBjeT17cC55fSByPXszLjV9IGZpbGw9XCIjMDAwMDAwXCIgLz4pfVxuICAgICAge2tleXMubWFwKChrLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IGxwID0gcHQoaSwgMS4yMik7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPHRleHQga2V5PXtrfSB4PXtscC54fSB5PXtscC55fSB0ZXh0QW5jaG9yPVwibWlkZGxlXCIgZG9taW5hbnRCYXNlbGluZT1cImNlbnRyYWxcIlxuICAgICAgICAgICAgc3R5bGU9e3sgZm9udFNpemU6IDksIGZvbnRXZWlnaHQ6IDYwMCwgZmlsbDogXCIjMDAwMDAwXCIsIGxldHRlclNwYWNpbmc6IFwiMC4wOGVtXCIsIGZvbnRGYW1pbHk6IFwiJ09wZW4gU2Fucycsc2Fucy1zZXJpZlwiIH19PlxuICAgICAgICAgICAge2sudG9VcHBlckNhc2UoKX1cbiAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICk7XG4gICAgICB9KX1cbiAgICA8L3N2Zz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gR2F1Z2UoeyBzY29yZSwgc2l6ZSA9IDE4MCB9KSB7XG4gIGNvbnN0IGN4ID0gc2l6ZSAvIDIsIGN5ID0gc2l6ZSAqIDAuNjg7XG4gIGNvbnN0IHIgID0gc2l6ZSAqIDAuMzg7XG4gIGNvbnN0IGNpcmMgPSBNYXRoLlBJICogcjtcbiAgY29uc3QgZGFzaCA9IChNYXRoLm1pbihzY29yZSB8fCAwLCAxMDApIC8gMTAwKSAqIGNpcmM7XG4gIGNvbnN0IGxhYmVsID0gc2NvcmUgPj0gODAgPyBcIkV4Y2VsbGVudFwiIDogc2NvcmUgPj0gNjUgPyBcIkdvb2RcIiA6IHNjb3JlID49IDQ1ID8gXCJNb2RlcmF0ZVwiIDogXCJEZXZlbG9waW5nXCI7XG4gIHJldHVybiAoXG4gICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiBcImZsZXhcIiwgZmxleERpcmVjdGlvbjogXCJjb2x1bW5cIiwgYWxpZ25JdGVtczogXCJjZW50ZXJcIiB9fT5cbiAgICAgIDxzdmcgd2lkdGg9e3NpemV9IGhlaWdodD17c2l6ZSAqIDAuNjV9PlxuICAgICAgICA8cGF0aCBkPXtgTSAke2N4LXJ9ICR7Y3l9IEEgJHtyfSAke3J9IDAgMCAxICR7Y3grcn0gJHtjeX1gfVxuICAgICAgICAgIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiI2UwZTBlMFwiIHN0cm9rZVdpZHRoP
3177XsxMH0gc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgLz5cbiAgICAgICAgPHBhdGggZD17YE0gJHtjeC1yfSAke2N5fSBBICR7cn0gJHtyfSAwIDAgMSAke2N4K3J9ICR7Y3l9YH1cbiAgICAgICAgICBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDAwMDBcIiBzdHJva2VXaWR0aD17MTB9IHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgc3Ryb2tlRGFzaGFycmF5PXtgJHtkYXNofSAke2NpcmN9YH1cbiAgICAgICAgICBzdHlsZT17eyB0cmFuc2l0aW9uOiBcInN0cm9rZS1kYXNoYXJyYXkgMS40cyBlYXNlXCIgfX0gLz5cbiAgICAgICAge1swLCAyNSwgNTAsIDc1LCAxMDBdLm1hcCh2ID0+IHtcbiAgICAgICAgICBjb25zdCBhID0gTWF0aC5QSSAtICh2IC8gMTAwKSAqIE1hdGguUEk7XG4gICAgICAgICAgY29uc3QgeDEgPSBjeCArIE1hdGguY29zKGEpICogKHIgLSAxMik7XG4gICAgICAgICAgY29uc3QgeTEgPSBjeSAtIE1hdGguc2luKGEpICogKHIgLSAxMik7XG4gICAgICAgICAgY29uc3QgeDIgPSBjeCArIE1hdGguY29zKGEpICogKHIgKyAyKTtcbiAgICAgICAgICBjb25zdCB5MiA9IGN5IC0gTWF0aC5zaW4oYSkgKiAociArIDIpO1xuICAgICAgICAgIHJldHVybiA8bGluZSBrZXk9e3Z9IHgxPXt4MX0geTE9e3kxfSB4Mj17eDJ9IHkyPXt5Mn0gc3Ryb2tlPVwiIzAwMDAwMFwiIHN0cm9rZVdpZHRoPXsxLjV9IC8+O1xuICAgICAgICB9KX1cbiAgICAgICAgPHRleHQgeD17Y3h9IHk9e2N5IC0gMTB9IHRleHRBbmNob3I9XCJtaWRkbGVcIlxuICAgICAgICAgIHN0eWxlPXt7IGZvbnRTaXplOiAzMiwgZm9udFdlaWdodDogMzAwLCBmaWxsOiBcIiMwMDAwMDBcIiwgZm9udEZhbWlseTogXCJtb25vc3BhY2VcIiB9fT5cbiAgICAgICAgICB7TWF0aC5yb3VuZChzY29yZSB8fCAwKX1cbiAgICAgICAgPC90ZXh0PlxuICAgICAgICA8dGV4dCB4PXtjeH0geT17Y3kgKyAxMn0gdGV4dEFuY2hvcj1cIm1pZGRsZVwiXG4gICAgICAgICAgc3R5bGU9e3sgZm9udFNpemU6IDEwLCBmb250V2VpZ2h0OiA2MDAsIGZpbGw6IFwiIzAwMDAwMFwiLCBsZXR0ZXJTcGFjaW5nOiBcIjAuMTJlbVwiLCBmb250RmFtaWx5OiBcIidPcGVuIFNhbnMnLHNhbnMtc2VyaWZcIiB9fT5cbiAgICAgICAgICB7bGFiZWwudG9VcHBlckNhc2UoKX1cbiAgICAgICAgPC90ZXh0PlxuICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbi8vIOKUgOKUgCBFTkhBTkNFRCBEZWNpc2lvbiBGbG93IOKAlCBIVE1MLWJhc2VkIGZvciByZWFkYWJsZSB0ZXh0IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuZnVuY3Rpb24gRGVjaXNpb25GbG93RW5oYW5jZWQoeyBzZiwgYm0sIHFtLCBz
3177cCB9KSB7XG4gIGNvbnN0IFtzZWxlY3RlZE5vZGUsIHNldFNlbGVjdGVkTm9kZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2hvdk5vZGUsIHNldEhvdk5vZGVdID0gdXNlU3RhdGUobnVsbCk7XG5cbiAgaWYgKCFzZiB8fCAhYm0pIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IHJpc2sgPSAoc2Yucmlza19wcm9maWxlPy52YWx1ZSB8fCBcIm1vZGVyYXRlXCIpLnJlcGxhY2UoL18vZywgXCIgXCIpO1xuICBjb25zdCByaXNrQ29uZiA9IHNmLnJpc2tfcHJvZmlsZT8uY29uZmlkZW5jZSB8fCBcImxvd1wiO1xuICBjb25zdCBzdHlsZV92ID0gKHNmLmRlY2lzaW9uX3N0eWxlPy5wcmltYXJ5IHx8IFwiZXZpZGVuY2UgZmlyc3RcIikucmVwbGFjZSgvXy9nLCBcIiBcIik7XG4gIGNvbnN0IHN0eWxlQ29uZiA9IHNmLmRlY2lzaW9uX3N0eWxlPy5jb25maWRlbmNlIHx8IFwibG93XCI7XG4gIGNvbnN0IGludiA9IHNmLmRpYWdub3N0aWNfcmlnb3I/LmludmVzdGlnYXRpb25faW50ZW5zaXR5IHx8IFwic3RhbmRhcmRcIjtcbiAgY29uc3QgaW52UmF0ZSA9IGJtLmludmVzdGlnYXRpb25fb3JkZXJfcmF0ZSB8fCAwO1xuICBjb25zdCBub3RlUmF0ZSA9IGJtLmNsaW5pY2FsX25vdGVfcmF0ZSB8fCAwO1xuICBjb25zdCB0cmVhdCA9IChzZi50cmVhdG1lbnRfcGhpbG9zb3BoeT8uYXBwcm9hY2ggfHwgXCJiYWxhbmNlZFwiKS5yZXBsYWNlKC9fL2csIFwiIFwiKTtcbiAgY29uc3QgdHJlYXRDb25mID0gc2YudHJlYXRtZW50X3BoaWxvc29waHk/LmNvbmZpZGVuY2UgfHwgXCJsb3dcIjtcbiAgY29uc3QgZG9jTGV2ZWwgPSBzZi5kb2N1bWVudGF0aW9uX3F1YWxpdHk/LmRldGFpbF9sZXZlbCB8fCBcInN0YW5kYXJkXCI7XG4gIGNvbnN0IHBhdFNjb3JlID0gc2YuY29tbXVuaWNhdGlvbl9zdHlsZT8ucGF0aWVudF9jZW50ZXJlZF9zY29yZSB8fCAwO1xuICBjb25zdCBzYWZldHlDb25mID0gc2Yuc2FmZXR5X2JlaGF2aW9ycz8uZG91YmxlX2NoZWNrX2ZyZXF1ZW5jeSB8fCBcIm1lZGl1bVwiO1xuXG4gIGNvbnN0IGNvbmZEb3QgPSAoY29uZikgPT4ge1xuICAgIGNvbnN0IGNvbG9ycyA9IHsgaGlnaDogXCIjMDAwXCIsIG1lZGl1bTogXCIjNjY2XCIsIGxvdzogXCIjYWFhXCIgfTtcbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW4gc3R5bGU9e3sgZGlzcGxheTogXCJpbmxpbmUtYmxvY2tcIiwgd2lkdGg6IDcsIGhlaWdodDogNywgYm9yZGVyUmFkaXVzOiBcIjUwJVwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBjb2xvcnNbY29uZl0gfHwgXCIjYWFhXCIsIG1hcmdpblJpZ2h0OiA1LCB2ZXJ0aWNhbEFsaWduOiBcIm1pZGRsZVwiIH19IC8+XG4gICAgKTtcbiAgfTtcblxuICBjb25zdCBub2RlcyA9IFtcbiAgICB7XG4gICAgICBpZDogXCJlbmNvdW50ZXJcIixcbiAgICAgIHRpdGxlOiBcIlBBVElFTlQgRU5DT1VOVEVSXCIsXG4gICAgICBjYXRlZ29yeTogXCJlbnRyeVwiLFxuICAgICAgbWV0cmljczogW1xuICAgICAgICB7IGxhYmVsOiBcIlRvdGFsIENvbnN1bHRhdGlvbnNcIiwgdmFsdWU6IGJtLmNvbnN1bHRhdGlvbl9jb3VudCB8fCAwIH0sXG4gICAgICAgIHsgbGFiZWw6IFwiVW5pcXVlIFBhdGllbnRzXCIsIHZhbHVlOiBibS51bmlxdWVfcGF0aWVudHNfc2VlbiB8fCAwIH0sXG4gICAgICAgIHsgbGFiZWw6IFwiQXZnIENvbmRpdGlvbnMvVmlzaXRcIiwgdmFsdWU6IChibS5hdmdfY29uZGl0aW9uc19zdXJmYWNlZF9wZXJfdmlzaXQgfHwgMCkudG9GaXhlZCgxKSB9LFxuICAgICAgICB7IGxhYmVsOiBcIkFnZW50aWMgU2Vzc2lvbnNcIiwgdmFsdWU6IGJtLmFnZW50aWNfZW5nYWdlbWVudF9jb3VudCB8fCAwIH0sXG4gICAgICBdLFxuICAgICAgZGVzY3JpcHRpb246IFwiRXZlcnkgZW5jb3VudGVyIGJlZ2lucyBoZXJlLiBSZWFsIG1ldHJpY3Mgc2hvdyB0aGUgZG9jdG9yJ3MgcHJhY3RpY2Ugdm9sdW1lIGFuZCBwYXRpZW50IGJyZWFkdGguXCIsXG4gICAgICB0YWdzOiBbXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiBcInJpc2tcIixcbiAgICAgIHRpdGxlOiBcIlJJU0sgQVNTRVNTTUVOVFwiLFxuICAgICAgY2F0ZWdvcnk6IFwiYXNzZXNzbWVudFwiLFxuICAgICAgbWV0cmljczogW1xuICAgICAgICB7IGxhYmVsOiBcIlJpc2sgUHJvZmlsZVwiLCB2YWx1ZTogcmlzayB9LFxuICAgICAgICB7IGxhYmVsOiBcIkNvbmZpZGVuY2VcIiwgdmFsdWU6IHJpc2tDb25mIH0sXG4gICAgICAgIHsgbGFiZWw6IFwiRGVjaXNpb24gU3R5bGVcIiwgdmFsdWU6IHN0eWxlX3YgfSxcbiAgICAgICAgeyBsYWJlbDogXCJTdHlsZSBDb25maWRlbmNlXCIsIHZhbHVlOiBzdHlsZUNvbmYgfSxcbiAgICAgIF0sXG4gICAgICBkZXNjcmlwdGlvbjogc2Yucmlza19wcm9maWxlPy5ldmlkZW5jZSB8fCBcIlJpc2sgcHJvZmlsZSBpbmZlcnJlZCBmcm9tIG9ic2VydmVkIGNsaW5pY2FsIHBhdHRlcm5zLlwiLFxuICAgICAgdGFnczogW3Jpc2ssIHN0eWxlX3ZdLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IFwiaW52ZXN0aWdhdGlvblwiLFxuICAgICAgdGl0bGU6IFwiSU5WRVNUSUdBVElPTiAmIERJQUdOT1NUSUNTXCIsXG4gICAgICBjYXRlZ29yeTogXCJkaWFnbm9zdGljXCIsXG4gICAgICBtZXRyaWNzOiBbXG4gICAgICAgIHsgbGFiZWw6IFwiT3JkZXIgUmF0ZVwiLCB2YWx1ZTogaW52UmF0ZS50b0ZpeGVkKDMpIH0sXG4gICAgICAgIHsgbGFiZWw6IFwiSW50ZW5zaXR5XCIsIHZhbHVlOiBpbnYgfSxcbiAgICAgICAgeyBsYWJlbDogXCJFc2NhbGF0aW9uXCIsIHZhbHVlOiBzZi5kaWFnbm9zdGljX3JpZ29yPy5lc2NhbGF0aW9uX3BhdHRlcm4gfHwgXCJzdGFuZGFyZFwiIH0sXG4gICAgICAgIHsgbGFiZWw6IFwiRGlhZ25vc3RpYyBRQVwiLCB2YWx1ZTogYCR7TWF0aC5yb3VuZChxbT8uZGlhZ25vc3RpY19xdWFsaXR5X3Njb3JlIHx8IDApfS8xMDBgIH0sXG4gICAgICAgIHsgbGFiZWw6IFwiSW52ZXN0aWdhdGlvbiBRQVwiLCB2YWx1ZTogYCR7TWF0aC5yb3VuZChxbT8uaW52ZXN0aWdhdGlvbl9hcHByb3ByaWF0ZW5lc3Nfc2NvcmUgfHwgMCl9LzEwMGAgfSxcbiAgICAgIF0sXG4gICAgICBkZXNjcmlwdGlvbjogc2YuZGlhZ25vc3RpY19yaWdvcj8uZXZpZGVuY2UgfHwgXCJJbnZlc3RpZ2F0aW9uIHBhdHRlcm4gaW5mZXJyZWQgZnJvbSBvcmRlciByYXRlIGFuZCBub3RlIGNvcnJlbGF0aW9uLlwiLFxuICAgICAgdGFnczogW2ludl0sXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogXCJkZWNpc2lvblwiLFxuICAgICAgdGl0bGU6IFwiQ0xJTklDQUwgREVDSVNJT05cIixcbiAgICAgIGNhdGVnb3J5OiBcImRlY2lzaW9uXCIsXG4gICAgICBtZXRyaWNzOiBbXG4gICAgICAgI
3177HsgbGFiZWw6IFwiUHJpbWFyeSBTdHlsZVwiLCB2YWx1ZTogc3R5bGVfdiB9LFxuICAgICAgICB7IGxhYmVsOiBcIlNlY29uZGFyeSBTdHlsZVwiLCB2YWx1ZTogc2YuZGVjaXNpb25fc3R5bGU/LnNlY29uZGFyeSB8fCBcIuKAlFwiIH0sXG4gICAgICAgIHsgbGFiZWw6IFwiR3VpZGVsaW5lIFNjb3JlXCIsIHZhbHVlOiBgJHtNYXRoLnJvdW5kKHFtPy5ndWlkZWxpbmVfY29tcGxpYW5jZV9zY29yZSB8fCAwKX0vMTAwYCB9LFxuICAgICAgICB7IGxhYmVsOiBcIkludGVydmVudGlvbiBUaHJlc2hvbGRcIiwgdmFsdWU6IHNmLnRyZWF0bWVudF9waGlsb3NvcGh5Py5pbnRlcnZlbnRpb25fdGhyZXNob2xkIHx8IFwibWVkaXVtXCIgfSxcbiAgICAgIF0sXG4gICAgICBkZXNjcmlwdGlvbjogc2YuZGVjaXNpb25fc3R5bGU/LmV2aWRlbmNlIHx8IFwiRGVjaXNpb24gc3R5bGUgZGVyaXZlZCBmcm9tIGNsaW5pY2FsIG5vdGUgcGF0dGVybnMgYW5kIGludmVzdGlnYXRpb24gcmF0aW9zLlwiLFxuICAgICAgdGFnczogW3N0eWxlX3ZdLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IFwidHJlYXRtZW50XCIsXG4gICAgICB0aXRsZTogXCJUUkVBVE1FTlQgJiBQUkVTQ1JJQklOR1wiLFxuICAgICAgY2F0ZWdvcnk6IFwidHJlYXRtZW50XCIsXG4gICAgICBtZXRyaWNzOiBbXG4gICAgICAgIHsgbGFiZWw6IFwiUGhpbG9zb3BoeVwiLCB2YWx1ZTogdHJlYXQgfSxcbiAgICAgICAgeyBsYWJlbDogXCJNZWRpY2F0aW9uIFJhdGVcIiwgdmFsdWU6IChibS5tZWRpY2F0aW9uX3ByZXNjcmlwdGlvbl9yYXRlIHx8IDApLnRvRml4ZWQoMykgfSxcbiAgICAgICAgeyBsYWJlbDogXCJNZWRpY2F0aW9uIFNhZmV0eVwiLCB2YWx1ZTogYCR7TWF0aC5yb3VuZChxbT8ubWVkaWNhdGlvbl9zYWZldHlfc2NvcmUgfHwgMCl9LzEwMGAgfSxcbiAgICAgICAgeyBsYWJlbDogXCJHdWlkZWxpbmUgQWxpZ25cIiwgdmFsdWU6IGAke01hdGgucm91bmQocW0/Lmd1aWRlbGluZV9jb21wbGlhbmNlX3Njb3JlIHx8IDApfS8xMDBgIH0sXG4gICAgICAgIHsgbGFiZWw6IFwiQ29uZmlkZW5jZVwiLCB2YWx1ZTogdHJlYXRDb25mIH0sXG4gICAgICBdLFxuICAgICAgZGVzY3JpcHRpb246IHNmLnRyZWF0bWVudF9waGlsb3NvcGh5Py5ldmlkZW5jZSB8fCBcIlRyZWF0bWVudCBwaGlsb3NvcGh5IGluZmVycmVkIGZyb20gcHJlc2NyaWJpbmcgcGF0dGVybnMgYW5kIGludGVydmVudGlvbiByYXRlLlwiLFxuICAgICAgdGFnczogW3RyZWF0XSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiBcImRvY3VtZW50YXRpb25cIixcbiAgICAgIHRpdGxlOiBcIkRPQ1VNRU5UQVRJT05cIixcbiAgICAgIGNhdGVnb3J5OiBcImRvY3VtZW50YXRpb25cIixcbiAgICAgIG1ldHJpY3M6IFtcbiAgICAgICAgeyBsYWJlbDogXCJOb3RlIFJhdGVcIiwgdmFsdWU6IG5vdGVSYXRlLnRvRml4ZWQoMykgfSxcbiAgICAgICAgeyBsYWJlbDogXCJEZXRhaWwgTGV2ZWxcIiwgdmFsdWU6IGRvY0xldmVsIH0sXG4gICAgICAgIHsgbGFiZWw6IFwiU3RydWN0dXJlXCIsIHZhbHVlOiBzZi5kb2N1bWVudGF0aW9uX3F1YWxpdHk/LnN0cnVjdHVyZV9wcmVmZXJlbmNlIHx8IFwibWl4ZWRcIiB9LFxuICAgICAgICB7IGxhYmVsOiBcIkRvYyBRQSBTY29yZVwiLCB2YWx1ZTogYCR7TWF0aC5yb3VuZChxbT8uZG9jdW1lbnRhdGlvbl9xdWFsaXR5X3Njb3JlIHx8IDApfS8xMDBgIH0sXG4gICAgICBdLFxuICAgICAgZGVzY3JpcHRpb246IHNmLmRvY3VtZW50YXRpb25fcXVhbGl0eT8uZXZpZGVuY2UgfHwgXCJEb2N1bWVudGF0aW9uIHN0eWxlIGluZmVycmVkIGZyb20gY2xpbmljYWwgbm90ZSByYXRlLlwiLFxuICAgICAgdGFnczogW2RvY0xldmVsXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiBcInNhZmV0eVwiLFxuICAgICAgdGl0bGU6IFwiU0FGRVRZIEJFSEFWSU9SU1wiLFxuICAgICAgY2F0ZWdvcnk6IFwic2FmZXR5XCIsXG4gICAgICBtZXRyaWNzOiBbXG4gICAgICAgIHsgbGFiZWw6IFwiRG91YmxlLUNoZWNrIEZyZXEuXCIsIHZhbHVlOiBzYWZldHlDb25mIH0sXG4gICAgICAgIHsgbGFiZWw6IFwiUmlzayBGbGFnc1wiLCB2YWx1ZTogKHNwPy5yaXNrX2ZsYWdzIHx8IFtdKS5sZW5ndGggfSxcbiAgICAgICAgeyBsYWJlbDogXCJTYWZldHkgU2NvcmVcIiwgdmFsdWU6IGAke01hdGgucm91bmQocW0/Lm92ZXJhbGxfcXVhbGl0eV9zY29yZSB8fCAwKX0vMTAwYCB9LFxuICAgICAgICAuLi4oc2Yuc2FmZXR5X2JlaGF2aW9ycz8udHJhaXRzIHx8IFtdKS5tYXAodCA9PiAoeyBsYWJlbDogXCJUcmFpdFwiLCB2YWx1ZTogdCB9KSksXG4gICAgICBdLFxuICAgICAgZGVzY3JpcHRpb246IHNmLnNhZmV0eV9iZWhhdmlvcnM/LmV2aWRlbmNlIHx8IFwiU2FmZXR5IGJlaGF2aW9ycyBpbmZlcnJlZCBmcm9tIGRvY3VtZW50YXRpb24gcGF0dGVybnMgYW5kIHNhZmV0eSBydWxlIGNvbXBsaWFuY2UuXCIsXG4gICAgICB0YWdzOiBzZi5zYWZldHlfYmVoYXZpb3JzPy50cmFpdHMgfHwgW10sXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogXCJvdXRjb21lXCIsXG4gICAgICB0aXRsZTogXCJPVVRDT01FICYgRk9MTE9XLVVQXCIsXG4gICAgICBjYXRlZ29yeTogXCJvdXRjb21lXCIsXG4gICAgICBtZXRyaWNzOiBbXG4gICAgICAgIHsgbGFiZWw6IFwiT3V0Y29tZSBRQVwiLCB2YWx1ZTogYCR7TWF0aC5yb3VuZChxbT8ub3V0Y29tZV9xdWFsaXR5X3Njb3JlIHx8IDApfS8xMDBgIH0sXG4gICAgICAgIHsgbGFiZWw6IFwiUGF0aWVudC1DZW50ZXJlZFwiLCB2YWx1ZTogYCR7TWF0aC5yb3VuZChwYXRTY29yZSl9LzEwMGAgfSxcbiAgICAgICAgeyBsYWJlbDogXCJDb25kaXRpb25zIFN1cmZhY2VkXCIsIHZhbHVlOiAoYm0uYXZnX2NvbmRpdGlvbnNfc3VyZmFjZWRfcGVyX3Zpc2l0IHx8IDApLnRvRml4ZWQoMSkgKyBcIi92aXNpdFwiIH0sXG4gICAgICAgIHsgbGFiZWw6IFwiT3ZlcmFsbCBJbnRlbGxpZ2VuY2VcIiwgdmFsdWU6IFwic2VlIGhlYWRlclwiIH0sXG4gICAgICBdLFxuICAgICAgZGVzY3JpcHRpb246IFwiRmluYWwgb3V0Y29tZSBxdWFsaXR5IG1lYXN1cmVkIGJ5IGNvbmRpdGlvbnMgc3VyZmFjZWQsIHBhdGllbnQtY2VudGVyZWQgc2NvcmUsIGFuZCBmb2xsb3ctdXAgc2lnbmFscy5cIixcbiAgICAgIHRhZ3M6IFtdLFxuICAgIH0sXG4gIF07XG5cbiAgY29uc3QgZWRnZXMgPSBbXG4gICAgeyBmcm9tOiBcImVuY291bnRlclwiLCB0bzogXCJyaXNrXCIsIGxhYmVsOiBcIkFzc2Vzc21lbnRcIiB9LFxuICAgIHsgZnJvbTogXCJyaXNrXCIsIHRvOiBcImludmVzdGlnYXRpb25cIiwgbGFiZWw6IFwiRGlhZ25vc3RpYyBwYXRoXCIgfSxcbiAgICB7IGZyb206IFwicmlza1wiLCB0bzogXCJkZWNpc2lvblwiLCBsYWJlbDogXCJDbGluaWNhbCBqdWRnbWVudFwiIH0sXG4gICAgeyBmcm9tOiBcImludmVzdGlnYXRpb25cIiwgdG86IFwidHJlYXRtZW50XCIsIGxhYmVsOiBcIkV2aWRlbmNlIGluZm9ybXNcIiB9LFxuICAgIHsgZnJvbTogXCJkZWNpc2lvblwiLCB0bzogXCJ0cmVhdG1lbnRcIiwgbGFiZWw6IFwiRGVjaWRlc1wiIH0sXG4gICAgeyBmcm9tOiBcInRyZWF0bWVudFwiLCB0bzogXCJkb2N1bWVudGF0aW9uXCIsIGxhYmVsOiBcIlJlY29yZFwiIH0sXG4gICAgeyBmcm9tOiBcInRyZWF0bWVudFwiLCB0bzogXCJzYWZldHlcIiwgbGFiZWw6IFwiU2FmZXR5IGNoZWNrXCIgfSxcbiAgICB7IGZyb206IFwiZG9jdW1lbnRhdGlvblwiLCB0bzogXCJvdXRjb21lXCIsIGxhYmVsOiBcIkRvY3VtZW50ZWRcIiB9LFxuICAgIHsgZnJvbTogXCJzYWZldHlcIiwgdG86IFwib3V0Y29tZVwiLCBsYWJlbDogXCJWYWxpZGF0ZWRcIiB9LFxuICBdO1xuXG4gIGNvbnN0IGNhdENvbG9ycyA9IHtcbiAgICBlbnRyeTogXCIjMDAwXCIsXG4gICAgYXNzZXNzbWVudDogXCIjMTExXCIsXG4gICAgZGlhZ25vc3RpYzogXCIjMjIyXCIsXG4gICAgZGVjaXNpb246IFwiIzAwMFwiLFxuICAgIHRyZWF0bWVudDogXCIjMTExXCIsXG4gICAgZG9jdW1lbnRhdGlvbjogXCIjMjIyXCIsXG4gICAgc2FmZXR5Oi
3177BcIiMwMDBcIixcbiAgICBvdXRjb21lOiBcIiMwMDBcIixcbiAgfTtcblxuICBjb25zdCBzZWxlY3RlZCA9IG5vZGVzLmZpbmQobiA9PiBuLmlkID09PSBzZWxlY3RlZE5vZGUpO1xuXG4gIC8vIExheW91dDogMyByb3dzXG4gIGNvbnN0IGxheW91dCA9IFtcbiAgICBbXCJlbmNvdW50ZXJcIl0sXG4gICAgW1wicmlza1wiXSxcbiAgICBbXCJpbnZlc3RpZ2F0aW9uXCIsIFwiZGVjaXNpb25cIl0sXG4gICAgW1widHJlYXRtZW50XCIsIFwiZG9jdW1lbnRhdGlvblwiXSxcbiAgICBbXCJzYWZldHlcIiwgXCJvdXRjb21lXCJdLFxuICBdO1xuXG4gIGNvbnN0IGNvbm5lY3RlZElkcyA9IHNlbGVjdGVkTm9kZVxuICAgID8gbmV3IFNldChbXG4gICAgICAgIC4uLmVkZ2VzLmZpbHRlcihlID0+IGUuZnJvbSA9PT0gc2VsZWN0ZWROb2RlKS5tYXAoZSA9PiBlLnRvKSxcbiAgICAgICAgLi4uZWRnZXMuZmlsdGVyKGUgPT4gZS50byA9PT0gc2VsZWN0ZWROb2RlKS5tYXAoZSA9PiBlLmZyb20pLFxuICAgICAgICBzZWxlY3RlZE5vZGUsXG4gICAgICBdKVxuICAgIDogbnVsbDtcblxuICByZXR1cm4gKFxuICAgIDxkaXY+XG4gICAgICB7LyogRmxvdyBsYXlvdXQgKi99XG4gICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6IFwiZmxleFwiLCBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLCBnYXA6IDE2LCBtYXJnaW5Cb3R0b206IDI0IH19PlxuICAgICAgICB7bGF5b3V0Lm1hcCgocm93LCByaSkgPT4gKFxuICAgICAgICAgIDxkaXYga2V5PXtyaX0gc3R5bGU9e3sgZGlzcGxheTogXCJmbGV4XCIsIGdhcDogMTYsIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiIH19PlxuICAgICAgICAgICAge3Jvdy5tYXAobm9kZUlkID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzLmZpbmQobiA9PiBuLmlkID09PSBub2RlSWQpO1xuICAgICAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gc2VsZWN0ZWROb2RlID09PSBub2RlSWQ7XG4gICAgICAgICAgICAgIGNvbnN0IGlzSG92ID0gaG92Tm9kZSA9PT0gbm9kZUlkO1xuICAgICAgICAgICAgICBjb25zdCBpc0RpbW1lZCA9IGNvbm5lY3RlZElkcyAmJiAhY29ubmVjdGVkSWRzLmhhcyhub2RlSWQpO1xuICAgICAgICAgICAgICBjb25zdCBvdXRFZGdlcyA9IGVkZ2VzLmZpbHRlcihlID0+IGUuZnJvbSA9PT0gbm9kZUlkKTtcblxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxkaXYga2V5PXtub2RlSWR9IHN0eWxlPXt7IGZsZXg6IHJvdy5sZW5ndGggPiAxID8gMSA6IHVuZGVmaW5lZCwgbWF4V2lkdGg6IHJvdy5sZW5ndGggPT09IDEgPyA0ODAgOiB1bmRlZmluZWQsIHdpZHRoOiByb3cubGVuZ3RoID09PSAxID8gXCIxMDAlXCIgOiB1bmRlZmluZWQgfX0+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNlbGVjdGVkTm9kZShzZWxlY3RlZE5vZGUgPT09IG5vZGVJZCA/IG51bGwgOiBub2RlSWQpfVxuICAgICAgICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldEhvdk5vZGUobm9kZUlkKX1cbiAgICAgICAgICAgICAgICAgICAgb25Nb3VzZUxlYXZlPXsoKSA9PiBzZXRIb3ZOb2RlKG51bGwpfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogYCR7aXNTZWxlY3RlZCA/IDIgOiAxfXB4IHNvbGlkICMwMDBgLFxuICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlzU2VsZWN0ZWQgPyBcIiMwMDBcIiA6IGlzSG92ID8gXCIjZjhmOGY4XCIgOiBcIiNmZmZcIixcbiAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBcIjE0cHggMTZweFwiLFxuICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogXCJwb2ludGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogaXNEaW1tZWQgPyAwLjM1IDogMSxcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiBcImFsbCAwLjJzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IFwicmVsYXRpdmVcIixcbiAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgIHsvKiBOb2RlIGhlYWRlciAqL31cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiBcImZsZXhcIiwganVzdGlmeUNvbnRlbnQ6IFwic3BhY2UtYmV0d2VlblwiLCBhbGlnbkl0ZW1zOiBcImZsZXgtc3RhcnRcIiwgbWFyZ2luQm90dG9tOiAxMCB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiA5LCBmb250V2VpZ2h0OiA3MDAsIGxldHRlclNwYWNpbmc6IFwiMC4xMmVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogaXNTZWxlY3RlZCA/IFwiI2ZmZlwiIDogXCIjMDAwXCIsIHRleHRUcmFuc2Zvcm06IFwidXBwZXJjYXNlXCIgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7bm9kZS50aXRsZX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiA4LCBmb250V2VpZ2h0OiA2MDAsIGNvbG9yOiBpc1NlbGVjdGVkID8gXCJyZ2JhKDI1NSwyNTUsMjU1LDAuNSlcIiA6IFwiIzg4OFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0dGVyU3BhY2luZzogXCIwLjA4ZW1cIiB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc1NlbGVjdGVkID8gXCJDTElDSyBUTyBDTE9TRVwiIDogXCJDTElDSyBGT1IgREVUQUlMXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIHsvKiBNZXRyaWNzIGdyaWQgKi99XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogXCJncmlkXCIsIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IFwiMWZyIDFmclwiLCBnYXA6IFwiNHB4IDE2cHhcIiB9fT5cbiAgICAgICAgICAgICAgICAgICAgICB7bm9kZS5tZXRyaWNzLnNsaWNlKDAsIDQpLm1hcCgobSwgaSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e2l9IHN0eWxlPXt7IGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAke2lzU2VsZWN0ZWQgPyBcInJnYmEoMjU1LDI1NSwyNTUsMC4xNSlcIiA6IFwiI2U4ZThlOFwifWAsIHBhZGRpbmdCb3R0b206IDQsIG1hcmdpbkJvdHRvbTogMiB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogOCwgZm9udFdlaWdodDogNjAwLCBsZXR0ZXJTcGFjaW5nOiBcIjAuMDdlbVwiLCB0ZXh0VHJhbnNmb3JtOiBcInVwcGVyY2FzZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBpc1NlbGVjdGVkID8gXCJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpXCIgOiBcIiM4ODhcIiwgbWFyZ2luQm90dG9tOiAxIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgI
3177HttLmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogMTEsIGZvbnRXZWlnaHQ6IDYwMCwgY29sb3I6IGlzU2VsZWN0ZWQgPyBcIiNmZmZcIiA6IFwiIzAwMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwibW9ub3NwYWNlXCIsIHRleHRUcmFuc2Zvcm06IFwiY2FwaXRhbGl6ZVwiIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtTdHJpbmcobS52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIHsvKiBUYWdzICovfVxuICAgICAgICAgICAgICAgICAgICB7bm9kZS50YWdzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luVG9wOiAxMCwgZGlzcGxheTogXCJmbGV4XCIsIGZsZXhXcmFwOiBcIndyYXBcIiwgZ2FwOiA0IH19PlxuICAgICAgICAgICAgICAgICAgICAgICAge25vZGUudGFncy5tYXAoKHQsIGkpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtpfSBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFwiMnB4IDdweFwiLCBmb250U2l6ZTogOCwgZm9udFdlaWdodDogNzAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldHRlclNwYWNpbmc6IFwiMC4wOGVtXCIsIHRleHRUcmFuc2Zvcm06IFwidXBwZXJjYXNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBgMXB4IHNvbGlkICR7aXNTZWxlY3RlZCA/IFwicmdiYSgyNTUsMjU1LDI1NSwwLjQpXCIgOiBcIiMwMDBcIn1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBpc1NlbGVjdGVkID8gXCIjZmZmXCIgOiBcIiMwMDBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19Pnt0fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgICAgICAgIHsvKiBBcnJvdyBpbmRpY2F0b3IgZG93biAqL31cbiAgICAgICAgICAgICAgICAgICAge291dEVkZ2VzLmxlbmd0aCA+IDAgJiYgIWlzU2VsZWN0ZWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgcG9zaXRpb246IFwiYWJzb2x1dGVcIiwgYm90dG9tOiAtMTQsIGxlZnQ6IFwiNTAlXCIsIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGVYKC01MCUpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogMTAsIGNvbG9yOiBcIiNhYWFcIiwgekluZGV4OiAxIH19PuKWvDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIERldGFpbCBwYW5lbCAqL31cbiAgICAgIHtzZWxlY3RlZCAmJiAoXG4gICAgICAgIDxkaXYgc3R5bGU9e3sgYm9yZGVyOiBcIjEuNXB4IHNvbGlkICMwMDBcIiwgcGFkZGluZzogMjQsIGFuaW1hdGlvbjogXCJmYWRlSW4gMC4ycyBlYXNlXCIsIG1hcmdpbkJvdHRvbTogMjQgfX0+XG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiBcImZsZXhcIiwganVzdGlmeUNvbnRlbnQ6IFwic3BhY2UtYmV0d2VlblwiLCBhbGlnbkl0ZW1zOiBcImZsZXgtc3RhcnRcIiwgbWFyZ2luQm90dG9tOiAyMCB9fT5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6IDEwLCBmb250V2VpZ2h0OiA3MDAsIGxldHRlclNwYWNpbmc6IFwiMC4xNGVtXCIsIHRleHRUcmFuc2Zvcm06IFwidXBwZXJjYXNlXCIsXG4gICAgICAgICAgICAgICAgY29sb3I6IFwiIzAwMFwiLCBtYXJnaW5Cb3R0b206IDYgfX0+e3NlbGVjdGVkLnRpdGxlfSDigJQgRGV0YWlsIFZpZXc8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogMTMsIGZvbnRXZWlnaHQ6IDMwMCwgY29sb3I6IFwiIzAwMFwiLCBsaW5lSGVpZ2h0OiAxLjcsIG1heFdpZHRoOiA2MDAgfX0+XG4gICAgICAgICAgICAgICAge3NlbGVjdGVkLmRlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXsoKSA9PiBzZXRTZWxlY3RlZE5vZGUobnVsbCl9XG4gICAgICAgICAgICAgIHN0eWxlPXt7IGJhY2tncm91bmQ6IFwiIzAwMFwiLCBjb2xvcjogXCIjZmZmXCIsIGJvcmRlcjogXCJub25lXCIsIHBhZGRpbmc6IFwiNnB4IDE0cHhcIixcbiAgICAgICAgICAgICAgICBmb250U2l6ZTogOSwgZm9udFdlaWdodDogNzAwLCBsZXR0ZXJTcGFjaW5nOiBcIjAuMWVtXCIsIHRleHRUcmFuc2Zvcm06IFwidXBwZXJjYXNlXCIgfX0+XG4gICAgICAgICAgICAgIENMT1NFIOKclVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6IFwiZ3JpZFwiLCBncmlkVGVtcGxhdGVDb2x1bW5zOiBcIjFmciAxZnIgMWZyXCIsIGdhcDogMTYsIG1hcmdpbkJvdHRvbTogMjAgfX0+XG4gICAgICAgICAgICB7c2VsZWN0ZWQubWV0cmljcy5tYXAoKG0sIGkpID0+IChcbiAgICAgICAgICAgICAgPGRpdiBrZXk9e2l9IHN0eWxlPXt7IHBhZGRpbmc6IFwiMTJweCAxNHB4XCIsIGJvcmRlcjogXCIxcHggc29saWQgIzAwMFwiLCBiYWNrZ3JvdW5kOiBcIiNmYWZhZmFcIiB9fT5cbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiA4LCBmb250V2VpZ2h0OiA3MDAsIGxldHRlclNwYWNpbmc6IFwiMC4xZW1cIiwgdGV4dFRyYW5zZm9ybTogXCJ1cHBlcmNhc2VcIixcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiBcIiM4ODhcIiwgbWFyZ2luQm90dG9tOiA2IH19PnttLmxhYmVsfTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6I
3177DE4LCBmb250V2VpZ2h0OiAzMDAsIGNvbG9yOiBcIiMwMDBcIiwgZm9udEZhbWlseTogXCJtb25vc3BhY2VcIixcbiAgICAgICAgICAgICAgICAgIHRleHRUcmFuc2Zvcm06IFwiY2FwaXRhbGl6ZVwiIH19PntTdHJpbmcobS52YWx1ZSl9PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICB7LyogQ29ubmVjdGVkIG5vZGVzICovfVxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiA5LCBmb250V2VpZ2h0OiA3MDAsIGxldHRlclNwYWNpbmc6IFwiMC4xMmVtXCIsIHRleHRUcmFuc2Zvcm06IFwidXBwZXJjYXNlXCIsXG4gICAgICAgICAgICAgIGNvbG9yOiBcIiMwMDBcIiwgbWFyZ2luQm90dG9tOiAxMCB9fT5Db25uZWN0ZWQgU3RhZ2VzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6IFwiZmxleFwiLCBnYXA6IDgsIGZsZXhXcmFwOiBcIndyYXBcIiB9fT5cbiAgICAgICAgICAgICAge2VkZ2VzLmZpbHRlcihlID0+IGUuZnJvbSA9PT0gc2VsZWN0ZWQuaWQgfHwgZS50byA9PT0gc2VsZWN0ZWQuaWQpLm1hcCgoZSwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG90aGVySWQgPSBlLmZyb20gPT09IHNlbGVjdGVkLmlkID8gZS50byA6IGUuZnJvbTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBlLmZyb20gPT09IHNlbGVjdGVkLmlkID8gXCLihpJcIiA6IFwi4oaQXCI7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3RoZXJOb2RlID0gbm9kZXMuZmluZChuID0+IG4uaWQgPT09IG90aGVySWQpO1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2IGtleT17aX0gb25DbGljaz17KCkgPT4gc2V0U2VsZWN0ZWROb2RlKG90aGVySWQpfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBwYWRkaW5nOiBcIjZweCAxMnB4XCIsIGJvcmRlcjogXCIxcHggc29saWQgIzAwMFwiLCBjdXJzb3I6IFwicG9pbnRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IFwiI2ZmZlwiLCBkaXNwbGF5OiBcImZsZXhcIiwgYWxpZ25JdGVtczogXCJjZW50ZXJcIiwgZ2FwOiA2LFxuICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAxMCwgZm9udFdlaWdodDogNjAwLCBsZXR0ZXJTcGFjaW5nOiBcIjAuMDVlbVwiIH19PlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBjb2xvcjogXCIjODg4XCIgfX0+e2RpcmVjdGlvbn08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPntvdGhlck5vZGU/LnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgY29sb3I6IFwiIzg4OFwiLCBmb250U2l6ZTogOSB9fT4oe2UubGFiZWx9KTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cblxuICAgICAgey8qIEVkZ2UgbGVnZW5kICovfVxuICAgICAgPGRpdiBzdHlsZT17eyBib3JkZXJUb3A6IFwiMXB4IHNvbGlkICNlMGUwZTBcIiwgcGFkZGluZ1RvcDogMTYsIG1hcmdpblRvcDogOCB9fT5cbiAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogOSwgZm9udFdlaWdodDogNzAwLCBsZXR0ZXJTcGFjaW5nOiBcIjAuMTJlbVwiLCB0ZXh0VHJhbnNmb3JtOiBcInVwcGVyY2FzZVwiLFxuICAgICAgICAgIGNvbG9yOiBcIiMwMDBcIiwgbWFyZ2luQm90dG9tOiAxMCB9fT5GbG93IENvbm5lY3Rpb25zPC9kaXY+XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogXCJmbGV4XCIsIGZsZXhXcmFwOiBcIndyYXBcIiwgZ2FwOiBcIjZweCAyMHB4XCIgfX0+XG4gICAgICAgICAge2VkZ2VzLm1hcCgoZSwgaSkgPT4gKFxuICAgICAgICAgICAgPGRpdiBrZXk9e2l9IHN0eWxlPXt7IGZvbnRTaXplOiAxMCwgZm9udFdlaWdodDogMzAwLCBjb2xvcjogXCIjMDAwXCIsIGRpc3BsYXk6IFwiZmxleFwiLCBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLCBnYXA6IDUgfX0+XG4gICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGZvbnRXZWlnaHQ6IDYwMCwgZm9udFNpemU6IDkgfX0+e25vZGVzLmZpbmQobj0+bi5pZD09PWUuZnJvbSk/LnRpdGxlPy5zcGxpdChcIiBcIilbMF19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBjb2xvcjogXCIjODg4XCIgfX0+4oaSPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBmb250V2VpZ2h0OiA2MDAsIGZvbnRTaXplOiA5IH19Pntub2Rlcy5maW5kKG49Pm4uaWQ9PT1lLnRvKT8udGl0bGU/LnNwbGl0KFwiIFwiKVswXX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiBcIiNhYWFcIiwgZm9udFNpemU6IDkgfX0+KHtlLmxhYmVsfSk8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gQmVoYXZpb3JIZWF0bWFwKHsgYm0gfSkge1xuICBpZiAoIWJtKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgY2VsbHMgPSBbXG4gICAgeyBsYWJlbDogXCJDb25zdWx0YXRpb25zXCIsICAgICB2YWx1ZTogYm0uY29uc3VsdGF0aW9uX2NvdW50LCAgICAgICAgICAgICAgIG1heDogMTAwLCB1bml0OiBcIlwiIH0sXG4gICAgeyBsYWJlbDogXCJVbmlxdWUgUGF0aWVudHNcIiwgICB2YWx1ZTogYm0udW5pcXVlX3BhdGllbnRzX3NlZW4sICAgICAgICAgICAgIG1heDogODAsICB1bml0OiBcIlwiIH0sXG4gICAgeyBsYWJlbDogXCJJbnZlc3RpZ2F0aW9uIFJhdGVcIix2YWx1ZTogYm0uaW52ZXN0aWdhdGlvbl9vcmRlcl9yYXRlICogMTAwLCAgIG1heDogMTAwLCB1bml0OiBcIiVcIiB9LFxuICAgIHsgbGFiZWw6IFwiTWVkaWNhdGlvbiBSYXRlXCIsICAgdmFsdWU6IGJtLm1lZGljYXRpb25fcHJlc2NyaXB0aW9uX3JhdGUgKiAxMDAsIG1heDogMTAwLCB1bml0OiBcIiVcIiB9LFxuICAgIHsgbGFiZWw6IFwiQ2xpbmljYWwgTm90ZSBSYXRlXCIsdmFsdWU6IGJtLmNsaW5pY2FsX25vdGVfcmF0ZSAqIDEwMCwgICAgICAgICBtYXg6IDEwMCwgdW5pdDogXCIlXCIgfSxcbiAgICB7IGxhYmVsOiBcIkNvbmRpdGlvbnMvVmlzaXRcIiwgIHZhbHVlOiBibS5hdmdfY29uZGl0aW9uc19zdXJmYWNlZF9wZXJfdmlzaXQgKiAyMCwgbWF4OiAxMDAsIHVuaXQ6IGAoJHtibS5hdmdfY29uZGl0aW9uc19zdXJmYWNlZF9wZXJfdmlzaXQ/LnRvRml4ZWQoMSl9KWAgfSxcbiAgICB7IGxhYmVsOiBcIkFnZW50aWMgU2Vzc2lvbnNcIiwgIHZhbHVlOiBibS5hZ2VudGljX2VuZ2FnZW1lbnRfY291bnQsICAgICAgICAgbWF4OiA1MCwgIHVuaXQ6IFwiXCIgfSxcbiAgICB7IGxhYmVsOiBcIkRhdGEgU3VmZmljaWVuY3lcIiwgIHZhbHVlOiBibS53ZWlnaHRlZF9zdWZmaWNpZW5jeV9zY29yZSwgICAgICAgIG1heDogMTAwLCB1bml0OiBcIi8xMDBcIiB9LFxuICBdO1xuICByZXR1cm4gKFxuICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogXCJncmlkXCIsIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IFwicmVwZWF0KDQsIDFmcilcIiwgZ2FwOiAxLCBiYWNrZ3JvdW5kOiBcIiMwMDAwMDBcIiB9fT5cbiAgICAgIHtjZWxscy5tYXAoYyA9PiB7XG4gICAgICAgIGNvbnN0IHBjdCA9IE1hdGgubWluKE1hdGgubWF4KChjLnZhbHVlIHx8IDApIC8gYy5tYXggKiAxMDAsIDApLCAxMDApO1xuICAgICAgICBjb25zdCByYXcgPSBjLmxhYmVsLmluY2x1ZGVzKFwiUmF0ZVwiKSA/IGAkeygoYy52YWx1ZSB8fCAwKSkudG9GaXhlZCgwKX0lYCA6IE1hdGgucm91bmQoYy52YWx1ZSB8fCAwKSArIFwiIFwiICsgYy51bml0O1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxkaXYga2V5PXtjLmxhYmVsfSBzdHlsZT17eyBiYWNrZ3JvdW5kOiBcIiNmZmZmZmZcIiwgcGFkZGluZzogXCIxNnB4IDE0cHhcIiwgcG9zaXRpb246IFwicmVsYXRpdmVcIiwgb3ZlcmZsb3c6IFwiaGlkZGVuXCIgfX0+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHBvc2l0aW9uOiBcImFic29sdXRlXCIsIGJvdHRvbTogMCwgbGVmdDogMCwgaGVpZ2h0OiAzLFxuICAgICAgICAgICAgICB3aWR0aDogYCR7cGN0fSVgLCBiYWNrZ3JvdW5kOiBcIiMwMDAwMDBcIiwgdHJhbnNpdGlvbjogXCJ3aWR0aCAxLjJzIGVhc2VcIiB9fSAvPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogMjIsIGZvbnRXZWlnaHQ6IDMwMCwgY29sb3I6IFwiIzAwMDAwMFwiLCBmb250RmFtaWx5OiBcIm1vbm9zcGFjZVwiLCBsaW5lSGVpZ2h0OiAxIH19PntyYXd9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiA5LCBmb250V2VpZ2h0OiA2MDAsIGNvbG9yOiBcIiMwMDAwMDBcIiwgbGV0dGVyU3BhY2luZzogXCIwLjA5ZW1cIixcbiAgICAgICAgICAgICAgdGV4dFRyYW5zZm9ybTogXCJ1cHBlcmNhc2VcIiwgbWFyZ2luVG9wOiA1IH19PntjLmxhYmVsfTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgICAgfSl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFNhZmV0eVBpcGVsaW5lKHsgc3AgfSkge1xuICBjb25zdCBbYWN0aXZlLCBzZXRBY3RpdmVdID0gdXNlU3RhdGUobnVsbCk7XG4gIGlmICghc3ApIHJldHVybi
3177BudWxsO1xuICBjb25zdCBzdGFnZXMgPSBbXG4gICAge1xuICAgICAgaWQ6IFwiZ3VpZGVsaW5lXCIsIGxhYmVsOiBcIkd1aWRlbGluZSBBbGlnbm1lbnRcIixcbiAgICAgIHN0YXR1czogc3AuZ3VpZGVsaW5lX2FsaWdubWVudD8uY29uZmlkZW5jZSB8fCBcImxvd1wiLFxuICAgICAgZGV0YWlsOiAoc3AuZ3VpZGVsaW5lX2FsaWdubWVudD8ub2JzZXJ2ZWRfY29tcGxpYW50X3BhdHRlcm5zIHx8IFtdKS5zbGljZSgwLDIpLmpvaW4oXCI7IFwiKSB8fCBcIk5vIGRhdGFcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiBcIm1lZGljYXRpb25cIiwgbGFiZWw6IFwiTWVkaWNhdGlvbiBTYWZldHlcIixcbiAgICAgIHN0YXR1czogc3AubWVkaWNhdGlvbl9zYWZldHk/LmNvbmZpZGVuY2UgfHwgXCJsb3dcIixcbiAgICAgIGRldGFpbDogKHNwLm1lZGljYXRpb25fc2FmZXR5Py5vYnNlcnZlZF9zYWZlX3BhdHRlcm5zIHx8IFtdKS5zbGljZSgwLDEpLmpvaW4oXCI7IFwiKSB8fCBcIk5vIGRhdGFcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiBcImRpYWdub3N0aWNcIiwgbGFiZWw6IFwiRGlhZ25vc3RpYyBBY2N1cmFjeVwiLFxuICAgICAgc3RhdHVzOiBzcC5kaWFnbm9zdGljX2FjY3VyYWN5Py5jb25maWRlbmNlIHx8IFwibG93XCIsXG4gICAgICBkZXRhaWw6IChzcC5kaWFnbm9zdGljX2FjY3VyYWN5Py5jb25zaXN0ZW5jeV9vYnNlcnZhdGlvbnMgfHwgW10pLnNsaWNlKDAsMSkuam9pbihcIjsgXCIpIHx8IFwiTm8gZGF0YVwiLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IFwib3V0Y29tZVwiLCBsYWJlbDogXCJPdXRjb21lIFF1YWxpdHlcIixcbiAgICAgIHN0YXR1czogc3Aub3V0Y29tZV9xdWFsaXR5Py5jb25maWRlbmNlIHx8IFwibG93XCIsXG4gICAgICBkZXRhaWw6IChzcC5vdXRjb21lX3F1YWxpdHk/LnBvc2l0aXZlX3NpZ25hbHMgfHwgW10pLnNsaWNlKDAsMSkuam9pbihcIjsgXCIpIHx8IFwiTm8gZGF0YVwiLFxuICAgIH0sXG4gIF07XG4gIHJldHVybiAoXG4gICAgPGRpdj5cbiAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogXCJmbGV4XCIsIGFsaWduSXRlbXM6IFwic3RyZXRjaFwiLCBnYXA6IDAsIG1hcmdpbkJvdHRvbTogMjAgfX0+XG4gICAgICAgIHtzdGFnZXMubWFwKChzLCBpKSA9PiAoXG4gICAgICAgICAgPGRpdiBrZXk9e3MuaWR9IHN0eWxlPXt7IGRpc3BsYXk6IFwiZmxleFwiLCBmbGV4OiAxIH19PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRBY3RpdmUoYWN0aXZlID09PSBzLmlkID8gbnVsbCA6IHMuaWQpfVxuICAgICAgICAgICAgICBzdHlsZT17eyBmbGV4OiAxLCBwYWRkaW5nOiBcIjEycHggMTBweFwiLCBib3JkZXI6IGAxLjVweCBzb2xpZCAjMDAwMDAwYCxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBhY3RpdmUgPT09IHMuaWQgPyBcIiMwMDAwMDBcIiA6IFwiI2ZmZmZmZlwiLFxuICAgICAgICAgICAgICAgIGN1cnNvcjogXCJwb2ludGVyXCIsIHRleHRBbGlnbjogXCJjZW50ZXJcIiwgdHJhbnNpdGlvbjogXCJhbGwgMC4yc1wiIH19PlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHdpZHRoOiA4LCBoZWlnaHQ6IDgsIGJvcmRlclJhZGl1czogXCI1MCVcIixcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBhY3RpdmUgPT09IHMuaWQgPyBcIiNmZmZmZmZcIiA6IFwiIzAwMDAwMFwiLFxuICAgICAgICAgICAgICAgIG1hcmdpbjogXCIwIGF1dG8gN3B4XCIgfX0gLz5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogOSwgZm9udFdlaWdodDogNzAwLCBsZXR0ZXJTcGFjaW5nOiBcIjAuMDllbVwiLCB0ZXh0VHJhbnNmb3JtOiBcInVwcGVyY2FzZVwiLFxuICAgICAgICAgICAgICAgIGNvbG9yOiBhY3RpdmUgPT09IHMuaWQgPyBcIiNmZmZmZmZcIiA6IFwiIzAwMDAwMFwiIH19PntzLmxhYmVsfTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiA5LCBmb250V2VpZ2h0OiA2MDAsXG4gICAgICAgICAgICAgICAgY29sb3I6IGFjdGl2ZSA9PT0gcy5pZCA/IFwicmdiYSgyNTUsMjU1LDI1NSwwLjcpXCIgOiBcIiMwMDAwMDBcIixcbiAgICAgICAgICAgICAgICB0ZXh0VHJhbnNmb3JtOiBcInVwcGVyY2FzZVwiLCBtYXJnaW5Ub3A6IDMgfX0+e3Muc3RhdHVzfTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7aSA8IHN0YWdlcy5sZW5ndGggLSAxICYmIChcbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyB3aWR0aDogMSwgYmFja2dyb3VuZDogXCIjMDAwMDAwXCIgfX0gLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkpfVxuICAgICAgPC9kaXY+XG4gICAgICB7YWN0aXZlICYmICgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHMgPSBzdGFnZXMuZmluZChzID0+IHMuaWQgPT09IGFjdGl2ZSk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBwYWRkaW5nOiBcIjE0cHggMTZweFwiLCBiYWNrZ3JvdW5kOiBcIiNmZmZmZmZcIiwgYm9yZGVyOiBgMXB4IHNvbGlkICMwMDAwMDBgLFxuICAgICAgICAgICAgYm9yZGVyTGVmdDogYDNweCBzb2xpZCAjMDAwMDAwYCwgYW5pbWF0aW9uOiBcImZhZGVJbiAwLjJzIGVhc2VcIiwgbWFyZ2luQm90dG9tOiAxNiB9fT5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6IDksIGZvbnRXZWlnaHQ6IDcwMCwgY29sb3I6IFwiIzAwMDAwMFwiLCBsZXR0ZXJTcGFjaW5nOiBcIjAuMWVtXCIsXG4gICAgICAgICAgICAgIHRleHRUcmFuc2Zvcm06IFwidXBwZXJjYXNlXCIsIG1hcmdpbkJvdHRvbTogNiB9fT57cy5sYWJlbH0g4oCUIERldGFpbDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogMTIsIGZvbnRXZWlnaHQ6IDMwMCwgY29sb3I6IFwiIzAwMDAwMFwiLCBsaW5lSGVpZ2h0OiAxLjcgfX0+e3MuZGV0YWlsfTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgICAgfSkoKX1cbiAgICAgIHsoc3Aucmlza19mbGFncyB8fCBbXSkubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogOSwgZm9udFdlaWdodDogNzAwLCBsZXR0ZXJTcGFjaW5nOiBcIjAuMTJlbVwiLCB0ZXh0VHJhbnNmb3JtOiBcInVwcGVyY2FzZVwiLFxuICAgICAgICAgICAgY29sb3I6IFwiIzAwMDAwMFwiLCBtYXJnaW5Cb3R0b206IDEwIH19PlJpc2sgRmxhZ3MgKHtzcC5yaXNrX2ZsYWdzLmxlbmd0aH0pPC9kaXY+XG4gICAgICAgICAge3NwLnJpc2tfZmxhZ3MubWFwKChmLCBpKSA9PiAoXG4gICAgICAgICAgICA8ZGl2IGtleT17aX0gc3R5bGU9e3sgZGlzcGxheTogXCJmbGV4XCIsIGdhcDogMTIsIHBhZGRpbmc6IFwiMTBweCAxNHB4XCIsIG1hcmdpbkJvdHRvbTogNixcbiAgICAgICAgICAgICAgYm9yZGVyOiBgMXB4IHNvbGlkICMwMDAwMDBgLCBiYWNrZ3JvdW5kOiBcIiNmZmZmZmZcIiwgYm9yZGVyTGVmdDogYDNweCBzb2xpZCAjMDAwMDAwYCB9fT5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmbGV4U2hyaW5rOiAwLCBwYWRkaW5nVG9wOiAyIH19PlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgd2lkdGg6IDcsIGhlaWdodDogNywgYm9yZGVyUmFkaXVzOiBcIjUwJVwiLCBiYWNrZ3JvdW5kOiBcIiMwMDAwMDBcIiB9fSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiA5LCBmb250V2VpZ2h0OiA3MDAsIHRleHRUcmFuc2Zvcm06IFwidXBwZXJjYXNlXCIsIGxldHRlclNwYWNpbmc6IFwiMC4wOGVtXCIsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogXCIjMDAwMDAwXCIsIG1hcmdpbkJvdHRvbTogMyB9fT57KGYuY2F0ZWdvcnkgfHwgXCJcIikucmVwbGFjZSgvXy9nLFwiIFwiKX0gwrcge2Yuc2V2ZXJpdHl9PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogMTIsIGZvbnRXZWlnaHQ6IDMwMCwgY29sb3I6IFwiIzAwMDAwMFwiLCBsaW5lSGVpZ2h0OiAxLjYgfX0+e2YuZGVzY3JpcHRpb259PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuLy8g4pSA4pSAIEV4cGFuZGFibGUgc2VjdGlvbiAob3BlbiBieSBkZWZh
3177dWx0KSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbmZ1bmN0aW9uIFNlY3Rpb24oeyB0aXRsZSwgc3VidGl0bGUsIGNoaWxkcmVuLCBiYWRnZSwgZGVmYXVsdE9wZW4gPSB0cnVlIH0pIHtcbiAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoZGVmYXVsdE9wZW4pO1xuICBjb25zdCBbaG92ZXJlZCwgc2V0SG92ZXJlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIHJldHVybiAoXG4gICAgPGRpdiBzdHlsZT17eyBib3JkZXI6IGAxcHggc29saWQgIzAwMDAwMGAsIGJhY2tncm91bmQ6IFwiI2ZmZmZmZlwiLCBtYXJnaW5Cb3R0b206IDEwIH19PlxuICAgICAgPGRpdiBvbkNsaWNrPXsoKSA9PiBzZXRPcGVuKG8gPT4gIW8pfVxuICAgICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldEhvdmVyZWQodHJ1ZSl9XG4gICAgICAgIG9uTW91c2VMZWF2ZT17KCkgPT4gc2V0SG92ZXJlZChmYWxzZSl9XG4gICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6IFwiZmxleFwiLCBqdXN0aWZ5Q29udGVudDogXCJzcGFjZS1iZXR3ZWVuXCIsIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgICAgcGFkZGluZzogXCIxNHB4IDE4cHhcIiwgY3Vyc29yOiBcInBvaW50ZXJcIiwgdXNlclNlbGVjdDogXCJub25lXCIsXG4gICAgICAgICAgYmFja2dyb3VuZDogaG92ZXJlZCA/IFwiIzAwMDAwMFwiIDogXCJ0cmFuc3BhcmVudFwiLCB0cmFuc2l0aW9uOiBcImJhY2tncm91bmQgMC4yc1wiIH19PlxuICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6IFwiZmxleFwiLCBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLCBnYXA6IDEyIH19PlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAxMiwgZm9udFdlaWdodDogNjAwLCBjb2xvcjogaG92ZXJlZCA/IFwiI2ZmZmZmZlwiIDogXCIjMDAwMDAwXCIsXG4gICAgICAgICAgICAgIGxldHRlclNwYWNpbmc6IFwiMC4wMmVtXCIsIHRyYW5zaXRpb246IFwiY29sb3IgMC4yc1wiIH19Pnt0aXRsZX08L2Rpdj5cbiAgICAgICAgICAgIHtzdWJ0aXRsZSAmJiA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAxMCwgZm9udFdlaWdodDogMzAwLFxuICAgICAgICAgICAgICBjb2xvcjogaG92ZXJlZCA/IFwicmdiYSgyNTUsMjU1LDI1NSwwLjcpXCIgOiBcIiMwMDAwMDBcIixcbiAgICAgICAgICAgICAgbWFyZ2luVG9wOiAyLCB0cmFuc2l0aW9uOiBcImNvbG9yIDAuMnNcIiB9fT57c3VidGl0bGV9PC9kaXY+fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHtiYWRnZSAmJiA8VGFnPntiYWRnZX08L1RhZz59XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiBzdHlsZT17eyBmb250U2l6ZTogMTEsIGNvbG9yOiBob3ZlcmVkID8gXCIjZmZmZmZmXCIgOiBcIiMwMDAwMDBcIiwgZm9udFdlaWdodDogMzAwLFxuICAgICAgICAgIHRyYW5zaXRpb246IFwidHJhbnNmb3JtIDAuMnMsIGNvbG9yIDAuMnNcIixcbiAgICAgICAgICB0cmFuc2Zvcm06IG9wZW4gPyBcInJvdGF0ZSgxODBkZWcpXCIgOiBcIm5vbmVcIiwgZGlzcGxheTogXCJpbmxpbmUtYmxvY2tcIiB9fT7ilrw8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIHtvcGVuICYmIChcbiAgICAgICAgPGRpdiBzdHlsZT17eyBib3JkZXJUb3A6IGAxcHggc29saWQgIzAwMDAwMGAsIHBhZGRpbmc6IFwiMTZweCAxOHB4XCIsIGFuaW1hdGlvbjogXCJmYWRlSW4gMC4ycyBlYXNlXCIgfX0+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEZSb3coeyBsYWJlbCwgdmFsdWUsIGNvbmYsIGV2aWRlbmNlIH0pIHtcbiAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICByZXR1cm4gKFxuICAgIDxkaXYgc3R5bGU9e3sgYm9yZGVyQm90dG9tOiBgMXB4IHNvbGlkICNlMGUwZTBgIH19PlxuICAgICAgPGRpdiBvbkNsaWNrPXsoKSA9PiBldmlkZW5jZSAmJiBzZXRPcGVuKG8gPT4gIW8pfVxuICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiBcImZsZXhcIiwganVzdGlmeUNvbnRlbnQ6IFwic3BhY2UtYmV0d2VlblwiLCBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICAgIHBhZGRpbmc6IFwiOXB4IDBcIiwgY3Vyc29yOiBldmlkZW5jZSA/IFwicG9pbnRlclwiIDogXCJkZWZhdWx0XCIgfX0+XG4gICAgICAgIDxzcGFuIHN0eWxlPXt7IGZvbnRTaXplOiAxMCwgZm9udFdlaWdodDogNjAwLCB0ZXh0VHJhbnNmb3JtOiBcInVwcGVyY2FzZVwiLFxuICAgICAgICAgIGxldHRlclNwYWNpbmc6IFwiMC4wN2VtXCIsIGNvbG9yOiBcIiMwMDAwMDBcIiB9fT57bGFiZWx9PC9zcGFuPlxuICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6IFwiZmxleFwiLCBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLCBnYXA6IDEwIH19PlxuICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGZvbnRTaXplOiAxMiwgZm9udFdlaWdodDogNDAwLCBjb2xvcjogXCIjMDAwMDAwXCIsXG4gICAgICAgICAgICB0ZXh0VHJhbnNmb3JtOiBcImNhcGl0YWxpemVcIiB9fT57KHZhbHVlIHx8IFwi4oCUXCIpLnJlcGxhY2UoL18vZyxcIiBcIil9PC9zcGFuPlxuICAgICAgICAgIHtjb25mICYmIChcbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGRpc3BsYXk6IFwiZmxleFwiLCBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLCBnYXA6IDQsIGZvbnRTaXplOiA5LCBmb250V2VpZ2h0OiA2MDAsIGNvbG9yOiBcIiMwMDAwMDBcIiB9fT5cbiAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgd2lkdGg6IDYsIGhlaWdodDogNiwgYm9yZGVyUmFkaXVzOiBcIjUwJVwiLCBiYWNrZ3JvdW5kOiBcIiMwMDAwMDBcIiwgZmxleFNocmluazogMCB9fSAvPlxuICAgICAgICAgICAgICB7Y29uZn1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtldmlkZW5jZSAmJiA8c3BhbiBzdHlsZT17eyBmb250U2l6ZTogMTAsIGNvbG9yOiBcIiMwMDAwMDBcIiB9fT57b3BlbiA/IFwi4payXCIgO
3177iBcIuKWvFwifTwvc3Bhbj59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICB7b3BlbiAmJiBldmlkZW5jZSAmJiAoXG4gICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luOiBcIjAgMCAxMHB4XCIsIHBhZGRpbmc6IFwiMTBweCAxMnB4XCIsIGJhY2tncm91bmQ6IFwiI2Y4ZjhmOFwiLFxuICAgICAgICAgIGZvbnRTaXplOiAxMSwgZm9udFdlaWdodDogMzAwLCBjb2xvcjogXCIjMDAwMDAwXCIsIGxpbmVIZWlnaHQ6IDEuNyxcbiAgICAgICAgICBib3JkZXJMZWZ0OiBgMnB4IHNvbGlkICMwMDAwMDBgLCBhbmltYXRpb246IFwiZmFkZUluIDAuMTVzIGVhc2VcIiB9fT5cbiAgICAgICAgICB7ZXZpZGVuY2V9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gRGlyQmxvY2soeyBsYWJlbCwgaXRlbXMgfSkge1xuICBpZiAoIWl0ZW1zPy5sZW5ndGgpIHJldHVybiBudWxsO1xuICByZXR1cm4gKFxuICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAyMCB9fT5cbiAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6IDEwLCBmb250V2VpZ2h0OiA3MDAsIGxldHRlclNwYWNpbmc6IFwiMC4xMmVtXCIsIHRleHRUcmFuc2Zvcm06IFwidXBwZXJjYXNlXCIsXG4gICAgICAgIGNvbG9yOiBcIiMwMDAwMDBcIiwgbWFyZ2luQm90dG9tOiA4LCBwYWRkaW5nQm90dG9tOiA2LCBib3JkZXJCb3R0b206IGAxcHggc29saWQgIzAwMDAwMGAgfX0+e2xhYmVsfTwvZGl2PlxuICAgICAge2l0ZW1zLm1hcCgoZCwgaSkgPT4gKFxuICAgICAgICA8ZGl2IGtleT17aX0gc3R5bGU9e3sgZGlzcGxheTogXCJmbGV4XCIsIGdhcDogMTAsIHBhZGRpbmc6IFwiNnB4IDBcIiwgYm9yZGVyQm90dG9tOiBgMXB4IHNvbGlkICNlMGUwZTBgIH19PlxuICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGZvbnRTaXplOiAxMiwgY29sb3I6IFwiIzAwMDAwMFwiLCBmbGV4U2hyaW5rOiAwIH19PuKGkjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBzdHlsZT17eyBmb250U2l6ZTogMTIsIGZvbnRXZWlnaHQ6IDMwMCwgY29sb3I6IFwiIzAwMDAwMFwiLCBsaW5lSGVpZ2h0OiAxLjYgfX0+e2R9PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICkpfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBUb3BCYXIoeyBkYXRhLCBkb2N0b3JJZCwgZ2VuZXJhdGluZywgb25HZW5lcmF0ZSB9KSB7XG4gIGNvbnN0IHNzID0gZGF0YT8uc291bF9zY29yZXMgfHwge307XG4gIGNvbnN0IGludGVsID0gZGF0YT8uaW50ZWxsaWdlbmNlX3Njb3JlIHx8IHt9O1xuICBjb25zdCBibSA9IGRhdGE/LmJlaGF2aW9yX21ldHJpY3MgfHwge307XG4gIHJldHVybiAoXG4gICAgPGRpdiBzdHlsZT17eyBiYWNrZ3JvdW5kOiBcIiMwMDAwMDBcIiwgY29sb3I6IFwiI2ZmZmZmZlwiLCBwYWRkaW5nOiBcIjAgMzJweFwiIH19PlxuICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiBcImZsZXhcIiwganVzdGlmeUNvbnRlbnQ6IFwic3BhY2UtYmV0d2VlblwiLCBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICBib3JkZXJCb3R0b206IFwiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xNSlcIiwgcGFkZGluZ1RvcDogMjAsIHBhZGRpbmdCb3R0b206IDIwIH19PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6IDEwLCBmb250V2VpZ2h0OiA2MDAsIGxldHRlclNwYWNpbmc6IFwiMC4yZW1cIixcbiAgICAgICAgICAgIHRleHRUcmFuc2Zvcm06IFwidXBwZXJjYXNlXCIsIGNvbG9yOiBcInJnYmEoMjU1LDI1NSwyNTUsMC41KVwiLCBtYXJnaW5Cb3R0b206IDQgfX0+U291bCBFbmdpbmU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAyMiwgZm9udFdlaWdodDogMzAwLCBsaW5lSGVpZ2h0OiAxLjIsIGNvbG9yOiBcIiNmZmZmZmZcIiB9fT5cbiAgICAgICAgICAgIHtkYXRhPy5kb2N0b3JfbmFtZSB8fCBcIkRvY3RvciBTb3VsIEludGVsbGlnZW5jZVwifVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6IDEyLCBmb250V2VpZ2h0OiAzMDAsIGNvbG9yOiBcInJnYmEoMjU1LDI1NSwyNTUsMC42KVwiLCBtYXJnaW5Ub3A6IDQgfX0+XG4gICAgICAgICAgICB7ZGF0YT8uc3BlY2lhbGl6YXRpb24gfHwgXCLigJRcIn0gJm5ic3A7wrcmbmJzcDtcbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGZvbnRGYW1pbHk6IFwibW9ub3NwYWNlXCIsIGZvbnRTaXplOiAxMSB9fT57ZG9jdG9ySWR9PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiBcImZsZXhcIiwgYWxpZ25JdGVtczogXCJjZW50ZXJcIiwgZ2FwOiAyNCB9fT5cbiAgICAgICAgICB7ZGF0YSAmJiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICA8UGlsbCB2YWw9e2ludGVsLm92ZXJhbGxfaW50ZWxsaWdlbmNlX3Njb3JlfSBsYWJlbD1cIkludGVsbGlnZW5jZVwiIC8+XG4gICAgICAgICAgICAgIDxQaWxsIHZhbD17c3Mub3ZlcmFsbF9zb3VsX3Njb3JlfSBsYWJlbD1cIlNvdWwgU2NvcmVcIiAvPlxuICAgICAgICAgICAgICA8UGlsbCB2YWw9e2JtLmNvbnN1bHRhdGlvbl9jb3VudH0gbGFiZWw9XCJDb25zdWx0YXRpb25zXCIgLz5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG4gICAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXtvbkdlbmVyYXRlfSBkaXNhYmxlZD17Z2VuZXJhdGluZ31cbiAgICAgICAgICAgIHN0eWxlPXt7IHBhZGRpbmc6IFwiMTBweCAyMnB4XCIsIGJhY2tncm91bmQ6IFwidHJhbnNwYXJlbnRcIiwgYm9yZGVyOiBcIjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuNClcIixcbiAgICAgICAgICAgICAgY29sb3I6IFwiI2ZmZmZmZlwiLCBmb250U2l6ZTogMTAsIGZvbnRXZWlnaHQ6IDYwMCwgbGV0dGVyU3BhY2luZzogXCIwLjEyZW1cIixcbiAgICAgICAgICAgICAgdGV4dFRyYW5zZm9ybTogXCJ1cHBlcmNhc2VcIiwgb3BhY2l0eTogZ2VuZXJhdGluZyA/IDAuNSA6IDEsXG4gICAgICAgICAgICAgIHRyYW5zaXRpb246IFwiYm9yZGVyLWNvbG9yIDAuMnMsIGJhY2tncm91bmQgMC4yc1wiIH19XG4gICAgICAgICAgICBvbk1vdXNlRW50ZXI9e2UgPT4geyBpZighZ2VuZXJhdGluZyl7IGUuY3VycmVudFRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kPVwicmdiYSgyNTUsMjU1LDI1NSwwLjEpXCI7IGUuY3VycmVudFRhcmdldC5zdHlsZS5ib3JkZXJDb2xvcj1cInJnYmEoMjU1LDI1NSwyNTUsMC44KVwiOyB9fX1cbiAgICAgICAgICAgIG9uTW91c2VMZWF2ZT17ZSA9PiB7IGUuY3VycmVudFRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kPVwidHJhbnNwYXJlbnRcIjsgZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJvcmRlckNvbG9yPVwicmdiYSgyNTUsMjU1LDI1NSwwLjQpXCI7IH19PlxuICAgICAgICAgICAge2dlbmVyYXRpbmcgPyBcIkdlbmVyYXRpbmfigKZcIiA6IGRhdGEgPyBcIuKGuyBSZWdlbmVyYXRlXCIgOiBcIisgR2VuZXJhdGUgU291bFwifVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAge2RhdGEgJiYgKFxuICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6IFwiZmxleFwiLCBnYXA6IDMyLCBwYWRkaW5nOiBcIjEycHggMFwiLCBmb250U2l6ZTogMTAsIGZvbnRXZWlnaHQ6IDMwMCxcbiAgICAgICAgICBjb2xvcjogXCJyZ2JhKDI1NSwyNTUsMjU1LDAuNSlcIiB9fT5cbiAgICAgICAgICA8c3Bhbj5EYXRhOiA8YiBzdHlsZT17eyBjb2xvcjogXCIjZmZmZmZmXCIsIGZvbnRXZWlnaHQ6IDYwMCB9fT57KGRhdGEuZGF0YV9zdWZmaWNpZW5jeSB8fCBcImxvd1wiKS50b1VwcGVyQ2FzZSgpfTwvYj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4+UmVjb3JkczogPGIgc3R5bGU9e3sgY29sb3I6IFwiI2ZmZmZmZlwiLCBmb250V2VpZ2h0OiA2MDAgfX0+e2RhdGEuYmVoYXZpb3JhbF9yZWNvcmRfY291bnQgfHwgMH08L2I+PC9zcGFuPlxuICAgICAgICAgIDxzcGFuPkdlbmVyYXRlZDogPGIgc3R5bGU9e3sgY29sb3I6IFwiI2ZmZmZmZlwiLCBmb250V2VpZ2h0OiA2MDAgfX0+XG4gICAgICAgICAgICB7ZGF0YS5nZW5lcmF0ZWRfYXQgPyBuZXcgRGF0ZShkYXRhLmdlbmVyYXRlZF9hdCkudG9Mb2NhbGVEYXRlU3RyaW5nKFwiZW4tR0JcIiwgeyBkYXk6XCJudW1lcmljXCIsIG1vbnRoOlwic2hvcnRcIiwgeWVhcjpcIm51bWVyaWNcIiB9KSA6IFwi4oCUXCJ9XG4gICAgICAgICAgPC9iPjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5jb25zdCBUQUJTID0gW1xuICB7IGlkOiBcIm92ZXJ2aWV3XCIsICAgbGFiZWw6IFwiT3ZlcnZpZXdcIiAgICB9LFxuICB7IGlkOiBcInNvdWxcIiwgICAgICAgbGFiZWw6IFwiQmVoYXZpb3JhbCBQcm9maWxlXCIgfSxcbiAgeyBpZDogXCJxdWFsaXR5XCIsICAgIGxhYmVsOiBcIkNsaW5pY2FsIFFBXCIgfSxcbiAgeyBpZDogXCJmbG93XCIsICAgICAgIGxhYmVsOiBcIkRlY2lzaW9uIEZsb3dcIiB9LFxuICB7IGlkOiBcImRpcmVjdGl2ZXNcIiwgbGFiZWw6IFwiRGlyZWN0aXZlc1wiIH0sXG4gIHsgaWQ6IFwibWFya2Rvd25cIiwgICBsYWJlbDogXCJTT1VMLm1kXCIgICAgIH0sXG5dO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEb2N0b3JTb3VsRGFzaGJvYXJkKCkge1xuICBjb25zdCBkb2N0b3JJZCA9IGdldERvY3RvcklkKCk7XG4gIGNvbnN0IFtkYXRhLCAgICAgI
3177HNldERhdGFdICAgICAgPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2xvYWRpbmcsICAgc2V0TG9hZGluZ10gICA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2dlbmVyYXRpbmcsc2V0R2VuXSAgICAgICA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2Vycm9yLCAgICAgc2V0RXJyb3JdICAgICA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbZ2VuTXNnLCAgICBzZXRHZW5Nc2ddICAgID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFt0YWIsICAgICAgIHNldFRhYl0gICAgICAgPSB1c2VTdGF0ZShcIm92ZXJ2aWV3XCIpO1xuICBjb25zdCBbY29waWVkLCAgICBzZXRDb3BpZWRdICAgID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IGZldGNoUHJvZmlsZSA9IHVzZUNhbGxiYWNrKGFzeW5jIGlkID0+IHtcbiAgICBpZiAoIWlkKSByZXR1cm47XG4gICAgc2V0TG9hZGluZyh0cnVlKTsgc2V0RXJyb3IobnVsbCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyAgPSBhd2FpdCBmZXRjaChgJHtCQVNFX1VSTH0vZ2V0LyR7aWR9YCk7XG4gICAgICBjb25zdCBqc29uID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgIGlmIChyZXMub2sgJiYganNvbi5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSBzZXREYXRhKGpzb24uZGF0YSk7XG4gICAgICBlbHNlIGlmIChyZXMuc3RhdHVzID09PSA0MDQpIHsgc2V0RGF0YShudWxsKTsgc2V0RXJyb3IoXCJObyBzb3VsIHByb2ZpbGUgZm91bmQuIENsaWNrIEdlbmVyYXRlIHRvIGNyZWF0ZSBvbmUuXCIpOyB9XG4gICAgICBlbHNlIHNldEVycm9yKGpzb24uZGV0YWlsIHx8IFwiRmFpbGVkIHRvIGxvYWQgcHJvZmlsZS5cIik7XG4gICAgfSBjYXRjaChlKSB7IHNldEVycm9yKFwiTmV0d29yayBlcnJvcjogXCIgKyBlLm1lc3NhZ2UpOyB9XG4gICAgZmluYWxseSB7IHNldExvYWRpbmcoZmFsc2UpOyB9XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4geyBpZiAoZG9jdG9ySWQpIGZldGNoUHJvZmlsZShkb2N0b3JJZCk7IH0sIFtkb2N0b3JJZCwgZmV0Y2hQcm9maWxlXSk7XG5cbiAgY29uc3QgZ2VuZXJhdGVTb3VsID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmICghZG9jdG9ySWQgfHwgZ2VuZXJhdGluZykgcmV0dXJuO1xuICAgIHNldEdlbih0cnVlKTsgc2V0RXJyb3IobnVsbCk7IHNldEdlbk1zZyhcIkNvbGxlY3RpbmcgYmVoYXZpb3JhbCBkYXRh4oCmXCIpO1xuICAgIHRyeSB7XG4gICAgICBzZXRHZW5Nc2coXCJSdW5uaW5nIExMTSBhbmFseXNpcyDigJQgdGFrZXMgMjDigJM0MCBz4oCmXCIpO1xuICAgICAgY29uc3QgcmVzICA9IGF3YWl0IGZldGNoKGAke0JBU0VfVVJMfS9nZW5lcmF0ZS8ke2RvY3RvcklkfWAsIHsgbWV0aG9kOiBcIlBPU1RcIiB9KTtcbiAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgaWYgKHJlcy5zdGF0dXMgPT09IDQyMikgeyBzZXRFcnJvcihqc29uLm1lc3NhZ2UgKyBcIiBcIiArIChqc29uLnRpcCB8fCBcIlwiKSk7IHJldHVybjsgfVxuICAgICAgaWYgKCFyZXMub2spIHRocm93IG5ldyBFcnJvcihqc29uLmRldGFpbCB8fCBcIkdlbmVyYXRpb24gZmFpbGVkLlwiKTtcbiAgICAgIHNldEdlbk1zZyhcIkRvbmUg4oCUIGxvYWRpbmcgcHJvZmlsZeKAplwiKTtcbiAgICAgIGF3YWl0IGZldGNoUHJvZmlsZShkb2N0b3JJZCk7XG4gICAgfSBjYXRjaChlKSB7IHNldEVycm9yKFwiRXJyb3I6IFwiICsgZS5tZXNzYWdlKTsgfVxuICAgIGZpbmFsbHkgeyBzZXRHZW4oZmFsc2UpOyBzZXRHZW5Nc2cobnVsbCk7IH1cbiAgfTtcblxuICBjb25zdCBzZiAgICA9IGRhdGE/LnNvdWxfZmVhdHVyZXMgICAgICB8fCB7fTtcbiAgY29uc3QgYm0gICAgPSBkYXRhPy5iZWhhdmlvcl9tZXRyaWNzICAgfHwge307XG4gIGNvbnN0IHNzICAgID0gZGF0YT8uc291bF9zY29yZXMgICAgICAgIHx8IHt9O1xuICBjb25zdCBxbSAgICA9IGRhdGE/LnF1YWxpdHlfbWV0cmljcyAgICB8fCB7fTtcbiAgY29uc3QgaW50ZWwgPSBkYXRhPy5pbnRlbGxpZ2VuY2Vfc2NvcmUgfHwge307XG4gIGNvbnN0IHNwICAgID0gZGF0YT8uc2FmZXR5X3Byb2ZpbGUgICAgIHx8IHt9O1xuXG4gIGNvbnN0IHJhZGFyRGF0YSA9IHVzZU1lbW8oKCkgPT4gKHtcbiAgICBFdmlkZW5jZTogIE1hdGgucm91bmQoc3MuZXZpZGVuY2Vfc2NvcmUgICAgICAgICB8fCAwKSxcbiAgICBTYWZldHk6ICAgIE1hdGgucm91bmQoc3Muc2FmZXR5X3Njb3JlICAgICAgICAgICB8fCAwKSxcbiAgICBQYXRpZW50OiAgIE1hdGgucm91bmQoc3MucGF0aWVudF9jZW50ZXJlZF9zY29yZSB8fCAwKSxcbiAgICBEb2NzOiAgICAgIE1hdGgucm91bmQoc3MuZG9jdW1lbnRhdGlvbl9zY29yZSAgICB8fCAwKSxcbiAgICBHdWlkZWxpbmU6IE1hdGgucm91bmQocW0uZ3VpZGVsaW5lX2NvbXBsaWFuY2Vfc2NvcmUgfHwgMCksXG4gIH0pLCBbc3MsIHFtXSk7XG5cbiAgaWYgKCFkb2N0b3JJZCkgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPHN0eWxlPntHfTwvc3R5bGU+XG4gICAgICA8ZGl2IHN0eWxlPXt7IGhlaWdodDogXCIxMDB2aFwiLCBkaXNwbGF5OiBcImZsZXhcIiwgYWxpZ25JdGVtczogXCJjZW50ZXJcIiwganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsXG4gICAgICAgIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsIGdhcDogMTIsIGJhY2tncm91bmQ6IFwiI2ZmZmZmZlwiIH19PlxuICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAxMSwgZm9udFdlaWdodDogNzAwLCBjb2xvcjogXCIjMDAwMDAwXCIsIGxldHRlclNwYWNpbmc6IFwiMC4xNmVtXCIsIHRleHRUcmFuc2Zvcm06IFwidXBwZXJjYXNlXCIgfX0+Tm8gRG9jdG9yIElEPC9kaXY+XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6IDEzLCBmb250V2VpZ2h0OiAzMDAsIGNvbG9yOiBcIiMwMDAwMDBcIiB9fT5BZGQgP2RvY3Rvcl9pZD1ET0MteHh4eCB0byB0aGUgVVJMPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8Lz5cbiAgKTtcblxuICBpZiAobG9hZGluZyB8fCBnZW5lcmF0aW5nKSByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8c3R5bGU+e0d9PC9zdHlsZT5cbiAgICAgIDxkaXYgc3R5bGU9e3sgaGVpZ2h0OiBcIjEwMHZoXCIsIGRpc3BsYXk6IFwiZmxleFwiLCBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLCBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIixcbiAgICAgICAgZmxleERpcmVjdGlvbj
3177ogXCJjb2x1bW5cIiwgZ2FwOiAyMCwgYmFja2dyb3VuZDogXCIjZmZmZmZmXCIgfX0+XG4gICAgICAgIDxTcGlubmVyIHNpemU9ezQwfSAvPlxuICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAxMSwgZm9udFdlaWdodDogMzAwLCBjb2xvcjogXCIjMDAwMDAwXCIsIGxldHRlclNwYWNpbmc6IFwiMC4xZW1cIiB9fT5cbiAgICAgICAgICB7Z2VuZXJhdGluZyA/IChnZW5Nc2cgfHwgXCJHRU5FUkFUSU5HIFNPVUwgUFJPRklMReKAplwiKSA6IFwiTE9BRElORyBQUk9GSUxF4oCmXCJ9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7Z2VuZXJhdGluZyAmJiBnZW5Nc2cgJiYgKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6IDEwLCBmb250V2VpZ2h0OiAzMDAsIGNvbG9yOiBcIiMwMDAwMDBcIiwgbWF4V2lkdGg6IDMwMCwgdGV4dEFsaWduOiBcImNlbnRlclwiIH19PntnZW5Nc2d9PC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICA8Lz5cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8c3R5bGU+e0d9PC9zdHlsZT5cbiAgICAgIDxkaXYgc3R5bGU9e3sgbWluSGVpZ2h0OiBcIjEwMHZoXCIsIGJhY2tncm91bmQ6IFwiI2ZmZmZmZlwiLCBmb250RmFtaWx5OiBcIidPcGVuIFNhbnMnLHNhbnMtc2VyaWZcIiB9fT5cblxuICAgICAgICA8VG9wQmFyIGRhdGE9e2RhdGF9IGRvY3RvcklkPXtkb2N0b3JJZH0gZ2VuZXJhdGluZz17Z2VuZXJhdGluZ30gb25HZW5lcmF0ZT17Z2VuZXJhdGVTb3VsfSAvPlxuXG4gICAgICAgIHtlcnJvciAmJiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBiYWNrZ3JvdW5kOiBcIiNmZmZmZmZcIiwgYm9yZGVyQm90dG9tOiBgMXB4IHNvbGlkICMwMDAwMDBgLCBwYWRkaW5nOiBcIjEycHggMzJweFwiLFxuICAgICAgICAgICAgZm9udFNpemU6IDEyLCBmb250V2VpZ2h0OiAzMDAsIGNvbG9yOiBcIiMwMDAwMDBcIiwgYm9yZGVyTGVmdDogXCI0cHggc29saWQgIzAwMDAwMFwiIH19PlxuICAgICAgICAgICAge2Vycm9yfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuXG4gICAgICAgIHshZGF0YSAmJiAhbG9hZGluZyAmJiAhZXJyb3IgJiYgKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogXCJmbGV4XCIsIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLFxuICAgICAgICAgICAgZmxleERpcmVjdGlvbjogXCJjb2x1bW5cIiwgZ2FwOiAxNiwgaGVpZ2h0OiBcIjYwdmhcIiB9fT5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6IDExLCBmb250V2VpZ2h0OiA3MDAsIGNvbG9yOiBcIiMwMDAwMDBcIiwgbGV0dGVyU3BhY2luZzogXCIwLjE2ZW1cIiwgdGV4dFRyYW5zZm9ybTogXCJ1cHBlcmNhc2VcIiB9fT5ObyBQcm9maWxlPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAxMywgZm9udFdlaWdodDogMzAwLCBjb2xvcjogXCIjMDAwMDAwXCIgfX0+Q2xpY2sgR2VuZXJhdGUgdG8gYnVpbGQgdGhpcyBkb2N0b3IncyBzb3VsIHByb2ZpbGUuPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG5cbiAgICAgICAge2RhdGEgJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICB7LyogVEFCIEJBUiAqL31cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgYmFja2dyb3VuZDogXCIjZmZmZmZmXCIsIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAjMDAwMDAwYCwgcGFkZGluZzogXCIwIDMycHhcIixcbiAgICAgICAgICAgICAgZGlzcGxheTogXCJmbGV4XCIsIGdhcDogMCwgb3ZlcmZsb3dYOiBcImF1dG9cIiB9fT5cbiAgICAgICAgICAgICAge1RBQlMubWFwKHQgPT4gKFxuICAgICAgICAgICAgICAgIDxidXR0b24ga2V5PXt0LmlkfSBvbkNsaWNrPXsoKSA9PiBzZXRUYWIodC5pZCl9XG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyBwYWRkaW5nOiBcIjE0cHggMjBweFwiLCBmb250U2l6ZTogMTEsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IHRhYiA9PT0gdC5pZCA/IDcwMCA6IDQwMCxcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogdGFiID09PSB0LmlkID8gXCIjMDAwMDAwXCIgOiBcInRyYW5zcGFyZW50XCIsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0YWIgPT09IHQuaWQgPyBcIiNmZmZmZmZcIiA6IFwiIzAwMDAwMFwiLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXI6IFwibm9uZVwiLCBsZXR0ZXJTcGFjaW5nOiBcIjAuMDRlbVwiLCB3aGl0ZVNwYWNlOiBcIm5vd3JhcFwiLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiBcImFsbCAwLjE1c1wiIH19PlxuICAgICAgICAgICAgICAgICAge3QubGFiZWx9XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBDT05URU5UICovfVxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBwYWRkaW5nOiBcIjI4cHggMzJweFwiLCBtYXhXaWR0aDogMTQwMCwgbWFyZ2luOiBcIjAgYXV0b1wiLCBhbmltYXRpb246IFwiZmFkZUluIDAuM3MgZWFzZVwiIH19PlxuXG4gICAgICAgICAgICAgIHsvKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgT1ZFUlZJRVcg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovfVxuICAgICAgICAgICAgICB7dGFiID09PSBcIm92ZXJ2aWV3XCIgJiYgKFxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogXCJmbGV4XCIsIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsIGdhcDogMTAgfX0+XG5cbiAgICAgICAgICAgICAgICAgIDxTZWN0aW9uIHRpdGxlPVwiVW5pZmllZCBJbnRlbGxpZ2VuY2UgU2NvcmVcIiBzdWJ0aXRsZT1cIkNvbWJpbmVkIFNvdWwgKyBDbGluaWNhbCBRQSBtZXRyaWNcIiBkZWZhdWx0T3Blbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiBcImdyaWRcIiwgZ3JpZFRlbXBsYXRlQ29sdW1uczogXCJhdXRvIDFmclwiLCBnYXA6IDMyLCBhbGlnbkl0ZW1zOiBcImNlbnRlclwiIH19PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogXCJmbGV4XCIsIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEdhdWdlIHNjb3JlPXtpbnRlbC5vdmVyYWxsX2ludGVsbGlnZW5jZV9zY29yZX0gc2l6ZT17MjAwfSAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6IFwiZ3JpZFwiLCBncmlkVGVtcGxhdGVDb2x1bW5zOiBcIjFmciAxZnJcIiwgZ2FwOiAxLCBiYWNrZ3JvdW5kOiBcIiMwMDAwMDBcIiwgbWFyZ2luQm90dG9tOiAxNiB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGw6IFwiU291bFwiLCAgICAgICB2OiBpbnRlbC5zb3VsX3Njb3JlLCAgICAgICB3OiBcIjQwJVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsOiBcIkd1aWRlbGluZVwiLCAgdjogaW50ZWwuZ3VpZGVsaW5lX3Njb3JlLCAgdzogXCIyMCVcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgI
3177HsgbDogXCJNZWRpY2F0aW9uXCIsIHY6IGludGVsLm1lZGljYXRpb25fc2NvcmUsICB3OiBcIjE1JVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsOiBcIkRpYWdub3N0aWNcIiwgdjogaW50ZWwuZGlhZ25vc3RpY19zY29yZSwgIHc6IFwiMTUlXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGw6IFwiT3V0Y29tZVwiLCAgICB2OiBpbnRlbC5vdXRjb21lX3Njb3JlLCAgICAgdzogXCIxMCVcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBdLm1hcChpdCA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e2l0Lmx9IHN0eWxlPXt7IGJhY2tncm91bmQ6IFwiI2ZmZmZmZlwiLCBwYWRkaW5nOiBcIjEwcHggMTRweFwiIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogMTgsIGZvbnRXZWlnaHQ6IDMwMCwgZm9udEZhbWlseTogXCJtb25vc3BhY2VcIiwgY29sb3I6IFwiIzAwMDAwMFwiIH19PntNYXRoLnJvdW5kKGl0LnZ8fDApfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogOCwgZm9udFdlaWdodDogNjAwLCBjb2xvcjogXCIjMDAwMDAwXCIsIGxldHRlclNwYWNpbmc6IFwiMC4wOGVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRUcmFuc2Zvcm06IFwidXBwZXJjYXNlXCIsIG1hcmdpblRvcDogMiB9fT57aXQubH0gwrcge2l0Lnd9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6IFwiZ3JpZFwiLCBncmlkVGVtcGxhdGVDb2x1bW5zOiBcIjFmciAxZnJcIiwgZ2FwOiBcIjAgNDBweFwiIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8QmFyIGxhYmVsPVwiU291bCAoQmVoYXZpb3JhbClcIiB2YWx1ZT17aW50ZWwuc291bF9zY29yZX0gYm9sZCAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8QmFyIGxhYmVsPVwiR3VpZGVsaW5lIENvbXBsaWFuY2VcIiB2YWx1ZT17aW50ZWwuZ3VpZGVsaW5lX3Njb3JlfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8QmFyIGxhYmVsPVwiTWVkaWNhdGlvbiBTYWZldHlcIiB2YWx1ZT17aW50ZWwubWVkaWNhdGlvbl9zY29yZX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEJhciBsYWJlbD1cIkRpYWdub3N0aWMgUXVhbGl0eVwiIHZhbHVlPXtpbnRlbC5kaWFnbm9zdGljX3Njb3JlfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8QmFyIGxhYmVsPVwiT3V0Y29tZSBRdWFsaXR5XCIgdmFsdWU9e2ludGVsLm91dGNvbWVfc2NvcmV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L1NlY3Rpb24+XG5cbiAgICAgICAgICAgICAgICAgIDxTZWN0aW9uIHRpdGxlPVwiU291bCBEaW1lbnNpb25zXCIgc3VidGl0bGU9XCJSYWRhciB2aWV3IGFjcm9zcyBjb3JlIGNsaW5pY2FsIGRpbWVuc2lvbnNcIiBkZWZhdWx0T3Blbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiBcImdyaWRcIiwgZ3JpZFRlbXBsYXRlQ29sdW1uczogXCJhdXRvIDFmclwiLCBnYXA6IDMyLCBhbGlnbkl0ZW1zOiBcImNlbnRlclwiIH19PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogXCJmbGV4XCIsIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFJhZGFyIGRhdGE9e3JhZGFyRGF0YX0gc2l6ZT17MjQwfSAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6IFwiZmxleFwiLCBqdXN0aWZ5Q29udGVudDogXCJzcGFjZS1hcm91bmRcIiwgbWFyZ2luQm90dG9tOiAyNCB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFJpbmcgdmFsdWU9e3NzLm92ZXJhbGxfc291bF9zY29yZX0gc2l6ZT17NzJ9IGxhYmVsPVwiU291bFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxSaW5nIHZhbHVlPXtxbS5vdmVyYWxsX3F1YWxpdHlfc2NvcmV9IHNpemU9ezcyfSBsYWJlbD1cIlFBXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFJpbmcgdmFsdWU9e2ludGVsLm92ZXJhbGxfaW50ZWxsaWdlbmNlX3Njb3JlfSBzaXplPXs3Mn0gbGFiZWw9XCJJbnRlbGxpZ2VuY2VcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6IFwiZ3JpZFwiLCBncmlkVGVtcGxhdGVDb2x1bW5zOiBcIjFmciAxZnJcIiwgZ2FwOiAxNiB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFJpbmcgdmFsdWU9e3NzLmV2aWRlbmNlX3Njb3JlfSAgICAgICAgIHNpemU9ezY0fSBsYWJlbD1cIkV2aWRlbmNlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFJpbmcgdmFsdWU9e3NzLnNhZmV0eV9zY29yZX0gICAgICAgICAgIHNpemU9ezY0fSBsYWJlbD1cIlNhZmV0eVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxSaW5nIHZhbHVlPXtzcy5wYXRpZW50X2NlbnRlcmVkX3Njb3JlfSBzaXplPXs2NH0gbGFiZWw9XCJQYXRpZW50XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFJpbmcgdmFsdWU9e3NzLmRvY3VtZW50YXRpb25fc2NvcmV9ICAgIHNpemU9ezY0fSBsYWJlbD1cIkRvY3NcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9TZWN0aW9uPlxuXG4gICAgICAgICAgICAgICAgICA8U2VjdGlvbiB0aXRsZT1cIlF1aWNrIFByb2ZpbGUgU3VtbWFyeVwiIHN1YnRpdGxlPVwiQXQtYS1nbGFuY2UgY2xpbmljYWwgYXR0cmlidXRlc1wiIGRlZmF1bHRPcGVuPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6IFwiZ3JpZFwiLCBncmlkVGVtcGxhdGVDb2x1bW5zOiBcIjFmciAxZnIgMWZyXCIsIGdhcDogXCIwIDQwcHhcIiB9fT5cbiAgICAgICAgICAgICAgICAgICAgICB7c2Yucmlza19wcm9maWxlICYmIFt
3177cbiAgICAgICAgICAgICAgICAgICAgICAgIHsgazogXCJSaXNrIHByb2ZpbGVcIiwgICAgICAgdjogc2Yucmlza19wcm9maWxlPy52YWx1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBrOiBcIkRlY2lzaW9uIHN0eWxlXCIsICAgICB2OiBzZi5kZWNpc2lvbl9zdHlsZT8ucHJpbWFyeSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBrOiBcIkludGVydmVudGlvblwiLCAgICAgICB2OiBzZi50cmVhdG1lbnRfcGhpbG9zb3BoeT8uaW50ZXJ2ZW50aW9uX3RocmVzaG9sZCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBrOiBcIkludmVzdGlnYXRpb25cIiwgICAgICB2OiBzZi5kaWFnbm9zdGljX3JpZ29yPy5pbnZlc3RpZ2F0aW9uX2ludGVuc2l0eSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBrOiBcIkRvY3VtZW50YXRpb25cIiwgICAgICB2OiBzZi5kb2N1bWVudGF0aW9uX3F1YWxpdHk/LmRldGFpbF9sZXZlbCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBrOiBcIlRyZWF0bWVudCBhcHByb2FjaFwiLCB2OiBzZi50cmVhdG1lbnRfcGhpbG9zb3BoeT8uYXBwcm9hY2ggfSxcbiAgICAgICAgICAgICAgICAgICAgICBdLm1hcCgoeyBrLCB2IH0pID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtrfSBzdHlsZT17eyBkaXNwbGF5OiBcImZsZXhcIiwganVzdGlmeUNvbnRlbnQ6IFwic3BhY2UtYmV0d2VlblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBcIjdweCAwXCIsIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAjZTBlMGUwYCB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZm9udFNpemU6IDksIGZvbnRXZWlnaHQ6IDYwMCwgY29sb3I6IFwiIzAwMDAwMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRUcmFuc2Zvcm06IFwidXBwZXJjYXNlXCIsIGxldHRlclNwYWNpbmc6IFwiMC4wN2VtXCIgfX0+e2t9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBmb250U2l6ZTogMTEsIGZvbnRXZWlnaHQ6IDQwMCwgY29sb3I6IFwiIzAwMDAwMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRUcmFuc2Zvcm06IFwiY2FwaXRhbGl6ZVwiIH19Pnsodnx8XCLigJRcIikucmVwbGFjZSgvXy9nLFwiIFwiKX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L1NlY3Rpb24+XG5cbiAgICAgICAgICAgICAgICAgIDxTZWN0aW9uIHRpdGxlPVwiQWN0aXZpdHkgTWV0cmljc1wiIHN1YnRpdGxlPVwiUmVhbCBvYnNlcnZlZCBkYXRhIGZyb20gdGhlIGRvY3RvcidzIHByYWN0aWNlXCIgZGVmYXVsdE9wZW4+XG4gICAgICAgICAgICAgICAgICAgIDxCZWhhdmlvckhlYXRtYXAgYm09e2JtfSAvPlxuICAgICAgICAgICAgICAgICAgPC9TZWN0aW9uPlxuXG4gICAgICAgICAgICAgICAgICB7ZGF0YS5vYnNlcnZlZF9iZWhhdmlvcl9yZXBvcnQ/LmtleV9vYnNlcnZhdGlvbnM/Lmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8U2VjdGlvbiB0aXRsZT1cIktleSBCZWhhdmlvcmFsIE9ic2VydmF0aW9uc1wiIHN1YnRpdGxlPVwiTExNLWV4dHJhY3RlZCBwYXR0ZXJucyBmcm9tIGNsaW5pY2FsIGFjdGl2aXR5XCIgZGVmYXVsdE9wZW4+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiBcImdyaWRcIiwgZ3JpZFRlbXBsYXRlQ29sdW1uczogXCIxZnIgMWZyIDFmclwiLCBnYXA6IDEyIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAge2RhdGEub2JzZXJ2ZWRfYmVoYXZpb3JfcmVwb3J0LmtleV9vYnNlcnZhdGlvbnMubWFwKChvLCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtpfSBzdHlsZT17eyBwYWRkaW5nOiBcIjEycHggMTRweFwiLCBiYWNrZ3JvdW5kOiBcIiNmZmZmZmZcIiwgYm9yZGVyOiBgMXB4IHNvbGlkICMwMDAwMDBgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6IDEwLCBmb250V2VpZ2h0OiA3MDAsIGNvbG9yOiBcIiMwMDAwMDBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwibW9ub3NwYWNlXCIsIG1hcmdpbkJvdHRvbTogNiB9fT4je1N0cmluZyhpKzEpLnBhZFN0YXJ0KDIsXCIwXCIpfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6IDEyLCBmb250V2VpZ2h0OiAzMDAsIGNvbG9yOiBcIiMwMDAwMDBcIiwgbGluZUhlaWdodDogMS42IH19PntvfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L1NlY3Rpb24+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgIHsvKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgQkVIQVZJT1JBTCBQUk9GSUxFIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL31cbiAgICAgICAgICAgICAge3RhYiA9PT0gXCJzb3VsXCIgJiYgKFxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogXCJmbGV4XCIsIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsIGdhcDogMTAgfX0+XG5cbiAgICAgICAgICAgICAgICAgIDxTZWN0aW9uIHRpdGxlPVwiQmVoYXZpb3JhbCBGZWF0dXJlc1wiIHN1YnRpdGxlPVwiQ2xpY2sgYW55IHJvdyB3aXRoIGV2aWRlbmNlIHRvIGV4cGFuZCBpdFwiIGRlZmF1bHRPcGVuPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6IFwiZ3JpZFwiLCBncmlkVGVtcGxhdGVDb2x1bW5zOiBcIjFmciAxZnJcIiwgZ2FwOiBcIjAgNDBweFwiIH19PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RlJvdyBsYWJlbD1cIlJpc2sgUHJvZmlsZVwiICAgICAgICAgICAgdmFsdWU9e3NmLnJpc2tfcHJvZmlsZT8udmFsdWV9ICAgICAgICAgICAgICAgICAgICAgICAgY29uZj17c2Yucmlza19wcm9maWxlPy5jb25maWRlbmNlfSAgICAgICAgICAgZXZpZGVuY2U9e3NmLnJpc2tfcHJvZmlsZT8uZXZpZGVuY2V9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RlJvdyBsYWJlbD1cIkRlY2lzaW9uIFN0eWxlXCIgICAgICAgICAgdmFsdWU9e3NmLmRlY2lzaW9uX3N0eWxlPy5wcmltYXJ5fSAgICAgICAgICAgICAgICAgICAgY29uZj17c2YuZGVjaXNpb25fc3R5bGU/LmNvbmZpZGVuY2V9ICAgICAgICAgZXZpZGVuY2U9e3NmLmRlY2lzaW9uX3N0eWxlPy5ldmlkZW5jZX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGUm93IGxhYmVsPVwiVHJlYXRtZW50IFBoaWxvc29waHlcIiAgICB2YWx1ZT17c2YudHJlYXRtZW50X3BoaWxvc29waHk/LmFwcHJvYWNofSAgICAgICAgICAgICBjb25mPXtzZi50cmVhdG1lbnRfcGhpbG9zb3BoeT8uY29uZmlkZW5jZX0gICBldmlkZW5jZT17c2YudHJlYXRtZW50X3BoaWxvc29waHk/LmV2aWRlbmNlfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZSb3cgbGFiZWw9XCJJbnRlcnZlbnRpb24gVGhyZXNob2xkXCIgIHZhbHVlPXtzZi50cmVhdG1lbnRfcGhpbG9zb3BoeT8uaW50ZXJ2ZW50aW9uX3RocmVzaG9sZH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZSb3cgbGFiZWw9XCJJbnZlc3RpZ2F0aW9uIEludGVuc2l0eVwiIHZhbHVlPXtzZi5kaWFnbm9zdGljX3JpZ29yPy5pbnZlc3RpZ2F0aW9uX2ludGVuc2l0eX0gIGNvbmY9e3NmLmRpYWdub3N0aWNfcmlnb3I/LmNvbmZpZGVuY2V9ICAgICAgIGV2aWRlbmNlPXtzZi5kaWFnbm9zdGljX3JpZ29yPy5ldmlkZW5jZX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGUm93IGxhYmVsPVwiRXNjYWxhdGlvbiBQYXR0ZXJuXCIgICAgICB2YWx1ZT17c2YuZGlhZ25vc3RpY19yaWdvcj8uZXNjYWxhdGlvbl9wYXR0ZXJufSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZSb3cgbGFiZWw9XCJEb2N1bWVudGF0aW9uIERldGFpbFwiICAgIHZhbHVlPXtzZi5kb2N1bWVudGF0aW9uX3F1YWxpdHk/LmRldGFpbF9sZXZlbH0gICAgICAgIGNvbmY9e3NmLmRvY3VtZW50YXRpb25fcXVhbGl0eT8uY29uZmlkZW5jZX0gIGV2aWRlbmNlPXtzZi5kb2N1bWVudGF0aW9uX3F1YWxpdHk/LmV2aWRlbmNlfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZSb3cgbGFiZWw9XCJTYWZldHkgQ2hlY2sgRnJlcS5cIiAgICAgI
3177HZhbHVlPXtzZi5zYWZldHlfYmVoYXZpb3JzPy5kb3VibGVfY2hlY2tfZnJlcXVlbmN5fSAgIGNvbmY9e3NmLnNhZmV0eV9iZWhhdmlvcnM/LmNvbmZpZGVuY2V9ICAgICAgIGV2aWRlbmNlPXtzZi5zYWZldHlfYmVoYXZpb3JzPy5ldmlkZW5jZX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L1NlY3Rpb24+XG5cbiAgICAgICAgICAgICAgICAgIDxTZWN0aW9uIHRpdGxlPVwiQ29yZSBWYWx1ZXNcIiBzdWJ0aXRsZT1cIldoYXQgdGhpcyBkb2N0b3IgZnVuZGFtZW50YWxseSBjYXJlcyBhYm91dFwiIGRlZmF1bHRPcGVuPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogMTAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgeyhzZi5jb3JlX3ZhbHVlcz8udmFsdWVzIHx8IFtdKS5tYXAoKHYsaSkgPT4gPFRhZyBrZXk9e2l9IGZpbGxlZD57dn08L1RhZz4pfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3NmLmNvcmVfdmFsdWVzPy5ldmlkZW5jZSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogMTEsIGZvbnRXZWlnaHQ6IDMwMCwgY29sb3I6IFwiIzAwMDAwMFwiLCBmb250U3R5bGU6IFwiaXRhbGljXCIsIGxpbmVIZWlnaHQ6IDEuNywgbWFyZ2luVG9wOiAxMCB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtzZi5jb3JlX3ZhbHVlcy5ldmlkZW5jZX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDwvU2VjdGlvbj5cblxuICAgICAgICAgICAgICAgICAgPFNlY3Rpb24gdGl0bGU9XCJDbGluaWNhbCBQcmluY2lwbGVzXCIgc3VidGl0bGU9XCJIb3cgdGhpcyBkb2N0b3IgYXBwcm9hY2hlcyBjbGluaWNhbCBkZWNpc2lvbnNcIiBkZWZhdWx0T3Blbj5cbiAgICAgICAgICAgICAgICAgICAgeyhzZi5jbGluaWNhbF9wcmluY2lwbGVzPy5wcmluY2lwbGVzIHx8IFtdKS5tYXAoKHAsaSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtpfSBzdHlsZT17eyBkaXNwbGF5OiBcImZsZXhcIiwgZ2FwOiAxMCwgcGFkZGluZzogXCI3cHggMFwiLCBib3JkZXJCb3R0b206IGAxcHggc29saWQgI2UwZTBlMGAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBmb250U2l6ZTogMTIsIGNvbG9yOiBcIiMwMDAwMDBcIiwgZmxleFNocmluazogMCB9fT7ihpI8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBmb250U2l6ZTogMTIsIGZvbnRXZWlnaHQ6IDMwMCwgY29sb3I6IFwiIzAwMDAwMFwiLCBsaW5lSGVpZ2h0OiAxLjYgfX0+e3B9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDwvU2VjdGlvbj5cblxuICAgICAgICAgICAgICAgICAgPFNlY3Rpb24gdGl0bGU9XCJSZWQgTGluZXNcIiBzdWJ0aXRsZT1cIk5vbi1uZWdvdGlhYmxlcyDigJQgd2hhdCB0aGlzIGRvY3RvciB3aWxsIG5ldmVyIGNvbXByb21pc2Ugb25cIiBiYWRnZT17YCR7KHNmLnJlZF9saW5lcz8ubGluZXN8fFtdKS5sZW5ndGh9IHJ1bGVzYH0gZGVmYXVsdE9wZW4+XG4gICAgICAgICAgICAgICAgICAgIHsoc2YucmVkX2xpbmVzPy5saW5lcyB8fCBbXSkubWFwKChsLGkpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17aX0gc3R5bGU9e3sgZGlzcGxheTogXCJmbGV4XCIsIGdhcDogMTAsIHBhZGRpbmc6IFwiOHB4IDBcIiwgYm9yZGVyQm90dG9tOiBgMXB4IHNvbGlkICNlMGUwZTBgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZm9udFNpemU6IDExLCBjb2xvcjogXCIjMDAwMDAwXCIsIGZvbnRXZWlnaHQ6IDcwMCwgZmxleFNocmluazogMCwgbWFyZ2luVG9wOiAxIH19PuKclTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGZvbnRTaXplOiAxMiwgZm9udFdlaWdodDogMzAwLCBjb2xvcjogXCIjMDAwMDAwXCIsIGxpbmVIZWlnaHQ6IDEuNiB9fT57bH08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPC9TZWN0aW9uPlxuXG4gICAgICAgICAgICAgICAgICB7ZGF0YS5wcmlvcml0eV9vcmRlcj8ub3JkZXJlZF9wcmlvcml0aWVzPy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgICAgICAgPFNlY3Rpb24gdGl0bGU9XCJDbGluaWNhbCBQcmlvcml0eSBPcmRlclwiIHN1YnRpdGxlPVwiV2hlbiBwcmlvcml0aWVzIGNvbmZsaWN0LCBmb2xsb3cgdGhpcyBvcmRlclwiIGRlZmF1bHRPcGVuPlxuICAgICAgICAgICAgICAgICAgICAgIHtkYXRhLnByaW9yaXR5X29yZGVyLm9yZGVyZWRfcHJpb3JpdGllcy5tYXAoKHAsaSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e2l9IHN0eWxlPXt7IGRpc3BsYXk6IFwiZmxleFwiLCBnYXA6IDE0LCBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBcIjhweCAwXCIsIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAjZTBlMGUwYCB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgd2lkdGg6IDI0LCBoZWlnaHQ6IDI0LCBib3JkZXI6IGAxLjVweCBzb2xpZCAjMDAwMDAwYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImZsZXhcIiwgYWxpZ25JdGVtczogXCJjZW50ZXJcIiwganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IDEwLCBmb250V2VpZ2h0OiA3MDAsIGZsZXhTaHJpbms6IDAsIGNvbG9yOiBcIiMwMDAwMDBcIiB9fT57aSsxfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZm9udFNpemU6I
3177DEyLCBmb250V2VpZ2h0OiAzMDAsIGNvbG9yOiBcIiMwMDAwMDBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0VHJhbnNmb3JtOiBcImNhcGl0YWxpemVcIiB9fT57cC5yZXBsYWNlKC9fL2csXCIgXCIpfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgIHtkYXRhLnByaW9yaXR5X29yZGVyLmNvbmZsaWN0X3Jlc29sdXRpb25fcnVsZSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogMTIsIGZvbnRTaXplOiAxMSwgZm9udFdlaWdodDogMzAwLCBjb2xvcjogXCIjMDAwMDAwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTdHlsZTogXCJpdGFsaWNcIiwgbGluZUhlaWdodDogMS42IH19PntkYXRhLnByaW9yaXR5X29yZGVyLmNvbmZsaWN0X3Jlc29sdXRpb25fcnVsZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L1NlY3Rpb24+XG4gICAgICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgICAgICB7ZGF0YS5zYWZldHlfcnVsZXMgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8U2VjdGlvbiB0aXRsZT1cIlNhZmV0eSBSdWxlc1wiIHN1YnRpdGxlPVwiSGFyZCBydWxlcyBlbmNvZGVkIGludG8gdGhlIEFJIGFnZW50XCIgZGVmYXVsdE9wZW4+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiBcImdyaWRcIiwgZ3JpZFRlbXBsYXRlQ29sdW1uczogXCIxZnIgMWZyXCIsIGdhcDogMjAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiA5LCBmb250V2VpZ2h0OiA3MDAsIGNvbG9yOiBcIiMwMDAwMDBcIiwgbGV0dGVyU3BhY2luZzogXCIwLjFlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRUcmFuc2Zvcm06IFwidXBwZXJjYXNlXCIsIG1hcmdpbkJvdHRvbTogMTAgfX0+TmV2ZXI8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgeyhkYXRhLnNhZmV0eV9ydWxlcy5uZXZlciB8fCBbXSkubWFwKChyLGkpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17aX0gc3R5bGU9e3sgZm9udFNpemU6IDExLCBmb250V2VpZ2h0OiAzMDAsIGNvbG9yOiBcIiMwMDAwMDBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFwiNnB4IDBcIiwgYm9yZGVyQm90dG9tOiBgMXB4IHNvbGlkICNlMGUwZTBgLCBsaW5lSGVpZ2h0OiAxLjYgfX0+e3J9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiA5LCBmb250V2VpZ2h0OiA3MDAsIGNvbG9yOiBcIiMwMDAwMDBcIiwgbGV0dGVyU3BhY2luZzogXCIwLjFlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRUcmFuc2Zvcm06IFwidXBwZXJjYXNlXCIsIG1hcmdpbkJvdHRvbTogMTAgfX0+QWx3YXlzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHsoZGF0YS5zYWZldHlfcnVsZXMuYWx3YXlzIHx8IFtdKS5tYXAoKHIsaSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtpfSBzdHlsZT17eyBmb250U2l6ZTogMTEsIGZvbnRXZWlnaHQ6IDMwMCwgY29sb3I6IFwiIzAwMDAwMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCI2cHggMFwiLCBib3JkZXJCb3R0b206IGAxcHggc29saWQgI2UwZTBlMGAsIGxpbmVIZWlnaHQ6IDEuNiB9fT57cn08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9TZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICB7Lyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQIENMSU5JQ0FMIFFBIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL31cbiAgICAgICAgICAgICAge3RhYiA9PT0gXCJxdWFsaXR5XCIgJiYgKFxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogXCJmbGV4XCIsIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsIGdhcDogMTAgfX0+XG5cbiAgICAgICAgICAgICAgICAgIDxTZWN0aW9uIHRpdGxlPVwiQ2xpbmljYWwgUUEgU2NvcmVzXCIgc3VidGl0bGU9XCJTaXggZXZpZGVuY2UtYmFzZWQgcXVhbGl0eSBkaW1lbnNpb25zXCIgZGVmYXVsdE9wZW4+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogXCJncmlkXCIsIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IFwiMWZyIDFmclwiLCBnYXA6IFwiMCA0MHB4XCIgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxCYXIgbGFiZWw9XCJHdWlkZWxpbmUgQ29tcGxpYW5jZVwiICAgICAgICAgIHZhbHVlPXtxbS5ndWlkZWxpbmVfY29tcGxpYW5jZV9zY29yZX0gICAgICAgICAgc3VibGFiZWw9XCJFdmlkZW5jZS1iYXNlZCB0cmVhdG1lbnQgYWxpZ25tZW50XCIgYm9sZCAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEJhciBsYWJlbD1cIk1lZGljYXRpb24gU2FmZXR5XCIgICAgICAgICAgICAgdmFsdWU9e3FtLm1lZGljYXRpb25fc2FmZXR5X3Njb3JlfSAgICAgICAgICAgICBzdWJsYWJlbD1cIlByZXNjcmliaW5nIHBhdHRlcm4gdnMgc2FmZXR5IGJhbmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEJhciBsYWJlbD1cIkRpYWdub3N0aWMgUXVhbGl0eVwiICAgICAgICAgICAgdmFsdWU9e3FtLmRpYWdub3N0aWNfcXVhbGl0eV9zY29yZX0gICAgICAgICAgICBzdWJsYWJlbD1cIlN0cnVjdHVyZWQgbm90ZSByYXRlIGFzIHByb3h5XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEJhciBsYWJlbD1cIkludmVzdGlnYXRpb24gQXBwcm9wcmlhdGVuZXNzXCIgdmFsdWU9e3FtLmludmVzdGlnYXRpb25fYXBwcm9wcmlhdGVuZXNzX3Njb3JlfSBzdWJsYWJlbD1cIklkZWFsOiAwLjTigJMxLjAgaW52ZXN0aWdhdGlvbnMvY29uc3VsdGF0aW9uXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxCYXIgbGFiZWw9XCJEb2N1bWVudGF0aW9uIFF1YWxpdHlcIiAgICAgICAgI
3177HZhbHVlPXtxbS5kb2N1bWVudGF0aW9uX3F1YWxpdHlfc2NvcmV9ICAgICAgICAgc3VibGFiZWw9XCJDb21wbGV0ZW5lc3MgYW5kIHJlYXNvbmluZyBkZXB0aFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8QmFyIGxhYmVsPVwiT3V0Y29tZSBRdWFsaXR5XCIgICAgICAgICAgICAgICB2YWx1ZT17cW0ub3V0Y29tZV9xdWFsaXR5X3Njb3JlfSAgICAgICAgICAgICAgIHN1YmxhYmVsPVwiQ29uZGl0aW9ucyBzdXJmYWNlZCBwZXIgdmlzaXRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBib3JkZXJUb3A6IGAycHggc29saWQgIzAwMDAwMGAsIHBhZGRpbmdUb3A6IDE0LCBtYXJnaW5Ub3A6IDggfX0+XG4gICAgICAgICAgICAgICAgICAgICAgPEJhciBsYWJlbD1cIk92ZXJhbGwgUXVhbGl0eSBTY29yZVwiIHZhbHVlPXtxbS5vdmVyYWxsX3F1YWxpdHlfc2NvcmV9IGJvbGQgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L1NlY3Rpb24+XG5cbiAgICAgICAgICAgICAgICAgIDxTZWN0aW9uIHRpdGxlPVwiU2FmZXR5IEFzc2Vzc21lbnQgUGlwZWxpbmVcIiBzdWJ0aXRsZT1cIkNsaWNrIGEgc3RhZ2UgdG8gZXhwYW5kIGl0cyBkZXRhaWxcIiBkZWZhdWx0T3Blbj5cbiAgICAgICAgICAgICAgICAgICAgPFNhZmV0eVBpcGVsaW5lIHNwPXtzcH0gLz5cbiAgICAgICAgICAgICAgICAgIDwvU2VjdGlvbj5cblxuICAgICAgICAgICAgICAgICAge3NwLmd1aWRlbGluZV9hbGlnbm1lbnQgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8U2VjdGlvbiB0aXRsZT1cIkd1aWRlbGluZSBBbGlnbm1lbnQgRGV0YWlsXCIgc3VidGl0bGU9XCJPYnNlcnZlZCBwYXR0ZXJucyB2cyBldmlkZW5jZS1iYXNlZCBzdGFuZGFyZHNcIiBkZWZhdWx0T3Blbj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6IFwiZ3JpZFwiLCBncmlkVGVtcGxhdGVDb2x1bW5zOiBcIjFmciAxZnJcIiwgZ2FwOiAyNCB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6IDksIGZvbnRXZWlnaHQ6IDcwMCwgY29sb3I6IFwiIzAwMDAwMFwiLCBsZXR0ZXJTcGFjaW5nOiBcIjAuMWVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFRyYW5zZm9ybTogXCJ1cHBlcmNhc2VcIiwgbWFyZ2luQm90dG9tOiA4IH19PkNvbXBsaWFudCBQYXR0ZXJuczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7KHNwLmd1aWRlbGluZV9hbGlnbm1lbnQub2JzZXJ2ZWRfY29tcGxpYW50X3BhdHRlcm5zIHx8IFtdKS5tYXAoKHAsaSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtpfSBzdHlsZT17eyBmb250U2l6ZTogMTIsIGZvbnRXZWlnaHQ6IDMwMCwgY29sb3I6IFwiIzAwMDAwMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCI1cHggMFwiLCBib3JkZXJCb3R0b206IGAxcHggc29saWQgI2UwZTBlMGAsIGxpbmVIZWlnaHQ6IDEuNiB9fT7CtyB7cH08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6IDksIGZvbnRXZWlnaHQ6IDcwMCwgY29sb3I6IFwiIzAwMDAwMFwiLCBsZXR0ZXJTcGFjaW5nOiBcIjAuMWVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFRyYW5zZm9ybTogXCJ1cHBlcmNhc2VcIiwgbWFyZ2luQm90dG9tOiA4IH19Pk9ic2VydmVkIEdhcHM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgeyhzcC5ndWlkZWxpbmVfYWxpZ25tZW50Lm9ic2VydmVkX2dhcHMgfHwgW10pLm1hcCgoZyxpKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e2l9IHN0eWxlPXt7IGZvbnRTaXplOiAxMiwgZm9udFdlaWdodDogMzAwLCBjb2xvcjogXCIjMDAwMDAwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBcIjVweCAwXCIsIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAjZTBlMGUwYCwgbGluZUhlaWdodDogMS42IH19PsK3IHtnfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIHsoc3AuZ3VpZGVsaW5lX2FsaWdubWVudC5yZWZlcmVuY2VzIHx8IFtdKS5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luVG9wOiAxMiB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3NwLmd1aWRlbGluZV9hbGlnbm1lbnQucmVmZXJlbmNlcy5tYXAociA9PiA8VGFnIGtleT17cn0+e3J9PC9UYWc+KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvU2VjdGlvbj5cbiAgICAgICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgICAgIDxTZWN0aW9uIHRpdGxlPVwiTWVkaWNhdGlvbiBTYWZldHkgJiBEaWFnbm9zdGljXCIgc3VidGl0bGU9XCJQcmVzY3JpYmluZyBwYXR0ZXJucyBhbmQgZGlhZ25vc2lzIGNvbnNpc3RlbmN5XCIgZGVmYXVsdE9wZW4+XG4gICAgICAgICAgICAgICAgICAgIHtzcC5tZWRpY2F0aW9uX3NhZmV0eSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Cb3R0b206IDIwIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogOSwgZm9udFdlaWdodDogNzAwLCBjb2xvcjogXCIjMDAwMDAwXCIsIGxldHRlclNwYWNpbmc6IFwiMC4xZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFRyYW5zZm9ybTogXCJ1cHBlcmNhc2VcIiwgbWFyZ2luQm90dG9tOiA4IH19PlNhZmUgUHJlc2NyaWJpbmcgUGF0dGVybnM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgI
3177Hsoc3AubWVkaWNhdGlvbl9zYWZldHkub2JzZXJ2ZWRfc2FmZV9wYXR0ZXJucyB8fCBbXSkubWFwKChwLGkpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e2l9IHN0eWxlPXt7IGZvbnRTaXplOiAxMiwgZm9udFdlaWdodDogMzAwLCBjb2xvcjogXCIjMDAwMDAwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCI1cHggMFwiLCBib3JkZXJCb3R0b206IGAxcHggc29saWQgI2UwZTBlMGAgfX0+wrcge3B9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHsoc3AubWVkaWNhdGlvbl9zYWZldHkucG90ZW50aWFsX2ZsYWdzIHx8IFtdKS5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiA5LCBmb250V2VpZ2h0OiA3MDAsIGNvbG9yOiBcIiMwMDAwMDBcIiwgbGV0dGVyU3BhY2luZzogXCIwLjFlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFRyYW5zZm9ybTogXCJ1cHBlcmNhc2VcIiwgbWFyZ2luOiBcIjE0cHggMCA4cHhcIiB9fT5Qb3RlbnRpYWwgRmxhZ3M8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3AubWVkaWNhdGlvbl9zYWZldHkucG90ZW50aWFsX2ZsYWdzLm1hcCgoZixpKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17aX0gc3R5bGU9e3sgZm9udFNpemU6IDEyLCBmb250V2VpZ2h0OiAzMDAsIGNvbG9yOiBcIiMwMDAwMDBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCI1cHggMFwiLCBib3JkZXJCb3R0b206IGAxcHggc29saWQgI2UwZTBlMGAgfX0+4pqgIHtmfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIHtzcC5kaWFnbm9zdGljX2FjY3VyYWN5ICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogOSwgZm9udFdlaWdodDogNzAwLCBjb2xvcjogXCIjMDAwMDAwXCIsIGxldHRlclNwYWNpbmc6IFwiMC4xZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFRyYW5zZm9ybTogXCJ1cHBlcmNhc2VcIiwgbWFyZ2luOiBcIjAgMCA4cHhcIiB9fT5EaWFnbm9zdGljIENvbnNpc3RlbmN5PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB7KHNwLmRpYWdub3N0aWNfYWNjdXJhY3kuY29uc2lzdGVuY3lfb2JzZXJ2YXRpb25zIHx8IFtdKS5tYXAoKG8saSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17aX0gc3R5bGU9e3sgZm9udFNpemU6IDEyLCBmb250V2VpZ2h0OiAzMDAsIGNvbG9yOiBcIiMwMDAwMDBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBcIjVweCAwXCIsIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAjZTBlMGUwYCwgbGluZUhlaWdodDogMS42IH19PsK3IHtvfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogMTAsIGZvbnRTaXplOiAxMSwgZm9udFdlaWdodDogNDAwLCBjb2xvcjogXCIjMDAwMDAwXCIgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEVzY2FsYXRpb246IDxiPntzcC5kaWFnbm9zdGljX2FjY3VyYWN5LmVzY2FsYXRpb25fYXBwcm9wcmlhdGVuZXNzIHx8IFwi4oCUXCJ9PC9iPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8L1NlY3Rpb24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgey8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCBERUNJU0lPTiBGTE9XIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL31cbiAgICAgICAgICAgICAge3RhYiA9PT0gXCJmbG93XCIgJiYgKFxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogXCJmbGV4XCIsIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsIGdhcDogMTAgfX0+XG5cbiAgICAgICAgICAgICAgICAgIDxTZWN0aW9uIHRpdGxlPVwiQ2xpbmljYWwgRGVjaXNpb24gRmxvd1wiIHN1YnRpdGxlPVwiQ2xpY2sgYW55IHN0YWdlIG5vZGUgdG8gc2VlIGZ1bGwgZGV0YWlsIGFuZCBuYXZpZ2F0ZSBjb25uZWN0aW9uc1wiIGRlZmF1bHRPcGVuPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAxMiwgZm9udFdlaWdodDogMzAwLCBjb2xvcjogXCIjMDAwMDAwXCIsIG1hcmdpbkJvdHRvbTogMjAsIGxpbmVIZWlnaHQ6IDEuNixcbiAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBcIjEwcHggMTRweFwiLCBiYWNrZ3JvdW5kOiBcIiNmOGY4ZjhcIiwgYm9yZGVyTGVmdDogXCIzcHggc29saWQgIzAwMFwiIH19PlxuICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmxvdyBtYXBzIHRoZSBkb2N0b3IncyBmdWxsIGNsaW5pY2FsIHBpcGVsaW5lIOKAlCBmcm9tIHBhdGllbnQgZW5jb3VudGVyIHRvIG91dGNvbWUuXG4gICAgICAgICAgICAgICAgICAgICAgRWFjaCBzdGFnZSBzaG93cyByZWFsIG1ldHJpY3MgZnJvbSBvYnNlcnZlZCBhY3Rpdml0eS4gQ2xpY2sgYSBub2RlIHRvIGV4cGFuZCBpdHMgZGV0YWlsc1xuICAgICAgICAgICAgICAgICAgICAgIGFuZCBzZWUgd2hpY2ggc3RhZ2VzIGl0IGNvbm5lY3RzIHRvLiBTZWxlY3RpbmcgYSBub2RlIGhpZ2hsaWdodHMgaXRzIGRpcmVjdCBjb25uZWN0aW9ucy5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxEZWNpc2lvbkZsb3dFbmhhbmNlZCBzZj17c2Z9IGJtPXtibX0gcW09e3FtfSBzcD17c3B9IC8+XG4gICAgICAgICAgICAgICAgICA8L1NlY3Rpb24+XG5cbiAgICAgICAgICAgICAgICAgI
3177HtkYXRhLm9ic2VydmVkX2JlaGF2aW9yX3JlcG9ydD8uaW5mZXJlbmNlcz8ubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxTZWN0aW9uIHRpdGxlPVwiRXZpZGVuY2UtQmFzZWQgSW5mZXJlbmNlc1wiIHN1YnRpdGxlPVwiTG9naWNhbCBjb25jbHVzaW9ucyBkcmF3biBmcm9tIGJlaGF2aW9yYWwgcGF0dGVybiBhbmFseXNpc1wiIGRlZmF1bHRPcGVuPlxuICAgICAgICAgICAgICAgICAgICAgIHtkYXRhLm9ic2VydmVkX2JlaGF2aW9yX3JlcG9ydC5pbmZlcmVuY2VzLm1hcCgoaW5mLCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17aX0gc3R5bGU9e3sgZGlzcGxheTogXCJmbGV4XCIsIGdhcDogMTQsIHBhZGRpbmc6IFwiMTJweCAwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAjZTBlMGUwYCwgYWxpZ25JdGVtczogXCJmbGV4LXN0YXJ0XCIgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGZvbnRTaXplOiA5LCBmb250V2VpZ2h0OiA3MDAsIGNvbG9yOiBcIiMwMDAwMDBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250RmFtaWx5OiBcIm1vbm9zcGFjZVwiLCBmbGV4U2hyaW5rOiAwLCBtYXJnaW5Ub3A6IDIgfX0+SU5GIHtTdHJpbmcoaSsxKS5wYWRTdGFydCgyLFwiMFwiKX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGZvbnRTaXplOiAxMiwgZm9udFdlaWdodDogMzAwLCBjb2xvcjogXCIjMDAwMDAwXCIsIGxpbmVIZWlnaHQ6IDEuNyB9fT57aW5mfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICA8L1NlY3Rpb24+XG4gICAgICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6IFwiZ3JpZFwiLCBncmlkVGVtcGxhdGVDb2x1bW5zOiBcIjFmciAxZnJcIiwgZ2FwOiAxMCB9fT5cbiAgICAgICAgICAgICAgICAgICAge3NmLmNvbW11bmljYXRpb25fc3R5bGUgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxTZWN0aW9uIHRpdGxlPVwiQ29tbXVuaWNhdGlvbiBTdHlsZVwiIHN1YnRpdGxlPVwiSG93IHRoaXMgZG9jdG9yIGludGVyYWN0cyB3aXRoIHBhdGllbnRzXCIgZGVmYXVsdE9wZW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogMTIgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHsoc2YuY29tbXVuaWNhdGlvbl9zdHlsZS50cmFpdHMgfHwgW10pLm1hcCgodCxpKSA9PiA8VGFnIGtleT17aX0+e3R9PC9UYWc+KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAge3NmLmNvbW11bmljYXRpb25fc3R5bGUuZXZpZGVuY2UgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAxMiwgZm9udFdlaWdodDogMzAwLCBjb2xvcjogXCIjMDAwMDAwXCIsIGZvbnRTdHlsZTogXCJpdGFsaWNcIiwgbGluZUhlaWdodDogMS43LCBtYXJnaW5Cb3R0b206IDEyIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzZi5jb21tdW5pY2F0aW9uX3N0eWxlLmV2aWRlbmNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHBhZGRpbmc6IFwiMTBweCAxMnB4XCIsIGJhY2tncm91bmQ6IFwiIzAwMDAwMFwiIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiA5LCBmb250V2VpZ2h0OiA2MDAsIGNvbG9yOiBcInJnYmEoMjU1LDI1NSwyNTUsMC42KVwiLCBsZXR0ZXJTcGFjaW5nOiBcIjAuMDhlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRUcmFuc2Zvcm06IFwidXBwZXJjYXNlXCIgfX0+UGF0aWVudC1DZW50ZXJlZCBTY29yZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAyNiwgZm9udFdlaWdodDogMzAwLCBmb250RmFtaWx5OiBcIm1vbm9zcGFjZVwiLCBjb2xvcjogXCIjZmZmZmZmXCIsIG1hcmdpblRvcDogNCB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7TWF0aC5yb3VuZChzZi5jb21tdW5pY2F0aW9uX3N0eWxlLnBhdGllbnRfY2VudGVyZWRfc2NvcmUgfHwgMCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZm9udFNpemU6IDEyLCBmb250V2VpZ2h0OiAzMDAsIGNvbG9yOiBcInJnYmEoMjU1LDI1NSwyNTUsMC41KVwiIH19Pi8xMDA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICB7c2Yuc2FmZXR5X2JlaGF2aW9ycyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPFNlY3Rpb24gdGl0bGU9XCJTYWZldHkgQmVoYXZpb3JzXCIgc3VidGl0bGU9XCJPYnNlcnZlZCBzYWZldHkgYW5kIHZlcmlmaWNhdGlvbiBwYXR0ZXJuc1wiIGRlZmF1bHRPcGVuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Cb3R0b206IDEyIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7KHNmLnNhZmV0eV9iZWhhdmlvcnMudHJhaXRzIHx8IFtdKS5tYXAoKHQsaSkgPT4gPFRhZyBrZXk9e2l9Pnt0fTwvVGFnPil9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6IDksIGZvbnRXZWlnaHQ6IDYwMCwgY29sb3I6IFwiIzAwMDAwMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0VHJhbnNmb3JtOiBcInVwcGVyY2FzZVwiLCBsZXR0ZXJTcGFjaW5nOiBcIjAuMDhlbVwiIH19PkRvdWJsZS1DaGVjayBGcmVxdWVuY3k8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6I
3177DIwLCBmb250V2VpZ2h0OiAzMDAsIGNvbG9yOiBcIiMwMDAwMDBcIiwgbWFyZ2luVG9wOiA2LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0VHJhbnNmb3JtOiBcImNhcGl0YWxpemVcIiwgbWFyZ2luQm90dG9tOiAxMiB9fT57c2Yuc2FmZXR5X2JlaGF2aW9ycy5kb3VibGVfY2hlY2tfZnJlcXVlbmN5IHx8IFwi4oCUXCJ9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB7c2Yuc2FmZXR5X2JlaGF2aW9ycy5ldmlkZW5jZSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6IDExLCBmb250V2VpZ2h0OiAzMDAsIGNvbG9yOiBcIiMwMDAwMDBcIiwgbGluZUhlaWdodDogMS43LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTdHlsZTogXCJpdGFsaWNcIiB9fT57c2Yuc2FmZXR5X2JlaGF2aW9ycy5ldmlkZW5jZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9TZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgey8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCBBSSBESVJFQ1RJVkVTIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL31cbiAgICAgICAgICAgICAge3RhYiA9PT0gXCJkaXJlY3RpdmVzXCIgJiYgKFxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogXCJmbGV4XCIsIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsIGdhcDogMTAgfX0+XG5cbiAgICAgICAgICAgICAgICAgIDxTZWN0aW9uIHRpdGxlPVwiQUkgQmVoYXZpb3IgRGlyZWN0aXZlc1wiIHN1YnRpdGxlPVwiSW5qZWN0ZWQgYmVmb3JlIFNLSUxMLm1kIOKAlCBzaGFwZXMgSE9XIHRoZSBBSSByZWFzb25zLCBub3Qgd2hhdCBpdCBrbm93c1wiIGRlZmF1bHRPcGVuPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAxMiwgZm9udFdlaWdodDogMzAwLCBjb2xvcjogXCIjMDAwMDAwXCIsIGxpbmVIZWlnaHQ6IDEuNywgbWFyZ2luQm90dG9tOiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBcIjEwcHggMTRweFwiLCBiYWNrZ3JvdW5kOiBcIiNmOGY4ZjhcIiwgYm9yZGVyTGVmdDogXCIzcHggc29saWQgIzAwMFwiIH19PlxuICAgICAgICAgICAgICAgICAgICAgIFRoZXNlIGRpcmVjdGl2ZXMgYXJlIGluamVjdGVkIGJlZm9yZSBTS0lMTC5tZCBhbmQgcGF0aWVudCBjb250ZXh0IGluIHRoZSBkb2N0b3IgYWdlbnQgc3lzdGVtIHByb21wdC5cbiAgICAgICAgICAgICAgICAgICAgICBUaGV5IGVuY29kZSB0aGUgZG9jdG9yJ3MgY2xpbmljYWwgc3R5bGUgaW50byB0aGUgQUkgc28gaXQgcmVhc29ucyB0aGUgd2F5IHRoaXMgZG9jdG9yIHdvdWxkLlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge2RhdGEuYWlfYmVoYXZpb3JfZGlyZWN0aXZlcyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiBcImdyaWRcIiwgZ3JpZFRlbXBsYXRlQ29sdW1uczogXCIxZnIgMWZyXCIsIGdhcDogMjQgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8RGlyQmxvY2sgbGFiZWw9XCJEaWFnbm9zdGljXCIgICAgaXRlbXM9e2RhdGEuYWlfYmVoYXZpb3JfZGlyZWN0aXZlcy5kaWFnbm9zdGljfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8RGlyQmxvY2sgbGFiZWw9XCJUcmVhdG1lbnRcIiAgICAgaXRlbXM9e2RhdGEuYWlfYmVoYXZpb3JfZGlyZWN0aXZlcy50cmVhdG1lbnR9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxEaXJCbG9jayBsYWJlbD1cIkNvbW11bmljYXRpb25cIiBpdGVtcz17ZGF0YS5haV9iZWhhdmlvcl9kaXJlY3RpdmVzLmNvbW11bmljYXRpb259IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxEaXJCbG9jayBsYWJlbD1cIkRvY3VtZW50YXRpb25cIiBpdGVtcz17ZGF0YS5haV9iZWhhdmlvcl9kaXJlY3RpdmVzLmRvY3VtZW50YXRpb259IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDwvU2VjdGlvbj5cblxuICAgICAgICAgICAgICAgICAge2RhdGEuc2FmZXR5X3J1bGVzICYmIChcbiAgICAgICAgICAgICAgICAgICAgPFNlY3Rpb24gdGl0bGU9XCJSdW50aW1lIFNhZmV0eSBSdWxlc1wiIHN1YnRpdGxlPVwiSGFyZCBjb25zdHJhaW50cyBlbmZvcmNlZCBhdCBldmVyeSBBSSBpbmZlcmVuY2Ugc3RlcFwiIGRlZmF1bHRPcGVuPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogXCJncmlkXCIsIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IFwiMWZyIDFmclwiLCBnYXA6IDIwIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogOSwgZm9udFdlaWdodDogNzAwLCBjb2xvcjogXCIjMDAwMDAwXCIsIGxldHRlclNwYWNpbmc6IFwiMC4xZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0VHJhbnNmb3JtOiBcInVwcGVyY2FzZVwiLCBtYXJnaW5Cb3R0b206IDEwIH19Pk5ldmVyPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHsoZGF0YS5zYWZldHlfcnVsZXMubmV2ZXIgfHwgW10pLm1hcCgocixpKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e2l9IHN0eWxlPXt7IGZvbnRTaXplOiAxMSwgZm9udFdlaWdodDogMzAwLCBjb2xvcjogXCIjMDAwMDAwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBcIjZweCAwXCIsIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAjZTBlMGUwYCwgbGluZUhlaWdodDogMS41IH19PntyfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogOSwgZm9udFdlaWdodDogNzAwLCBjb2xvcjogXCIjMDAwMDAwXCIsIGxldHRlclNwYWNpbmc6IFwiMC4xZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0VHJhbnNmb3JtOiBcInVwcGVyY2FzZVwiLCBtYXJnaW5Cb3R0b206IDEwIH19PkFsd2F5czwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7KGRhdGEuc2FmZXR5X3J1bGVzLmFsd2F5cyB8fCBbXSkubWFwKChyLGkpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17aX0gc3R5bGU9e3sgZm9udFNpemU6I
3177DExLCBmb250V2VpZ2h0OiAzMDAsIGNvbG9yOiBcIiMwMDAwMDBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFwiNnB4IDBcIiwgYm9yZGVyQm90dG9tOiBgMXB4IHNvbGlkICNlMGUwZTBgLCBsaW5lSGVpZ2h0OiAxLjUgfX0+e3J9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvU2VjdGlvbj5cbiAgICAgICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgICAgIHtzcC5zYWZldHlfbWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8U2VjdGlvbiB0aXRsZT1cIlNBRkVUWS5tZCBQcmV2aWV3XCIgc3VidGl0bGU9XCJSdW50aW1lIHNhZmV0eSBwcm9maWxlIGluamVjdGVkIGFsb25nc2lkZSBTT1VMLm1kXCIgZGVmYXVsdE9wZW4+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXhIZWlnaHQ6IDQwMCwgb3ZlcmZsb3c6IFwiYXV0b1wiLCBib3JkZXI6IGAxcHggc29saWQgIzAwMDAwMGAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPXt7IHdoaXRlU3BhY2U6IFwicHJlLXdyYXBcIiwgZm9udFNpemU6IDExLCBmb250V2VpZ2h0OiAzMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcIiMwMDAwMDBcIiwgbGluZUhlaWdodDogMS43LCBwYWRkaW5nOiAxNiwgbWFyZ2luOiAwLCBmb250RmFtaWx5OiBcImluaGVyaXRcIiB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3NwLnNhZmV0eV9tZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJlPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L1NlY3Rpb24+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgIHsvKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgU09VTC5NRCDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi99XG4gICAgICAgICAgICAgIHt0YWIgPT09IFwibWFya2Rvd25cIiAmJiAoXG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBiYWNrZ3JvdW5kOiBcIiNmZmZmZmZcIiwgYm9yZGVyOiBgMXB4IHNvbGlkICMwMDAwMDBgIH19PlxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiBcImZsZXhcIiwganVzdGlmeUNvbnRlbnQ6IFwic3BhY2UtYmV0d2VlblwiLCBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBcIjE2cHggMjRweFwiLCBib3JkZXJCb3R0b206IGAxcHggc29saWQgIzAwMDAwMGAgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogMTIsIGZvbnRXZWlnaHQ6IDYwMCwgY29sb3I6IFwiIzAwMDAwMFwiIH19PlNPVUwubWQg4oCUIEZ1bGwgRG9jdG9yIFByb2ZpbGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAxMSwgZm9udFdlaWdodDogMzAwLCBjb2xvcjogXCIjMDAwMDAwXCIsIG1hcmdpblRvcDogMyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEluamVjdCB0aGlzIGJlZm9yZSBTS0lMTC5tZCBhbmQgcGF0aWVudCBjb250ZXh0IGluIHRoZSBhZ2VudCBzeXN0ZW0gcHJvbXB0XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG9uQ2xpY2s9eygpID0+IHsgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0KGRhdGEuc291bF9tYXJrZG93biB8fCBcIlwiKTsgc2V0Q29waWVkKHRydWUpOyBzZXRUaW1lb3V0KCgpID0+IHNldENvcGllZChmYWxzZSksIDIwMDApOyB9fVxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IHBhZGRpbmc6IFwiOXB4IDIwcHhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGNvcGllZCA/IFwiIzAwMDAwMFwiIDogXCIjZmZmZmZmXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogY29waWVkID8gXCIjZmZmZmZmXCIgOiBcIiMwMDAwMDBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogYDFweCBzb2xpZCAjMDAwMDAwYCwgZm9udFNpemU6IDEwLCBmb250V2VpZ2h0OiA2MDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXR0ZXJTcGFjaW5nOiBcIjAuMWVtXCIsIHRleHRUcmFuc2Zvcm06IFwidXBwZXJjYXNlXCIsIHRyYW5zaXRpb246IFwiYWxsIDAuMnNcIiB9fT5cbiAgICAgICAgICAgICAgICAgICAgICB7Y29waWVkID8gXCJDb3BpZWQg4pyTXCIgOiBcIkNvcHkgdG8gQ2xpcGJvYXJkXCJ9XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPXt7IHdoaXRlU3BhY2U6IFwicHJlLXdyYXBcIiwgZm9udEZhbWlseTogXCJpbmhlcml0XCIsIGZvbnRTaXplOiAxMixcbiAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogMzAwLCBjb2xvcjogXCIjMDAwMDAwXCIsIGxpbmVIZWlnaHQ6IDEuOCwgcGFkZGluZzogMjgsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IFwiI2ZmZmZmZlwiLCBtYXJnaW46IDAsIG1heEhlaWdodDogXCI3MHZoXCIsIG92ZXJmbG93WTogXCJhdXRvXCIgfX0+XG4gICAgICAgICAgICAgICAgICAgIHtkYXRhLnNvdWxfbWFya2Rvd24gfHwgXCJObyBjb250ZW50LlwifVxuICAgICAgICAgICAgICAgICAgPC9wcmU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgPC8+XG4gICk7XG59Il0sImZpbGUiOiIvYXBwL3NyYy9jb21wb25lbnRzL0RvY3RvclNvdWxEYXNoYm9hcmQuanN4In0=
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.