#63 Documentation of the memory mapped cache
Merged 6 years ago by sbose. Opened 6 years ago by sbose.
SSSD/ sbose/docs mmap_cache_now  into  master

The added file is too large to be shown here, see it at: design_pages/sssd_memory_cache.svg
file modified
+1
@@ -10,3 +10,4 @@ 

     coding_style

     release_process

     ipc

+    mmap_cache_1.15

The added file is too large to be shown here, see it at: developers/memory_cache_group.svg
@@ -0,0 +1,840 @@ 

+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>

+ <!-- Created with Inkscape (http://www.inkscape.org/) -->

+ 

+ <svg

+    xmlns:dc="http://purl.org/dc/elements/1.1/"

+    xmlns:cc="http://creativecommons.org/ns#"

+    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

+    xmlns:svg="http://www.w3.org/2000/svg"

+    xmlns="http://www.w3.org/2000/svg"

+    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"

+    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"

+    width="573.052mm"

+    height="122.2147mm"

+    viewBox="0 0 573.052 122.2147"

+    version="1.1"

+    id="svg28757"

+    inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"

+    sodipodi:docname="memory_cache_hash_collision.svg">

+   <defs

+      id="defs28751">

+     <marker

+        inkscape:isstock="true"

+        style="overflow:visible"

+        id="marker23315"

+        refX="0"

+        refY="0"

+        orient="auto"

+        inkscape:stockid="Arrow1Lend">

+       <path

+          inkscape:connector-curvature="0"

+          transform="matrix(-0.8,0,0,-0.8,-10,0)"

+          style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"

+          d="M 0,0 5,-5 -12.5,0 5,5 Z"

+          id="path23313" />

+     </marker>

+     <inkscape:path-effect

+        effect="bspline"

+        id="path-effect23305"

+        is_visible="true"

+        weight="33.333333"

+        steps="2"

+        helper_size="0"

+        apply_no_weight="true"

+        apply_with_weight="true"

+        only_selected="false" />

+     <marker

+        inkscape:stockid="Arrow1Lend"

+        orient="auto"

+        refY="0"

+        refX="0"

+        id="marker23151"

+        style="overflow:visible"

+        inkscape:isstock="true"

+        inkscape:collect="always">

+       <path

+          inkscape:connector-curvature="0"

+          id="path23149"

+          d="M 0,0 5,-5 -12.5,0 5,5 Z"

+          style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"

+          transform="matrix(-0.8,0,0,-0.8,-10,0)" />

+     </marker>

+     <inkscape:path-effect

+        effect="bspline"

+        id="path-effect23141"

+        is_visible="true"

+        weight="33.333333"

+        steps="2"

+        helper_size="0"

+        apply_no_weight="true"

+        apply_with_weight="true"

+        only_selected="false" />

+     <marker

+        inkscape:isstock="true"

+        style="overflow:visible"

+        id="marker22993"

+        refX="0"

+        refY="0"

+        orient="auto"

+        inkscape:stockid="Arrow1Lend"

+        inkscape:collect="always">

+       <path

+          inkscape:connector-curvature="0"

+          transform="matrix(-0.8,0,0,-0.8,-10,0)"

+          style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"

+          d="M 0,0 5,-5 -12.5,0 5,5 Z"

+          id="path22991" />

+     </marker>

+     <inkscape:path-effect

+        effect="bspline"

+        id="path-effect22983"

+        is_visible="true"

+        weight="33.333333"

+        steps="2"

+        helper_size="0"

+        apply_no_weight="true"

+        apply_with_weight="true"

+        only_selected="false" />

+     <inkscape:path-effect

+        effect="bspline"

+        id="path-effect19331-7-0"

+        is_visible="true"

+        weight="33.333333"

+        steps="2"

+        helper_size="0"

+        apply_no_weight="true"

+        apply_with_weight="true"

+        only_selected="false" />

+     <inkscape:path-effect

+        effect="bspline"

+        id="path-effect19331-7-4-4"

+        is_visible="true"

+        weight="33.333333"

+        steps="2"

+        helper_size="0"

+        apply_no_weight="true"

+        apply_with_weight="true"

+        only_selected="false" />

+     <inkscape:path-effect

+        effect="bspline"

+        id="path-effect19331-7-7"

+        is_visible="true"

+        weight="33.333333"

+        steps="2"

+        helper_size="0"

+        apply_no_weight="true"

+        apply_with_weight="true"

+        only_selected="false" />

+     <inkscape:path-effect

+        effect="bspline"

+        id="path-effect19331-7-4-6"

+        is_visible="true"

+        weight="33.333333"

+        steps="2"

+        helper_size="0"

+        apply_no_weight="true"

+        apply_with_weight="true"

+        only_selected="false" />

+     <inkscape:path-effect

+        effect="bspline"

+        id="path-effect19331-7"

+        is_visible="true"

+        weight="33.333333"

+        steps="2"

+        helper_size="0"

+        apply_no_weight="true"

+        apply_with_weight="true"

+        only_selected="false" />

+     <inkscape:path-effect

+        effect="bspline"

+        id="path-effect19331-7-4"

+        is_visible="true"

+        weight="33.333333"

+        steps="2"

+        helper_size="0"

+        apply_no_weight="true"

+        apply_with_weight="true"

+        only_selected="false" />

+   </defs>

+   <sodipodi:namedview

+      id="base"

+      pagecolor="#ffffff"

+      bordercolor="#666666"

+      borderopacity="1.0"

+      inkscape:pageopacity="0.0"

+      inkscape:pageshadow="2"

+      inkscape:zoom="0.35"

+      inkscape:cx="580.07573"

+      inkscape:cy="65.242622"

+      inkscape:document-units="mm"

+      inkscape:current-layer="layer1"

+      showgrid="false"

+      inkscape:window-width="1920"

+      inkscape:window-height="1016"

+      inkscape:window-x="1920"

+      inkscape:window-y="27"

+      inkscape:window-maximized="1" />

+   <metadata

+      id="metadata28754">

+     <rdf:RDF>

+       <cc:Work

+          rdf:about="">

+         <dc:format>image/svg+xml</dc:format>

+         <dc:type

+            rdf:resource="http://purl.org/dc/dcmitype/StillImage" />

+         <dc:title></dc:title>

+       </cc:Work>

+     </rdf:RDF>

+   </metadata>

+   <g

+      inkscape:label="Ebene 1"

+      inkscape:groupmode="layer"

+      id="layer1"

+      transform="translate(226.0498,-43.880741)">

+     <path

+        style="fill:#32afff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.66700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        d="m 347.00218,96.618992 c -39.72132,0 -79.44418,0 -119.16627,0 0,0 0,9.332568 0,9.332568 0,0 119.16627,0 119.16627,0"

+        id="path19329-1-4"

+        inkscape:connector-curvature="0"

+        inkscape:path-effect="#path-effect19331-7-4"

+        inkscape:original-d="m 347.00218,96.618992 c -39.72132,-2.49e-4 -119.16627,0 -119.16627,0 0,0 0,9.332568 0,9.332568 0,0 119.16627,0 119.16627,0" />

+     <rect

+        style="opacity:1;fill:#32afff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-1"

+        width="40"

+        height="10"

+        x="-170.78867"

+        y="96.618996" />

+     <rect

+        style="opacity:1;fill:#32afff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-72"

+        width="40"

+        height="10"

+        x="-130.78867"

+        y="96.618996" />

+     <rect

+        style="opacity:1;fill:#32afff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-3-7"

+        width="78.62458"

+        height="10"

+        x="-90.788658"

+        y="96.618996" />

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-94-2"

+        width="40"

+        height="10"

+        x="-12.164083"

+        y="96.618996" />

+     <rect

+        style="opacity:1;fill:#00fd00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-6-2"

+        width="40"

+        height="10"

+        x="27.835886"

+        y="96.618996" />

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-94-4-6"

+        width="40"

+        height="10"

+        x="67.835915"

+        y="96.618996" />

+     <rect

+        style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-6-5-1"

+        width="40"

+        height="10"

+        x="107.83588"

+        y="96.618996" />

+     <rect

+        style="opacity:1;fill:#32afff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-94-4-5-0"

+        width="40"

+        height="10"

+        x="147.83589"

+        y="96.618996" />

+     <rect

+        style="opacity:1;fill:#32afff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-6-5-5-6-6"

+        width="40"

+        height="10"

+        x="187.83592"

+        y="96.618996" />

+     <path

+        style="fill:#32afff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        d="m 267.83591,96.618992 c -13.3331,0 -26.66667,0 -40,0 0,0 0,9.999998 0,9.999998 0,0 40,0 40,0"

+        id="path19329-1"

+        inkscape:connector-curvature="0"

+        inkscape:path-effect="#path-effect19331-7"

+        inkscape:original-d="m 267.83591,96.618992 c -13.3331,-2.64e-4 -40,0 -40,0 0,0 0,9.999998 0,9.999998 0,0 40,0 40,0" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-168.8932"

+        y="103.22929"

+        id="text19335-5"><tspan

+          sodipodi:role="line"

+          id="tspan19333-9"

+          x="-168.8932"

+          y="103.22929"

+          style="font-size:7.05555534px;stroke-width:0.26458332px">Barrier</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="190.31346"

+        y="103.09629"

+        id="text19335-0-4"><tspan

+          sodipodi:role="line"

+          id="tspan19333-6-9"

+          x="190.31346"

+          y="103.09629"

+          style="font-size:7.05555534px;stroke-width:0.26458332px">Barrier</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-130.25951"

+        y="103.49818"

+        id="text19357-0"><tspan

+          sodipodi:role="line"

+          id="tspan19355-9"

+          x="-130.25951"

+          y="103.49818"

+          style="stroke-width:0.26458332px">Total length</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-89.359627"

+        y="103.72764"

+        id="text19361-1"><tspan

+          sodipodi:role="line"

+          id="tspan19359-7"

+          x="-89.359627"

+          y="103.72764"

+          style="stroke-width:0.26458332px">Expiration time</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="109.98399"

+        y="103.72764"

+        id="text19369-1"><tspan

+          sodipodi:role="line"

+          id="tspan19367-5"

+          x="109.98399"

+          y="103.72764"

+          style="stroke-width:0.26458332px">I343</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="150.94005"

+        y="103.72764"

+        id="text19373-9"><tspan

+          sodipodi:role="line"

+          id="tspan19371-7"

+          x="150.94005"

+          y="103.72764"

+          style="stroke-width:0.26458332px">Padding</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-10.376058"

+        y="103.36518"

+        id="text19377-7"><tspan

+          sodipodi:role="line"

+          id="tspan19375-6"

+          x="-10.376058"

+          y="103.36518"

+          style="stroke-width:0.26458332px">789</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="229.59016"

+        y="103.36518"

+        id="text19385-6"><tspan

+          sodipodi:role="line"

+          id="tspan19383-5"

+          x="229.59016"

+          y="103.36518"

+          style="stroke-width:0.26458332px">Payload data (passwd, group, initgr)</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46666622px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-205.93404"

+        y="104.53965"

+        id="text22585"><tspan

+          sodipodi:role="line"

+          id="tspan22583"

+          x="-205.93404"

+          y="104.53965"

+          style="stroke-width:0.26458332px">Slot 123</tspan></text>

+     <path

+        style="fill:#32afff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.66700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        d="m 346.11691,125.54953 c -39.72132,0 -79.44418,0 -119.16627,0 0,0 0,9.33257 0,9.33257 0,0 119.16627,0 119.16627,0"

+        id="path19329-1-4-3"

+        inkscape:connector-curvature="0"

+        inkscape:path-effect="#path-effect19331-7-4-6"

+        inkscape:original-d="m 346.11691,125.54953 c -39.72132,-2.5e-4 -119.16627,0 -119.16627,0 0,0 0,9.33257 0,9.33257 0,0 119.16627,0 119.16627,0" />

+     <rect

+        style="opacity:1;fill:#32afff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-1-1"

+        width="40"

+        height="10"

+        x="-171.67395"

+        y="125.54954" />

+     <rect

+        style="opacity:1;fill:#32afff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-72-7"

+        width="40"

+        height="10"

+        x="-131.67393"

+        y="125.54954" />

+     <rect

+        style="opacity:1;fill:#32afff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-3-7-5"

+        width="78.62458"

+        height="10"

+        x="-91.673943"

+        y="125.54954" />

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-94-2-9"

+        width="40"

+        height="10"

+        x="-13.049321"

+        y="125.54954" />

+     <rect

+        style="opacity:1;fill:#00fd00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-6-2-6"

+        width="40"

+        height="10"

+        x="26.950617"

+        y="125.54954" />

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-94-4-6-2"

+        width="40"

+        height="10"

+        x="66.95063"

+        y="125.54954" />

+     <rect

+        style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-6-5-1-1"

+        width="40"

+        height="10"

+        x="106.95057"

+        y="125.54954" />

+     <rect

+        style="opacity:1;fill:#32afff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-94-4-5-0-7"

+        width="40"

+        height="10"

+        x="146.95064"

+        y="125.54954" />

+     <rect

+        style="opacity:1;fill:#32afff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-6-5-5-6-6-8"

+        width="40"

+        height="10"

+        x="186.95064"

+        y="125.54954" />

+     <path

+        style="fill:#32afff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        d="m 266.95064,125.54953 c -13.33307,0 -26.66667,0 -40,0 0,0 0,10 0,10 0,0 40,0 40,0"

+        id="path19329-1-5"

+        inkscape:connector-curvature="0"

+        inkscape:path-effect="#path-effect19331-7-7"

+        inkscape:original-d="m 266.95064,125.54953 c -13.33307,-2.6e-4 -40,0 -40,0 0,0 0,10 0,10 0,0 40,0 40,0" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-169.77847"

+        y="132.15982"

+        id="text19335-5-7"><tspan

+          sodipodi:role="line"

+          id="tspan19333-9-4"

+          x="-169.77847"

+          y="132.15982"

+          style="font-size:7.05555534px;stroke-width:0.26458332px">Barrier</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="189.42821"

+        y="132.02682"

+        id="text19335-0-4-1"><tspan

+          sodipodi:role="line"

+          id="tspan19333-6-9-8"

+          x="189.42821"

+          y="132.02682"

+          style="font-size:7.05555534px;stroke-width:0.26458332px">Barrier</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-131.14476"

+        y="132.42871"

+        id="text19357-0-5"><tspan

+          sodipodi:role="line"

+          id="tspan19355-9-9"

+          x="-131.14476"

+          y="132.42871"

+          style="stroke-width:0.26458332px">Total length</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-90.244896"

+        y="132.65817"

+        id="text19361-1-7"><tspan

+          sodipodi:role="line"

+          id="tspan19359-7-5"

+          x="-90.244896"

+          y="132.65817"

+          style="stroke-width:0.26458332px">Expiration time</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="109.0987"

+        y="132.65817"

+        id="text19369-1-8"><tspan

+          sodipodi:role="line"

+          id="tspan19367-5-3"

+          x="109.0987"

+          y="132.65817"

+          style="stroke-width:0.26458332px">I565</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="150.05476"

+        y="132.65817"

+        id="text19373-9-1"><tspan

+          sodipodi:role="line"

+          id="tspan19371-7-8"

+          x="150.05476"

+          y="132.65817"

+          style="stroke-width:0.26458332px">Padding</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-11.261327"

+        y="132.2957"

+        id="text19377-7-9"><tspan

+          sodipodi:role="line"

+          id="tspan19375-6-6"

+          x="-11.261327"

+          y="132.2957"

+          style="stroke-width:0.26458332px">123</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="228.70491"

+        y="132.2957"

+        id="text19385-6-3"><tspan

+          sodipodi:role="line"

+          id="tspan19383-5-3"

+          x="228.70491"

+          y="132.2957"

+          style="stroke-width:0.26458332px">Payload data (passwd, group, initgr)</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46666622px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-206.81929"

+        y="133.47018"

+        id="text22585-8"><tspan

+          sodipodi:role="line"

+          id="tspan22583-6"

+          x="-206.81929"

+          y="133.47018"

+          style="stroke-width:0.26458332px">Slot 456</tspan></text>

+     <path

+        style="fill:#32afff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.66700006;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        d="m 345.22002,155.59543 c -39.72131,0 -79.44418,0 -119.16627,0 0,0 0,9.33257 0,9.33257 0,0 119.16627,0 119.16627,0"

+        id="path19329-1-4-8"

+        inkscape:connector-curvature="0"

+        inkscape:path-effect="#path-effect19331-7-4-4"

+        inkscape:original-d="m 345.22002,155.59543 c -39.72131,-2.5e-4 -119.16627,0 -119.16627,0 0,0 0,9.33257 0,9.33257 0,0 119.16627,0 119.16627,0" />

+     <rect

+        style="opacity:1;fill:#32afff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-1-8"

+        width="40"

+        height="10"

+        x="-172.57083"

+        y="155.59544" />

+     <rect

+        style="opacity:1;fill:#32afff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-72-8"

+        width="40"

+        height="10"

+        x="-132.57083"

+        y="155.59544" />

+     <rect

+        style="opacity:1;fill:#32afff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-3-7-9"

+        width="78.62458"

+        height="10"

+        x="-92.570824"

+        y="155.59544" />

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-94-2-7"

+        width="40"

+        height="10"

+        x="-13.946233"

+        y="155.59544" />

+     <rect

+        style="opacity:1;fill:#00fd00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-6-2-7"

+        width="40"

+        height="10"

+        x="26.053736"

+        y="155.59544" />

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-94-4-6-6"

+        width="40"

+        height="10"

+        x="66.053719"

+        y="155.59544" />

+     <rect

+        style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-6-5-1-4"

+        width="40"

+        height="10"

+        x="106.05372"

+        y="155.59544" />

+     <rect

+        style="opacity:1;fill:#32afff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-94-4-5-0-3"

+        width="40"

+        height="10"

+        x="146.05373"

+        y="155.59544" />

+     <rect

+        style="opacity:1;fill:#32afff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-6-5-5-6-6-0"

+        width="40"

+        height="10"

+        x="186.05382"

+        y="155.59544" />

+     <path

+        style="fill:#32afff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        d="m 266.05375,155.59543 c -13.33307,0 -26.66667,0 -40,0 0,0 0,10 0,10 0,0 40,0 40,0"

+        id="path19329-1-3"

+        inkscape:connector-curvature="0"

+        inkscape:path-effect="#path-effect19331-7-0"

+        inkscape:original-d="m 266.05375,155.59543 c -13.33307,-2.6e-4 -40,0 -40,0 0,0 0,10 0,10 0,0 40,0 40,0" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-170.67537"

+        y="162.20573"

+        id="text19335-5-0"><tspan

+          sodipodi:role="line"

+          id="tspan19333-9-9"

+          x="-170.67537"

+          y="162.20573"

+          style="font-size:7.05555534px;stroke-width:0.26458332px">Barrier</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="188.5313"

+        y="162.07274"

+        id="text19335-0-4-2"><tspan

+          sodipodi:role="line"

+          id="tspan19333-6-9-5"

+          x="188.5313"

+          y="162.07274"

+          style="font-size:7.05555534px;stroke-width:0.26458332px">Barrier</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-132.04167"

+        y="162.47462"

+        id="text19357-0-4"><tspan

+          sodipodi:role="line"

+          id="tspan19355-9-0"

+          x="-132.04167"

+          y="162.47462"

+          style="stroke-width:0.26458332px">Total length</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-91.141792"

+        y="162.70409"

+        id="text19361-1-5"><tspan

+          sodipodi:role="line"

+          id="tspan19359-7-9"

+          x="-91.141792"

+          y="162.70409"

+          style="stroke-width:0.26458332px">Expiration time</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="108.20182"

+        y="162.70409"

+        id="text19369-1-9"><tspan

+          sodipodi:role="line"

+          id="tspan19367-5-2"

+          x="108.20182"

+          y="162.70409"

+          style="stroke-width:0.26458332px">I787</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="149.15788"

+        y="162.70409"

+        id="text19373-9-2"><tspan

+          sodipodi:role="line"

+          id="tspan19371-7-4"

+          x="149.15788"

+          y="162.70409"

+          style="stroke-width:0.26458332px">Padding</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="227.808"

+        y="162.34163"

+        id="text19385-6-8"><tspan

+          sodipodi:role="line"

+          id="tspan19383-5-1"

+          x="227.808"

+          y="162.34163"

+          style="stroke-width:0.26458332px">Payload data (passwd, group, initgr)</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46666622px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-207.7162"

+        y="163.51611"

+        id="text22585-2"><tspan

+          sodipodi:role="line"

+          id="tspan22583-8"

+          x="-207.7162"

+          y="163.51611"

+          style="stroke-width:0.26458332px">Slot 789</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46666622px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-174.09435"

+        y="52.519901"

+        id="text22780"><tspan

+          sodipodi:role="line"

+          id="tspan22778"

+          x="-174.09435"

+          y="52.519901"

+          style="stroke-width:0.26458332px">Hash table element 111: </tspan></text>

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-94-2-93"

+        width="40"

+        height="10"

+        x="-80.188988"

+        y="44.380741" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-78.400963"

+        y="51.126926"

+        id="text19377-7-6"><tspan

+          sodipodi:role="line"

+          id="tspan19375-6-8"

+          x="-78.400963"

+          y="51.126926"

+          style="stroke-width:0.26458332px">456</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="71.464119"

+        y="103.40742"

+        id="text19377-7-6-0"><tspan

+          sodipodi:role="line"

+          id="tspan19375-6-8-2"

+          x="71.464119"

+          y="103.40742"

+          style="stroke-width:0.26458332px">111</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="71.015663"

+        y="132.5564"

+        id="text19377-7-6-0-1"><tspan

+          sodipodi:role="line"

+          id="tspan19375-6-8-2-0"

+          x="71.015663"

+          y="132.5564"

+          style="stroke-width:0.26458332px">111</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="70.118782"

+        y="162.60233"

+        id="text19377-7-6-0-1-5"><tspan

+          sodipodi:role="line"

+          id="tspan19375-6-8-2-0-1"

+          x="70.118782"

+          y="162.60233"

+          style="stroke-width:0.26458332px">111</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46666622px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="27.706522"

+        y="161.94078"

+        id="text22917"><tspan

+          sodipodi:role="line"

+          id="tspan22915"

+          x="27.706522"

+          y="161.94078"

+          style="font-size:4.23333311px;stroke-width:0.26458332px">MC_INVALID_VAL</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46666622px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="30.868723"

+        y="132.59712"

+        id="text22917-4"><tspan

+          sodipodi:role="line"

+          id="tspan22915-6"

+          x="30.868723"

+          y="132.59712"

+          style="font-size:4.23333311px;stroke-width:0.26458332px">MC_INVALID_VAL</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46666622px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="31.559336"

+        y="103.72565"

+        id="text22917-4-2"><tspan

+          sodipodi:role="line"

+          id="tspan22915-6-5"

+          x="31.559336"

+          y="103.72565"

+          style="font-size:4.23333311px;stroke-width:0.26458332px">MC_INVALID_VAL</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46666622px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-10.12827"

+        y="161.7009"

+        id="text22917-8"><tspan

+          sodipodi:role="line"

+          id="tspan22915-62"

+          x="-10.12827"

+          y="161.7009"

+          style="font-size:4.23333311px;stroke-width:0.26458332px">MC_INVALID_VAL</tspan></text>

+     <path

+        style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker22993)"

