architecture.svg
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!-- Do not edit this file with editors other than draw.io --> 3 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 <svg xmlns="http://www.w3.org/2000/svg" style="background: transparent; background-color: transparent; color-scheme: light dark;" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="639px" height="641px" viewBox="0 0 639 641" content="<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36" version="29.2.7" pages="3"> <diagram name="第 1 页" id="VFc9j8le7ThpKCAuti8O"> <mxGraphModel dx="1426" dy="770" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> <mxCell id="0yQUItjMywsnnXkV5zJc-34" parent="1" style="swimlane;startSize=30;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9F7AB0;fontSize=16;fontStyle=1" value="OpenSandbox SDKs" vertex="1"> <mxGeometry height="130" width="600" x="150" y="480" as="geometry" /> </mxCell> <mxCell id="0yQUItjMywsnnXkV5zJc-35" parent="0yQUItjMywsnnXkV5zJc-34" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E7E5FF;strokeColor=#006EAF;fontColor=#000000;" value="Sandbox" vertex="1"> <mxGeometry height="40" width="120" x="30" y="50" as="geometry" /> </mxCell> <mxCell id="0yQUItjMywsnnXkV5zJc-36" parent="0yQUItjMywsnnXkV5zJc-34" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E7E5FF;strokeColor=#006EAF;fontColor=#000000;" value="Filesystem" vertex="1"> <mxGeometry height="40" width="120" x="170" y="50" as="geometry" /> </mxCell> <mxCell id="0yQUItjMywsnnXkV5zJc-37" parent="0yQUItjMywsnnXkV5zJc-34" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E7E5FF;strokeColor=#006EAF;fontColor=#000000;" value="Commands" vertex="1"> <mxGeometry height="40" width="120" x="310" y="50" as="geometry" /> </mxCell> <mxCell id="0yQUItjMywsnnXkV5zJc-38" parent="0yQUItjMywsnnXkV5zJc-34" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E7E5FF;strokeColor=#006EAF;fontColor=#000000;" value="CodeInterpreter" vertex="1"> <mxGeometry height="40" width="120" x="450" y="50" as="geometry" /> </mxCell> <mxCell id="0yQUItjMywsnnXkV5zJc-39" parent="0yQUItjMywsnnXkV5zJc-34" style="text;whiteSpace=wrap;html=1;" value="&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Helvetica; font-size: 11px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: center; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; float: none; display: inline !important;&quot;&gt;Command execution&lt;/span&gt;" vertex="1"> <mxGeometry height="20" width="106" x="314" y="100" as="geometry" /> </mxCell> <mxCell id="0yQUItjMywsnnXkV5zJc-40" parent="0yQUItjMywsnnXkV5zJc-34" style="text;whiteSpace=wrap;html=1;" value="&lt;span style=&quot;color: rgb(0, 0, 0); font-family: Helvetica; font-size: 11px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: center; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; float: none; display: inline !important;&quot;&gt;File Operation&lt;/span&gt;" vertex="1"> <mxGeometry height="20" width="90" x="200" y="100" as="geometry" /> </mxCell> <mxCell id="0yQUItjMywsnnXkV5zJc-41" parent="0yQUItjMywsnnXkV5zJc-34" style="text;whiteSpace=wrap;html=1;" value="&lt;div style=&quot;forced-color-adjust: none; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: center; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot;&gt;&lt;span style=&quot;font-size: 11px; color: light-dark(rgb(0, 0, 0), rgb(237, 237, 237));&quot;&gt;Code execution&lt;/span&gt;&lt;/div&gt;" vertex="1"> <mxGeometry height="20" width="80" x="480" y="100" as="geometry" /> </mxCell> <mxCell id="0yQUItjMywsnnXkV5zJc-42" parent="1" style="swimlane;startSize=30;whiteSpace=wrap;html=1;fillColor=#FFF3E0;strokeColor=#EF6C00;fontSize=16;fontStyle=1" value="OpenSandbox Specs" vertex="1"> <mxGeometry height="100" width="600" x="150" y="660" as="geometry" /> </mxCell> <mxCell id="0yQUItjMywsnnXkV5zJc-43" parent="0yQUItjMywsnnXkV5zJc-42" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFECB3;strokeColor=#FFA000;" value="&lt;div&gt;Sandbox Lifecycle Spec&lt;/div&gt;" vertex="1"> <mxGeometry height="40" width="170" x="80" y="46" as="geometry" /> </mxCell> <mxCell id="0yQUItjMywsnnXkV5zJc-44" parent="0yQUItjMywsnnXkV5zJc-42" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFECB3;strokeColor=#FFA000;" value="Sandbox Execution Spec" vertex="1"> <mxGeometry height="40" width="170" x="390" y="46" as="geometry" /> </mxCell> <mxCell id="0yQUItjMywsnnXkV5zJc-45" parent="1" style="swimlane;startSize=30;whiteSpace=wrap;html=1;fillColor=#E8F5E8;strokeColor=#388E3C;fontSize=16;fontStyle=1" value="OpenSandbox Runtime" vertex="1"> <mxGeometry height="140" width="600" x="150" y="810" as="geometry" /> </mxCell> <mxCell id="0yQUItjMywsnnXkV5zJc-46" parent="0yQUItjMywsnnXkV5zJc-45" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#C8E6C9;strokeColor=#4CAF50;" value="Docker Runtime" vertex="1"> <mxGeometry height="40" width="140" x="50" y="90" as="geometry" /> </mxCell> <mxCell id="0yQUItjMywsnnXkV5zJc-47" parent="0yQUItjMywsnnXkV5zJc-45" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#C8E6C9;strokeColor=#4CAF50;" value="Kubernetes Runtime" vertex="1"> <mxGeometry height="40" width="140" x="230" y="90" as="geometry" /> </mxCell> <mxCell id="0yQUItjMywsnnXkV5zJc-48" parent="0yQUItjMywsnnXkV5zJc-45" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#C8E6C9;strokeColor=#4CAF50;" value="Sandbox Lifecycle Implementation" vertex="1"> <mxGeometry height="40" width="220" x="190" y="40" as="geometry" /> </mxCell> <mxCell id="0yQUItjMywsnnXkV5zJc-49" parent="1" style="swimlane;startSize=30;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=16;fontStyle=1" value="Sandbox Instances" vertex="1"> <mxGeometry height="110" width="600" x="150" y="1000" as="geometry" /> </mxCell> <mxCell id="0yQUItjMywsnnXkV5zJc-50" parent="0yQUItjMywsnnXkV5zJc-49" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#99CCFF;strokeColor=#0066CC;" value="Sandbox Container&amp;nbsp;&lt;div&gt;(e.g., ubuntu:22.04)&lt;/div&gt;" vertex="1"> <mxGeometry height="40" width="200" x="40" y="50" as="geometry" /> </mxCell> <mxCell id="0yQUItjMywsnnXkV5zJc-51" edge="1" parent="0yQUItjMywsnnXkV5zJc-49" source="0yQUItjMywsnnXkV5zJc-52" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" target="0yQUItjMywsnnXkV5zJc-50"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="0yQUItjMywsnnXkV5zJc-52" parent="0yQUItjMywsnnXkV5zJc-49" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#99CCFF;strokeColor=#0066CC;" value="execd" vertex="1"> <mxGeometry height="40" width="200" x="375" y="50" as="geometry" /> </mxCell> <mxCell id="0yQUItjMywsnnXkV5zJc-53" parent="0yQUItjMywsnnXkV5zJc-49" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;" value="Inject at startup" vertex="1"> <mxGeometry height="20" width="100" x="250" y="70" as="geometry" /> </mxCell> <mxCell id="0yQUItjMywsnnXkV5zJc-54" parent="0yQUItjMywsnnXkV5zJc-49" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;" value="&lt;div style=&quot;line-height: 100%;&quot;&gt;&lt;br&gt;&lt;/div&gt;" vertex="1"> <mxGeometry height="20" width="200" x="370" y="100" as="geometry" /> </mxCell> <mxCell id="0yQUItjMywsnnXkV5zJc-55" edge="1" parent="1" source="0yQUItjMywsnnXkV5zJc-35" style="edgeStyle=orthogonalEdgeStyle;endArrow=classic;html=1;exitX=0.5;exitY=1;entryX=0.25;entryY=0;exitDx=0;exitDy=0;" target="0yQUItjMywsnnXkV5zJc-43"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="0yQUItjMywsnnXkV5zJc-56" edge="1" parent="1" source="0yQUItjMywsnnXkV5zJc-36" style="edgeStyle=orthogonalEdgeStyle;endArrow=classic;html=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitDx=0;exitDy=0;" target="0yQUItjMywsnnXkV5zJc-44"> <mxGeometry relative="1" as="geometry"> <mxPoint x="530" y="710" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="0yQUItjMywsnnXkV5zJc-57" edge="1" parent="1" source="0yQUItjMywsnnXkV5zJc-37" style="edgeStyle=orthogonalEdgeStyle;endArrow=classic;html=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="0yQUItjMywsnnXkV5zJc-44"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="0yQUItjMywsnnXkV5zJc-58" edge="1" parent="1" source="0yQUItjMywsnnXkV5zJc-38" style="edgeStyle=orthogonalEdgeStyle;endArrow=classic;html=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="0yQUItjMywsnnXkV5zJc-44"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="0yQUItjMywsnnXkV5zJc-59" edge="1" parent="1" source="0yQUItjMywsnnXkV5zJc-43" style="edgeStyle=orthogonalEdgeStyle;endArrow=classic;html=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" target="0yQUItjMywsnnXkV5zJc-48"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="0yQUItjMywsnnXkV5zJc-60" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#C8E6C9;strokeColor=#4CAF50;" value="Custom Runtime" vertex="1"> <mxGeometry height="40" width="140" x="560" y="900" as="geometry" /> </mxCell> <mxCell id="0yQUItjMywsnnXkV5zJc-61" edge="1" parent="1" source="0yQUItjMywsnnXkV5zJc-44" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;"> <mxGeometry relative="1" as="geometry"> <Array as="points"> <mxPoint x="780" y="730" /> <mxPoint x="780" y="1070" /> </Array> <mxPoint x="725" y="1070" as="targetPoint" /> </mxGeometry> </mxCell> </root> </mxGraphModel> </diagram> <diagram id="lZykGmgdYMU3AXirY2bJ" name="第 2 页"> <mxGraphModel dx="706" dy="770" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> </root> </mxGraphModel> </diagram> <diagram id="U_dXJKIcznDZcgrkZAQD" name="第 3 页"> <mxGraphModel dx="1426" dy="824" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> </root> </mxGraphModel> </diagram> </mxfile> "><defs/><g><g data-cell-id="0"><g data-cell-id="1"><g data-cell-id="0yQUItjMywsnnXkV5zJc-34"><g transform="translate(0.5,0.5)"><path d="M 0 30 L 0 0 L 600 0 L 600 30" fill="#e1d5e7" stroke="#9f7ab0" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(225, 213, 231), rgb(57, 47, 63)); stroke: light-dark(rgb(159, 122, 176), rgb(144, 112, 158));"/><path d="M 0 30 L 0 130 L 600 130 L 600 30" fill="none" stroke="#9f7ab0" stroke-miterlimit="10" pointer-events="none" style="stroke: light-dark(rgb(159, 122, 176), rgb(144, 112, 158));"/><path d="M 0 30 L 600 30" fill="none" stroke="#9f7ab0" stroke-miterlimit="10" pointer-events="none" style="stroke: light-dark(rgb(159, 122, 176), rgb(144, 112, 158));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 598px; height: 1px; padding-top: 15px; margin-left: 1px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 16px; font-family: Helvetica; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; word-wrap: normal; ">OpenSandbox SDKs</div></div></div></foreignObject><text x="300" y="20" fill="light-dark(#000000, #ffffff)" font-family="Helvetica" font-size="16px" text-anchor="middle" font-weight="bold">OpenSandbox SDKs</text></switch></g></g><g data-cell-id="0yQUItjMywsnnXkV5zJc-35"><g transform="translate(0.5,0.5)"><rect x="30" y="50" width="120" height="40" rx="6" ry="6" fill="#e7e5ff" stroke="#006eaf" pointer-events="all" style="fill: light-dark(rgb(231, 229, 255), rgb(38, 36, 58)); stroke: light-dark(rgb(0, 110, 175), rgb(81, 175, 231));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 70px; margin-left: 31px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: light-dark(#000000, #ededed); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Sandbox</div></div></div></foreignObject><text x="90" y="74" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Sandbox</text></switch></g></g></g><g data-cell-id="0yQUItjMywsnnXkV5zJc-36"><g transform="translate(0.5,0.5)"><rect x="170" y="50" width="120" height="40" rx="6" ry="6" fill="#e7e5ff" stroke="#006eaf" pointer-events="all" style="fill: light-dark(rgb(231, 229, 255), rgb(38, 36, 58)); stroke: light-dark(rgb(0, 110, 175), rgb(81, 175, 231));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 70px; margin-left: 171px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: light-dark(#000000, #ededed); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Filesystem</div></div></div></foreignObject><text x="230" y="74" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Filesystem</text></switch></g></g></g><g data-cell-id="0yQUItjMywsnnXkV5zJc-37"><g transform="translate(0.5,0.5)"><rect x="310" y="50" width="120" height="40" rx="6" ry="6" fill="#e7e5ff" stroke="#006eaf" pointer-events="all" style="fill: light-dark(rgb(231, 229, 255), rgb(38, 36, 58)); stroke: light-dark(rgb(0, 110, 175), rgb(81, 175, 231));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 70px; margin-left: 311px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: light-dark(#000000, #ededed); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Commands</div></div></div></foreignObject><text x="370" y="74" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Commands</text></switch></g></g></g><g data-cell-id="0yQUItjMywsnnXkV5zJc-38"><g transform="translate(0.5,0.5)"><rect x="450" y="50" width="120" height="40" rx="6" ry="6" fill="#e7e5ff" stroke="#006eaf" pointer-events="all" style="fill: light-dark(rgb(231, 229, 255), rgb(38, 36, 58)); stroke: light-dark(rgb(0, 110, 175), rgb(81, 175, 231));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 70px; margin-left: 451px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: light-dark(#000000, #ededed); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">CodeInterpreter</div></div></div></foreignObject><text x="510" y="74" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">CodeInterpreter</text></switch></g></g></g><g data-cell-id="0yQUItjMywsnnXkV5zJc-39"><g transform="translate(0.5,0.5)"><rect x="314" y="100" width="106" height="20" fill="none" stroke="none" pointer-events="all"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 104px; height: 1px; padding-top: 107px; margin-left: 316px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span style="color: light-dark(rgb(0, 0, 0), rgb(237, 237, 237)); font-family: Helvetica; font-size: 11px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: center; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; float: none; display: inline !important;">Command execution</span></div></div></div></foreignObject><text x="316" y="119" fill="light-dark(#000000, #ffffff)" font-family="Helvetica" font-size="12px">Command execution</text></switch></g></g></g><g data-cell-id="0yQUItjMywsnnXkV5zJc-40"><g transform="translate(0.5,0.5)"><rect x="200" y="100" width="90" height="20" fill="none" stroke="none" pointer-events="all"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 88px; height: 1px; padding-top: 107px; margin-left: 202px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span style="color: light-dark(rgb(0, 0, 0), rgb(237, 237, 237)); font-family: Helvetica; font-size: 11px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: center; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; float: none; display: inline !important;">File Operation</span></div></div></div></foreignObject><text x="202" y="119" fill="light-dark(#000000, #ffffff)" font-family="Helvetica" font-size="12px">File Operation</text></switch></g></g></g><g data-cell-id="0yQUItjMywsnnXkV5zJc-41"><g transform="translate(0.5,0.5)"><rect x="480" y="100" width="80" height="20" fill="none" stroke="none" pointer-events="all"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 78px; height: 1px; padding-top: 107px; margin-left: 482px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div style="forced-color-adjust: none; color: light-dark(rgb(0, 0, 0), rgb(237, 237, 237)); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: center; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><span style="font-size: 11px; color: light-dark(rgb(0, 0, 0), rgb(237, 237, 237));">Code execution</span></div></div></div></div></foreignObject><text x="482" y="119" fill="light-dark(#000000, #ffffff)" font-family="Helvetica" font-size="12px">Code execution</text></switch></g></g></g></g><g data-cell-id="0yQUItjMywsnnXkV5zJc-42"><g transform="translate(0.5,0.5)"><path d="M 0 210 L 0 180 L 600 180 L 600 210" fill="#fff3e0" stroke="#ef6c00" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(255, 243, 224), rgb(36, 26, 9)); stroke: light-dark(rgb(239, 108, 0), rgb(222, 110, 17));"/><path d="M 0 210 L 0 280 L 600 280 L 600 210" fill="none" stroke="#ef6c00" stroke-miterlimit="10" pointer-events="none" style="stroke: light-dark(rgb(239, 108, 0), rgb(222, 110, 17));"/><path d="M 0 210 L 600 210" fill="none" stroke="#ef6c00" stroke-miterlimit="10" pointer-events="none" style="stroke: light-dark(rgb(239, 108, 0), rgb(222, 110, 17));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 598px; height: 1px; padding-top: 195px; margin-left: 1px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 16px; font-family: Helvetica; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; word-wrap: normal; ">OpenSandbox Specs</div></div></div></foreignObject><text x="300" y="200" fill="light-dark(#000000, #ffffff)" font-family="Helvetica" font-size="16px" text-anchor="middle" font-weight="bold">OpenSandbox Specs</text></switch></g></g><g data-cell-id="0yQUItjMywsnnXkV5zJc-43"><g transform="translate(0.5,0.5)"><rect x="80" y="226" width="170" height="40" rx="6" ry="6" fill="#ffecb3" stroke="#ffa000" pointer-events="all" style="fill: light-dark(rgb(255, 236, 179), rgb(50, 34, 0)); stroke: light-dark(rgb(255, 160, 0), rgb(167, 85, 0));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 168px; height: 1px; padding-top: 246px; margin-left: 81px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div>Sandbox Lifecycle Spec</div></div></div></div></foreignObject><text x="165" y="250" fill="light-dark(#000000, #ffffff)" font-family="Helvetica" font-size="12px" text-anchor="middle">Sandbox Lifecycle Spec</text></switch></g></g></g><g data-cell-id="0yQUItjMywsnnXkV5zJc-44"><g transform="translate(0.5,0.5)"><rect x="390" y="226" width="170" height="40" rx="6" ry="6" fill="#ffecb3" stroke="#ffa000" pointer-events="all" style="fill: light-dark(rgb(255, 236, 179), rgb(50, 34, 0)); stroke: light-dark(rgb(255, 160, 0), rgb(167, 85, 0));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 168px; height: 1px; padding-top: 246px; margin-left: 391px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Sandbox Execution Spec</div></div></div></foreignObject><text x="475" y="250" fill="light-dark(#000000, #ffffff)" font-family="Helvetica" font-size="12px" text-anchor="middle">Sandbox Execution Spec</text></switch></g></g></g></g><g data-cell-id="0yQUItjMywsnnXkV5zJc-45"><g transform="translate(0.5,0.5)"><path d="M 0 360 L 0 330 L 600 330 L 600 360" fill="#e8f5e8" stroke="#388e3c" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(232, 245, 232), rgb(21, 33, 21)); stroke: light-dark(rgb(56, 142, 60), rgb(83, 157, 86));"/><path d="M 0 360 L 0 470 L 600 470 L 600 360" fill="none" stroke="#388e3c" stroke-miterlimit="10" pointer-events="none" style="stroke: light-dark(rgb(56, 142, 60), rgb(83, 157, 86));"/><path d="M 0 360 L 600 360" fill="none" stroke="#388e3c" stroke-miterlimit="10" pointer-events="none" style="stroke: light-dark(rgb(56, 142, 60), rgb(83, 157, 86));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 598px; height: 1px; padding-top: 345px; margin-left: 1px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 16px; font-family: Helvetica; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; word-wrap: normal; ">OpenSandbox Runtime</div></div></div></foreignObject><text x="300" y="350" fill="light-dark(#000000, #ffffff)" font-family="Helvetica" font-size="16px" text-anchor="middle" font-weight="bold">OpenSandbox Runtime</text></switch></g></g><g data-cell-id="0yQUItjMywsnnXkV5zJc-46"><g transform="translate(0.5,0.5)"><rect x="50" y="420" width="140" height="40" rx="6" ry="6" fill="#c8e6c9" stroke="#4caf50" pointer-events="all" style="fill: light-dark(rgb(200, 230, 201), rgb(28, 54, 29)); stroke: light-dark(rgb(76, 175, 80), rgb(50, 135, 54));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 138px; height: 1px; padding-top: 440px; margin-left: 51px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Docker Runtime</div></div></div></foreignObject><text x="120" y="444" fill="light-dark(#000000, #ffffff)" font-family="Helvetica" font-size="12px" text-anchor="middle">Docker Runtime</text></switch></g></g></g><g data-cell-id="0yQUItjMywsnnXkV5zJc-47"><g transform="translate(0.5,0.5)"><rect x="230" y="420" width="140" height="40" rx="6" ry="6" fill="#c8e6c9" stroke="#4caf50" pointer-events="all" style="fill: light-dark(rgb(200, 230, 201), rgb(28, 54, 29)); stroke: light-dark(rgb(76, 175, 80), rgb(50, 135, 54));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 138px; height: 1px; padding-top: 440px; margin-left: 231px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Kubernetes Runtime</div></div></div></foreignObject><text x="300" y="444" fill="light-dark(#000000, #ffffff)" font-family="Helvetica" font-size="12px" text-anchor="middle">Kubernetes Runtime</text></switch></g></g></g><g data-cell-id="0yQUItjMywsnnXkV5zJc-48"><g transform="translate(0.5,0.5)"><rect x="190" y="370" width="220" height="40" rx="6" ry="6" fill="#c8e6c9" stroke="#4caf50" pointer-events="all" style="fill: light-dark(rgb(200, 230, 201), rgb(28, 54, 29)); stroke: light-dark(rgb(76, 175, 80), rgb(50, 135, 54));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 218px; height: 1px; padding-top: 390px; margin-left: 191px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Sandbox Lifecycle Implementation</div></div></div></foreignObject><text x="300" y="394" fill="light-dark(#000000, #ffffff)" font-family="Helvetica" font-size="12px" text-anchor="middle">Sandbox Lifecycle Implementation</text></switch></g></g></g></g><g data-cell-id="0yQUItjMywsnnXkV5zJc-49"><g transform="translate(0.5,0.5)"><path d="M 0 550 L 0 520 L 600 520 L 600 550" fill="#dae8fc" stroke="#6c8ebf" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(218, 232, 252), rgb(29, 41, 59)); stroke: light-dark(rgb(108, 142, 191), rgb(92, 121, 163));"/><path d="M 0 550 L 0 630 L 600 630 L 600 550" fill="none" stroke="#6c8ebf" stroke-miterlimit="10" pointer-events="none" style="stroke: light-dark(rgb(108, 142, 191), rgb(92, 121, 163));"/><path d="M 0 550 L 600 550" fill="none" stroke="#6c8ebf" stroke-miterlimit="10" pointer-events="none" style="stroke: light-dark(rgb(108, 142, 191), rgb(92, 121, 163));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 598px; height: 1px; padding-top: 535px; margin-left: 1px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 16px; font-family: Helvetica; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; word-wrap: normal; ">Sandbox Instances</div></div></div></foreignObject><text x="300" y="540" fill="light-dark(#000000, #ffffff)" font-family="Helvetica" font-size="16px" text-anchor="middle" font-weight="bold">Sandbox Instances</text></switch></g></g><g data-cell-id="0yQUItjMywsnnXkV5zJc-50"><g transform="translate(0.5,0.5)"><rect x="40" y="570" width="200" height="40" rx="6" ry="6" fill="#99ccff" stroke="#0066cc" pointer-events="all" style="fill: light-dark(rgb(153, 204, 255), rgb(30, 74, 118)); stroke: light-dark(rgb(0, 102, 204), rgb(86, 174, 255));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 590px; margin-left: 41px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Sandbox Container <div>(e.g., ubuntu:22.04)</div></div></div></div></foreignObject><text x="140" y="594" fill="light-dark(#000000, #ffffff)" font-family="Helvetica" font-size="12px" text-anchor="middle">Sandbox Container...</text></switch></g></g></g><g data-cell-id="0yQUItjMywsnnXkV5zJc-51"><g transform="translate(0.5,0.5)"><path d="M 375 590 L 246.37 590" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 241.12 590 L 248.12 586.5 L 246.37 590 L 248.12 593.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="0yQUItjMywsnnXkV5zJc-52"><g transform="translate(0.5,0.5)"><rect x="375" y="570" width="200" height="40" rx="6" ry="6" fill="#99ccff" stroke="#0066cc" pointer-events="all" style="fill: light-dark(rgb(153, 204, 255), rgb(30, 74, 118)); stroke: light-dark(rgb(0, 102, 204), rgb(86, 174, 255));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 590px; margin-left: 376px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">execd</div></div></div></foreignObject><text x="475" y="594" fill="light-dark(#000000, #ffffff)" font-family="Helvetica" font-size="12px" text-anchor="middle">execd</text></switch></g></g></g><g data-cell-id="0yQUItjMywsnnXkV5zJc-53"><g transform="translate(0.5,0.5)"><rect x="250" y="590" width="100" height="20" fill="none" stroke="none" pointer-events="all"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 600px; margin-left: 251px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Inject at startup</div></div></div></foreignObject><text x="300" y="604" fill="light-dark(#000000, #ffffff)" font-family="Helvetica" font-size="12px" text-anchor="middle">Inject at startup</text></switch></g></g></g><g data-cell-id="0yQUItjMywsnnXkV5zJc-54"><g transform="translate(0.5,0.5)"><rect x="370" y="620" width="200" height="20" fill="none" stroke="none" pointer-events="all"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 630px; margin-left: 371px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div style="line-height: 100%;"><br /></div></div></div></div></foreignObject><text x="470" y="634" fill="light-dark(#000000, #ffffff)" font-family="Helvetica" font-size="12px" text-anchor="middle">
</text></switch></g></g></g></g><g data-cell-id="0yQUItjMywsnnXkV5zJc-55"><g transform="translate(0.5,0.5)"><path d="M 90 90 L 90 148 Q 90 158 100 158 L 112.5 158 Q 122.5 158 122.5 168 L 122.5 219.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 122.5 224.88 L 119 217.88 L 122.5 219.63 L 126 217.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="0yQUItjMywsnnXkV5zJc-56"><g transform="translate(0.5,0.5)"><path d="M 230 90 L 230 148 Q 230 158 240 158 L 465 158 Q 475 158 475 168 L 475 219.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 475 224.88 L 471.5 217.88 L 475 219.63 L 478.5 217.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="0yQUItjMywsnnXkV5zJc-57"><g transform="translate(0.5,0.5)"><path d="M 370 90 L 370 148 Q 370 158 380 158 L 465 158 Q 475 158 475 168 L 475 219.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 475 224.88 L 471.5 217.88 L 475 219.63 L 478.5 217.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="0yQUItjMywsnnXkV5zJc-58"><g transform="translate(0.5,0.5)"><path d="M 510 90 L 510 148 Q 510 158 500 158 L 485 158 Q 475 158 475 168 L 475 219.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 475 224.88 L 471.5 217.88 L 475 219.63 L 478.5 217.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="0yQUItjMywsnnXkV5zJc-59"><g transform="translate(0.5,0.5)"><path d="M 165 266 L 165 308 Q 165 318 175 318 L 290 318 Q 300 318 300 328 L 300 363.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 300 368.88 L 296.5 361.88 L 300 363.63 L 303.5 361.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="0yQUItjMywsnnXkV5zJc-60"><g transform="translate(0.5,0.5)"><rect x="410" y="420" width="140" height="40" rx="6" ry="6" fill="#c8e6c9" stroke="#4caf50" pointer-events="all" style="fill: light-dark(rgb(200, 230, 201), rgb(28, 54, 29)); stroke: light-dark(rgb(76, 175, 80), rgb(50, 135, 54));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 138px; height: 1px; padding-top: 440px; margin-left: 411px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Custom Runtime</div></div></div></foreignObject><text x="480" y="444" fill="light-dark(#000000, #ffffff)" font-family="Helvetica" font-size="12px" text-anchor="middle">Custom Runtime</text></switch></g></g></g><g data-cell-id="0yQUItjMywsnnXkV5zJc-61"><g transform="translate(0.5,0.5)"><path d="M 560 250 L 630 250 L 630 590 L 581.37 590" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/><path d="M 576.12 590 L 583.12 586.5 L 581.37 590 L 583.12 593.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all" style="fill: light-dark(rgb(0, 0, 0), rgb(255, 255, 255)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g></g></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.drawio.com/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg>