From 85b49cee028f4924b4340b9fb4bca2476a1a70cd Mon Sep 17 00:00:00 2001 From: Bin Liu <bin@hyper.sh> Date: Thu, 1 Sep 2022 10:11:46 +0800 Subject: [PATCH] runtime-rs: add README.md Add README.md for runtime-rs. Fixes: #5022 Signed-off-by: Bin Liu <bin@hyper.sh> --- README.md | 1 + src/runtime-rs/README.md | 126 ++++++++++++++++++ .../docs/images/crate-overview.drawio | 1 + src/runtime-rs/docs/images/crate-overview.svg | 4 + 4 files changed, 132 insertions(+) create mode 100644 src/runtime-rs/README.md create mode 100644 src/runtime-rs/docs/images/crate-overview.drawio create mode 100644 src/runtime-rs/docs/images/crate-overview.svg diff --git a/README.md b/README.md index 4a7a6ea9a7..2b0759a2c0 100644 --- a/README.md +++ b/README.md @@ -117,6 +117,7 @@ The table below lists the core parts of the project: | Component | Type | Description | |-|-|-| | [runtime](src/runtime) | core | Main component run by a container manager and providing a containerd shimv2 runtime implementation. | +| [runtime-rs](src/runtime-rs) | core | The Rust version runtime. | | [agent](src/agent) | core | Management process running inside the virtual machine / POD that sets up the container environment. | | [libraries](src/libs) | core | Library crates shared by multiple Kata Container components or published to [`crates.io`](https://crates.io/index.html) | | [`dragonball`](src/dragonball) | core | An optional built-in VMM brings out-of-the-box Kata Containers experience with optimizations on container workloads | diff --git a/src/runtime-rs/README.md b/src/runtime-rs/README.md new file mode 100644 index 0000000000..a9f85e45d5 --- /dev/null +++ b/src/runtime-rs/README.md @@ -0,0 +1,126 @@ +# runtime-rs + +## Wath's runtime-rs + +`runtime-rs` is a new component introduced in Kata Containers 3.0, it is a Rust version of runtime(shim). It like [runtime](../runtime), but they have many difference: + +- `runtime-rs` is written in Rust, and `runtime` is written in Go. +- `runtime` is the default shim in Kata Containers 3.0, `runtime-rs` is still under heavy development. +- `runtime-rs` has a completed different architecture than `runtime`, you can check at the [architecture overview](../../docs/design/architecture_3.0). + +**Note**: + +`runtime-rs` is still under heavy development, you should avoid using it in critical system. + +## Architecture overview + +Also, `runtime-rs` provides the following features: + +- Turn key solution with builtin `Dragonball` Sandbox, all components in one process +- Async I/O to reduce resource consumption +- Extensible framework for multiple services, runtimes and hypervisors +- Lifecycle management for sandbox and container associated resources + +See the [architecture overview](../../docs/design/architecture_3.0) +for details on the `runtime-rs` design. + +`runtime-rs` is a runtime written in Rust, it is composed of several crates. + +This picture shows the overview about the crates under this directory and the relation between crates. + + + +Not all the features have been implemented yet, for details please check the [roadmap](../../docs/design/architecture_3.0/README.md#roadmap). + +## Crates + +The `runtime-rs` directory contains some crates in the crates directory that compose the `containerd-shim-kata-v2`. + +| Crate | Description | +|-|-| +| [`shim`](crates/shim)| containerd shimv2 implementation | +| [`service`](crates/service)| services for containers, includes task service | +| [`runtimes`](crates/runtimes)| container runtimes | +| [`resource`](crates/resource)| sandbox and container resources | +| [`hypervisor`](crates/hypervisor)| hypervisor that act as a sandbox | +| [`agent`](crates/agent)| library used to communicate with agent in the guest OS | +| [`persist`](crates/persist)| persist container state to disk | + +### shim + +`shim` is the entry point of the containerd shim process, it implements containerd shim's [binary protocol](https://github.com/containerd/containerd/tree/v1.6.8/runtime/v2#commands): + +- start: start a new shim process +- delete: delete exist a shim process +- run: run ttRPC service in shim + +containerd will launch a shim process and the shim process will serve as a ttRPC server to provide shim service through `TaskService` from `service` crate. + +### service + +The `runtime-rs` has an extensible framework, includes extension of services, runtimes, and hypervisors. + +Currently, only containerd compatible `TaskService` is implemented. + +`TaskService` has implemented the [containerd shim protocol](https://docs.rs/containerd-shim-protos/0.2.0/containerd_shim_protos/), +and interacts with runtimes through messages. + +### runtimes + +Runtime is a container runtime, the runtime handler handles messages from task services to manage containers. +Runtime handler and Runtime instance is used to deal with the operation for sandbox and container. + +Currently, only `VirtContainer` has been implemented. + +### resource + +In `runtime-rs`, all networks/volumes/rootfs are abstracted as resources. + +Resources are classified into two types: + +- sandbox resources: network, share-fs +- container resources: rootfs, volume, cgroup + +[Here](../../docs/design/architecture_3.0/README.md#resource-manager) is a detailed description of the resources. + +### hypervisor + +For `VirtContainer`, there will be more hypervisors to choose. + +Currently, only built-in `Dragonball` has been implemented. + +### agent + +`agent` is used to communicate with agent in the guest OS from the shim side. The only supported agent is `KataAgent`. + +### persist + +Persist defines traits and functions to help different components save state to disk and load state from disk. + +## Build and install + +```bash +$ make +$ sudo make install +``` +## Configuration + +`runtime-rs` has the same [configuration as `runtime`](../runtime/README.md#configuration) with some [limitations](#limitations). + +## Logging + +See the +[debugging section of the developer guide](../../docs/Developer-Guide.md#troubleshoot-kata-containers). + +## Debugging + +See the +[debugging section of the developer guide](../../docs/Developer-Guide.md#troubleshoot-kata-containers). + +## Limitations + +For Kata Containers limitations, see the +[limitations file](../../docs/Limitations.md) +for further details. + +`runtime-rs` is under heavy developments, and doesn't support all features as the Golang version [`runtime`](../runtime), check the [roadmap](../../docs/design/architecture_3.0/README.md#roadmap) for details. diff --git a/src/runtime-rs/docs/images/crate-overview.drawio b/src/runtime-rs/docs/images/crate-overview.drawio new file mode 100644 index 0000000000..674806df63 --- /dev/null +++ b/src/runtime-rs/docs/images/crate-overview.drawio @@ -0,0 +1 @@ +<mxfile host="Chrome" modified="2022-08-31T09:20:38.848Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36" etag="q7LGXZcZqIJIhO0RuVwe" version="20.2.5" type="device"><diagram id="zc7Et7uFz2rY5AC4eLr2" name="Page-1">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</diagram></mxfile> \ No newline at end of file diff --git a/src/runtime-rs/docs/images/crate-overview.svg b/src/runtime-rs/docs/images/crate-overview.svg new file mode 100644 index 0000000000..24cadd7cf6 --- /dev/null +++ b/src/runtime-rs/docs/images/crate-overview.svg @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Do not edit this file with editors other than diagrams.net --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="3301px" height="1821px" viewBox="-0.5 -0.5 3301 1821" content="<mxfile host="Chrome" modified="2022-08-31T09:20:52.688Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36" etag="6PoFh_lyA02tmDO1LzJB" version="20.2.5" type="device"><diagram id="zc7Et7uFz2rY5AC4eLr2" name="Page-1">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</diagram></mxfile>" style="background-color: rgb(255, 255, 255);"><defs><linearGradient x1="0%" y1="0%" x2="0%" y2="100%" id="mx-gradient-ccccff-1-ffccff-1-s-0"><stop offset="0%" style="stop-color: rgb(204, 204, 255); stop-opacity: 1;"/><stop offset="100%" style="stop-color: rgb(255, 204, 255); stop-opacity: 1;"/></linearGradient><linearGradient x1="0%" y1="0%" x2="0%" y2="100%" id="mx-gradient-e6d0de-1-d5739d-1-s-0"><stop offset="0%" style="stop-color: rgb(230, 208, 222); stop-opacity: 1;"/><stop offset="100%" style="stop-color: rgb(213, 115, 157); stop-opacity: 1;"/></linearGradient><linearGradient x1="0%" y1="0%" x2="0%" y2="100%" id="mx-gradient-f5f5f5-1-b3b3b3-1-s-0"><stop offset="0%" style="stop-color: rgb(245, 245, 245); stop-opacity: 1;"/><stop offset="100%" style="stop-color: rgb(179, 179, 179); stop-opacity: 1;"/></linearGradient><linearGradient x1="0%" y1="0%" x2="0%" y2="100%" id="mx-gradient-d5e8d4-1-97d077-1-s-0"><stop offset="0%" style="stop-color: rgb(213, 232, 212); stop-opacity: 1;"/><stop offset="100%" style="stop-color: rgb(151, 208, 119); stop-opacity: 1;"/></linearGradient><linearGradient x1="0%" y1="0%" x2="0%" y2="100%" id="mx-gradient-fff2cc-1-ffd966-1-s-0"><stop offset="0%" style="stop-color: rgb(255, 242, 204); stop-opacity: 1;"/><stop offset="100%" style="stop-color: rgb(255, 217, 102); stop-opacity: 1;"/></linearGradient><linearGradient x1="0%" y1="0%" x2="0%" y2="100%" id="mx-gradient-dae8fc-1-7ea6e0-1-s-0"><stop offset="0%" style="stop-color: rgb(218, 232, 252); stop-opacity: 1;"/><stop offset="100%" style="stop-color: rgb(126, 166, 224); stop-opacity: 1;"/></linearGradient></defs><g><rect x="1709" y="1200" width="661" height="520" fill="url(#mx-gradient-ccccff-1-ffccff-1-s-0)" stroke="#d79b00" pointer-events="none"/><g fill="rgb(0, 0, 0)" font-family="Verdana" pointer-events="none" font-size="20px"><text x="1730.5" y="1245.5">create::hypervisor</text></g><rect x="2410" y="810" width="850" height="340" fill="url(#mx-gradient-e6d0de-1-d5739d-1-s-0)" stroke="#996185" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 827px; margin-left: 2422px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 20px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: nowrap;">create::agent</div></div></div></foreignObject><text x="2422" y="847" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="20px">create::agent</text></switch></g><rect x="2420" y="60" width="840" height="480" fill="url(#mx-gradient-f5f5f5-1-b3b3b3-1-s-0)" stroke="#666666" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 77px; margin-left: 2432px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 20px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: nowrap;">create::hypervisor</div></div></div></foreignObject><text x="2432" y="97" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="20px">create::hypervisor</text></switch></g><rect x="300" y="60" width="410" height="410" fill="url(#mx-gradient-d5e8d4-1-97d077-1-s-0)" stroke="#82b366" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 77px; margin-left: 312px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 20px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: nowrap;">create::service</div></div></div></foreignObject><text x="312" y="97" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="20px">create::service</text></switch></g><path d="M 135 110 L 135 145 L 326.13 145" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 331.38 145 L 324.38 148.5 L 326.13 145 L 324.38 141.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 170px; margin-left: 190px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">service_manager.run()</div></div></div></foreignObject><text x="190" y="174" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">service_manager.run()</text></switch></g><path d="M 92.5 110 L 92.57 335 L 326.13 335" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 331.38 335 L 324.38 338.5 L 326.13 335 L 324.38 331.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 420px; margin-left: 138px;"><div data-drawio-colors="color: #000000; " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: nowrap;">RPC calls<br /><br />create_task<br />start<br />delete<br />kill<br />exec<br />... ...</div></div></div></foreignObject><text x="138" y="424" fill="#000000" font-family="Verdana" font-size="14px">RPC calls...</text></switch></g><rect x="50" y="60" width="170" height="50" fill="#76608a" stroke="#432d57" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><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: 85px; margin-left: 51px;"><div data-drawio-colors="color: #ffffff; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 20px; font-family: Verdana; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">crate::shim</div></div></div></foreignObject><text x="135" y="91" fill="#ffffff" font-family="Verdana" font-size="20px" text-anchor="middle">crate::shim</text></switch></g><path d="M 1027.5 200 L 1027.57 220 L 1002.57 220 L 1002.52 233.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 1002.5 238.88 L 999.03 231.87 L 1002.52 233.63 L 1006.03 231.89 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><rect x="890" y="150" width="275" height="50" fill="#bac8d3" stroke="#23445d" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 273px; height: 1px; padding-top: 175px; margin-left: 891px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div><span style="background-color: initial;">struct RuntimeHandlerManager</span></div></div></div></div></foreignObject><text x="1028" y="179" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">struct RuntimeHandlerManager</text></switch></g><rect x="790" y="60" width="1540" height="1100" fill="url(#mx-gradient-fff2cc-1-ffd966-1-s-0)" stroke="#d6b656" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 1528px; height: 1px; padding-top: 77px; margin-left: 802px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 24px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">crate::runtimes</div></div></div></foreignObject><text x="802" y="101" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="24px">crate::runtimes</text></switch></g><rect x="840" y="240" width="325" height="50" fill="#bac8d3" stroke="#23445d" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 323px; height: 1px; padding-top: 265px; margin-left: 841px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div>struct RuntimeHandlerManagerInner</div><div></div></div></div></div></foreignObject><text x="1003" y="269" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">struct RuntimeHandlerManagerInner
</text></switch></g><rect x="1339" y="230" width="410" height="50" fill="url(#mx-gradient-dae8fc-1-7ea6e0-1-s-0)" stroke="#6c8ebf" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 408px; height: 1px; padding-top: 255px; margin-left: 1340px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div><span style="background-color: initial;">trait RuntimeHandler</span></div></div></div></div></foreignObject><text x="1544" y="259" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">trait RuntimeHandler</text></switch></g><path d="M 1339 255 L 1299.57 255 L 1299.57 515 L 1266.37 515" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 1261.12 515 L 1268.12 511.5 L 1266.37 515 L 1268.12 518.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 388px; margin-left: 1235px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">new_instance()</div></div></div></foreignObject><text x="1235" y="393" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">new_instance()</text></switch></g><rect x="1339" y="280" width="410" height="130" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 408px; height: 1px; padding-top: 345px; margin-left: 1341px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div> fn init() -> Result<()></div><div> fn name() -> String</div><div> fn new_handler() -> Arc<dyn RuntimeHandler></div><div> async fn new_instance() -> Result<RuntimeInstance></div><div> fn cleanup() -> Result<()></div><div><br /></div></div></div></div></foreignObject><text x="1341" y="349" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px">fn init() -> Result<()>...</text></switch></g><path d="M 1002.5 380 L 1002.57 435 L 1050 435 L 1050 483.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 1050 488.88 L 1046.5 481.88 L 1050 483.63 L 1053.5 481.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 435px; margin-left: 1026px;"><div data-drawio-colors="color: #000000; background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">runtime_instance</div></div></div></foreignObject><text x="1026" y="439" fill="#000000" font-family="Verdana" font-size="14px" text-anchor="middle">runtime_instance</text></switch></g><rect x="840" y="290" width="325" height="90" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 323px; height: 1px; padding-top: 335px; margin-left: 842px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div><div> id: String,</div><div> runtime_instance: RuntimeInstance,</div></div></div></div></div></foreignObject><text x="842" y="339" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px">id: String,...</text></switch></g><rect x="840" y="490" width="420" height="50" fill="#bac8d3" stroke="#23445d" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 418px; height: 1px; padding-top: 515px; margin-left: 841px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div><span style="background-color: initial;">struct RuntimeInstance</span></div></div></div></div></foreignObject><text x="1050" y="519" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">struct RuntimeInstance</text></switch></g><path d="M 1260 562.5 L 1299.57 562.57 L 1299.57 585 L 1332.63 585" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 1337.88 585 L 1330.88 588.5 L 1332.63 585 L 1330.88 581.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 553px; margin-left: 1300px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">sandbox</div></div></div></foreignObject><text x="1300" y="557" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">sandbox</text></switch></g><path d="M 1050 630 L 1050 730 L 1050 743.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 1050 748.88 L 1046.5 741.88 L 1050 743.63 L 1053.5 741.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 691px; margin-left: 1051px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">container_manager</div></div></div></foreignObject><text x="1051" y="695" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">container_manager</text></switch></g><rect x="840" y="540" width="420" height="90" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 418px; height: 1px; padding-top: 585px; margin-left: 842px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div><div> pub sandbox: Arc<dyn Sandbox>,</div><div> pub container_manager: Arc<dyn ContainerManager>,</div></div><div><br /></div></div></div></div></foreignObject><text x="842" y="589" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px">pub sandbox: Arc<dyn Sandbox>,...</text></switch></g><rect x="1339" y="560" width="370" height="50" fill="url(#mx-gradient-dae8fc-1-7ea6e0-1-s-0)" stroke="#6c8ebf" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 368px; height: 1px; padding-top: 585px; margin-left: 1340px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div>trait Sandbox</div></div></div></div></foreignObject><text x="1524" y="589" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">trait Sandbox</text></switch></g><rect x="1339" y="610" width="370" height="90" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 368px; height: 1px; padding-top: 655px; margin-left: 1341px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div><div><div><br /></div><div> async fn start() -> Result<()>;</div><div> async fn stop() -> Result<()>;</div><div> async fn cleanup() -> Result<()>;</div><div> async fn shutdown() -> Result<()>;</div></div></div><div><br /></div></div></div></div></foreignObject><text x="1341" y="659" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px">async fn start() -> Result<()>;...</text></switch></g><rect x="840" y="750" width="420" height="50" fill="url(#mx-gradient-dae8fc-1-7ea6e0-1-s-0)" stroke="#6c8ebf" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 418px; height: 1px; padding-top: 775px; margin-left: 841px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div>trait ContainerManager</div></div></div></div></foreignObject><text x="1050" y="779" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">trait ContainerManager</text></switch></g><rect x="840" y="800" width="420" height="170" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 418px; height: 1px; padding-top: 885px; margin-left: 842px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div><div><div><br /></div><div> async fn create_container() -> Result<PID>;</div><div> async fn pause_container() -> Result<()>;</div></div></div><div><div> async fn resume_container() -> Result<()>;</div><div> async fn stats_container() -> Result<StatsInfo>;</div><div> async fn update_container() -> Result<()>;</div><div> async fn connect_container() -> Result<PID>;</div></div><div><br /></div><div> ... ...</div></div></div></div></foreignObject><text x="842" y="889" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px">async fn create_container() -> Result<PID>;...</text></switch></g><path d="M 1930 145 L 1839.57 145 L 1839.57 242.57 L 1757.12 242.51" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 1750.12 242.5 L 1757.12 239.01 L 1757.12 246.01 Z" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 148px; margin-left: 1879px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">impl</div></div></div></foreignObject><text x="1879" y="152" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">impl</text></switch></g><rect x="1930" y="120" width="200" height="50" fill="#b0e3e6" stroke="#0e8088" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><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: 145px; margin-left: 1931px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">LinuxContainer</div></div></div></foreignObject><text x="2030" y="149" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">LinuxContainer</text></switch></g><path d="M 1930 210 L 1839.57 210 L 1839.57 255 L 1757.12 255" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 1750.12 255 L 1757.12 251.5 L 1757.12 258.5 Z" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 211px; margin-left: 1876px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">impl</div></div></div></foreignObject><text x="1876" y="215" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">impl</text></switch></g><rect x="1930" y="185" width="200" height="50" fill="#b0e3e6" stroke="#0e8088" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><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: 210px; margin-left: 1931px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">WasmContainer</div></div></div></foreignObject><text x="2030" y="214" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">WasmContainer</text></switch></g><path d="M 2030 300 L 2030 325 L 2065 325 L 2065 343.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 2065 348.88 L 2061.5 341.88 L 2065 343.63 L 2068.5 341.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 316px; margin-left: 2074px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">new_instance()</div></div></div></foreignObject><text x="2074" y="320" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">new_instance()</text></switch></g><path d="M 1930 275 L 1839.57 275 L 1839.57 267.57 L 1757.12 267.51" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 1750.12 267.5 L 1757.12 264.01 L 1757.12 271.01 Z" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 278px; margin-left: 1888px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">impl</div></div></div></foreignObject><text x="1888" y="282" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">impl</text></switch></g><rect x="1930" y="250" width="200" height="50" fill="#b0e3e6" stroke="#0e8088" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><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: 275px; margin-left: 1931px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div>VirtContainer</div></div></div></div></foreignObject><text x="2030" y="279" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">VirtContainer</text></switch></g><rect x="1890" y="350" width="350" height="50" fill="#bac8d3" stroke="#23445d" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 348px; height: 1px; padding-top: 375px; margin-left: 1891px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div>struct RuntimeInstance</div></div></div></div></foreignObject><text x="2065" y="379" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">struct RuntimeInstance</text></switch></g><path d="M 2240 445 L 2260 445 L 2260 575 L 2246.37 575" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 2241.12 575 L 2248.12 571.5 L 2246.37 575 L 2248.12 578.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 511px; margin-left: 2260px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">sandbox</div></div></div></foreignObject><text x="2260" y="515" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">sandbox</text></switch></g><path d="M 1890 445 L 1789.57 445 L 1789.57 775 L 1695.37 775" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 1690.12 775 L 1697.12 771.5 L 1695.37 775 L 1697.12 778.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 455px; margin-left: 1780px;"><div data-drawio-colors="color: #000000; background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">container_manager</div></div></div></foreignObject><text x="1780" y="459" fill="#000000" font-family="Verdana" font-size="14px" text-anchor="middle">container_manager</text></switch></g><rect x="1890" y="400" width="350" height="90" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 348px; height: 1px; padding-top: 445px; margin-left: 1892px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div><div><br /></div><div><span style="background-color: initial;"> sandbox: </span><span style="background-color: initial;">VirtSandbox,</span></div><div> container_manager: <span style="background-color: initial;">VirtContainerManager,</span></div></div></div></div></div></foreignObject><text x="1892" y="449" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px">sandbox: VirtSandbox,...</text></switch></g><path d="M 1890 575 L 1799.57 575 L 1799.57 585 L 1717.12 585" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 1710.12 585 L 1717.12 581.5 L 1717.12 588.5 Z" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 560px; margin-left: 1796px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">impl</div></div></div></foreignObject><text x="1796" y="564" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">impl</text></switch></g><rect x="1890" y="550" width="350" height="50" fill="#bac8d3" stroke="#23445d" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 348px; height: 1px; padding-top: 575px; margin-left: 1891px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div>struct VirtSandbox</div></div></div></div></foreignObject><text x="2065" y="579" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">struct VirtSandbox</text></switch></g><path d="M 2240 682.5 L 2240 693 L 2340 693 L 2340 1395 L 2085.37 1395" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 2080.12 1395 L 2087.12 1391.5 L 2085.37 1395 L 2087.12 1398.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 748px; margin-left: 2291px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">resource_manager</div></div></div></foreignObject><text x="2291" y="752" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">resource_manager</text></switch></g><path d="M 2240 627.5 L 2375 627.57 L 2375 275 L 2503.63 275" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 2508.88 275 L 2501.88 278.5 L 2503.63 275 L 2501.88 271.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 601px; margin-left: 2301px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">hypervisor</div></div></div></foreignObject><text x="2301" y="605" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">hypervisor</text></switch></g><path d="M 2240 655 L 2380 655 L 2380 935 L 2513.63 935" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 2518.88 935 L 2511.88 938.5 L 2513.63 935 L 2511.88 931.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 650px; margin-left: 2283px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">agent</div></div></div></foreignObject><text x="2283" y="654" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">agent</text></switch></g><rect x="1890" y="600" width="350" height="110" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 348px; height: 1px; padding-top: 655px; margin-left: 1892px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div><br /></div><div><div> sid: String,</div><div><span style="background-color: initial;"> resource_manager: Arc<ResourceManager>,</span><br /></div><div> agent: Arc<dyn Agent>,</div><div> hypervisor: Arc<dyn Hypervisor>,</div><div><br /></div></div></div></div></div></foreignObject><text x="1892" y="659" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px">sid: String,...</text></switch></g><path d="M 1689 830 L 2290 830 L 2290 947.57 L 2513.63 947.5" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 2518.88 947.5 L 2511.88 951 L 2513.63 947.5 L 2511.88 944 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 830px; margin-left: 1730px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">agent</div></div></div></foreignObject><text x="1730" y="834" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">agent</text></switch></g><path d="M 1339 775 L 1268.12 775" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 1261.12 775 L 1268.12 771.5 L 1268.12 778.5 Z" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 775px; margin-left: 1299px;"><div data-drawio-colors="color: #000000; background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">impl</div></div></div></foreignObject><text x="1299" y="779" fill="#000000" font-family="Verdana" font-size="14px" text-anchor="middle">impl</text></switch></g><rect x="1339" y="750" width="350" height="50" fill="#bac8d3" stroke="#23445d" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 348px; height: 1px; padding-top: 775px; margin-left: 1340px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div>struct VirtContainerManager</div></div></div></div></foreignObject><text x="1514" y="779" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">struct VirtContainerManager</text></switch></g><path d="M 1339 860 L 1290 860 L 1290 1395 L 1742.63 1395" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 1747.88 1395 L 1740.88 1398.5 L 1742.63 1395 L 1740.88 1391.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 1341px; margin-left: 1195px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">resource_manager</div></div></div></foreignObject><text x="1195" y="1345" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">resource_manager</text></switch></g><path d="M 1514 920 L 1514 945 L 1514.43 963.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 1514.55 968.88 L 1510.89 961.96 L 1514.43 963.63 L 1517.89 961.8 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 945px; margin-left: 1515px;"><div data-drawio-colors="color: #000000; background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 18px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;"><span style="font-size: 14px; text-align: left;">containers</span></div></div></div></foreignObject><text x="1515" y="951" fill="#000000" font-family="Verdana" font-size="18px" text-anchor="middle">containers</text></switch></g><rect x="1339" y="800" width="350" height="120" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 348px; height: 1px; padding-top: 860px; margin-left: 1341px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div><div> sid: String,</div><div> pid: u32,</div><div> containers: HashMap<String, Container>,</div><div> resource_manager: Arc<ResourceManager>,</div><div> agent: Arc<dyn Agent>,</div></div></div></div></div></foreignObject><text x="1341" y="864" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px">sid: String,...</text></switch></g><rect x="1749" y="1420" width="330" height="50" fill="#bac8d3" stroke="#23445d" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 328px; height: 1px; padding-top: 1445px; margin-left: 1750px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div>struct ResourceManagerInner</div></div></div></div></foreignObject><text x="1914" y="1449" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">struct ResourceManagerInner</text></switch></g><path d="M 2079 1575 L 2079 1535 L 2360 1535 L 2360 287.57 L 2503.63 287.5" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 2508.88 287.5 L 2501.88 291 L 2503.63 287.5 L 2501.88 284 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 1513px; margin-left: 2110px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">hypervisor</div></div></div></foreignObject><text x="2110" y="1517" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">hypervisor</text></switch></g><path d="M 2079 1627.5 L 2910 1627.57 L 2910 935 L 2896.37 935" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 2891.12 935 L 2898.12 931.5 L 2896.37 935 L 2898.12 938.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 1603px; margin-left: 2152px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">agent</div></div></div></foreignObject><text x="2152" y="1607" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">agent</text></switch></g><rect x="1749" y="1470" width="330" height="210" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 328px; height: 1px; padding-top: 1575px; margin-left: 1751px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div><div><div> sid: String,</div><div> toml_config: Arc<TomlConfig>,</div><div> agent: Arc<dyn Agent>,</div><div> hypervisor: Arc<dyn Hypervisor>,</div><div> network: Option<Arc<dyn Network>>,</div><div> share_fs: Option<Arc<dyn ShareFs>>,</div><div><br /></div><div> pub rootfs_resource: RootFsResource,</div><div> pub volume_resource: VolumeResource,</div><div> pub cgroups_resource: CgroupsResource,</div></div></div></div></div></div></foreignObject><text x="1751" y="1579" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px">sid: String,...</text></switch></g><rect x="1749" y="1370" width="330" height="50" fill="#bac8d3" stroke="#23445d" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 328px; height: 1px; padding-top: 1395px; margin-left: 1750px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div>struct ResourceManager</div></div></div></div></foreignObject><text x="1914" y="1399" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">struct ResourceManager</text></switch></g><rect x="2510" y="250" width="370" height="50" fill="url(#mx-gradient-dae8fc-1-7ea6e0-1-s-0)" stroke="#6c8ebf" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 368px; height: 1px; padding-top: 275px; margin-left: 2511px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div>trait Hypervisor</div></div></div></div></foreignObject><text x="2695" y="279" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">trait Hypervisor</text></switch></g><rect x="2510" y="300" width="370" height="170" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 368px; height: 1px; padding-top: 385px; margin-left: 2512px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div><div><div><div> async fn prepare_vm() -> Result<()>;</div><div> async fn start_vm() -> Result<()>;</div><div> async fn stop_vm() -> Result<()>;</div><div> async fn pause_vm() -> Result<()>;</div><div> async fn save_vm() -> Result<()>;</div><div> async fn resume_vm() -> Result<()>;</div></div></div></div><div><br /></div><div> ... ...</div></div></div></div></foreignObject><text x="2512" y="389" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px">async fn prepare_vm() -> Result<()>;...</text></switch></g><path d="M 3000 275 L 2888.12 275" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 2881.12 275 L 2888.12 271.5 L 2888.12 278.5 Z" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 272px; margin-left: 2956px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">impl</div></div></div></foreignObject><text x="2956" y="276" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">impl</text></switch></g><rect x="3000" y="250" width="200" height="50" fill="#b0e3e6" stroke="#0e8088" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><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: 275px; margin-left: 3001px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">Dragonball</div></div></div></foreignObject><text x="3100" y="279" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">Dragonball</text></switch></g><path d="M 3000 355 L 2940 355 L 2940 287.57 L 2888.12 287.51" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 2881.12 287.5 L 2888.12 284.01 L 2888.11 291.01 Z" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 353px; margin-left: 2955px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">impl</div></div></div></foreignObject><text x="2955" y="357" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">impl</text></switch></g><rect x="3000" y="330" width="200" height="50" fill="#b0e3e6" stroke="#0e8088" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><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: 355px; margin-left: 3001px;"><div data-drawio-colors="color: #808080; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(128, 128, 128); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">QEMU(WIP)</div></div></div></foreignObject><text x="3100" y="359" fill="#808080" font-family="Verdana" font-size="14px" text-anchor="middle">QEMU(WIP)</text></switch></g><rect x="2520" y="910" width="370" height="50" fill="url(#mx-gradient-dae8fc-1-7ea6e0-1-s-0)" stroke="#6c8ebf" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 368px; height: 1px; padding-top: 935px; margin-left: 2521px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div>trait Agent</div></div></div></div></foreignObject><text x="2705" y="939" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">trait Agent</text></switch></g><rect x="2520" y="960" width="370" height="130" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 368px; height: 1px; padding-top: 1025px; margin-left: 2522px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div><div><div><div><div> async fn create_sandbox();</div><div> async fn destroy_sandbox();</div></div></div></div></div><div><div> async fn create_container();</div><div> async fn pause_container();</div></div><div><br /></div><div> ... ...</div></div></div></div></foreignObject><text x="2522" y="1029" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px">async fn create_sandbox();...</text></switch></g><path d="M 3000 922 L 2945 922 L 2898.12 922.43" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 2891.12 922.49 L 2898.09 918.93 L 2898.15 925.93 Z" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 923px; margin-left: 2945px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">impl</div></div></div></foreignObject><text x="2945" y="927" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">impl</text></switch></g><rect x="3000" y="897" width="200" height="50" fill="#b0e3e6" stroke="#0e8088" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><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: 922px; margin-left: 3001px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">KataAgent</div></div></div></foreignObject><text x="3100" y="926" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">KataAgent</text></switch></g><rect x="332.5" y="120" width="345" height="50" fill="#bac8d3" stroke="#23445d" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 343px; height: 1px; padding-top: 145px; margin-left: 334px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div>struct ServiceManager</div><div></div></div></div></div></foreignObject><text x="505" y="149" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">struct ServiceManager
</text></switch></g><path d="M 677.5 192.5 L 758.71 192.57 L 758.71 215 L 833.63 215" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 838.88 215 L 831.88 218.5 L 833.63 215 L 831.88 211.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 191px; margin-left: 736px;"><div data-drawio-colors="color: #000000; background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">handler</div></div></div></foreignObject><text x="736" y="195" fill="#000000" font-family="Verdana" font-size="14px" text-anchor="middle">handler</text></switch></g><path d="M 505 260 L 505 303.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 505 308.88 L 501.5 301.88 L 505 303.63 L 508.5 301.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><rect x="332.5" y="170" width="345" height="90" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 343px; height: 1px; padding-top: 215px; margin-left: 335px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div> handler: Arc<RuntimeHandlerManager>,</div><div> task_server: Option<Server>,</div></div></div></div></foreignObject><text x="335" y="219" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px">handler: Arc<RuntimeHandlerManager>,...</text></switch></g><path d="M 677.5 335 L 758.71 335 L 758.71 227.57 L 833.63 227.51" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 838.88 227.5 L 831.89 231.01 L 833.63 227.51 L 831.88 224.01 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 282px; margin-left: 759px;"><div data-drawio-colors="color: #000000; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: nowrap;">handler_message()</div></div></div></foreignObject><text x="759" y="286" fill="#000000" font-family="Verdana" font-size="14px" text-anchor="middle">handler_message()</text></switch></g><rect x="332.5" y="310" width="345" height="50" fill="#bac8d3" stroke="#23445d" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 343px; height: 1px; padding-top: 335px; margin-left: 334px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div>struct TaskService</div><div></div></div></div></div></foreignObject><text x="505" y="339" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">struct TaskService
</text></switch></g><rect x="332.5" y="360" width="345" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 343px; height: 1px; padding-top: 390px; margin-left: 335px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div> handler: Arc<RuntimeHandlerManager>,</div></div></div></div></foreignObject><text x="335" y="394" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px"> handler: Arc<RuntimeHandlerManager>,</text></switch></g><rect x="840" y="190" width="325" height="50" fill="#bac8d3" stroke="#23445d" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 323px; height: 1px; padding-top: 215px; margin-left: 841px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div>struct RuntimeHandlerManager</div><div></div></div></div></div></foreignObject><text x="1003" y="219" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">struct RuntimeHandlerManager
</text></switch></g><rect x="160" y="1210" width="260" height="50" fill="#bac8d3" stroke="#23445d" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 258px; height: 1px; padding-top: 1235px; margin-left: 161px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div><span style="background-color: initial;">struct StructXyz</span></div></div></div></div></foreignObject><text x="290" y="1239" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">struct StructXyz</text></switch></g><rect x="160" y="1290" width="260" height="50" fill="url(#mx-gradient-dae8fc-1-7ea6e0-1-s-0)" stroke="#6c8ebf" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 258px; height: 1px; padding-top: 1315px; margin-left: 161px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div>trait TraitAbc</div></div></div></div></foreignObject><text x="290" y="1319" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">trait TraitAbc</text></switch></g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><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: 1155px; margin-left: 161px;"><div data-drawio-colors="color: #000000; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 24px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">Legend</div></div></div></foreignObject><text x="220" y="1162" fill="#000000" font-family="Verdana" font-size="24px" text-anchor="middle">Legend</text></switch></g><path d="M 160 1404.29 L 263.63 1404.29" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 268.88 1404.29 L 261.88 1407.79 L 263.63 1404.29 L 261.88 1400.79 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 128px; height: 1px; padding-top: 1405px; margin-left: 290px;"><div data-drawio-colors="color: #000000; " style="box-sizing: border-box; font-size: 0px; text-align: right;"><div style="display: inline-block; font-size: 18px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">Function call</div></div></div></foreignObject><text x="418" y="1410" fill="#000000" font-family="Verdana" font-size="18px" text-anchor="end">Function call</text></switch></g><path d="M 160 1464.29 L 263.63 1464.29" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 268.88 1464.29 L 261.88 1467.79 L 263.63 1464.29 L 261.88 1460.79 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 1px; height: 1px; padding-top: 1465px; margin-left: 418px;"><div data-drawio-colors="color: #000000; " style="box-sizing: border-box; font-size: 0px; text-align: right;"><div style="display: inline-block; font-size: 18px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: nowrap;">Reference</div></div></div></foreignObject><text x="418" y="1470" fill="#000000" font-family="Verdana" font-size="18px" text-anchor="end">Reference</text></switch></g><path d="M 160 1524.29 L 261.88 1524.29" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/><path d="M 268.88 1524.29 L 261.88 1527.79 L 261.88 1520.79 Z" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 128px; height: 1px; padding-top: 1525px; margin-left: 290px;"><div data-drawio-colors="color: #000000; " style="box-sizing: border-box; font-size: 0px; text-align: right;"><div style="display: inline-block; font-size: 18px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">Trait Impl</div></div></div></foreignObject><text x="418" y="1530" fill="#000000" font-family="Verdana" font-size="18px" text-anchor="end">Trait Impl</text></switch></g><rect x="1339" y="970" width="351" height="50" fill="#bac8d3" stroke="#23445d" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 349px; height: 1px; padding-top: 995px; margin-left: 1340px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div>struct Container</div></div></div></div></foreignObject><text x="1515" y="999" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">struct Container</text></switch></g><path d="M 1690 1050 L 1790 1050 L 1790 905 L 1883.63 905" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 1888.88 905 L 1881.88 908.5 L 1883.63 905 L 1881.88 901.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 978px; margin-left: 1793px;"><div data-drawio-colors="color: #000000; background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">inner</div></div></div></foreignObject><text x="1793" y="982" fill="#000000" font-family="Verdana" font-size="14px" text-anchor="middle">inner</text></switch></g><rect x="1339" y="1020" width="351" height="120" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 349px; height: 1px; padding-top: 1080px; margin-left: 1341px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div> <span style="background-color: initial;"> pid: u32,</span></div><div><span style="background-color: initial;"> config: ContainerConfig,</span><br /></div><div> inner: Arc<RwLock<ContainerInner>>,</div><div> agent: Arc<dyn Agent>,</div><div> resource_manager: ResourceManager,</div></div></div></div></foreignObject><text x="1341" y="1084" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px">pid: u32,...</text></switch></g><rect x="1890" y="880" width="350" height="50" fill="#bac8d3" stroke="#23445d" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 348px; height: 1px; padding-top: 905px; margin-left: 1891px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div>struct ContainerInner</div></div></div></div></foreignObject><text x="2065" y="909" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">struct ContainerInner</text></switch></g><path d="M 1977.5 1060 L 1977.43 1150 L 2020 1150 L 2020 1233.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 2020 1238.88 L 2016.5 1231.88 L 2020 1233.63 L 2023.5 1231.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 1126px; margin-left: 1978px;"><div data-drawio-colors="color: #000000; background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">rootfs</div></div></div></foreignObject><text x="1978" y="1131" fill="#000000" font-family="Verdana" font-size="14px" text-anchor="middle">rootfs</text></switch></g><path d="M 2065 1060 L 2065 1150 L 2170 1150 L 2170 1233.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 2170 1238.88 L 2166.5 1231.88 L 2170 1233.63 L 2173.5 1231.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 1128px; margin-left: 2065px;"><div data-drawio-colors="color: #000000; background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; background-color: rgb(255, 255, 255); white-space: nowrap;">volume</div></div></div></foreignObject><text x="2065" y="1132" fill="#000000" font-family="Verdana" font-size="14px" text-anchor="middle">volume</text></switch></g><rect x="1890" y="930" width="350" height="130" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 348px; height: 1px; padding-top: 995px; margin-left: 1892px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div> <span style="background-color: initial;"> agent: Arc<dyn Agent>,</span></div><div> init_process: Process,</div><div> exec_processes: HashMap<String, Exec>,</div><div> rootfs: Vec<Arc<dyn Rootfs>>,</div><div> volumes: Vec<Arc<dyn Volume>>,</div></div></div></div></foreignObject><text x="1892" y="999" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px">agent: Arc<dyn Agent>,...</text></switch></g><rect x="1950" y="1240" width="140" height="50" fill="url(#mx-gradient-dae8fc-1-7ea6e0-1-s-0)" stroke="#6c8ebf" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><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: 1265px; margin-left: 1951px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div>trait Rootfs</div></div></div></div></foreignObject><text x="2020" y="1269" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">trait Rootfs</text></switch></g><rect x="2100" y="1240" width="140" height="50" fill="url(#mx-gradient-dae8fc-1-7ea6e0-1-s-0)" stroke="#6c8ebf" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><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: 1265px; margin-left: 2101px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 14px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;"><div>trait Volume</div></div></div></div></foreignObject><text x="2170" y="1269" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="14px" text-anchor="middle">trait Volume</text></switch></g><rect x="161" y="1580" width="139" height="50" fill="url(#mx-gradient-d5e8d4-1-97d077-1-s-0)" stroke="#82b366" pointer-events="none"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 1592px; margin-left: 168px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 8px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: nowrap;">create::<name></div></div></div></foreignObject><text x="168" y="1600" fill="rgb(0, 0, 0)" font-family="Verdana" font-size="8px">create::<name></text></switch></g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 78px; height: 1px; padding-top: 1605px; margin-left: 340px;"><div data-drawio-colors="color: #000000; " style="box-sizing: border-box; font-size: 0px; text-align: right;"><div style="display: inline-block; font-size: 18px; font-family: Verdana; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">Crate</div></div></div></foreignObject><text x="418" y="1610" fill="#000000" font-family="Verdana" font-size="18px" text-anchor="end">Crate</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/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> \ No newline at end of file