Files
zosstorage/docs/callgraph.html

2932 lines
175 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<style>
html, body {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
background: var(--background-color);
}
:root{--background-color: #f5fffa;--selected-color: #4fe1f4;--edge-color: #548f9e;--edge-incoming-color: #698b69;--edge-outgoing-color: #008acd;--edge-incoming-outgoing-color: black;--cluster-label-bg-color: #e8eaed;--node-bg-color: #f4f5f1;--symbol-default-bg-color: var(--node-bg-color);--symbol-default-border-color: #889f4e;--symbol-default-text-color: #363636;--interface-bg-color: #fff8dc;--interface-border-color: #a69348;--module-bg-color: #ffebcd;--module-border-color: #a67e43;--constructor-bg-color: #ffdab9;--constructor-border-color: #a66e3c;--method-bg-color: #fff8c5;--method-border-color: #d4a72c;--function-bg-color: #bafbd0;--function-border-color: #4ac26b;--struct-bg-color: #ddf4ff;--struct-border-color: #54aeff;--type-icon-color: #8969da;--property-icon-color: #5f9348}.callgraph{--bold-border: 3.2;width:100%;height:100%;outline:none;cursor:default;-webkit-user-select:none;user-select:none}.callgraph>#graph0>polygon:first-of-type{fill:var(--background-color)}.callgraph>#graph0>#faded-group>:where(.node,.cluster){opacity:.2}.callgraph>#graph0>#faded-group>.edge{opacity:.05}.callgraph .edge>path:not(.hover-path){stroke:var(--edge-color);stroke-width:3}.callgraph .edge>polygon{stroke:var(--edge-color);fill:var(--edge-color)}.callgraph .edge>path.hover-path{stroke:transparent;stroke-width:15}.callgraph .edge.impl>path{stroke-dasharray:8,3}.callgraph .edge.impl>polygon{stroke-width:2;fill:none!important}.callgraph .edge:hover{--edge-color: var(--selected-color)}.callgraph .edge.incoming{--edge-color: var(--edge-incoming-color)}.callgraph .edge.outgoing{--edge-color: var(--edge-outgoing-color)}.callgraph .edge.incoming.outgoing{--edge-color: var(--edge-incoming-outgoing-color)}.callgraph .cluster polygon{stroke-width:1.6}.callgraph .cluster .cluster-label{cursor:pointer;fill:var(--cluster-label-bg-color);rx:18px}.callgraph .cluster text{pointer-events:none}.callgraph .cluster.selected{--cluster-label-bg-color: color-mix(in srgb, var(--selected-color) 30%, transparent)}.callgraph .cluster.selected polygon{stroke-width:var(--bold-border);stroke:var(--selected-color)}.callgraph .node>rect{rx:20px;fill:var(--node-bg-color);filter:url(#shadow)}.callgraph .node.selected>rect{stroke:var(--selected-color);stroke-width:var(--bold-border)}.callgraph .node>.title{cursor:pointer}.callgraph .node>.title>text{font-weight:700}.callgraph .cell{--bg-color: var(--symbol-default-bg-color);--border-color: var(--symbol-default-border-color);--border-width: 1.6}.callgraph .cell>rect{rx:10px;fill:var(--bg-color);stroke:var(--border-color);stroke-width:var(--border-width)}.callgraph .cell>text{fill:var(--symbold-default-text-color)}.callgraph .cell:where(.highlight,.selected,:not(:has(>.cell:hover)):hover){--border-width: var(--bold-border)}.callgraph .cell.highlight>rect{stroke:url(#highlightGradient)}.callgraph .cell.selected>rect{filter:drop-shadow(3px 3px 6px var(--border-color))}.callgraph .cell.interface{--bg-color: var(--interface-bg-color);--border-color: var(--interface-border-color)}.callgraph .cell.interface>rect{stroke-dasharray:7,5}.callgraph .cell.module{--bg-color: var(--module-bg-color);--border-color: var(--module-border-color)}.callgraph .cell.constructor{--bg-color: var(--constructor-bg-color);--border-color: var(--constructor-border-color)}.callgraph .cell.function{--bg-color: var(--function-bg-color);--border-color: var(--function-border-color)}.callgraph .cell.method{--bg-color: var(--method-bg-color);--border-color: var(--method-border-color)}.callgraph .cell:where(.class,.struct,.enum){--bg-color: var(--struct-bg-color);--border-color: var(--struct-border-color)}.callgraph .cell:where(.class,.struct,.enum)>rect{rx:unset}.callgraph .cell:where(.class,.struct,.enum)>text{transform:translateY(1.5px)}.callgraph .cell:where(.class,.struct,.enum)>text:first-of-type{fill:var(--type-icon-color)}.callgraph .cell:where(.field,.property)>rect{rx:unset}.callgraph .cell:where(.field,.property)>text:first-of-type{font-style:italic;fill:var(--property-icon-color)}
</style>
</head>
<body>
<svg class="callgraph" viewBox="0 0 1763.6700439453125 3411">
<g id="graph0" class="graph" transform="matrix(0.8202313048149722 0 0 0.8202313048149722 243.19598151156106 2292.621904462777)">
<polygon fill="white" stroke="none" points="-4,4 -4,-3407 1759.67,-3407 1759.67,4 -4,4"></polygon>
<g id="clust1" class="cluster">
<polygon fill="none" stroke="black" points="89.13,-8 89.13,-3395 1747.67,-3395 1747.67,-8 89.13,-8"></polygon>
<rect x="858.3800048828125" y="-3391" width="120.03997802734375" height="35.199951171875" class="cluster-label"></rect>
<text text-anchor="start" x="866.38" y="-3368.6" font-family="Arial" font-size="16.00">zosstorage/src</text>
</g>
<g id="clust2" class="cluster">
<polygon fill="none" stroke="black" points="533.6,-2911 533.6,-3344 870.59,-3344 870.59,-2911 533.6,-2911"></polygon>
<rect x="686.5399780273438" y="-3340" width="31.11004638671875" height="35.199951171875" class="cluster-label"></rect>
<text text-anchor="start" x="694.54" y="-3317.6" font-family="Arial" font-size="16.00">cli</text>
</g>
<g id="clust3" class="cluster">
<polygon fill="none" stroke="black" points="563.1,-2380 563.1,-2903 841.1,-2903 841.1,-2380 563.1,-2380"></polygon>
<rect x="672.75" y="-2899" width="58.70001220703125" height="35.199951171875" class="cluster-label"></rect>
<text text-anchor="start" x="680.75" y="-2876.6" font-family="Arial" font-size="16.00">config</text>
</g>
<g id="clust4" class="cluster">
<polygon fill="none" stroke="black" points="1002.09,-359 1002.09,-1509 1330.17,-1509 1330.17,-359 1002.09,-359"></polygon>
<rect x="1135.010009765625" y="-1505" width="62.25" height="35.199951171875" class="cluster-label"></rect>
<text text-anchor="start" x="1143.01" y="-1482.6" font-family="Arial" font-size="16.00">device</text>
</g>
<g id="clust5" class="cluster">
<polygon fill="none" stroke="black" points="1027.13,-1517 1027.13,-2161 1305.13,-2161 1305.13,-1517 1027.13,-1517"></polygon>
<rect x="1151.9100341796875" y="-2157" width="28.449951171875" height="35.199951171875" class="cluster-label"></rect>
<text text-anchor="start" x="1159.91" y="-2134.6" font-family="Arial" font-size="16.00">fs</text>
</g>
<g id="clust6" class="cluster">
<polygon fill="none" stroke="black" points="1027.13,-16 1027.13,-351 1305.13,-351 1305.13,-16 1027.13,-16"></polygon>
<rect x="1112.77001953125" y="-347" width="106.719970703125" height="35.20001220703125" class="cluster-label"></rect>
<text text-anchor="start" x="1120.77" y="-324.6" font-family="Arial" font-size="16.00">idempotency</text>
</g>
<g id="clust7" class="cluster">
<polygon fill="none" stroke="black" points="563.1,-2057 563.1,-2372 841.1,-2372 841.1,-2057 563.1,-2057"></polygon>
<rect x="668.2999877929688" y="-2368" width="67.60003662109375" height="35.199951171875" class="cluster-label"></rect>
<text text-anchor="start" x="676.3" y="-2345.6" font-family="Arial" font-size="16.00">logging</text>
</g>
<g id="clust8" class="cluster">
<polygon fill="none" stroke="black" points="1027.13,-2821 1027.13,-3344 1305.13,-3344 1305.13,-2821 1027.13,-2821"></polygon>
<rect x="1135.9000244140625" y="-3340" width="60.469970703125" height="35.199951171875" class="cluster-label"></rect>
<text text-anchor="start" x="1143.9" y="-3317.6" font-family="Arial" font-size="16.00">mount</text>
</g>
<g id="clust9" class="cluster">
<polygon fill="none" stroke="black" points="563.1,-1264 563.1,-2049 841.1,-2049 841.1,-1264 563.1,-1264"></polygon>
<rect x="651.4099731445312" y="-2045" width="101.37005615234375" height="35.199951171875" class="cluster-label"></rect>
<text text-anchor="start" x="659.41" y="-2022.6" font-family="Arial" font-size="16.00">orchestrator</text>
</g>
<g id="clust10" class="cluster">
<polygon fill="none" stroke="black" points="1027.13,-2169 1027.13,-2813 1305.13,-2813 1305.13,-2169 1027.13,-2169"></polygon>
<rect x="1129.6700439453125" y="-2809" width="72.919921875" height="35.199951171875" class="cluster-label"></rect>
<text text-anchor="start" x="1137.67" y="-2786.6" font-family="Arial" font-size="16.00">partition</text>
</g>
<g id="clust11" class="cluster">
<polygon fill="none" stroke="black" points="106.62,-677 106.62,-1024 384.62,-1024 384.62,-677 106.62,-677"></polygon>
<rect x="216.72000122070312" y="-1020" width="57.79998779296875" height="35.20001220703125" class="cluster-label"></rect>
<text text-anchor="start" x="224.72" y="-997.6" font-family="Arial" font-size="16.00">report</text>
</g>
<g id="clust12" class="cluster">
<polygon fill="none" stroke="black" points="1461.67,-1833 1461.67,-2168 1739.67,-2168 1739.67,-1833 1461.67,-1833"></polygon>
<rect x="1582.449951171875" y="-2164" width="36.4500732421875" height="35.199951171875" class="cluster-label"></rect>
<text text-anchor="start" x="1590.45" y="-2141.6" font-family="Arial" font-size="16.00">util</text>
</g>
<!-- 11 -->
<g id="11" class="node" data-path="/home/delandtj/Threefold/zosstorage/src/idempotency/mod.rs">
<rect x="1035.1300048828125" y="-299.70001220703125" width="262" height="275.4000129699707"></rect>
<g id="11_0" class="title">
<text text-anchor="start" x="1088.34" y="-267.3" font-family="Arial" font-size="16.00"> &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;mod.rs &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text>
</g>
<g id="11:49_7" data-kind="12" class="cell function">
<rect x="1051.1300048828125" y="-248.5" width="230" height="27.199996948242188"></rect>
<text text-anchor="start" x="1090.97" y="-230.1" font-family="Arial" font-size="16.00">detect_existing_state</text>
</g>
<g id="11:144_7" data-kind="12" class="cell function">
<rect x="1051.1300048828125" y="-213.3000030517578" width="230" height="27.199996948242188"></rect>
<text text-anchor="start" x="1115.45" y="-194.9" font-family="Arial" font-size="16.00">is_empty_disk</text>
</g>
<g id="11:191_3" data-kind="12" class="cell function">
<rect x="1051.1300048828125" y="-178.10000610351562" width="230" height="27.20001220703125"></rect>
<text text-anchor="start" x="1098.54" y="-159.7" font-family="Arial" font-size="16.00">parse_blkid_export</text>
</g>
<g id="11:201_3" data-kind="12" class="cell function">
<rect x="1051.1300048828125" y="-142.89999389648438" width="230" height="27.199996948242188"></rect>
<text text-anchor="start" x="1064.74" y="-124.5" font-family="Arial" font-size="16.00">read_proc_partitions_names</text>
</g>
<g id="11:229_3" data-kind="12" class="cell function">
<rect x="1051.1300048828125" y="-107.69999694824219" width="230" height="27.199996948242188"></rect>
<text text-anchor="start" x="1124.32" y="-89.3" font-family="Arial" font-size="16.00">base_name</text>
</g>
<g id="11:235_3" data-kind="12" class="cell function">
<rect x="1051.1300048828125" y="-72.5" width="230" height="27.200000762939453"></rect>
<text text-anchor="start" x="1116.32" y="-54.1" font-family="Arial" font-size="16.00">is_partition_of</text>
</g>
</g>
<!-- 11&#45;&gt;11 -->
<g id="11:49_7-11:201_3" class="edge" data-from="11:49_7" data-to="11:201_3">
<path fill="none" stroke="black" d="M1051.35,-238.4C983.67,-235.07 920.24,-220.54 920.24,-182.1 920.24,-146.73 973.92,-131.61 1035.21,-126.82"></path>
<polygon fill="black" stroke="black" points="1035.2,-132.08 1049.84,-125.9 1034.54,-121.6 1035.2,-132.08"></polygon>
<text text-anchor="middle" x="918.49" y="-157.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1051.35,-238.4C983.67,-235.07 920.24,-220.54 920.24,-182.1 920.24,-146.73 973.92,-131.61 1035.21,-126.82" class="hover-path"></path></g>
<!-- 11&#45;&gt;11 -->
<g id="11:144_7-11:201_3" class="edge" data-from="11:144_7" data-to="11:201_3">
<path fill="none" stroke="black" d="M1051.35,-204.15C983.67,-202.39 920.24,-192 920.24,-164.5 920.24,-139.21 973.92,-128.39 1035.21,-125.45"></path>
<polygon fill="black" stroke="black" points="1035.04,-130.71 1049.84,-124.91 1034.66,-120.21 1035.04,-130.71"></polygon>
<text text-anchor="middle" x="918.49" y="-157.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1051.35,-204.15C983.67,-202.39 920.24,-192 920.24,-164.5 920.24,-139.21 973.92,-128.39 1035.21,-125.45" class="hover-path"></path></g>
<!-- 11&#45;&gt;11 -->
<g id="11:49_7-11:191_3" class="edge" data-from="11:49_7" data-to="11:191_3">
<path fill="none" stroke="black" d="M1051.35,-239.35C983.67,-237.59 920.24,-227.2 920.24,-199.7 920.24,-174.41 973.92,-163.59 1035.21,-160.65"></path>
<polygon fill="black" stroke="black" points="1035.04,-165.91 1049.84,-160.11 1034.66,-155.41 1035.04,-165.91"></polygon>
<text text-anchor="middle" x="918.49" y="-157.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1051.35,-239.35C983.67,-237.59 920.24,-227.2 920.24,-199.7 920.24,-174.41 973.92,-163.59 1035.21,-160.65" class="hover-path"></path></g>
<!-- 11&#45;&gt;11 -->
<g id="11:144_7-11:229_3" class="edge" data-from="11:144_7" data-to="11:229_3">
<path fill="none" stroke="black" d="M1051.35,-203.2C983.67,-199.87 920.24,-185.34 920.24,-146.9 920.24,-111.53 973.92,-96.41 1035.21,-91.62"></path>
<polygon fill="black" stroke="black" points="1035.2,-96.88 1049.84,-90.7 1034.54,-86.4 1035.2,-96.88"></polygon>
<text text-anchor="middle" x="918.49" y="-157.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1051.35,-203.2C983.67,-199.87 920.24,-185.34 920.24,-146.9 920.24,-111.53 973.92,-96.41 1035.21,-91.62" class="hover-path"></path></g>
<!-- 11&#45;&gt;11 -->
<g id="11:144_7-11:235_3" class="edge" data-from="11:144_7" data-to="11:235_3">
<path fill="none" stroke="black" d="M1051.35,-202.25C983.67,-197.36 920.24,-178.69 920.24,-129.3 920.24,-83.86 973.92,-64.43 1035.21,-57.8"></path>
<polygon fill="black" stroke="black" points="1035.38,-63.06 1049.85,-56.49 1034.44,-52.6 1035.38,-63.06"></polygon>
<text text-anchor="middle" x="918.49" y="-157.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1051.35,-202.25C983.67,-197.36 920.24,-178.69 920.24,-129.3 920.24,-83.86 973.92,-64.43 1035.21,-57.8" class="hover-path"></path></g>
<!-- 20 -->
<g id="20" class="node" data-path="/home/delandtj/Threefold/zosstorage/src/util/mod.rs">
<rect x="1469.6700439453125" y="-2116.699951171875" width="262" height="275.39990234375"></rect>
<g id="20_1" class="title">
<text text-anchor="start" x="1522.88" y="-2084.3" font-family="Arial" font-size="16.00"> &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;mod.rs &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text>
</g>
<g id="20:48_11" data-kind="23" class="cell struct">
<rect x="1485.6700439453125" y="-2065.5" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="1549.98" y="-2048.1" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="1560.66" y="-2048.1" font-family="Arial" font-size="16.00"> &#160;CmdOutput</text>
</g>
<g id="20:60_7" data-kind="12" class="cell function">
<rect x="1485.6700439453125" y="-2030.300048828125" width="230" height="27.2000732421875"></rect>
<text text-anchor="start" x="1562.87" y="-2011.9" font-family="Arial" font-size="16.00">which_tool</text>
</g>
<g id="20:72_7" data-kind="12" class="cell function">
<rect x="1485.6700439453125" y="-1995.0999755859375" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="1569.55" y="-1976.7" font-family="Arial" font-size="16.00">run_cmd</text>
</g>
<g id="20:98_7" data-kind="12" class="cell function">
<rect x="1485.6700439453125" y="-1959.9000244140625" width="230" height="27.2000732421875"></rect>
<text text-anchor="start" x="1538.41" y="-1941.5" font-family="Arial" font-size="16.00">run_cmd_capture</text>
</g>
<g id="20:130_7" data-kind="12" class="cell function">
<rect x="1485.6700439453125" y="-1924.699951171875" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="1559.75" y="-1906.3" font-family="Arial" font-size="16.00">udev_settle</text>
</g>
<g id="20:156_7" data-kind="12" class="cell function">
<rect x="1485.6700439453125" y="-1889.5" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="1561.98" y="-1871.1" font-family="Arial" font-size="16.00">is_efi_boot</text>
</g>
</g>
<!-- 11&#45;&gt;20 -->
<g id="11:144_7-20:98_7" class="edge" data-from="11:144_7" data-to="20:98_7">
<path fill="none" stroke="black" d="M1282.13,-199.7C1354.38,-199.7 1315.93,-284.17 1330.17,-355 1338.43,-396.07 1429.08,-1775.79 1476.6,-1931.96"></path>
<polygon fill="black" stroke="black" points="1472,-1934.48 1483.93,-1944.98 1481.15,-1929.33 1472,-1934.48"></polygon>
<text text-anchor="middle" x="1395.92" y="-1194.71" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1282.13,-199.7C1354.38,-199.7 1315.93,-284.17 1330.17,-355 1338.43,-396.07 1429.08,-1775.79 1476.6,-1931.96" class="hover-path"></path></g>
<!-- 11&#45;&gt;20 -->
<g id="11:49_7-20:98_7" class="edge" data-from="11:49_7" data-to="20:98_7">
<path fill="none" stroke="black" d="M1282.13,-234.9C1468.01,-234.9 1303.44,-1847.49 1468.78,-1941.98"></path>
<polygon fill="black" stroke="black" points="1467.36,-1947.03 1483.21,-1945.9 1470.11,-1936.9 1467.36,-1947.03"></polygon>
<text text-anchor="middle" x="1395.92" y="-1663.59" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1282.13,-234.9C1468.01,-234.9 1303.44,-1847.49 1468.78,-1941.98" class="hover-path"></path></g>
<!-- 11&#45;&gt;20 -->
<g id="11:49_7-20:60_7" class="edge" data-from="11:49_7" data-to="20:60_7">
<path fill="none" stroke="black" d="M1282.13,-234.9C1339.62,-234.9 1318.23,-298.77 1330.17,-355 1349.57,-446.31 1326.92,-1969.26 1394.17,-2034 1419.53,-2058.41 1437.9,-2028.09 1468.55,-2019.08"></path>
<polygon fill="black" stroke="black" points="1469.1,-2024.3 1483.17,-2016.92 1467.57,-2013.92 1469.1,-2024.3"></polygon>
<text text-anchor="middle" x="1395.92" y="-2041.26" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1282.13,-234.9C1339.62,-234.9 1318.23,-298.77 1330.17,-355 1349.57,-446.31 1326.92,-1969.26 1394.17,-2034 1419.53,-2058.41 1437.9,-2028.09 1468.55,-2019.08" class="hover-path"></path></g>
<!-- 11&#45;&gt;20 -->
<g id="11:144_7-20:60_7" class="edge" data-from="11:144_7" data-to="20:60_7">
<path fill="none" stroke="black" d="M1282.13,-199.7C1354.38,-199.7 1317.97,-283.79 1330.17,-355 1360.62,-532.66 1293.32,-1826.61 1394.17,-1976 1415.57,-2007.7 1434.75,-2015.03 1468.22,-2016.41"></path>
<polygon fill="black" stroke="black" points="1468.07,-2021.66 1483.16,-2016.67 1468.25,-2011.16 1468.07,-2021.66"></polygon>
<text text-anchor="middle" x="1395.92" y="-1984.43" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1282.13,-199.7C1354.38,-199.7 1317.97,-283.79 1330.17,-355 1360.62,-532.66 1293.32,-1826.61 1394.17,-1976 1415.57,-2007.7 1434.75,-2015.03 1468.22,-2016.41" class="hover-path"></path></g>
<!-- 6 -->
<g id="6" class="node" data-path="/home/delandtj/Threefold/zosstorage/src/device/discovery.rs">
<rect x="1010.0900268554688" y="-1340.5" width="312.08001708984375" height="973"></rect>
<g id="6_2" class="title">
<text text-anchor="start" x="1070.11" y="-1308.1" font-family="Arial" font-size="16.00"> &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;discovery.rs &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text>
</g>
<g id="6:45_11" data-kind="23" class="cell struct">
<rect x="1026.0899658203125" y="-1289.300048828125" width="280.080078125" height="27.2000732421875"></rect>
<text text-anchor="start" x="1140.8" y="-1271.9" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="1151.47" y="-1271.9" font-family="Arial" font-size="16.00"> &#160;Disk</text>
</g>
<g id="6:60_11" data-kind="23" class="cell struct">
<rect x="1026.0899658203125" y="-1254.0999755859375" width="280.080078125" height="27.199951171875"></rect>
<text text-anchor="start" x="1114.12" y="-1236.7" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="1124.79" y="-1236.7" font-family="Arial" font-size="16.00"> &#160;DeviceFilter</text>
</g>
<g id="6:71_5" data-kind="19" class="cell">
<rect x="1026.0899658203125" y="-1218.9000244140625" width="280.080078125" height="78.4000244140625"></rect>
<text text-anchor="start" x="1107.01" y="-1192.5" font-family="Arial" font-size="16.00">impl DeviceFilter</text>
<g id="6:72_7" data-kind="6" class="cell method">
<rect x="1034.0899658203125" y="-1175.699951171875" width="264.080078125" height="27.199951171875"></rect>
<text text-anchor="start" x="1135.9" y="-1157.3" font-family="Arial" font-size="16.00">matches</text>
</g>
</g>
<g id="6:93_10" data-kind="11" class="cell interface">
<rect x="1026.0899658203125" y="-1132.5" width="280.080078125" height="113.5999755859375"></rect>
<text text-anchor="start" x="1111.89" y="-1106.1" font-family="Arial" font-size="16.00">DeviceProvider</text>
<g id="6:95_7" data-kind="6" class="cell method">
<rect x="1034.0899658203125" y="-1089.300048828125" width="264.080078125" height="27.2000732421875"></rect>
<text text-anchor="start" x="1101.66" y="-1070.9" font-family="Arial" font-size="16.00">list_block_devices</text>
</g>
<g id="6:97_7" data-kind="6" class="cell method">
<rect x="1034.0899658203125" y="-1054.0999755859375" width="264.080078125" height="27.199951171875"></rect>
<text text-anchor="start" x="1105.65" y="-1035.7" font-family="Arial" font-size="16.00">probe_properties</text>
</g>
</g>
<g id="6:103_7" data-kind="23" class="cell struct">
<rect x="1026.0899658203125" y="-1010.9000244140625" width="280.080078125" height="27.20001220703125"></rect>
<text text-anchor="start" x="1113.23" y="-993.5" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="1123.9" y="-993.5" font-family="Arial" font-size="16.00"> &#160;SysProvider</text>
</g>
<g id="6:105_5" data-kind="19" class="cell">
<rect x="1026.0899658203125" y="-975.7000122070312" width="280.080078125" height="78.4000244140625"></rect>
<text text-anchor="start" x="1106.12" y="-949.3" font-family="Arial" font-size="16.00">impl SysProvider</text>
<g id="6:106_7" data-kind="12" class="cell function">
<rect x="1034.0899658203125" y="-932.5" width="264.080078125" height="27.20001220703125"></rect>
<text text-anchor="start" x="1151.46" y="-914.1" font-family="Arial" font-size="16.00">new</text>
</g>
</g>
<g id="6:111_24" data-kind="19" class="cell">
<rect x="1026.0899658203125" y="-889.2999877929688" width="280.080078125" height="113.5999755859375"></rect>
<text text-anchor="start" x="1038.09" y="-862.9" font-family="Arial" font-size="16.00">impl DeviceProvider for SysProvider</text>
<g id="6:112_7" data-kind="6" class="cell method">
<rect x="1034.0899658203125" y="-846.0999755859375" width="264.080078125" height="27.199951171875"></rect>
<text text-anchor="start" x="1101.66" y="-827.7" font-family="Arial" font-size="16.00">list_block_devices</text>
</g>
<g id="6:174_7" data-kind="6" class="cell method">
<rect x="1034.0899658203125" y="-810.9000244140625" width="264.080078125" height="27.20001220703125"></rect>
<text text-anchor="start" x="1105.65" y="-792.5" font-family="Arial" font-size="16.00">probe_properties</text>
</g>
</g>
<g id="6:183_7" data-kind="12" class="cell function">
<rect x="1026.0899658203125" y="-767.7000122070312" width="280.080078125" height="27.20001220703125"></rect>
<text text-anchor="start" x="1136.34" y="-749.3" font-family="Arial" font-size="16.00">discover</text>
</g>
<g id="6:188_3" data-kind="12" class="cell function">
<rect x="1026.0899658203125" y="-732.5" width="280.080078125" height="27.20001220703125"></rect>
<text text-anchor="start" x="1084.32" y="-714.1" font-family="Arial" font-size="16.00">discover_with_provider</text>
</g>
<g id="6:223_3" data-kind="12" class="cell function">
<rect x="1026.0899658203125" y="-697.2999877929688" width="280.080078125" height="27.20001220703125"></rect>
<text text-anchor="start" x="1104.76" y="-678.9" font-family="Arial" font-size="16.00">is_ignored_name</text>
</g>
<g id="6:234_3" data-kind="12" class="cell function">
<rect x="1026.0899658203125" y="-662.0999755859375" width="280.080078125" height="27.199951171875"></rect>
<text text-anchor="start" x="1110.99" y="-643.7" font-family="Arial" font-size="16.00">sys_block_path</text>
</g>
<g id="6:238_3" data-kind="12" class="cell function">
<rect x="1026.0899658203125" y="-626.9000244140625" width="280.080078125" height="27.20001220703125"></rect>
<text text-anchor="start" x="1124.32" y="-608.5" font-family="Arial" font-size="16.00">base_name</text>
</g>
<g id="6:245_3" data-kind="12" class="cell function">
<rect x="1026.0899658203125" y="-591.7000122070312" width="280.080078125" height="27.20001220703125"></rect>
<text text-anchor="start" x="1095.88" y="-573.3" font-family="Arial" font-size="16.00">is_removable_sysfs</text>
</g>
<g id="6:252_3" data-kind="12" class="cell function">
<rect x="1026.0899658203125" y="-556.5" width="280.080078125" height="27.20001220703125"></rect>
<text text-anchor="start" x="1104.77" y="-538.1" font-family="Arial" font-size="16.00">is_partition_sysfs</text>
</g>
<g id="6:257_3" data-kind="12" class="cell function">
<rect x="1026.0899658203125" y="-521.2999877929688" width="280.080078125" height="27.199981689453125"></rect>
<text text-anchor="start" x="1089.2" y="-502.9" font-family="Arial" font-size="16.00">read_disk_size_bytes</text>
</g>
<g id="6:267_3" data-kind="12" class="cell function">
<rect x="1026.0899658203125" y="-486.1000061035156" width="280.080078125" height="27.20001220703125"></rect>
<text text-anchor="start" x="1112.76" y="-467.7" font-family="Arial" font-size="16.00">read_rotational</text>
</g>
<g id="6:274_3" data-kind="12" class="cell function">
<rect x="1026.0899658203125" y="-450.8999938964844" width="280.080078125" height="27.199981689453125"></rect>
<text text-anchor="start" x="1100.32" y="-432.5" font-family="Arial" font-size="16.00">read_model_serial</text>
</g>
<g id="6:282_3" data-kind="12" class="cell function">
<rect x="1026.0899658203125" y="-415.70001220703125" width="280.080078125" height="27.20001220703125"></rect>
<text text-anchor="start" x="1093.64" y="-397.3" font-family="Arial" font-size="16.00">read_optional_string</text>
</g>
</g>
<!-- 6&#45;&gt;6 -->
<g id="6:112_7-6:274_3" class="edge" data-from="6:112_7" data-to="6:274_3">
<path fill="none" stroke="black" d="M1034.41,-826.98C961.84,-809.66 895.2,-760.39 895.2,-634.9 895.2,-523.25 947.95,-471.94 1010.69,-449.78"></path>
<polygon fill="black" stroke="black" points="1012.19,-454.81 1024.94,-445.32 1009.06,-444.79 1012.19,-454.81"></polygon>
<text text-anchor="middle" x="893.45" y="-849.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1034.41,-826.98C961.84,-809.66 895.2,-760.39 895.2,-634.9 895.2,-523.25 947.95,-471.94 1010.69,-449.78" class="hover-path"></path></g>
<!-- 6&#45;&gt;6 -->
<g id="6:111_24-6:93_10" class="edge impl" data-from="6:111_24" data-to="6:93_10">
<path fill="none" stroke="black" d="M1034.41,-868.62C961.84,-878.83 895.2,-909.97 895.2,-989.3 895.2,-1062.74 952.32,-1094.88 1018.37,-1107.35"></path>
<polygon fill="black" stroke="black" points="1017.26,-1112.49 1032.91,-1109.74 1018.96,-1102.13 1017.26,-1112.49"></polygon>
<text text-anchor="middle" x="893.45" y="-849.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1034.41,-868.62C961.84,-878.83 895.2,-909.97 895.2,-989.3 895.2,-1062.74 952.32,-1094.88 1018.37,-1107.35" class="hover-path"></path></g>
<!-- 6&#45;&gt;6 -->
<g id="6:252_3-6:234_3" class="edge" data-from="6:252_3" data-to="6:234_3">
<path fill="none" stroke="black" d="M1026.38,-540.12C957,-544.55 895.2,-559.55 895.2,-595.7 895.2,-629.03 947.72,-644.38 1010.29,-650.04"></path>
<polygon fill="black" stroke="black" points="1009.52,-655.25 1024.88,-651.16 1010.32,-644.78 1009.52,-655.25"></polygon>
<text text-anchor="middle" x="893.45" y="-849.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1026.38,-540.12C957,-544.55 895.2,-559.55 895.2,-595.7 895.2,-629.03 947.72,-644.38 1010.29,-650.04" class="hover-path"></path></g>
<!-- 6&#45;&gt;6 -->
<g id="6:267_3-6:234_3" class="edge" data-from="6:267_3" data-to="6:234_3">
<path fill="none" stroke="black" d="M1026.38,-472.24C957,-480.21 895.2,-503.76 895.2,-560.5 895.2,-612.81 947.72,-636.91 1010.29,-646.6"></path>
<polygon fill="black" stroke="black" points="1009.32,-651.77 1024.88,-648.56 1010.72,-641.36 1009.32,-651.77"></polygon>
<text text-anchor="middle" x="893.45" y="-849.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1026.38,-472.24C957,-480.21 895.2,-503.76 895.2,-560.5 895.2,-612.81 947.72,-636.91 1010.29,-646.6" class="hover-path"></path></g>
<!-- 6&#45;&gt;6 -->
<g id="6:188_3-6:245_3" class="edge" data-from="6:188_3" data-to="6:245_3">
<path fill="none" stroke="black" d="M1026.38,-720.42C957,-714.22 895.2,-694.95 895.2,-648.5 895.2,-605.68 947.72,-585.96 1010.29,-578.28"></path>
<polygon fill="black" stroke="black" points="1010.51,-583.53 1024.88,-576.74 1009.41,-573.09 1010.51,-583.53"></polygon>
<text text-anchor="middle" x="893.45" y="-849.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1026.38,-720.42C957,-714.22 895.2,-694.95 895.2,-648.5 895.2,-605.68 947.72,-585.96 1010.29,-578.28" class="hover-path"></path></g>
<!-- 6&#45;&gt;6 -->
<g id="6:274_3-6:234_3" class="edge" data-from="6:274_3" data-to="6:234_3">
<path fill="none" stroke="black" d="M1026.38,-438.29C957,-448.04 895.2,-475.86 895.2,-542.9 895.2,-604.7 947.72,-633.17 1010.29,-644.88"></path>
<polygon fill="black" stroke="black" points="1009.24,-650.03 1024.89,-647.26 1010.93,-639.67 1009.24,-650.03"></polygon>
<text text-anchor="middle" x="893.45" y="-849.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1026.38,-438.29C957,-448.04 895.2,-475.86 895.2,-542.9 895.2,-604.7 947.72,-633.17 1010.29,-644.88" class="hover-path"></path></g>
<!-- 6&#45;&gt;6 -->
<g id="6:188_3-6:95_7" class="edge" data-from="6:188_3" data-to="6:95_7">
<path fill="none" stroke="black" d="M1026.38,-725.1C957,-742.18 895.2,-787.68 895.2,-897.3 895.2,-1002.9 952.56,-1049 1018.79,-1067.51"></path>
<polygon fill="black" stroke="black" points="1017.12,-1072.5 1032.94,-1070.98 1019.62,-1062.31 1017.12,-1072.5"></polygon>
<text text-anchor="middle" x="893.45" y="-849.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1026.38,-725.1C957,-742.18 895.2,-787.68 895.2,-897.3 895.2,-1002.9 952.56,-1049 1018.79,-1067.51" class="hover-path"></path></g>
<!-- 6&#45;&gt;6 -->
<g id="6:188_3-6:238_3" class="edge" data-from="6:188_3" data-to="6:238_3">
<path fill="none" stroke="black" d="M1026.38,-721.68C957,-717.25 895.2,-702.25 895.2,-666.1 895.2,-632.77 947.72,-617.42 1010.29,-611.76"></path>
<polygon fill="black" stroke="black" points="1010.32,-617.02 1024.88,-610.64 1009.52,-606.55 1010.32,-617.02"></polygon>
<text text-anchor="middle" x="893.45" y="-849.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1026.38,-721.68C957,-717.25 895.2,-702.25 895.2,-666.1 895.2,-632.77 947.72,-617.42 1010.29,-611.76" class="hover-path"></path></g>
<!-- 6&#45;&gt;6 -->
<g id="6:274_3-6:282_3" class="edge" data-from="6:274_3" data-to="6:282_3">
<path fill="none" stroke="black" d="M1026.38,-442.6C957,-441.72 895.2,-435.26 895.2,-419.7 895.2,-405.39 947.5,-398.77 1009.89,-397.12"></path>
<polygon fill="black" stroke="black" points="1009.98,-402.37 1024.87,-396.83 1009.77,-391.87 1009.98,-402.37"></polygon>
<text text-anchor="middle" x="893.45" y="-849.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1026.38,-442.6C957,-441.72 895.2,-435.26 895.2,-419.7 895.2,-405.39 947.5,-398.77 1009.89,-397.12" class="hover-path"></path></g>
<!-- 6&#45;&gt;6 -->
<g id="6:257_3-6:234_3" class="edge" data-from="6:257_3" data-to="6:234_3">
<path fill="none" stroke="black" d="M1026.38,-506.18C957,-512.38 895.2,-531.65 895.2,-578.1 895.2,-620.92 947.72,-640.64 1010.29,-648.32"></path>
<polygon fill="black" stroke="black" points="1009.41,-653.51 1024.88,-649.86 1010.51,-643.07 1009.41,-653.51"></polygon>
<text text-anchor="middle" x="893.45" y="-849.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1026.38,-506.18C957,-512.38 895.2,-531.65 895.2,-578.1 895.2,-620.92 947.72,-640.64 1010.29,-648.32" class="hover-path"></path></g>
<!-- 6&#45;&gt;6 -->
<g id="6:183_7-6:106_7" class="edge" data-from="6:183_7" data-to="6:106_7">
<path fill="none" stroke="black" d="M1026.38,-753.44C957,-760.84 895.2,-783.03 895.2,-836.5 895.2,-887.9 952.32,-910.39 1018.37,-918.64"></path>
<polygon fill="black" stroke="black" points="1017.43,-923.82 1032.9,-920.19 1018.55,-913.38 1017.43,-923.82"></polygon>
<text text-anchor="middle" x="893.45" y="-849.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1026.38,-753.44C957,-760.84 895.2,-783.03 895.2,-836.5 895.2,-887.9 952.32,-910.39 1018.37,-918.64" class="hover-path"></path></g>
<!-- 6&#45;&gt;6 -->
<g id="6:188_3-6:97_7" class="edge" data-from="6:188_3" data-to="6:97_7">
<path fill="none" stroke="black" d="M1026.38,-723.84C957,-739.15 895.2,-780.37 895.2,-879.7 895.2,-975.19 952.32,-1016.98 1018.37,-1033.66"></path>
<polygon fill="black" stroke="black" points="1017.15,-1038.77 1032.93,-1036.88 1019.42,-1028.52 1017.15,-1038.77"></polygon>
<text text-anchor="middle" x="893.45" y="-849.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1026.38,-723.84C957,-739.15 895.2,-780.37 895.2,-879.7 895.2,-975.19 952.32,-1016.98 1018.37,-1033.66" class="hover-path"></path></g>
<!-- 6&#45;&gt;6 -->
<g id="6:183_7-6:188_3" class="edge" data-from="6:183_7" data-to="6:188_3">
<path fill="none" stroke="black" d="M1026.38,-759.4C957,-758.52 895.2,-752.06 895.2,-736.5 895.2,-722.19 947.5,-715.57 1009.89,-713.92"></path>
<polygon fill="black" stroke="black" points="1009.98,-719.17 1024.87,-713.63 1009.77,-708.67 1009.98,-719.17"></polygon>
<text text-anchor="middle" x="893.45" y="-849.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1026.38,-759.4C957,-758.52 895.2,-752.06 895.2,-736.5 895.2,-722.19 947.5,-715.57 1009.89,-713.92" class="hover-path"></path></g>
<!-- 6&#45;&gt;6 -->
<g id="6:112_7-6:223_3" class="edge" data-from="6:112_7" data-to="6:223_3">
<path fill="none" stroke="black" d="M1034.41,-834.44C961.84,-828.65 895.2,-808.76 895.2,-758.1 895.2,-713.13 947.72,-692.4 1010.29,-684.27"></path>
<polygon fill="black" stroke="black" points="1010.56,-689.52 1024.88,-682.63 1009.39,-679.09 1010.56,-689.52"></polygon>
<text text-anchor="middle" x="893.45" y="-849.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1034.41,-834.44C961.84,-828.65 895.2,-808.76 895.2,-758.1 895.2,-713.13 947.72,-692.4 1010.29,-684.27" class="hover-path"></path></g>
<!-- 6&#45;&gt;6 -->
<g id="6:112_7-6:252_3" class="edge" data-from="6:112_7" data-to="6:252_3">
<path fill="none" stroke="black" d="M1034.41,-830.18C961.84,-817.8 895.2,-781.12 895.2,-687.7 895.2,-604.76 947.72,-566.55 1010.29,-550.35"></path>
<polygon fill="black" stroke="black" points="1011.44,-555.48 1024.91,-547.03 1009.12,-545.24 1011.44,-555.48"></polygon>
<text text-anchor="middle" x="893.45" y="-849.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1034.41,-830.18C961.84,-817.8 895.2,-781.12 895.2,-687.7 895.2,-604.76 947.72,-566.55 1010.29,-550.35" class="hover-path"></path></g>
<!-- 6&#45;&gt;6 -->
<g id="6:245_3-6:234_3" class="edge" data-from="6:245_3" data-to="6:234_3">
<path fill="none" stroke="black" d="M1026.38,-574.06C957,-576.71 895.2,-587.44 895.2,-613.3 895.2,-637.08 947.5,-648.07 1009.89,-651.74"></path>
<polygon fill="black" stroke="black" points="1009.64,-656.99 1024.87,-652.47 1010.14,-646.5 1009.64,-656.99"></polygon>
<text text-anchor="middle" x="893.45" y="-849.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1026.38,-574.06C957,-576.71 895.2,-587.44 895.2,-613.3 895.2,-637.08 947.5,-648.07 1009.89,-651.74" class="hover-path"></path></g>
<!-- 6&#45;&gt;6 -->
<g id="6:112_7-6:257_3" class="edge" data-from="6:112_7" data-to="6:257_3">
<path fill="none" stroke="black" d="M1034.41,-829.11C961.84,-815.08 895.2,-774.21 895.2,-670.1 895.2,-577.47 947.95,-534.9 1010.69,-516.76"></path>
<polygon fill="black" stroke="black" points="1011.68,-521.92 1024.92,-513.13 1009.09,-511.75 1011.68,-521.92"></polygon>
<text text-anchor="middle" x="893.45" y="-849.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1034.41,-829.11C961.84,-815.08 895.2,-774.21 895.2,-670.1 895.2,-577.47 947.95,-534.9 1010.69,-516.76" class="hover-path"></path></g>
<!-- 6&#45;&gt;6 -->
<g id="6:112_7-6:267_3" class="edge" data-from="6:112_7" data-to="6:267_3">
<path fill="none" stroke="black" d="M1034.41,-828.05C961.84,-812.37 895.2,-767.3 895.2,-652.5 895.2,-550.36 947.95,-503.42 1010.69,-483.27"></path>
<polygon fill="black" stroke="black" points="1011.93,-488.37 1024.93,-479.23 1009.06,-478.27 1011.93,-488.37"></polygon>
<text text-anchor="middle" x="893.45" y="-849.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1034.41,-828.05C961.84,-812.37 895.2,-767.3 895.2,-652.5 895.2,-550.36 947.95,-503.42 1010.69,-483.27" class="hover-path"></path></g>
<!-- 6&#45;&gt;6 -->
<g id="6:188_3-6:72_7" class="edge" data-from="6:188_3" data-to="6:72_7">
<path fill="none" stroke="black" d="M1026.38,-728.19C957,-749.62 895.2,-805.61 895.2,-940.5 895.2,-1070.45 952.56,-1127.17 1018.79,-1150.31"></path>
<polygon fill="black" stroke="black" points="1017.08,-1155.28 1032.96,-1154.68 1020.17,-1145.25 1017.08,-1155.28"></polygon>
<text text-anchor="middle" x="893.45" y="-849.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1026.38,-728.19C957,-749.62 895.2,-805.61 895.2,-940.5 895.2,-1070.45 952.56,-1127.17 1018.79,-1150.31" class="hover-path"></path></g>
<!-- 7 -->
<g id="7" class="node" data-path="/home/delandtj/Threefold/zosstorage/src/orchestrator/run.rs">
<rect x="571.0999755859375" y="-1880.0999755859375" width="262" height="608.199951171875"></rect>
<g id="7_3" class="title">
<text text-anchor="start" x="628.3" y="-1847.7" font-family="Arial" font-size="16.00"> &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;run.rs &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text>
</g>
<g id="7:62_11" data-kind="23" class="cell struct">
<rect x="587.0999755859375" y="-1828.9000244140625" width="230" height="27.2000732421875"></rect>
<text text-anchor="start" x="664.75" y="-1811.5" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="675.42" y="-1811.5" font-family="Arial" font-size="16.00"> &#160;Context</text>
</g>
<g id="7:83_5" data-kind="19" class="cell">
<rect x="587.0999755859375" y="-1793.699951171875" width="230" height="324.7999267578125"></rect>
<text text-anchor="start" x="657.64" y="-1767.3" font-family="Arial" font-size="16.00">impl Context</text>
<g id="7:85_11" data-kind="12" class="cell function">
<rect x="595.0999755859375" y="-1750.5" width="214" height="27.199951171875"></rect>
<text text-anchor="start" x="687.42" y="-1732.1" font-family="Arial" font-size="16.00">new</text>
</g>
<g id="7:106_11" data-kind="6" class="cell method">
<rect x="595.0999755859375" y="-1715.300048828125" width="214" height="27.2000732421875"></rect>
<text text-anchor="start" x="664.75" y="-1696.9" font-family="Arial" font-size="16.00">with_show</text>
</g>
<g id="7:116_11" data-kind="6" class="cell method">
<rect x="595.0999755859375" y="-1680.0999755859375" width="214" height="27.199951171875"></rect>
<text text-anchor="start" x="664.3" y="-1661.7" font-family="Arial" font-size="16.00">with_apply</text>
</g>
<g id="7:128_11" data-kind="6" class="cell method">
<rect x="595.0999755859375" y="-1644.9000244140625" width="214" height="27.2000732421875"></rect>
<text text-anchor="start" x="642.5" y="-1626.5" font-family="Arial" font-size="16.00">with_report_path</text>
</g>
<g id="7:134_11" data-kind="6" class="cell method">
<rect x="595.0999755859375" y="-1609.699951171875" width="214" height="27.199951171875"></rect>
<text text-anchor="start" x="629.61" y="-1591.3" font-family="Arial" font-size="16.00">with_mount_existing</text>
</g>
<g id="7:140_11" data-kind="6" class="cell method">
<rect x="595.0999755859375" y="-1574.5" width="214" height="27.199951171875"></rect>
<text text-anchor="start" x="633.18" y="-1556.1" font-family="Arial" font-size="16.00">with_report_current</text>
</g>
<g id="7:146_11" data-kind="6" class="cell method">
<rect x="595.0999755859375" y="-1539.300048828125" width="214" height="27.2000732421875"></rect>
<text text-anchor="start" x="620.72" y="-1520.9" font-family="Arial" font-size="16.00">with_topology_from_cli</text>
</g>
<g id="7:152_11" data-kind="6" class="cell method">
<rect x="595.0999755859375" y="-1504.0999755859375" width="214" height="27.199951171875"></rect>
<text text-anchor="start" x="600.71" y="-1485.7" font-family="Arial" font-size="16.00">with_topology_from_cmdline</text>
</g>
</g>
<g id="7:162_7" data-kind="12" class="cell function">
<rect x="587.0999755859375" y="-1460.9000244140625" width="230" height="27.2000732421875"></rect>
<text text-anchor="start" x="690.54" y="-1442.5" font-family="Arial" font-size="16.00">run</text>
</g>
<g id="7:451_3" data-kind="12" class="cell function">
<rect x="587.0999755859375" y="-1425.699951171875" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="638.06" y="-1407.3" font-family="Arial" font-size="16.00">build_device_filter</text>
</g>
<g id="7:484_3" data-kind="12" class="cell function">
<rect x="587.0999755859375" y="-1390.5" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="626.5" y="-1372.1" font-family="Arial" font-size="16.00">enforce_empty_disks</text>
</g>
<g id="7:498_3" data-kind="12" class="cell function">
<rect x="587.0999755859375" y="-1355.300048828125" width="230" height="27.2000732421875"></rect>
<text text-anchor="start" x="675.42" y="-1336.9" font-family="Arial" font-size="16.00">role_str</text>
</g>
<g id="7:518_3" data-kind="12" class="cell function">
<rect x="587.0999755859375" y="-1320.0999755859375" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="628.73" y="-1301.7" font-family="Arial" font-size="16.00">build_summary_json</text>
</g>
</g>
<!-- 7&#45;&gt;11 -->
<g id="7:162_7-11:49_7" class="edge" data-from="7:162_7" data-to="11:49_7">
<path fill="none" stroke="black" d="M818.1,-1447.3C949.9,-1447.3 916.01,-327.77 1034.86,-240.31"></path>
<polygon fill="black" stroke="black" points="1036.32,-245.36 1048.71,-235.4 1032.81,-235.46 1036.32,-245.36"></polygon>
<text text-anchor="middle" x="936.34" y="-808.95" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M818.1,-1447.3C949.9,-1447.3 916.01,-327.77 1034.86,-240.31" class="hover-path"></path></g>
<!-- 7&#45;&gt;11 -->
<g id="7:484_3-11:144_7" class="edge" data-from="7:484_3" data-to="11:144_7">
<path fill="none" stroke="black" d="M818.1,-1376.9C946.08,-1376.9 919.32,-292.08 1034.91,-205.21"></path>
<polygon fill="black" stroke="black" points="1036.39,-210.26 1048.71,-200.22 1032.82,-200.38 1036.39,-210.26"></polygon>
<text text-anchor="middle" x="936.34" y="-757.2" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M818.1,-1376.9C946.08,-1376.9 919.32,-292.08 1034.91,-205.21" class="hover-path"></path></g>
<!-- 7&#45;&gt;6 -->
<g id="7:162_7-6:183_7" class="edge" data-from="7:162_7" data-to="6:183_7">
<path fill="none" stroke="black" d="M818.1,-1447.3C893.61,-1447.3 938.99,-835.5 1010.85,-761.42"></path>
<polygon fill="black" stroke="black" points="1012.8,-766.32 1023.75,-754.79 1008.01,-756.98 1012.8,-766.32"></polygon>
<text text-anchor="middle" x="936.34" y="-1022.43" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M818.1,-1447.3C893.61,-1447.3 938.99,-835.5 1010.85,-761.42" class="hover-path"></path></g>
<!-- 7&#45;&gt;7 -->
<g id="7:162_7-7:484_3" class="edge" data-from="7:162_7" data-to="7:484_3">
<path fill="none" stroke="black" d="M587.24,-1451.77C518.59,-1450.08 453.97,-1439.73 453.97,-1412.1 453.97,-1386.69 508.66,-1375.89 570.86,-1373"></path>
<polygon fill="black" stroke="black" points="570.93,-1378.26 585.73,-1372.48 570.56,-1367.76 570.93,-1378.26"></polygon>
<text text-anchor="middle" x="452.22" y="-1571.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M587.24,-1451.77C518.59,-1450.08 453.97,-1439.73 453.97,-1412.1 453.97,-1386.69 508.66,-1375.89 570.86,-1373" class="hover-path"></path></g>
<!-- 7&#45;&gt;7 -->
<g id="7:162_7-7:451_3" class="edge" data-from="7:162_7" data-to="7:451_3">
<path fill="none" stroke="black" d="M587.24,-1452.7C518.59,-1452.56 453.97,-1446.33 453.97,-1429.7 453.97,-1414.41 508.66,-1407.91 570.86,-1406.85"></path>
<polygon fill="black" stroke="black" points="570.78,-1412.1 585.73,-1406.71 570.68,-1401.6 570.78,-1412.1"></polygon>
<text text-anchor="middle" x="452.22" y="-1571.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M587.24,-1452.7C518.59,-1452.56 453.97,-1446.33 453.97,-1429.7 453.97,-1414.41 508.66,-1407.91 570.86,-1406.85" class="hover-path"></path></g>
<!-- 7&#45;&gt;7 -->
<g id="7:518_3-7:498_3" class="edge" data-from="7:518_3" data-to="7:498_3">
<path fill="none" stroke="black" d="M587.24,-1301.1C518.59,-1301.24 453.97,-1307.47 453.97,-1324.1 453.97,-1339.39 508.66,-1345.89 570.86,-1346.95"></path>
<polygon fill="black" stroke="black" points="570.68,-1352.2 585.73,-1347.09 570.78,-1341.7 570.68,-1352.2"></polygon>
<text text-anchor="middle" x="452.22" y="-1571.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M587.24,-1301.1C518.59,-1301.24 453.97,-1307.47 453.97,-1324.1 453.97,-1339.39 508.66,-1345.89 570.86,-1346.95" class="hover-path"></path></g>
<!-- 7&#45;&gt;7 -->
<g id="7:162_7-7:518_3" class="edge" data-from="7:162_7" data-to="7:518_3">
<path fill="none" stroke="black" d="M587.24,-1449.92C518.59,-1445.13 453.97,-1426.53 453.97,-1376.9 453.97,-1331.25 508.66,-1311.84 570.86,-1305.31"></path>
<polygon fill="black" stroke="black" points="571.25,-1310.54 585.74,-1304.02 570.34,-1300.08 571.25,-1310.54"></polygon>
<text text-anchor="middle" x="452.22" y="-1571.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M587.24,-1449.92C518.59,-1445.13 453.97,-1426.53 453.97,-1376.9 453.97,-1331.25 508.66,-1311.84 570.86,-1305.31" class="hover-path"></path></g>
<!-- 10 -->
<g id="10" class="node" data-path="/home/delandtj/Threefold/zosstorage/src/fs/plan.rs">
<rect x="1035.1300048828125" y="-1992.699951171875" width="262" height="467.39990234375"></rect>
<g id="10_4" class="title">
<text text-anchor="start" x="1088.78" y="-1960.3" font-family="Arial" font-size="16.00"> &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;plan.rs &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text>
</g>
<g id="10:55_9" data-kind="10" class="cell enum">
<rect x="1051.1300048828125" y="-1941.5" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="1131.45" y="-1924.1" font-family="Arial" font-weight="bold" font-size="16.00">E</text>
<text text-anchor="start" x="1142.12" y="-1924.1" font-family="Arial" font-size="16.00"> &#160;FsKind</text>
</g>
<g id="10:66_11" data-kind="23" class="cell struct">
<rect x="1051.1300048828125" y="-1906.300048828125" width="230" height="27.2000732421875"></rect>
<text text-anchor="start" x="1129.23" y="-1888.9" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="1139.9" y="-1888.9" font-family="Arial" font-size="16.00"> &#160;FsSpec</text>
</g>
<g id="10:81_11" data-kind="23" class="cell struct">
<rect x="1051.1300048828125" y="-1871.0999755859375" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="1131.45" y="-1853.7" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="1142.12" y="-1853.7" font-family="Arial" font-size="16.00"> &#160;FsPlan</text>
</g>
<g id="10:88_11" data-kind="23" class="cell struct">
<rect x="1051.1300048828125" y="-1835.9000244140625" width="230" height="27.2000732421875"></rect>
<text text-anchor="start" x="1124.79" y="-1818.5" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="1135.46" y="-1818.5" font-family="Arial" font-size="16.00"> &#160;FsResult</text>
</g>
<g id="10:106_7" data-kind="12" class="cell function">
<rect x="1051.1300048828125" y="-1800.699951171875" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="1107" y="-1782.3" font-family="Arial" font-size="16.00">plan_filesystems</text>
</g>
<g id="10:209_7" data-kind="12" class="cell function">
<rect x="1051.1300048828125" y="-1765.5" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="1102.56" y="-1747.1" font-family="Arial" font-size="16.00">make_filesystems</text>
</g>
<g id="10:319_3" data-kind="12" class="cell function">
<rect x="1051.1300048828125" y="-1730.300048828125" width="230" height="27.2000732421875"></rect>
<text text-anchor="start" x="1119.88" y="-1711.9" font-family="Arial" font-size="16.00">capture_uuid</text>
</g>
<g id="10:335_3" data-kind="12" class="cell function">
<rect x="1051.1300048828125" y="-1695.0999755859375" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="1098.54" y="-1676.7" font-family="Arial" font-size="16.00">parse_blkid_export</text>
</g>
<g id="10:354_7" data-kind="12" class="cell function">
<rect x="1051.1300048828125" y="-1659.9000244140625" width="230" height="27.2000732421875"></rect>
<text text-anchor="start" x="1070.09" y="-1641.5" font-family="Arial" font-size="16.00">probe_existing_filesystems</text>
</g>
<g id="10:435_4" data-kind="2" class="cell module">
<rect x="1051.1300048828125" y="-1624.699951171875" width="230" height="78.39990234375"></rect>
<text text-anchor="start" x="1124.78" y="-1598.3" font-family="Arial" font-size="16.00">tests_parse</text>
<g id="10:439_6" data-kind="12" class="cell function">
<rect x="1059.1300048828125" y="-1581.5" width="214" height="27.199951171875"></rect>
<text text-anchor="start" x="1106.54" y="-1563.1" font-family="Arial" font-size="16.00">parse_export_ok</text>
</g>
</g>
</g>
<!-- 7&#45;&gt;10 -->
<g id="7:162_7-10:106_7" class="edge" data-from="7:162_7" data-to="10:106_7">
<path fill="none" stroke="black" d="M818.1,-1447.3C951.12,-1447.3 845.68,-1624.06 934.59,-1723 969.93,-1762.33 987.69,-1782.8 1033.75,-1786.49"></path>
<polygon fill="black" stroke="black" points="1033.44,-1791.73 1048.62,-1787.04 1033.83,-1781.24 1033.44,-1791.73"></polygon>
<text text-anchor="middle" x="936.34" y="-1729.79" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M818.1,-1447.3C951.12,-1447.3 845.68,-1624.06 934.59,-1723 969.93,-1762.33 987.69,-1782.8 1033.75,-1786.49" class="hover-path"></path></g>
<!-- 7&#45;&gt;10 -->
<g id="7:162_7-10:354_7" class="edge" data-from="7:162_7" data-to="10:354_7">
<path fill="none" stroke="black" d="M818.1,-1447.3C948.25,-1447.3 917.3,-1629.94 1033.92,-1645.28"></path>
<polygon fill="black" stroke="black" points="1033.32,-1650.5 1048.62,-1646.2 1033.98,-1640.02 1033.32,-1650.5"></polygon>
<text text-anchor="middle" x="936.34" y="-1556.97" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M818.1,-1447.3C948.25,-1447.3 917.3,-1629.94 1033.92,-1645.28" class="hover-path"></path></g>
<!-- 7&#45;&gt;10 -->
<g id="7:162_7-10:209_7" class="edge" data-from="7:162_7" data-to="10:209_7">
<path fill="none" stroke="black" d="M818.1,-1447.3C912.16,-1447.3 877.01,-1549.62 934.59,-1624 977.91,-1679.96 974.42,-1741.68 1034.04,-1750.76"></path>
<polygon fill="black" stroke="black" points="1033.29,-1755.97 1048.62,-1751.79 1034.03,-1745.5 1033.29,-1755.97"></polygon>
<text text-anchor="middle" x="936.34" y="-1631.84" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M818.1,-1447.3C912.16,-1447.3 877.01,-1549.62 934.59,-1624 977.91,-1679.96 974.42,-1741.68 1034.04,-1750.76" class="hover-path"></path></g>
<!-- 12 -->
<g id="12" class="node" data-path="/home/delandtj/Threefold/zosstorage/src/partition/plan.rs">
<rect x="1035.1300048828125" y="-2644.699951171875" width="262" height="467.39990234375"></rect>
<g id="12_5" class="title">
<text text-anchor="start" x="1088.78" y="-2612.3" font-family="Arial" font-size="16.00"> &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;plan.rs &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text>
</g>
<g id="12:56_9" data-kind="10" class="cell enum">
<rect x="1051.1300048828125" y="-2593.5" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="1125.23" y="-2576.1" font-family="Arial" font-weight="bold" font-size="16.00">E</text>
<text text-anchor="start" x="1135.9" y="-2576.1" font-family="Arial" font-size="16.00"> &#160;PartRole</text>
</g>
<g id="12:69_11" data-kind="23" class="cell struct">
<rect x="1051.1300048828125" y="-2558.300048828125" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="1108.77" y="-2540.9" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="1119.44" y="-2540.9" font-family="Arial" font-size="16.00"> &#160;PartitionSpec</text>
</g>
<g id="12:80_11" data-kind="23" class="cell struct">
<rect x="1051.1300048828125" y="-2523.10009765625" width="230" height="27.2001953125"></rect>
<text text-anchor="start" x="1124.79" y="-2505.7" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="1135.46" y="-2505.7" font-family="Arial" font-size="16.00"> &#160;DiskPlan</text>
</g>
<g id="12:89_11" data-kind="23" class="cell struct">
<rect x="1051.1300048828125" y="-2487.89990234375" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="1110.99" y="-2470.5" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="1121.66" y="-2470.5" font-family="Arial" font-size="16.00"> &#160;PartitionPlan</text>
</g>
<g id="12:100_11" data-kind="23" class="cell struct">
<rect x="1051.1300048828125" y="-2452.699951171875" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="1104.33" y="-2435.3" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="1115" y="-2435.3" font-family="Arial" font-size="16.00"> &#160;PartitionResult</text>
</g>
<g id="12:133_7" data-kind="12" class="cell function">
<rect x="1051.1300048828125" y="-2417.5" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="1114.1" y="-2399.1" font-family="Arial" font-size="16.00">plan_partitions</text>
</g>
<g id="12:361_7" data-kind="12" class="cell function">
<rect x="1051.1300048828125" y="-2382.300048828125" width="230" height="184"></rect>
<text text-anchor="start" x="1110.1" y="-2355.9" font-family="Arial" font-size="16.00">apply_partitions</text>
<g id="12:368_7" data-kind="12" class="cell function">
<rect x="1059.1300048828125" y="-2339.10009765625" width="214" height="27.2001953125"></rect>
<text text-anchor="start" x="1129.21" y="-2320.7" font-family="Arial" font-size="16.00">type_code</text>
</g>
<g id="12:378_7" data-kind="12" class="cell function">
<rect x="1059.1300048828125" y="-2303.89990234375" width="214" height="27.199951171875"></rect>
<text text-anchor="start" x="1114.98" y="-2285.5" font-family="Arial" font-size="16.00">part_dev_path</text>
</g>
<g id="12:387_7" data-kind="12" class="cell function">
<rect x="1059.1300048828125" y="-2268.699951171875" width="214" height="27.199951171875"></rect>
<text text-anchor="start" x="1102.1" y="-2250.3" font-family="Arial" font-size="16.00">sector_size_bytes</text>
</g>
<g id="12:399_7" data-kind="12" class="cell function">
<rect x="1059.1300048828125" y="-2233.5" width="214" height="27.199951171875"></rect>
<text text-anchor="start" x="1101.65" y="-2215.1" font-family="Arial" font-size="16.00">parse_sgdisk_info</text>
</g>
</g>
</g>
<!-- 7&#45;&gt;12 -->
<g id="7:162_7-12:133_7" class="edge" data-from="7:162_7" data-to="12:133_7">
<path fill="none" stroke="black" d="M818.1,-1447.3C968.72,-1447.3 893.46,-1970.11 934.59,-2115 970.77,-2242.45 916.75,-2390.85 1033.74,-2403.09"></path>
<polygon fill="black" stroke="black" points="1033.38,-2408.33 1048.62,-2403.83 1033.9,-2397.84 1033.38,-2408.33"></polygon>
<text text-anchor="middle" x="936.34" y="-2127.21" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M818.1,-1447.3C968.72,-1447.3 893.46,-1970.11 934.59,-2115 970.77,-2242.45 916.75,-2390.85 1033.74,-2403.09" class="hover-path"></path></g>
<!-- 7&#45;&gt;12 -->
<g id="7:162_7-12:361_7" class="edge" data-from="7:162_7" data-to="12:361_7">
<path fill="none" stroke="black" d="M818.1,-1447.3C1022.23,-1447.3 857.8,-2311.43 1041.77,-2358.69"></path>
<polygon fill="black" stroke="black" points="1041.1,-2363.9 1056.63,-2360.52 1042.38,-2353.47 1041.1,-2363.9"></polygon>
<text text-anchor="middle" x="936.34" y="-1880.81" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M818.1,-1447.3C1022.23,-1447.3 857.8,-2311.43 1041.77,-2358.69" class="hover-path"></path></g>
<!-- 15 -->
<g id="15" class="node" data-path="/home/delandtj/Threefold/zosstorage/src/mount/ops.rs">
<rect x="1035.1300048828125" y="-3174.89990234375" width="262" height="345.7998046875"></rect>
<g id="15_6" class="title">
<text text-anchor="start" x="1091" y="-3142.5" font-family="Arial" font-size="16.00"> &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ops.rs &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text>
</g>
<g id="15:55_11" data-kind="23" class="cell struct">
<rect x="1051.1300048828125" y="-3123.699951171875" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="1104.76" y="-3106.3" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="1115.43" y="-3106.3" font-family="Arial" font-size="16.00"> &#160;PlannedMount</text>
</g>
<g id="15:63_11" data-kind="23" class="cell struct">
<rect x="1051.1300048828125" y="-3088.5" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="1080.3" y="-3071.1" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="1090.97" y="-3071.1" font-family="Arial" font-size="16.00"> &#160;PlannedSubvolMount</text>
</g>
<g id="15:73_11" data-kind="23" class="cell struct">
<rect x="1051.1300048828125" y="-3053.300048828125" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="1118.11" y="-3035.9" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="1128.78" y="-3035.9" font-family="Arial" font-size="16.00"> &#160;MountPlan</text>
</g>
<g id="15:84_11" data-kind="23" class="cell struct">
<rect x="1051.1300048828125" y="-3018.10009765625" width="230" height="27.2001953125"></rect>
<text text-anchor="start" x="1111.44" y="-3000.7" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="1122.11" y="-3000.7" font-family="Arial" font-size="16.00"> &#160;MountResult</text>
</g>
<g id="15:95_3" data-kind="12" class="cell function">
<rect x="1051.1300048828125" y="-2982.89990234375" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="1131.45" y="-2964.5" font-family="Arial" font-size="16.00">fstype_str</text>
</g>
<g id="15:104_7" data-kind="12" class="cell function">
<rect x="1051.1300048828125" y="-2947.699951171875" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="1120.32" y="-2929.3" font-family="Arial" font-size="16.00">plan_mounts</text>
</g>
<g id="15:175_7" data-kind="12" class="cell function">
<rect x="1051.1300048828125" y="-2912.5" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="1116.32" y="-2894.1" font-family="Arial" font-size="16.00">apply_mounts</text>
</g>
<g id="15:303_7" data-kind="12" class="cell function">
<rect x="1051.1300048828125" y="-2877.300048828125" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="1098.99" y="-2858.9" font-family="Arial" font-size="16.00">maybe_write_fstab</text>
</g>
</g>
<!-- 7&#45;&gt;15 -->
<g id="7:162_7-15:303_7" class="edge" data-from="7:162_7" data-to="15:303_7">
<path fill="none" stroke="black" d="M818.1,-1447.3C894.88,-1447.3 967.56,-2748.43 1002.09,-2817 1012.66,-2837.98 1017.92,-2854.93 1034.3,-2861.14"></path>
<polygon fill="black" stroke="black" points="1032.99,-2866.25 1048.64,-2863.46 1034.67,-2855.89 1032.99,-2866.25"></polygon>
<text text-anchor="middle" x="936.34" y="-2230.65" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M818.1,-1447.3C894.88,-1447.3 967.56,-2748.43 1002.09,-2817 1012.66,-2837.98 1017.92,-2854.93 1034.3,-2861.14" class="hover-path"></path></g>
<!-- 7&#45;&gt;15 -->
<g id="7:162_7-15:175_7" class="edge" data-from="7:162_7" data-to="15:175_7">
<path fill="none" stroke="black" d="M818.1,-1447.3C837.29,-1447.3 995.84,-2798.85 1002.09,-2817 1013.75,-2850.82 1009.84,-2886.15 1034.08,-2896.13"></path>
<polygon fill="black" stroke="black" points="1032.97,-2901.27 1048.64,-2898.64 1034.75,-2890.92 1032.97,-2901.27"></polygon>
<text text-anchor="middle" x="936.34" y="-2291.62" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M818.1,-1447.3C837.29,-1447.3 995.84,-2798.85 1002.09,-2817 1013.75,-2850.82 1009.84,-2886.15 1034.08,-2896.13" class="hover-path"></path></g>
<!-- 7&#45;&gt;15 -->
<g id="7:162_7-15:104_7" class="edge" data-from="7:162_7" data-to="15:104_7">
<path fill="none" stroke="black" d="M818.1,-1447.3C820.5,-1447.3 1001.47,-2814.68 1002.09,-2817 1014.99,-2865.19 998.56,-2919.99 1033.89,-2931.79"></path>
<polygon fill="black" stroke="black" points="1033.04,-2936.97 1048.63,-2933.89 1034.52,-2926.57 1033.04,-2936.97"></polygon>
<text text-anchor="middle" x="936.34" y="-2338.06" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M818.1,-1447.3C820.5,-1447.3 1001.47,-2814.68 1002.09,-2817 1014.99,-2865.19 998.56,-2919.99 1033.89,-2931.79" class="hover-path"></path></g>
<!-- 10&#45;&gt;10 -->
<g id="10:354_7-10:335_3" class="edge" data-from="10:354_7" data-to="10:335_3">
<path fill="none" stroke="black" d="M1051.35,-1640.9C983.67,-1641.1 920.24,-1647.35 920.24,-1663.9 920.24,-1679.12 973.92,-1685.63 1035.21,-1686.73"></path>
<polygon fill="black" stroke="black" points="1034.79,-1691.98 1049.84,-1686.88 1034.9,-1681.48 1034.79,-1691.98"></polygon>
<text text-anchor="middle" x="918.49" y="-1754.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1051.35,-1640.9C983.67,-1641.1 920.24,-1647.35 920.24,-1663.9 920.24,-1679.12 973.92,-1685.63 1035.21,-1686.73" class="hover-path"></path></g>
<!-- 10&#45;&gt;10 -->
<g id="10:319_3-10:335_3" class="edge" data-from="10:319_3" data-to="10:335_3">
<path fill="none" stroke="black" d="M1051.35,-1722.1C983.67,-1721.9 920.24,-1715.65 920.24,-1699.1 920.24,-1683.88 973.92,-1677.37 1035.21,-1676.27"></path>
<polygon fill="black" stroke="black" points="1034.9,-1681.52 1049.84,-1676.12 1034.79,-1671.02 1034.9,-1681.52"></polygon>
<text text-anchor="middle" x="918.49" y="-1754.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1051.35,-1722.1C983.67,-1721.9 920.24,-1715.65 920.24,-1699.1 920.24,-1683.88 973.92,-1677.37 1035.21,-1676.27" class="hover-path"></path></g>
<!-- 10&#45;&gt;10 -->
<g id="10:439_6-10:335_3" class="edge" data-from="10:439_6" data-to="10:335_3">
<path fill="none" stroke="black" d="M1059.34,-1564.24C988.75,-1567.12 920.24,-1582.16 920.24,-1624.7 920.24,-1662.35 973.92,-1678.46 1035.21,-1683.66"></path>
<polygon fill="black" stroke="black" points="1034.52,-1688.88 1049.84,-1684.68 1035.24,-1678.4 1034.52,-1688.88"></polygon>
<text text-anchor="middle" x="918.49" y="-1754.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1059.34,-1564.24C988.75,-1567.12 920.24,-1582.16 920.24,-1624.7 920.24,-1662.35 973.92,-1678.46 1035.21,-1683.66" class="hover-path"></path></g>
<!-- 10&#45;&gt;10 -->
<g id="10:209_7-10:319_3" class="edge" data-from="10:209_7" data-to="10:319_3">
<path fill="none" stroke="black" d="M1051.35,-1757.3C983.67,-1757.1 920.24,-1750.85 920.24,-1734.3 920.24,-1719.08 973.92,-1712.57 1035.21,-1711.47"></path>
<polygon fill="black" stroke="black" points="1034.9,-1716.72 1049.84,-1711.32 1034.79,-1706.22 1034.9,-1716.72"></polygon>
<text text-anchor="middle" x="918.49" y="-1754.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1051.35,-1757.3C983.67,-1757.1 920.24,-1750.85 920.24,-1734.3 920.24,-1719.08 973.92,-1712.57 1035.21,-1711.47" class="hover-path"></path></g>
<!-- 10&#45;&gt;20 -->
<g id="10:354_7-20:60_7" class="edge" data-from="10:354_7" data-to="20:60_7">
<path fill="none" stroke="black" d="M1282.13,-1646.3C1495.88,-1646.3 1226.35,-1981.63 1394.17,-2114 1435.83,-2146.86 1428.01,-2042.14 1468.83,-2020.52"></path>
<polygon fill="black" stroke="black" points="1469.85,-2025.68 1483.2,-2017.06 1467.39,-2015.47 1469.85,-2025.68"></polygon>
<text text-anchor="middle" x="1395.92" y="-2120.19" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1282.13,-1646.3C1495.88,-1646.3 1226.35,-1981.63 1394.17,-2114 1435.83,-2146.86 1428.01,-2042.14 1468.83,-2020.52" class="hover-path"></path></g>
<!-- 10&#45;&gt;20 -->
<g id="10:209_7-20:72_7" class="edge" data-from="10:209_7" data-to="20:72_7">
<path fill="none" stroke="black" d="M1282.13,-1751.9C1384.83,-1751.9 1314.3,-1889.44 1394.17,-1954 1422.27,-1976.71 1437.86,-1980.7 1468.38,-1981.37"></path>
<polygon fill="black" stroke="black" points="1468.12,-1986.62 1483.16,-1981.49 1468.2,-1976.12 1468.12,-1986.62"></polygon>
<text text-anchor="middle" x="1395.92" y="-1959.76" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1282.13,-1751.9C1384.83,-1751.9 1314.3,-1889.44 1394.17,-1954 1422.27,-1976.71 1437.86,-1980.7 1468.38,-1981.37" class="hover-path"></path></g>
<!-- 10&#45;&gt;20 -->
<g id="10:354_7-20:98_7" class="edge" data-from="10:354_7" data-to="20:98_7">
<path fill="none" stroke="black" d="M1282.13,-1646.3C1347.47,-1646.3 1358.17,-1685.16 1397.67,-1737.2 1454.84,-1812.52 1392.54,-1930.87 1468.25,-1944.92"></path>
<polygon fill="black" stroke="black" points="1467.78,-1950.15 1483.16,-1946.17 1468.66,-1939.69 1467.78,-1950.15"></polygon>
<text text-anchor="middle" x="1395.92" y="-1741.4" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1282.13,-1646.3C1347.47,-1646.3 1358.17,-1685.16 1397.67,-1737.2 1454.84,-1812.52 1392.54,-1930.87 1468.25,-1944.92" class="hover-path"></path></g>
<!-- 10&#45;&gt;20 -->
<g id="10:209_7-20:60_7" class="edge" data-from="10:209_7" data-to="20:60_7">
<path fill="none" stroke="black" d="M1282.13,-1751.9C1460.38,-1751.9 1251.61,-2030 1394.17,-2137 1442.88,-2173.55 1422.47,-2043.91 1468.85,-2020.32"></path>
<polygon fill="black" stroke="black" points="1469.75,-2025.5 1483.2,-2017.04 1467.4,-2015.27 1469.75,-2025.5"></polygon>
<text text-anchor="middle" x="1395.92" y="-2143.37" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1282.13,-1751.9C1460.38,-1751.9 1251.61,-2030 1394.17,-2137 1442.88,-2173.55 1422.47,-2043.91 1468.85,-2020.32" class="hover-path"></path></g>
<!-- 10&#45;&gt;20 -->
<g id="10:319_3-20:98_7" class="edge" data-from="10:319_3" data-to="20:98_7">
<path fill="none" stroke="black" d="M1282.13,-1716.7C1350.19,-1716.7 1352.59,-1766.21 1397.67,-1817.2 1439.47,-1864.48 1419.84,-1932.92 1468.56,-1944.58"></path>
<polygon fill="black" stroke="black" points="1467.69,-1949.77 1483.17,-1946.14 1468.81,-1939.33 1467.69,-1949.77"></polygon>
<text text-anchor="middle" x="1395.92" y="-1821.4" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1282.13,-1716.7C1350.19,-1716.7 1352.59,-1766.21 1397.67,-1817.2 1439.47,-1864.48 1419.84,-1932.92 1468.56,-1944.58" class="hover-path"></path></g>
<!-- 2 -->
<g id="2" class="node" data-path="/home/delandtj/Threefold/zosstorage/src/main.rs">
<rect x="114.62000274658203" y="-1827.300048828125" width="261.99999237060547" height="134.60009765625"></rect>
<g id="2_7" class="title">
<text text-anchor="start" x="166.05" y="-1794.9" font-family="Arial" font-size="16.00"> &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;main.rs &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text>
</g>
<g id="2:34_3" data-kind="12" class="cell function">
<rect x="130.6199951171875" y="-1776.0999755859375" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="228.28" y="-1757.7" font-family="Arial" font-size="16.00">main</text>
</g>
<g id="2:43_3" data-kind="12" class="cell function">
<rect x="130.6199951171875" y="-1740.9000244140625" width="230" height="27.2000732421875"></rect>
<text text-anchor="start" x="210.49" y="-1722.5" font-family="Arial" font-size="16.00">real_main</text>
</g>
</g>
<!-- 2&#45;&gt;7 -->
<g id="2:43_3-7:85_11" class="edge" data-from="2:43_3" data-to="7:85_11">
<path fill="none" stroke="black" d="M361.62,-1727.3C408.79,-1727.3 419.11,-1741.83 466.1,-1746 517.03,-1750.52 533.68,-1739.62 577.67,-1737.32"></path>
<polygon fill="black" stroke="black" points="577.72,-1742.57 592.58,-1736.94 577.46,-1732.07 577.72,-1742.57"></polygon>
<text text-anchor="middle" x="467.85" y="-1750.48" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M361.62,-1727.3C408.79,-1727.3 419.11,-1741.83 466.1,-1746 517.03,-1750.52 533.68,-1739.62 577.67,-1737.32" class="hover-path"></path></g>
<!-- 2&#45;&gt;7 -->
<g id="2:43_3-7:128_11" class="edge" data-from="2:43_3" data-to="7:128_11">
<path fill="none" stroke="black" d="M361.62,-1727.3C419.59,-1727.3 412.49,-1671.26 466.1,-1649.2 513.83,-1629.56 532.75,-1630.76 577.75,-1631.21"></path>
<polygon fill="black" stroke="black" points="577.55,-1636.46 592.58,-1631.29 577.61,-1625.96 577.55,-1636.46"></polygon>
<text text-anchor="middle" x="467.85" y="-1653.4" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M361.62,-1727.3C419.59,-1727.3 412.49,-1671.26 466.1,-1649.2 513.83,-1629.56 532.75,-1630.76 577.75,-1631.21" class="hover-path"></path></g>
<!-- 2&#45;&gt;7 -->
<g id="2:43_3-7:116_11" class="edge" data-from="2:43_3" data-to="7:116_11">
<path fill="none" stroke="black" d="M361.62,-1727.3C411.05,-1727.3 418.37,-1702.03 466.1,-1689.2 516.23,-1675.73 532.97,-1668.14 577.75,-1666.74"></path>
<polygon fill="black" stroke="black" points="577.66,-1671.99 592.58,-1666.52 577.51,-1661.49 577.66,-1671.99"></polygon>
<text text-anchor="middle" x="467.85" y="-1693.4" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M361.62,-1727.3C411.05,-1727.3 418.37,-1702.03 466.1,-1689.2 516.23,-1675.73 532.97,-1668.14 577.75,-1666.74" class="hover-path"></path></g>
<!-- 2&#45;&gt;7 -->
<g id="2:43_3-7:106_11" class="edge" data-from="2:43_3" data-to="7:106_11">
<path fill="none" stroke="black" d="M361.62,-1727.3C459.88,-1727.3 487.22,-1704.42 577.73,-1701.92"></path>
<polygon fill="black" stroke="black" points="577.66,-1707.17 592.58,-1701.72 577.51,-1696.67 577.66,-1707.17"></polygon>
<text text-anchor="middle" x="467.85" y="-1720.99" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M361.62,-1727.3C459.88,-1727.3 487.22,-1704.42 577.73,-1701.92" class="hover-path"></path></g>
<!-- 2&#45;&gt;7 -->
<g id="2:43_3-7:134_11" class="edge" data-from="2:43_3" data-to="7:134_11">
<path fill="none" stroke="black" d="M361.62,-1727.3C425.93,-1727.3 409.7,-1658.1 466.1,-1627.2 512.33,-1601.88 531.62,-1596.94 577.73,-1596.21"></path>
<polygon fill="black" stroke="black" points="577.62,-1601.46 592.58,-1596.11 577.55,-1590.96 577.62,-1601.46"></polygon>
<text text-anchor="middle" x="467.85" y="-1631.4" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M361.62,-1727.3C425.93,-1727.3 409.7,-1658.1 466.1,-1627.2 512.33,-1601.88 531.62,-1596.94 577.73,-1596.21" class="hover-path"></path></g>
<!-- 2&#45;&gt;7 -->
<g id="2:43_3-7:146_11" class="edge" data-from="2:43_3" data-to="7:146_11">
<path fill="none" stroke="black" d="M361.62,-1727.3C461.16,-1727.3 381.58,-1581.77 466.1,-1529.2 509.52,-1502.2 532.3,-1520.89 577.75,-1524.97"></path>
<polygon fill="black" stroke="black" points="577.37,-1530.2 592.59,-1525.63 577.84,-1519.71 577.37,-1530.2"></polygon>
<text text-anchor="middle" x="467.85" y="-1533.4" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M361.62,-1727.3C461.16,-1727.3 381.58,-1581.77 466.1,-1529.2 509.52,-1502.2 532.3,-1520.89 577.75,-1524.97" class="hover-path"></path></g>
<!-- 2&#45;&gt;7 -->
<g id="2:43_3-7:162_7" class="edge" data-from="2:43_3" data-to="7:162_7">
<path fill="none" stroke="black" d="M361.62,-1727.3C493.65,-1727.3 358.15,-1525.23 466.1,-1449.2 504.94,-1421.85 527.47,-1441.71 569.62,-1446.38"></path>
<polygon fill="black" stroke="black" points="569.32,-1451.62 584.59,-1447.22 569.9,-1441.14 569.32,-1451.62"></polygon>
<text text-anchor="middle" x="467.85" y="-1453.4" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M361.62,-1727.3C493.65,-1727.3 358.15,-1525.23 466.1,-1449.2 504.94,-1421.85 527.47,-1441.71 569.62,-1446.38" class="hover-path"></path></g>
<!-- 2&#45;&gt;7 -->
<g id="2:43_3-7:140_11" class="edge" data-from="2:43_3" data-to="7:140_11">
<path fill="none" stroke="black" d="M361.62,-1727.3C433.04,-1727.3 407.08,-1645.42 466.1,-1605.2 510.99,-1574.61 530.07,-1563.16 577.6,-1561.21"></path>
<polygon fill="black" stroke="black" points="577.69,-1566.46 592.58,-1560.93 577.49,-1555.96 577.69,-1566.46"></polygon>
<text text-anchor="middle" x="467.85" y="-1609.4" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M361.62,-1727.3C433.04,-1727.3 407.08,-1645.42 466.1,-1605.2 510.99,-1574.61 530.07,-1563.16 577.6,-1561.21" class="hover-path"></path></g>
<!-- 2&#45;&gt;7 -->
<g id="2:43_3-7:152_11" class="edge" data-from="2:43_3" data-to="7:152_11">
<path fill="none" stroke="black" d="M361.62,-1727.3C470.3,-1727.3 378,-1569.85 466.1,-1506.2 507.84,-1476.04 531.63,-1487.4 577.6,-1490.02"></path>
<polygon fill="black" stroke="black" points="577.44,-1495.27 592.58,-1490.46 577.74,-1484.77 577.44,-1495.27"></polygon>
<text text-anchor="middle" x="467.85" y="-1510.4" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M361.62,-1727.3C470.3,-1727.3 378,-1569.85 466.1,-1506.2 507.84,-1476.04 531.63,-1487.4 577.6,-1490.02" class="hover-path"></path></g>
<!-- 2&#45;&gt;2 -->
<g id="2:34_3-2:43_3" class="edge" data-from="2:34_3" data-to="2:43_3">
<path fill="none" stroke="black" d="M130.72,-1767.89C64.79,-1767.58 3.5,-1761.29 3.5,-1744.9 3.5,-1729.89 54.93,-1723.35 114.24,-1722.12"></path>
<polygon fill="black" stroke="black" points="114.27,-1727.37 129.21,-1721.93 114.14,-1716.87 114.27,-1727.37"></polygon>
<text text-anchor="middle" x="1.75" y="-1755.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M130.72,-1767.89C64.79,-1767.58 3.5,-1761.29 3.5,-1744.9 3.5,-1729.89 54.93,-1723.35 114.24,-1722.12" class="hover-path"></path></g>
<!-- 13 -->
<g id="13" class="node" data-path="/home/delandtj/Threefold/zosstorage/src/logging/mod.rs">
<rect x="571.0999755859375" y="-2321.10009765625" width="262" height="256.2001953125"></rect>
<g id="13_8" class="title">
<text text-anchor="start" x="624.3" y="-2288.7" font-family="Arial" font-size="16.00"> &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;mod.rs &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text>
</g>
<g id="13:46_11" data-kind="23" class="cell struct">
<rect x="587.0999755859375" y="-2269.89990234375" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="651.4" y="-2252.5" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="662.07" y="-2252.5" font-family="Arial" font-size="16.00"> &#160;LogOptions</text>
</g>
<g id="13:53_5" data-kind="19" class="cell">
<rect x="587.0999755859375" y="-2234.699951171875" width="230" height="78.39990234375"></rect>
<text text-anchor="start" x="644.29" y="-2208.3" font-family="Arial" font-size="16.00">impl LogOptions</text>
<g id="13:55_11" data-kind="12" class="cell function">
<rect x="595.0999755859375" y="-2191.5" width="214" height="27.199951171875"></rect>
<text text-anchor="start" x="674.09" y="-2173.1" font-family="Arial" font-size="16.00">from_cli</text>
</g>
</g>
<g id="13:63_3" data-kind="12" class="cell function">
<rect x="587.0999755859375" y="-2148.300048828125" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="651.86" y="-2129.9" font-family="Arial" font-size="16.00">level_from_str</text>
</g>
<g id="13:77_7" data-kind="12" class="cell function">
<rect x="587.0999755859375" y="-2113.10009765625" width="230" height="27.2001953125"></rect>
<text text-anchor="start" x="661.62" y="-2094.7" font-family="Arial" font-size="16.00">init_logging</text>
</g>
</g>
<!-- 2&#45;&gt;13 -->
<g id="2:43_3-13:55_11" class="edge" data-from="2:43_3" data-to="13:55_11">
<path fill="none" stroke="black" d="M361.62,-1727.3C481.1,-1727.3 410.82,-1869.07 466.1,-1975 512.73,-2064.36 490.3,-2166.09 577.78,-2176.95"></path>
<polygon fill="black" stroke="black" points="577.31,-2182.18 592.59,-2177.81 577.92,-2171.7 577.31,-2182.18"></polygon>
<text text-anchor="middle" x="467.85" y="-1984.89" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M361.62,-1727.3C481.1,-1727.3 410.82,-1869.07 466.1,-1975 512.73,-2064.36 490.3,-2166.09 577.78,-2176.95" class="hover-path"></path></g>
<!-- 2&#45;&gt;13 -->
<g id="2:43_3-13:77_7" class="edge" data-from="2:43_3" data-to="13:77_7">
<path fill="none" stroke="black" d="M361.62,-1727.3C549.04,-1727.3 402.25,-2077.66 569.76,-2098.53"></path>
<polygon fill="black" stroke="black" points="569.3,-2103.76 584.59,-2099.41 569.92,-2093.28 569.3,-2103.76"></polygon>
<text text-anchor="middle" x="467.85" y="-1862.51" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M361.62,-1727.3C549.04,-1727.3 402.25,-2077.66 569.76,-2098.53" class="hover-path"></path></g>
<!-- 4 -->
<g id="4" class="node" data-path="/home/delandtj/Threefold/zosstorage/src/config/loader.rs">
<rect x="571.0999755859375" y="-2733.89990234375" width="262" height="345.7998046875"></rect>
<g id="4_9" class="title">
<text text-anchor="start" x="617.63" y="-2701.5" font-family="Arial" font-size="16.00"> &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;loader.rs &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text>
</g>
<g id="4:58_7" data-kind="12" class="cell function">
<rect x="587.0999755859375" y="-2682.699951171875" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="642.05" y="-2664.3" font-family="Arial" font-size="16.00">load_and_merge</text>
</g>
<g id="4:93_7" data-kind="12" class="cell function">
<rect x="587.0999755859375" y="-2647.5" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="674.52" y="-2629.1" font-family="Arial" font-size="16.00">validate</text>
</g>
<g id="4:201_3" data-kind="12" class="cell function">
<rect x="587.0999755859375" y="-2612.300048828125" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="671.85" y="-2593.9" font-family="Arial" font-size="16.00">to_value</text>
</g>
<g id="4:209_3" data-kind="12" class="cell function">
<rect x="587.0999755859375" y="-2577.10009765625" width="230" height="27.2001953125"></rect>
<text text-anchor="start" x="655.85" y="-2558.7" font-family="Arial" font-size="16.00">merge_value</text>
</g>
<g id="4:229_3" data-kind="12" class="cell function">
<rect x="587.0999755859375" y="-2541.89990234375" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="640.73" y="-2523.5" font-family="Arial" font-size="16.00">cli_overlay_value</text>
</g>
<g id="4:262_7" data-kind="12" class="cell function">
<rect x="587.0999755859375" y="-2506.699951171875" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="613.6" y="-2488.3" font-family="Arial" font-size="16.00">kernel_cmdline_topology</text>
</g>
<g id="4:285_3" data-kind="12" class="cell function">
<rect x="587.0999755859375" y="-2471.5" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="623.37" y="-2453.1" font-family="Arial" font-size="16.00">parse_topology_token</text>
</g>
<g id="4:299_3" data-kind="12" class="cell function">
<rect x="587.0999755859375" y="-2436.300048828125" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="652.28" y="-2417.9" font-family="Arial" font-size="16.00">default_config</text>
</g>
</g>
<!-- 2&#45;&gt;4 -->
<g id="2:43_3-4:93_7" class="edge" data-from="2:43_3" data-to="4:93_7">
<path fill="none" stroke="black" d="M361.62,-1727.3C432.31,-1727.3 381.27,-1813.48 394.1,-1883 424.36,-2046.92 414.56,-2596.85 570.01,-2632.12"></path>
<polygon fill="black" stroke="black" points="569.11,-2637.3 584.59,-2633.73 570.26,-2626.87 569.11,-2637.3"></polygon>
<text text-anchor="middle" x="467.85" y="-2483.83" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M361.62,-1727.3C432.31,-1727.3 381.27,-1813.48 394.1,-1883 424.36,-2046.92 414.56,-2596.85 570.01,-2632.12" class="hover-path"></path></g>
<!-- 2&#45;&gt;4 -->
<g id="2:43_3-4:58_7" class="edge" data-from="2:43_3" data-to="4:58_7">
<path fill="none" stroke="black" d="M361.62,-1727.3C432.31,-1727.3 382.77,-1813.22 394.1,-1883 422.01,-2054.95 407.27,-2631.48 569.81,-2667.35"></path>
<polygon fill="black" stroke="black" points="569.12,-2672.55 584.59,-2668.94 570.24,-2662.11 569.12,-2672.55"></polygon>
<text text-anchor="middle" x="467.85" y="-2528.81" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M361.62,-1727.3C432.31,-1727.3 382.77,-1813.22 394.1,-1883 422.01,-2054.95 407.27,-2631.48 569.81,-2667.35" class="hover-path"></path></g>
<!-- 2&#45;&gt;4 -->
<g id="2:43_3-4:262_7" class="edge" data-from="2:43_3" data-to="4:262_7">
<path fill="none" stroke="black" d="M361.62,-1727.3C445.26,-1727.3 491.95,-2408.81 571.42,-2486.01"></path>
<polygon fill="black" stroke="black" points="568.94,-2490.64 584.73,-2492.44 573.51,-2481.19 568.94,-2490.64"></polygon>
<text text-anchor="middle" x="467.85" y="-2079.98" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M361.62,-1727.3C445.26,-1727.3 491.95,-2408.81 571.42,-2486.01" class="hover-path"></path></g>
<!-- 1 -->
<g id="1" class="node" data-path="/home/delandtj/Threefold/zosstorage/src/cli/args.rs">
<rect x="541.5999755859375" y="-3175.10009765625" width="320.99005126953125" height="256.2001953125"></rect>
<g id="1_10" class="title">
<text text-anchor="start" x="624.3" y="-3142.7" font-family="Arial" font-size="16.00"> &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;args.rs &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text>
</g>
<g id="1:34_9" data-kind="10" class="cell enum">
<rect x="557.5999755859375" y="-3123.89990234375" width="288.99005126953125" height="27.199951171875"></rect>
<text text-anchor="start" x="647.39" y="-3106.5" font-family="Arial" font-weight="bold" font-size="16.00">E</text>
<text text-anchor="start" x="658.07" y="-3106.5" font-family="Arial" font-size="16.00"> &#160;LogLevelArg</text>
</g>
<g id="1:41_27" data-kind="19" class="cell">
<rect x="557.5999755859375" y="-3088.699951171875" width="288.99005126953125" height="78.39990234375"></rect>
<text text-anchor="start" x="569.6" y="-3062.3" font-family="Arial" font-size="16.00">impl std::fmt::Display for LogLevelArg</text>
<g id="1:42_7" data-kind="6" class="cell method">
<rect x="565.5999755859375" y="-3045.5" width="272.99005126953125" height="27.199951171875"></rect>
<text text-anchor="start" x="690.99" y="-3027.1" font-family="Arial" font-size="16.00">fmt</text>
</g>
</g>
<g id="1:59_11" data-kind="23" class="cell struct">
<rect x="557.5999755859375" y="-3002.300048828125" width="288.99005126953125" height="27.199951171875"></rect>
<text text-anchor="start" x="682.98" y="-2984.9" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="693.66" y="-2984.9" font-family="Arial" font-size="16.00"> &#160;Cli</text>
</g>
<g id="1:111_7" data-kind="12" class="cell function">
<rect x="557.5999755859375" y="-2967.10009765625" width="288.99005126953125" height="27.2001953125"></rect>
<text text-anchor="start" x="666.09" y="-2948.7" font-family="Arial" font-size="16.00">from_args</text>
</g>
</g>
<!-- 2&#45;&gt;1 -->
<g id="2:43_3-1:111_7" class="edge" data-from="2:43_3" data-to="1:111_7">
<path fill="none" stroke="black" d="M361.62,-1727.3C432.31,-1727.3 383.05,-1813.18 394.1,-1883 430.84,-2115.08 321.33,-2914.79 540.26,-2952.15"></path>
<polygon fill="black" stroke="black" points="539.71,-2957.37 555.09,-2953.37 540.58,-2946.9 539.71,-2957.37"></polygon>
<text text-anchor="middle" x="467.85" y="-2899.59" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M361.62,-1727.3C432.31,-1727.3 383.05,-1813.18 394.1,-1883 430.84,-2115.08 321.33,-2914.79 540.26,-2952.15" class="hover-path"></path></g>
<!-- 12&#45;&gt;11 -->
<g id="12:361_7-11:144_7" class="edge" data-from="12:361_7" data-to="11:144_7">
<path fill="none" stroke="black" d="M1297.13,-2360.7C1297.13,-2360.7 1297.13,-415.61 1297.13,-216.16"></path>
<polygon fill="black" stroke="black" points="1302.38,-216.21 1297.13,-201.21 1291.88,-216.21 1302.38,-216.21"></polygon>
<text text-anchor="middle" x="936.34" y="-1607.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1297.13,-2360.7C1297.13,-2360.7 1297.13,-415.61 1297.13,-216.16" class="hover-path"></path></g>
<!-- 12&#45;&gt;12 -->
<g id="12:361_7-12:368_7" class="edge" data-from="12:361_7" data-to="12:368_7">
<path fill="none" stroke="black" d="M1059.34,-2366.09C988.75,-2366.38 920.24,-2360.3 920.24,-2343.1 920.24,-2327.25 978.46,-2320.84 1042.86,-2320.16"></path>
<polygon fill="black" stroke="black" points="1042.84,-2325.41 1057.83,-2320.11 1042.81,-2314.91 1042.84,-2325.41"></polygon>
<text text-anchor="middle" x="918.49" y="-2406.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1059.34,-2366.09C988.75,-2366.38 920.24,-2360.3 920.24,-2343.1 920.24,-2327.25 978.46,-2320.84 1042.86,-2320.16" class="hover-path"></path></g>
<!-- 12&#45;&gt;12 -->
<g id="12:361_7-12:387_7" class="edge" data-from="12:361_7" data-to="12:387_7">
<path fill="none" stroke="black" d="M1059.34,-2364.54C988.75,-2361.98 920.24,-2347.85 920.24,-2307.9 920.24,-2271.07 978.46,-2256.19 1042.86,-2252.08"></path>
<polygon fill="black" stroke="black" points="1043.11,-2257.33 1057.83,-2251.34 1042.58,-2246.84 1043.11,-2257.33"></polygon>
<text text-anchor="middle" x="918.49" y="-2406.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1059.34,-2364.54C988.75,-2361.98 920.24,-2347.85 920.24,-2307.9 920.24,-2271.07 978.46,-2256.19 1042.86,-2252.08" class="hover-path"></path></g>
<!-- 12&#45;&gt;12 -->
<g id="12:361_7-12:378_7" class="edge" data-from="12:361_7" data-to="12:378_7">
<path fill="none" stroke="black" d="M1059.34,-2365.32C988.75,-2364.18 920.24,-2354.07 920.24,-2325.5 920.24,-2299.16 978.46,-2288.51 1042.86,-2286.12"></path>
<polygon fill="black" stroke="black" points="1042.97,-2291.37 1057.83,-2285.72 1042.69,-2280.87 1042.97,-2291.37"></polygon>
<text text-anchor="middle" x="918.49" y="-2406.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1059.34,-2365.32C988.75,-2364.18 920.24,-2354.07 920.24,-2325.5 920.24,-2299.16 978.46,-2288.51 1042.86,-2286.12" class="hover-path"></path></g>
<!-- 12&#45;&gt;12 -->
<g id="12:361_7-12:399_7" class="edge" data-from="12:361_7" data-to="12:399_7">
<path fill="none" stroke="black" d="M1059.34,-2363.76C988.75,-2359.78 920.24,-2341.63 920.24,-2290.3 920.24,-2242.88 978.71,-2223.78 1043.27,-2218"></path>
<polygon fill="black" stroke="black" points="1043.25,-2223.27 1057.83,-2216.95 1042.49,-2212.8 1043.25,-2223.27"></polygon>
<text text-anchor="middle" x="918.49" y="-2406.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1059.34,-2363.76C988.75,-2359.78 920.24,-2341.63 920.24,-2290.3 920.24,-2242.88 978.71,-2223.78 1043.27,-2218" class="hover-path"></path></g>
<!-- 12&#45;&gt;20 -->
<g id="12:387_7-20:98_7" class="edge" data-from="12:387_7" data-to="20:98_7">
<path fill="none" stroke="black" d="M1274.13,-2255.1C1321.29,-2255.1 1312,-2208.52 1330.17,-2165 1377.32,-2052.07 1298.11,-1973.01 1394.17,-1897.2 1425.46,-1872.51 1436.19,-1928.09 1468.68,-1942.83"></path>
<polygon fill="black" stroke="black" points="1467.42,-1947.93 1483.19,-1945.98 1469.65,-1937.67 1467.42,-1947.93"></polygon>
<text text-anchor="middle" x="1395.92" y="-1901.4" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1274.13,-2255.1C1321.29,-2255.1 1312,-2208.52 1330.17,-2165 1377.32,-2052.07 1298.11,-1973.01 1394.17,-1897.2 1425.46,-1872.51 1436.19,-1928.09 1468.68,-1942.83" class="hover-path"></path></g>
<!-- 12&#45;&gt;20 -->
<g id="12:361_7-20:72_7" class="edge" data-from="12:361_7" data-to="20:72_7">
<path fill="none" stroke="black" d="M1274.13,-2360.7C1404.44,-2360.7 1325.91,-2204.2 1394.17,-2093.2 1424.51,-2043.88 1421.71,-1992.21 1468.48,-1982.96"></path>
<polygon fill="black" stroke="black" points="1468.7,-1988.21 1483.16,-1981.64 1467.75,-1977.75 1468.7,-1988.21"></polygon>
<text text-anchor="middle" x="1395.92" y="-2097.4" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1274.13,-2360.7C1404.44,-2360.7 1325.91,-2204.2 1394.17,-2093.2 1424.51,-2043.88 1421.71,-1992.21 1468.48,-1982.96" class="hover-path"></path></g>
<!-- 12&#45;&gt;20 -->
<g id="12:361_7-20:60_7" class="edge" data-from="12:361_7" data-to="20:60_7">
<path fill="none" stroke="black" d="M1274.13,-2360.7C1340.45,-2360.7 1357.59,-2329.84 1397.67,-2277 1467.79,-2184.56 1372.87,-2032.47 1468.41,-2017.84"></path>
<polygon fill="black" stroke="black" points="1468.57,-2023.09 1483.16,-2016.81 1467.83,-2012.62 1468.57,-2023.09"></polygon>
<text text-anchor="middle" x="1395.92" y="-2284.34" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1274.13,-2360.7C1340.45,-2360.7 1357.59,-2329.84 1397.67,-2277 1467.79,-2184.56 1372.87,-2032.47 1468.41,-2017.84" class="hover-path"></path></g>
<!-- 12&#45;&gt;20 -->
<g id="12:361_7-20:130_7" class="edge" data-from="12:361_7" data-to="20:130_7">
<path fill="none" stroke="black" d="M1274.13,-2360.7C1496.41,-2360.7 1220.88,-2014.4 1394.17,-1875.2 1423.3,-1851.81 1437.33,-1895.56 1468.47,-1907.96"></path>
<polygon fill="black" stroke="black" points="1467.46,-1913.11 1483.19,-1910.81 1469.46,-1902.8 1467.46,-1913.11"></polygon>
<text text-anchor="middle" x="1395.92" y="-1879.4" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1274.13,-2360.7C1496.41,-2360.7 1220.88,-2014.4 1394.17,-1875.2 1423.3,-1851.81 1437.33,-1895.56 1468.47,-1907.96" class="hover-path"></path></g>
<!-- 12&#45;&gt;20 -->
<g id="12:133_7-20:156_7" class="edge" data-from="12:133_7" data-to="20:156_7">
<path fill="none" stroke="black" d="M1282.13,-2403.9C1420.11,-2403.9 1288.66,-1882.1 1394.17,-1793.2 1431.28,-1761.93 1430.86,-1851.96 1468.81,-1872.03"></path>
<polygon fill="black" stroke="black" points="1467.38,-1877.08 1483.2,-1875.54 1469.88,-1866.88 1467.38,-1877.08"></polygon>
<text text-anchor="middle" x="1395.92" y="-1797.4" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1282.13,-2403.9C1420.11,-2403.9 1288.66,-1882.1 1394.17,-1793.2 1431.28,-1761.93 1430.86,-1851.96 1468.81,-1872.03" class="hover-path"></path></g>
<!-- 12&#45;&gt;20 -->
<g id="12:387_7-20:60_7" class="edge" data-from="12:387_7" data-to="20:60_7">
<path fill="none" stroke="black" d="M1274.13,-2255.1C1329.83,-2255.1 1354.34,-2269.01 1397.67,-2234 1473.85,-2172.45 1391.51,-2034.21 1468.39,-2018.22"></path>
<polygon fill="black" stroke="black" points="1468.72,-2023.46 1483.16,-2016.84 1467.74,-2013 1468.72,-2023.46"></polygon>
<text text-anchor="middle" x="1395.92" y="-2240.24" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1274.13,-2255.1C1329.83,-2255.1 1354.34,-2269.01 1397.67,-2234 1473.85,-2172.45 1391.51,-2034.21 1468.39,-2018.22" class="hover-path"></path></g>
<!-- 12&#45;&gt;20 -->
<g id="12:361_7-20:98_7" class="edge" data-from="12:361_7" data-to="20:98_7">
<path fill="none" stroke="black" d="M1274.13,-2360.7C1471.48,-2360.7 1237.15,-2052.74 1394.17,-1933.2 1421.83,-1912.14 1438.66,-1936.7 1468.38,-1944.24"></path>
<polygon fill="black" stroke="black" points="1467.63,-1949.43 1483.17,-1946.11 1468.95,-1939.02 1467.63,-1949.43"></polygon>
<text text-anchor="middle" x="1395.92" y="-1937.4" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1274.13,-2360.7C1471.48,-2360.7 1237.15,-2052.74 1394.17,-1933.2 1421.83,-1912.14 1438.66,-1936.7 1468.38,-1944.24" class="hover-path"></path></g>
<!-- 13&#45;&gt;13 -->
<g id="13:77_7-13:63_3" class="edge" data-from="13:77_7" data-to="13:63_3">
<path fill="none" stroke="black" d="M587.24,-2094.1C518.59,-2094.24 453.97,-2100.47 453.97,-2117.1 453.97,-2132.39 508.66,-2138.89 570.86,-2139.95"></path>
<polygon fill="black" stroke="black" points="570.68,-2145.2 585.73,-2140.09 570.78,-2134.7 570.68,-2145.2"></polygon>
<text text-anchor="middle" x="452.22" y="-2188.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M587.24,-2094.1C518.59,-2094.24 453.97,-2100.47 453.97,-2117.1 453.97,-2132.39 508.66,-2138.89 570.86,-2139.95" class="hover-path"></path></g>
<!-- 4&#45;&gt;4 -->
<g id="4:58_7-4:262_7" class="edge" data-from="4:58_7" data-to="4:262_7">
<path fill="none" stroke="black" d="M587.24,-2670.79C518.59,-2664.46 453.97,-2641.72 453.97,-2581.1 453.97,-2525.33 508.66,-2501.62 570.86,-2493.26"></path>
<polygon fill="black" stroke="black" points="571.42,-2498.48 585.74,-2491.58 570.25,-2488.05 571.42,-2498.48"></polygon>
<text text-anchor="middle" x="452.22" y="-2556.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M587.24,-2670.79C518.59,-2664.46 453.97,-2641.72 453.97,-2581.1 453.97,-2525.33 508.66,-2501.62 570.86,-2493.26" class="hover-path"></path></g>
<!-- 4&#45;&gt;4 -->
<g id="4:58_7-4:201_3" class="edge" data-from="4:58_7" data-to="4:201_3">
<path fill="none" stroke="black" d="M587.24,-2673.57C518.59,-2671.88 453.97,-2661.52 453.97,-2633.9 453.97,-2608.49 508.66,-2597.69 570.86,-2594.8"></path>
<polygon fill="black" stroke="black" points="570.93,-2600.06 585.73,-2594.28 570.56,-2589.56 570.93,-2600.06"></polygon>
<text text-anchor="middle" x="452.22" y="-2556.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M587.24,-2673.57C518.59,-2671.88 453.97,-2661.52 453.97,-2633.9 453.97,-2608.49 508.66,-2597.69 570.86,-2594.8" class="hover-path"></path></g>
<!-- 4&#45;&gt;4 -->
<g id="4:58_7-4:299_3" class="edge" data-from="4:58_7" data-to="4:299_3">
<path fill="none" stroke="black" d="M587.24,-2668.93C518.59,-2659.51 453.97,-2628.52 453.97,-2545.9 453.97,-2469.73 508.89,-2437.45 571.26,-2425.49"></path>
<polygon fill="black" stroke="black" points="571.8,-2430.72 585.75,-2423.11 570.1,-2420.36 571.8,-2430.72"></polygon>
<text text-anchor="middle" x="452.22" y="-2556.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M587.24,-2668.93C518.59,-2659.51 453.97,-2628.52 453.97,-2545.9 453.97,-2469.73 508.89,-2437.45 571.26,-2425.49" class="hover-path"></path></g>
<!-- 4&#45;&gt;4 -->
<g id="4:58_7-4:209_3" class="edge" data-from="4:58_7" data-to="4:209_3">
<path fill="none" stroke="black" d="M587.24,-2672.64C518.59,-2669.41 453.97,-2654.93 453.97,-2616.3 453.97,-2580.77 508.66,-2565.67 570.86,-2560.96"></path>
<polygon fill="black" stroke="black" points="571.08,-2566.2 585.73,-2560.05 570.44,-2555.72 571.08,-2566.2"></polygon>
<text text-anchor="middle" x="452.22" y="-2556.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M587.24,-2672.64C518.59,-2669.41 453.97,-2654.93 453.97,-2616.3 453.97,-2580.77 508.66,-2565.67 570.86,-2560.96" class="hover-path"></path></g>
<!-- 4&#45;&gt;4 -->
<g id="4:58_7-4:229_3" class="edge" data-from="4:58_7" data-to="4:229_3">
<path fill="none" stroke="black" d="M587.24,-2671.72C518.59,-2666.93 453.97,-2648.32 453.97,-2598.7 453.97,-2553.05 508.66,-2533.64 570.86,-2527.11"></path>
<polygon fill="black" stroke="black" points="571.25,-2532.34 585.74,-2525.82 570.34,-2521.88 571.25,-2532.34"></polygon>
<text text-anchor="middle" x="452.22" y="-2556.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M587.24,-2671.72C518.59,-2666.93 453.97,-2648.32 453.97,-2598.7 453.97,-2553.05 508.66,-2533.64 570.86,-2527.11" class="hover-path"></path></g>
<!-- 4&#45;&gt;4 -->
<g id="4:262_7-4:285_3" class="edge" data-from="4:262_7" data-to="4:285_3">
<path fill="none" stroke="black" d="M587.24,-2498.5C518.59,-2498.36 453.97,-2492.12 453.97,-2475.5 453.97,-2460.21 508.66,-2453.71 570.86,-2452.65"></path>
<polygon fill="black" stroke="black" points="570.78,-2457.9 585.73,-2452.51 570.68,-2447.4 570.78,-2457.9"></polygon>
<text text-anchor="middle" x="452.22" y="-2556.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M587.24,-2498.5C518.59,-2498.36 453.97,-2492.12 453.97,-2475.5 453.97,-2460.21 508.66,-2453.71 570.86,-2452.65" class="hover-path"></path></g>
<!-- 4&#45;&gt;4 -->
<g id="4:58_7-4:93_7" class="edge" data-from="4:58_7" data-to="4:93_7">
<path fill="none" stroke="black" d="M587.24,-2674.5C518.59,-2674.36 453.97,-2668.12 453.97,-2651.5 453.97,-2636.21 508.66,-2629.71 570.86,-2628.65"></path>
<polygon fill="black" stroke="black" points="570.78,-2633.9 585.73,-2628.51 570.68,-2623.4 570.78,-2633.9"></polygon>
<text text-anchor="middle" x="452.22" y="-2556.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M587.24,-2674.5C518.59,-2674.36 453.97,-2668.12 453.97,-2651.5 453.97,-2636.21 508.66,-2629.71 570.86,-2628.65" class="hover-path"></path></g>
<!-- 4&#45;&gt;4 -->
<g id="4:209_3-4:209_3" class="edge" data-from="4:209_3" data-to="4:209_3">
<path fill="none" stroke="black" d="M587.24,-2569.83C518.59,-2571.23 453.97,-2569.12 453.97,-2563.5 453.97,-2558.33 508.66,-2556.13 570.86,-2556.9"></path>
<polygon fill="black" stroke="black" points="570.65,-2562.15 585.73,-2557.15 570.82,-2551.65 570.65,-2562.15"></polygon>
<text text-anchor="middle" x="452.22" y="-2556.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M587.24,-2569.83C518.59,-2571.23 453.97,-2569.12 453.97,-2563.5 453.97,-2558.33 508.66,-2556.13 570.86,-2556.9" class="hover-path"></path></g>
<!-- 15&#45;&gt;15 -->
<g id="15:104_7-15:95_3" class="edge" data-from="15:104_7" data-to="15:95_3">
<path fill="none" stroke="black" d="M1051.35,-2928.7C983.67,-2928.9 920.24,-2935.15 920.24,-2951.7 920.24,-2966.92 973.92,-2973.43 1035.21,-2974.53"></path>
<polygon fill="black" stroke="black" points="1034.79,-2979.78 1049.84,-2974.68 1034.9,-2969.28 1034.79,-2979.78"></polygon>
<text text-anchor="middle" x="918.49" y="-2997.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1051.35,-2928.7C983.67,-2928.9 920.24,-2935.15 920.24,-2951.7 920.24,-2966.92 973.92,-2973.43 1035.21,-2974.53" class="hover-path"></path></g>
<!-- 15&#45;&gt;20 -->
<g id="15:175_7-20:98_7" class="edge" data-from="15:175_7" data-to="20:98_7">
<path fill="none" stroke="black" d="M1282.13,-2898.9C1324.33,-2898.9 1316.98,-2857.08 1330.17,-2817 1414.56,-2560.67 1336.27,-2476.77 1394.17,-2213.2 1419.79,-2096.6 1365,-1959.8 1468.26,-1947.24"></path>
<polygon fill="black" stroke="black" points="1468.48,-1952.48 1483.16,-1946.39 1467.89,-1942 1468.48,-1952.48"></polygon>
<text text-anchor="middle" x="1395.92" y="-2217.4" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1282.13,-2898.9C1324.33,-2898.9 1316.98,-2857.08 1330.17,-2817 1414.56,-2560.67 1336.27,-2476.77 1394.17,-2213.2 1419.79,-2096.6 1365,-1959.8 1468.26,-1947.24" class="hover-path"></path></g>
<!-- 15&#45;&gt;20 -->
<g id="15:175_7-20:60_7" class="edge" data-from="15:175_7" data-to="20:60_7">
<path fill="none" stroke="black" d="M1282.13,-2898.9C1327.56,-2898.9 1373.91,-2728.34 1397.67,-2634 1430.08,-2505.3 1353.1,-2056.65 1468.38,-2019.19"></path>
<polygon fill="black" stroke="black" points="1469.14,-2024.39 1483.18,-2016.93 1467.55,-2014.01 1469.14,-2024.39"></polygon>
<text text-anchor="middle" x="1395.92" y="-2649.87" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1282.13,-2898.9C1327.56,-2898.9 1373.91,-2728.34 1397.67,-2634 1430.08,-2505.3 1353.1,-2056.65 1468.38,-2019.19" class="hover-path"></path></g>
<!-- 15&#45;&gt;20 -->
<g id="15:175_7-20:72_7" class="edge" data-from="15:175_7" data-to="20:72_7">
<path fill="none" stroke="black" d="M1282.13,-2898.9C1324.33,-2898.9 1315.44,-2856.54 1330.17,-2817 1345.45,-2776.01 1424.56,-2093.4 1473.64,-1993.63"></path>
<polygon fill="black" stroke="black" points="1477.45,-1997.25 1483.65,-1982.62 1469.68,-1990.19 1477.45,-1997.25"></polygon>
<text text-anchor="middle" x="1395.92" y="-2386.86" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1282.13,-2898.9C1324.33,-2898.9 1315.44,-2856.54 1330.17,-2817 1345.45,-2776.01 1424.56,-2093.4 1473.64,-1993.63" class="hover-path"></path></g>
<!-- 20&#45;&gt;20 -->
<g id="20:130_7-20:60_7" class="edge" data-from="20:130_7" data-to="20:60_7">
<path fill="none" stroke="black" d="M1485.7,-1907.95C1423.78,-1911.86 1367.3,-1926.66 1367.3,-1963.9 1367.3,-1997.86 1414.29,-2013.16 1469.53,-2018.56"></path>
<polygon fill="black" stroke="black" points="1468.82,-2023.77 1484.19,-2019.73 1469.66,-2013.3 1468.82,-2023.77"></polygon>
<text text-anchor="middle" x="1365.55" y="-1974.8" font-family="Times,serif" font-size="14.00"> </text>
<path fill="none" stroke="black" d="M1485.7,-1907.95C1423.78,-1911.86 1367.3,-1926.66 1367.3,-1963.9 1367.3,-1997.86 1414.29,-2013.16 1469.53,-2018.56" class="hover-path"></path></g>
<!-- 21 -->
<g id="21" class="node" data-path="/home/delandtj/Threefold/zosstorage/src/errors.rs">
<rect x="114.62000274658203" y="-2026.300048828125" width="261.99999237060547" height="134.60009765625"></rect>
<g id="21_11" class="title">
<text text-anchor="start" x="162.5" y="-1993.9" font-family="Arial" font-size="16.00"> &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;errors.rs &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text>
</g>
<g id="21:8_9" data-kind="10" class="cell enum">
<rect x="130.6199951171875" y="-1975.0999755859375" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="218.06" y="-1957.7" font-family="Arial" font-weight="bold" font-size="16.00">E</text>
<text text-anchor="start" x="228.73" y="-1957.7" font-family="Arial" font-size="16.00"> &#160;Error</text>
</g>
<g id="21:55_9" data-kind="26" class="cell">
<rect x="130.6199951171875" y="-1939.9000244140625" width="230" height="27.2000732421875"></rect>
<text text-anchor="start" x="213.61" y="-1922.5" font-family="Arial" font-weight="bold" font-size="16.00">T</text>
<text text-anchor="start" x="223.38" y="-1922.5" font-family="Arial" font-size="16.00"> &#160;Result</text>
</g>
</g>
<!-- 22 -->
<g id="22" class="node" data-path="/home/delandtj/Threefold/zosstorage/src/lib.rs">
<rect x="114.62000274658203" y="-2588.89990234375" width="261.99999237060547" height="521.7998046875"></rect>
<g id="22_12" class="title">
<text text-anchor="start" x="175.38" y="-2556.5" font-family="Arial" font-size="16.00"> &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;lib.rs &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text>
</g>
<g id="22:2_8" data-kind="2" class="cell module">
<rect x="130.6199951171875" y="-2537.699951171875" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="238.06" y="-2519.3" font-family="Arial" font-size="16.00">cli</text>
</g>
<g id="22:3_8" data-kind="2" class="cell module">
<rect x="130.6199951171875" y="-2502.5" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="219.82" y="-2484.1" font-family="Arial" font-size="16.00">logging</text>
</g>
<g id="22:4_8" data-kind="2" class="cell module">
<rect x="130.6199951171875" y="-2467.300048828125" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="224.27" y="-2448.9" font-family="Arial" font-size="16.00">config</text>
</g>
<g id="22:5_8" data-kind="2" class="cell module">
<rect x="130.6199951171875" y="-2432.10009765625" width="230" height="27.2001953125"></rect>
<text text-anchor="start" x="222.49" y="-2413.7" font-family="Arial" font-size="16.00">device</text>
</g>
<g id="22:6_8" data-kind="2" class="cell module">
<rect x="130.6199951171875" y="-2396.89990234375" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="217.16" y="-2378.5" font-family="Arial" font-size="16.00">partition</text>
</g>
<g id="22:7_8" data-kind="2" class="cell module">
<rect x="130.6199951171875" y="-2361.699951171875" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="239.39" y="-2343.3" font-family="Arial" font-size="16.00">fs</text>
</g>
<g id="22:8_8" data-kind="2" class="cell module">
<rect x="130.6199951171875" y="-2326.5" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="223.38" y="-2308.1" font-family="Arial" font-size="16.00">mount</text>
</g>
<g id="22:9_8" data-kind="2" class="cell module">
<rect x="130.6199951171875" y="-2291.300048828125" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="224.72" y="-2272.9" font-family="Arial" font-size="16.00">report</text>
</g>
<g id="22:10_8" data-kind="2" class="cell module">
<rect x="130.6199951171875" y="-2256.10009765625" width="230" height="27.2001953125"></rect>
<text text-anchor="start" x="202.93" y="-2237.7" font-family="Arial" font-size="16.00">orchestrator</text>
</g>
<g id="22:11_8" data-kind="2" class="cell module">
<rect x="130.6199951171875" y="-2220.89990234375" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="200.26" y="-2202.5" font-family="Arial" font-size="16.00">idempotency</text>
</g>
<g id="22:12_8" data-kind="2" class="cell module">
<rect x="130.6199951171875" y="-2185.699951171875" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="235.39" y="-2167.3" font-family="Arial" font-size="16.00">util</text>
</g>
<g id="22:13_8" data-kind="2" class="cell module">
<rect x="130.6199951171875" y="-2150.5" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="224.73" y="-2132.1" font-family="Arial" font-size="16.00">errors</text>
</g>
<g id="22:14_8" data-kind="2" class="cell module">
<rect x="130.6199951171875" y="-2115.300048828125" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="226.5" y="-2096.9" font-family="Arial" font-size="16.00">types</text>
</g>
</g>
<!-- 23 -->
<g id="23" class="node" data-path="/home/delandtj/Threefold/zosstorage/src/types.rs">
<rect x="97.12999725341797" y="-3331.89990234375" width="296.97000885009766" height="713.7998046875"></rect>
<g id="23_13" class="title">
<text text-anchor="start" x="164.27" y="-3299.5" font-family="Arial" font-size="16.00"> &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;types.rs &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text>
</g>
<g id="23:21_11" data-kind="23" class="cell struct">
<rect x="113.12999725341797" y="-3280.699951171875" width="264.97000885009766" height="27.199951171875"></rect>
<text text-anchor="start" x="184.24" y="-3263.3" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="194.91" y="-3263.3" font-family="Arial" font-size="16.00"> &#160;LoggingConfig</text>
</g>
<g id="23:29_11" data-kind="23" class="cell struct">
<rect x="113.12999725341797" y="-3245.5" width="264.97000885009766" height="27.199951171875"></rect>
<text text-anchor="start" x="178.47" y="-3228.1" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="189.14" y="-3228.1" font-family="Arial" font-size="16.00"> &#160;DeviceSelection</text>
</g>
<g id="23:43_9" data-kind="10" class="cell enum">
<rect x="113.12999725341797" y="-3210.300048828125" width="264.97000885009766" height="27.199951171875"></rect>
<text text-anchor="start" x="202.93" y="-3192.9" font-family="Arial" font-weight="bold" font-size="16.00">E</text>
<text text-anchor="start" x="213.6" y="-3192.9" font-family="Arial" font-size="16.00"> &#160;Topology</text>
</g>
<g id="23:64_27" data-kind="19" class="cell">
<rect x="113.12999725341797" y="-3175.10009765625" width="264.97000885009766" height="78.400146484375"></rect>
<text text-anchor="start" x="125.13" y="-3148.7" font-family="Arial" font-size="16.00">impl std::fmt::Display for Topology</text>
<g id="23:65_7" data-kind="6" class="cell method">
<rect x="121.12999725341797" y="-3131.89990234375" width="248.97000885009766" height="27.199951171875"></rect>
<text text-anchor="start" x="234.51" y="-3113.5" font-family="Arial" font-size="16.00">fmt</text>
</g>
</g>
<g id="23:79_11" data-kind="23" class="cell struct">
<rect x="113.12999725341797" y="-3088.699951171875" width="264.97000885009766" height="27.199951171875"></rect>
<text text-anchor="start" x="185.58" y="-3071.3" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="196.25" y="-3071.3" font-family="Arial" font-size="16.00"> &#160;BiosBootSpec</text>
</g>
<g id="23:89_11" data-kind="23" class="cell struct">
<rect x="113.12999725341797" y="-3053.5" width="264.97000885009766" height="27.199951171875"></rect>
<text text-anchor="start" x="203.82" y="-3036.1" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="214.49" y="-3036.1" font-family="Arial" font-size="16.00"> &#160;EspSpec</text>
</g>
<g id="23:99_11" data-kind="23" class="cell struct">
<rect x="113.12999725341797" y="-3018.300048828125" width="264.97000885009766" height="27.199951171875"></rect>
<text text-anchor="start" x="200.7" y="-3000.9" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="211.38" y="-3000.9" font-family="Arial" font-size="16.00"> &#160;DataSpec</text>
</g>
<g id="23:105_11" data-kind="23" class="cell struct">
<rect x="113.12999725341797" y="-2983.10009765625" width="264.97000885009766" height="27.2001953125"></rect>
<text text-anchor="start" x="194.48" y="-2965.7" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="205.15" y="-2965.7" font-family="Arial" font-size="16.00"> &#160;CacheSpec</text>
</g>
<g id="23:111_11" data-kind="23" class="cell struct">
<rect x="113.12999725341797" y="-2947.89990234375" width="264.97000885009766" height="27.199951171875"></rect>
<text text-anchor="start" x="195.81" y="-2930.5" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="206.48" y="-2930.5" font-family="Arial" font-size="16.00"> &#160;Partitioning</text>
</g>
<g id="23:127_11" data-kind="23" class="cell struct">
<rect x="113.12999725341797" y="-2912.699951171875" width="264.97000885009766" height="27.199951171875"></rect>
<text text-anchor="start" x="191.82" y="-2895.3" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="202.49" y="-2895.3" font-family="Arial" font-size="16.00"> &#160;BtrfsOptions</text>
</g>
<g id="23:137_11" data-kind="23" class="cell struct">
<rect x="113.12999725341797" y="-2877.5" width="264.97000885009766" height="27.199951171875"></rect>
<text text-anchor="start" x="175.36" y="-2860.1" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="186.03" y="-2860.1" font-family="Arial" font-size="16.00"> &#160;BcachefsOptions</text>
</g>
<g id="23:149_11" data-kind="23" class="cell struct">
<rect x="113.12999725341797" y="-2842.300048828125" width="264.97000885009766" height="27.199951171875"></rect>
<text text-anchor="start" x="194.04" y="-2824.9" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="204.71" y="-2824.9" font-family="Arial" font-size="16.00"> &#160;VfatOptions</text>
</g>
<g id="23:155_11" data-kind="23" class="cell struct">
<rect x="113.12999725341797" y="-2807.10009765625" width="264.97000885009766" height="27.2001953125"></rect>
<text text-anchor="start" x="199.38" y="-2789.7" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="210.05" y="-2789.7" font-family="Arial" font-size="16.00"> &#160;FsOptions</text>
</g>
<g id="23:166_9" data-kind="10" class="cell enum">
<rect x="113.12999725341797" y="-2771.89990234375" width="264.97000885009766" height="27.199951171875"></rect>
<text text-anchor="start" x="168.24" y="-2754.5" font-family="Arial" font-weight="bold" font-size="16.00">E</text>
<text text-anchor="start" x="178.91" y="-2754.5" font-family="Arial" font-size="16.00"> &#160;MountSchemeKind</text>
</g>
<g id="23:174_11" data-kind="23" class="cell struct">
<rect x="113.12999725341797" y="-2736.699951171875" width="264.97000885009766" height="27.199951171875"></rect>
<text text-anchor="start" x="184.25" y="-2719.3" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="194.93" y="-2719.3" font-family="Arial" font-size="16.00"> &#160;MountScheme</text>
</g>
<g id="23:184_11" data-kind="23" class="cell struct">
<rect x="113.12999725341797" y="-2701.5" width="264.97000885009766" height="27.199951171875"></rect>
<text text-anchor="start" x="184.25" y="-2684.1" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="194.93" y="-2684.1" font-family="Arial" font-size="16.00"> &#160;ReportOptions</text>
</g>
<g id="23:190_11" data-kind="23" class="cell struct">
<rect x="113.12999725341797" y="-2666.300048828125" width="264.97000885009766" height="27.199951171875"></rect>
<text text-anchor="start" x="212.71" y="-2648.9" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="223.38" y="-2648.9" font-family="Arial" font-size="16.00"> &#160;Config</text>
</g>
</g>
<!-- 3 -->
<g id="3" class="node" data-path="/home/delandtj/Threefold/zosstorage/src/cli/mod.rs">
<rect x="571.0999755859375" y="-3292.699951171875" width="262" height="99.39990234375"></rect>
<g id="3_14" class="title">
<text text-anchor="start" x="624.3" y="-3260.3" font-family="Arial" font-size="16.00"> &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;mod.rs &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text>
</g>
<g id="3:10_8" data-kind="2" class="cell module">
<rect x="587.0999755859375" y="-3241.5" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="686.54" y="-3223.1" font-family="Arial" font-size="16.00">args</text>
</g>
</g>
<!-- 5 -->
<g id="5" class="node" data-path="/home/delandtj/Threefold/zosstorage/src/config/mod.rs">
<rect x="571.0999755859375" y="-2851.699951171875" width="262" height="99.39990234375"></rect>
<g id="5_15" class="title">
<text text-anchor="start" x="624.3" y="-2819.3" font-family="Arial" font-size="16.00"> &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;mod.rs &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text>
</g>
<g id="5:11_8" data-kind="2" class="cell module">
<rect x="587.0999755859375" y="-2800.5" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="679.86" y="-2782.1" font-family="Arial" font-size="16.00">loader</text>
</g>
</g>
<!-- 8 -->
<g id="8" class="node" data-path="/home/delandtj/Threefold/zosstorage/src/device/mod.rs">
<rect x="1035.1300048828125" y="-1457.699951171875" width="262" height="99.39990234375"></rect>
<g id="8_16" class="title">
<text text-anchor="start" x="1088.34" y="-1425.3" font-family="Arial" font-size="16.00"> &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;mod.rs &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text>
</g>
<g id="8:9_8" data-kind="2" class="cell module">
<rect x="1051.1300048828125" y="-1406.5" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="1132.34" y="-1388.1" font-family="Arial" font-size="16.00">discovery</text>
</g>
</g>
<!-- 9 -->
<g id="9" class="node" data-path="/home/delandtj/Threefold/zosstorage/src/fs/mod.rs">
<rect x="1035.1300048828125" y="-2109.699951171875" width="262" height="99.39990234375"></rect>
<g id="9_17" class="title">
<text text-anchor="start" x="1088.34" y="-2077.3" font-family="Arial" font-size="16.00"> &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;mod.rs &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text>
</g>
<g id="9:9_8" data-kind="2" class="cell module">
<rect x="1051.1300048828125" y="-2058.5" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="1151.01" y="-2040.1" font-family="Arial" font-size="16.00">plan</text>
</g>
</g>
<!-- 14 -->
<g id="14" class="node" data-path="/home/delandtj/Threefold/zosstorage/src/mount/mod.rs">
<rect x="1035.1300048828125" y="-3292.699951171875" width="262" height="99.39990234375"></rect>
<g id="14_18" class="title">
<text text-anchor="start" x="1088.34" y="-3260.3" font-family="Arial" font-size="16.00"> &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;mod.rs &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text>
</g>
<g id="14:9_8" data-kind="2" class="cell module">
<rect x="1051.1300048828125" y="-3241.5" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="1153.23" y="-3223.1" font-family="Arial" font-size="16.00">ops</text>
</g>
</g>
<!-- 16 -->
<g id="16" class="node" data-path="/home/delandtj/Threefold/zosstorage/src/orchestrator/mod.rs">
<rect x="571.0999755859375" y="-1997.699951171875" width="262" height="99.39990234375"></rect>
<g id="16_19" class="title">
<text text-anchor="start" x="624.3" y="-1965.3" font-family="Arial" font-size="16.00"> &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;mod.rs &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text>
</g>
<g id="16:4_8" data-kind="2" class="cell module">
<rect x="587.0999755859375" y="-1946.5" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="690.54" y="-1928.1" font-family="Arial" font-size="16.00">run</text>
</g>
</g>
<!-- 17 -->
<g id="17" class="node" data-path="/home/delandtj/Threefold/zosstorage/src/partition/mod.rs">
<rect x="1035.1300048828125" y="-2761.699951171875" width="262" height="99.39990234375"></rect>
<g id="17_20" class="title">
<text text-anchor="start" x="1088.34" y="-2729.3" font-family="Arial" font-size="16.00"> &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;mod.rs &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text>
</g>
<g id="17:9_8" data-kind="2" class="cell module">
<rect x="1051.1300048828125" y="-2710.5" width="230" height="27.199951171875"></rect>
<text text-anchor="start" x="1151.01" y="-2692.1" font-family="Arial" font-size="16.00">plan</text>
</g>
</g>
<!-- 18 -->
<g id="18" class="node" data-path="/home/delandtj/Threefold/zosstorage/src/report/mod.rs">
<rect x="114.62000274658203" y="-784.7000122070312" width="261.99999237060547" height="99.4000244140625"></rect>
<g id="18_21" class="title">
<text text-anchor="start" x="167.82" y="-752.3" font-family="Arial" font-size="16.00"> &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;mod.rs &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text>
</g>
<g id="18:9_8" data-kind="2" class="cell module">
<rect x="130.6199951171875" y="-733.5" width="230" height="27.20001220703125"></rect>
<text text-anchor="start" x="228.27" y="-715.1" font-family="Arial" font-size="16.00">state</text>
</g>
</g>
<!-- 19 -->
<g id="19" class="node" data-path="/home/delandtj/Threefold/zosstorage/src/report/state.rs">
<rect x="114.62000274658203" y="-972.9000244140625" width="261.99999237060547" height="169.800048828125"></rect>
<g id="19_22" class="title">
<text text-anchor="start" x="166.04" y="-940.5" font-family="Arial" font-size="16.00"> &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;state.rs &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text>
</g>
<g id="19:43_11" data-kind="23" class="cell struct">
<rect x="130.6199951171875" y="-921.7000122070312" width="230" height="27.20001220703125"></rect>
<text text-anchor="start" x="193.14" y="-904.3" font-family="Arial" font-weight="bold" font-size="16.00">S</text>
<text text-anchor="start" x="203.82" y="-904.3" font-family="Arial" font-size="16.00"> &#160;StateReport</text>
</g>
<g id="19:66_7" data-kind="12" class="cell function">
<rect x="130.6199951171875" y="-886.5" width="230" height="27.20001220703125"></rect>
<text text-anchor="start" x="203.37" y="-868.1" font-family="Arial" font-size="16.00">build_report</text>
</g>
<g id="19:77_7" data-kind="12" class="cell function">
<rect x="130.6199951171875" y="-851.2999877929688" width="230" height="27.20001220703125"></rect>
<text text-anchor="start" x="203.38" y="-832.9" font-family="Arial" font-size="16.00">write_report</text>
</g>
</g>
<g id="faded-group"></g></g>
<defs><filter id="shadow"><feDropShadow dx="0" dy="0" stdDeviation="4" flood-opacity="0.5"></feDropShadow></filter>
<linearGradient id="highlightGradient">
<stop offset="0%" stop-color="var(--edge-incoming-color)"></stop>
<stop offset="100%" stop-color="var(--edge-outgoing-color)"></stop>
</linearGradient></defs>
</svg>
<script type="module">
var __defProp = Object.defineProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: !0 });
function getDefaultExportFromCjs(x) {
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x.default : x;
}
__name(getDefaultExportFromCjs, "getDefaultExportFromCjs");
var wheel = { exports: {} }, hasRequiredWheel;
function requireWheel() {
if (hasRequiredWheel) return wheel.exports;
hasRequiredWheel = 1, wheel.exports = addWheelListener, wheel.exports.addWheelListener = addWheelListener, wheel.exports.removeWheelListener = removeWheelListener;
function addWheelListener(element, listener, useCapture) {
element.addEventListener("wheel", listener, useCapture);
}
__name(addWheelListener, "addWheelListener");
function removeWheelListener(element, listener, useCapture) {
element.removeEventListener("wheel", listener, useCapture);
}
return __name(removeWheelListener, "removeWheelListener"), wheel.exports;
}
__name(requireWheel, "requireWheel");
var amator = { exports: {} }, src, hasRequiredSrc;
function requireSrc() {
if (hasRequiredSrc) return src;
hasRequiredSrc = 1;
var NEWTON_ITERATIONS = 4, NEWTON_MIN_SLOPE = 1e-3, SUBDIVISION_PRECISION = 1e-7, SUBDIVISION_MAX_ITERATIONS = 10, kSplineTableSize = 11, kSampleStepSize = 1 / (kSplineTableSize - 1), float32ArraySupported = typeof Float32Array == "function";
function A(aA1, aA2) {
return 1 - 3 * aA2 + 3 * aA1;
}
__name(A, "A");
function B(aA1, aA2) {
return 3 * aA2 - 6 * aA1;
}
__name(B, "B");
function C(aA1) {
return 3 * aA1;
}
__name(C, "C");
function calcBezier(aT, aA1, aA2) {
return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;
}
__name(calcBezier, "calcBezier");
function getSlope(aT, aA1, aA2) {
return 3 * A(aA1, aA2) * aT * aT + 2 * B(aA1, aA2) * aT + C(aA1);
}
__name(getSlope, "getSlope");
function binarySubdivide(aX, aA, aB, mX1, mX2) {
var currentX, currentT, i = 0;
do
currentT = aA + (aB - aA) / 2, currentX = calcBezier(currentT, mX1, mX2) - aX, currentX > 0 ? aB = currentT : aA = currentT;
while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);
return currentT;
}
__name(binarySubdivide, "binarySubdivide");
function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {
for (var i = 0; i < NEWTON_ITERATIONS; ++i) {
var currentSlope = getSlope(aGuessT, mX1, mX2);
if (currentSlope === 0)
return aGuessT;
var currentX = calcBezier(aGuessT, mX1, mX2) - aX;
aGuessT -= currentX / currentSlope;
}
return aGuessT;
}
__name(newtonRaphsonIterate, "newtonRaphsonIterate");
function LinearEasing(x) {
return x;
}
return __name(LinearEasing, "LinearEasing"), src = /* @__PURE__ */ __name(function(mX1, mY1, mX2, mY2) {
if (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1))
throw new Error("bezier x values must be in [0, 1] range");
if (mX1 === mY1 && mX2 === mY2)
return LinearEasing;
for (var sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize), i = 0; i < kSplineTableSize; ++i)
sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);
function getTForX(aX) {
for (var intervalStart = 0, currentSample = 1, lastSample = kSplineTableSize - 1; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample)
intervalStart += kSampleStepSize;
--currentSample;
var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]), guessForT = intervalStart + dist * kSampleStepSize, initialSlope = getSlope(guessForT, mX1, mX2);
return initialSlope >= NEWTON_MIN_SLOPE ? newtonRaphsonIterate(aX, guessForT, mX1, mX2) : initialSlope === 0 ? guessForT : binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);
}
return __name(getTForX, "getTForX"), /* @__PURE__ */ __name(function(x) {
return x === 0 ? 0 : x === 1 ? 1 : calcBezier(getTForX(x), mY1, mY2);
}, "BezierEasing");
}, "bezier"), src;
}
__name(requireSrc, "requireSrc");
var hasRequiredAmator;
function requireAmator() {
if (hasRequiredAmator) return amator.exports;
hasRequiredAmator = 1;
var BezierEasing = requireSrc(), animations = {
ease: BezierEasing(0.25, 0.1, 0.25, 1),
easeIn: BezierEasing(0.42, 0, 1, 1),
easeOut: BezierEasing(0, 0, 0.58, 1),
easeInOut: BezierEasing(0.42, 0, 0.58, 1),
linear: BezierEasing(0, 0, 1, 1)
};
amator.exports = animate, amator.exports.makeAggregateRaf = makeAggregateRaf, amator.exports.sharedScheduler = makeAggregateRaf();
function animate(source, target, options) {
var start = /* @__PURE__ */ Object.create(null), diff = /* @__PURE__ */ Object.create(null);
options = options || {};
var easing = typeof options.easing == "function" ? options.easing : animations[options.easing];
easing || (options.easing && console.warn("Unknown easing function in amator: " + options.easing), easing = animations.ease);
var step = typeof options.step == "function" ? options.step : noop, done = typeof options.done == "function" ? options.done : noop, scheduler = getScheduler(options.scheduler), keys = Object.keys(target);
keys.forEach(function(key) {
start[key] = source[key], diff[key] = target[key] - source[key];
});
var durationInMs = typeof options.duration == "number" ? options.duration : 400, durationInFrames = Math.max(1, durationInMs * 0.06), previousAnimationId, frame = 0;
return previousAnimationId = scheduler.next(loop), {
cancel
};
function cancel() {
scheduler.cancel(previousAnimationId), previousAnimationId = 0;
}
__name(cancel, "cancel");
function loop() {
var t = easing(frame / durationInFrames);
frame += 1, setValues(t), frame <= durationInFrames ? (previousAnimationId = scheduler.next(loop), step(source)) : (previousAnimationId = 0, setTimeout(function() {
done(source);
}, 0));
}
__name(loop, "loop");
function setValues(t) {
keys.forEach(function(key) {
source[key] = diff[key] * t + start[key];
});
}
__name(setValues, "setValues");
}
__name(animate, "animate");
function noop() {
}
__name(noop, "noop");
function getScheduler(scheduler) {
if (!scheduler) {
var canRaf = typeof window < "u" && window.requestAnimationFrame;
return canRaf ? rafScheduler() : timeoutScheduler();
}
if (typeof scheduler.next != "function") throw new Error("Scheduler is supposed to have next(cb) function");
if (typeof scheduler.cancel != "function") throw new Error("Scheduler is supposed to have cancel(handle) function");
return scheduler;
}
__name(getScheduler, "getScheduler");
function rafScheduler() {
return {
next: window.requestAnimationFrame.bind(window),
cancel: window.cancelAnimationFrame.bind(window)
};
}
__name(rafScheduler, "rafScheduler");
function timeoutScheduler() {
return {
next: /* @__PURE__ */ __name(function(cb) {
return setTimeout(cb, 1e3 / 60);
}, "next"),
cancel: /* @__PURE__ */ __name(function(id) {
return clearTimeout(id);
}, "cancel")
};
}
__name(timeoutScheduler, "timeoutScheduler");
function makeAggregateRaf() {
var frontBuffer = /* @__PURE__ */ new Set(), backBuffer = /* @__PURE__ */ new Set(), frameToken = 0;
return {
next,
cancel: next,
clearAll
};
function clearAll() {
frontBuffer.clear(), backBuffer.clear(), cancelAnimationFrame(frameToken), frameToken = 0;
}
function next(callback) {
backBuffer.add(callback), renderNextFrame();
}
function renderNextFrame() {
frameToken || (frameToken = requestAnimationFrame(renderFrame));
}
function renderFrame() {
frameToken = 0;
var t = backBuffer;
backBuffer = frontBuffer, frontBuffer = t, frontBuffer.forEach(function(callback) {
callback();
}), frontBuffer.clear();
}
}
return __name(makeAggregateRaf, "makeAggregateRaf"), amator.exports;
}
__name(requireAmator, "requireAmator");
var ngraph_events, hasRequiredNgraph_events;
function requireNgraph_events() {
if (hasRequiredNgraph_events) return ngraph_events;
hasRequiredNgraph_events = 1, ngraph_events = /* @__PURE__ */ __name(function(subject) {
validateSubject(subject);
var eventsStorage = createEventsStorage(subject);
return subject.on = eventsStorage.on, subject.off = eventsStorage.off, subject.fire = eventsStorage.fire, subject;
}, "eventify");
function createEventsStorage(subject) {
var registeredEvents = /* @__PURE__ */ Object.create(null);
return {
on: /* @__PURE__ */ __name(function(eventName, callback, ctx) {
if (typeof callback != "function")
throw new Error("callback is expected to be a function");
var handlers = registeredEvents[eventName];
return handlers || (handlers = registeredEvents[eventName] = []), handlers.push({ callback, ctx }), subject;
}, "on"),
off: /* @__PURE__ */ __name(function(eventName, callback) {
var wantToRemoveAll = typeof eventName > "u";
if (wantToRemoveAll)
return registeredEvents = /* @__PURE__ */ Object.create(null), subject;
if (registeredEvents[eventName]) {
var deleteAllCallbacksForEvent = typeof callback != "function";
if (deleteAllCallbacksForEvent)
delete registeredEvents[eventName];
else
for (var callbacks = registeredEvents[eventName], i = 0; i < callbacks.length; ++i)
callbacks[i].callback === callback && callbacks.splice(i, 1);
}
return subject;
}, "off"),
fire: /* @__PURE__ */ __name(function(eventName) {
var callbacks = registeredEvents[eventName];
if (!callbacks)
return subject;
var fireArguments;
arguments.length > 1 && (fireArguments = Array.prototype.splice.call(arguments, 1));
for (var i = 0; i < callbacks.length; ++i) {
var callbackInfo = callbacks[i];
callbackInfo.callback.apply(callbackInfo.ctx, fireArguments);
}
return subject;
}, "fire")
};
}
__name(createEventsStorage, "createEventsStorage");
function validateSubject(subject) {
if (!subject)
throw new Error("Eventify cannot use falsy object as events subject");
for (var reservedWords = ["on", "fire", "off"], i = 0; i < reservedWords.length; ++i)
if (subject.hasOwnProperty(reservedWords[i]))
throw new Error("Subject cannot be eventified, since it already has property '" + reservedWords[i] + "'");
}
return __name(validateSubject, "validateSubject"), ngraph_events;
}
__name(requireNgraph_events, "requireNgraph_events");
var kinetic_1, hasRequiredKinetic;
function requireKinetic() {
if (hasRequiredKinetic) return kinetic_1;
hasRequiredKinetic = 1, kinetic_1 = kinetic;
function kinetic(getPoint, scroll, settings) {
typeof settings != "object" && (settings = {});
var minVelocity = typeof settings.minVelocity == "number" ? settings.minVelocity : 5, amplitude = typeof settings.amplitude == "number" ? settings.amplitude : 0.25, cancelAnimationFrame2 = typeof settings.cancelAnimationFrame == "function" ? settings.cancelAnimationFrame : getCancelAnimationFrame(), requestAnimationFrame2 = typeof settings.requestAnimationFrame == "function" ? settings.requestAnimationFrame : getRequestAnimationFrame(), lastPoint, timestamp, timeConstant = 342, ticker, vx, targetX, ax, vy, targetY, ay, raf;
return {
start,
stop,
cancel: dispose
};
function dispose() {
cancelAnimationFrame2(ticker), cancelAnimationFrame2(raf);
}
function start() {
lastPoint = getPoint(), ax = ay = vx = vy = 0, timestamp = /* @__PURE__ */ new Date(), cancelAnimationFrame2(ticker), cancelAnimationFrame2(raf), ticker = requestAnimationFrame2(track);
}
function track() {
var now = Date.now(), elapsed = now - timestamp;
timestamp = now;
var currentPoint = getPoint(), dx = currentPoint.x - lastPoint.x, dy = currentPoint.y - lastPoint.y;
lastPoint = currentPoint;
var dt = 1e3 / (1 + elapsed);
vx = 0.8 * dx * dt + 0.2 * vx, vy = 0.8 * dy * dt + 0.2 * vy, ticker = requestAnimationFrame2(track);
}
function stop() {
cancelAnimationFrame2(ticker), cancelAnimationFrame2(raf);
var currentPoint = getPoint();
targetX = currentPoint.x, targetY = currentPoint.y, timestamp = Date.now(), (vx < -minVelocity || vx > minVelocity) && (ax = amplitude * vx, targetX += ax), (vy < -minVelocity || vy > minVelocity) && (ay = amplitude * vy, targetY += ay), raf = requestAnimationFrame2(autoScroll);
}
function autoScroll() {
var elapsed = Date.now() - timestamp, moving = !1, dx = 0, dy = 0;
ax && (dx = -ax * Math.exp(-elapsed / timeConstant), dx > 0.5 || dx < -0.5 ? moving = !0 : dx = ax = 0), ay && (dy = -ay * Math.exp(-elapsed / timeConstant), dy > 0.5 || dy < -0.5 ? moving = !0 : dy = ay = 0), moving && (scroll(targetX + dx, targetY + dy), raf = requestAnimationFrame2(autoScroll));
}
}
__name(kinetic, "kinetic");
function getCancelAnimationFrame() {
return typeof cancelAnimationFrame == "function" ? cancelAnimationFrame : clearTimeout;
}
__name(getCancelAnimationFrame, "getCancelAnimationFrame");
function getRequestAnimationFrame() {
return typeof requestAnimationFrame == "function" ? requestAnimationFrame : function(handler) {
return setTimeout(handler, 16);
};
}
return __name(getRequestAnimationFrame, "getRequestAnimationFrame"), kinetic_1;
}
__name(requireKinetic, "requireKinetic");
var createTextSelectionInterceptor_1, hasRequiredCreateTextSelectionInterceptor;
function requireCreateTextSelectionInterceptor() {
if (hasRequiredCreateTextSelectionInterceptor) return createTextSelectionInterceptor_1;
hasRequiredCreateTextSelectionInterceptor = 1, createTextSelectionInterceptor_1 = createTextSelectionInterceptor;
function createTextSelectionInterceptor(useFake) {
if (useFake)
return {
capture: noop,
release: noop
};
var dragObject, prevSelectStart, prevDragStart, wasCaptured = !1;
return {
capture,
release
};
function capture(domObject) {
wasCaptured = !0, prevSelectStart = window.document.onselectstart, prevDragStart = window.document.ondragstart, window.document.onselectstart = disabled, dragObject = domObject, dragObject.ondragstart = disabled;
}
function release() {
wasCaptured && (wasCaptured = !1, window.document.onselectstart = prevSelectStart, dragObject && (dragObject.ondragstart = prevDragStart));
}
}
__name(createTextSelectionInterceptor, "createTextSelectionInterceptor");
function disabled(e) {
return e.stopPropagation(), !1;
}
__name(disabled, "disabled");
function noop() {
}
return __name(noop, "noop"), createTextSelectionInterceptor_1;
}
__name(requireCreateTextSelectionInterceptor, "requireCreateTextSelectionInterceptor");
var transform, hasRequiredTransform;
function requireTransform() {
if (hasRequiredTransform) return transform;
hasRequiredTransform = 1, transform = Transform;
function Transform() {
this.x = 0, this.y = 0, this.scale = 1;
}
return __name(Transform, "Transform"), transform;
}
__name(requireTransform, "requireTransform");
var svgController = { exports: {} }, hasRequiredSvgController;
function requireSvgController() {
if (hasRequiredSvgController) return svgController.exports;
hasRequiredSvgController = 1, svgController.exports = makeSvgController, svgController.exports.canAttach = isSVGElement;
function makeSvgController(svgElement, options) {
if (!isSVGElement(svgElement))
throw new Error("svg element is required for svg.panzoom to work");
var owner = svgElement.ownerSVGElement;
if (!owner)
throw new Error(
"Do not apply panzoom to the root <svg> element. Use its child instead (e.g. <g></g>). As of March 2016 only FireFox supported transform on the root element"
);
options.disableKeyboardInteraction || owner.setAttribute("tabindex", 0);
var api = {
getBBox,
getScreenCTM,
getOwner,
applyTransform,
initTransform
};
return api;
function getOwner() {
return owner;
}
function getBBox() {
var bbox = svgElement.getBBox();
return {
left: bbox.x,
top: bbox.y,
width: bbox.width,
height: bbox.height
};
}
function getScreenCTM() {
var ctm = owner.getCTM();
return ctm || owner.getScreenCTM();
}
function initTransform(transform2) {
var screenCTM = svgElement.getCTM();
screenCTM === null && (screenCTM = document.createElementNS("http://www.w3.org/2000/svg", "svg").createSVGMatrix()), transform2.x = screenCTM.e, transform2.y = screenCTM.f, transform2.scale = screenCTM.a, owner.removeAttributeNS(null, "viewBox");
}
function applyTransform(transform2) {
svgElement.setAttribute("transform", "matrix(" + transform2.scale + " 0 0 " + transform2.scale + " " + transform2.x + " " + transform2.y + ")");
}
}
__name(makeSvgController, "makeSvgController");
function isSVGElement(element) {
return element && element.ownerSVGElement && element.getCTM;
}
return __name(isSVGElement, "isSVGElement"), svgController.exports;
}
__name(requireSvgController, "requireSvgController");
var domController = { exports: {} }, hasRequiredDomController;
function requireDomController() {
if (hasRequiredDomController) return domController.exports;
hasRequiredDomController = 1, domController.exports = makeDomController, domController.exports.canAttach = isDomElement;
function makeDomController(domElement, options) {
var elementValid = isDomElement(domElement);
if (!elementValid)
throw new Error("panzoom requires DOM element to be attached to the DOM tree");
var owner = domElement.parentElement;
domElement.scrollTop = 0, options.disableKeyboardInteraction || owner.setAttribute("tabindex", 0);
var api = {
getBBox,
getOwner,
applyTransform
};
return api;
function getOwner() {
return owner;
}
function getBBox() {
return {
left: 0,
top: 0,
width: domElement.clientWidth,
height: domElement.clientHeight
};
}
function applyTransform(transform2) {
domElement.style.transformOrigin = "0 0 0", domElement.style.transform = "matrix(" + transform2.scale + ", 0, 0, " + transform2.scale + ", " + transform2.x + ", " + transform2.y + ")";
}
}
__name(makeDomController, "makeDomController");
function isDomElement(element) {
return element && element.parentElement && element.style;
}
return __name(isDomElement, "isDomElement"), domController.exports;
}
__name(requireDomController, "requireDomController");
var panzoom, hasRequiredPanzoom;
function requirePanzoom() {
if (hasRequiredPanzoom) return panzoom;
hasRequiredPanzoom = 1;
var wheel2 = requireWheel(), animate = requireAmator(), eventify = requireNgraph_events(), kinetic = requireKinetic(), createTextSelectionInterceptor = requireCreateTextSelectionInterceptor(), domTextSelectionInterceptor = createTextSelectionInterceptor(), fakeTextSelectorInterceptor = createTextSelectionInterceptor(!0), Transform = requireTransform(), makeSvgController = requireSvgController(), makeDomController = requireDomController(), defaultZoomSpeed = 1, defaultDoubleTapZoomSpeed = 1.75, doubleTapSpeedInMS = 300, clickEventTimeInMS = 200;
panzoom = createPanZoom2;
function createPanZoom2(domElement, options) {
options = options || {};
var panController = options.controller;
if (panController || (makeSvgController.canAttach(domElement) ? panController = makeSvgController(domElement, options) : makeDomController.canAttach(domElement) && (panController = makeDomController(domElement, options))), !panController)
throw new Error(
"Cannot create panzoom for the current type of dom element"
);
var owner = panController.getOwner(), storedCTMResult = { x: 0, y: 0 }, isDirty = !1, transform2 = new Transform();
panController.initTransform && panController.initTransform(transform2);
var filterKey = typeof options.filterKey == "function" ? options.filterKey : noop, pinchSpeed = typeof options.pinchSpeed == "number" ? options.pinchSpeed : 1, bounds = options.bounds, maxZoom = typeof options.maxZoom == "number" ? options.maxZoom : Number.POSITIVE_INFINITY, minZoom = typeof options.minZoom == "number" ? options.minZoom : 0, boundsPadding = typeof options.boundsPadding == "number" ? options.boundsPadding : 0.05, zoomDoubleClickSpeed = typeof options.zoomDoubleClickSpeed == "number" ? options.zoomDoubleClickSpeed : defaultDoubleTapZoomSpeed, beforeWheel = options.beforeWheel || noop, beforeMouseDown = options.beforeMouseDown || noop, speed = typeof options.zoomSpeed == "number" ? options.zoomSpeed : defaultZoomSpeed, transformOrigin = parseTransformOrigin(options.transformOrigin), textSelection = options.enableTextSelection ? fakeTextSelectorInterceptor : domTextSelectionInterceptor;
validateBounds(bounds), options.autocenter && autocenter();
var frameAnimation, lastTouchEndTime = 0, lastTouchStartTime = 0, pendingClickEventTimeout = 0, lastMouseDownedEvent = null, lastMouseDownTime = /* @__PURE__ */ new Date(), lastSingleFingerOffset, touchInProgress = !1, panstartFired = !1, mouseX, mouseY, clickX, clickY, pinchZoomLength, smoothScroll;
"smoothScroll" in options && !options.smoothScroll ? smoothScroll = rigidScroll() : smoothScroll = kinetic(getPoint, scroll, options.smoothScroll);
var moveByAnimation, zoomToAnimation, multiTouch, paused = !1;
listenForEvents();
var api = {
dispose,
moveBy: internalMoveBy,
moveTo,
smoothMoveTo,
centerOn,
zoomTo: publicZoomTo,
zoomAbs,
smoothZoom,
smoothZoomAbs,
showRectangle,
pause,
resume,
isPaused,
getTransform: getTransformModel,
getMinZoom,
setMinZoom,
getMaxZoom,
setMaxZoom,
getTransformOrigin,
setTransformOrigin,
getZoomSpeed,
setZoomSpeed
};
eventify(api);
var initialX = typeof options.initialX == "number" ? options.initialX : transform2.x, initialY = typeof options.initialY == "number" ? options.initialY : transform2.y, initialZoom = typeof options.initialZoom == "number" ? options.initialZoom : transform2.scale;
return (initialX != transform2.x || initialY != transform2.y || initialZoom != transform2.scale) && zoomAbs(initialX, initialY, initialZoom), api;
function pause() {
releaseEvents(), paused = !0;
}
__name(pause, "pause");
function resume() {
paused && (listenForEvents(), paused = !1);
}
__name(resume, "resume");
function isPaused() {
return paused;
}
__name(isPaused, "isPaused");
function showRectangle(rect) {
var clientRect = owner.getBoundingClientRect(), size = transformToScreen(clientRect.width, clientRect.height), rectWidth = rect.right - rect.left, rectHeight = rect.bottom - rect.top;
if (!Number.isFinite(rectWidth) || !Number.isFinite(rectHeight))
throw new Error("Invalid rectangle");
var dw = size.x / rectWidth, dh = size.y / rectHeight, scale = Math.min(dw, dh);
transform2.x = -(rect.left + rectWidth / 2) * scale + size.x / 2, transform2.y = -(rect.top + rectHeight / 2) * scale + size.y / 2, transform2.scale = scale;
}
__name(showRectangle, "showRectangle");
function transformToScreen(x, y) {
if (panController.getScreenCTM) {
var parentCTM = panController.getScreenCTM(), parentScaleX = parentCTM.a, parentScaleY = parentCTM.d, parentOffsetX = parentCTM.e, parentOffsetY = parentCTM.f;
storedCTMResult.x = x * parentScaleX - parentOffsetX, storedCTMResult.y = y * parentScaleY - parentOffsetY;
} else
storedCTMResult.x = x, storedCTMResult.y = y;
return storedCTMResult;
}
__name(transformToScreen, "transformToScreen");
function autocenter() {
var w, h, left = 0, top = 0, sceneBoundingBox = getBoundingBox();
if (sceneBoundingBox)
left = sceneBoundingBox.left, top = sceneBoundingBox.top, w = sceneBoundingBox.right - sceneBoundingBox.left, h = sceneBoundingBox.bottom - sceneBoundingBox.top;
else {
var ownerRect = owner.getBoundingClientRect();
w = ownerRect.width, h = ownerRect.height;
}
var bbox = panController.getBBox();
if (!(bbox.width === 0 || bbox.height === 0)) {
var dh = h / bbox.height, dw = w / bbox.width, scale = Math.min(dw, dh);
transform2.x = -(bbox.left + bbox.width / 2) * scale + w / 2 + left, transform2.y = -(bbox.top + bbox.height / 2) * scale + h / 2 + top, transform2.scale = scale;
}
}
__name(autocenter, "autocenter");
function getTransformModel() {
return transform2;
}
__name(getTransformModel, "getTransformModel");
function getMinZoom() {
return minZoom;
}
__name(getMinZoom, "getMinZoom");
function setMinZoom(newMinZoom) {
minZoom = newMinZoom;
}
__name(setMinZoom, "setMinZoom");
function getMaxZoom() {
return maxZoom;
}
__name(getMaxZoom, "getMaxZoom");
function setMaxZoom(newMaxZoom) {
maxZoom = newMaxZoom;
}
__name(setMaxZoom, "setMaxZoom");
function getTransformOrigin() {
return transformOrigin;
}
__name(getTransformOrigin, "getTransformOrigin");
function setTransformOrigin(newTransformOrigin) {
transformOrigin = parseTransformOrigin(newTransformOrigin);
}
__name(setTransformOrigin, "setTransformOrigin");
function getZoomSpeed() {
return speed;
}
__name(getZoomSpeed, "getZoomSpeed");
function setZoomSpeed(newSpeed) {
if (!Number.isFinite(newSpeed))
throw new Error("Zoom speed should be a number");
speed = newSpeed;
}
__name(setZoomSpeed, "setZoomSpeed");
function getPoint() {
return {
x: transform2.x,
y: transform2.y
};
}
__name(getPoint, "getPoint");
function moveTo(x, y) {
transform2.x = x, transform2.y = y, keepTransformInsideBounds(), triggerEvent("pan"), makeDirty();
}
__name(moveTo, "moveTo");
function moveBy(dx, dy) {
moveTo(transform2.x + dx, transform2.y + dy);
}
__name(moveBy, "moveBy");
function keepTransformInsideBounds() {
var boundingBox = getBoundingBox();
if (boundingBox) {
var adjusted = !1, clientRect = getClientRect(), diff = boundingBox.left - clientRect.right;
return diff > 0 && (transform2.x += diff, adjusted = !0), diff = boundingBox.right - clientRect.left, diff < 0 && (transform2.x += diff, adjusted = !0), diff = boundingBox.top - clientRect.bottom, diff > 0 && (transform2.y += diff, adjusted = !0), diff = boundingBox.bottom - clientRect.top, diff < 0 && (transform2.y += diff, adjusted = !0), adjusted;
}
}
__name(keepTransformInsideBounds, "keepTransformInsideBounds");
function getBoundingBox() {
if (bounds) {
if (typeof bounds == "boolean") {
var ownerRect = owner.getBoundingClientRect(), sceneWidth = ownerRect.width, sceneHeight = ownerRect.height;
return {
left: sceneWidth * boundsPadding,
top: sceneHeight * boundsPadding,
right: sceneWidth * (1 - boundsPadding),
bottom: sceneHeight * (1 - boundsPadding)
};
}
return bounds;
}
}
__name(getBoundingBox, "getBoundingBox");
function getClientRect() {
var bbox = panController.getBBox(), leftTop = client(bbox.left, bbox.top);
return {
left: leftTop.x,
top: leftTop.y,
right: bbox.width * transform2.scale + leftTop.x,
bottom: bbox.height * transform2.scale + leftTop.y
};
}
__name(getClientRect, "getClientRect");
function client(x, y) {
return {
x: x * transform2.scale + transform2.x,
y: y * transform2.scale + transform2.y
};
}
__name(client, "client");
function makeDirty() {
isDirty = !0, frameAnimation = window.requestAnimationFrame(frame);
}
__name(makeDirty, "makeDirty");
function zoomByRatio(clientX, clientY, ratio) {
if (isNaN(clientX) || isNaN(clientY) || isNaN(ratio))
throw new Error("zoom requires valid numbers");
var newScale = transform2.scale * ratio;
if (newScale < minZoom) {
if (transform2.scale === minZoom) return;
ratio = minZoom / transform2.scale;
}
if (newScale > maxZoom) {
if (transform2.scale === maxZoom) return;
ratio = maxZoom / transform2.scale;
}
var size = transformToScreen(clientX, clientY);
if (transform2.x = size.x - ratio * (size.x - transform2.x), transform2.y = size.y - ratio * (size.y - transform2.y), bounds && boundsPadding === 1 && minZoom === 1)
transform2.scale *= ratio, keepTransformInsideBounds();
else {
var transformAdjusted = keepTransformInsideBounds();
transformAdjusted || (transform2.scale *= ratio);
}
triggerEvent("zoom"), makeDirty();
}
__name(zoomByRatio, "zoomByRatio");
function zoomAbs(clientX, clientY, zoomLevel) {
var ratio = zoomLevel / transform2.scale;
zoomByRatio(clientX, clientY, ratio);
}
__name(zoomAbs, "zoomAbs");
function centerOn(ui) {
var parent = ui.ownerSVGElement;
if (!parent)
throw new Error("ui element is required to be within the scene");
var clientRect = ui.getBoundingClientRect(), cx = clientRect.left + clientRect.width / 2, cy = clientRect.top + clientRect.height / 2, container = parent.getBoundingClientRect(), dx = container.width / 2 - cx, dy = container.height / 2 - cy;
internalMoveBy(dx, dy, !0);
}
__name(centerOn, "centerOn");
function smoothMoveTo(x, y) {
internalMoveBy(x - transform2.x, y - transform2.y, !0);
}
__name(smoothMoveTo, "smoothMoveTo");
function internalMoveBy(dx, dy, smooth) {
if (!smooth)
return moveBy(dx, dy);
moveByAnimation && moveByAnimation.cancel();
var from = { x: 0, y: 0 }, to = { x: dx, y: dy }, lastX = 0, lastY = 0;
moveByAnimation = animate(from, to, {
step: /* @__PURE__ */ __name(function(v) {
moveBy(v.x - lastX, v.y - lastY), lastX = v.x, lastY = v.y;
}, "step")
});
}
__name(internalMoveBy, "internalMoveBy");
function scroll(x, y) {
cancelZoomAnimation(), moveTo(x, y);
}
__name(scroll, "scroll");
function dispose() {
releaseEvents();
}
__name(dispose, "dispose");
function listenForEvents() {
owner.addEventListener("mousedown", onMouseDown, { passive: !1 }), owner.addEventListener("dblclick", onDoubleClick, { passive: !1 }), owner.addEventListener("touchstart", onTouch, { passive: !1 }), owner.addEventListener("keydown", onKeyDown, { passive: !1 }), wheel2.addWheelListener(owner, onMouseWheel, { passive: !1 }), makeDirty();
}
__name(listenForEvents, "listenForEvents");
function releaseEvents() {
wheel2.removeWheelListener(owner, onMouseWheel), owner.removeEventListener("mousedown", onMouseDown), owner.removeEventListener("keydown", onKeyDown), owner.removeEventListener("dblclick", onDoubleClick), owner.removeEventListener("touchstart", onTouch), frameAnimation && (window.cancelAnimationFrame(frameAnimation), frameAnimation = 0), smoothScroll.cancel(), releaseDocumentMouse(), releaseTouches(), textSelection.release(), triggerPanEnd();
}
__name(releaseEvents, "releaseEvents");
function frame() {
isDirty && applyTransform();
}
__name(frame, "frame");
function applyTransform() {
isDirty = !1, panController.applyTransform(transform2), triggerEvent("transform"), frameAnimation = 0;
}
__name(applyTransform, "applyTransform");
function onKeyDown(e) {
var x = 0, y = 0, z = 0;
if (e.keyCode === 38 ? y = 1 : e.keyCode === 40 ? y = -1 : e.keyCode === 37 ? x = 1 : e.keyCode === 39 ? x = -1 : e.keyCode === 189 || e.keyCode === 109 ? z = 1 : (e.keyCode === 187 || e.keyCode === 107) && (z = -1), !filterKey(e, x, y, z)) {
if (x || y) {
e.preventDefault(), e.stopPropagation();
var clientRect = owner.getBoundingClientRect(), offset = Math.min(clientRect.width, clientRect.height), moveSpeedRatio = 0.05, dx = offset * moveSpeedRatio * x, dy = offset * moveSpeedRatio * y;
internalMoveBy(dx, dy);
}
if (z) {
var scaleMultiplier = getScaleMultiplier(z * 100), offset = transformOrigin ? getTransformOriginOffset() : midPoint();
publicZoomTo(offset.x, offset.y, scaleMultiplier);
}
}
}
__name(onKeyDown, "onKeyDown");
function midPoint() {
var ownerRect = owner.getBoundingClientRect();
return {
x: ownerRect.width / 2,
y: ownerRect.height / 2
};
}
__name(midPoint, "midPoint");
function onTouch(e) {
if (beforeTouch(e), clearPendingClickEventTimeout(), e.touches.length === 1)
return handleSingleFingerTouch(e, e.touches[0]);
e.touches.length === 2 && (pinchZoomLength = getPinchZoomLength(e.touches[0], e.touches[1]), multiTouch = !0, startTouchListenerIfNeeded());
}
__name(onTouch, "onTouch");
function beforeTouch(e) {
options.onTouch && !options.onTouch(e) || (e.stopPropagation(), e.preventDefault());
}
__name(beforeTouch, "beforeTouch");
function beforeDoubleClick(e) {
clearPendingClickEventTimeout(), !(options.onDoubleClick && !options.onDoubleClick(e)) && (e.preventDefault(), e.stopPropagation());
}
__name(beforeDoubleClick, "beforeDoubleClick");
function handleSingleFingerTouch(e) {
lastTouchStartTime = /* @__PURE__ */ new Date();
var touch = e.touches[0], offset = getOffsetXY(touch);
lastSingleFingerOffset = offset;
var point = transformToScreen(offset.x, offset.y);
mouseX = point.x, mouseY = point.y, clickX = mouseX, clickY = mouseY, smoothScroll.cancel(), startTouchListenerIfNeeded();
}
__name(handleSingleFingerTouch, "handleSingleFingerTouch");
function startTouchListenerIfNeeded() {
touchInProgress || (touchInProgress = !0, document.addEventListener("touchmove", handleTouchMove), document.addEventListener("touchend", handleTouchEnd), document.addEventListener("touchcancel", handleTouchEnd));
}
__name(startTouchListenerIfNeeded, "startTouchListenerIfNeeded");
function handleTouchMove(e) {
if (e.touches.length === 1) {
e.stopPropagation();
var touch = e.touches[0], offset = getOffsetXY(touch), point = transformToScreen(offset.x, offset.y), dx = point.x - mouseX, dy = point.y - mouseY;
dx !== 0 && dy !== 0 && triggerPanStart(), mouseX = point.x, mouseY = point.y, internalMoveBy(dx, dy);
} else if (e.touches.length === 2) {
multiTouch = !0;
var t1 = e.touches[0], t2 = e.touches[1], currentPinchLength = getPinchZoomLength(t1, t2), scaleMultiplier = 1 + (currentPinchLength / pinchZoomLength - 1) * pinchSpeed, firstTouchPoint = getOffsetXY(t1), secondTouchPoint = getOffsetXY(t2);
if (mouseX = (firstTouchPoint.x + secondTouchPoint.x) / 2, mouseY = (firstTouchPoint.y + secondTouchPoint.y) / 2, transformOrigin) {
var offset = getTransformOriginOffset();
mouseX = offset.x, mouseY = offset.y;
}
publicZoomTo(mouseX, mouseY, scaleMultiplier), pinchZoomLength = currentPinchLength, e.stopPropagation(), e.preventDefault();
}
}
__name(handleTouchMove, "handleTouchMove");
function clearPendingClickEventTimeout() {
pendingClickEventTimeout && (clearTimeout(pendingClickEventTimeout), pendingClickEventTimeout = 0);
}
__name(clearPendingClickEventTimeout, "clearPendingClickEventTimeout");
function handlePotentialClickEvent(e) {
if (options.onClick) {
clearPendingClickEventTimeout();
var dx = mouseX - clickX, dy = mouseY - clickY, l = Math.sqrt(dx * dx + dy * dy);
l > 5 || (pendingClickEventTimeout = setTimeout(function() {
pendingClickEventTimeout = 0, options.onClick(e);
}, doubleTapSpeedInMS));
}
}
__name(handlePotentialClickEvent, "handlePotentialClickEvent");
function handleTouchEnd(e) {
if (clearPendingClickEventTimeout(), e.touches.length > 0) {
var offset = getOffsetXY(e.touches[0]), point = transformToScreen(offset.x, offset.y);
mouseX = point.x, mouseY = point.y;
} else {
var now = /* @__PURE__ */ new Date();
if (now - lastTouchEndTime < doubleTapSpeedInMS)
if (transformOrigin) {
var offset = getTransformOriginOffset();
smoothZoom(offset.x, offset.y, zoomDoubleClickSpeed);
} else
smoothZoom(lastSingleFingerOffset.x, lastSingleFingerOffset.y, zoomDoubleClickSpeed);
else now - lastTouchStartTime < clickEventTimeInMS && handlePotentialClickEvent(e);
lastTouchEndTime = now, triggerPanEnd(), releaseTouches();
}
}
__name(handleTouchEnd, "handleTouchEnd");
function getPinchZoomLength(finger1, finger2) {
var dx = finger1.clientX - finger2.clientX, dy = finger1.clientY - finger2.clientY;
return Math.sqrt(dx * dx + dy * dy);
}
__name(getPinchZoomLength, "getPinchZoomLength");
function onDoubleClick(e) {
beforeDoubleClick(e);
var offset = getOffsetXY(e);
transformOrigin && (offset = getTransformOriginOffset()), smoothZoom(offset.x, offset.y, zoomDoubleClickSpeed);
}
__name(onDoubleClick, "onDoubleClick");
function onMouseDown(e) {
if (clearPendingClickEventTimeout(), !beforeMouseDown(e)) {
if (lastMouseDownedEvent = e, lastMouseDownTime = /* @__PURE__ */ new Date(), touchInProgress)
return e.stopPropagation(), !1;
var isLeftButton = e.button === 1 && window.event !== null || e.button === 0;
if (isLeftButton) {
smoothScroll.cancel();
var offset = getOffsetXY(e), point = transformToScreen(offset.x, offset.y);
return clickX = mouseX = point.x, clickY = mouseY = point.y, document.addEventListener("mousemove", onMouseMove), document.addEventListener("mouseup", onMouseUp), textSelection.capture(e.target || e.srcElement), !1;
}
}
}
__name(onMouseDown, "onMouseDown");
function onMouseMove(e) {
if (!touchInProgress) {
triggerPanStart();
var offset = getOffsetXY(e), point = transformToScreen(offset.x, offset.y), dx = point.x - mouseX, dy = point.y - mouseY;
mouseX = point.x, mouseY = point.y, internalMoveBy(dx, dy);
}
}
__name(onMouseMove, "onMouseMove");
function onMouseUp() {
var now = /* @__PURE__ */ new Date();
now - lastMouseDownTime < clickEventTimeInMS && handlePotentialClickEvent(lastMouseDownedEvent), textSelection.release(), triggerPanEnd(), releaseDocumentMouse();
}
__name(onMouseUp, "onMouseUp");
function releaseDocumentMouse() {
document.removeEventListener("mousemove", onMouseMove), document.removeEventListener("mouseup", onMouseUp), panstartFired = !1;
}
__name(releaseDocumentMouse, "releaseDocumentMouse");
function releaseTouches() {
document.removeEventListener("touchmove", handleTouchMove), document.removeEventListener("touchend", handleTouchEnd), document.removeEventListener("touchcancel", handleTouchEnd), panstartFired = !1, multiTouch = !1, touchInProgress = !1;
}
__name(releaseTouches, "releaseTouches");
function onMouseWheel(e) {
if (!beforeWheel(e)) {
smoothScroll.cancel();
var delta = e.deltaY;
e.deltaMode > 0 && (delta *= 100);
var scaleMultiplier = getScaleMultiplier(delta);
if (scaleMultiplier !== 1) {
var offset = transformOrigin ? getTransformOriginOffset() : getOffsetXY(e);
publicZoomTo(offset.x, offset.y, scaleMultiplier), e.preventDefault();
}
}
}
__name(onMouseWheel, "onMouseWheel");
function getOffsetXY(e) {
var offsetX, offsetY, ownerRect = owner.getBoundingClientRect();
return offsetX = e.clientX - ownerRect.left, offsetY = e.clientY - ownerRect.top, { x: offsetX, y: offsetY };
}
__name(getOffsetXY, "getOffsetXY");
function smoothZoom(clientX, clientY, scaleMultiplier) {
var fromValue = transform2.scale, from = { scale: fromValue }, to = { scale: scaleMultiplier * fromValue };
smoothScroll.cancel(), cancelZoomAnimation(), zoomToAnimation = animate(from, to, {
step: /* @__PURE__ */ __name(function(v) {
zoomAbs(clientX, clientY, v.scale);
}, "step"),
done: triggerZoomEnd
});
}
__name(smoothZoom, "smoothZoom");
function smoothZoomAbs(clientX, clientY, toScaleValue) {
var fromValue = transform2.scale, from = { scale: fromValue }, to = { scale: toScaleValue };
smoothScroll.cancel(), cancelZoomAnimation(), zoomToAnimation = animate(from, to, {
step: /* @__PURE__ */ __name(function(v) {
zoomAbs(clientX, clientY, v.scale);
}, "step")
});
}
__name(smoothZoomAbs, "smoothZoomAbs");
function getTransformOriginOffset() {
var ownerRect = owner.getBoundingClientRect();
return {
x: ownerRect.width * transformOrigin.x,
y: ownerRect.height * transformOrigin.y
};
}
__name(getTransformOriginOffset, "getTransformOriginOffset");
function publicZoomTo(clientX, clientY, scaleMultiplier) {
return smoothScroll.cancel(), cancelZoomAnimation(), zoomByRatio(clientX, clientY, scaleMultiplier);
}
__name(publicZoomTo, "publicZoomTo");
function cancelZoomAnimation() {
zoomToAnimation && (zoomToAnimation.cancel(), zoomToAnimation = null);
}
__name(cancelZoomAnimation, "cancelZoomAnimation");
function getScaleMultiplier(delta) {
var sign = Math.sign(delta), deltaAdjustedSpeed = Math.min(0.25, Math.abs(speed * delta / 128));
return 1 - sign * deltaAdjustedSpeed;
}
__name(getScaleMultiplier, "getScaleMultiplier");
function triggerPanStart() {
panstartFired || (triggerEvent("panstart"), panstartFired = !0, smoothScroll.start());
}
__name(triggerPanStart, "triggerPanStart");
function triggerPanEnd() {
panstartFired && (multiTouch || smoothScroll.stop(), triggerEvent("panend"));
}
__name(triggerPanEnd, "triggerPanEnd");
function triggerZoomEnd() {
triggerEvent("zoomend");
}
__name(triggerZoomEnd, "triggerZoomEnd");
function triggerEvent(name) {
api.fire(name, api);
}
__name(triggerEvent, "triggerEvent");
}
__name(createPanZoom2, "createPanZoom");
function parseTransformOrigin(options) {
if (options) {
if (typeof options == "object")
return (!isNumber(options.x) || !isNumber(options.y)) && failTransformOrigin(options), options;
failTransformOrigin();
}
}
__name(parseTransformOrigin, "parseTransformOrigin");
function failTransformOrigin(options) {
throw console.error(options), new Error(
[
"Cannot parse transform origin.",
"Some good examples:",
' "center center" can be achieved with {x: 0.5, y: 0.5}',
' "top center" can be achieved with {x: 0.5, y: 0}',
' "bottom right" can be achieved with {x: 1, y: 1}'
].join(`
`)
);
}
__name(failTransformOrigin, "failTransformOrigin");
function noop() {
}
__name(noop, "noop");
function validateBounds(bounds) {
var boundsType = typeof bounds;
if (!(boundsType === "undefined" || boundsType === "boolean")) {
var validBounds = isNumber(bounds.left) && isNumber(bounds.top) && isNumber(bounds.bottom) && isNumber(bounds.right);
if (!validBounds)
throw new Error(
"Bounds object is not valid. It can be: undefined, boolean (true|false) or an object {left, top, right, bottom}"
);
}
}
__name(validateBounds, "validateBounds");
function isNumber(x) {
return Number.isFinite(x);
}
__name(isNumber, "isNumber");
function isNaN(value) {
return Number.isNaN ? Number.isNaN(value) : value !== value;
}
__name(isNaN, "isNaN");
function rigidScroll() {
return {
start: noop,
stop: noop,
cancel: noop
};
}
__name(rigidScroll, "rigidScroll");
function autoRun() {
if (typeof document > "u") return;
var scripts = document.getElementsByTagName("script");
if (!scripts) return;
for (var panzoomScript, i = 0; i < scripts.length; ++i) {
var x = scripts[i];
if (x.src && x.src.match(/\bpanzoom(\.min)?\.js/)) {
panzoomScript = x;
break;
}
}
if (!panzoomScript) return;
var query = panzoomScript.getAttribute("query");
if (!query) return;
var globalName = panzoomScript.getAttribute("name") || "pz", started = Date.now();
tryAttach();
function tryAttach() {
var el = document.querySelector(query);
if (!el) {
var now = Date.now(), elapsed = now - started;
if (elapsed < 2e3) {
setTimeout(tryAttach, 100);
return;
}
console.error("Cannot find the panzoom element", globalName);
return;
}
var options = collectOptions(panzoomScript);
console.log(options), window[globalName] = createPanZoom2(el, options);
}
__name(tryAttach, "tryAttach");
function collectOptions(script) {
for (var attrs = script.attributes, options = {}, j = 0; j < attrs.length; ++j) {
var attr = attrs[j], nameValue = getPanzoomAttributeNameValue(attr);
nameValue && (options[nameValue.name] = nameValue.value);
}
return options;
}
__name(collectOptions, "collectOptions");
function getPanzoomAttributeNameValue(attr) {
if (attr.name) {
var isPanZoomAttribute = attr.name[0] === "p" && attr.name[1] === "z" && attr.name[2] === "-";
if (isPanZoomAttribute) {
var name = attr.name.substr(3), value = JSON.parse(attr.value);
return { name, value };
}
}
}
__name(getPanzoomAttributeNameValue, "getPanzoomAttributeNameValue");
}
return __name(autoRun, "autoRun"), autoRun(), panzoom;
}
__name(requirePanzoom, "requirePanzoom");
var panzoomExports = requirePanzoom();
const createPanZoom = /* @__PURE__ */ getDefaultExportFromCjs(panzoomExports), _CallGraph = class _CallGraph {
svg;
nodes;
edges;
clusters;
width;
height;
selectedElem = null;
panZoomState;
focus;
incomings;
outgoings;
constructor(svg, focus, onSelectElem) {
if (this.svg = svg, this.nodes = svg.querySelectorAll("g.node"), this.edges = svg.querySelectorAll("g.edge"), this.clusters = svg.querySelectorAll("g.cluster"), this.width = this.svg.viewBox.baseVal.width, this.height = this.svg.viewBox.baseVal.height, this.setUpInteraction(onSelectElem ?? this.onSelectElem), this.focus = focus, focus) {
const incomings = /* @__PURE__ */ new Map(), outgoings = /* @__PURE__ */ new Map();
this.edges.forEach((edge) => {
const fromCell = edge.dataset.from, toCell = edge.dataset.to;
incomings.get(toCell)?.push(edge) ?? incomings.set(toCell, [edge]), outgoings.get(fromCell)?.push(edge) ?? outgoings.set(fromCell, [edge]);
}), this.incomings = incomings, this.outgoings = outgoings;
}
}
setUpInteraction(onSelectElem) {
const svg = this.svg;
let clickPoint = [0, 0];
svg.onmousedown = function(e) {
clickPoint = [e.pageX, e.pageY];
}, svg.onmouseup = function(e) {
const [x, y] = clickPoint, diffX = Math.abs(e.pageX - x), diffY = Math.abs(e.pageY - y);
if (!(diffX > 6 || diffY > 6)) {
for (let elem = e.target; elem && elem instanceof SVGElement && elem !== svg; elem = elem.parentNode) {
const classes = elem.classList;
if (classes.contains("node") || classes.contains("cell") || classes.contains("edge") || classes.contains("cluster-label")) {
onSelectElem(elem);
return;
}
}
onSelectElem(null);
}
};
}
setUpPanZoom() {
this.panZoomState = this.createPanZoomState();
}
createPanZoomState() {
const g0 = this.svg.querySelector("#graph0"), pz = createPanZoom(g0, {
smoothScroll: !1,
autocenter: !0
}), { x, y, scale } = structuredClone(pz.getTransform()), cRect = g0.getBoundingClientRect(), cx = cRect.x + cRect.width / 2, cy = cRect.y + cRect.height / 2, sRect = this.svg.getBoundingClientRect();
return {
pz,
scale,
x,
y,
cx,
cy,
sRect
};
}
resetStyles() {
const g0 = this.svg.getElementById("graph0"), fadedGroup = this.svg.getElementById("faded-group");
this.selectedElem?.closest(".selected")?.classList.remove("selected"), g0.querySelectorAll(":scope > .edge").forEach(
(edge) => edge.classList.remove("incoming", "outgoing")
);
const firstNode = g0.querySelector(".node");
for (const cluster of fadedGroup.querySelectorAll(".cluster"))
g0.insertBefore(cluster, firstNode);
for (const node of fadedGroup.querySelectorAll(".node"))
g0.insertBefore(node, firstNode);
g0.append(...fadedGroup.childNodes);
}
smoothZoom(scale) {
if (!this.panZoomState)
return;
const { pz, cx, cy } = this.panZoomState;
pz.smoothZoom(cx, cy, scale);
}
resetPanZoom() {
if (!this.panZoomState)
return;
const { pz, x, y, scale } = this.panZoomState;
pz.moveTo(x, y), pz.zoomAbs(x, y, scale);
}
onSelectElem = /* @__PURE__ */ __name((elem) => {
if (this.resetStyles(), this.selectedElem = elem, !elem)
return;
const { pz, scale, cx, cy, sRect } = this.panZoomState, eRect = elem.getBoundingClientRect();
eRect.width > sRect.width || eRect.height > sRect.height ? (pz.smoothZoomAbs(cx, cy, scale), setTimeout(() => pz.centerOn(elem), 1e3)) : (eRect.left < sRect.left || eRect.top < sRect.top || eRect.right > sRect.right || eRect.bottom > sRect.bottom) && pz.centerOn(elem);
const classes = elem.classList;
classes.contains("node") ? this.onSelectNode(elem) : classes.contains("cell") ? this.onSelectCell(elem) : classes.contains("edge") ? this.onSelectEdge(elem) : classes.contains("cluster-label") && this.onSelctCluster(elem);
}, "onSelectElem");
onSelectNode(node) {
const id = node.id;
this.highlightEdges((edge) => [
edge.dataset.to.startsWith(`${id}:`),
edge.dataset.from.startsWith(`${id}:`)
]), node.classList.add("selected"), this.fadeOutNodes(/* @__PURE__ */ new Set([id]));
}
onSelectCell(cell) {
const id = cell.id;
if (this.focus)
this.onSelectCellInFocusMode(id);
else {
const cellIds = /* @__PURE__ */ new Set([cell.id]);
cell.querySelectorAll(".cell").forEach((c) => {
cellIds.add(c.id);
}), this.highlightEdges((edge) => [
cellIds.has(edge.dataset.to),
cellIds.has(edge.dataset.from)
]);
}
cell.classList.add("selected"), this.fadeOutNodes(/* @__PURE__ */ new Set([this.getNodeId(cell.id)]));
}
onSelectCellInFocusMode(cellId) {
const highlights = [/* @__PURE__ */ new Set(), /* @__PURE__ */ new Set()], inout = [this.incomings, this.outgoings];
for (let i = 0; i < inout.length; ++i) {
const visited = /* @__PURE__ */ new Set([cellId, this.focus]), map = inout[i], highlightEdges = highlights[i];
for (let newEdges = map.get(cellId) ?? []; newEdges.length > 0; )
newEdges = newEdges.flatMap((edge) => {
highlightEdges.add(edge);
const id = i == 0 ? edge.dataset.from : edge.dataset.to;
return visited.has(id) ? [] : (visited.add(id), map.get(id) ?? []);
});
}
this.highlightEdges((edge) => [
highlights[0].has(edge),
highlights[1].has(edge)
]), this.fadeOutNodes(/* @__PURE__ */ new Set([this.getNodeId(cellId)]));
}
onSelectEdge(edge) {
const g0 = this.svg.getElementById("graph0");
this.svg.getElementById("faded-group").append(...this.edges), g0.appendChild(edge), this.fadeOutNodes();
}
onSelctCluster(clusterLabel) {
const cluster = clusterLabel.parentNode, rect = cluster.getBoundingClientRect();
cluster.classList.add("selected");
const selected = /* @__PURE__ */ new Set();
this.nodes.forEach((node) => {
this.rectContains(rect, node.getBoundingClientRect()) && selected.add(node.id);
}), this.highlightEdges((edge) => [
selected.has(this.getNodeId(edge.dataset.to)),
selected.has(this.getNodeId(edge.dataset.from))
]), this.fadeOutNodes(selected);
}
highlightEdges(judge) {
const fadedGroup = this.svg.getElementById("faded-group");
for (const edge of this.edges) {
const [incoming, outgoing] = judge(edge);
incoming && edge.classList.add("incoming"), outgoing && edge.classList.add("outgoing"), incoming || outgoing || fadedGroup.appendChild(edge);
}
}
fadeOutNodes(kept) {
kept || (kept = /* @__PURE__ */ new Set());
const fadedGroup = this.svg.getElementById("faded-group");
for (const edge of this.edges)
edge.parentElement !== fadedGroup && kept.add(this.getNodeId(edge.dataset.from)).add(this.getNodeId(edge.dataset.to));
const clusters = new Set(this.clusters);
for (const node of this.nodes) {
if (!kept.has(node.id)) {
fadedGroup.appendChild(node);
continue;
}
const rect = node.getBoundingClientRect();
for (const cluster of clusters)
this.rectContains(cluster.getBoundingClientRect(), rect) && clusters.delete(cluster);
}
fadedGroup.append(...clusters);
}
getNodeId(id) {
return id.substring(0, id.indexOf(":"));
}
rectContains(rect1, rect2) {
return rect1.left < rect2.left && rect1.right > rect2.right && rect1.bottom > rect2.bottom && rect1.top < rect2.top;
}
};
__name(_CallGraph, "CallGraph");
let CallGraph = _CallGraph;
export {
CallGraph
};
const graph = new CallGraph(document.querySelector(".callgraph"), null);
graph.setUpPanZoom();
</script>
</body>
</html>