+        d="m -59.740525,53.865202 c -56.179875,9.711946 -112.410245,19.43262 -137.074945,32.213358 -24.66471,12.780737 -17.78858,28.62573 -10.91235,44.47097"

+        id="path22981"

+        inkscape:connector-curvature="0"

+        inkscape:path-effect="#path-effect22983"

+        inkscape:original-d="m -59.740525,53.865202 c -56.205005,9.56659 -112.410275,19.432431 -168.615825,29.14901 6.8765,15.844941 13.75262,31.689938 20.62853,47.535318" />

+     <path

+        style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker23151)"

+        d="m 6.6295354,125.16818 c -3.5876546,-2.39177 -7.17502306,-4.78336 -40.4351624,-6.13103 -33.260139,-1.34768 -96.190663,-1.65122 -129.301193,-3.14604 -33.11054,-1.49481 -36.39929,-4.18088 -39.68809,-6.86699"

+        id="path23139"

+        inkscape:connector-curvature="0"

+        inkscape:path-effect="#path-effect23141"

+        inkscape:original-d="m 6.6295354,125.16818 c -3.58745,-2.39208 -7.17481997,-4.78366 -10.76271,-7.17515 -62.9325904,-0.30383 -125.8631154,-0.60737 -188.7954254,-0.91066 -3.28852,-2.68636 -6.57728,-5.37243 -9.86631,-8.05825"

