PageSourceSearch

https://doctorassist.ai/src/components/DoctorSoulDashboard.jsx

js doctorassist.ai collected 2026-10-05 11:58:44 UTC 334,308 bytes, 3,177 lines download raw bytes

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.