+        sodipodi:nodetypes="cccc" />

+     <path

+        style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker23315)"

+        d="M 4.3873054,95.570732 C -71.999533,87.365108 -148.68214,79.127712 -187.54874,79.809432 c -38.86661,0.681719 -40.06016,10.23015 -37.36942,25.178738 2.69074,14.94859 9.26775,35.27753 15.84502,55.60726"

+        id="path23303"

+        inkscape:connector-curvature="0"

+        inkscape:path-effect="#path-effect23305"

+        inkscape:original-d="M 4.3873054,95.570732 C -71.997795,87.348931 -148.68211,79.127433 -225.21723,70.906162 c -1.34506,9.566622 -2.39143,19.13345 -3.58756,28.700571 6.57767,20.329927 13.15469,40.658867 19.73165,60.988697" />

+   </g>

+ </svg>

@@ -0,0 +1,856 @@ 

+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>

+ <!-- Created with Inkscape (http://www.inkscape.org/) -->

+ 

+ <svg

+    xmlns:dc="http://purl.org/dc/elements/1.1/"

+    xmlns:cc="http://creativecommons.org/ns#"

+    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

+    xmlns:svg="http://www.w3.org/2000/svg"

+    xmlns="http://www.w3.org/2000/svg"

+    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"

+    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"

+    width="399.73749mm"

+    height="66.748795mm"

+    viewBox="0 0 399.73749 66.748795"

+    version="1.1"

+    id="svg29593"

+    inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"

+    sodipodi:docname="memory_cache_initgr.svg">

+   <defs

+      id="defs29587">

+     <marker

+        inkscape:stockid="Arrow1Lend"

+        orient="auto"

+        refY="0"

+        refX="0"

+        id="marker1717"

+        style="overflow:visible"

+        inkscape:isstock="true"

+        inkscape:collect="always">

+       <path

+          inkscape:connector-curvature="0"

+          id="path1356"

+          d="M 0,0 5,-5 -12.5,0 5,5 Z"

+          style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"

+          transform="matrix(-0.8,0,0,-0.8,-10,0)" />

+     </marker>

+     <inkscape:path-effect

+        effect="bspline"

+        id="path-effect1714"

+        is_visible="true"

+        weight="33.333333"

+        steps="2"

+        helper_size="0"

+        apply_no_weight="true"

+        apply_with_weight="true"

+        only_selected="false" />

+     <inkscape:path-effect

+        effect="bspline"

+        id="path-effect1710"

+        is_visible="true"

+        weight="33.333333"

+        steps="2"

+        helper_size="0"

+        apply_no_weight="true"

+        apply_with_weight="true"

+        only_selected="false" />

+     <inkscape:path-effect

+        effect="bspline"

+        id="path-effect1351"

+        is_visible="true"

+        weight="33.333333"

+        steps="2"

+        helper_size="0"

+        apply_no_weight="true"

+        apply_with_weight="true"

+        only_selected="false" />

+     <marker

+        inkscape:stockid="Arrow1Lend"

+        orient="auto"

+        refY="0"

+        refX="0"

+        id="marker1717-1"

+        style="overflow:visible"

+        inkscape:isstock="true"

+        inkscape:collect="always">

+       <path

+          inkscape:connector-curvature="0"

+          id="path1356-2"

+          d="M 0,0 5,-5 -12.5,0 5,5 Z"

+          style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"

+          transform="matrix(-0.8,0,0,-0.8,-10,0)" />

+     </marker>

+     <inkscape:path-effect

+        effect="bspline"

+        id="path-effect1714-2"

+        is_visible="true"

+        weight="33.333333"

+        steps="2"

+        helper_size="0"

+        apply_no_weight="true"

+        apply_with_weight="true"

+        only_selected="false" />

+   </defs>

+   <sodipodi:namedview

+      id="base"

+      pagecolor="#ffffff"

+      bordercolor="#666666"

+      borderopacity="1.0"

+      inkscape:pageopacity="0.0"

+      inkscape:pageshadow="2"

+      inkscape:zoom="0.87885424"

+      inkscape:cx="727.95421"

+      inkscape:cy="-34.222781"

+      inkscape:document-units="mm"

+      inkscape:current-layer="layer1"

+      showgrid="false"

+      inkscape:window-width="1920"

+      inkscape:window-height="1016"

+      inkscape:window-x="1920"

+      inkscape:window-y="27"

+      inkscape:window-maximized="1" />

+   <metadata

+      id="metadata29590">

+     <rdf:RDF>

+       <cc:Work

+          rdf:about="">

+         <dc:format>image/svg+xml</dc:format>

+         <dc:type

+            rdf:resource="http://purl.org/dc/dcmitype/StillImage" />

+         <dc:title></dc:title>

+       </cc:Work>

+     </rdf:RDF>

+   </metadata>

+   <g

+      inkscape:label="Ebene 1"

+      inkscape:groupmode="layer"

+      id="layer1"

+      transform="translate(158.34782,-73.029762)">

+     <rect

+        style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.81475294;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-6-0"

+        width="158.93452"

+        height="10.185247"

+        x="-117.61311"

+        y="127.23772" />

+     <rect

+        style="opacity:1;fill:#32afff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-1-8"

+        width="40"

+        height="10"

+        x="-157.73492"

+        y="73.529762" />

+     <rect

+        style="opacity:1;fill:#32afff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-72-8"

+        width="40"

+        height="10"

+        x="-117.73492"

+        y="73.529762" />

+     <rect

+        style="opacity:1;fill:#32afff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-3-7-9"

+        width="78.62458"

+        height="10"

+        x="-77.734917"

+        y="73.529762" />

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-94-2-7"

+        width="40"

+        height="10"

+        x="0.88966733"

+        y="73.529762" />

+     <rect

+        style="opacity:1;fill:#00fd00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-6-2-7"

+        width="40"

+        height="10"

+        x="40.889637"

+        y="73.529762" />

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-94-4-6-6"

+        width="40"

+        height="10"

+        x="80.889633"

+        y="73.529762" />

+     <rect

+        style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-6-5-1-4"

+        width="40"

+        height="10"

+        x="120.88962"

+        y="73.529762" />

+     <rect

+        style="opacity:1;fill:#32afff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-94-4-5-0-3"

+        width="40"

+        height="10"

+        x="160.88962"

+        y="73.529762" />

+     <rect

+        style="opacity:1;fill:#32afff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-6-5-5-6-6-0"

+        width="40"

+        height="10"

+        x="200.88968"

+        y="73.529762" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-155.83946"

+        y="80.140053"

+        id="text19335-5-0"><tspan

+          sodipodi:role="line"

+          id="tspan19333-9-9"

+          x="-155.83946"

+          y="80.140053"

+          style="font-size:7.05555534px;stroke-width:0.26458332px">Barrier</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="203.36719"

+        y="80.007057"

+        id="text19335-0-4-2"><tspan

+          sodipodi:role="line"

+          id="tspan19333-6-9-5"

+          x="203.36719"

+          y="80.007057"

+          style="font-size:7.05555534px;stroke-width:0.26458332px">Barrier</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-117.20576"

+        y="80.408943"

+        id="text19357-0-4"><tspan

+          sodipodi:role="line"

+          id="tspan19355-9-0"

+          x="-117.20576"

+          y="80.408943"

+          style="stroke-width:0.26458332px">Total length</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-76.305893"

+        y="80.638405"

+        id="text19361-1-5"><tspan

+          sodipodi:role="line"

+          id="tspan19359-7-9"

+          x="-76.305893"

+          y="80.638405"

+          style="stroke-width:0.26458332px">Expiration time</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="123.03772"

+        y="80.638405"

+        id="text19369-1-9"><tspan

+          sodipodi:role="line"

+          id="tspan19367-5-2"

+          x="123.03772"

+          y="80.638405"

+          style="stroke-width:0.26458332px">1787</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="163.9938"

+        y="80.638405"

+        id="text19373-9-2"><tspan

+          sodipodi:role="line"

+          id="tspan19371-7-4"

+          x="163.9938"

+          y="80.638405"

+          style="stroke-width:0.26458332px">Padding</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="84.954681"

+        y="80.536644"

+        id="text19377-7-6-0-1-5"><tspan

+          sodipodi:role="line"

+          id="tspan19375-6-8-2-0-1"

+          x="84.954681"

+          y="80.536644"

+          style="stroke-width:0.26458332px">111</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46666622px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="42.542423"

+        y="79.875099"

+        id="text22917"><tspan

+          sodipodi:role="line"

+          id="tspan22915"

+          x="42.542423"

+          y="79.875099"

+          style="font-size:4.23333311px;stroke-width:0.26458332px">MC_INVALID_VAL</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46666622px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="4.7076302"

+        y="79.635216"

+        id="text22917-8"><tspan

+          sodipodi:role="line"

+          id="tspan22915-62"

+          x="4.7076302"

+          y="79.635216"

+          style="font-size:4.23333311px;stroke-width:0.26458332px">MC_INVALID_VAL</tspan></text>

+     <rect

+        style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-6"

+        width="40"

+        height="10"

+        x="-157.73492"

+        y="101.57563" />

+     <rect

+        style="opacity:1;fill:#32afff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7"

+        width="40"

+        height="10"

+        x="-117.73492"

+        y="101.57563" />

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:0.98815548;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-94-3"

+        width="39.011845"

+        height="10.011845"

+        x="-37.740852"

+        y="101.56971" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-155.83948"

+        y="108.18587"

+        id="text19335-09"><tspan

+          sodipodi:role="line"

+          id="tspan19333-3"

+          x="-155.83948"

+          y="108.18587"

+          style="font-size:7.05555534px;stroke-width:0.26458332px">uniquename</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-116.14745"

+        y="108.45477"

+        id="text19357-6"><tspan

+          sodipodi:role="line"

+          id="tspan19355-2"

+          x="-116.14745"

+          y="108.45477"

+          style="stroke-width:0.26458332px">name</tspan></text>

+     <rect

+        style="opacity:1;fill:#32afff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-7"

+        width="40"

+        height="10"

+        x="-77.734917"

+        y="101.57563" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-76.305916"

+        y="108.68425"

+        id="text19361-6"><tspan

+          sodipodi:role="line"

+          id="tspan19359-1"

+          x="-76.305916"

+          y="108.68425"

+          style="stroke-width:0.26458332px">strs</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-36.476082"

+        y="108.32181"

+        id="text19377-3"><tspan

+          sodipodi:role="line"

+          id="tspan19375-7"

+          x="-36.476082"

+          y="108.32181"

+          style="stroke-width:0.26458332px">strs_len</tspan></text>

+     <path

+        style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1717)"

+        d="m -137.94133,111.47728 c 1.37326,3.55045 2.74657,7.10105 6.13471,9.72789 3.38815,2.62684 8.79091,4.32972 14.19351,6.03255"

+        id="path1712"

+        inkscape:connector-curvature="0"

+        inkscape:path-effect="#path-effect1714"

+        inkscape:original-d="m -137.94133,111.47728 c 1.37358,3.55033 2.74689,7.10093 4.11994,10.6518 5.40302,1.70261 10.80578,3.40549 16.20828,5.10864"

+        sodipodi:nodetypes="ccc" />

+     <rect

+        style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-36"

+        width="9.9532423"

+        height="10.489118"

+        x="-117.73492"

+        y="127.54479" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-113.8037"

+        y="136.25751"

+        id="text30492-0"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-5"

+          x="-113.8037"

+          y="136.25751"

+          style="stroke-width:0.26733679px">u</tspan></text>

+     <rect

+        style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-3-02"

+        width="9.9532433"

+        height="10.489118"

+        x="-107.78168"

+        y="127.54479" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-103.95792"

+        y="136.25751"

+        id="text30492-3-9"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-8-4"

+          x="-103.95792"

+          y="136.25751"

+          style="stroke-width:0.26733679px">n</tspan></text>

+     <rect

+        style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-0-35"

+        width="9.9532433"

+        height="10.489118"

+        x="-97.82843"

+        y="127.54479" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-94.112122"

+        y="136.25751"

+        id="text30492-5-1"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-6-74"

+          x="-94.112122"

+          y="136.25751"

+          style="stroke-width:0.26733679px">i</tspan></text>

+     <rect

+        style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-3-6-3"

+        width="9.9532433"

+        height="10.489118"

+        x="-87.875183"

+        y="127.54479" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#003000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-84.266342"

+        y="136.25751"

+        id="text30492-3-4-1"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-8-0-4"

+          x="-84.266342"

+          y="136.25751"

+          style="fill:#003000;fill-opacity:1;stroke-width:0.26733679px">q</tspan></text>

+     <rect

+        style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-04-6"

+        width="9.9532433"

+        height="10.489118"

+        x="-77.921936"

+        y="127.54479" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-74.420547"

+        y="136.25751"

+        id="text30492-6-9"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-2-4"

+          x="-74.420547"

+          y="136.25751"

+          style="stroke-width:0.26733679px">u</tspan></text>

+     <rect

+        style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-3-67-2"

+        width="9.9532433"

+        height="10.489118"

+        x="-67.968689"

+        y="127.54479" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-64.574783"

+        y="136.25751"

+        id="text30492-3-5-2"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-8-6-6"

+          x="-64.574783"

+          y="136.25751"

+          style="stroke-width:0.26733679px">e</tspan></text>

+     <rect

+        style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-0-9-4"

+        width="9.9532433"

+        height="10.489118"

+        x="-58.015442"

+        y="127.54479" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-54.728973"

+        y="136.25751"

+        id="text30492-5-8-1"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-6-7-28"

+          x="-54.728973"

+          y="136.25751"

+          style="stroke-width:0.26733679px">n</tspan></text>

+     <rect

+        style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.99264348;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-6-0-1"

+        width="200.33063"

+        height="10.007357"

+        x="41.517025"

+        y="127.54479" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46666622px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="124.98372"

+        y="134.86037"

+        id="text22917-8-3"><tspan

+          sodipodi:role="line"

+          id="tspan22915-62-7"

+          x="124.98372"

+          y="134.86037"

+          style="font-size:4.23333311px;stroke-width:0.26458332px">MC_INVALID_VAL</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46666622px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="70.946098"

+        y="111.57689"

+        id="text35325"><tspan

+          sodipodi:role="line"

+          id="tspan35323"

+          x="70.946098"

+          y="117.18606"

+          style="stroke-width:0.26458332px"></tspan></text>

+     <rect

+        style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-36-7"

+        width="9.9532423"

+        height="10.489118"

+        x="-48.06221"

+        y="127.54479" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-44.883163"

+        y="136.25751"

+        id="text30492-0-2"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-5-6"

+          x="-44.883163"

+          y="136.25751"

+          style="stroke-width:0.26733679px">a</tspan></text>

+     <rect

+        style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-3-02-4"

+        width="9.9532433"

+        height="10.489118"

+        x="-38.108963"

+        y="127.54479" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-35.037384"

+        y="136.25751"

+        id="text30492-3-9-5"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-8-4-2"

+          x="-35.037384"

+          y="136.25751"

+          style="stroke-width:0.26733679px">m</tspan></text>

+     <rect

+        style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-0-35-0"

+        width="9.9532433"

+        height="10.489118"

+        x="-28.155708"

+        y="127.54479" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-25.191587"

+        y="136.25751"

+        id="text30492-5-1-2"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-6-74-9"

+          x="-25.191587"

+          y="136.25751"

+          style="stroke-width:0.26733679px">e</tspan></text>

+     <rect

+        style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-3-6-3-0"

+        width="9.9532433"

+        height="10.489118"

+        x="-18.202454"

+        y="127.54479" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-15.345809"

+        y="136.25751"

+        id="text30492-3-4-1-9"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-8-0-4-9"

+          x="-15.345809"

+          y="136.25751"

+          style="stroke-width:0.26733679px">0</tspan></text>

+     <flowRoot

+        xml:space="preserve"

+        id="flowRoot35424"

+        style="fill:black;stroke:none;stroke-opacity:1;stroke-width:1px;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:1;font-family:Cantarell;font-style:normal;font-weight:normal;font-size:32px;line-height:86.50000095%;letter-spacing:0px;word-spacing:0px;-inkscape-font-specification:Cantarell;font-stretch:normal;font-variant:normal"><flowRegion

+          id="flowRegion35426"><rect

+            id="rect35428"

+            width="892.8396"

+            height="70.914848"

+            x="613.29852"

+            y="74.775078" /></flowRegion><flowPara

+          id="flowPara35430"></flowPara></flowRoot>    <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-94-2-7-7"

+        width="40"

+        height="10"

+        x="2.196516"

+        y="101.64424" />

+     <rect

+        style="opacity:1;fill:#00fd00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-6-2-7-5"

+        width="40"

+        height="10"

+        x="42.196495"

+        y="101.64424" />

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-94-4-6-6-9"

+        width="40"

+        height="10"

+        x="82.196487"

+        y="101.64424" />

+     <rect

+        style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-6-5-1-4-7"

+        width="40"

+        height="10"

+        x="122.19647"

+        y="101.64424" />

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-94-4-5-0-3-8"

+        width="40"

+        height="10"

+        x="162.19647"

+        y="101.64424" />

+     <rect

+        style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-6-5-5-6-6-0-5"

+        width="40"

+        height="10"

+        x="202.19655"

+        y="101.64424" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="204.67404"

+        y="108.12154"

+        id="text19335-0-4-2-3"><tspan

+          sodipodi:role="line"

+          id="tspan19333-6-9-5-3"

+          x="204.67404"

+          y="108.12154"

+          style="font-size:7.05555534px;stroke-width:0.26458332px">GID4</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="124.34457"

+        y="108.75288"

+        id="text19369-1-9-8"><tspan

+          sodipodi:role="line"

+          id="tspan19367-5-2-3"

+          x="124.34457"

+          y="108.75288"

+          style="stroke-width:0.26458332px">GID2</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="165.30066"

+        y="108.75288"

+        id="text19373-9-2-7"><tspan

+          sodipodi:role="line"

+          id="tspan19371-7-4-9"

+          x="165.30066"

+          y="108.75288"

+          style="stroke-width:0.26458332px">GID3</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="86.261543"

+        y="108.65112"

+        id="text19377-7-6-0-1-5-3"><tspan

+          sodipodi:role="line"

+          id="tspan19375-6-8-2-0-1-7"

+          x="86.261543"

+          y="108.65112"

+          style="stroke-width:0.26458332px">GID1</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="6.0144787"

+        y="108.27884"

+        id="text22917-8-1"><tspan

+          sodipodi:role="line"

+          id="tspan22915-62-9"

+          x="6.0144787"

+          y="108.27884"

+          style="font-size:7.05555534px;stroke-width:0.26458332px">data_len</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="45.913357"

+        y="108.71323"

+        id="text22917-8-1-0"><tspan

+          sodipodi:role="line"

+          id="tspan22915-62-9-9"

+          x="45.913357"

+          y="108.71323"

+          style="font-size:7.05555534px;stroke-width:0.26458332px">groups#</tspan></text>

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-6-5"

+        width="40"

+        height="10"

+        x="-157.61311"

+        y="127.76689" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-155.83948"

+        y="135.17326"

+        id="text19335-09-8"><tspan

+          sodipodi:role="line"

+          id="tspan19333-3-4"

+          x="-155.83948"

+          y="135.17326"

+          style="font-size:7.05555534px;stroke-width:0.26458332px">GID5</tspan></text>

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-0-9-4-3"

+        width="9.9532433"

+        height="10.489118"

+        x="-8.2492065"

+        y="127.54479" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-5.5000143"

+        y="136.25751"

+        id="text30492-5-8-1-7"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-6-7-28-1"

+          x="-5.5000143"

+          y="136.25751"

+          style="stroke-width:0.26733679px">n</tspan></text>

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-36-7-3"

+        width="9.9532423"

+        height="10.489118"

+        x="1.7040253"

+        y="127.54479" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="4.3457956"

+        y="136.25751"

+        id="text30492-0-2-8"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-5-6-0"

+          x="4.3457956"

+          y="136.25751"

+          style="stroke-width:0.26733679px">a</tspan></text>

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-3-02-4-9"

+        width="9.9532433"

+        height="10.489118"

+        x="11.657272"

+        y="127.54479" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="14.191575"

+        y="136.25751"

+        id="text30492-3-9-5-7"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-8-4-2-9"

+          x="14.191575"

+          y="136.25751"

+          style="stroke-width:0.26733679px">m</tspan></text>

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-0-35-0-9"

+        width="9.9532433"

+        height="10.489118"

+        x="21.610519"

+        y="127.54479" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="24.037378"

+        y="136.25751"

+        id="text30492-5-1-2-3"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-6-74-9-2"

+          x="24.037378"

+          y="136.25751"

+          style="stroke-width:0.26733679px">e</tspan></text>

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-3-6-3-0-4"

+        width="9.9532433"

+        height="10.489118"

+        x="31.563782"

+        y="127.54479" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="33.883148"

+        y="136.25751"

+        id="text30492-3-4-1-9-3"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-8-0-4-9-7"

+          x="33.883148"

+          y="136.25751"

+          style="stroke-width:0.26733679px">0</tspan></text>

+     <path

+        style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1717-1)"

+        d="m -98.250156,111.78435 c 18.734347,2.54711 37.468484,5.09419 52.468646,7.72095 15.000162,2.62675 26.266306,5.33314 37.5322996,8.03949"

+        id="path1712-0"

+        inkscape:connector-curvature="0"

+        inkscape:path-effect="#path-effect1714-2"

+        inkscape:original-d="m -98.250156,111.78435 c 18.734387,2.54682 37.468524,5.0939 56.202429,7.64125 11.266453,2.70614 22.532597,5.41253 33.7985166,8.11919"

+        sodipodi:nodetypes="ccc" />

+   </g>

+ </svg>

@@ -0,0 +1,967 @@ 

+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>

+ <!-- Created with Inkscape (http://www.inkscape.org/) -->

+ 

+ <svg

+    xmlns:dc="http://purl.org/dc/elements/1.1/"

+    xmlns:cc="http://creativecommons.org/ns#"

+    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

+    xmlns:svg="http://www.w3.org/2000/svg"

+    xmlns="http://www.w3.org/2000/svg"

+    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"

+    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"

+    width="399.73749mm"

+    height="66.748795mm"

+    viewBox="0 0 399.73749 66.748795"

+    version="1.1"

+    id="svg29593"

+    inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"

+    sodipodi:docname="memory_cache_passwd.svg">

+   <defs

+      id="defs29587">

+     <marker

+        inkscape:stockid="Arrow1Lend"

+        orient="auto"

+        refY="0"

+        refX="0"

+        id="marker1717"

+        style="overflow:visible"

+        inkscape:isstock="true"

+        inkscape:collect="always">

+       <path

+          inkscape:connector-curvature="0"

+          id="path1356"

+          d="M 0,0 5,-5 -12.5,0 5,5 Z"

+          style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"

+          transform="matrix(-0.8,0,0,-0.8,-10,0)" />

+     </marker>

+     <inkscape:path-effect

+        effect="bspline"

+        id="path-effect1714"

+        is_visible="true"

+        weight="33.333333"

+        steps="2"

+        helper_size="0"

+        apply_no_weight="true"

+        apply_with_weight="true"

+        only_selected="false" />

+     <inkscape:path-effect

+        effect="bspline"

+        id="path-effect1710"

+        is_visible="true"

+        weight="33.333333"

+        steps="2"

+        helper_size="0"

+        apply_no_weight="true"

+        apply_with_weight="true"

+        only_selected="false" />

+     <inkscape:path-effect

+        effect="bspline"

+        id="path-effect1351"

+        is_visible="true"

+        weight="33.333333"

+        steps="2"

+        helper_size="0"

+        apply_no_weight="true"

+        apply_with_weight="true"

+        only_selected="false" />

+   </defs>

+   <sodipodi:namedview

+      id="base"

+      pagecolor="#ffffff"

+      bordercolor="#666666"

+      borderopacity="1.0"

+      inkscape:pageopacity="0.0"

+      inkscape:pageshadow="2"

+      inkscape:zoom="0.47"

+      inkscape:cx="300.0378"

+      inkscape:cy="-34.222781"

+      inkscape:document-units="mm"

+      inkscape:current-layer="layer1"

+      showgrid="false"

+      inkscape:window-width="1920"

+      inkscape:window-height="1016"

+      inkscape:window-x="1920"

+      inkscape:window-y="27"

+      inkscape:window-maximized="1" />

+   <metadata

+      id="metadata29590">

+     <rdf:RDF>

+       <cc:Work

+          rdf:about="">

+         <dc:format>image/svg+xml</dc:format>

+         <dc:type

+            rdf:resource="http://purl.org/dc/dcmitype/StillImage" />

+         <dc:title></dc:title>

+       </cc:Work>

+     </rdf:RDF>

+   </metadata>

+   <g

+      inkscape:label="Ebene 1"

+      inkscape:groupmode="layer"

+      id="layer1"

+      transform="translate(158.34782,-73.029762)">

+     <rect

+        style="opacity:1;fill:#32afff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-1-8"

+        width="40"

+        height="10"

+        x="-157.73492"

+        y="73.529762" />

+     <rect

+        style="opacity:1;fill:#32afff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-72-8"

+        width="40"

+        height="10"

+        x="-117.73492"

+        y="73.529762" />

+     <rect

+        style="opacity:1;fill:#32afff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-3-7-9"

+        width="78.62458"

+        height="10"

+        x="-77.734917"

+        y="73.529762" />

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-94-2-7"

+        width="40"

+        height="10"

+        x="0.88966733"

+        y="73.529762" />

+     <rect

+        style="opacity:1;fill:#00fd00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-6-2-7"

+        width="40"

+        height="10"

+        x="40.889637"

+        y="73.529762" />

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-94-4-6-6"

+        width="40"

+        height="10"

+        x="80.889633"

+        y="73.529762" />

+     <rect

+        style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-6-5-1-4"

+        width="40"

+        height="10"

+        x="120.88962"

+        y="73.529762" />

+     <rect

+        style="opacity:1;fill:#32afff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-94-4-5-0-3"

+        width="40"

+        height="10"

+        x="160.88962"

+        y="73.529762" />

+     <rect

+        style="opacity:1;fill:#32afff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-6-5-5-6-6-0"

+        width="40"

+        height="10"

+        x="200.88968"

+        y="73.529762" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-155.83946"

+        y="80.140053"

+        id="text19335-5-0"><tspan

+          sodipodi:role="line"

+          id="tspan19333-9-9"

+          x="-155.83946"

+          y="80.140053"

+          style="font-size:7.05555534px;stroke-width:0.26458332px">Barrier</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="203.36719"

+        y="80.007057"

+        id="text19335-0-4-2"><tspan

+          sodipodi:role="line"

+          id="tspan19333-6-9-5"

+          x="203.36719"

+          y="80.007057"

+          style="font-size:7.05555534px;stroke-width:0.26458332px">Barrier</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-117.20576"

+        y="80.408943"

+        id="text19357-0-4"><tspan

+          sodipodi:role="line"

+          id="tspan19355-9-0"

+          x="-117.20576"

+          y="80.408943"

+          style="stroke-width:0.26458332px">Total length</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-76.305893"

+        y="80.638405"

+        id="text19361-1-5"><tspan

+          sodipodi:role="line"

+          id="tspan19359-7-9"

+          x="-76.305893"

+          y="80.638405"

+          style="stroke-width:0.26458332px">Expiration time</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="123.03772"

+        y="80.638405"

+        id="text19369-1-9"><tspan

+          sodipodi:role="line"

+          id="tspan19367-5-2"

+          x="123.03772"

+          y="80.638405"

+          style="stroke-width:0.26458332px">1787</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="163.9938"

+        y="80.638405"

+        id="text19373-9-2"><tspan

+          sodipodi:role="line"

+          id="tspan19371-7-4"

+          x="163.9938"

+          y="80.638405"

+          style="stroke-width:0.26458332px">Padding</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="84.954681"

+        y="80.536644"

+        id="text19377-7-6-0-1-5"><tspan

+          sodipodi:role="line"

+          id="tspan19375-6-8-2-0-1"

+          x="84.954681"

+          y="80.536644"

+          style="stroke-width:0.26458332px">111</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46666622px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="42.542423"

+        y="79.875099"

+        id="text22917"><tspan

+          sodipodi:role="line"

+          id="tspan22915"

+          x="42.542423"

+          y="79.875099"

+          style="font-size:4.23333311px;stroke-width:0.26458332px">MC_INVALID_VAL</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46666622px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="4.7076302"

+        y="79.635216"

+        id="text22917-8"><tspan

+          sodipodi:role="line"

+          id="tspan22915-62"

+          x="4.7076302"

+          y="79.635216"

+          style="font-size:4.23333311px;stroke-width:0.26458332px">MC_INVALID_VAL</tspan></text>

+     <rect

+        style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-6"

+        width="40"

+        height="10"

+        x="-157.73492"

+        y="101.57563" />

+     <rect

+        style="opacity:1;fill:#32afff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7"

+        width="40"

+        height="10"

+        x="-117.73492"

+        y="101.57563" />

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:0.98815548;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-94-3"

+        width="39.011845"

+        height="10.011845"

+        x="-37.740852"

+        y="101.56971" />

+     <rect

+        style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.99954498;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-94-4-2"

+        width="239.01704"

+        height="10.000455"

+        x="1.2707648"

+        y="101.57906" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-155.83948"

+        y="108.18587"

+        id="text19335-09"><tspan

+          sodipodi:role="line"

+          id="tspan19333-3"

+          x="-155.83948"

+          y="108.18587"

+          style="font-size:7.05555534px;stroke-width:0.26458332px">name_ptr</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-116.14745"

+        y="108.45477"

+        id="text19357-6"><tspan

+          sodipodi:role="line"

+          id="tspan19355-2"

+          x="-116.14745"

+          y="108.45477"

+          style="stroke-width:0.26458332px">UID</tspan></text>

+     <rect

+        style="opacity:1;fill:#32afff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-7"

+        width="40"

+        height="10"

+        x="-77.734917"

+        y="101.57563" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-76.305916"

+        y="108.68425"

+        id="text19361-6"><tspan

+          sodipodi:role="line"

+          id="tspan19359-1"

+          x="-76.305916"

+          y="108.68425"

+          style="stroke-width:0.26458332px">GID</tspan></text>

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-36.476082"

+        y="108.32181"

+        id="text19377-3"><tspan

+          sodipodi:role="line"

+          id="tspan19375-7"

+          x="-36.476082"

+          y="108.32181"

+          style="stroke-width:0.26458332px">strs_len</tspan></text>

+     <path

+        style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1717)"

+        d="m -137.94133,111.47728 c 27.56531,4.05239 55.130383,8.10474 78.486661,8.13254 23.356278,0.0278 42.503957,-3.96894 61.6511851,-7.96558"

+        id="path1712"

+        inkscape:connector-curvature="0"

+        inkscape:path-effect="#path-effect1714"

+        inkscape:original-d="m -137.94133,111.47728 c 27.56535,4.0521 55.130426,8.10445 82.695256,12.15707 19.14764,-3.99694 38.29532,-7.99367 57.4425901,-11.99011"

+        sodipodi:nodetypes="ccc" />

+     <rect

+        style="opacity:1;fill:#00fd00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4"

+        width="9.9532423"

+        height="10.489118"

+        x="1.2733955"

+        y="101.08777" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="3.919806"

+        y="109.51173"

+        id="text30492"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490"

+          x="3.919806"

+          y="109.51173"

+          style="stroke-width:0.26733679px">u</tspan></text>

+     <rect

+        style="opacity:1;fill:#00fd00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-3"

+        width="9.9532433"

+        height="10.489118"

+        x="11.226643"

+        y="101.08777" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="13.765583"

+        y="109.51173"

+        id="text30492-3"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-8"

+          x="13.765583"

+          y="109.51173"

+          style="stroke-width:0.26733679px">s</tspan></text>

+     <rect

+        style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-0"

+        width="9.9532433"

+        height="10.489118"

+        x="21.17989"

+        y="101.08777" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="23.611391"

+        y="109.51173"

+        id="text30492-5"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-6"

+          x="23.611391"

+          y="109.51173"

+          style="stroke-width:0.26733679px">e</tspan></text>

+     <rect

+        style="opacity:1;fill:#00fd00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-3-6"

+        width="9.9532433"

+        height="10.489118"

+        x="31.133131"

+        y="101.08777" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="33.457165"

+        y="109.51173"

+        id="text30492-3-4"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-8-0"

+          x="33.457165"

+          y="109.51173"

+          style="stroke-width:0.26733679px">r</tspan></text>

+     <rect

+        style="opacity:1;fill:#00fd00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-04"

+        width="9.9532433"

+        height="10.489118"

+        x="41.086369"

+        y="101.08777" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="43.302963"

+        y="109.51173"

+        id="text30492-6"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-2"

+          x="43.302963"

+          y="109.51173"

+          style="stroke-width:0.26733679px">n</tspan></text>

+     <rect

+        style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-3-67"

+        width="9.9532433"

+        height="10.489118"

+        x="51.039608"

+        y="101.08777" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="53.148735"

+        y="109.51173"

+        id="text30492-3-5"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-8-6"

+          x="53.148735"

+          y="109.51173"

+          style="stroke-width:0.26733679px">a</tspan></text>

+     <rect

+        style="opacity:1;fill:#00fd00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-0-9"

+        width="9.9532433"

+        height="10.489118"

+        x="60.992863"

+        y="101.08777" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="62.994541"

+        y="109.51173"

+        id="text30492-5-8"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-6-7"

+          x="62.994541"

+          y="109.51173"

+          style="stroke-width:0.26733679px">m</tspan></text>

+     <rect

+        style="opacity:1;fill:#00fd00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-3-6-2"

+        width="9.9532433"

+        height="10.489118"

+        x="70.946098"

+        y="101.08777" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="72.840309"

+        y="109.51173"

+        id="text30492-3-4-8"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-8-0-2"

+          x="72.840309"

+          y="109.51173"

+          style="stroke-width:0.26733679px">e</tspan></text>

+     <rect

+        style="opacity:1;fill:#00fd00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-9"

+        width="9.9532433"

+        height="10.489118"

+        x="80.899338"

+        y="101.08777" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="82.686119"

+        y="109.51173"

+        id="text30492-9"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-60"

+          x="82.686119"

+          y="109.51173"

+          style="stroke-width:0.26733679px">0</tspan></text>

+     <rect

+        style="opacity:1;fill:#00fd00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-3-2"

+        width="9.9532433"

+        height="10.489118"

+        x="90.852585"

+        y="101.08777" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="92.531898"

+        y="109.51173"

+        id="text30492-3-7"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-8-61"

+          x="92.531898"

+          y="109.51173"

+          style="stroke-width:0.26733679px">*</tspan></text>

+     <rect

+        style="opacity:1;fill:#00fd00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-0-3"

+        width="9.9532433"

+        height="10.489118"

+        x="100.80583"

+        y="101.08777" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="102.37772"

+        y="109.51173"

+        id="text30492-5-2"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-6-1"

+          x="102.37772"

+          y="109.51173"

+          style="stroke-width:0.26733679px">0</tspan></text>

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-3-6-5"

+        width="9.9532433"

+        height="10.489118"

+        x="110.75906"

+        y="101.08777" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="112.22347"

+        y="109.51173"

+        id="text30492-3-4-9"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-8-0-9"

+          x="112.22347"

+          y="109.51173"

+          style="stroke-width:0.26733679px">g</tspan></text>

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-04-1"

+        width="9.9532433"

+        height="10.489118"

+        x="120.71231"

+        y="101.08777" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="122.06927"

+        y="109.51173"

+        id="text30492-6-4"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-2-9"

+          x="122.06927"

+          y="109.51173"

+          style="stroke-width:0.26733679px">e</tspan></text>

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-3-67-1"

+        width="9.9532433"

+        height="10.489118"

+        x="130.66556"

+        y="101.08777" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="131.91505"

+        y="109.51173"

+        id="text30492-3-5-0"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-8-6-7"

+          x="131.91505"

+          y="109.51173"

+          style="stroke-width:0.26733679px">c</tspan></text>

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-0-9-5"

+        width="9.9532433"

+        height="10.489118"

+        x="140.61882"

+        y="101.08777" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="141.76086"

+        y="109.51173"

+        id="text30492-5-8-8"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-6-7-7"

+          x="141.76086"

+          y="109.51173"

+          style="stroke-width:0.26733679px">o</tspan></text>

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-3-6-2-0"

+        width="9.9532433"

+        height="10.489118"

+        x="150.57205"

+        y="101.08777" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="151.60663"

+        y="109.51173"

+        id="text30492-3-4-8-4"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-8-0-2-8"

+          x="151.60663"

+          y="109.51173"

+          style="stroke-width:0.26733679px">s</tspan></text>

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-042"

+        width="9.9532433"

+        height="10.489118"

+        x="160.52528"

+        y="101.08777" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="161.45244"

+        y="109.51173"

+        id="text30492-96"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-1"

+          x="161.45244"

+          y="109.51173"

+          style="fill:#000000;fill-opacity:1;stroke-width:0.26733679px">0</tspan></text>

+     <rect

+        style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-3-0"

+        width="9.9532433"

+        height="10.489118"

+        x="170.47853"

+        y="101.08777" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="171.2982"

+        y="109.51173"

+        id="text30492-3-42"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-8-2"

+          x="171.2982"

+          y="109.51173"

+          style="stroke-width:0.26733679px">h</tspan></text>

+     <rect

+        style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-0-2"

+        width="9.9532433"

+        height="10.489118"

+        x="180.43178"

+        y="101.08777" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="181.14401"

+        y="109.51173"

+        id="text30492-5-0"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-6-5"

+          x="181.14401"

+          y="109.51173"

+          style="stroke-width:0.26733679px">o</tspan></text>

+     <rect

+        style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-3-6-52"

+        width="9.9532433"

+        height="10.489118"

+        x="190.38503"

+        y="101.08777" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="190.98978"

+        y="109.51173"

+        id="text30492-3-4-90"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-8-0-28"

+          x="190.98978"

+          y="109.51173"

+          style="stroke-width:0.26733679px">m</tspan></text>

+     <rect

+        style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-04-3"

+        width="9.9532433"

+        height="10.489118"

+        x="200.33826"

+        y="101.08777" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="200.83559"

+        y="109.51173"

+        id="text30492-6-8"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-2-0"

+          x="200.83559"

+          y="109.51173"

+          style="stroke-width:0.26733679px">e</tspan></text>

+     <rect

+        style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-3-67-4"

+        width="9.9532433"

+        height="10.489118"

+        x="210.2915"

+        y="101.08777" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="210.68135"

+        y="109.51173"

+        id="text30492-3-5-09"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-8-6-1"

+          x="210.68135"

+          y="109.51173"

+          style="stroke-width:0.26733679px">d</tspan></text>

+     <rect

+        style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-0-9-9"

+        width="9.9532433"

+        height="10.489118"

+        x="220.24474"

+        y="101.08777" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="220.52718"

+        y="109.51173"

+        id="text30492-5-8-6"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-6-7-2"

+          x="220.52718"

+          y="109.51173"

+          style="stroke-width:0.26733679px">i</tspan></text>

+     <rect

+        style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-3-6-2-5"

+        width="9.9532433"

+        height="10.489118"

+        x="230.19798"

+        y="101.08777" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="230.37294"

+        y="109.51173"

+        id="text30492-3-4-8-44"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-8-0-2-9"

+          x="230.37294"

+          y="109.51173"

+          style="stroke-width:0.26733679px">r</tspan></text>

+     <rect

+        style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-36"

+        width="9.9532423"

+        height="10.489118"

+        x="-157.84782"

+        y="129.034" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-153.48355"

+        y="137.76295"

+        id="text30492-0"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-5"

+          x="-153.48355"

+          y="137.76295"

+          style="stroke-width:0.26733679px">0</tspan></text>

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-3-02"

+        width="9.9532433"

+        height="10.489118"

+        x="-147.89458"

+        y="129.034" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-143.63777"

+        y="137.76295"

+        id="text30492-3-9"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-8-4"

+          x="-143.63777"

+          y="137.76295"

+          style="stroke-width:0.26733679px">s</tspan></text>

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-0-35"

+        width="9.9532433"

+        height="10.489118"

+        x="-137.94133"

+        y="129.034" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-133.79198"

+        y="137.76295"

+        id="text30492-5-1"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-6-74"

+          x="-133.79198"

+          y="137.76295"

+          style="stroke-width:0.26733679px">h</tspan></text>

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-3-6-3"

+        width="9.9532433"

+        height="10.489118"

+        x="-127.98808"

+        y="129.034" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-123.9462"

+        y="137.76295"

+        id="text30492-3-4-1"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-8-0-4"

+          x="-123.9462"

+          y="137.76295"

+          style="stroke-width:0.26733679px">e</tspan></text>

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-04-6"

+        width="9.9532433"

+        height="10.489118"

+        x="-118.03484"

+        y="129.034" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-114.1004"

+        y="137.76295"

+        id="text30492-6-9"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-2-4"

+          x="-114.1004"

+          y="137.76295"

+          style="stroke-width:0.26733679px">l</tspan></text>

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-3-67-2"

+        width="9.9532433"

+        height="10.489118"

+        x="-108.0816"

+        y="129.034" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-104.25463"

+        y="137.76295"

+        id="text30492-3-5-2"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-8-6-6"

+          x="-104.25463"

+          y="137.76295"

+          style="stroke-width:0.26733679px">l</tspan></text>

+     <rect

+        style="opacity:1;fill:#00cd00;fill-opacity:1;stroke:#000000;stroke-width:0.51088327;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-9-7-8-4-0-9-4"

+        width="9.9532433"

+        height="10.489118"

+        x="-98.128349"

+        y="129.034" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.55477715px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26733679px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="-94.408821"

+        y="137.76295"

+        id="text30492-5-8-1"

+        transform="scale(1.0109137,0.98920413)"><tspan

+          sodipodi:role="line"

+          id="tspan30490-6-7-28"

+          x="-94.408821"

+          y="137.76295"

+          style="stroke-width:0.26733679px">0</tspan></text>

+     <rect

+        style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-6-0"

+        width="69.672714"

+        height="10"

+        x="-157.84782"

+        y="129.034" />

+     <rect

+        style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"

+        id="rect19224-6-0-1"

+        width="328.36194"

+        height="9.9459085"

+        x="-88.17511"

+        y="129.034" />

+     <text

+        xml:space="preserve"

+        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46666622px;line-height:86.50000095%;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"

+        x="44.60207"

+        y="135.16142"

+        id="text22917-8-3"><tspan

+          sodipodi:role="line"

+          id="tspan22915-62-7"

+          x="44.60207"

+          y="135.16142"

+          style="font-size:4.23333311px;stroke-width:0.26458332px">MC_INVALID_VAL</tspan></text>

+   </g>

+ </svg>

The added file is too large to be shown here, see it at: developers/memory_cache_tables.svg
@@ -0,0 +1,487 @@ 

+ How does the memory mapped cache work

+ =====================================

+ 

+ The memory mapped cache allows client applications to look up user and group

+ information very fast because the data will be mapped into the memory of the

+ application. As long as the data is on the cache and valid no additional

+ communication with other processes is needed.

+ 

+ This memory area is organized in 4 parts:

+ 

+ The Header

+ ----------

+ 

+ At the beginning there is a header block which is defined in

+ ``src/util/mmap_cache.h`` as::

+ 

+     struct sss_mc_header {

+         uint32_t b1;            /* barrier 1 */

+         uint32_t major_vno;     /* major version number */

+         uint32_t minor_vno;     /* minor version number */

+         uint32_t status;        /* database status */

+         uint32_t seed;          /* random seed used to avoid collision attacks */

+         uint32_t dt_size;       /* data table size */

+         uint32_t ft_size;       /* free table size */

+         uint32_t ht_size;       /* hash table size */

+         rel_ptr_t data_table;   /* data table pointer relative to mmap base */

+         rel_ptr_t free_table;   /* free table pointer relative to mmap base */

+         rel_ptr_t hash_table;   /* hash table pointer relative to mmap base */

+         rel_ptr_t reserved;     /* reserved for future changes */

+         uint32_t b2;            /* barrier 2 */

+     };

+ 

+ The ``major_vno`` and ``minor_vno`` are used to tell the client about how the

+ cache and the data is organized. With ``status`` SSSD can tell the client if the

+ cache is valid or if e.g. the cache is recycled. In the latter case the client

+ must close the current cache file and open a newly created.

+ 

+ ``b1`` and ``b2`` are used to implement a full memory barrier with the help of

+ GCC's ``__sync_synchronize()`` built-in function. The memory barrier is used to

+ make sure the header data can be updated without other processes interfering.

+ 

+ ``seed`` is a random seed for the hash function used to create lookup hashes

+ from the provided name or ID. It is generated randomly whenever the cache file

+ is created.

+ 

+ ``dt_size``, ``ft_size`` and ``ht_size`` are the sizes of the remaining three

+ sections of the memory mapped cache and ``data_table``, ``free_table`` and

+ ``hash_table`` are the starting points of the sections relative to the start of

+ the header.

+ 

+ The Data Table

+ --------------

+ 

+ This is the main area to store the user and group data. It is organized in slots

+ with a defined size. The current slot size is 40 bytes. Since the slot size is

+ not given in the header the ``major_vno`` or ``minor_vno`` must be changed if

+ the slot size is changed. Each data record for an individual user or group (see

+ below) can occupy one or more consecutive slots.

+ 

+ At startup the data table is initialized with 0xff (all bits set) which is

+ treated as invalid value by the memory cache code independent if 1, 4 or 8 bytes

+ are read.

+ 

+ The Free Table

+ --------------

+ 

+ The memory area is treated as bit-field. Each bit corresponds to a slot in the

+ data table starting with the highest bit (0x80) of the first byte in the free

+ table.

+ 

+ At startup the free table is initialized with 0x00 (no bit set) which

+ corresponds to a completely empty data table.

+ 

+ The Hash Table

+ --------------

+ 

+ The hash table it treated as an array of uint32_t values. The index used to

+ access the array is the hash value calculated from the user or group name or ID

+ and the hash value is the slot number in the data table where the data record

+ for the object starts.

+ 

+ At startup the hash table is initialized with 0xff which indicates that there is

+ no data available for the give hash.

+ 

+ Sizes of the tables

+ -------------------

+ 

+ From the previous sections it became clear that although the sizes of the data,

+ free and hash table are handled independently they are connected. Of course the

+ free table should have at least so many bit as there are slots in the data

+ table. But having more would be a waste of space (although not as much as having

+ lesser bits). So number of bits and slots should match.

+ 

+ The size of the data table should be large enough to help the amount of expected

+ data where expected do not necessarily mean e.g. all possible users but the

+ amount of data needed on the host running SSSD to work efficiently. It should be

+ large enough so that data in active use has not to be overwritten constantly

+ with other data. So let's say there should of *N* data elements in the cache

+ (currently the hard-coded default is ``#define SSS_MC_CACHE_ELEMENTS 50000``).

+ Depending on the slot size and the type of data one slot might not be sufficient

+ to hold a data element of average size so there is a payload which says how many

+ slots are used typically for a data element. See below for a discussion about

+ the payload of the current data types. For the size of the data table we now

+ have *N* times the payload size.

+ 

+ With the number of data elements *N* we now can define the size of the hash

+ table as well. Since the data typically can be accessed either by name or ID we

+ need 2 times *N* entries in the hash table array for the ideal case where no

+ hash collisions occur. Since we always have to expect and handle hash collisions

+ it won't help to use more memory for the hash table. On the other hand hash

+ collisions should be avoided where possible because they make the handling of

+ the memory cache more complex and slower. Since using less than 2 times *N*

+ entries will force hash collisions if the cache is filled with the expected

+ number of elements just using ``2 * N * sizeof(uint32_t)`` for the hash table

+ size looks like a good compromise.

+ 

+ .. image:: memory_cache_tables.svg

+ 

+ How the data is organized

+ -------------------------

+ 

+ Currently there are three different kind of data elements

+ 

+ passwd

+     For user data defined by ``struct passwd``, see ``man getpwnam`` for details

+ 

+ group

+     For group data defined by ``struct group``, see ``man getgrnam`` for details

+ 

+ initgroups

+     For the group memberships of user

+ 

+ All three types are stored in individual cache files. This allows to handle the

+ payload size flexible and avoids hash collisions of different data types

+ accessed with the same name. Besides the type specific data all data elements

+ start with a common header.

+ 

+ The Record Header

+ ^^^^^^^^^^^^^^^^^

+ 

+ Similar the cache header the record header is defined in

+ ``src/util/mmap_cache.h`` as::

+ 

+     struct sss_mc_rec {

+         uint32_t b1;            /* barrier 1 */

+         uint32_t len;           /* total record length including record data */

+         uint64_t expire;        /* record expiration time (cast to time_t) */

+         rel_ptr_t next1;        /* ptr of next record rel to data_table */

+                                 /* next1 is related to hash1 */

+         rel_ptr_t next2;        /* ptr of next record rel to data_table */

+                                 /* next2 is related to hash2 */

+         uint32_t hash1;         /* val of first hash (usually name of record) */

+         uint32_t hash2;         /* val of second hash (usually id of record) */

+         uint32_t padding;       /* padding & reserved for future changes */

+         uint32_t b2;            /* barrier 2 - 32 bytes mark, fits a slot */

+         char data[0];

+     };

+ 

+ Similar as in the cache header ``b1`` and ``b2`` (the *32* in the comment is

+ wrong, it is kept here because it is the same in the source code as well) are

+ used for memory barriers.  ``len`` is the total length of the data record which

+ includes the header size and the type specific data which starts at ``data``. If

+ the current time return by ``time()`` is larger than the value stored ``expire``

+ the data in the memory should not be used anymore but SSSD's nss responder

+ should be called to refresh the data.

+ 

+ ``hash1`` and ``hash2`` are the two has values which are used to find the right

+ starting slot of the data record in the hash table. In theory they are not

+ needed here but are used for a fast and easy consistency check.

+ 

+ Finally ``next1`` and ``next2`` are used to handle hash collisions. Both value

+ are initialized with ``MC_INVALID_VAL``. If a hash collision is detected, i.e.

+ there is already a data record with the same hash stored in the cache the

+ ``next1`` or ``next2`` elements are checked depending if the hash collisions was

+ found with ``hash1`` or ``hash2`` of the old record. If the related ``next[12]``

+ element is ``MC_INVALID_VAL`` the slot number of the new data record is added

+ here. If there is a different value stored in ``next[12]`` it is assumed to be

+ the slot number of another data record with the same hash. In this case the

+ chain is followed by reading the data record from the next slot until the

+ ``next[12]`` element of the current data record is ``MC_INVALID_VAL``. Then the

+ slot number of the new data record is stored here.

+ 

+ 

+ .. image:: memory_cache_hash_collision.svg

+ 

+ The Passwd (User) Data

+ ^^^^^^^^^^^^^^^^^^^^^^

+ 

+ The passwd/user data is defined in ``src/util/mmap_cache.h`` as::

+ 

+     struct sss_mc_pwd_data {

+         rel_ptr_t name;         /* ptr to name string, rel. to struct base addr */

+         uint32_t uid;

+         uint32_t gid;

+         uint32_t strs_len;      /* length of strs */

+         char strs[0];           /* concatenation of all passwd strings, each

+                                  * string is zero terminated ordered as follows:

+                                  * name, passwd, gecos, dir, shell */

+     };

+ 

+ The ``name`` pointer is a shortcut to the user name in the ``strs`` data and is

+ used to make sure that the object so far only found with the help of the hash

+ value does match the input name. If the user is search by ID the ``uid`` value

+ is used for this check. If there is no match there is either a hash collision

+ and the next entry in the chain has to be checked or the search entry is

+ currently not in the memory cache and the request has to be forwarded to SSSD's

+ nss responder.

+ 

+ The ``strs`` blob is expected to contain 5 0-terminated strings representing the

+ string components of ``struct passwd``, user name, password, gecos, home

+ directory and user shell. Since SSSD does not add password hashes to the output

+ the password string will typically be "*" or whatever the ``pwfield`` option

+ is set to.

+ 

+ .. image:: memory_cache_passwd.svg

+ 

+ A complete passwd/user record look like::

+ 

+     0000000: 0000 00f0 7100 0000  ....q...

+     0000008: 80f8 1f5a 0000 0000  ...Z....

+     0000010: ffff ffff ffff ffff  ........

+     0000018: 9c99 0000 2a35 0100  ....*5..

+     0000020: ffff ffff 0000 00f0  ........

+ 

+     0000028: 1000 0000 00d9 b92b  .......+

+     0000030: 00d9 b92b 3900 0000  ...+9...

+     0000038: 6164 6d69 6e40 6970  admin@ip

+     0000040: 6166 3236 2e64 6576  af26.dev

+     0000048: 656c 002a 0041 646d  el.*.Adm

+ 

+     0000050: 696e 6973 7472 6174  inistrat

+     0000058: 6f72 002f 686f 6d65  or./home

+     0000060: 2f61 646d 696e 002f  /admin./

+     0000068: 6269 6e2f 6261 7368  bin/bash

+     0000070: 00ff ffff ffff ffff  ........

+ 

+ where each block represents one slot (40 bytes).

+ 

+ The total length ``len`` of this record is 0x71(113) bytes. There are no hash

+ collisions as can be seen by the 0xff in the third line.

+ 

+ ``struct sss_mc_pwd_data`` starts with the second block. The name string starts

+ after 0x10(16) bytes. The uid and gid of the user are 0x2bb9d900(733600000) and

+ all strings together including the terminating 0x00s are 0x39(57) bytes long.

+ The reminder of the last slot is filled with 0xff.

+ 

+ The Group Data

+ ^^^^^^^^^^^^^^

+ 

+ The group data is defined in ``src/util/mmap_cache.h`` as::

+ 

+     struct sss_mc_grp_data {

+         rel_ptr_t name;         /* ptr to name string, rel. to struct base addr */

+         uint32_t gid;

+         uint32_t members;       /* number of members in strs */

+         uint32_t strs_len;      /* length of strs */

+         char strs[0];           /* concatenation of all group strings, each

+                                  * string is zero terminated ordered as follows:

+                                  * name, passwd, member1, member2, ... */

+     };

+ 

+ ``name`` and ``gid`` are similar to the ones in ``struct sss_mc_pwd_data``.

+ ``members`` is the number of members of the group. So it is expected to have

+ ``members + 2`` (all members plus the group name and the group password)

+ 0-terminated strings in the ``strs`` blob.

+ 

+ .. image:: memory_cache_group.svg

+ 

+ Here is an example for a group with 8 members::

+ 

+     00000000: 0000 00f0 1201 0000  ........

+     00000008: 2262 255a 0000 0000  "b%Z....

+     00000010: ffff ffff ffff ffff  ........

+     00000018: 87f8 0000 6184 0000  ....a...

+     00000020: ffff ffff 0000 00f0  ........

+ 

+     00000028: 1000 0000 2ad9 b92b  ....*..+

+     00000030: 0800 0000 da00 0000  ........

+     00000038: 7465 7374 5f67 726f  test_gro

+     00000040: 7570 4069 7061 6632  up@ipaf2

+     00000048: 362e 6465 7665 6c00  6.devel.

+ 

+     00000050: 2a00 7465 7374 2d75  *.test-u

+     00000058: 7365 7261 4069 7061  sera@ipa

+     00000060: 6632 362e 6465 7665  f26.deve

+     00000068: 6c00 7465 7374 2d75  l.test-u

+     00000070: 7365 7262 4069 7061  serb@ipa

+ 

+     00000078: 6632 362e 6465 7665  f26.deve

+     00000080: 6c00 7465 7374 2d75  l.test-u

+     00000088: 7365 7263 4069 7061  serc@ipa

+     00000090: 6632 362e 6465 7665  f26.deve

+     00000098: 6c00 7465 7374 2d75  l.test-u

+ 

+     000000a0: 7365 7264 4069 7061  serd@ipa

+     000000a8: 6632 362e 6465 7665  f26.deve

+     000000b0: 6c00 7465 7374 2d75  l.test-u

+     000000b8: 7365 7265 4069 7061  sere@ipa

+     000000c0: 6632 362e 6465 7665  f26.deve

+ 

+     000000c8: 6c00 7465 7374 2d75  l.test-u

+     000000d0: 7365 7266 4069 7061  serf@ipa

+     000000d8: 6632 362e 6465 7665  f26.deve

+     000000e0: 6c00 7465 7374 2d75  l.test-u

+     000000e8: 7365 7267 4069 7061  serg@ipa

+ 

+     000000f0: 6632 362e 6465 7665  f26.deve

+     000000f8: 6c00 7465 7374 2d75  l.test-u

+     00000100: 7365 7268 4069 7061  serh@ipa

+     00000108: 6632 362e 6465 7665  f26.deve

+     00000110: 6c00 ffff ffff ffff  l.......

+ 

+ The full record is 0x112(274) bytes long and occupies 7 slots. The ``struct

+ sss_mc_grp_data`` starts at the second slot, the name of the group can be found

+ 0x10(16) bytes later, the GID is 0x2bb9d92a(733600042) and the groups has 8

+ members. The ``strs`` blob is 0xda(218) bytes long. Following the group name and

+ the group password ('*') the names of the 8 group members

+ test-usera@ipaf26.devel, ..., test-userh@ipaf26.devel can be found.

+ 

+ The Initgr Data

+ ^^^^^^^^^^^^^^^

+ 

+ Finally the initgr data is defined in ``src/util/mmap_cache.h`` as::

+ 

+     struct sss_mc_initgr_data {

+         rel_ptr_t unique_name;  /* ptr to unique name string, rel. to struct base addr */

+         rel_ptr_t name;         /* ptr to raw name string, rel. to struct base addr */

+         rel_ptr_t strs;         /* ptr to concatenation of all strings */

+         uint32_t strs_len;      /* length of strs */

+         uint32_t data_len;      /* all initgroups data len */

+         uint32_t num_groups;    /* number of groups */

+         uint32_t gids[0];       /* array of all groups

+                                  * string with name and unique_name is stored

+                                  * after gids */

+     };

+ 

+ Here we can see some differences to the previous two structs, there are two

+ names and two different kind of data areas. First we will have a looks to the

+ data areas. The ``getgrouplist`` and similar other calls will return a list of

+ GIDs of groups the user is a member of. So the first part of the data blob

+ starting at ``gids`` is an array of ``uint32_t`` of size ``num_groups`` containing

+ the GIDs of the groups the user is a member of. After the GID list the two names

+ can be found as 0-terminated strings, first the string ``unique_name`` is

+ pointing to and then the string for ``name``. The length of both strings

+ including the terminating 0 byte is stored in ``strs_len`` and ``data_len``

+ stores the length of all data, GIDs and strings, so it is ``data_len = strs_len

+ * num_groups *sizeof(uint32_t)``.

+ 

+ The second name attribute was added to mitigate a general issue the memory

+ mapped cache currently has with lookup by names for initgr requests. A user can

+ only have a single UID and a group can only have a single GID. A different UID

+ would by definition automatically mean a different user from the point of view

+ of the Linux kernel. User and group names are basically labels to the UID or

+ GID, respectively, and multiple names can be assigned to a single UID or GID.

+ Traditionally there are ``struct passwd`` and ``struct group`` to map the UID or

+ GID with a single name and the ``getpwnam``, ``getpwuid``, ``getgrnam`` and

+ ``getgrgid`` calls are used to find the ID for a name and vice versa. But there

+ is not restriction that the names used as first argument to ``getpwnam`` or

+ ``getgrnam`` have to be the same as the ones returned as ``pw_name`` or

+ ``gr_name`` in the related structs. ``pw_name`` and ``gr_name`` returned in

+ ``struct passwd`` and ``struct group`` respectively can be considered a canonical

+ names. The names used as first argument for ``getpwnam`` and ``getgrnam``, as

+ long as they are differ from the canonical name, can be considered as alias

+ names.

+ 

+ Coming back to the memory mapped cache. The user and group data in the memory

+ cache only contain a single name, the canonical name. This means a user or group

+ entry can be only found in the memory mapped cache if the canonical name is used

+ to lookup the entry. The is in general not an issue with many Unix/Linux based

+ use case. But if e.g. the users are managed in Active Directory there might be

+ different expectations about the name format, see e.g. `MSDN: User Name Formats

+ <https://msdn.microsoft.com/de-de/library/windows/desktop/aa380525(v=vs.85).aspx>`.

+ Besides the short *logon name* the fully-qualified *user principal name (UPN)*

+ or the old NT style *down-level logon name* can be used. What makes it even

+ worse is that names in AD are treated case-insensitive.

+ 

+ To allow lookups with different input names (aliases) one might be tempted to

+ just replace the canonical name in the memory cache record with the input name.

+ But this would fail if e.g. the related user is deleted on the server and has to

+ be deleted in the memory mapped cache as well. Now all entries must be checked

+ if they are somehow related to the deleted entry. To avoid this the canonical

+ name is added as well and its hash is written to the otherwise unused ``hash2``

+ element of ``struct sss_mc_rec``. Now can use different alias name to look up an

+ object and after the first lookup will add an record with this name to the

+ cache. If there are changes on the server to the object all instances can be

+ found with the canonical name and handled accordingly.

+ 

+ .. image:: memory_cache_initgr.svg

+ 

+ Finally here is a example of how an initgr memory mapped cache record looks

+ like::

+ 

+     00000000: 0000 00f0 7300 0000  ....s...

+     00000008: fff6 275a 0000 0000  ..'Z....

+     00000010: ffff ffff ffff ffff  ........

+     00000018: be4d 0100 049f 0000  .M......

+     00000020: ffff ffff 0000 00f0  ........

+ 

+     00000028: 2800 0000 4000 0000  (...@...

+     00000030: 2800 0000 2300 0000  (...#...

+     00000038: 3300 0000 0400 0000  3.......

+     00000040: 2ad9 b92b 33d9 b92b  *..+3..+

+     00000048: 34d9 b92b 35d9 b92b  4..+5..+

+ 

+     00000050: 7465 7374 2d75 7365  test-use

+     00000058: 7261 4069 7061 6632  ra@ipaf2

+     00000060: 362e 6465 7665 6c00  6.devel.

+     00000068: 7465 7374 2d75 7365  test-use

+     00000070: 7261 00ff ffff ffff  ra......

+ 

+ As usual the first slot contains ``struct sss_mc_rec``. As can be seen there are

+ two different hash values 0x14dbe and 0x9f04 indicating that ``name`` and

+ ``unique_name`` are different. ``struct sss_mc_initgr_data`` start with the

+ second slot. The first two relative pointers give the start of ``unique_name``

+ and ``name``, respectively. Given that ``struct sss_mc_initgr_data`` starts at

+ 0x28(40) ``unique_name`` starts 0x28(40) bytes later at 0x50(80). Similar

+ ``name`` starts 0x40(64) after the start of the initgr data at 0x68(104). Since

+ the two names are the only strings used here ``strs`` is 0x28(40) as well and

+ the length ``strs_len`` of both strings is 0x23(35) bytes. Together with the

+ GIDs the total ``data_len`` is 0x33(51) bytes. This means 16 bytes more than the

+ strings alone with is agreement to the number of GIDs ``num_groups`` 0x4(4). The

+ GIDs of the groups are 0x2bb9d92a(733600042), 0x2bb9d933(733600051),

+ 0x2bb9d934(733600052) and 0x2bb9d935(733600053).

+ 

+ How does a Client lookup an Entry?

+ ----------------------------------

+ 

+ Depending on what data should be looked up the client has to open the related

+ cache file and map it into its own memory. To learn about the structure of the

+ cache the header must be read.

+ 

+ The Posix calls ``getpwnam``, ``getpwuid``, ``getgrnam``, ``getgrgid`` and

+ ``getgrouplist`` either use a name or a POSIX ID as input. To find a matching

+ entry in the memory mapped cache the hash value must be calculated first. If a

+ name is used as input the hash is calculated from the name string including the

+ trailing 0-byte. If the lookup is by ID the numerical ID is converted into a

+ decimal string which is used with the trailing 0-byte to calculate the hash. The

+ seed for the hash function can be found in the header. In both cases the modulus

+ of the 32bit hash value and the size of the hash table array is calculated.

+ 

+ This value is now taken to lookup an entry in the hash table array. If it is

+ ``MC_INVALID_VAL`` there is no matching entry in the cache and the request must

+ be forwarded to SSSD's nss responder.

+ 

+ If the hash table entry contains another value it is assumed to be the

+ starting slot number of the related entry in the data table. After the entry

+ is read first the hashes (``hash1`` for name based and ``hash2`` for ID based

+ lookups) are compared with the input hash. If they match the input value (name

+ or ID) itself is compared with the related data from the entry. If they match

+ as well the data from the entry is returned to the caller in the expected

+ format. If one of the comparisons fails the next entry (if any) with the same hash

+ value is lookup up by reading the slot number stored in ``next1`` or ``next2``

+ depending if the input hash matches ``hash1`` or ``hash2`` respectively.

+ 

+ If no matching entry was found the request must be forwarded to SSSD's nss

+ responder.

+ 

+ How does the NSS Responder store an Entry?

+ ------------------------------------------

+ 

+ First the NSS responder calculates the hash in the same way as the client and

+ checks if the entry already exists if needed by following the chain of the

+ ``next`` elements. If the entry already exists in the memory cache and

+ occupies the same number of slots as needed for the new data the old entry is

+ just overwritten with the new data.

+ 

+ When filling the memory cache the NSS responder keeps track of the next slot

+ which follows the last inserted entry. As long as not all slots are used and

+ the number of remaining slots is larger than the number of needed slots for

+ the new entry the next free slot and the following free ones are used to store

+ the entry and the next slot is remembered again.

+ 

+ If the cache is already full, the free table is used to search to the needed

+ number of consecutive free slots. If none where found the entry the remembered

+ next slot is pointing to is invalidate and if needed the following entries as

+ well to make room for the new entry.

+ 

+ This means that this simple scheme becomes inefficient if the cache is full

+ and more and more new entries has to be added to the cache. In the worst case

+ the full cache is searched for empty slots every time before the new entry is

+ added by overwritten an existing entry. Additionally the lifetime of the

+ cached entries is not taken into account when overwriting existing entries.

+ 

+ After the new slots where found the entry is written to the memory mapped

+ cached protected by memory barriers. And finally the starting slot number is

+ either written to the hash table or to the corresponding ``next`` element at

+ the end of the chain of entries with the same hash value.

no initial comment

@sbose, wow! Simply, wow!

The documentation is quite good although I don't have enough knowledge to understand how accurate it is.

IMO, we should have it merged now, so, ACK!

Please, feel free to push it to the repo (or let me know in case you want me to do so).

Commit 1cbd047 fixes this pull-request

Pull-Request has been merged by sbose

6 years ago

Pull-Request has been merged by sbose

6 years ago