+++ /dev/null
-<?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://web.resource.org/cc/"
- 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="744.09448819"
- height="1052.3622047"
- id="svg2"
- sodipodi:version="0.32"
- inkscape:version="0.45.1"
- sodipodi:docbase="/home/warner/trees/tahoe/docs"
- sodipodi:docname="chk-hashes.svg"
- inkscape:output_extension="org.inkscape.output.svg.inkscape">
- <defs
- id="defs4">
- <marker
- inkscape:stockid="Arrow1Mend"
- orient="auto"
- refY="0.0"
- refX="0.0"
- id="Arrow1Mend"
- style="overflow:visible;">
- <path
- id="path3237"
- d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
- transform="scale(0.4) rotate(180) translate(10,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0.0"
- refX="0.0"
- id="Arrow1Lend"
- style="overflow:visible;">
- <path
- id="path3391"
- d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
- transform="scale(0.8) rotate(180) translate(12.5,0)" />
- </marker>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- gridtolerance="10000"
- guidetolerance="10"
- objecttolerance="10"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="0.58344932"
- inkscape:cx="372.04724"
- inkscape:cy="526.18109"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- inkscape:window-width="791"
- inkscape:window-height="827"
- inkscape:window-x="591"
- inkscape:window-y="150" />
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1">
- <g
- id="g2168"
- transform="translate(-8.75,0)">
- <rect
- y="80.555412"
- x="53.132294"
- height="135.40164"
- width="197.10367"
- id="rect2160"
- style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- <text
- sodipodi:linespacing="100%"
- id="text2162"
- y="108.97614"
- x="151.88493"
- style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="108.97614"
- x="151.88493"
- id="tspan2164"
- sodipodi:role="line">data</tspan><tspan
- id="tspan2166"
- y="132.97614"
- x="151.88493"
- sodipodi:role="line">(plaintext)</tspan></text>
- </g>
- <g
- id="g2190"
- transform="translate(-0.25,0)">
- <rect
- style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="rect2178"
- width="197.10367"
- height="135.40164"
- x="44.632294"
- y="324.55542" />
- <text
- xml:space="preserve"
- style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="143.38493"
- y="352.97614"
- id="text2180"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan2182"
- x="143.38493"
- y="352.97614">data</tspan><tspan
- sodipodi:role="line"
- x="143.38493"
- y="376.97614"
- id="tspan2184">(crypttext)</tspan></text>
- </g>
- <rect
- style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="rect2198"
- width="197.10367"
- height="135.40164"
- x="44.382294"
- y="583.55542" />
- <text
- xml:space="preserve"
- style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="142.68532"
- y="611.97614"
- id="text2200"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- x="142.68532"
- y="611.97614"
- id="tspan2204">shares</tspan></text>
- <g
- id="g3193"
- transform="translate(-10.413708,29.158381)">
- <path
- transform="matrix(0.6292707,0,0,0.6292707,151.39519,41.751672)"
- d="M 438.76991 133.6877 A 20.567339 20.567339 0 1 1 397.63524,133.6877 A 20.567339 20.567339 0 1 1 438.76991 133.6877 z"
- sodipodi:ry="20.567339"
- sodipodi:rx="20.567339"
- sodipodi:cy="133.6877"
- sodipodi:cx="418.20258"
- id="path2212"
- style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.58914125;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.58914125;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path3185"
- sodipodi:cx="418.20258"
- sodipodi:cy="133.6877"
- sodipodi:rx="20.567339"
- sodipodi:ry="20.567339"
- d="M 438.76991 133.6877 A 20.567339 20.567339 0 1 1 397.63524,133.6877 A 20.567339 20.567339 0 1 1 438.76991 133.6877 z"
- transform="matrix(0.6292707,0,0,0.6292707,125.3609,72.992795)" />
- <path
- transform="matrix(0.6292707,0,0,0.6292707,177.42944,72.992795)"
- d="M 438.76991 133.6877 A 20.567339 20.567339 0 1 1 397.63524,133.6877 A 20.567339 20.567339 0 1 1 438.76991 133.6877 z"
- sodipodi:ry="20.567339"
- sodipodi:rx="20.567339"
- sodipodi:cy="133.6877"
- sodipodi:cx="418.20258"
- id="path3187"
- style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.58914125;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- sodipodi:type="arc" />
- <path
- id="path3189"
- d="M 396.76226,145.32825 L 407.17597,134.91454"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- <path
- id="path3191"
- d="M 433.21024,147.41099 L 423.8379,134.91454"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- </g>
- <g
- id="g3200"
- transform="translate(-9.3723369,269.71503)">
- <path
- sodipodi:type="arc"
- style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.58914125;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path3202"
- sodipodi:cx="418.20258"
- sodipodi:cy="133.6877"
- sodipodi:rx="20.567339"
- sodipodi:ry="20.567339"
- d="M 438.76991 133.6877 A 20.567339 20.567339 0 1 1 397.63524,133.6877 A 20.567339 20.567339 0 1 1 438.76991 133.6877 z"
- transform="matrix(0.6292707,0,0,0.6292707,151.39519,41.751672)" />
- <path
- transform="matrix(0.6292707,0,0,0.6292707,125.3609,72.992795)"
- d="M 438.76991 133.6877 A 20.567339 20.567339 0 1 1 397.63524,133.6877 A 20.567339 20.567339 0 1 1 438.76991 133.6877 z"
- sodipodi:ry="20.567339"
- sodipodi:rx="20.567339"
- sodipodi:cy="133.6877"
- sodipodi:cx="418.20258"
- id="path3204"
- style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.58914125;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.58914125;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path3206"
- sodipodi:cx="418.20258"
- sodipodi:cy="133.6877"
- sodipodi:rx="20.567339"
- sodipodi:ry="20.567339"
- d="M 438.76991 133.6877 A 20.567339 20.567339 0 1 1 397.63524,133.6877 A 20.567339 20.567339 0 1 1 438.76991 133.6877 z"
- transform="matrix(0.6292707,0,0,0.6292707,177.42944,72.992795)" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="M 396.76226,145.32825 L 407.17597,134.91454"
- id="path3208" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="M 433.21024,147.41099 L 423.8379,134.91454"
- id="path3210" />
- </g>
- <g
- transform="translate(-6.2482246,538.38869)"
- id="g3212">
- <path
- transform="matrix(0.6292707,0,0,0.6292707,151.39519,41.751672)"
- d="M 438.76991 133.6877 A 20.567339 20.567339 0 1 1 397.63524,133.6877 A 20.567339 20.567339 0 1 1 438.76991 133.6877 z"
- sodipodi:ry="20.567339"
- sodipodi:rx="20.567339"
- sodipodi:cy="133.6877"
- sodipodi:cx="418.20258"
- id="path3214"
- style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.58914125;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.58914125;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path3216"
- sodipodi:cx="418.20258"
- sodipodi:cy="133.6877"
- sodipodi:rx="20.567339"
- sodipodi:ry="20.567339"
- d="M 438.76991 133.6877 A 20.567339 20.567339 0 1 1 397.63524,133.6877 A 20.567339 20.567339 0 1 1 438.76991 133.6877 z"
- transform="matrix(0.6292707,0,0,0.6292707,125.3609,72.992795)" />
- <path
- transform="matrix(0.6292707,0,0,0.6292707,177.42944,72.992795)"
- d="M 438.76991 133.6877 A 20.567339 20.567339 0 1 1 397.63524,133.6877 A 20.567339 20.567339 0 1 1 438.76991 133.6877 z"
- sodipodi:ry="20.567339"
- sodipodi:rx="20.567339"
- sodipodi:cy="133.6877"
- sodipodi:cx="418.20258"
- id="path3218"
- style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.58914125;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- sodipodi:type="arc" />
- <path
- id="path3220"
- d="M 396.76226,145.32825 L 407.17597,134.91454"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- <path
- id="path3222"
- d="M 433.21024,147.41099 L 423.8379,134.91454"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- </g>
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="399.88635"
- y="110.96302"
- id="text3224"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3226"
- x="399.88635"
- y="110.96302">plaintext</tspan><tspan
- sodipodi:role="line"
- x="399.88635"
- y="130.96302"
- id="tspan3228">hash tree</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="400.92773"
- y="350.4783"
- id="text3230"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3232"
- x="400.92773"
- y="350.4783">crypttext</tspan><tspan
- sodipodi:role="line"
- x="400.92773"
- y="370.4783"
- id="tspan3234">hash tree</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="405.09323"
- y="618.1106"
- id="text3236"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3238"
- x="405.09323"
- y="618.1106">share</tspan><tspan
- sodipodi:role="line"
- x="405.09323"
- y="638.1106"
- id="tspan3240">hash tree</tspan></text>
- <rect
- style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.05825377;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="rect3242"
- width="207.32907"
- height="421.5722"
- x="527.92419"
- y="161.13995" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="536.46478"
- y="183.39211"
- id="text3244"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3246"
- x="536.46478"
- y="183.39211">URI Extension Block</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="536.95264"
- y="245.09413"
- id="text3248"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3250"
- x="536.95264"
- y="245.09413">plaintext root</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="536.95264"
- y="281.08698"
- id="text3252"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3254"
- x="536.95264"
- y="281.08698">plaintext (flat) hash</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="540.59265"
- y="435.34201"
- id="text3256"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3258"
- x="540.59265"
- y="435.34201">crypttext root</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="540.59265"
- y="483.33246"
- id="text3260"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3262"
- x="540.59265"
- y="483.33246">crypttext (flat) hash</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="539.89264"
- y="558.74603"
- id="text3264"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3266"
- x="539.89264"
- y="558.74603">share root</tspan></text>
- <path
- style="fill:none;fill-rule:evenodd;stroke:#8a02b8;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;fill-opacity:1"
- d="M 239.95229,183.39211 L 363.35632,183.39211"
- id="path3383" />
- <path
- id="path3583"
- d="M 239.95229,425.05834 L 363.35632,425.05834"
- style="fill:none;fill-rule:evenodd;stroke:#8a02b8;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;fill-opacity:1" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#8a02b8;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;fill-opacity:1"
- d="M 239.95229,692.43375 L 363.35632,692.43375"
- id="path3585" />
- <path
- style="fill:none;fill-opacity:1;stroke:#8a02b8;stroke-width:1.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 417.58968,150.5351 C 470.69959,151.57647 472.62807,183.93923 479.03055,202.60364 C 487.14356,226.25457 499.85797,233.58442 529.01635,241.13436"
- id="path3589"
- sodipodi:nodetypes="csz" />
- <path
- sodipodi:nodetypes="csz"
- id="path3591"
- d="M 421.75516,391.09175 C 449.87218,392.13312 454.33789,400.8898 470.69958,411.91917 C 496.5159,429.32187 494.65112,422.07253 523.8095,429.62247"
- style="fill:none;fill-opacity:1;stroke:#8a02b8;stroke-width:1.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
- <path
- style="fill:none;fill-opacity:1;stroke:#8a02b8;stroke-width:1.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 420.71379,662.88952 C 420.71379,662.88952 471.01868,647.53267 473.30302,607.17618 C 475.6461,565.78169 496.083,554.97747 525.89224,551.46284"
- id="path3595"
- sodipodi:nodetypes="czz" />
- <path
- style="fill:none;fill-opacity:1;stroke:#8a02b8;stroke-width:1.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 241.59802,201.56227 C 288.98039,203.12433 310.58883,210.67426 381.1417,228.63791 C 451.69457,246.60156 477.72883,273.67719 523.80949,273.41685"
- id="path3599"
- sodipodi:nodetypes="czz" />
- <path
- style="fill:none;fill-opacity:1;stroke:#8a02b8;stroke-width:1.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 243.68076,448.36714 C 296.26998,448.88782 323.60597,457.47913 393.63815,465.02907 C 463.67033,472.57901 487.62186,479.8686 523.80949,478.56689"
- id="path3601"
- sodipodi:nodetypes="czz" />
- <rect
- style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="rect3603"
- width="611.87836"
- height="109.69247"
- x="54.846237"
- y="807.26807" />
- <text
- xml:space="preserve"
- style="font-size:36px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="329.71826"
- y="910.10474"
- id="text3605"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3607"
- x="329.71826"
- y="910.10474">URI</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="159.39687"
- y="841.54694"
- id="text3609"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3611"
- x="159.39687"
- y="841.54694">encryption</tspan><tspan
- sodipodi:role="line"
- x="159.39687"
- y="861.54694"
- id="tspan3613">key</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="359.92844"
- y="842.72693"
- id="text3615"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3617"
- x="359.92844"
- y="842.72693">storage</tspan><tspan
- sodipodi:role="line"
- x="359.92844"
- y="862.72693"
- id="tspan3619">index</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="570.74371"
- y="844.42694"
- id="text3621"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3623"
- x="570.74371"
- y="844.42694">UEB</tspan><tspan
- sodipodi:role="line"
- x="570.74371"
- y="864.42694"
- id="tspan3625">hash</tspan></text>
- <path
- style="fill:none;fill-opacity:1;stroke:#1bcc03;stroke-width:1.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:9,9;stroke-dashoffset:0;stroke-opacity:1"
- d="M 267.37541,557.0321 L 315.36587,66.843852 L 740.4242,73.699632 L 740.4242,752.42182 L 418.20256,752.42182 L 416.48862,713.00109 L 356.50054,646.15724 L 310.22403,661.58274 L 190.24789,659.8688 L 191.96183,557.0321 L 267.37541,557.0321 z "
- id="path3627"
- sodipodi:nodetypes="ccccccccccc" />
- <path
- style="fill:none;fill-opacity:1;stroke:#1bcc03;stroke-width:2;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 358.21449,824.40751 C 362.49935,783.27283 382.20972,758.84911 414.77467,740.42421"
- id="path3629"
- sodipodi:nodetypes="cz" />
- <path
- style="fill:none;fill-opacity:1;stroke:#8a02b8;stroke-width:2;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 629.01779,582.74128 C 623.87595,661.15426 575.88549,723.71325 574.17154,814.12384"
- id="path3631"
- sodipodi:nodetypes="cz" />
- <g
- id="g3434">
- <path
- transform="translate(1.7139449,-5.1418348)"
- d="M 174.82238 278.51605 A 36.849815 23.138256 0 1 1 101.12275,278.51605 A 36.849815 23.138256 0 1 1 174.82238 278.51605 z"
- sodipodi:ry="23.138256"
- sodipodi:rx="36.849815"
- sodipodi:cy="278.51605"
- sodipodi:cx="137.97256"
- id="path3635"
- style="fill:#ffffff;fill-opacity:1;stroke:#a10101;stroke-width:2;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- sodipodi:type="arc" />
- <text
- sodipodi:linespacing="100%"
- id="text3637"
- y="281.24622"
- x="115.93739"
- style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#a10101;fill-opacity:1;stroke:#a10101;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="281.24622"
- x="115.93739"
- id="tspan3639"
- sodipodi:role="line">AES</tspan></text>
- </g>
- <path
- style="fill:none;fill-opacity:1;stroke:#a10101;stroke-width:2;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
- d="M 133.6877,212.52917 L 135.40165,250.23596"
- id="path3646" />
- <path
- style="fill:none;fill-opacity:1;stroke:#a10101;stroke-width:2;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
- d="M 138.82954,296.51247 L 138.82954,323.93559"
- id="path3648" />
- <path
- style="fill:none;fill-opacity:1;stroke:#a10101;stroke-width:2;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 147.39926,817.55173 C 123.40403,754.13577 56.155146,767.27832 30.851008,736.99632 C 4.7133492,705.71682 5.5877376,315.58243 32.564954,281.08697 C 58.702614,247.66504 65.129907,260.94812 101.12275,272.51724"
- id="path3650"
- sodipodi:nodetypes="czzz" />
- <g
- id="g3426">
- <path
- transform="translate(-1.7139449,243.38018)"
- sodipodi:type="arc"
- style="fill:#ffffff;fill-opacity:1;stroke:#a10101;stroke-width:2;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path3219"
- sodipodi:cx="137.97256"
- sodipodi:cy="278.51605"
- sodipodi:rx="36.849815"
- sodipodi:ry="23.138256"
- d="M 174.82238 278.51605 A 36.849815 23.138256 0 1 1 101.12275,278.51605 A 36.849815 23.138256 0 1 1 174.82238 278.51605 z" />
- <text
- xml:space="preserve"
- style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#a10101;fill-opacity:1;stroke:#a10101;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="112.5095"
- y="529.76825"
- id="text3221"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3223"
- x="112.5095"
- y="529.76825">FEC</tspan></text>
- </g>
- <path
- id="path3445"
- d="M 195.38972,855.25852 L 318.79375,855.25852"
- style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#8a02b8;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- id="path3447"
- d="M 133.68771,457.62329 L 133.68771,498.75797"
- style="fill:none;fill-opacity:1;stroke:#a10101;stroke-width:2;stroke-linecap:butt;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-opacity:1;stroke:#a10101;stroke-width:2;stroke-linecap:butt;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="M 133.68771,546.74843 L 133.68771,582.74127"
- id="path3449"
- sodipodi:nodetypes="cc" />
- <path
- id="path3451"
- d="M 99.408806,943.93737 L 147.39926,943.93737"
- style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#8a02b8;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- sodipodi:nodetypes="cc" />
- <text
- xml:space="preserve"
- style="font-size:28px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="65.129906"
- y="953.42938"
- id="text3453"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3455"
- x="65.129906"
- y="953.42938">A</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:28px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="164.53871"
- y="952.95337"
- id="text3457"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- x="164.53871"
- y="952.95337"
- id="tspan3461">B :</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="217.67101"
- y="952.95337"
- id="text3465"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3467"
- x="217.67101"
- y="952.95337">B is derived from A by hashing, therefore B validates A</tspan></text>
- <path
- sodipodi:nodetypes="cc"
- style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#a10101;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 99.408806,969.64654 L 147.39926,969.64654"
- id="path3469" />
- <text
- sodipodi:linespacing="100%"
- id="text3471"
- y="979.13855"
- x="65.129906"
- style="font-size:28px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="979.13855"
- x="65.129906"
- id="tspan3473"
- sodipodi:role="line">A</tspan></text>
- <text
- sodipodi:linespacing="100%"
- id="text3475"
- y="978.66254"
- x="164.53871"
- style="font-size:28px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- id="tspan3477"
- y="978.66254"
- x="164.53871"
- sodipodi:role="line">B :</tspan></text>
- <text
- sodipodi:linespacing="100%"
- id="text3479"
- y="978.66254"
- x="217.67101"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="978.66254"
- x="217.67101"
- id="tspan3481"
- sodipodi:role="line">B is derived from A by encryption or erasure coding</tspan></text>
- <path
- id="path3483"
- d="M 99.408806,997.06966 L 147.39926,997.06966"
- style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1bcc03;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- sodipodi:nodetypes="cc" />
- <text
- xml:space="preserve"
- style="font-size:28px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="65.129906"
- y="1006.5616"
- id="text3485"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3487"
- x="65.129906"
- y="1006.5616">A</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:28px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="164.53871"
- y="1006.0856"
- id="text3489"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- x="164.53871"
- y="1006.0856"
- id="tspan3491">B :</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="217.67101"
- y="1006.0856"
- id="text3493"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3495"
- x="217.67101"
- y="1006.0856">A is used as an index to retrieve data B</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:32px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#1bcc03;fill-opacity:1;stroke:#1bcc03;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="625.5899"
- y="740.42419"
- id="text3497"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3499"
- x="625.5899"
- y="740.42419">SHARE</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:32px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="249.20799"
- y="30.851007"
- id="text3501"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3503"
- x="249.20799"
- y="30.851007">CHK File Hashes</tspan></text>
- </g>
-</svg>
-SOURCES = CHK-hashes.svg file-encoding1.svg file-encoding2.svg \
- file-encoding3.svg file-encoding4.svg file-encoding5.svg \
- file-encoding6.svg subtree1.svg lease-tradeoffs.svg
+SOURCES = subtree1.svg lease-tradeoffs.svg
PNGS = $(patsubst %.svg,%.png,$(SOURCES))
EPSS = $(patsubst %.svg,%.eps,$(SOURCES))
+++ /dev/null
-
-"URI Extension Block"
-
-This block is a serialized dictionary with string keys and string values
-(some of which represent numbers, some of which are SHA-256 hashes). All
-buckets hold an identical copy. The hash of the serialized data is kept in
-the URI.
-
-The download process must obtain a valid copy of this data before any
-decoding can take place. The download process must also obtain other data
-before incremental validation can be performed. Full-file validation (for
-clients who do not wish to do incremental validation) can be performed solely
-with the data from this block.
-
-At the moment, this data block contains the following keys (and an estimate
-on their sizes):
-
- size 5
- segment_size 7
- num_segments 2
- needed_shares 2
- total_shares 3
-
- codec_name 3
- codec_params 5+1+2+1+3=12
- tail_codec_params 12
-
- share_root_hash 32 (binary) or 52 (base32-encoded) each
- plaintext_hash
- plaintext_root_hash
- crypttext_hash
- crypttext_root_hash
-
-Some pieces are needed elsewhere (size should be visible without pulling the
-block, the Tahoe3 algorithm needs total_shares to find the right peers, all
-peer selection algorithms need needed_shares to ask a minimal set of peers).
-Some pieces are arguably redundant but are convenient to have present
-(test_encode.py makes use of num_segments).
-
-The rule for this data block is that it should be a constant size for all
-files, regardless of file size. Therefore hash trees (which have a size that
-depends linearly upon the number of segments) are stored elsewhere in the
-bucket, with only the hash tree root stored in this data block.
-
-This block will be serialized as follows:
-
- assert that all keys match ^[a-zA-z_\-]+$
- sort all the keys lexicographically
- for k in keys:
- write("%s:" % k)
- write(netstring(data[k]))
-
-
-Serialized size:
-
- dense binary (but decimal) packing: 160+46=206
- including 'key:' (185) and netstring (6*3+7*4=46) on values: 231
- including 'key:%d\n' (185+13=198) and printable values (46+5*52=306)=504
-
-We'll go with the 231-sized block, and provide a tool to dump it as text if
-we really want one.
+++ /dev/null
-
-= Tahoe Directory Nodes =
-
-As explained in the architecture docs, Tahoe can be roughly viewed as a
-collection of three layers. The lowest layer is the distributed filestore, or
-DHT: it provides operations that accept files and upload them to the mesh,
-creating a URI in the process which securely references the file's contents.
-The middle layer is the filesystem, creating a structure of directories and
-filenames resembling the traditional unix/windows filesystems. The top layer
-is the application layer, which uses the lower layers to provide useful
-services to users, like a backup application, or a way to share files with
-friends.
-
-This document examines the middle layer, the "filesystem".
-
-== DHT Primitives ==
-
-In the lowest layer (DHT), there are two operations that reference immutable
-data (which we refer to as "CHK URIs" or "CHK read-capabilities" or "CHK
-read-caps"). One puts data into the grid (but only if it doesn't exist
-already), the other retrieves it:
-
- chk_uri = put(data)
- data = get(chk_uri)
-
-We also have three operations which reference mutable data (which we refer to
-as "mutable slots", or "mutable write-caps and read-caps", or sometimes "SSK
-slots"). One creates a slot with some initial contents, a second replaces the
-contents of a pre-existing slot, and the third retrieves the contents:
-
- mutable_uri = create(initial_data)
- replace(mutable_uri, new_data)
- data = get(mutable_uri)
-
-== Filesystem Goals ==
-
-The main goal for the middle (filesystem) layer is to give users a way to
-organize the data that they have uploaded into the mesh. The traditional way
-to do this in computer filesystems is to put this data into files, give those
-files names, and collect these names into directories.
-
-Each directory is a series of name-value pairs, which maps "child name" to an
-object of some kind. Those child objects might be files, or they might be
-other directories.
-
-The directory structure is therefore a directed graph of nodes, in which each
-node might be a directory node or a file node. All file nodes are terminal
-nodes.
-
-== Dirnode Goals ==
-
-What properties might be desirable for these directory nodes? In no
-particular order:
-
- 1: functional. Code which does not work doesn't count.
- 2: easy to document, explain, and understand
- 3: confidential: it should not be possible for others to see the contents of
- a directory
- 4: integrity: it should not be possible for others to modify the contents
- of a directory
- 5: available: directories should survive host failure, just like files do
- 6: efficient: in storage, communication bandwidth, number of round-trips
- 7: easy to delegate individual directories in a flexible way
- 8: updateness: everybody looking at a directory should see the same contents
- 9: monotonicity: everybody looking at a directory should see the same
- sequence of updates
-
-Some of these goals are mutually exclusive. For example, availability and
-consistency are opposing, so it is not possible to achieve #5 and #8 at the
-same time. Moreover, it takes a more complex architecture to get close to the
-available-and-consistent ideal, so #2/#6 is in opposition to #5/#8.
-
-Tahoe-0.7.0 introduced distributed mutable files, which use public key
-cryptography for integrity, and erasure coding for availability. These
-achieve roughly the same properties as immutable CHK files, but their
-contents can be replaced without changing their identity. Dirnodes are then
-just a special way of interpreting the contents of a specific mutable file.
-Earlier releases used a "vdrive server": this server was abolished in the
-0.7.0 release.
-
-For details of how mutable files work, please see "mutable.txt" in this
-directory.
-
-For the current 0.7.0 release, we achieve most of our desired properties. The
-integrity and availability of dirnodes is equivalent to that of regular
-(immutable) files, with the exception that there are more simultaneous-update
-failure modes for mutable slots. Delegation is quite strong: you can give
-read-write or read-only access to any subtree, and the data format used for
-dirnodes is such that read-only access is transitive: i.e. if you grant Bob
-read-only access to a parent directory, then Bob will get read-only access
-(and *not* read-write access) to its children.
-
-Relative to the previous "vdrive-server" based scheme, the current
-distributed dirnode approach gives better availability, but cannot guarantee
-updateness quite as well, and requires far more network traffic for each
-retrieval and update. Mutable files are somewhat less available than
-immutable files, simply because of the increased number of combinations
-(shares of an immutable file are either present or not, whereas there are
-multiple versions of each mutable file, and you might have some shares of
-version 1 and other shares of version 2). In extreme cases of simultaneous
-update, mutable files might suffer from non-monotonicity.
-
-
-== Dirnode secret values ==
-
-As mentioned before, dirnodes are simply a special way to interpret the
-contents of a mutable file, so the secret keys and capability strings
-described in "mutable.txt" are all the same. Each dirnode contains an RSA
-public/private keypair, and the holder of the "write capability" will be able
-to retrieve the private key (as well as the AES encryption key used for the
-data itself). The holder of the "read capability" will be able to obtain the
-public key and the AES data key, but not the RSA private key needed to modify
-the data.
-
-The "write capability" for a dirnode grants read-write access to its
-contents. This is expressed on concrete form as the "dirnode write cap": a
-printable string which contains the necessary secrets to grant this access.
-Likewise, the "read capability" grants read-only access to a dirnode, and can
-be represented by a "dirnode read cap" string.
-
-For example,
-URI:DIR2:swdi8ge1s7qko45d3ckkyw1aac%3Aar8r5j99a4mezdojejmsfp4fj1zeky9gjigyrid4urxdimego68o
-is a write-capability URI, while
-URI:DIR2-RO:buxjqykt637u61nnmjg7s8zkny:ar8r5j99a4mezdojejmsfp4fj1zeky9gjigyrid4urxdimego68o
-is a read-capability URI, both for the same dirnode.
-
-
-== Dirnode storage format ==
-
-Each dirnode is stored in a single mutable file, distributed in the Tahoe
-grid. The contents of this file are a serialized list of netstrings, one per
-child. Each child is a list of four netstrings: (name, rocap, rwcap,
-metadata). (remember that the contents of the mutable file are encrypted by
-the read-cap, so this section describes the plaintext contents of the mutable
-file, *after* it has been decrypted by the read-cap).
-
-The name is simple a UTF-8 -encoded child name. The 'rocap' is a read-only
-capability URI to that child, either an immutable (CHK) file, a mutable file,
-or a directory. The 'rwcap' is a read-write capability URI for that child,
-encrypted with the dirnode's write-cap: this enables the "transitive
-readonlyness" property, described further below. The 'metadata' is a
-JSON-encoded dictionary of type,value metadata pairs. Some metadata keys are
-pre-defined, the rest are left up to the application.
-
-Each rwcap is stored as IV + ciphertext + MAC. The IV is a 16-byte random
-value. The ciphertext is obtained by using AES in CTR mode on the rwcap URI
-string, using a key that is formed from a tagged hash of the IV and the
-dirnode's writekey. The MAC is a 32-byte SHA-256 -based HMAC (using that same
-AES key) over the (IV+ciphertext) pair.
-
-If Bob has read-only access to the 'bar' directory, and he adds it as a child
-to the 'foo' directory, then he will put the read-only cap for 'bar' in both
-the rwcap and rocap slots (encrypting the rwcap contents as described above).
-If he has full read-write access to 'bar', then he will put the read-write
-cap in the 'rwcap' slot, and the read-only cap in the 'rocap' slot. Since
-other users who have read-only access to 'foo' will be unable to decrypt its
-rwcap slot, this limits those users to read-only access to 'bar' as well,
-thus providing the transitive readonlyness that we desire.
-
-=== Dirnode sizes, mutable-file initial read sizes ===
-
-How big are dirnodes? When reading dirnode data out of mutable files, how
-large should our initial read be? If we guess exactly, we can read a dirnode
-in a single round-trip, and update one in two RTT. If we guess too high,
-we'll waste some amount of bandwidth. If we guess low, we need to make a
-second pass to get the data (or the encrypted privkey, for writes), which
-will cost us at least another RTT.
-
-Assuming child names are between 10 and 99 characters long, how long are the
-various pieces of a dirnode?
-
- netstring(name) ~= 4+len(name)
- chk-cap = 97 (for 4-char filesizes)
- dir-rw-cap = 88
- dir-ro-cap = 91
- netstring(cap) = 4+len(cap)
- encrypted(cap) = 16+cap+32
- JSON({}) = 2
- JSON({ctime=float,mtime=float}): 57
- netstring(metadata) = 4+57 = 61
-
-so a CHK entry is:
- 5+ 4+len(name) + 4+97 + 5+16+97+32 + 4+57
-And a 15-byte filename gives a 336-byte entry. When the entry points at a
-subdirectory instead of a file, the entry is a little bit smaller. So an
-empty directory uses 0 bytes, a directory with one child uses about 336
-bytes, a directory with two children uses about 672, etc.
-
-When the dirnode data is encoding using our default 3-of-10, that means we
-get 112ish bytes of data in each share per child.
-
-The pubkey, signature, and hashes form the first 935ish bytes of the
-container, then comes our data, then about 1216 bytes of encprivkey. So if we
-read the first:
-
- 1kB: we get 65bytes of dirnode data : only empty directories
- 1kiB: 89bytes of dirnode data : maybe one short-named subdir
- 2kB: 1065bytes: about 9 entries
- 3kB: 2065bytes: about 18 entries, or 7.5 entries plus the encprivkey
- 4kB: 3065bytes: about 27 entries, or about 16.5 plus the encprivkey
-
-So we've written the code to do an initial read of 2kB from each share when
-we read the mutable file, which should give good performance (one RTT) for
-small directories.
-
-
-== Design Goals, redux ==
-
-How well does this design meet the goals?
-
- #1 functional: YES: the code works and has extensive unit tests
- #2 documentable: YES: this document is the existence proof
- #3 confidential: YES: see below
- #4 integrity: MOSTLY: a coalition of storage servers can rollback individual
- mutable files, but not a single one. No server can
- substitute fake data as genuine.
- #5 availability: YES: as long as 'k' storage servers are present and have
- the same version of the mutable file, the dirnode will
- be available.
- #6 efficient: MOSTLY:
- network: single dirnode lookup is very efficient, since clients can
- fetch specific keys rather than being required to get or set
- the entire dirnode each time. Traversing many directories
- takes a lot of roundtrips, and these can't be collapsed with
- promise-pipelining because the intermediate values must only
- be visible to the client. Modifying many dirnodes at once
- (e.g. importing a large pre-existing directory tree) is pretty
- slow, since each graph edge must be created independently.
- storage: each child has a separate IV, which makes them larger than
- if all children were aggregated into a single encrypted string
- #7 delegation: VERY: each dirnode is a completely independent object,
- to which clients can be granted separate read-write or
- read-only access
- #8 updateness: VERY: with only a single point of access, and no caching,
- each client operation starts by fetching the current
- value, so there are no opportunities for staleness
- #9 monotonicity: VERY: the single point of access also protects against
- retrograde motion
-
-
-
-=== Confidentiality leaks in the vdrive server ===
-
-Dirnode (and the mutable files upon which they are based) are very private
-against other clients: traffic between the client and the storage servers is
-protected by the Foolscap SSL connection, so they can observe very little.
-Storage index values are hashes of secrets and thus unguessable, and they are
-not made public, so other clients cannot snoop through encrypted dirnodes
-that they have not been told about.
-
-Storage servers can observe access patterns and see ciphertext, but they
-cannot see the plaintext (of child names, metadata, or URIs). If an attacker
-operates a significant number of storage servers, they can infer the shape of
-the directory structure by assuming that directories are usually accessed
-from root to leaf in rapid succession. Since filenames are usually much
-shorter than read-caps and write-caps, the attacker can use the length of the
-ciphertext to guess the number of children of each node, and might be able to
-guess the length of the child names (or at least their sum). From this, the
-attacker may be able to build up a graph with the same shape as the plaintext
-filesystem, but with unlabeled edges and unknown file contents.
-
-
-=== Integrity failures in the vdrive server ===
-
-The mutable file's integrity mechanism (RSA signature on the hash of the file
-contents) prevents the storage server from modifying the dirnode's contents
-without detection. Therefore the storage servers can make the dirnode
-unavailable, but not corrupt it.
-
-A sufficient number of colluding storage servers can perform a rollback
-attack: replace all shares of the whole mutable file with an earlier version.
-TODO: To prevent this, when retrieving the contents of a mutable file, the
-client should query more servers than necessary and use the highest available
-version number. This insures that one or two misbehaving storage servers
-cannot cause this rollback on their own.
-
-
-=== Improving the efficiency of dirnodes ===
-
-The current mutable-file -based dirnode scheme suffers from certain
-inefficiencies. A very large directory (with thousands or millions of
-children) will take a significant time to extract any single entry, because
-the whole file must be downloaded first, then parsed and searched to find the
-desired child entry. Likewise, modifying a single child will require the
-whole file to be re-uploaded.
-
-The current design assumes (and in some cases, requires) that dirnodes remain
-small. The mutable files on which dirnodes are based are currently using
-"SDMF" ("Small Distributed Mutable File") design rules, which state that the
-size of the data shall remain below one megabyte. More advanced forms of
-mutable files (MDMF and LDMF) are in the design phase to allow efficient
-manipulation of larger mutable files. This would reduce the work needed to
-modify a single entry in a large directory.
-
-Judicious caching may help improve the reading-large-directory case. Some
-form of mutable index at the beginning of the dirnode might help as well. The
-MDMF design rules allow for efficient random-access reads from the middle of
-the file, which would give the index something useful to point at.
-
-The current SDMF design generates a new RSA public/private keypair for each
-directory. This takes considerable time and CPU effort, generally one or two
-seconds per directory. We have designed (but not yet built) a DSA-based
-mutable file scheme which will use shared parameters to reduce the
-directory-creation effort to a bare minimum (picking a random number instead
-of generating two random primes).
-
-
-When a backup program is run for the first time, it needs to copy a large
-amount of data from a pre-existing filesystem into reliable storage. This
-means that a large and complex directory structure needs to be duplicated in
-the dirnode layer. With the one-object-per-dirnode approach described here,
-this requires as many operations as there are edges in the imported
-filesystem graph.
-
-Another approach would be to aggregate multiple directories into a single
-storage object. This object would contain a serialized graph rather than a
-single name-to-child dictionary. Most directory operations would fetch the
-whole block of data (and presumeably cache it for a while to avoid lots of
-re-fetches), and modification operations would need to replace the whole
-thing at once. This "realm" approach would have the added benefit of
-combining more data into a single encrypted bundle (perhaps hiding the shape
-of the graph from a determined attacker), and would reduce round-trips when
-performing deep directory traversals (assuming the realm was already cached).
-It would also prevent fine-grained rollback attacks from working: a coalition
-of storage servers could change the entire realm to look like an earlier
-state, but it could not independently roll back individual directories.
-
-The drawbacks of this aggregation would be that small accesses (adding a
-single child, looking up a single child) would require pulling or pushing a
-lot of unrelated data, increasing network overhead (and necessitating
-test-and-set semantics for the modification side, which increases the chances
-that a user operation will fail, making it more challenging to provide
-promises of atomicity to the user).
-
-It would also make it much more difficult to enable the delegation
-("sharing") of specific directories. Since each aggregate "realm" provides
-all-or-nothing access control, the act of delegating any directory from the
-middle of the realm would require the realm first be split into the upper
-piece that isn't being shared and the lower piece that is. This splitting
-would have to be done in response to what is essentially a read operation,
-which is not traditionally supposed to be a high-effort action. On the other
-hand, it may be possible to aggregate the ciphertext, but use distinct
-encryption keys for each component directory, to get the benefits of both
-schemes at once.
-
-
-=== Dirnode expiration and leases ===
-
-Dirnodes are created any time a client wishes to add a new directory. How
-long do they live? What's to keep them from sticking around forever, taking
-up space that nobody can reach any longer?
-
-Mutable files are created with limited-time "leases", which keep the shares
-alive until the last lease has expired or been cancelled. Clients which know
-and care about specific dirnodes can ask to keep them alive for a while, by
-renewing a lease on them (with a typical period of one month). Clients are
-expected to assist in the deletion of dirnodes by canceling their leases as
-soon as they are done with them. This means that when a client deletes a
-directory, it should also cancel its lease on that directory. When the lease
-count on a given share goes to zero, the storage server can delete the
-related storage. Multiple clients may all have leases on the same dirnode:
-the server may delete the shares only after all of the leases have gone away.
-
-We expect that clients will periodically create a "manifest": a list of
-so-called "refresh capabilities" for all of the dirnodes and files that they
-can reach. They will give this manifest to the "repairer", which is a service
-that keeps files (and dirnodes) alive on behalf of clients who cannot take on
-this responsibility for themselves. These refresh capabilities include the
-storage index, but do *not* include the readkeys or writekeys, so the
-repairer does not get to read the files or directories that it is helping to
-keep alive.
-
-After each change to the user's vdrive, the client creates a manifest and
-looks for differences from their previous version. Anything which was removed
-prompts the client to send out lease-cancellation messages, allowing the data
-to be deleted.
-
-
-== Starting Points: root dirnodes ==
-
-Any client can record the URI of a directory node in some external form (say,
-in a local file) and use it as the starting point of later traversal. Each
-Tahoe user is expected to create a new (unattached) dirnode when they first
-start using the grid, and record its URI for later use.
-
-== Mounting and Sharing Directories ==
-
-The biggest benefit of this dirnode approach is that sharing individual
-directories is almost trivial. Alice creates a subdirectory that she wants to
-use to share files with Bob. This subdirectory is attached to Alice's
-filesystem at "~alice/share-with-bob". She asks her filesystem for the
-read-write directory URI for that new directory, and emails it to Bob. When
-Bob receives the URI, he asks his own local vdrive to attach the given URI,
-perhaps at a place named "~bob/shared-with-alice". Every time either party
-writes a file into this directory, the other will be able to read it. If
-Alice prefers, she can give a read-only URI to Bob instead, and then Bob will
-be able to read files but not change the contents of the directory. Neither
-Alice nor Bob will get access to any files above the mounted directory: there
-are no 'parent directory' pointers. If Alice creates a nested set of
-directories, "~alice/share-with-bob/subdir2", and gives a read-only URI to
-share-with-bob to Bob, then Bob will be unable to write to either
-share-with-bob/ or subdir2/.
-
-A suitable UI needs to be created to allow users to easily perform this
-sharing action: dragging a folder their vdrive to an IM or email user icon,
-for example. The UI will need to give the sending user an opportunity to
-indicate whether they want to grant read-write or read-only access to the
-recipient. The recipient then needs an interface to drag the new folder into
-their vdrive and give it a home.
-
-== Revocation ==
-
-When Alice decides that she no longer wants Bob to be able to access the
-shared directory, what should she do? Suppose she's shared this folder with
-both Bob and Carol, and now she wants Carol to retain access to it but Bob to
-be shut out. Ideally Carol should not have to do anything: her access should
-continue unabated.
-
-The current plan is to have her client create a deep copy of the folder in
-question, delegate access to the new folder to the remaining members of the
-group (Carol), asking the lucky survivors to replace their old reference with
-the new one. Bob may still have access to the old folder, but he is now the
-only one who cares: everyone else has moved on, and he will no longer be able
-to see their new changes. In a strict sense, this is the strongest form of
-revocation that can be accomplished: there is no point trying to force Bob to
-forget about the files that he read a moment before being kicked out. In
-addition it must be noted that anyone who can access the directory can proxy
-for Bob, reading files to him and accepting changes whenever he wants.
-Preventing delegation between communication parties is just as pointless as
-asking Bob to forget previously accessed files. However, there may be value
-to configuring the UI to ask Carol to not share files with Bob, or to
-removing all files from Bob's view at the same time his access is revoked.
-
+++ /dev/null
-
-== FileEncoding ==
-
-When the client wishes to upload an immutable file, the first step is to
-decide upon an encryption key. There are two methods: convergent or random.
-The goal of the convergent-key method is to make sure that multiple uploads
-of the same file will result in only one copy on the grid, whereas the
-random-key method does not provide this "convergence" feature.
-
-The convergent-key method computes the SHA-256d hash of a single-purpose tag,
-the encoding parameters, a "convergence secret", and the contents of the
-file. It uses a portion of the resulting hash as the AES encryption key.
-There are security concerns with using convergence this approach (the
-"partial-information guessing attack", please see ticket #365 for some
-references), so Tahoe uses a separate (randomly-generated) "convergence
-secret" for each node, stored in NODEDIR/private/convergence . The encoding
-parameters (k, N, and the segment size) are included in the hash to make sure
-that two different encodings of the same file will get different keys. This
-method requires an extra IO pass over the file, to compute this key, and
-encryption cannot be started until the pass is complete. This means that the
-convergent-key method will require at least two total passes over the file.
-
-The random-key method simply chooses a random encryption key. Convergence is
-disabled, however this method does not require a separate IO pass, so upload
-can be done with a single pass. This mode makes it easier to perform
-streaming upload.
-
-Regardless of which method is used to generate the key, the plaintext file is
-encrypted (using AES in CTR mode) to produce a ciphertext. This ciphertext is
-then erasure-coded and uploaded to the servers. Two hashes of the ciphertext
-are generated as the encryption proceeds: a flat hash of the whole
-ciphertext, and a Merkle tree. These are used to verify the correctness of
-the erasure decoding step, and can be used by a "verifier" process to make
-sure the file is intact without requiring the decryption key.
-
-The encryption key is hashed (with SHA-256d and a single-purpose tag) to
-produce the "Storage Index". This Storage Index (or SI) is used to identify
-the shares produced by the method described below. The grid can be thought of
-as a large table that maps Storage Index to a ciphertext. Since the
-ciphertext is stored as erasure-coded shares, it can also be thought of as a
-table that maps SI to shares.
-
-Anybody who knows a Storage Index can retrieve the associated ciphertext:
-ciphertexts are not secret.
-
-
-[[Image(file-encoding1.png)]]
-
-The ciphertext file is then broken up into segments. The last segment is
-likely to be shorter than the rest. Each segment is erasure-coded into a
-number of "blocks". This takes place one segment at a time. (In fact,
-encryption and erasure-coding take place at the same time, once per plaintext
-segment). Larger segment sizes result in less overhead overall, but increase
-both the memory footprint and the "alacrity" (the number of bytes we have to
-receive before we can deliver validated plaintext to the user). The current
-default segment size is 128KiB.
-
-One block from each segment is sent to each shareholder (aka leaseholder,
-aka landlord, aka storage node, aka peer). The "share" held by each remote
-shareholder is nominally just a collection of these blocks. The file will
-be recoverable when a certain number of shares have been retrieved.
-
-[[Image(file-encoding2.png)]]
-
-The blocks are hashed as they are generated and transmitted. These
-block hashes are put into a Merkle hash tree. When the last share has been
-created, the merkle tree is completed and delivered to the peer. Later, when
-we retrieve these blocks, the peer will send many of the merkle hash tree
-nodes ahead of time, so we can validate each block independently.
-
-The root of this block hash tree is called the "block root hash" and
-used in the next step.
-
-[[Image(file-encoding3.png)]]
-
-There is a higher-level Merkle tree called the "share hash tree". Its leaves
-are the block root hashes from each share. The root of this tree is called
-the "share root hash" and is included in the "URI Extension Block", aka UEB.
-The ciphertext hash and Merkle tree are also put here, along with the
-original file size, and the encoding parameters. The UEB contains all the
-non-secret values that could be put in the URI, but would have made the URI
-too big. So instead, the UEB is stored with the share, and the hash of the
-UEB is put in the URI.
-
-The URI then contains the secret encryption key and the UEB hash. It also
-contains the basic encoding parameters (k and N) and the file size, to make
-download more efficient (by knowing the number of required shares ahead of
-time, sufficient download queries can be generated in parallel).
-
-The URI (also known as the immutable-file read-cap, since possessing it
-grants the holder the capability to read the file's plaintext) is then
-represented as a (relatively) short printable string like so:
-
- URI:CHK:auxet66ynq55naiy2ay7cgrshm:6rudoctmbxsmbg7gwtjlimd6umtwrrsxkjzthuldsmo4nnfoc6fa:3:10:1000000
-
-[[Image(file-encoding4.png)]]
-
-During download, when a peer begins to transmit a share, it first transmits
-all of the parts of the share hash tree that are necessary to validate its
-block root hash. Then it transmits the portions of the block hash tree
-that are necessary to validate the first block. Then it transmits the
-first block. It then continues this loop: transmitting any portions of the
-block hash tree to validate block#N, then sending block#N.
-
-[[Image(file-encoding5.png)]]
-
-So the "share" that is sent to the remote peer actually consists of three
-pieces, sent in a specific order as they become available, and retrieved
-during download in a different order according to when they are needed.
-
-The first piece is the blocks themselves, one per segment. The last
-block will likely be shorter than the rest, because the last segment is
-probably shorter than the rest. The second piece is the block hash tree,
-consisting of a total of two SHA-1 hashes per block. The third piece is a
-hash chain from the share hash tree, consisting of log2(numshares) hashes.
-
-During upload, all blocks are sent first, followed by the block hash
-tree, followed by the share hash chain. During download, the share hash chain
-is delivered first, followed by the block root hash. The client then uses
-the hash chain to validate the block root hash. Then the peer delivers
-enough of the block hash tree to validate the first block, followed by
-the first block itself. The block hash chain is used to validate the
-block, then it is passed (along with the first block from several other
-peers) into decoding, to produce the first segment of crypttext, which is
-then decrypted to produce the first segment of plaintext, which is finally
-delivered to the user.
-
-[[Image(file-encoding6.png)]]
-
-== Hashes ==
-
-All hashes use SHA-256d, as defined in Practical Cryptography (by Ferguson
-and Schneier). All hashes use a single-purpose tag, e.g. the hash that
-converts an encryption key into a storage index is defined as follows:
-
- SI = SHA256d(netstring("allmydata_immutable_key_to_storage_index_v1") + key)
-
-When two separate values need to be combined together in a hash, we wrap each
-in a netstring.
-
-Using SHA-256d (instead of plain SHA-256) guards against length-extension
-attacks. Using the tag protects our Merkle trees against attacks in which the
-hash of a leaf is confused with a hash of two children (allowing an attacker
-to generate corrupted data that nevertheless appears to be valid), and is
-simply good "cryptograhic hygiene". The "Chosen Protocol Attack" by Kelsey,
-Schneier, and Wagner (http://www.schneier.com/paper-chosen-protocol.html) is
-relevant. Putting the tag in a netstring guards against attacks that seek to
-confuse the end of the tag with the beginning of the subsequent value.
+++ /dev/null
-<?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="744.09448819"
- height="1052.3622047"
- id="svg2"
- sodipodi:version="0.32"
- inkscape:version="0.46"
- sodipodi:docbase="/home/warner/trees/tahoe/docs"
- sodipodi:docname="file-encoding1.svg"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"
- sodipodi:modified="true">
- <defs
- id="defs4">
- <marker
- inkscape:stockid="Arrow1Mend"
- orient="auto"
- refY="0.0"
- refX="0.0"
- id="Arrow1Mend"
- style="overflow:visible;">
- <path
- id="path3252"
- d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
- transform="scale(0.4) rotate(180) translate(10,0)" />
- </marker>
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 526.18109 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="744.09448 : 526.18109 : 1"
- inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
- id="perspective81" />
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0.0"
- refX="0.0"
- id="Arrow1Lend"
- style="overflow:visible;">
- <path
- id="path2976"
- d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
- transform="scale(0.8) rotate(180) translate(12.5,0)" />
- </marker>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- gridtolerance="10000"
- guidetolerance="10"
- objecttolerance="10"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="1.0395661"
- inkscape:cx="631.22458"
- inkscape:cy="706.27996"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- inkscape:window-width="1680"
- inkscape:window-height="1050"
- inkscape:window-x="0"
- inkscape:window-y="0"
- showgrid="false" />
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1">
- <g
- id="g3081"
- transform="translate(-198.1596,-0.9619396)">
- <rect
- y="17.505058"
- x="210.76614"
- height="78.85553"
- width="305.95944"
- id="rect1872"
- style="fill:#e3f4d7;stroke:#000000;stroke-opacity:1" />
- <text
- sodipodi:linespacing="100%"
- id="text1874"
- y="44.315933"
- x="258.83313"
- style="font-size:28px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="44.315933"
- x="258.83313"
- id="tspan3079"
- sodipodi:role="line">FILE (plaintext)</tspan></text>
- </g>
- <g
- id="g4629"
- transform="translate(-8.6574585,46.173112)">
- <rect
- style="fill:#d5f6ff;fill-opacity:1;stroke:#000000;stroke-opacity:1"
- id="rect3033"
- width="116.35974"
- height="73.956482"
- x="442.19803"
- y="243.98456" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="501.92212"
- y="264.25281"
- id="text3035"
- sodipodi:linespacing="100%"><tspan
- y="264.25281"
- x="501.92212"
- id="tspan3047"
- sodipodi:role="line">convergent</tspan><tspan
- id="tspan4627"
- y="284.25281"
- x="501.92212"
- sodipodi:role="line">encryption</tspan><tspan
- y="304.25281"
- x="501.92212"
- sodipodi:role="line"
- id="tspan4604">key</tspan></text>
- </g>
- <g
- id="g3139"
- transform="translate(-122.35224,48.551816)">
- <path
- transform="matrix(0.923205,0,0,0.923205,-231.4625,247.6493)"
- d="M 642.52774,196.10106 A 34.958466,34.073441 0 1 1 572.61081,196.10106 A 34.958466,34.073441 0 1 1 642.52774,196.10106 z"
- sodipodi:ry="34.073441"
- sodipodi:rx="34.958466"
- sodipodi:cy="196.10106"
- sodipodi:cx="607.56927"
- id="path3128"
- style="fill:#ffe6d5;fill-opacity:1;stroke:#000000;stroke-opacity:1"
- sodipodi:type="arc" />
- <text
- sodipodi:linespacing="100%"
- id="text3130"
- y="434.10446"
- x="299.26846"
- style="font-size:14.77128029px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="434.10446"
- x="299.26846"
- id="tspan3137"
- sodipodi:role="line">AES-CTR</tspan></text>
- </g>
- <g
- id="g3201"
- transform="translate(-129.86188,50.020871)">
- <rect
- style="fill:#d5e5ff;stroke:#000000;stroke-width:0.96806562;stroke-opacity:1"
- id="rect3154"
- width="286.73019"
- height="78.85553"
- x="196.96533"
- y="521.95709" />
- <text
- transform="scale(0.968066,1.032988)"
- xml:space="preserve"
- style="font-size:27.10585976px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="249.83606"
- y="531.24384"
- id="text3156"
- sodipodi:linespacing="100%"><tspan
- y="531.24384"
- x="249.83606"
- id="tspan3163"
- sodipodi:role="line">FILE (crypttext)</tspan></text>
- </g>
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- d="M 208.10132,509.1107 L 208.10132,568.80529"
- id="path3170"
- sodipodi:nodetypes="cc" />
- <g
- id="g4640"
- transform="translate(447.30202,-236.63721)">
- <rect
- y="755.01099"
- x="24.107248"
- height="28.084265"
- width="36.708984"
- id="rect3195"
- style="fill:#e3f4d7;stroke:#000000;stroke-width:1.19514322;stroke-opacity:1" />
- <text
- sodipodi:linespacing="100%"
- id="text3197"
- y="771.30011"
- x="32.327164"
- style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="771.30011"
- x="32.327164"
- id="tspan3246"
- sodipodi:role="line">tag</tspan></text>
- </g>
- <g
- id="g4661"
- transform="translate(1.9238797,4.8096992)">
- <rect
- y="702.01349"
- x="514.47058"
- height="55.723186"
- width="100.84161"
- id="rect3237"
- style="fill:#d5f6ff;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
- <text
- sodipodi:linespacing="100%"
- id="text3239"
- y="724.94507"
- x="564.60577"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="724.94507"
- x="564.60577"
- id="tspan3253"
- sodipodi:role="line">storage</tspan><tspan
- id="tspan4659"
- y="744.94507"
- x="564.60577"
- sodipodi:role="line">index</tspan></text>
- </g>
- <g
- id="g3212"
- transform="translate(-96.193983,-7.2527756)">
- <path
- sodipodi:type="arc"
- style="fill:#ffe6d5;fill-opacity:1;stroke:#000000;stroke-opacity:1"
- id="path3214"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774,196.10106 A 34.958466,34.073441 0 1 1 572.61081,196.10106 A 34.958466,34.073441 0 1 1 642.52774,196.10106 z"
- transform="matrix(0.923205,0,0,0.923205,16.499579,-4.4109378)" />
- <text
- xml:space="preserve"
- style="font-size:14.77128029px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="548.34637"
- y="181.94142"
- id="text3216"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3218"
- x="548.34637"
- y="181.94142">SHA-256</tspan></text>
- </g>
- <g
- transform="translate(-9.1639282,440.10771)"
- id="g3220">
- <path
- transform="matrix(0.923205,0,0,0.923205,16.499579,-4.4109378)"
- d="M 642.52774,196.10106 A 34.958466,34.073441 0 1 1 572.61081,196.10106 A 34.958466,34.073441 0 1 1 642.52774,196.10106 z"
- sodipodi:ry="34.073441"
- sodipodi:rx="34.958466"
- sodipodi:cy="196.10106"
- sodipodi:cx="607.56927"
- id="path3222"
- style="fill:#ffe6d5;fill-opacity:1;stroke:#000000;stroke-opacity:1"
- sodipodi:type="arc" />
- <text
- sodipodi:linespacing="100%"
- id="text3224"
- y="181.94142"
- x="548.34637"
- style="font-size:14.77128029px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="181.94142"
- x="548.34637"
- id="tspan3226"
- sodipodi:role="line">SHA-256</tspan></text>
- </g>
- <path
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2b0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 320.32596,46.173119 C 407.86248,54.830577 448.26397,96.193988 468.4647,138.51934"
- id="path2462"
- sodipodi:nodetypes="cz" />
- <path
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2b0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 200.08348,97.15593 C 198.48026,294.3536 195.91508,353.03192 205.85512,444.41621"
- id="path4024"
- sodipodi:nodetypes="cs" />
- <g
- id="g4558"
- transform="translate(141.40516,-11.543278)">
- <rect
- y="125.18694"
- x="220.07802"
- height="36.436913"
- width="55.42865"
- id="rect4549"
- style="fill:#e3f4d7;stroke:#000000;stroke-width:1.19514322;stroke-opacity:1" />
- <text
- sodipodi:linespacing="100%"
- id="text4551"
- y="145.6524"
- x="237.65776"
- style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan4553"
- x="237.65776"
- y="145.6524">tag</tspan></text>
- </g>
- <path
- sodipodi:nodetypes="cz"
- id="path4563"
- d="M 416.51994,129.86189 C 429.9871,127.93801 436.72069,133.70964 452.11173,151.9865"
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2b0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <g
- id="g4576"
- transform="translate(12.505218,-12.505218)">
- <rect
- style="fill:#e3f4d7;stroke:#000000;stroke-width:1.19514322;stroke-opacity:1"
- id="rect4567"
- width="161.24203"
- height="40.284672"
- x="481.72565"
- y="69.394432" />
- <text
- xml:space="preserve"
- style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="498.39401"
- y="92.476768"
- id="text4569"
- sodipodi:linespacing="100%"><tspan
- y="92.476768"
- x="498.39401"
- id="tspan4571"
- sodipodi:role="line">encoding parameters</tspan></text>
- </g>
- <path
- sodipodi:nodetypes="cz"
- id="path4581"
- d="M 564.65868,98.11787 C 565.62061,128.89994 533.87661,132.7477 507.90423,147.1768"
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2b0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2b0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 479.04603,201.04543 C 487.70348,234.71332 489.62738,252.99018 491.55126,288.58195"
- id="path4583"
- sodipodi:nodetypes="cz" />
- <g
- id="g4616"
- transform="translate(16.352977,64.449968)">
- <rect
- y="227.63158"
- x="583.60315"
- height="71.070618"
- width="119.24558"
- id="rect4587"
- style="fill:#d5f6ff;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
- <text
- sodipodi:linespacing="100%"
- id="text4589"
- y="246.66689"
- x="644.2406"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan4591"
- x="644.2406"
- y="246.66689">random</tspan><tspan
- id="tspan4600"
- sodipodi:role="line"
- x="644.2406"
- y="266.66687">encryption</tspan><tspan
- id="tspan4602"
- sodipodi:role="line"
- x="644.2406"
- y="286.66687">key</tspan></text>
- </g>
- <path
- sodipodi:nodetypes="cz"
- id="path4593"
- d="M 486.74156,365.53714 C 480.96991,415.55801 289.54389,464.61694 241.4469,469.42664"
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2b0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2b0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 654.1191,362.65133 C 625.26089,454.03561 275.1148,476.16022 241.4469,480.00798"
- id="path4595"
- sodipodi:nodetypes="cz" />
- <text
- xml:space="preserve"
- style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Courier 10 Pitch"
- x="561.77289"
- y="335.71701"
- id="text4636"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan4638"
- x="561.77289"
- y="335.71701">or</tspan></text>
- <path
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2b0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 485.77962,367.46102 C 496.36095,429.98711 582.93553,528.10497 576.20196,584.85942"
- id="path4645"
- sodipodi:nodetypes="cz" />
- <path
- sodipodi:nodetypes="cz"
- id="path4647"
- d="M 654.1191,364.57521 C 642.57581,418.44383 597.36465,548.3057 582.93554,585.82136"
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2b0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2b0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 507.90424,532.91467 C 534.83855,543.49601 533.87661,566.58256 548.30571,589.66912"
- id="path4649"
- sodipodi:nodetypes="cz" />
- <path
- sodipodi:nodetypes="cz"
- id="path4651"
- d="M 564.65869,648.34745 C 568.50644,671.43401 569.46838,687.78698 569.46838,704.13996"
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2b0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- </g>
-</svg>
+++ /dev/null
-<?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://web.resource.org/cc/"
- 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="744.09448819"
- height="1052.3622047"
- id="svg2"
- sodipodi:version="0.32"
- inkscape:version="0.45"
- sodipodi:docbase="/home/warner/trees/tahoe/docs"
- sodipodi:docname="file-encoding2.svg"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"
- sodipodi:modified="true">
- <defs
- id="defs4">
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0.0"
- refX="0.0"
- id="Arrow1Lend"
- style="overflow:visible;">
- <path
- id="path2976"
- d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
- transform="scale(0.8) rotate(180) translate(12.5,0)" />
- </marker>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- gridtolerance="10000"
- guidetolerance="10"
- objecttolerance="10"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="0.51978303"
- inkscape:cx="372.04724"
- inkscape:cy="526.18109"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- inkscape:window-width="900"
- inkscape:window-height="756"
- inkscape:window-x="779"
- inkscape:window-y="153" />
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1">
- <g
- id="g3201"
- transform="translate(-5.78221,-477.996)">
- <rect
- style="fill:#d5e5ff;stroke:black;stroke-width:0.96806562;stroke-opacity:1"
- id="rect3154"
- width="286.73019"
- height="78.85553"
- x="196.96533"
- y="521.95709" />
- <text
- transform="scale(0.968066,1.032988)"
- xml:space="preserve"
- style="font-size:27.10585976px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="249.83606"
- y="531.24384"
- id="text3156"
- sodipodi:linespacing="100%"><tspan
- y="531.24384"
- x="249.83606"
- id="tspan3163"
- sodipodi:role="line">FILE (crypttext)</tspan></text>
- </g>
- <g
- id="g2022">
- <rect
- y="214.548"
- x="40.845631"
- height="80.782936"
- width="80.498047"
- id="rect3273"
- style="fill:#d5e5ff;stroke:black;stroke-width:0.96806562;stroke-opacity:1" />
- <text
- sodipodi:linespacing="100%"
- id="text3275"
- y="255.87878"
- x="56.581703"
- style="font-size:27.99999214;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"
- transform="scale(0.968066,1.032988)"><tspan
- y="255.87878"
- x="56.581703"
- id="tspan1993"
- sodipodi:role="line">segA</tspan></text>
- </g>
- <g
- id="g2017">
- <rect
- style="fill:#d5e5ff;stroke:black;stroke-width:0.96806562;stroke-opacity:1"
- id="rect3284"
- width="80.498047"
- height="80.782936"
- x="161.45784"
- y="214.548" />
- <text
- transform="scale(0.968066,1.032988)"
- xml:space="preserve"
- style="font-size:28;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="184.53419"
- y="251.69087"
- id="text3286"
- sodipodi:linespacing="100%"><tspan
- y="251.69087"
- x="184.53419"
- id="tspan1995"
- sodipodi:role="line">segB</tspan></text>
- </g>
- <g
- id="g2012">
- <rect
- y="214.548"
- x="282.07007"
- height="80.782936"
- width="80.498047"
- id="rect3290"
- style="fill:#d5e5ff;stroke:black;stroke-width:0.96806562;stroke-opacity:1" />
- <text
- sodipodi:linespacing="100%"
- id="text3292"
- y="253.62892"
- x="304.44913"
- style="font-size:27.99999214;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"
- transform="scale(0.968066,1.032988)"><tspan
- y="253.62892"
- x="304.44913"
- id="tspan1997"
- sodipodi:role="line">segC</tspan></text>
- </g>
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 223.51231,125.60384 L 88.587195,212.82815"
- id="path4243"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 297.10782,124.24096 L 205.79487,215.55391"
- id="path4245"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 373.4291,122.87808 L 325.7283,212.82816"
- id="path4247"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 458.9333,124.24096 L 443.56317,216.05143"
- id="path4249"
- sodipodi:nodetypes="cc" />
- <rect
- y="214.548"
- x="422.02194"
- height="80.782951"
- width="61.22403"
- id="rect3296"
- style="fill:#d5e5ff;stroke:black;stroke-width:0.96806562;stroke-opacity:1" />
- <text
- sodipodi:linespacing="100%"
- id="text3298"
- y="253.42572"
- x="440.45892"
- style="font-size:28px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"
- transform="scale(0.968066,1.032988)"><tspan
- sodipodi:role="line"
- id="tspan1999"
- x="440.45892"
- y="253.42572">segD</tspan></text>
- <rect
- style="fill:white;fill-opacity:1;stroke:black;stroke-width:0.96806562;stroke-opacity:1"
- id="rect3308"
- width="32.312965"
- height="80.782936"
- x="484.21405"
- y="214.548" />
- <g
- id="g2040"
- transform="translate(-16.41804,-13.31249)">
- <path
- sodipodi:type="arc"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="path2029"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- transform="matrix(0.923205,0,0,0.923205,-463.3983,190.6491)" />
- <text
- xml:space="preserve"
- style="font-size:14.77128029px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="84.763"
- y="377.10425"
- id="text2031"
- sodipodi:linespacing="100%"><tspan
- y="377.10425"
- x="84.763"
- id="tspan2038"
- sodipodi:role="line">FEC</tspan></text>
- </g>
- <rect
- style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="rect2045"
- width="62.568695"
- height="54.581161"
- x="106.49989"
- y="400.05042"
- ry="0" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="114.42955"
- y="424.05099"
- id="text2932"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan2934"
- x="114.42955"
- y="424.05099">block</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="126.88751"
- y="445.35098"
- id="text2936"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan2938"
- x="126.88751"
- y="445.35098">A1</tspan></text>
- <rect
- ry="0"
- y="471.49408"
- x="106.49989"
- height="54.581161"
- width="62.568695"
- id="rect2956"
- style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1" />
- <text
- sodipodi:linespacing="100%"
- id="text2960"
- y="495.49466"
- x="114.42955"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan3869"
- x="114.42955"
- y="495.49466">block</tspan></text>
- <text
- sodipodi:linespacing="100%"
- id="text2964"
- y="516.79468"
- x="126.88751"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan3018"
- x="126.88751"
- y="516.79468">A2</tspan></text>
- <rect
- style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="rect2970"
- width="62.568695"
- height="54.581161"
- x="106.49989"
- y="542.93781"
- ry="0" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="114.42955"
- y="566.93835"
- id="text2974"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan2976"
- x="114.42955"
- y="566.93835">block</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="126.88751"
- y="588.23834"
- id="text2978"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3040"
- x="126.88751"
- y="588.23834">A3</tspan></text>
- <rect
- ry="0"
- y="614.38141"
- x="106.49989"
- height="54.581161"
- width="62.568695"
- id="rect2984"
- style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1" />
- <text
- sodipodi:linespacing="100%"
- id="text2988"
- y="638.38196"
- x="114.42955"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="638.38196"
- x="114.42955"
- id="tspan2990"
- sodipodi:role="line">block</tspan></text>
- <text
- sodipodi:linespacing="100%"
- id="text2992"
- y="659.68195"
- x="126.88751"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan3042"
- x="126.88751"
- y="659.68195">A4</tspan></text>
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 79.874914,296.213 L 79.874914,326.83172"
- id="path2996" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 90.524902,388.06915 C 85.442028,403.37176 95.420905,411.5033 105.16864,424.01286"
- id="path3000"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 82.537411,389.4004 C 77.419162,441.79407 81.801856,464.47336 103.83739,495.90028"
- id="path3002"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 71.887422,389.4004 C 62.3162,464.27336 66.595451,538.86154 105.16864,573.1127"
- id="path3004"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 59.906185,384.0754 C 30.833264,497.98462 73.280777,611.91471 105.16864,643.66887"
- id="path3006"
- sodipodi:nodetypes="cc" />
- <g
- transform="translate(114.1248,-13.31249)"
- id="g3090">
- <path
- transform="matrix(0.923205,0,0,0.923205,-463.3983,190.6491)"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- sodipodi:ry="34.073441"
- sodipodi:rx="34.958466"
- sodipodi:cy="196.10106"
- sodipodi:cx="607.56927"
- id="path3092"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- sodipodi:type="arc" />
- <text
- sodipodi:linespacing="100%"
- id="text3094"
- y="377.10425"
- x="84.763"
- style="font-size:14.77128029px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan3096"
- x="84.763"
- y="377.10425">FEC</tspan></text>
- </g>
- <rect
- ry="0"
- y="400.05042"
- x="237.04271"
- height="54.581161"
- width="62.568695"
- id="rect3098"
- style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1" />
- <text
- sodipodi:linespacing="100%"
- id="text3100"
- y="424.05099"
- x="244.97237"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="424.05099"
- x="244.97237"
- id="tspan3102"
- sodipodi:role="line">block</tspan></text>
- <text
- sodipodi:linespacing="100%"
- id="text3104"
- y="445.35098"
- x="257.43033"
- style="font-size:20;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan3266"
- x="257.43033"
- y="445.35098">B1</tspan></text>
- <rect
- style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="rect3108"
- width="62.568695"
- height="54.581161"
- x="237.04271"
- y="471.49408"
- ry="0" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="244.97237"
- y="495.49466"
- id="text3110"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3112"
- x="244.97237"
- y="495.49466">block</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="257.43033"
- y="516.79468"
- id="text3114"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3268"
- x="257.43033"
- y="516.79468">B2</tspan></text>
- <rect
- ry="0"
- y="542.93781"
- x="237.04271"
- height="54.581161"
- width="62.568695"
- id="rect3118"
- style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1" />
- <text
- sodipodi:linespacing="100%"
- id="text3120"
- y="566.93835"
- x="244.97237"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="566.93835"
- x="244.97237"
- id="tspan3122"
- sodipodi:role="line">block</tspan></text>
- <text
- sodipodi:linespacing="100%"
- id="text3124"
- y="588.23834"
- x="257.43033"
- style="font-size:20;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan3270"
- x="257.43033"
- y="588.23834">B3</tspan></text>
- <rect
- style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="rect3128"
- width="62.568695"
- height="54.581161"
- x="237.04271"
- y="614.38141"
- ry="0" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="244.97237"
- y="638.38196"
- id="text3130"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3132"
- x="244.97237"
- y="638.38196">block</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="257.43033"
- y="659.68195"
- id="text3134"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3272"
- x="257.43033"
- y="659.68195">B4</tspan></text>
- <path
- id="path3138"
- d="M 210.41773,296.213 L 210.41773,326.83172"
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1" />
- <path
- sodipodi:nodetypes="cc"
- id="path3140"
- d="M 221.06772,388.06915 C 215.98484,403.37176 225.96372,411.5033 235.71146,424.01286"
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1" />
- <path
- sodipodi:nodetypes="cc"
- id="path3142"
- d="M 213.08023,389.4004 C 207.96198,441.79407 212.34467,464.47336 234.38021,495.90028"
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1" />
- <path
- sodipodi:nodetypes="cc"
- id="path3144"
- d="M 202.43024,389.4004 C 192.85902,464.27336 197.13827,538.86154 235.71146,573.1127"
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1" />
- <path
- sodipodi:nodetypes="cc"
- id="path3146"
- d="M 190.449,384.0754 C 161.37608,497.98462 203.82359,611.91471 235.71146,643.66887"
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1" />
- <g
- id="g3148"
- transform="translate(241.4443,-13.31249)">
- <path
- sodipodi:type="arc"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="path3150"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- transform="matrix(0.923205,0,0,0.923205,-463.3983,190.6491)" />
- <text
- xml:space="preserve"
- style="font-size:14.77128029px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="84.763"
- y="377.10425"
- id="text3152"
- sodipodi:linespacing="100%"><tspan
- y="377.10425"
- x="84.763"
- id="tspan3154"
- sodipodi:role="line">FEC</tspan></text>
- </g>
- <rect
- style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="rect3156"
- width="62.568695"
- height="54.581161"
- x="364.36224"
- y="400.05042"
- ry="0" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="372.2919"
- y="424.05099"
- id="text3158"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3160"
- x="372.2919"
- y="424.05099">block</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="384.74988"
- y="445.35098"
- id="text3162"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3274"
- x="384.74988"
- y="445.35098">C1</tspan></text>
- <rect
- ry="0"
- y="471.49408"
- x="364.36224"
- height="54.581161"
- width="62.568695"
- id="rect3166"
- style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1" />
- <text
- sodipodi:linespacing="100%"
- id="text3168"
- y="495.49466"
- x="372.2919"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="495.49466"
- x="372.2919"
- id="tspan3170"
- sodipodi:role="line">block</tspan></text>
- <text
- sodipodi:linespacing="100%"
- id="text3172"
- y="516.79468"
- x="384.74988"
- style="font-size:20;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan3278"
- x="384.74988"
- y="516.79468">C2</tspan></text>
- <rect
- style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="rect3176"
- width="62.568695"
- height="54.581161"
- x="364.36224"
- y="542.93781"
- ry="0" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="372.2919"
- y="566.93835"
- id="text3178"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3180"
- x="372.2919"
- y="566.93835">block</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="384.74988"
- y="588.23834"
- id="text3182"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3280"
- x="384.74988"
- y="588.23834">C3</tspan></text>
- <rect
- ry="0"
- y="614.38141"
- x="364.36224"
- height="54.581161"
- width="62.568695"
- id="rect3186"
- style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1" />
- <text
- sodipodi:linespacing="100%"
- id="text3188"
- y="638.38196"
- x="372.2919"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="638.38196"
- x="372.2919"
- id="tspan3190"
- sodipodi:role="line">block</tspan></text>
- <text
- sodipodi:linespacing="100%"
- id="text3192"
- y="659.68195"
- x="384.74988"
- style="font-size:20;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan3282"
- x="384.74988"
- y="659.68195">C4</tspan></text>
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- d="M 337.73727,296.213 L 337.73727,326.83172"
- id="path3196" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- d="M 348.38726,388.06915 C 343.30438,403.37176 353.28326,411.5033 363.031,424.01286"
- id="path3198"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- d="M 340.39977,389.4004 C 335.28152,441.79407 339.66421,464.47336 361.69975,495.90028"
- id="path3200"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- d="M 329.74978,389.4004 C 320.17856,464.27336 324.45781,538.86154 363.031,573.1127"
- id="path3202"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- d="M 317.76854,384.0754 C 288.69562,497.98462 331.14313,611.91471 363.031,643.66887"
- id="path3204"
- sodipodi:nodetypes="cc" />
- <g
- transform="translate(370.3755,-13.31249)"
- id="g3207">
- <path
- transform="matrix(0.923205,0,0,0.923205,-463.3983,190.6491)"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- sodipodi:ry="34.073441"
- sodipodi:rx="34.958466"
- sodipodi:cy="196.10106"
- sodipodi:cx="607.56927"
- id="path3209"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- sodipodi:type="arc" />
- <text
- sodipodi:linespacing="100%"
- id="text3211"
- y="377.10425"
- x="84.763"
- style="font-size:14.77128029px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan3213"
- x="84.763"
- y="377.10425">FEC</tspan></text>
- </g>
- <rect
- ry="0"
- y="400.05042"
- x="493.29343"
- height="54.581161"
- width="62.568695"
- id="rect3215"
- style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1" />
- <text
- sodipodi:linespacing="100%"
- id="text3217"
- y="424.05099"
- x="501.22308"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="424.05099"
- x="501.22308"
- id="tspan3219"
- sodipodi:role="line">block</tspan></text>
- <text
- sodipodi:linespacing="100%"
- id="text3221"
- y="445.35098"
- x="513.68103"
- style="font-size:20;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan3284"
- x="513.68103"
- y="445.35098">D1</tspan></text>
- <rect
- style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="rect3225"
- width="62.568695"
- height="54.581161"
- x="493.29343"
- y="471.49408"
- ry="0" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="501.22308"
- y="495.49466"
- id="text3227"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3229"
- x="501.22308"
- y="495.49466">block</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="513.68103"
- y="516.79468"
- id="text3231"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3286"
- x="513.68103"
- y="516.79468">D2</tspan></text>
- <rect
- ry="0"
- y="542.93781"
- x="493.29343"
- height="54.581161"
- width="62.568695"
- id="rect3235"
- style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1" />
- <text
- sodipodi:linespacing="100%"
- id="text3237"
- y="566.93835"
- x="501.22308"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="566.93835"
- x="501.22308"
- id="tspan3239"
- sodipodi:role="line">block</tspan></text>
- <text
- sodipodi:linespacing="100%"
- id="text3241"
- y="588.23834"
- x="513.68103"
- style="font-size:20;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan3288"
- x="513.68103"
- y="588.23834">D3</tspan></text>
- <rect
- style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="rect3245"
- width="62.568695"
- height="54.581161"
- x="493.29343"
- y="614.38141"
- ry="0" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="501.22308"
- y="638.38196"
- id="text3247"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3249"
- x="501.22308"
- y="638.38196">block</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="513.68103"
- y="659.68195"
- id="text3251"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3293"
- x="513.68103"
- y="659.68195">D4</tspan></text>
- <path
- id="path3256"
- d="M 466.66845,296.213 L 466.66845,326.83172"
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1" />
- <path
- sodipodi:nodetypes="cc"
- id="path3258"
- d="M 477.31844,388.06915 C 472.23556,403.37176 482.21444,411.5033 491.96218,424.01286"
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1" />
- <path
- sodipodi:nodetypes="cc"
- id="path3260"
- d="M 469.33095,389.4004 C 464.2127,441.79407 468.59539,464.47336 490.63093,495.90028"
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1" />
- <path
- sodipodi:nodetypes="cc"
- id="path3262"
- d="M 458.68096,389.4004 C 449.10974,464.27336 453.38899,538.86154 491.96218,573.1127"
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1" />
- <path
- sodipodi:nodetypes="cc"
- id="path3264"
- d="M 446.69972,384.0754 C 417.6268,497.98462 460.07431,611.91471 491.96218,643.66887"
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1" />
- <rect
- style="fill:none;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="rect3831"
- width="516.80328"
- height="103.59095"
- x="66.758537"
- y="604.61957" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="80.570648"
- y="700.15332"
- id="text3833"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3835"
- x="80.570648"
- y="700.15332">share4</tspan></text>
- <rect
- style="fill:#ffd5f6;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="rect3837"
- width="95.533775"
- height="81.721664"
- x="631.90411"
- y="640.30084" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="650.27539"
- y="660.8269"
- id="text3839"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3841"
- x="650.27539"
- y="660.8269">peer 4</tspan></text>
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 582.41071,673.68012 C 631.90411,677.13315 631.90411,677.13315 631.90411,677.13315"
- id="path3843" />
- </g>
-</svg>
+++ /dev/null
-<?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://web.resource.org/cc/"
- 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="744.09448819"
- height="1052.3622047"
- id="svg2"
- sodipodi:version="0.32"
- inkscape:version="0.44.1"
- sodipodi:docbase="/home/warner/work/tahoe-misc"
- sodipodi:docname="file-encoding3.svg">
- <defs
- id="defs4">
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0.0"
- refX="0.0"
- id="Arrow1Lend"
- style="overflow:visible;">
- <path
- id="path2976"
- d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
- transform="scale(0.8) rotate(180) translate(12.5,0)" />
- </marker>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- gridtolerance="10000"
- guidetolerance="10"
- objecttolerance="10"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="0.523584"
- inkscape:cx="372.04724"
- inkscape:cy="526.18109"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- inkscape:window-width="900"
- inkscape:window-height="756"
- inkscape:window-x="778"
- inkscape:window-y="96" />
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1">
- <g
- id="g3308"
- transform="translate(-492.4404,-287.9192)">
- <path
- sodipodi:type="arc"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="path3297"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)" />
- <text
- xml:space="preserve"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="591.47559"
- y="483.09396"
- id="text3299"
- sodipodi:linespacing="100%"><tspan
- y="483.09396"
- x="591.47559"
- id="tspan3306"
- sodipodi:role="line">SHA</tspan></text>
- </g>
- <g
- transform="translate(-361.8975,-287.9192)"
- id="g3313">
- <path
- transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- sodipodi:ry="34.073441"
- sodipodi:rx="34.958466"
- sodipodi:cy="196.10106"
- sodipodi:cx="607.56927"
- id="path3315"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- sodipodi:type="arc" />
- <text
- sodipodi:linespacing="100%"
- id="text3317"
- y="483.09396"
- x="591.47559"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan3319"
- x="591.47559"
- y="483.09396">SHA</tspan></text>
- </g>
- <g
- id="g3321"
- transform="translate(-427.1689,-180.8987)">
- <path
- sodipodi:type="arc"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="path3323"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)" />
- <text
- xml:space="preserve"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="591.47559"
- y="483.09396"
- id="text3325"
- sodipodi:linespacing="100%"><tspan
- y="483.09396"
- x="591.47559"
- id="tspan3327"
- sodipodi:role="line">SHA</tspan></text>
- </g>
- <g
- transform="translate(-298.6406,-78.23132)"
- id="g3329">
- <path
- transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- sodipodi:ry="34.073441"
- sodipodi:rx="34.958466"
- sodipodi:cy="196.10106"
- sodipodi:cx="607.56927"
- id="path3331"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- sodipodi:type="arc" />
- <text
- sodipodi:linespacing="100%"
- id="text3333"
- y="483.09396"
- x="591.47559"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan3335"
- x="591.47559"
- y="483.09396">SHA</tspan></text>
- </g>
- <g
- transform="translate(-234.578,-287.9192)"
- id="g3345">
- <path
- transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- sodipodi:ry="34.073441"
- sodipodi:rx="34.958466"
- sodipodi:cy="196.10106"
- sodipodi:cx="607.56927"
- id="path3347"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- sodipodi:type="arc" />
- <text
- sodipodi:linespacing="100%"
- id="text3349"
- y="483.09396"
- x="591.47559"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan3351"
- x="591.47559"
- y="483.09396">SHA</tspan></text>
- </g>
- <g
- id="g3353"
- transform="translate(-170.1124,-180.8987)">
- <path
- sodipodi:type="arc"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="path3355"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)" />
- <text
- xml:space="preserve"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="591.47559"
- y="483.09396"
- id="text3357"
- sodipodi:linespacing="100%"><tspan
- y="483.09396"
- x="591.47559"
- id="tspan3359"
- sodipodi:role="line">SHA</tspan></text>
- </g>
- <g
- transform="translate(-105.6468,-287.9192)"
- id="g3361">
- <path
- transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- sodipodi:ry="34.073441"
- sodipodi:rx="34.958466"
- sodipodi:cy="196.10106"
- sodipodi:cx="607.56927"
- id="path3363"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- sodipodi:type="arc" />
- <text
- sodipodi:linespacing="100%"
- id="text3365"
- y="483.09396"
- x="591.47559"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan3367"
- x="591.47559"
- y="483.09396">SHA</tspan></text>
- </g>
- <rect
- ry="0"
- y="47.720215"
- x="76.855522"
- height="54.581161"
- width="62.568695"
- id="rect2984"
- style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1" />
- <text
- sodipodi:linespacing="100%"
- id="text2988"
- y="71.720772"
- x="84.785179"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="71.720772"
- x="84.785179"
- id="tspan2990"
- sodipodi:role="line">share</tspan></text>
- <text
- sodipodi:linespacing="100%"
- id="text2992"
- y="93.020752"
- x="97.243141"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan3042"
- x="97.243141"
- y="93.020752">A4</tspan></text>
- <rect
- style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="rect3128"
- width="62.568695"
- height="54.581161"
- x="207.39835"
- y="47.720215"
- ry="0" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="215.328"
- y="71.720772"
- id="text3130"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3132"
- x="215.328"
- y="71.720772">share</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="227.78596"
- y="93.020752"
- id="text3134"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3272"
- x="227.78596"
- y="93.020752">B4</tspan></text>
- <rect
- ry="0"
- y="47.720215"
- x="334.7179"
- height="54.581161"
- width="62.568695"
- id="rect3186"
- style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1" />
- <text
- sodipodi:linespacing="100%"
- id="text3188"
- y="71.720772"
- x="342.64755"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="71.720772"
- x="342.64755"
- id="tspan3190"
- sodipodi:role="line">share</tspan></text>
- <text
- sodipodi:linespacing="100%"
- id="text3192"
- y="93.020752"
- x="355.10553"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan3282"
- x="355.10553"
- y="93.020752">C4</tspan></text>
- <rect
- style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="rect3245"
- width="62.568695"
- height="54.581161"
- x="463.64905"
- y="47.720215"
- ry="0" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="471.5787"
- y="71.720772"
- id="text3247"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3249"
- x="471.5787"
- y="71.720772">share</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="484.03665"
- y="93.020752"
- id="text3251"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3293"
- x="484.03665"
- y="93.020752">D4</tspan></text>
- <rect
- style="fill:none;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="rect3831"
- width="516.80328"
- height="491.99808"
- x="37.114162"
- y="37.958374" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="44.343109"
- y="521.89929"
- id="text3833"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3835"
- x="44.343109"
- y="521.89929">share4</tspan></text>
- <rect
- style="fill:#ffd5f6;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="rect3837"
- width="95.533775"
- height="81.721664"
- x="602.25977"
- y="73.639648" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="620.63104"
- y="94.16571"
- id="text3839"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3841"
- x="620.63104"
- y="94.16571">peer 4</tspan></text>
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- d="M 552.76635,107.01893 C 602.25975,110.47196 602.25975,110.47196 602.25975,110.47196"
- id="path3843" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 106.27121,102.50451 L 108.15211,173.97895"
- id="path2431" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 238.8751,102.50451 L 237.93464,173.03849"
- id="path2433" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 366.77673,103.44496 L 366.77673,172.09804"
- id="path2435" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 495.61881,103.44496 L 495.61881,173.03849"
- id="path2437" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 489.97609,208.77571 L 438.25116,282.13106"
- id="path2439" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 370.53854,207.83526 L 420.38255,282.13106"
- id="path2441" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 236.05374,209.71617 L 183.38836,284.01197"
- id="path2443" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 110.97347,207.83526 L 164.5793,282.13106"
- id="path2445" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 178.6861,315.98737 L 289.65957,388.40226"
- id="path2447" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 426.02527,315.98737 L 316.93271,389.34272"
- id="path2449" />
- <rect
- style="fill:none;fill-opacity:1;stroke:blue;stroke-opacity:1"
- id="rect3336"
- width="474.92883"
- height="334.80142"
- x="61.129456"
- y="140.12263" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:blue;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="241.69646"
- y="263.32199"
- id="text3338"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3340"
- x="241.69646"
- y="263.32199">Merkle Tree</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:blue;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="68.653069"
- y="466.45987"
- id="text3342"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3344"
- x="68.653069"
- y="466.45987">block hash tree</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="321.63498"
- y="405.33044"
- id="text3346"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3352"
- x="321.63498"
- y="405.33044">"block root hash"</tspan></text>
- </g>
-</svg>
+++ /dev/null
-<?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="744.09448819"
- height="1052.3622047"
- id="svg2"
- sodipodi:version="0.32"
- inkscape:version="0.46"
- sodipodi:docbase="/home/warner/work/tahoe-misc"
- sodipodi:docname="file-encoding4.svg"
- inkscape:output_extension="org.inkscape.output.svg.inkscape">
- <defs
- id="defs4">
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 526.18109 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="744.09448 : 526.18109 : 1"
- inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
- id="perspective5442" />
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0.0"
- refX="0.0"
- id="Arrow1Lend"
- style="overflow:visible;">
- <path
- id="path2976"
- d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
- transform="scale(0.8) rotate(180) translate(12.5,0)" />
- </marker>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- gridtolerance="10000"
- guidetolerance="10"
- objecttolerance="10"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="1.0814091"
- inkscape:cx="327.67132"
- inkscape:cy="590.71497"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- inkscape:window-width="1680"
- inkscape:window-height="1050"
- inkscape:window-x="0"
- inkscape:window-y="0"
- showgrid="false" />
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1">
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="212.25175"
- y="109.45165"
- id="text3632"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3634"
- x="212.25175"
- y="109.45165">block</tspan><tspan
- sodipodi:role="line"
- x="212.25175"
- y="129.45165"
- id="tspan3636">root hashes</tspan></text>
- <g
- id="g3642"
- transform="translate(-226.712,-129.0765)">
- <path
- sodipodi:type="arc"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="path3644"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)" />
- <text
- xml:space="preserve"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="591.47559"
- y="483.09396"
- id="text3646"
- sodipodi:linespacing="100%"><tspan
- y="483.09396"
- x="591.47559"
- id="tspan3648"
- sodipodi:role="line">SHA</tspan></text>
- </g>
- <g
- id="g3675"
- transform="translate(175.712,7.63966)">
- <path
- transform="matrix(0.511994,0,0,0.511994,-233.9701,54.30905)"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- sodipodi:ry="34.073441"
- sodipodi:rx="34.958466"
- sodipodi:cy="196.10106"
- sodipodi:cx="607.56927"
- id="path3331"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- sodipodi:type="arc" />
- <text
- sodipodi:linespacing="100%"
- id="text3653"
- y="160.03162"
- x="68.92907"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="160.03162"
- x="68.92907"
- id="tspan3655"
- sodipodi:role="line">s1</tspan></text>
- </g>
- <g
- id="g3686"
- transform="translate(175.712,2.282887)">
- <path
- sodipodi:type="arc"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="path3657"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- transform="matrix(0.511994,0,0,0.511994,-231.4293,132.056)" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="68.029869"
- y="239.32857"
- id="text3659"
- sodipodi:linespacing="100%"><tspan
- y="239.32857"
- x="68.029869"
- id="tspan3680"
- sodipodi:role="line">s2</tspan></text>
- </g>
- <g
- id="g3691"
- transform="translate(175.712,0.186429)">
- <path
- transform="matrix(0.511994,0,0,0.511994,-229.5194,206.5426)"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- sodipodi:ry="34.073441"
- sodipodi:rx="34.958466"
- sodipodi:cy="196.10106"
- sodipodi:cx="607.56927"
- id="path3663"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- sodipodi:type="arc" />
- <text
- sodipodi:linespacing="100%"
- id="text3665"
- y="313.49518"
- x="70.729767"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="313.49518"
- x="70.729767"
- id="tspan3682"
- sodipodi:role="line">s3</tspan></text>
- </g>
- <g
- id="g3696"
- transform="translate(175.712,7.639653)">
- <path
- sodipodi:type="arc"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="path3669"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- transform="matrix(0.511994,0,0,0.511994,-229.5194,271.4796)" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="72.669769"
- y="377.16217"
- id="text3671"
- sodipodi:linespacing="100%"><tspan
- y="377.16217"
- x="72.669769"
- id="tspan3684"
- sodipodi:role="line">s4</tspan></text>
- </g>
- <g
- transform="translate(-228.8541,-284.0256)"
- id="g3701">
- <path
- transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- sodipodi:ry="34.073441"
- sodipodi:rx="34.958466"
- sodipodi:cy="196.10106"
- sodipodi:cx="607.56927"
- id="path3703"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- sodipodi:type="arc" />
- <text
- sodipodi:linespacing="100%"
- id="text3705"
- y="483.09396"
- x="591.47559"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan3707"
- x="591.47559"
- y="483.09396">SHA</tspan></text>
- </g>
- <g
- transform="translate(-110.3217,-218.3329)"
- id="g3709">
- <path
- transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- sodipodi:ry="34.073441"
- sodipodi:rx="34.958466"
- sodipodi:cy="196.10106"
- sodipodi:cx="607.56927"
- id="path3711"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- sodipodi:type="arc" />
- <text
- sodipodi:linespacing="100%"
- id="text3713"
- y="483.09396"
- x="591.47559"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan3715"
- x="591.47559"
- y="483.09396">SHA</tspan></text>
- </g>
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- d="M 270.6808,165.29588 L 353.51073,189.57362"
- id="path3717" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- d="M 272.10891,234.55883 C 275.67916,233.13073 354.22478,203.14059 354.22478,203.14059"
- id="path3719" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- d="M 274.96511,307.39204 L 356.36693,341.66649"
- id="path3721" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- d="M 275.67916,379.51119 L 355.65288,358.80371"
- id="path3723" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- d="M 390.64138,347.3789 L 473.4713,271.68949"
- id="path3725" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- d="M 389.92733,198.14223 L 472.75725,253.12416"
- id="path3727" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="82.126266"
- y="105.04523"
- id="text4615"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan4617"
- x="82.126266"
- y="105.04523">shares</tspan></text>
- <g
- id="g4662"
- transform="translate(0,-7.629395e-6)">
- <rect
- ry="0"
- y="131.23222"
- x="69.941055"
- height="62.310936"
- width="88.076958"
- id="rect3245"
- style="fill:#aa87de;fill-opacity:1;stroke:black;stroke-opacity:1" />
- <text
- sodipodi:linespacing="100%"
- id="text4619"
- y="167.66769"
- x="84.927971"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="167.66769"
- x="84.927971"
- id="tspan4621"
- sodipodi:role="line">share1</tspan></text>
- </g>
- <g
- id="g4657"
- transform="translate(-0.77298,-0.515305)">
- <rect
- style="fill:#aa87de;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="rect4623"
- width="88.076958"
- height="62.310936"
- x="70.714035"
- y="203.11914"
- ry="0" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="85.700951"
- y="239.55461"
- id="text4625"
- sodipodi:linespacing="100%"><tspan
- y="239.55461"
- x="85.700951"
- id="tspan4641"
- sodipodi:role="line">share2</tspan></text>
- </g>
- <g
- id="g4652"
- transform="translate(-3.864891,1.288307)">
- <rect
- ry="0"
- y="272.68713"
- x="73.805946"
- height="62.310936"
- width="88.076958"
- id="rect4629"
- style="fill:#aa87de;fill-opacity:1;stroke:black;stroke-opacity:1" />
- <text
- sodipodi:linespacing="100%"
- id="text4631"
- y="309.12259"
- x="88.792862"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="309.12259"
- x="88.792862"
- id="tspan4643"
- sodipodi:role="line">share3</tspan></text>
- </g>
- <g
- id="g4647"
- transform="translate(-4.637871,0)">
- <rect
- style="fill:#aa87de;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="rect4635"
- width="88.076958"
- height="62.310936"
- x="74.578926"
- y="345.34702"
- ry="0" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="89.565842"
- y="381.78247"
- id="text4637"
- sodipodi:linespacing="100%"><tspan
- y="381.78247"
- x="89.565842"
- id="tspan4645"
- sodipodi:role="line">share4</tspan></text>
- </g>
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:3,3;stroke-dashoffset:0"
- d="M 159.23338,161.89201 L 234.98518,160.34605"
- id="path4667" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:3,3;stroke-dashoffset:0"
- d="M 159.23338,233.77892 L 236.53114,233.00595"
- id="path4669" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:3,3;stroke-dashoffset:0"
- d="M 160.77934,304.11988 L 239.62305,305.66584"
- id="path4671" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:3,3;stroke-dashoffset:0"
- d="M 158.4604,374.46084 L 238.85007,377.55275"
- id="path4673" />
- <rect
- style="fill:none;fill-opacity:1;stroke:blue;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="rect5560"
- width="451.25253"
- height="376.15237"
- x="201.65356"
- y="75.152138" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:blue;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="320.79318"
- y="271.27441"
- id="text3338"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3340"
- x="320.79318"
- y="271.27441">Merkle Tree</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:blue;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="211.74399"
- y="441.22202"
- id="text3342"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan7495"
- x="211.74399"
- y="441.22202">share hash tree</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="495.05698"
- y="240.97345"
- id="text5566"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan5568"
- x="495.05698"
- y="240.97345">"share root hash"</tspan></text>
- <rect
- style="fill:#d5f6ff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="rect8042"
- width="372.43307"
- height="126.05428"
- x="258.43817"
- y="492.44629" />
- <text
- xml:space="preserve"
- style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="267.38785"
- y="521.40631"
- id="text8044"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan8046"
- x="267.38785"
- y="521.40631">URI Extension Block</tspan></text>
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 491.09641,278.8051 L 505.57143,535.71157"
- id="path8064"
- sodipodi:nodetypes="cc" />
- <g
- id="g5534">
- <text
- sodipodi:linespacing="100%"
- id="text8048"
- y="560.19122"
- x="296.70987"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="560.19122"
- x="296.70987"
- id="tspan8050"
- sodipodi:role="line">file size</tspan></text>
- <rect
- y="538.7973"
- x="291.02008"
- height="31.027878"
- width="84.953964"
- id="rect8066"
- style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- </g>
- <g
- id="g5539"
- transform="translate(-21.380944,3.5634906)">
- <text
- sodipodi:linespacing="100%"
- id="text8052"
- y="595.66229"
- x="296.09039"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="595.66229"
- x="296.09039"
- id="tspan8054"
- sodipodi:role="line">encoding parameters</tspan></text>
- <rect
- style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="rect8068"
- width="205.77185"
- height="29.795084"
- x="291.02008"
- y="576.24475" />
- </g>
- <g
- id="g5529">
- <text
- sodipodi:linespacing="100%"
- id="text8060"
- y="557.45142"
- x="430.06894"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="557.45142"
- x="430.06894"
- id="tspan8062"
- sodipodi:role="line">share root hash</tspan></text>
- <rect
- y="536.65747"
- x="420.48123"
- height="31.027878"
- width="162.62888"
- id="rect8070"
- style="fill:none;fill-opacity:1;stroke:black;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- </g>
- <flowRoot
- xml:space="preserve"
- id="flowRoot5444"
- style="fill:black;stroke:none;stroke-opacity:1;stroke-width:1px;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:1;font-family:Courier 10 Pitch;font-style:normal;font-weight:normal;font-size:18px;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr;line-height:100%"><flowRegion
- id="flowRegion5446"><rect
- id="rect5448"
- width="440.86795"
- height="206.59506"
- x="212.52603"
- y="478.04767" /></flowRegion><flowPara
- id="flowPara5450"></flowPara></flowRoot> <flowRoot
- style="fill:black;stroke:none;stroke-opacity:1;stroke-width:1px;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:1;font-family:Courier 10 Pitch;font-style:normal;font-weight:normal;font-size:18px;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr;line-height:100%"
- id="flowRoot5452"
- xml:space="preserve"><flowRegion
- id="flowRegion5454"><rect
- y="478.04767"
- x="212.52603"
- height="206.59506"
- width="440.86795"
- id="rect5456" /></flowRegion><flowPara
- id="flowPara5458"></flowPara></flowRoot> <rect
- y="722.08801"
- x="249.14307"
- height="126.05428"
- width="372.43307"
- id="rect5460"
- style="fill:#d5f6ff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- <text
- sodipodi:linespacing="100%"
- id="text5462"
- y="750.73669"
- x="264.42236"
- style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="750.73669"
- x="264.42236"
- id="tspan5464"
- sodipodi:role="line">URI / "file read-cap"</tspan></text>
- <g
- id="g5498">
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="471.72757"
- y="789.75726"
- id="text5478"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan5480"
- x="471.72757"
- y="789.75726">UEB hash</tspan></text>
- <rect
- style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="rect5486"
- width="109.25024"
- height="31.027878"
- x="461.99792"
- y="768.95331" />
- </g>
- <g
- id="g5503">
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="275.49631"
- y="792.89374"
- id="text5474"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan5476"
- x="275.49631"
- y="792.89374">encryption key</tspan></text>
- <rect
- y="770.815"
- x="268.32343"
- height="36.37751"
- width="148.71983"
- id="rect5488"
- style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
- </g>
- <g
- transform="translate(-97.251286,198.1785)"
- id="g5490">
- <path
- transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)"
- d="M 642.52774,196.10106 A 34.958466,34.073441 0 1 1 572.61081,196.10106 A 34.958466,34.073441 0 1 1 642.52774,196.10106 z"
- sodipodi:ry="34.073441"
- sodipodi:rx="34.958466"
- sodipodi:cy="196.10106"
- sodipodi:cx="607.56927"
- id="path5492"
- style="fill:#ffe6d5;fill-opacity:1;stroke:#000000;stroke-opacity:1"
- sodipodi:type="arc" />
- <text
- sodipodi:linespacing="100%"
- id="text5494"
- y="483.09396"
- x="591.47559"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan5496"
- x="591.47559"
- y="483.09396">SHA</tspan></text>
- </g>
- <path
- id="path5508"
- d="M 490.16032,618.22602 L 500.19251,660.16729"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- sodipodi:nodetypes="cc" />
- <path
- sodipodi:nodetypes="cc"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- d="M 506.13565,695.45603 L 516.96501,767.91304"
- id="path5510" />
- <g
- id="g5524"
- transform="translate(-7.8396793,-5.701585)">
- <rect
- style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="rect8072"
- width="127.96149"
- height="31.434599"
- x="502.91043"
- y="583.00134" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="507.92603"
- y="603.99866"
- id="text5520"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan5522"
- x="507.92603"
- y="603.99866">other hashes</tspan></text>
- </g>
- </g>
-</svg>
+++ /dev/null
-<?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://web.resource.org/cc/"
- 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="744.09448819"
- height="1052.3622047"
- id="svg2"
- sodipodi:version="0.32"
- inkscape:version="0.44.1"
- sodipodi:docbase="/home/warner/work/tahoe-misc"
- sodipodi:docname="file-encoding5.svg">
- <defs
- id="defs4">
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0.0"
- refX="0.0"
- id="Arrow1Lend"
- style="overflow:visible;">
- <path
- id="path2976"
- d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
- transform="scale(0.8) rotate(180) translate(12.5,0)" />
- </marker>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- gridtolerance="10000"
- guidetolerance="10"
- objecttolerance="10"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="0.79718499"
- inkscape:cx="410.02658"
- inkscape:cy="638.93685"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- inkscape:window-width="900"
- inkscape:window-height="756"
- inkscape:window-x="699"
- inkscape:window-y="165" />
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1">
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="93.755287"
- y="98.537506"
- id="text3632"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3634"
- x="93.755287"
- y="98.537506">block</tspan><tspan
- sodipodi:role="line"
- x="93.755287"
- y="118.53751"
- id="tspan3636">root hashes</tspan></text>
- <g
- id="g3642"
- transform="translate(-279.7236,-129.0765)">
- <path
- sodipodi:type="arc"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="path3644"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)" />
- <text
- xml:space="preserve"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="591.47559"
- y="483.09396"
- id="text3646"
- sodipodi:linespacing="100%"><tspan
- y="483.09396"
- x="591.47559"
- id="tspan3648"
- sodipodi:role="line">SHA</tspan></text>
- </g>
- <g
- id="g3675"
- transform="translate(63.82283,6.080481)">
- <path
- transform="matrix(0.511994,0,0,0.511994,-233.9701,54.30905)"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- sodipodi:ry="34.073441"
- sodipodi:rx="34.958466"
- sodipodi:cy="196.10106"
- sodipodi:cx="607.56927"
- id="path3331"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- sodipodi:type="arc" />
- <text
- sodipodi:linespacing="100%"
- id="text3653"
- y="160.03162"
- x="68.92907"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="160.03162"
- x="68.92907"
- id="tspan3655"
- sodipodi:role="line">s1</tspan></text>
- </g>
- <g
- id="g3686"
- transform="translate(61.28203,2.918364)">
- <path
- sodipodi:type="arc"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="path3657"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- transform="matrix(0.511994,0,0,0.511994,-231.4293,132.056)" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="68.029869"
- y="239.32857"
- id="text3659"
- sodipodi:linespacing="100%"><tspan
- y="239.32857"
- x="68.029869"
- id="tspan3680"
- sodipodi:role="line">s2</tspan></text>
- </g>
- <g
- id="g3691"
- transform="translate(59.37213,3.016624)">
- <path
- transform="matrix(0.511994,0,0,0.511994,-229.5194,206.5426)"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- sodipodi:ry="34.073441"
- sodipodi:rx="34.958466"
- sodipodi:cy="196.10106"
- sodipodi:cx="607.56927"
- id="path3663"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- sodipodi:type="arc" />
- <text
- sodipodi:linespacing="100%"
- id="text3665"
- y="313.49518"
- x="70.729767"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="313.49518"
- x="70.729767"
- id="tspan3682"
- sodipodi:role="line">s3</tspan></text>
- </g>
- <g
- id="g3696"
- transform="translate(59.37213,12.6645)">
- <path
- sodipodi:type="arc"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="path3669"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- transform="matrix(0.511994,0,0,0.511994,-229.5194,271.4796)" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="72.669769"
- y="377.16217"
- id="text3671"
- sodipodi:linespacing="100%"><tspan
- y="377.16217"
- x="72.669769"
- id="tspan3684"
- sodipodi:role="line">s4</tspan></text>
- </g>
- <g
- transform="translate(-281.8657,-284.0256)"
- id="g3701">
- <path
- transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- sodipodi:ry="34.073441"
- sodipodi:rx="34.958466"
- sodipodi:cy="196.10106"
- sodipodi:cx="607.56927"
- id="path3703"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- sodipodi:type="arc" />
- <text
- sodipodi:linespacing="100%"
- id="text3705"
- y="483.09396"
- x="591.47559"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan3707"
- x="591.47559"
- y="483.09396">SHA</tspan></text>
- </g>
- <g
- transform="translate(-104.085,-218.3329)"
- id="g3709">
- <path
- transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- sodipodi:ry="34.073441"
- sodipodi:rx="34.958466"
- sodipodi:cy="196.10106"
- sodipodi:cx="607.56927"
- id="path3711"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- sodipodi:type="arc" />
- <text
- sodipodi:linespacing="100%"
- id="text3713"
- y="483.09396"
- x="591.47559"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan3715"
- x="591.47559"
- y="483.09396">SHA</tspan></text>
- </g>
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- d="M 158.42099,162.17755 L 300.49915,189.57362"
- id="path3717"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- d="M 162.96742,234.55883 C 166.53767,233.13073 301.2132,203.14059 301.2132,203.14059"
- id="path3719"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- d="M 162.7053,312.06953 L 303.35535,341.66649"
- id="path3721"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- d="M 160.30102,384.18868 L 302.6413,358.80371"
- id="path3723"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- d="M 340.74813,350.49723 L 479.70796,268.57116"
- id="path3725"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- d="M 341.59324,198.14223 L 480.55307,259.36082"
- id="path3727"
- sodipodi:nodetypes="cc" />
- <text
- xml:space="preserve"
- style="font-size:20;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:blue;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="387.9295"
- y="82.614281"
- id="text3342"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan7297"
- x="387.9295"
- y="82.614281">share hash tree</tspan></text>
- <g
- transform="translate(-277.1965,175.8469)"
- id="g6278">
- <path
- transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- sodipodi:ry="34.073441"
- sodipodi:rx="34.958466"
- sodipodi:cy="196.10106"
- sodipodi:cx="607.56927"
- id="path6280"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- sodipodi:type="arc" />
- <text
- sodipodi:linespacing="100%"
- id="text6282"
- y="483.09396"
- x="591.47559"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan6284"
- x="591.47559"
- y="483.09396">SHA</tspan></text>
- </g>
- <g
- id="g6374"
- transform="translate(0,-6.583939)">
- <path
- sodipodi:type="arc"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="path6288"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- transform="matrix(0.511994,0,0,0.511994,-170.1473,365.3129)" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="130.1619"
- y="471.03552"
- id="text6290"
- sodipodi:linespacing="100%"><tspan
- y="471.03552"
- x="130.1619"
- id="tspan6366"
- sodipodi:role="line">s5</tspan></text>
- </g>
- <g
- id="g6379"
- transform="translate(0,-4.389282)">
- <path
- transform="matrix(0.511994,0,0,0.511994,-170.1473,437.7031)"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- sodipodi:ry="34.073441"
- sodipodi:rx="34.958466"
- sodipodi:cy="196.10106"
- sodipodi:cx="607.56927"
- id="path6296"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- sodipodi:type="arc" />
- <text
- sodipodi:linespacing="100%"
- id="text6298"
- y="544.97565"
- x="130.2619"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="544.97565"
- x="130.2619"
- id="tspan6368"
- sodipodi:role="line">s6</tspan></text>
- </g>
- <g
- id="g6384"
- transform="translate(0,-2.194656)">
- <path
- sodipodi:type="arc"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="path6304"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- transform="matrix(0.511994,0,0,0.511994,-170.1473,510.0933)" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="132.1519"
- y="617.0459"
- id="text6306"
- sodipodi:linespacing="100%"><tspan
- y="617.0459"
- x="132.1519"
- id="tspan6370"
- sodipodi:role="line">s7</tspan></text>
- </g>
- <g
- id="g6389">
- <path
- transform="matrix(0.511994,0,0,0.511994,-170.1473,582.4835)"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- sodipodi:ry="34.073441"
- sodipodi:rx="34.958466"
- sodipodi:cy="196.10106"
- sodipodi:cx="607.56927"
- id="path6312"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- sodipodi:type="arc" />
- <text
- sodipodi:linespacing="100%"
- id="text6314"
- y="688.16608"
- x="130.03189"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="688.16608"
- x="130.03189"
- id="tspan6372"
- sodipodi:role="line">s8</tspan></text>
- </g>
- <g
- id="g6318"
- transform="translate(-279.3386,20.89783)">
- <path
- sodipodi:type="arc"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="path6320"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)" />
- <text
- xml:space="preserve"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="591.47559"
- y="483.09396"
- id="text6322"
- sodipodi:linespacing="100%"><tspan
- y="483.09396"
- x="591.47559"
- id="tspan6324"
- sodipodi:role="line">SHA</tspan></text>
- </g>
- <g
- id="g6326"
- transform="translate(-101.5579,86.59053)">
- <path
- sodipodi:type="arc"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="path6328"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)" />
- <text
- xml:space="preserve"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="591.47559"
- y="483.09396"
- id="text6330"
- sodipodi:linespacing="100%"><tspan
- y="483.09396"
- x="591.47559"
- id="tspan6332"
- sodipodi:role="line">SHA</tspan></text>
- </g>
- <path
- id="path6334"
- d="M 160.94817,457.746 L 303.02633,494.49705"
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- sodipodi:nodetypes="cc" />
- <path
- id="path6336"
- d="M 162.37628,533.2456 C 165.94653,531.8175 303.74038,508.06402 303.74038,508.06402"
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- sodipodi:nodetypes="cc" />
- <path
- id="path6338"
- d="M 162.11415,609.19714 L 305.88253,646.58992"
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- sodipodi:nodetypes="cc" />
- <path
- id="path6340"
- d="M 162.8282,682.87546 L 305.16848,663.72714"
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- sodipodi:nodetypes="cc" />
- <path
- id="path6342"
- d="M 343.27531,653.86149 L 482.23514,575.05376"
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- sodipodi:nodetypes="cc" />
- <path
- id="path6344"
- d="M 341.0021,499.94733 L 481.52109,562.72508"
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- sodipodi:nodetypes="cc" />
- <text
- sodipodi:linespacing="100%"
- id="text6346"
- y="424.95895"
- x="480.79593"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:blue;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="424.95895"
- x="480.79593"
- id="tspan6348"
- sodipodi:role="line">Merkle Tree</tspan></text>
- <text
- sodipodi:linespacing="100%"
- id="text6350"
- y="384.32007"
- x="593.30579"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="384.32007"
- x="593.30579"
- id="tspan6352"
- sodipodi:role="line">"share root hash"</tspan></text>
- <g
- id="g6396"
- transform="translate(65.86388,-62.41649)">
- <path
- sodipodi:type="arc"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="path6398"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)" />
- <text
- xml:space="preserve"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="591.47559"
- y="483.09396"
- id="text6400"
- sodipodi:linespacing="100%"><tspan
- y="483.09396"
- x="591.47559"
- id="tspan6402"
- sodipodi:role="line">SHA</tspan></text>
- </g>
- <path
- id="path6404"
- d="M 516.21962,265.18629 L 653.62028,407.4814"
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- d="M 516.21962,558.30913 L 653.62028,429.30971"
- id="path6406"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:3,3;stroke-dashoffset:0"
- d="M 88.872351,202.61777 L 183.98136,204.17694 L 352.37108,321.11424 L 570.65404,564.34383 L 498.9325,650.09786 L 291.56368,394.39495 L 162.15306,280.57598 L 79.517367,263.42517 L 88.872351,202.61777 z "
- id="path6408" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="430.70282"
- y="734.79639"
- id="text7299"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan7301"
- x="430.70282"
- y="734.79639">merkle hash chain</tspan><tspan
- sodipodi:role="line"
- x="430.70282"
- y="754.79639"
- id="tspan7303">to validate s1</tspan></text>
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 519.99961,716.92402 C 528.23607,699.12899 558.20121,653.69346 528.55661,615.79625"
- id="path7305"
- sodipodi:nodetypes="cc" />
- </g>
-</svg>
+++ /dev/null
-<?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://web.resource.org/cc/"
- 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="744.09448819"
- height="1052.3622047"
- id="svg2"
- sodipodi:version="0.32"
- inkscape:version="0.44.1"
- sodipodi:docbase="/home/warner/work/tahoe-misc"
- sodipodi:docname="file-encoding6.svg">
- <defs
- id="defs4">
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0.0"
- refX="0.0"
- id="Arrow1Lend"
- style="overflow:visible;">
- <path
- id="path2976"
- d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
- transform="scale(0.8) rotate(180) translate(12.5,0)" />
- </marker>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- gridtolerance="10000"
- guidetolerance="10"
- objecttolerance="10"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="0.60354902"
- inkscape:cx="367.4898"
- inkscape:cy="564.16839"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- inkscape:window-width="900"
- inkscape:window-height="756"
- inkscape:window-x="732"
- inkscape:window-y="176" />
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1">
- <g
- id="g3308"
- transform="translate(-492.4404,-287.9192)">
- <path
- sodipodi:type="arc"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="path3297"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)" />
- <text
- xml:space="preserve"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="591.47559"
- y="483.09396"
- id="text3299"
- sodipodi:linespacing="100%"><tspan
- y="483.09396"
- x="591.47559"
- id="tspan3306"
- sodipodi:role="line">SHA</tspan></text>
- </g>
- <g
- transform="translate(-361.8975,-287.9192)"
- id="g3313">
- <path
- transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- sodipodi:ry="34.073441"
- sodipodi:rx="34.958466"
- sodipodi:cy="196.10106"
- sodipodi:cx="607.56927"
- id="path3315"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- sodipodi:type="arc" />
- <text
- sodipodi:linespacing="100%"
- id="text3317"
- y="483.09396"
- x="591.47559"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan3319"
- x="591.47559"
- y="483.09396">SHA</tspan></text>
- </g>
- <g
- id="g3321"
- transform="translate(-427.1689,-180.8987)">
- <path
- sodipodi:type="arc"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="path3323"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)" />
- <text
- xml:space="preserve"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="591.47559"
- y="483.09396"
- id="text3325"
- sodipodi:linespacing="100%"><tspan
- y="483.09396"
- x="591.47559"
- id="tspan3327"
- sodipodi:role="line">SHA</tspan></text>
- </g>
- <g
- transform="translate(-234.578,-287.9192)"
- id="g3345">
- <path
- transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- sodipodi:ry="34.073441"
- sodipodi:rx="34.958466"
- sodipodi:cy="196.10106"
- sodipodi:cx="607.56927"
- id="path3347"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- sodipodi:type="arc" />
- <text
- sodipodi:linespacing="100%"
- id="text3349"
- y="483.09396"
- x="591.47559"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan3351"
- x="591.47559"
- y="483.09396">SHA</tspan></text>
- </g>
- <g
- id="g3353"
- transform="translate(-170.1124,-180.8987)">
- <path
- sodipodi:type="arc"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="path3355"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)" />
- <text
- xml:space="preserve"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="591.47559"
- y="483.09396"
- id="text3357"
- sodipodi:linespacing="100%"><tspan
- y="483.09396"
- x="591.47559"
- id="tspan3359"
- sodipodi:role="line">SHA</tspan></text>
- </g>
- <g
- transform="translate(-105.6468,-287.9192)"
- id="g3361">
- <path
- transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- sodipodi:ry="34.073441"
- sodipodi:rx="34.958466"
- sodipodi:cy="196.10106"
- sodipodi:cx="607.56927"
- id="path3363"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- sodipodi:type="arc" />
- <text
- sodipodi:linespacing="100%"
- id="text3365"
- y="483.09396"
- x="591.47559"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan3367"
- x="591.47559"
- y="483.09396">SHA</tspan></text>
- </g>
- <rect
- ry="0"
- y="47.720215"
- x="76.855522"
- height="54.581161"
- width="62.568695"
- id="rect2984"
- style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1" />
- <text
- sodipodi:linespacing="100%"
- id="text2988"
- y="71.720772"
- x="84.785179"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="71.720772"
- x="84.785179"
- id="tspan2990"
- sodipodi:role="line">share</tspan></text>
- <text
- sodipodi:linespacing="100%"
- id="text2992"
- y="93.020752"
- x="97.243141"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan3042"
- x="97.243141"
- y="93.020752">A4</tspan></text>
- <rect
- style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="rect3128"
- width="62.568695"
- height="54.581161"
- x="207.39835"
- y="47.720215"
- ry="0" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="215.328"
- y="71.720772"
- id="text3130"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3132"
- x="215.328"
- y="71.720772">share</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="227.78596"
- y="93.020752"
- id="text3134"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3272"
- x="227.78596"
- y="93.020752">B4</tspan></text>
- <rect
- ry="0"
- y="47.720215"
- x="334.7179"
- height="54.581161"
- width="62.568695"
- id="rect3186"
- style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1" />
- <text
- sodipodi:linespacing="100%"
- id="text3188"
- y="71.720772"
- x="342.64755"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="71.720772"
- x="342.64755"
- id="tspan3190"
- sodipodi:role="line">share</tspan></text>
- <text
- sodipodi:linespacing="100%"
- id="text3192"
- y="93.020752"
- x="355.10553"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan3282"
- x="355.10553"
- y="93.020752">C4</tspan></text>
- <rect
- style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="rect3245"
- width="62.568695"
- height="54.581161"
- x="463.64905"
- y="47.720215"
- ry="0" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="471.5787"
- y="71.720772"
- id="text3247"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3249"
- x="471.5787"
- y="71.720772">share</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="484.03665"
- y="93.020752"
- id="text3251"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3293"
- x="484.03665"
- y="93.020752">D4</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="479.80331"
- y="521.89929"
- id="text3833"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3835"
- x="479.80331"
- y="521.89929">share4</tspan></text>
- <rect
- style="fill:#ffd5f6;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="rect3837"
- width="95.533775"
- height="81.721664"
- x="608.88721"
- y="272.46359" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="627.25848"
- y="292.98965"
- id="text3839"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3841"
- x="627.25848"
- y="292.98965">peer 4</tspan></text>
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- d="M 559.39381,305.84288 C 608.88721,309.29591 608.88721,309.29591 608.88721,309.29591"
- id="path3843" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 106.27121,102.50451 L 108.15211,173.97895"
- id="path2431" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 238.8751,102.50451 L 237.93464,173.03849"
- id="path2433" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 366.77673,103.44496 L 366.77673,172.09804"
- id="path2435" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 495.61881,103.44496 L 495.61881,173.03849"
- id="path2437" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 489.97609,208.77571 L 438.25116,282.13106"
- id="path2439" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 370.53854,207.83526 L 420.38255,282.13106"
- id="path2441" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 236.05374,209.71617 L 183.38836,284.01197"
- id="path2443" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 110.97347,207.83526 L 164.5793,282.13106"
- id="path2445" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 178.6861,315.98737 L 289.65957,388.40226"
- id="path2447" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 426.02527,315.98737 L 316.93271,389.34272"
- id="path2449" />
- <rect
- style="fill:none;fill-opacity:1;stroke:blue;stroke-opacity:1"
- id="rect3336"
- width="474.92883"
- height="334.80142"
- x="61.129456"
- y="140.12263" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:blue;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="241.69646"
- y="263.32199"
- id="text3338"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3340"
- x="241.69646"
- y="263.32199">Merkle Tree</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:blue;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="68.653069"
- y="466.45987"
- id="text3342"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3344"
- x="68.653069"
- y="466.45987">block hash tree</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="321.63498"
- y="405.33044"
- id="text3346"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3352"
- x="321.63498"
- y="405.33044">"block root hash"</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="88.648125"
- y="598.72913"
- id="text3632"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan3634"
- x="88.648125"
- y="598.72913">block</tspan><tspan
- sodipodi:role="line"
- x="88.648125"
- y="618.72913"
- id="tspan3636">root hashes</tspan></text>
- <g
- id="g3642"
- transform="translate(-350.3156,360.201)">
- <path
- sodipodi:type="arc"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="path3644"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)" />
- <text
- xml:space="preserve"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="591.47559"
- y="483.09396"
- id="text3646"
- sodipodi:linespacing="100%"><tspan
- y="483.09396"
- x="591.47559"
- id="tspan3648"
- sodipodi:role="line">SHA</tspan></text>
- </g>
- <g
- id="g3675"
- transform="translate(52.10837,496.9171)">
- <path
- transform="matrix(0.511994,0,0,0.511994,-233.9701,54.30905)"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- sodipodi:ry="34.073441"
- sodipodi:rx="34.958466"
- sodipodi:cy="196.10106"
- sodipodi:cx="607.56927"
- id="path5669"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- sodipodi:type="arc" />
- <text
- sodipodi:linespacing="100%"
- id="text3653"
- y="160.03162"
- x="68.92907"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="160.03162"
- x="68.92907"
- id="tspan3655"
- sodipodi:role="line">s1</tspan></text>
- </g>
- <g
- id="g3686"
- transform="translate(52.10837,491.5603)">
- <path
- sodipodi:type="arc"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="path3657"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- transform="matrix(0.511994,0,0,0.511994,-231.4293,132.056)" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="68.029869"
- y="239.32857"
- id="text3659"
- sodipodi:linespacing="100%"><tspan
- y="239.32857"
- x="68.029869"
- id="tspan3680"
- sodipodi:role="line">s2</tspan></text>
- </g>
- <g
- id="g3691"
- transform="translate(52.10837,489.4639)">
- <path
- transform="matrix(0.511994,0,0,0.511994,-229.5194,206.5426)"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- sodipodi:ry="34.073441"
- sodipodi:rx="34.958466"
- sodipodi:cy="196.10106"
- sodipodi:cx="607.56927"
- id="path3663"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- sodipodi:type="arc" />
- <text
- sodipodi:linespacing="100%"
- id="text3665"
- y="313.49518"
- x="70.729767"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- y="313.49518"
- x="70.729767"
- id="tspan3682"
- sodipodi:role="line">s3</tspan></text>
- </g>
- <g
- id="g3696"
- transform="translate(52.10837,496.9171)">
- <path
- sodipodi:type="arc"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- id="path3669"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- transform="matrix(0.511994,0,0,0.511994,-229.5194,271.4796)" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="72.669769"
- y="377.16217"
- id="text3671"
- sodipodi:linespacing="100%"><tspan
- y="377.16217"
- x="72.669769"
- id="tspan3684"
- sodipodi:role="line">s4</tspan></text>
- </g>
- <g
- transform="translate(-352.4577,205.2519)"
- id="g3701">
- <path
- transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- sodipodi:ry="34.073441"
- sodipodi:rx="34.958466"
- sodipodi:cy="196.10106"
- sodipodi:cx="607.56927"
- id="path3703"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- sodipodi:type="arc" />
- <text
- sodipodi:linespacing="100%"
- id="text3705"
- y="483.09396"
- x="591.47559"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan3707"
- x="591.47559"
- y="483.09396">SHA</tspan></text>
- </g>
- <g
- transform="translate(-233.9253,270.9446)"
- id="g3709">
- <path
- transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- sodipodi:ry="34.073441"
- sodipodi:rx="34.958466"
- sodipodi:cy="196.10106"
- sodipodi:cx="607.56927"
- id="path3711"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- sodipodi:type="arc" />
- <text
- sodipodi:linespacing="100%"
- id="text3713"
- y="483.09396"
- x="591.47559"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan3715"
- x="591.47559"
- y="483.09396">SHA</tspan></text>
- </g>
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- d="M 147.07717,654.57336 L 229.9071,678.8511"
- id="path3717" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- d="M 148.50528,723.83631 C 152.07553,722.40821 230.62115,692.41807 230.62115,692.41807"
- id="path3719" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- d="M 151.36148,796.66952 L 232.7633,830.94397"
- id="path3721" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- d="M 152.07553,868.78867 L 232.04925,848.08119"
- id="path3723" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- d="M 267.03775,836.65638 L 349.86767,760.96697"
- id="path3725" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
- d="M 266.3237,687.41971 L 349.15362,742.40164"
- id="path3727" />
- <rect
- style="fill:none;fill-opacity:1;stroke:blue;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="rect5560"
- width="484.38986"
- height="374.49551"
- x="78.049934"
- y="564.42963" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:blue;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="358.2843"
- y="865.40643"
- id="text5700"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan5702"
- x="358.2843"
- y="865.40643">Merkle Tree</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:blue;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="88.140358"
- y="930.49945"
- id="text5704"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan7497"
- x="88.140358"
- y="930.49945">share hash tree</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="356.4744"
- y="786.95703"
- id="text5566"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan5568"
- x="356.4744"
- y="786.95703">"share root hash"</tspan></text>
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:3,3;stroke-dashoffset:0"
- d="M 290.30681,720.03728 L 108.29659,845.9841 L 74.309836,804.80832 L 190.42285,712.9661 L 239.36655,641.22131 L 299.69,669.98266 L 290.30681,720.03728 z "
- id="path5949"
- sodipodi:nodetypes="ccccccc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="M 32.468525,28.648698 L 557.69466,30.558611 L 561.51449,540.50544 L 374.34299,540.50544 L 296.03655,725.76702 L 80.216355,869.01051 L 30.558611,817.44286 L 164.25254,727.67694 L 234.91933,590.16318 L 219.64002,534.7757 L 36.288351,534.7757 L 32.468525,28.648698 z "
- id="path5951" />
- <text
- xml:space="preserve"
- style="font-size:20;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- x="370.89407"
- y="630.30597"
- id="text7307"
- sodipodi:linespacing="100%"><tspan
- sodipodi:role="line"
- id="tspan7499"
- x="370.89407"
- y="630.30597">merkle hash chain</tspan><tspan
- sodipodi:role="line"
- id="tspan7501"
- x="370.89407"
- y="650.30597">to validate s4</tspan></text>
- <path
- style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
- d="M 444.20214,656.77444 C 435.69736,681.11928 360.49372,712.77648 296.54955,691.10088"
- id="path7317"
- sodipodi:nodetypes="cc" />
- <g
- transform="translate(221.2501,29.91837)"
- id="g7322">
- <path
- transform="matrix(0.511994,0,0,0.511994,-229.5194,271.4796)"
- d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
- sodipodi:ry="34.073441"
- sodipodi:rx="34.958466"
- sodipodi:cy="196.10106"
- sodipodi:cx="607.56927"
- id="path7324"
- style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
- sodipodi:type="arc" />
- <text
- sodipodi:linespacing="100%"
- id="text7326"
- y="377.16217"
- x="72.669769"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
- xml:space="preserve"><tspan
- sodipodi:role="line"
- id="tspan7328"
- x="72.669769"
- y="377.16217">s4</tspan></text>
- </g>
- </g>
-</svg>
+++ /dev/null
-<?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:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="278.36371"
- height="295.09766"
- id="svg2841"
- sodipodi:version="0.32"
- inkscape:version="0.46"
- sodipodi:docname="mut.svg"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"
- version="1.0">
- <defs
- id="defs2843">
- <marker
- inkscape:stockid="Arrow1Send"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Send"
- style="overflow:visible">
- <path
- id="path7680"
- d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.2,0,0,-0.2,-1.2,0)" />
- </marker>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient7760">
- <stop
- style="stop-color:#ca1818;stop-opacity:1;"
- offset="0"
- id="stop7762" />
- <stop
- style="stop-color:#ca1818;stop-opacity:0;"
- offset="1"
- id="stop7764" />
- </linearGradient>
- <marker
- inkscape:stockid="Arrow1Mend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Mend"
- style="overflow:visible">
- <path
- id="path3751"
- d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.4,0,0,-0.4,-4,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend"
- style="overflow:visible">
- <path
- id="path3745"
- d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.8,0,0,-0.8,-10,0)" />
- </marker>
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 526.18109 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="744.09448 : 526.18109 : 1"
- inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
- id="perspective2849" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient7760"
- id="linearGradient7766"
- x1="-0.41100001"
- y1="412.36218"
- x2="160.411"
- y2="412.36218"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient7760"
- id="linearGradient7788"
- gradientUnits="userSpaceOnUse"
- x1="-0.41100001"
- y1="412.36218"
- x2="160.411"
- y2="412.36218" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient7760"
- id="linearGradient7793"
- gradientUnits="userSpaceOnUse"
- x1="-0.41100001"
- y1="412.36218"
- x2="160.411"
- y2="412.36218" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- gridtolerance="10000"
- guidetolerance="10"
- objecttolerance="10"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="3.3332515"
- inkscape:cx="210.25878"
- inkscape:cy="123.41841"
- inkscape:document-units="px"
- inkscape:current-layer="layer2"
- showgrid="true"
- inkscape:window-width="1598"
- inkscape:window-height="1198"
- inkscape:window-x="0"
- inkscape:window-y="0"
- showguides="true"
- inkscape:snap-global="false">
- <inkscape:grid
- type="xygrid"
- id="grid2883"
- visible="true"
- enabled="true" />
- </sodipodi:namedview>
- <metadata
- id="metadata2846">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-217.17997,-198.38081)">
- <rect
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#250f25;stroke-width:0.61650002;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="rect2885"
- width="7.5"
- height="0"
- x="314.88028"
- y="111.80756" />
- <flowRoot
- xml:space="preserve"
- id="flowRoot7772"
- style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- transform="matrix(0.75,0,0,0.75,89.880266,80.035916)"><flowRegion
- id="flowRegion7774"><rect
- id="rect7776"
- width="378.57144"
- height="65.714287"
- x="-35.714287"
- y="384.50504"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter" /></flowRegion><flowPara
- id="flowPara7778" /></flowRoot> <path
- sodipodi:type="arc"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="path8437"
- sodipodi:cx="420"
- sodipodi:cy="212.36218"
- sodipodi:rx="80"
- sodipodi:ry="20"
- d="M 500,212.36218 A 80,20 0 1 1 340,212.36218 A 80,20 0 1 1 500,212.36218 z"
- transform="matrix(0.3375,0,0,0.3375,257.2117,137.23422)" />
- <path
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.2919375;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- d="M 438.13856,269.91499 C 446.63381,280.47335 453.38314,289.63578 453.38314,289.63578"
- id="path9557"
- sodipodi:nodetypes="cc" />
- <path
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.33749998px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- d="M 463.64994,293.69223 C 463.64994,297.55233 463.64994,302.1186 463.64994,302.1186"
- id="path11208"
- sodipodi:nodetypes="cc" />
- <text
- xml:space="preserve"
- style="font-size:30px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="467.92987"
- y="288.97491"
- id="text16751"><tspan
- sodipodi:role="line"
- id="tspan16753"
- x="467.92987"
- y="288.97491" /></text>
- <text
- xml:space="preserve"
- style="font-size:30px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="464.14178"
- y="291.24774"
- id="text16755"><tspan
- sodipodi:role="line"
- id="tspan16757"
- x="464.14178"
- y="291.24774" /></text>
- <text
- transform="scale(0.8196045,1.2201006)"
- xml:space="preserve"
- style="font-size:13.5px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="589.64325"
- y="218.94211"
- id="text16759"
- sodipodi:linespacing="100%"><tspan
- y="218.94211"
- x="589.64325"
- id="tspan16761"
- sodipodi:role="line" /></text>
- <path
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.32201561px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- d="M 372.25866,281.18125 C 391.14052,275.94279 412.5754,263.5215 412.5754,263.5215"
- id="path21360"
- sodipodi:nodetypes="cc" />
- <path
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.33749998px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- d="M 467.95624,303.64299 C 465.78336,307.89979 463.10818,312.90038 463.10818,312.90038"
- id="path4716"
- sodipodi:nodetypes="cc" />
- <text
- xml:space="preserve"
- style="font-size:8.10000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="445.04538"
- y="385.5498"
- id="text4926"><tspan
- sodipodi:role="line"
- id="tspan4928"
- x="445.04538"
- y="385.5498">shares</tspan></text>
- <path
- sodipodi:type="arc"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="path4938"
- sodipodi:cx="420"
- sodipodi:cy="212.36218"
- sodipodi:rx="80"
- sodipodi:ry="20"
- d="M 500,212.36218 A 80,20 0 1 1 340,212.36218 A 80,20 0 1 1 500,212.36218 z"
- transform="matrix(0,0.1683097,-0.3399575,0,508.99378,294.48202)" />
- <path
- transform="matrix(0,0.1683097,-0.3399575,0,517.99378,294.48202)"
- d="M 500,212.36218 A 80,20 0 1 1 340,212.36218 A 80,20 0 1 1 500,212.36218 z"
- sodipodi:ry="20"
- sodipodi:rx="80"
- sodipodi:cy="212.36218"
- sodipodi:cx="420"
- id="path4940"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- sodipodi:type="arc" />
- <path
- sodipodi:type="arc"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="path4942"
- sodipodi:cx="420"
- sodipodi:cy="212.36218"
- sodipodi:rx="80"
- sodipodi:ry="20"
- d="M 500,212.36218 A 80,20 0 1 1 340,212.36218 A 80,20 0 1 1 500,212.36218 z"
- transform="matrix(0,0.1683097,-0.3399575,0,526.99378,294.48202)" />
- <path
- transform="matrix(0,0.1683097,-0.3399575,0,535.99378,294.48202)"
- d="M 500,212.36218 A 80,20 0 1 1 340,212.36218 A 80,20 0 1 1 500,212.36218 z"
- sodipodi:ry="20"
- sodipodi:rx="80"
- sodipodi:cy="212.36218"
- sodipodi:cx="420"
- id="path4944"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- sodipodi:type="arc" />
- <path
- transform="matrix(0,0.1683097,-0.3399575,0,542.80003,294.65787)"
- d="M 500,212.36218 A 80,20 0 1 1 340,212.36218 A 80,20 0 1 1 500,212.36218 z"
- sodipodi:ry="20"
- sodipodi:rx="80"
- sodipodi:cy="212.36218"
- sodipodi:cx="420"
- id="path4946"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- sodipodi:type="arc" />
- <path
- transform="matrix(0,0.1683097,-0.3399575,0,551.80003,294.58742)"
- d="M 500,212.36218 A 80,20 0 1 1 340,212.36218 A 80,20 0 1 1 500,212.36218 z"
- sodipodi:ry="20"
- sodipodi:rx="80"
- sodipodi:cy="212.36218"
- sodipodi:cx="420"
- id="path4948"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- sodipodi:type="arc" />
- <rect
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:0.21600063px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="rect4950"
- width="60.860748"
- height="2.1464994"
- x="427.86215"
- y="376.78323" />
- <path
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.44999999px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- d="M 436.85592,349.56271 C 436.85592,349.56271 434.60592,329.31271 461.60592,329.31271 C 445.85592,333.81271 445.85592,349.56271 445.85592,349.56271"
- id="path4952" />
- <path
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.44999999px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- d="M 461.60592,329.31271 C 454.85592,336.06271 454.85592,349.56271 454.85592,349.56271"
- id="path4954" />
- <path
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.44999999px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- d="M 461.60592,329.31271 C 463.85592,329.31271 463.85592,349.56271 463.85592,349.56271"
- id="path4956" />
- <path
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.44999999px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- d="M 461.60592,329.31271 C 470.60592,329.31271 470.60592,349.56271 470.60592,349.56271"
- id="path4958" />
- <path
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.44999999px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- d="M 461.60592,329.31271 C 479.60592,329.31271 479.60592,349.56271 479.60592,349.56271"
- id="path4960" />
- <rect
- y="372.16623"
- x="427.74518"
- height="2.1464994"
- width="60.860748"
- id="rect4962"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:0.21600063px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter" />
- <rect
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:0.21600063px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="rect4964"
- width="60.860748"
- height="2.1464994"
- x="427.74518"
- y="367.66623" />
- <rect
- y="363.16623"
- x="427.74518"
- height="2.1464994"
- width="60.860748"
- id="rect4966"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:0.21600063px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter" />
- <rect
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:0.21600063px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="rect4968"
- width="60.860748"
- height="2.1464994"
- x="427.74518"
- y="358.66623" />
- <rect
- y="354.16623"
- x="427.74518"
- height="2.1464994"
- width="60.860748"
- id="rect4970"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:0.21600063px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter" />
- <rect
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:0.21600063px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="rect4972"
- width="60.860748"
- height="2.1464994"
- x="427.74518"
- y="354.16623" />
- <g
- transform="matrix(0,0.2054517,-0.1664743,0,467.60988,354.01332)"
- id="g4974"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">
- <path
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.70842391px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- d="M -0.53492796,252.21639 C -5.5179181,262.28794 39.328998,262.28794 39.328998,262.28794 C 59.260953,262.28794 59.260953,292.50259 59.260953,292.50259"
- id="path4976" />
- <path
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.70842391px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- d="M 120.64913,252.36218 C 125.63212,262.43373 80.7852,262.43373 80.7852,262.43373 C 60.85325,262.43373 60.85325,292.64838 60.85325,292.64838"
- id="path4978" />
- </g>
- <path
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.32513919px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- d="M 407.29684,407.56445 L 411.94948,419.32947"
- id="path4998"
- sodipodi:nodetypes="cc" />
- <text
- xml:space="preserve"
- style="font-size:6.50278425px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="468.50412"
- y="382.92706"
- id="text5004"
- sodipodi:linespacing="100%"
- transform="scale(0.9062658,1.1034291)"><tspan
- sodipodi:role="line"
- id="tspan5006"
- x="468.50412"
- y="382.92706"
- style="font-size:8.10000038px">Merkle Tree</tspan></text>
- <path
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.16140337px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- d="M 418.04929,366.13921 C 402.75501,384.90072 405.78989,392.50491 405.78989,392.50491 L 405.78989,392.50491"
- id="path5008" />
- <g
- id="g9174"
- transform="matrix(0.7985291,0,0,0.5813416,-172.4015,-45.31981)"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">
- <path
- sodipodi:type="arc"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffe6d5;fill-opacity:1;stroke:#000000;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="path9176"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774,196.10106 A 34.958466,34.073441 0 1 1 572.61081,196.10106 A 34.958466,34.073441 0 1 1 642.52774,196.10106 z"
- transform="matrix(0.512658,0,0,0.4006128,289.10499,398.76956)" />
- <text
- xml:space="preserve"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="591.47559"
- y="483.09396"
- id="text9178"
- sodipodi:linespacing="100%"><tspan
- y="483.09396"
- x="591.47559"
- id="tspan9180"
- sodipodi:role="line" /><tspan
- y="493.09396"
- x="591.47559"
- sodipodi:role="line"
- id="tspan9182" /><tspan
- y="503.09396"
- x="591.47559"
- sodipodi:role="line"
- id="tspan9184" /></text>
- </g>
- <text
- xml:space="preserve"
- style="font-size:2.70000005px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="297.6908"
- y="233.17752"
- id="text9186"><tspan
- sodipodi:role="line"
- x="297.6908"
- y="233.17752"
- style="font-size:5px"
- id="tspan9188">AES-CTR</tspan></text>
- <g
- id="g9877"
- transform="matrix(0.7985291,0,0,0.5813416,-65.298876,150.88501)"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">
- <path
- sodipodi:type="arc"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffe6d5;fill-opacity:1;stroke:#000000;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="path9879"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774,196.10106 A 34.958466,34.073441 0 1 1 572.61081,196.10106 A 34.958466,34.073441 0 1 1 642.52774,196.10106 z"
- transform="matrix(0.512658,0,0,0.4006128,289.10499,398.76956)" />
- <text
- xml:space="preserve"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="591.47559"
- y="483.09396"
- id="text9881"
- sodipodi:linespacing="100%"><tspan
- y="483.09396"
- x="591.47559"
- id="tspan9883"
- sodipodi:role="line" /><tspan
- y="493.09396"
- x="591.47559"
- sodipodi:role="line"
- id="tspan9885" /><tspan
- y="503.09396"
- x="591.47559"
- sodipodi:role="line"
- id="tspan9887" /></text>
- </g>
- <text
- xml:space="preserve"
- style="font-size:2.70000005px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="404.19336"
- y="429.98233"
- id="text9889"><tspan
- sodipodi:role="line"
- x="404.19336"
- y="429.98233"
- style="font-size:5px"
- id="tspan9891">SHA256d</tspan></text>
- <g
- id="g9893"
- transform="matrix(0.7985291,0,0,0.5813416,-7.0974465,151.48502)"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">
- <path
- sodipodi:type="arc"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffe6d5;fill-opacity:1;stroke:#000000;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="path9895"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774,196.10106 A 34.958466,34.073441 0 1 1 572.61081,196.10106 A 34.958466,34.073441 0 1 1 642.52774,196.10106 z"
- transform="matrix(0.512658,0,0,0.4006128,289.10499,398.76956)" />
- <text
- xml:space="preserve"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="591.47559"
- y="483.09396"
- id="text9897"
- sodipodi:linespacing="100%"><tspan
- y="483.09396"
- x="591.47559"
- id="tspan9899"
- sodipodi:role="line" /><tspan
- y="493.09396"
- x="591.47559"
- sodipodi:role="line"
- id="tspan9901" /><tspan
- y="503.09396"
- x="591.47559"
- sodipodi:role="line"
- id="tspan9903" /></text>
- </g>
- <text
- xml:space="preserve"
- style="font-size:2.70000005px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="462.39481"
- y="430.58234"
- id="text9905"><tspan
- sodipodi:role="line"
- x="462.39481"
- y="430.58234"
- style="font-size:5px"
- id="tspan9907">SHA256d</tspan></text>
- <g
- id="g9909"
- transform="matrix(0.7985291,0,0,0.5813416,-37.39819,179.0857)"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">
- <path
- sodipodi:type="arc"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffe6d5;fill-opacity:1;stroke:#000000;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="path9911"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774,196.10106 A 34.958466,34.073441 0 1 1 572.61081,196.10106 A 34.958466,34.073441 0 1 1 642.52774,196.10106 z"
- transform="matrix(0.512658,0,0,0.4006128,289.10499,398.76956)" />
- <text
- xml:space="preserve"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="591.47559"
- y="483.09396"
- id="text9913"
- sodipodi:linespacing="100%"><tspan
- y="483.09396"
- x="591.47559"
- id="tspan9915"
- sodipodi:role="line" /><tspan
- y="493.09396"
- x="591.47559"
- sodipodi:role="line"
- id="tspan9917" /><tspan
- y="503.09396"
- x="591.47559"
- sodipodi:role="line"
- id="tspan9919" /></text>
- </g>
- <text
- xml:space="preserve"
- style="font-size:2.70000005px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="432.09406"
- y="458.18301"
- id="text9921"><tspan
- sodipodi:role="line"
- x="432.09406"
- y="458.18301"
- style="font-size:5px"
- id="tspan9923">SHA256d</tspan></text>
- <path
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.32513919px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- d="M 424.55591,436.29471 L 429.20855,448.05973"
- id="path9925"
- sodipodi:nodetypes="cc" />
- <path
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.32513919px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- d="M 463.55687,407.19399 L 468.20951,418.95901"
- id="path9927"
- sodipodi:nodetypes="cc" />
- <path
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.32513919px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- d="M 484.06352,407.70392 L 479.41088,419.46894"
- id="path9929"
- sodipodi:nodetypes="cc" />
- <path
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.32513919px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- d="M 425.60846,407.49401 L 420.95582,419.25903"
- id="path9931"
- sodipodi:nodetypes="cc" />
- <path
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.32513919px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- d="M 458.90929,435.99471 L 454.25665,447.75973"
- id="path9933"
- sodipodi:nodetypes="cc" />
- <g
- id="g9935"
- transform="matrix(0.7985291,0,0,0.5813416,-17.597704,43.482372)"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">
- <path
- sodipodi:type="arc"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffe6d5;fill-opacity:1;stroke:#000000;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="path9937"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774,196.10106 A 34.958466,34.073441 0 1 1 572.61081,196.10106 A 34.958466,34.073441 0 1 1 642.52774,196.10106 z"
- transform="matrix(0.512658,0,0,0.4006128,289.10499,398.76956)" />
- <text
- xml:space="preserve"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="591.47559"
- y="483.09396"
- id="text9939"
- sodipodi:linespacing="100%"><tspan
- y="483.09396"
- x="591.47559"
- id="tspan9941"
- sodipodi:role="line" /><tspan
- y="493.09396"
- x="591.47559"
- sodipodi:role="line"
- id="tspan9943" /><tspan
- y="503.09396"
- x="591.47559"
- sodipodi:role="line"
- id="tspan9945" /></text>
- </g>
- <text
- xml:space="preserve"
- style="font-size:2.70000005px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="456.99469"
- y="322.27969"
- id="text9947"><tspan
- sodipodi:role="line"
- x="456.99469"
- y="322.27969"
- style="font-size:5px"
- id="tspan9949">FEC</tspan></text>
- <path
- style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke-width:0.5;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 132.91688,87.962066 L 132.91688,86.612033 L 159.76754,86.612033 L 186.6182,86.612033 L 186.6182,87.962066 L 186.6182,89.3121 L 159.76754,89.3121 L 132.91688,89.3121 L 132.91688,87.962066 z"
- id="path9993"
- transform="translate(216.27706,196.47119)" />
- <path
- style="opacity:1;fill:#d40000;fill-opacity:1;fill-rule:nonzero;stroke-width:0.5;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 130.51682,147.96354 L 130.51682,146.61351 L 157.21748,146.61351 L 183.91813,146.61351 L 183.91813,147.96354 L 183.91813,149.31357 L 157.21748,149.31357 L 130.51682,149.31357 L 130.51682,147.96354 z"
- id="path9995"
- transform="translate(216.27706,196.47119)" />
- <path
- style="opacity:1;fill:#d40000;fill-opacity:1;fill-rule:nonzero;stroke-width:0.5;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 26.114257,76.71179 L 26.114257,75.211753 L 53.11492,75.211753 L 80.115583,75.211753 L 80.115583,76.71179 L 80.115583,78.211827 L 53.11492,78.211827 L 26.114257,78.211827 L 26.114257,76.71179 z"
- id="path9997"
- transform="translate(216.27706,196.47119)" />
- <path
- style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke-width:0.5;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 26.414265,133.7148 L 26.414265,132.21315 L 53.431371,132.21315 L 80.44846,132.21315 L 80.357032,133.63819 L 80.265587,135.06322 L 53.339926,135.13984 L 26.414265,135.21643 L 26.414265,133.7148 z"
- id="path9999"
- transform="translate(216.27706,196.47119)" />
- <path
- style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke-width:0.5;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 132.91688,87.962066 L 132.91688,86.612033 L 159.76754,86.612033 L 186.6182,86.612033 L 186.6182,87.962066 L 186.6182,89.3121 L 159.76754,89.3121 L 132.91688,89.3121 L 132.91688,87.962066 z"
- id="path10001"
- transform="translate(216.27706,196.47119)" />
- <path
- style="opacity:1;fill:#e4161b;fill-opacity:1;fill-rule:nonzero;stroke-width:0.5;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 130.51682,147.96354 L 130.51682,146.61351 L 157.21748,146.61351 L 183.91813,146.61351 L 183.91813,147.96354 L 183.91813,149.31357 L 157.21748,149.31357 L 130.51682,149.31357 L 130.51682,147.96354 z"
- id="path10003"
- transform="translate(216.27706,196.47119)" />
- <path
- style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke-width:0.5;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 26.414265,133.72419 L 26.414265,132.21315 L 53.432178,132.21315 L 80.450089,132.21315 L 80.357839,133.48818 L 80.265587,134.76322 L 73.515421,134.91631 C 69.80283,135.00052 57.686283,135.10673 46.58976,135.15233 L 26.414265,135.23524 L 26.414265,133.72419 z"
- id="path10045"
- transform="translate(216.27706,196.47119)" />
- <path
- style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke-width:0.5;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 130.51682,147.96354 L 130.51682,146.61351 L 157.21748,146.61351 L 183.91813,146.61351 L 183.91813,147.96354 L 183.91813,149.31357 L 157.21748,149.31357 L 130.51682,149.31357 L 130.51682,147.96354 z"
- id="path10047"
- transform="translate(216.27706,196.47119)" />
- </g>
- <g
- inkscape:groupmode="layer"
- id="layer2"
- inkscape:label="text"
- transform="translate(-217.17997,-198.38081)">
- <path
- transform="matrix(0.3375,0,0,0.3375,326.62493,224.71999)"
- d="M 500,212.36218 A 80,20 0 1 1 340,212.36218 A 80,20 0 1 1 500,212.36218 z"
- sodipodi:ry="20"
- sodipodi:rx="80"
- sodipodi:cy="212.36218"
- sodipodi:cx="420"
- id="path12528"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- sodipodi:type="arc" />
- <path
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.33749998px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- d="M 398.91941,217.38625 C 397.86315,236.37897 412.97295,261.62455 412.97295,261.62455"
- id="path8489"
- sodipodi:nodetypes="cc" />
- <path
- sodipodi:type="arc"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="path10092"
- sodipodi:cx="420"
- sodipodi:cy="212.36218"
- sodipodi:rx="80"
- sodipodi:ry="20"
- d="M 500,212.36218 A 80,20 0 1 1 340,212.36218 A 80,20 0 1 1 500,212.36218 z"
- transform="matrix(0.3375,0,0,0.3375,326.62493,224.71999)" />
- <text
- xml:space="preserve"
- style="font-size:8.09999943px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="556.67358"
- y="169.5114"
- id="text10094"
- transform="scale(0.8252145,1.2118062)"><tspan
- sodipodi:role="line"
- id="tspan10096"
- x="556.67358"
- y="169.5114" /></text>
- <rect
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="rect13628"
- width="7.5"
- height="0"
- x="524.88025"
- y="299.30756" />
- <g
- id="g16785"
- transform="matrix(0.364293,0,0,0.4974358,-16.906009,-38.001986)"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">
- <g
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#00ffff;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="g16787"
- transform="translate(-210,240)" />
- <text
- transform="scale(1.0714114,0.9333483)"
- id="text16789"
- y="325.48486"
- x="362.67249"
- style="font-size:32.76525116px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- xml:space="preserve"><tspan
- id="tspan16791"
- y="325.48486"
- x="362.67249"
- sodipodi:role="line" /></text>
- </g>
- <text
- transform="scale(0.9161476,1.0915272)"
- id="text16795"
- y="124.86931"
- x="159.02403"
- style="font-size:13.94785595px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- xml:space="preserve"><tspan
- y="124.86931"
- x="159.02403"
- id="tspan16797"
- sodipodi:role="line" /></text>
- <text
- xml:space="preserve"
- style="font-size:13.947855px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="247.0589"
- y="116.87234"
- id="text16801"
- transform="scale(0.7061936,1.4160423)"><tspan
- sodipodi:role="line"
- id="tspan16803"
- x="247.0589"
- y="116.87234" /></text>
- <rect
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:1.875;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="rect20335"
- width="4.5456867"
- height="0"
- x="206.55289"
- y="326.09802" />
- <rect
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:0.52360517;fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ca1818;stroke-width:0.27742502;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="rect7836"
- width="54"
- height="3.375"
- x="346.5321"
- y="342.79144" />
- <text
- transform="scale(1.0705538,0.934096)"
- id="text7838"
- y="377.70102"
- x="341.13809"
- style="font-size:6.07499981px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- xml:space="preserve"><tspan
- y="377.70102"
- x="341.13809"
- id="tspan7840"
- sodipodi:role="line"
- style="font-size:8.10000038px">salt</tspan></text>
- <g
- transform="matrix(0.3375,0,0,0.3375,168.46227,275.21496)"
- id="g8416"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#00ffff;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">
- <rect
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:0.52360517;fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ca1818;stroke-width:0.82200003;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="rect8418"
- width="160"
- height="10"
- x="535"
- y="22.362183" />
- </g>
- <text
- xml:space="preserve"
- style="font-size:6.07500029px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="332.31949"
- y="313.88254"
- id="text8424"
- transform="scale(1.0714114,0.9333483)"><tspan
- sodipodi:role="line"
- id="tspan8426"
- x="332.31949"
- y="313.88254"
- style="font-size:8.10000038px">encryption</tspan><tspan
- sodipodi:role="line"
- x="332.31949"
- y="324.00754"
- id="tspan8428"
- style="font-size:8.10000038px"> key</tspan></text>
- <path
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.33749998px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- d="M 298.98227,329.83819 C 326.42371,330.53571 348.95266,320.06453 348.95266,320.06453"
- id="path21352"
- sodipodi:nodetypes="cc" />
- <path
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.33749998px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- d="M 362.28379,341.51001 C 341.45603,329.97307 346.83916,321.99552 346.83916,321.99552"
- id="path21354"
- sodipodi:nodetypes="cc" />
- <path
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.2438544px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- d="M 355.39701,305.53135 L 360.98003,293.64584"
- id="path21358"
- sodipodi:nodetypes="cc" />
- <text
- xml:space="preserve"
- style="font-size:6px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="487.03278"
- y="411.55334"
- id="text3034"><tspan
- sodipodi:role="line"
- id="tspan3036"
- x="487.03278"
- y="411.55334" /></text>
- <flowRoot
- xml:space="preserve"
- id="flowRoot3254"
- style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- transform="matrix(0.75,0,0,0.75,89.880266,80.035916)"><flowRegion
- id="flowRegion3256"><rect
- id="rect3258"
- width="18.039574"
- height="36.830799"
- x="-31.569254"
- y="-50.306789"
- style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter" /></flowRegion><flowPara
- id="flowPara3260" /></flowRoot> <rect
- y="198.60286"
- x="219.6953"
- height="24.165203"
- width="107.25604"
- id="rect3282"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#250f25;stroke-width:0.44410068;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter" />
- <rect
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:0.52360517;fill:#e4161b;fill-opacity:1;fill-rule:nonzero;stroke:#250f25;stroke-width:0.13748316;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="rect5573"
- width="54.139946"
- height="3.3068728"
- x="242.37775"
- y="271.45877" />
- <text
- xml:space="preserve"
- style="font-size:11.05827236px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="235.36351"
- y="301.57739"
- id="text7107"
- transform="scale(1.0705539,0.9340959)"><tspan
- sodipodi:role="line"
- id="tspan7109"
- x="235.36351"
- y="301.57739"
- style="font-size:8.10000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">write key</tspan></text>
- <text
- transform="scale(1.0705539,0.9340959)"
- id="text7768"
- y="362.28162"
- x="234.52074"
- style="font-size:11.05827236px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- xml:space="preserve"><tspan
- y="362.28162"
- x="234.52074"
- id="tspan7770"
- sodipodi:role="line"
- style="font-size:8.10000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">read key</tspan></text>
- <rect
- y="356.53317"
- x="230.62067"
- height="24.165203"
- width="107.25604"
- id="rect3291"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#250f25;stroke-width:0.44410068;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter" />
- <text
- xml:space="preserve"
- style="font-size:6.07500029px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="248.95004"
- y="370.59125"
- id="text3246"><tspan
- sodipodi:role="line"
- id="tspan3248"
- x="248.95004"
- y="370.59125"
- style="font-size:8.10000038px">verifying (public) key</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:6.07500029px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="239.46277"
- y="213.58257"
- id="text3328"><tspan
- sodipodi:role="line"
- x="239.46277"
- y="213.58257"
- style="font-size:8.10000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke-width:0;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="tspan3021">signing (private) key</tspan></text>
- <rect
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:0.52360517;fill:#f22a33;fill-opacity:1;fill-rule:nonzero;stroke:#250f25;stroke-width:0.13748316;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="rect4024"
- width="54.139946"
- height="3.3068728"
- x="242.55493"
- y="328.39029" />
- <text
- xml:space="preserve"
- style="font-size:6.07500029px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="381.61792"
- y="386.57251"
- id="text4229"><tspan
- sodipodi:role="line"
- id="tspan4231"
- x="381.61792"
- y="386.57251" /></text>
- <path
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- d="M 234.50363,224.362 L 234.50363,354.01202"
- id="path4243"
- inkscape:connector-type="polyline" />
- <rect
- y="241.14568"
- x="288.69962"
- height="24.165203"
- width="107.25604"
- id="rect5564"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#250f25;stroke-width:0.44410068;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter" />
- <text
- xml:space="preserve"
- style="font-size:6.07500029px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="306.05878"
- y="255.20375"
- id="text5566"><tspan
- sodipodi:role="line"
- id="tspan5568"
- x="306.05878"
- y="255.20375"
- style="font-size:8.10000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">encrypted signing key</tspan></text>
- <path
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.375;stroke-linecap:butt;stroke-linejoin:miter;marker-mid:none;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- d="M 279.02164,269.72178 C 281.56206,241.33051 292.24088,235.15181 292.24088,235.15181"
- id="path5574"
- sodipodi:nodetypes="cc" />
- <path
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.375;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- d="M 285.08543,222.90932 L 291.78123,230.87533"
- id="path6618"
- inkscape:connector-type="polyline"
- sodipodi:nodetypes="cc" />
- <path
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.375;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- d="M 322.35949,233.1782 L 335.48526,239.16028"
- id="path8979"
- sodipodi:nodetypes="cc" />
- <text
- transform="scale(1.0705539,0.9340959)"
- id="text9528"
- y="462.90314"
- x="245.50374"
- style="font-size:11.05827236px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- xml:space="preserve"><tspan
- y="462.90314"
- x="245.50374"
- id="tspan9530"
- sodipodi:role="line"
- style="font-size:8.10000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">verify cap</tspan></text>
- <rect
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:0.52360517;fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#250f25;stroke-width:0.19443056;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="rect9554"
- width="108.27989"
- height="3.3068728"
- x="222.74568"
- y="419.13055" />
- <rect
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:0.2415408px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="rect16799"
- width="171.15405"
- height="13.22591"
- x="222.05762"
- y="440.96823" />
- <text
- xml:space="preserve"
- style="font-size:6.07500029px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="279.37097"
- y="462.55542"
- id="text3313"><tspan
- sodipodi:role="line"
- x="279.37097"
- y="462.55542"
- id="tspan3317"
- style="font-size:8.10000038px">read-write cap</tspan></text>
- <path
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#00ff00;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- d="M 222.87392,420.82386 L 222.87392,419.36856 L 276.84166,419.36856 L 330.8094,419.36856 L 330.8094,420.82386 L 330.8094,422.27917 L 276.84166,422.27917 L 222.87392,422.27917 L 222.87392,420.82386 z"
- id="path9564" />
- <text
- transform="scale(1.0705539,0.9340959)"
- id="text9566"
- y="483.10208"
- x="304.77203"
- style="font-size:11.05827236px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- xml:space="preserve"><tspan
- y="483.10208"
- x="304.77203"
- id="tspan9568"
- sodipodi:role="line"
- style="font-size:6px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">verify cap</tspan></text>
- <rect
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:0.52360517;fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#250f25;stroke-width:0.19443056;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="rect9570"
- width="108.27989"
- height="3.3068728"
- x="281.14557"
- y="443.04819" />
- <path
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#00ff00;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- d="M 281.27383,444.74153 L 281.27383,443.28622 L 335.24158,443.28622 L 389.20931,443.28622 L 389.20931,444.74153 L 389.20931,446.19684 L 335.24158,446.19684 L 281.27383,446.19684 L 281.27383,444.74153 z"
- id="path9572" />
- <rect
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:0.52360517;fill:#f22a33;fill-opacity:1;fill-rule:nonzero;stroke:#250f25;stroke-width:0.13748316;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="rect9574"
- width="54.139946"
- height="3.3068728"
- x="225.99055"
- y="442.97894" />
- <text
- xml:space="preserve"
- style="font-size:11.05827236px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="223.80324"
- y="483.19937"
- id="text9576"
- transform="scale(1.0705539,0.9340959)"><tspan
- sodipodi:role="line"
- id="tspan9578"
- x="223.80324"
- y="483.19937"
- style="font-size:6px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">write key</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:6.07500029px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="279.37097"
- y="490.32758"
- id="text9582"><tspan
- sodipodi:role="line"
- x="279.37097"
- y="490.32758"
- id="tspan9584"
- style="font-size:8.10000038px">read-only cap</tspan></text>
- <text
- transform="scale(1.0705539,0.9340959)"
- id="text9586"
- y="512.94104"
- x="305.00543"
- style="font-size:11.05827236px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- xml:space="preserve"><tspan
- y="512.94104"
- x="305.00543"
- id="tspan9588"
- sodipodi:role="line"
- style="font-size:6px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">verify cap</tspan></text>
- <rect
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:0.52360517;fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#250f25;stroke-width:0.19443056;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="rect9590"
- width="108.27989"
- height="3.3068728"
- x="281.14554"
- y="470.82034" />
- <path
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#00ff00;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- d="M 281.27383,472.51368 L 281.27383,471.05837 L 335.24157,471.05837 L 389.2093,471.05837 L 389.2093,472.51368 L 389.2093,473.96898 L 335.24157,473.96898 L 281.27383,473.96898 L 281.27383,472.51368 z"
- id="path9592" />
- <rect
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:0.52360517;fill:#f22a33;fill-opacity:1;fill-rule:nonzero;stroke:#250f25;stroke-width:0.13748316;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="rect9594"
- width="54.139946"
- height="3.3068728"
- x="225.99054"
- y="470.7511" />
- <text
- xml:space="preserve"
- style="font-size:11.05827236px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="224.83044"
- y="512.93097"
- id="text9596"
- transform="scale(1.0705539,0.9340959)"><tspan
- sodipodi:role="line"
- id="tspan9598"
- x="224.83044"
- y="512.93097"
- style="font-size:6px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">read key</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:8.10000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="384.58023"
- y="210.64319"
- id="text3025"><tspan
- sodipodi:role="line"
- id="tspan3027"
- x="384.58023"
- y="210.64319">plaintext</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:8.10000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="451.8754"
- y="298.79443"
- id="text3029"><tspan
- sodipodi:role="line"
- id="tspan3031"
- x="451.8754"
- y="298.79443">ciphertext</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:8.10000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="102.84189"
- y="100.84377"
- id="text3459"
- transform="translate(218.99833,196.47119)"><tspan
- sodipodi:role="line"
- id="tspan3461"
- x="102.84189"
- y="100.84377" /></text>
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 48.719461,27.732616 L 48.719461,41.723846"
- id="path3512"
- transform="translate(218.99833,196.47119)"
- inkscape:connector-type="polyline" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 267.71779,255.74642 L 267.71779,269.73765"
- id="path4829"
- inkscape:connector-type="polyline" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 266.96826,282.47967 L 266.96826,296.4709"
- id="path4831"
- inkscape:connector-type="polyline" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 266.96826,312.96055 L 266.96826,326.95178"
- id="path4833"
- inkscape:connector-type="polyline" />
- <rect
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:0.14901878px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="rect5110"
- width="113.09831"
- height="7.6182923"
- x="221.60002"
- y="417.24417" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 49.877177,187.22739 L 50.127816,194.49593"
- id="path5112"
- transform="translate(218.99833,196.47119)"
- inkscape:connector-type="polyline" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;marker-mid:none;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
- d="M 50.127816,212.04066 L 50.127816,219.3092"
- id="path5641"
- transform="translate(218.99833,196.47119)"
- inkscape:connector-type="polyline" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1"
- d="M 22.500552,81.301996 C 3.3317037,108.63786 -8.6943462,156.11861 6.9001691,245.40603"
- id="path7224"
- transform="translate(218.99833,196.47119)"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1"
- d="M 240.57714,332.04074 C 221.40829,359.37661 207.8822,408.95742 225.87678,470.34415"
- id="path7753"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1"
- d="M 90.602225,227.40558 L 105.30258,246.00604"
- id="path7755"
- transform="translate(218.99833,196.47119)"
- inkscape:connector-type="polyline"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1"
- d="M 367.86051,447.5929 L 367.5605,469.79345"
- id="path8286"
- inkscape:connector-type="polyline"
- sodipodi:nodetypes="cc" />
- <g
- id="g9190"
- transform="matrix(0.7985291,0,0,0.5813416,-211.70247,-29.719429)"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">
- <path
- sodipodi:type="arc"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffe6d5;fill-opacity:1;stroke:#000000;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="path9192"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774,196.10106 A 34.958466,34.073441 0 1 1 572.61081,196.10106 A 34.958466,34.073441 0 1 1 642.52774,196.10106 z"
- transform="matrix(0.512658,0,0,0.4006128,289.10499,398.76956)" />
- <text
- xml:space="preserve"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="591.47559"
- y="483.09396"
- id="text9194"
- sodipodi:linespacing="100%"><tspan
- y="483.09396"
- x="591.47559"
- id="tspan9196"
- sodipodi:role="line" /><tspan
- y="493.09396"
- x="591.47559"
- sodipodi:role="line"
- id="tspan9198" /><tspan
- y="503.09396"
- x="591.47559"
- sodipodi:role="line"
- id="tspan9200" /></text>
- </g>
- <text
- xml:space="preserve"
- style="font-size:2.70000005px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="257.18979"
- y="245.77785"
- id="text9202"><tspan
- sodipodi:role="line"
- x="257.18979"
- y="245.77785"
- id="tspan9204"
- style="font-size:5px">SHA256d</tspan><tspan
- sodipodi:role="line"
- x="257.18979"
- y="252.02785"
- style="font-size:5px"
- id="tspan9206">truncated</tspan></text>
- <g
- id="g9208"
- transform="matrix(0.7985291,0,0,0.5813416,-211.70247,28.482004)"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">
- <path
- sodipodi:type="arc"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffe6d5;fill-opacity:1;stroke:#000000;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="path9210"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774,196.10106 A 34.958466,34.073441 0 1 1 572.61081,196.10106 A 34.958466,34.073441 0 1 1 642.52774,196.10106 z"
- transform="matrix(0.512658,0,0,0.4006128,289.10499,398.76956)" />
- <text
- xml:space="preserve"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="591.47559"
- y="483.09396"
- id="text9212"
- sodipodi:linespacing="100%"><tspan
- y="483.09396"
- x="591.47559"
- id="tspan9214"
- sodipodi:role="line" /><tspan
- y="493.09396"
- x="591.47559"
- sodipodi:role="line"
- id="tspan9216" /><tspan
- y="503.09396"
- x="591.47559"
- sodipodi:role="line"
- id="tspan9218" /></text>
- </g>
- <text
- xml:space="preserve"
- style="font-size:2.70000005px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="257.18979"
- y="303.97925"
- id="text9220"><tspan
- sodipodi:role="line"
- x="257.18979"
- y="303.97925"
- id="tspan9222"
- style="font-size:5px">SHA256d</tspan><tspan
- sodipodi:role="line"
- x="257.18979"
- y="310.22925"
- style="font-size:5px"
- id="tspan9224">truncated</tspan></text>
- <g
- id="g9226"
- transform="matrix(0.7985291,0,0,0.5813416,-127.4004,35.982184)"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">
- <path
- sodipodi:type="arc"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffe6d5;fill-opacity:1;stroke:#000000;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="path9228"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774,196.10106 A 34.958466,34.073441 0 1 1 572.61081,196.10106 A 34.958466,34.073441 0 1 1 642.52774,196.10106 z"
- transform="matrix(0.512658,0,0,0.4006128,289.10499,398.76956)" />
- <text
- xml:space="preserve"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="591.47559"
- y="483.09396"
- id="text9230"
- sodipodi:linespacing="100%"><tspan
- y="483.09396"
- x="591.47559"
- id="tspan9232"
- sodipodi:role="line" /><tspan
- y="493.09396"
- x="591.47559"
- sodipodi:role="line"
- id="tspan9234" /><tspan
- y="503.09396"
- x="591.47559"
- sodipodi:role="line"
- id="tspan9236" /></text>
- </g>
- <text
- xml:space="preserve"
- style="font-size:2.70000005px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="341.49188"
- y="311.47946"
- id="text9238"><tspan
- sodipodi:role="line"
- x="341.49188"
- y="311.47946"
- id="tspan9240"
- style="font-size:5px">SHA256d</tspan><tspan
- sodipodi:role="line"
- x="341.49188"
- y="317.72946"
- style="font-size:5px"
- id="tspan9242">truncated</tspan></text>
- <g
- id="g9244"
- transform="matrix(0.7985291,0,0,0.5813416,-210.80245,122.98432)"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">
- <path
- sodipodi:type="arc"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffe6d5;fill-opacity:1;stroke:#000000;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="path9246"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774,196.10106 A 34.958466,34.073441 0 1 1 572.61081,196.10106 A 34.958466,34.073441 0 1 1 642.52774,196.10106 z"
- transform="matrix(0.512658,0,0,0.4006128,289.10499,398.76956)" />
- <text
- xml:space="preserve"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="591.47559"
- y="483.09396"
- id="text9248"
- sodipodi:linespacing="100%"><tspan
- y="483.09396"
- x="591.47559"
- id="tspan9250"
- sodipodi:role="line" /><tspan
- y="493.09396"
- x="591.47559"
- sodipodi:role="line"
- id="tspan9252" /><tspan
- y="503.09396"
- x="591.47559"
- sodipodi:role="line"
- id="tspan9254" /></text>
- </g>
- <text
- xml:space="preserve"
- style="font-size:2.70000005px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="258.08981"
- y="398.4816"
- id="text9256"><tspan
- sodipodi:role="line"
- x="258.08981"
- y="398.4816"
- id="tspan9258"
- style="font-size:5px">SHA256d</tspan><tspan
- sodipodi:role="line"
- x="258.08981"
- y="404.7316"
- style="font-size:5px"
- id="tspan9260">truncated</tspan></text>
- <g
- id="g9262"
- transform="matrix(0.7985291,0,0,0.5813416,-52.098552,-13.519031)"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">
- <path
- sodipodi:type="arc"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffe6d5;fill-opacity:1;stroke:#000000;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="path9264"
- sodipodi:cx="607.56927"
- sodipodi:cy="196.10106"
- sodipodi:rx="34.958466"
- sodipodi:ry="34.073441"
- d="M 642.52774,196.10106 A 34.958466,34.073441 0 1 1 572.61081,196.10106 A 34.958466,34.073441 0 1 1 642.52774,196.10106 z"
- transform="matrix(0.512658,0,0,0.4006128,289.10499,398.76956)" />
- <text
- xml:space="preserve"
- style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="591.47559"
- y="483.09396"
- id="text9266"
- sodipodi:linespacing="100%"><tspan
- y="483.09396"
- x="591.47559"
- id="tspan9268"
- sodipodi:role="line" /><tspan
- y="493.09396"
- x="591.47559"
- sodipodi:role="line"
- id="tspan9270" /><tspan
- y="503.09396"
- x="591.47559"
- sodipodi:role="line"
- id="tspan9272" /></text>
- </g>
- <text
- xml:space="preserve"
- style="font-size:2.70000005px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="417.99377"
- y="264.97833"
- id="text9274"><tspan
- sodipodi:role="line"
- x="417.99377"
- y="264.97833"
- style="font-size:5px"
- id="tspan9276">AES-CTR</tspan></text>
- <rect
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:0.07011827px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="rect9845"
- width="20.741352"
- height="9.1972332"
- x="395.21106"
- y="396.4776"
- inkscape:transform-center-y="4.6611973"
- inkscape:transform-center-x="1.720467e-05" />
- <path
- style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke-width:0.5;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 395.27984,401.04002 L 395.27984,396.56484 L 405.56868,396.56484 L 415.85752,396.56484 L 415.85752,401.04002 L 415.85752,405.51519 L 405.56868,405.51519 L 395.27984,405.51519 L 395.27984,401.04002 z"
- id="path9847"
- inkscape:transform-center-x="0.013044945"
- inkscape:transform-center-y="4.6250009" />
- <text
- xml:space="preserve"
- style="font-size:5px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="397.93158"
- y="402.57623"
- id="text9849"><tspan
- sodipodi:role="line"
- id="tspan9851"
- x="397.93158"
- y="402.57623">share 1</tspan></text>
- <rect
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:0.07011827px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="rect9853"
- width="20.741352"
- height="9.1972332"
- x="421.31168"
- y="396.4776"
- inkscape:transform-center-y="4.6611973"
- inkscape:transform-center-x="1.720467e-05" />
- <path
- style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke-width:0.5;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 421.38048,401.04003 L 421.38048,396.56485 L 431.66932,396.56485 L 441.95816,396.56485 L 441.95816,401.04003 L 441.95816,405.5152 L 431.66932,405.5152 L 421.38048,405.5152 L 421.38048,401.04003 z"
- id="path9855"
- inkscape:transform-center-x="0.013044945"
- inkscape:transform-center-y="4.6250009" />
- <text
- xml:space="preserve"
- style="font-size:5px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="424.0322"
- y="402.57623"
- id="text9857"><tspan
- sodipodi:role="line"
- id="tspan9859"
- x="424.0322"
- y="402.57623">share 2</tspan></text>
- <rect
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:0.07011827px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="rect9861"
- width="20.741352"
- height="9.1972332"
- x="446.81232"
- y="396.4776"
- inkscape:transform-center-y="4.6611973"
- inkscape:transform-center-x="1.720467e-05" />
- <path
- style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke-width:0.5;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 446.88111,401.04003 L 446.88111,396.56485 L 457.16995,396.56485 L 467.45879,396.56485 L 467.45879,401.04003 L 467.45879,405.5152 L 457.16995,405.5152 L 446.88111,405.5152 L 446.88111,401.04003 z"
- id="path9863"
- inkscape:transform-center-x="0.013044945"
- inkscape:transform-center-y="4.6250009" />
- <text
- xml:space="preserve"
- style="font-size:5px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="449.53284"
- y="402.57623"
- id="text9865"><tspan
- sodipodi:role="line"
- id="tspan9867"
- x="449.53284"
- y="402.57623">share 3</tspan></text>
- <rect
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:0.07011827px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="rect9869"
- width="20.741352"
- height="9.1972332"
- x="473.81299"
- y="396.77759"
- inkscape:transform-center-y="4.6611973"
- inkscape:transform-center-x="1.720467e-05" />
- <path
- style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke-width:0.5;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 473.88178,401.34003 L 473.88178,396.86485 L 484.17062,396.86485 L 494.45946,396.86485 L 494.45946,401.34003 L 494.45946,405.8152 L 484.17062,405.8152 L 473.88178,405.8152 L 473.88178,401.34003 z"
- id="path9871"
- inkscape:transform-center-x="0.013044945"
- inkscape:transform-center-y="4.6250009" />
- <text
- xml:space="preserve"
- style="font-size:5px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- x="476.53351"
- y="402.87622"
- id="text9873"><tspan
- sodipodi:role="line"
- id="tspan9875"
- x="476.53351"
- y="402.87622">share 4</tspan></text>
- <path
- style="opacity:1;fill:#e4161b;fill-opacity:1;fill-rule:nonzero;stroke-width:0.5;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 26.414265,133.71319 L 26.414265,132.21315 L 53.414928,132.21315 L 80.415591,132.21315 L 80.415591,133.51519 L 80.415591,134.81725 L 73.166834,135.01523 C 69.180018,135.12413 57.02972,135.21323 46.166171,135.21323 L 26.414265,135.21323 L 26.414265,133.71319 z"
- id="path10049"
- transform="translate(216.27706,196.47119)" />
- <path
- style="opacity:1;fill:#e4161b;fill-opacity:1;fill-rule:nonzero;stroke-width:0.5;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 9.9138595,248.166 L 9.9138595,246.51596 L 36.764519,246.51596 L 63.615178,246.51596 L 63.615178,248.166 L 63.615178,249.81604 L 36.764519,249.81604 L 9.9138595,249.81604 L 9.9138595,248.166 z"
- id="path10051"
- transform="translate(216.27706,196.47119)" />
- <path
- style="opacity:1;fill:#e4161b;fill-opacity:1;fill-rule:nonzero;stroke-width:0.5;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 9.9138595,275.91668 L 9.9138595,274.41665 L 36.764519,274.41665 L 63.615178,274.41665 L 63.615178,275.91668 L 63.615178,277.41672 L 36.764519,277.41672 L 9.9138595,277.41672 L 9.9138595,275.91668 z"
- id="path10055"
- transform="translate(216.27706,196.47119)" />
- <rect
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:0.2415408px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
- id="rect2971"
- width="171.15405"
- height="13.22591"
- x="222.20229"
- y="469.1651" />
- </g>
-</svg>
+++ /dev/null
-
-This describes the "RSA-based mutable files" which were shipped in Tahoe v0.8.0.
-
-= Mutable Files =
-
-Mutable File Slots are places with a stable identifier that can hold data
-that changes over time. In contrast to CHK slots, for which the
-URI/identifier is derived from the contents themselves, the Mutable File Slot
-URI remains fixed for the life of the slot, regardless of what data is placed
-inside it.
-
-Each mutable slot is referenced by two different URIs. The "read-write" URI
-grants read-write access to its holder, allowing them to put whatever
-contents they like into the slot. The "read-only" URI is less powerful, only
-granting read access, and not enabling modification of the data. The
-read-write URI can be turned into the read-only URI, but not the other way
-around.
-
-The data in these slots is distributed over a number of servers, using the
-same erasure coding that CHK files use, with 3-of-10 being a typical choice
-of encoding parameters. The data is encrypted and signed in such a way that
-only the holders of the read-write URI will be able to set the contents of
-the slot, and only the holders of the read-only URI will be able to read
-those contents. Holders of either URI will be able to validate the contents
-as being written by someone with the read-write URI. The servers who hold the
-shares cannot read or modify them: the worst they can do is deny service (by
-deleting or corrupting the shares), or attempt a rollback attack (which can
-only succeed with the cooperation of at least k servers).
-
-== Consistency vs Availability ==
-
-There is an age-old battle between consistency and availability. Epic papers
-have been written, elaborate proofs have been established, and generations of
-theorists have learned that you cannot simultaneously achieve guaranteed
-consistency with guaranteed reliability. In addition, the closer to 0 you get
-on either axis, the cost and complexity of the design goes up.
-
-Tahoe's design goals are to largely favor design simplicity, then slightly
-favor read availability, over the other criteria.
-
-As we develop more sophisticated mutable slots, the API may expose multiple
-read versions to the application layer. The tahoe philosophy is to defer most
-consistency recovery logic to the higher layers. Some applications have
-effective ways to merge multiple versions, so inconsistency is not
-necessarily a problem (i.e. directory nodes can usually merge multiple "add
-child" operations).
-
-== The Prime Coordination Directive: "Don't Do That" ==
-
-The current rule for applications which run on top of Tahoe is "do not
-perform simultaneous uncoordinated writes". That means you need non-tahoe
-means to make sure that two parties are not trying to modify the same mutable
-slot at the same time. For example:
-
- * don't give the read-write URI to anyone else. Dirnodes in a private
- directory generally satisfy this case, as long as you don't use two
- clients on the same account at the same time
- * if you give a read-write URI to someone else, stop using it yourself. An
- inbox would be a good example of this.
- * if you give a read-write URI to someone else, call them on the phone
- before you write into it
- * build an automated mechanism to have your agents coordinate writes.
- For example, we expect a future release to include a FURL for a
- "coordination server" in the dirnodes. The rule can be that you must
- contact the coordination server and obtain a lock/lease on the file
- before you're allowed to modify it.
-
-If you do not follow this rule, Bad Things will happen. The worst-case Bad
-Thing is that the entire file will be lost. A less-bad Bad Thing is that one
-or more of the simultaneous writers will lose their changes. An observer of
-the file may not see monotonically-increasing changes to the file, i.e. they
-may see version 1, then version 2, then 3, then 2 again.
-
-Tahoe takes some amount of care to reduce the badness of these Bad Things.
-One way you can help nudge it from the "lose your file" case into the "lose
-some changes" case is to reduce the number of competing versions: multiple
-versions of the file that different parties are trying to establish as the
-one true current contents. Each simultaneous writer counts as a "competing
-version", as does the previous version of the file. If the count "S" of these
-competing versions is larger than N/k, then the file runs the risk of being
-lost completely. [TODO] If at least one of the writers remains running after
-the collision is detected, it will attempt to recover, but if S>(N/k) and all
-writers crash after writing a few shares, the file will be lost.
-
-Note that Tahoe uses serialization internally to make sure that a single
-Tahoe node will not perform simultaneous modifications to a mutable file. It
-accomplishes this by using a weakref cache of the MutableFileNode (so that
-there will never be two distinct MutableFileNodes for the same file), and by
-forcing all mutable file operations to obtain a per-node lock before they
-run. The Prime Coordination Directive therefore applies to inter-node
-conflicts, not intra-node ones.
-
-
-== Small Distributed Mutable Files ==
-
-SDMF slots are suitable for small (<1MB) files that are editing by rewriting
-the entire file. The three operations are:
-
- * allocate (with initial contents)
- * set (with new contents)
- * get (old contents)
-
-The first use of SDMF slots will be to hold directories (dirnodes), which map
-encrypted child names to rw-URI/ro-URI pairs.
-
-=== SDMF slots overview ===
-
-Each SDMF slot is created with a public/private key pair. The public key is
-known as the "verification key", while the private key is called the
-"signature key". The private key is hashed and truncated to 16 bytes to form
-the "write key" (an AES symmetric key). The write key is then hashed and
-truncated to form the "read key". The read key is hashed and truncated to
-form the 16-byte "storage index" (a unique string used as an index to locate
-stored data).
-
-The public key is hashed by itself to form the "verification key hash".
-
-The write key is hashed a different way to form the "write enabler master".
-For each storage server on which a share is kept, the write enabler master is
-concatenated with the server's nodeid and hashed, and the result is called
-the "write enabler" for that particular server. Note that multiple shares of
-the same slot stored on the same server will all get the same write enabler,
-i.e. the write enabler is associated with the "bucket", rather than the
-individual shares.
-
-The private key is encrypted (using AES in counter mode) by the write key,
-and the resulting crypttext is stored on the servers. so it will be
-retrievable by anyone who knows the write key. The write key is not used to
-encrypt anything else, and the private key never changes, so we do not need
-an IV for this purpose.
-
-The actual data is encrypted (using AES in counter mode) with a key derived
-by concatenating the readkey with the IV, the hashing the results and
-truncating to 16 bytes. The IV is randomly generated each time the slot is
-updated, and stored next to the encrypted data.
-
-The read-write URI consists of the write key and the verification key hash.
-The read-only URI contains the read key and the verification key hash. The
-verify-only URI contains the storage index and the verification key hash.
-
- URI:SSK-RW:b2a(writekey):b2a(verification_key_hash)
- URI:SSK-RO:b2a(readkey):b2a(verification_key_hash)
- URI:SSK-Verify:b2a(storage_index):b2a(verification_key_hash)
-
-Note that this allows the read-only and verify-only URIs to be derived from
-the read-write URI without actually retrieving the public keys. Also note
-that it means the read-write agent must validate both the private key and the
-public key when they are first fetched. All users validate the public key in
-exactly the same way.
-
-The SDMF slot is allocated by sending a request to the storage server with a
-desired size, the storage index, and the write enabler for that server's
-nodeid. If granted, the write enabler is stashed inside the slot's backing
-store file. All further write requests must be accompanied by the write
-enabler or they will not be honored. The storage server does not share the
-write enabler with anyone else.
-
-The SDMF slot structure will be described in more detail below. The important
-pieces are:
-
- * a sequence number
- * a root hash "R"
- * the encoding parameters (including k, N, file size, segment size)
- * a signed copy of [seqnum,R,encoding_params], using the signature key
- * the verification key (not encrypted)
- * the share hash chain (part of a Merkle tree over the share hashes)
- * the block hash tree (Merkle tree over blocks of share data)
- * the share data itself (erasure-coding of read-key-encrypted file data)
- * the signature key, encrypted with the write key
-
-The access pattern for read is:
- * hash read-key to get storage index
- * use storage index to locate 'k' shares with identical 'R' values
- * either get one share, read 'k' from it, then read k-1 shares
- * or read, say, 5 shares, discover k, either get more or be finished
- * or copy k into the URIs
- * read verification key
- * hash verification key, compare against verification key hash
- * read seqnum, R, encoding parameters, signature
- * verify signature against verification key
- * read share data, compute block-hash Merkle tree and root "r"
- * read share hash chain (leading from "r" to "R")
- * validate share hash chain up to the root "R"
- * submit share data to erasure decoding
- * decrypt decoded data with read-key
- * submit plaintext to application
-
-The access pattern for write is:
- * hash write-key to get read-key, hash read-key to get storage index
- * use the storage index to locate at least one share
- * read verification key and encrypted signature key
- * decrypt signature key using write-key
- * hash signature key, compare against write-key
- * hash verification key, compare against verification key hash
- * encrypt plaintext from application with read-key
- * application can encrypt some data with the write-key to make it only
- available to writers (use this for transitive read-onlyness of dirnodes)
- * erasure-code crypttext to form shares
- * split shares into blocks
- * compute Merkle tree of blocks, giving root "r" for each share
- * compute Merkle tree of shares, find root "R" for the file as a whole
- * create share data structures, one per server:
- * use seqnum which is one higher than the old version
- * share hash chain has log(N) hashes, different for each server
- * signed data is the same for each server
- * now we have N shares and need homes for them
- * walk through peers
- * if share is not already present, allocate-and-set
- * otherwise, try to modify existing share:
- * send testv_and_writev operation to each one
- * testv says to accept share if their(seqnum+R) <= our(seqnum+R)
- * count how many servers wind up with which versions (histogram over R)
- * keep going until N servers have the same version, or we run out of servers
- * if any servers wound up with a different version, report error to
- application
- * if we ran out of servers, initiate recovery process (described below)
-
-=== Server Storage Protocol ===
-
-The storage servers will provide a mutable slot container which is oblivious
-to the details of the data being contained inside it. Each storage index
-refers to a "bucket", and each bucket has one or more shares inside it. (In a
-well-provisioned network, each bucket will have only one share). The bucket
-is stored as a directory, using the base32-encoded storage index as the
-directory name. Each share is stored in a single file, using the share number
-as the filename.
-
-The container holds space for a container magic number (for versioning), the
-write enabler, the nodeid which accepted the write enabler (used for share
-migration, described below), a small number of lease structures, the embedded
-data itself, and expansion space for additional lease structures.
-
- # offset size name
- 1 0 32 magic verstr "tahoe mutable container v1" plus binary
- 2 32 20 write enabler's nodeid
- 3 52 32 write enabler
- 4 84 8 data size (actual share data present) (a)
- 5 92 8 offset of (8) count of extra leases (after data)
- 6 100 368 four leases, 92 bytes each
- 0 4 ownerid (0 means "no lease here")
- 4 4 expiration timestamp
- 8 32 renewal token
- 40 32 cancel token
- 72 20 nodeid which accepted the tokens
- 7 468 (a) data
- 8 ?? 4 count of extra leases
- 9 ?? n*92 extra leases
-
-The "extra leases" field must be copied and rewritten each time the size of
-the enclosed data changes. The hope is that most buckets will have four or
-fewer leases and this extra copying will not usually be necessary.
-
-The (4) "data size" field contains the actual number of bytes of data present
-in field (7), such that a client request to read beyond 504+(a) will result
-in an error. This allows the client to (one day) read relative to the end of
-the file. The container size (that is, (8)-(7)) might be larger, especially
-if extra size was pre-allocated in anticipation of filling the container with
-a lot of data.
-
-The offset in (5) points at the *count* of extra leases, at (8). The actual
-leases (at (9)) begin 4 bytes later. If the container size changes, both (8)
-and (9) must be relocated by copying.
-
-The server will honor any write commands that provide the write token and do
-not exceed the server-wide storage size limitations. Read and write commands
-MUST be restricted to the 'data' portion of the container: the implementation
-of those commands MUST perform correct bounds-checking to make sure other
-portions of the container are inaccessible to the clients.
-
-The two methods provided by the storage server on these "MutableSlot" share
-objects are:
-
- * readv(ListOf(offset=int, length=int))
- * returns a list of bytestrings, of the various requested lengths
- * offset < 0 is interpreted relative to the end of the data
- * spans which hit the end of the data will return truncated data
-
- * testv_and_writev(write_enabler, test_vector, write_vector)
- * this is a test-and-set operation which performs the given tests and only
- applies the desired writes if all tests succeed. This is used to detect
- simultaneous writers, and to reduce the chance that an update will lose
- data recently written by some other party (written after the last time
- this slot was read).
- * test_vector=ListOf(TupleOf(offset, length, opcode, specimen))
- * the opcode is a string, from the set [gt, ge, eq, le, lt, ne]
- * each element of the test vector is read from the slot's data and
- compared against the specimen using the desired (in)equality. If all
- tests evaluate True, the write is performed
- * write_vector=ListOf(TupleOf(offset, newdata))
- * offset < 0 is not yet defined, it probably means relative to the
- end of the data, which probably means append, but we haven't nailed
- it down quite yet
- * write vectors are executed in order, which specifies the results of
- overlapping writes
- * return value:
- * error: OutOfSpace
- * error: something else (io error, out of memory, whatever)
- * (True, old_test_data): the write was accepted (test_vector passed)
- * (False, old_test_data): the write was rejected (test_vector failed)
- * both 'accepted' and 'rejected' return the old data that was used
- for the test_vector comparison. This can be used by the client
- to detect write collisions, including collisions for which the
- desired behavior was to overwrite the old version.
-
-In addition, the storage server provides several methods to access these
-share objects:
-
- * allocate_mutable_slot(storage_index, sharenums=SetOf(int))
- * returns DictOf(int, MutableSlot)
- * get_mutable_slot(storage_index)
- * returns DictOf(int, MutableSlot)
- * or raises KeyError
-
-We intend to add an interface which allows small slots to allocate-and-write
-in a single call, as well as do update or read in a single call. The goal is
-to allow a reasonably-sized dirnode to be created (or updated, or read) in
-just one round trip (to all N shareholders in parallel).
-
-==== migrating shares ====
-
-If a share must be migrated from one server to another, two values become
-invalid: the write enabler (since it was computed for the old server), and
-the lease renew/cancel tokens.
-
-Suppose that a slot was first created on nodeA, and was thus initialized with
-WE(nodeA) (= H(WEM+nodeA)). Later, for provisioning reasons, the share is
-moved from nodeA to nodeB.
-
-Readers may still be able to find the share in its new home, depending upon
-how many servers are present in the grid, where the new nodeid lands in the
-permuted index for this particular storage index, and how many servers the
-reading client is willing to contact.
-
-When a client attempts to write to this migrated share, it will get a "bad
-write enabler" error, since the WE it computes for nodeB will not match the
-WE(nodeA) that was embedded in the share. When this occurs, the "bad write
-enabler" message must include the old nodeid (e.g. nodeA) that was in the
-share.
-
-The client then computes H(nodeB+H(WEM+nodeA)), which is the same as
-H(nodeB+WE(nodeA)). The client sends this along with the new WE(nodeB), which
-is H(WEM+nodeB). Note that the client only sends WE(nodeB) to nodeB, never to
-anyone else. Also note that the client does not send a value to nodeB that
-would allow the node to impersonate the client to a third node: everything
-sent to nodeB will include something specific to nodeB in it.
-
-The server locally computes H(nodeB+WE(nodeA)), using its own node id and the
-old write enabler from the share. It compares this against the value supplied
-by the client. If they match, this serves as proof that the client was able
-to compute the old write enabler. The server then accepts the client's new
-WE(nodeB) and writes it into the container.
-
-This WE-fixup process requires an extra round trip, and requires the error
-message to include the old nodeid, but does not require any public key
-operations on either client or server.
-
-Migrating the leases will require a similar protocol. This protocol will be
-defined concretely at a later date.
-
-=== Code Details ===
-
-The MutableFileNode class is used to manipulate mutable files (as opposed to
-ImmutableFileNodes). These are initially generated with
-client.create_mutable_file(), and later recreated from URIs with
-client.create_node_from_uri(). Instances of this class will contain a URI and
-a reference to the client (for peer selection and connection).
-
-NOTE: this section is out of date. Please see src/allmydata/interfaces.py
-(the section on IMutableFilesystemNode) for more accurate information.
-
-The methods of MutableFileNode are:
-
- * download_to_data() -> [deferred] newdata, NotEnoughSharesError
- * if there are multiple retrieveable versions in the grid, get() returns
- the first version it can reconstruct, and silently ignores the others.
- In the future, a more advanced API will signal and provide access to
- the multiple heads.
- * update(newdata) -> OK, UncoordinatedWriteError, NotEnoughSharesError
- * overwrite(newdata) -> OK, UncoordinatedWriteError, NotEnoughSharesError
-
-download_to_data() causes a new retrieval to occur, pulling the current
-contents from the grid and returning them to the caller. At the same time,
-this call caches information about the current version of the file. This
-information will be used in a subsequent call to update(), and if another
-change has occured between the two, this information will be out of date,
-triggering the UncoordinatedWriteError.
-
-update() is therefore intended to be used just after a download_to_data(), in
-the following pattern:
-
- d = mfn.download_to_data()
- d.addCallback(apply_delta)
- d.addCallback(mfn.update)
-
-If the update() call raises UCW, then the application can simply return an
-error to the user ("you violated the Prime Coordination Directive"), and they
-can try again later. Alternatively, the application can attempt to retry on
-its own. To accomplish this, the app needs to pause, download the new
-(post-collision and post-recovery) form of the file, reapply their delta,
-then submit the update request again. A randomized pause is necessary to
-reduce the chances of colliding a second time with another client that is
-doing exactly the same thing:
-
- d = mfn.download_to_data()
- d.addCallback(apply_delta)
- d.addCallback(mfn.update)
- def _retry(f):
- f.trap(UncoordinatedWriteError)
- d1 = pause(random.uniform(5, 20))
- d1.addCallback(lambda res: mfn.download_to_data())
- d1.addCallback(apply_delta)
- d1.addCallback(mfn.update)
- return d1
- d.addErrback(_retry)
-
-Enthusiastic applications can retry multiple times, using a randomized
-exponential backoff between each. A particularly enthusiastic application can
-retry forever, but such apps are encouraged to provide a means to the user of
-giving up after a while.
-
-UCW does not mean that the update was not applied, so it is also a good idea
-to skip the retry-update step if the delta was already applied:
-
- d = mfn.download_to_data()
- d.addCallback(apply_delta)
- d.addCallback(mfn.update)
- def _retry(f):
- f.trap(UncoordinatedWriteError)
- d1 = pause(random.uniform(5, 20))
- d1.addCallback(lambda res: mfn.download_to_data())
- def _maybe_apply_delta(contents):
- new_contents = apply_delta(contents)
- if new_contents != contents:
- return mfn.update(new_contents)
- d1.addCallback(_maybe_apply_delta)
- return d1
- d.addErrback(_retry)
-
-update() is the right interface to use for delta-application situations, like
-directory nodes (in which apply_delta might be adding or removing child
-entries from a serialized table).
-
-Note that any uncoordinated write has the potential to lose data. We must do
-more analysis to be sure, but it appears that two clients who write to the
-same mutable file at the same time (even if both eventually retry) will, with
-high probability, result in one client observing UCW and the other silently
-losing their changes. It is also possible for both clients to observe UCW.
-The moral of the story is that the Prime Coordination Directive is there for
-a reason, and that recovery/UCW/retry is not a subsitute for write
-coordination.
-
-overwrite() tells the client to ignore this cached version information, and
-to unconditionally replace the mutable file's contents with the new data.
-This should not be used in delta application, but rather in situations where
-you want to replace the file's contents with completely unrelated ones. When
-raw files are uploaded into a mutable slot through the tahoe webapi (using
-POST and the ?mutable=true argument), they are put in place with overwrite().
-
-
-
-The peer-selection and data-structure manipulation (and signing/verification)
-steps will be implemented in a separate class in allmydata/mutable.py .
-
-=== SMDF Slot Format ===
-
-This SMDF data lives inside a server-side MutableSlot container. The server
-is oblivious to this format.
-
-This data is tightly packed. In particular, the share data is defined to run
-all the way to the beginning of the encrypted private key (the encprivkey
-offset is used both to terminate the share data and to begin the encprivkey).
-
- # offset size name
- 1 0 1 version byte, \x00 for this format
- 2 1 8 sequence number. 2^64-1 must be handled specially, TBD
- 3 9 32 "R" (root of share hash Merkle tree)
- 4 41 16 IV (share data is AES(H(readkey+IV)) )
- 5 57 18 encoding parameters:
- 57 1 k
- 58 1 N
- 59 8 segment size
- 67 8 data length (of original plaintext)
- 6 75 32 offset table:
- 75 4 (8) signature
- 79 4 (9) share hash chain
- 83 4 (10) block hash tree
- 87 4 (11) share data
- 91 8 (12) encrypted private key
- 99 8 (13) EOF
- 7 107 436ish verification key (2048 RSA key)
- 8 543ish 256ish signature=RSAenc(sigkey, H(version+seqnum+r+IV+encparm))
- 9 799ish (a) share hash chain, encoded as:
- "".join([pack(">H32s", shnum, hash)
- for (shnum,hash) in needed_hashes])
-10 (927ish) (b) block hash tree, encoded as:
- "".join([pack(">32s",hash) for hash in block_hash_tree])
-11 (935ish) LEN share data (no gap between this and encprivkey)
-12 ?? 1216ish encrypted private key= AESenc(write-key, RSA-key)
-13 ?? -- EOF
-
-(a) The share hash chain contains ceil(log(N)) hashes, each 32 bytes long.
- This is the set of hashes necessary to validate this share's leaf in the
- share Merkle tree. For N=10, this is 4 hashes, i.e. 128 bytes.
-(b) The block hash tree contains ceil(length/segsize) hashes, each 32 bytes
- long. This is the set of hashes necessary to validate any given block of
- share data up to the per-share root "r". Each "r" is a leaf of the share
- has tree (with root "R"), from which a minimal subset of hashes is put in
- the share hash chain in (8).
-
-=== Recovery ===
-
-The first line of defense against damage caused by colliding writes is the
-Prime Coordination Directive: "Don't Do That".
-
-The second line of defense is to keep "S" (the number of competing versions)
-lower than N/k. If this holds true, at least one competing version will have
-k shares and thus be recoverable. Note that server unavailability counts
-against us here: the old version stored on the unavailable server must be
-included in the value of S.
-
-The third line of defense is our use of testv_and_writev() (described below),
-which increases the convergence of simultaneous writes: one of the writers
-will be favored (the one with the highest "R"), and that version is more
-likely to be accepted than the others. This defense is least effective in the
-pathological situation where S simultaneous writers are active, the one with
-the lowest "R" writes to N-k+1 of the shares and then dies, then the one with
-the next-lowest "R" writes to N-2k+1 of the shares and dies, etc, until the
-one with the highest "R" writes to k-1 shares and dies. Any other sequencing
-will allow the highest "R" to write to at least k shares and establish a new
-revision.
-
-The fourth line of defense is the fact that each client keeps writing until
-at least one version has N shares. This uses additional servers, if
-necessary, to make sure that either the client's version or some
-newer/overriding version is highly available.
-
-The fifth line of defense is the recovery algorithm, which seeks to make sure
-that at least *one* version is highly available, even if that version is
-somebody else's.
-
-The write-shares-to-peers algorithm is as follows:
-
- * permute peers according to storage index
- * walk through peers, trying to assign one share per peer
- * for each peer:
- * send testv_and_writev, using "old(seqnum+R) <= our(seqnum+R)" as the test
- * this means that we will overwrite any old versions, and we will
- overwrite simultaenous writers of the same version if our R is higher.
- We will not overwrite writers using a higher seqnum.
- * record the version that each share winds up with. If the write was
- accepted, this is our own version. If it was rejected, read the
- old_test_data to find out what version was retained.
- * if old_test_data indicates the seqnum was equal or greater than our
- own, mark the "Simultanous Writes Detected" flag, which will eventually
- result in an error being reported to the writer (in their close() call).
- * build a histogram of "R" values
- * repeat until the histogram indicate that some version (possibly ours)
- has N shares. Use new servers if necessary.
- * If we run out of servers:
- * if there are at least shares-of-happiness of any one version, we're
- happy, so return. (the close() might still get an error)
- * not happy, need to reinforce something, goto RECOVERY
-
-RECOVERY:
- * read all shares, count the versions, identify the recoverable ones,
- discard the unrecoverable ones.
- * sort versions: locate max(seqnums), put all versions with that seqnum
- in the list, sort by number of outstanding shares. Then put our own
- version. (TODO: put versions with seqnum <max but >us ahead of us?).
- * for each version:
- * attempt to recover that version
- * if not possible, remove it from the list, go to next one
- * if recovered, start at beginning of peer list, push that version,
- continue until N shares are placed
- * if pushing our own version, bump up the seqnum to one higher than
- the max seqnum we saw
- * if we run out of servers:
- * schedule retry and exponential backoff to repeat RECOVERY
- * admit defeat after some period? presumeably the client will be shut down
- eventually, maybe keep trying (once per hour?) until then.
-
-
-
-
-== Medium Distributed Mutable Files ==
-
-These are just like the SDMF case, but:
-
- * we actually take advantage of the Merkle hash tree over the blocks, by
- reading a single segment of data at a time (and its necessary hashes), to
- reduce the read-time alacrity
- * we allow arbitrary writes to the file (i.e. seek() is provided, and
- O_TRUNC is no longer required)
- * we write more code on the client side (in the MutableFileNode class), to
- first read each segment that a write must modify. This looks exactly like
- the way a normal filesystem uses a block device, or how a CPU must perform
- a cache-line fill before modifying a single word.
- * we might implement some sort of copy-based atomic update server call,
- to allow multiple writev() calls to appear atomic to any readers.
-
-MDMF slots provide fairly efficient in-place edits of very large files (a few
-GB). Appending data is also fairly efficient, although each time a power of 2
-boundary is crossed, the entire file must effectively be re-uploaded (because
-the size of the block hash tree changes), so if the filesize is known in
-advance, that space ought to be pre-allocated (by leaving extra space between
-the block hash tree and the actual data).
-
-MDMF1 uses the Merkle tree to enable low-alacrity random-access reads. MDMF2
-adds cache-line reads to allow random-access writes.
-
-== Large Distributed Mutable Files ==
-
-LDMF slots use a fundamentally different way to store the file, inspired by
-Mercurial's "revlog" format. They enable very efficient insert/remove/replace
-editing of arbitrary spans. Multiple versions of the file can be retained, in
-a revision graph that can have multiple heads. Each revision can be
-referenced by a cryptographic identifier. There are two forms of the URI, one
-that means "most recent version", and a longer one that points to a specific
-revision.
-
-Metadata can be attached to the revisions, like timestamps, to enable rolling
-back an entire tree to a specific point in history.
-
-LDMF1 provides deltas but tries to avoid dealing with multiple heads. LDMF2
-provides explicit support for revision identifiers and branching.
-
-== TODO ==
-
-improve allocate-and-write or get-writer-buckets API to allow one-call (or
-maybe two-call) updates. The challenge is in figuring out which shares are on
-which machines. First cut will have lots of round trips.
-
-(eventually) define behavior when seqnum wraps. At the very least make sure
-it can't cause a security problem. "the slot is worn out" is acceptable.
-
-(eventually) define share-migration lease update protocol. Including the
-nodeid who accepted the lease is useful, we can use the same protocol as we
-do for updating the write enabler. However we need to know which lease to
-update.. maybe send back a list of all old nodeids that we find, then try all
-of them when we accept the update?
-
- We now do this in a specially-formatted IndexError exception:
- "UNABLE to renew non-existent lease. I have leases accepted by " +
- "nodeids: '12345','abcde','44221' ."
-
-confirm that a repairer can regenerate shares without the private key. Hmm,
-without the write-enabler they won't be able to write those shares to the
-servers.. although they could add immutable new shares to new servers.
--- /dev/null
+<?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://web.resource.org/cc/"
+ 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="744.09448819"
+ height="1052.3622047"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.45.1"
+ sodipodi:docbase="/home/warner/trees/tahoe/docs"
+ sodipodi:docname="chk-hashes.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs4">
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Mend"
+ style="overflow:visible;">
+ <path
+ id="path3237"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+ transform="scale(0.4) rotate(180) translate(10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Lend"
+ style="overflow:visible;">
+ <path
+ id="path3391"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+ transform="scale(0.8) rotate(180) translate(12.5,0)" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.58344932"
+ inkscape:cx="372.04724"
+ inkscape:cy="526.18109"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ inkscape:window-width="791"
+ inkscape:window-height="827"
+ inkscape:window-x="591"
+ inkscape:window-y="150" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g2168"
+ transform="translate(-8.75,0)">
+ <rect
+ y="80.555412"
+ x="53.132294"
+ height="135.40164"
+ width="197.10367"
+ id="rect2160"
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text2162"
+ y="108.97614"
+ x="151.88493"
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="108.97614"
+ x="151.88493"
+ id="tspan2164"
+ sodipodi:role="line">data</tspan><tspan
+ id="tspan2166"
+ y="132.97614"
+ x="151.88493"
+ sodipodi:role="line">(plaintext)</tspan></text>
+ </g>
+ <g
+ id="g2190"
+ transform="translate(-0.25,0)">
+ <rect
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect2178"
+ width="197.10367"
+ height="135.40164"
+ x="44.632294"
+ y="324.55542" />
+ <text
+ xml:space="preserve"
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="143.38493"
+ y="352.97614"
+ id="text2180"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan2182"
+ x="143.38493"
+ y="352.97614">data</tspan><tspan
+ sodipodi:role="line"
+ x="143.38493"
+ y="376.97614"
+ id="tspan2184">(crypttext)</tspan></text>
+ </g>
+ <rect
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect2198"
+ width="197.10367"
+ height="135.40164"
+ x="44.382294"
+ y="583.55542" />
+ <text
+ xml:space="preserve"
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="142.68532"
+ y="611.97614"
+ id="text2200"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ x="142.68532"
+ y="611.97614"
+ id="tspan2204">shares</tspan></text>
+ <g
+ id="g3193"
+ transform="translate(-10.413708,29.158381)">
+ <path
+ transform="matrix(0.6292707,0,0,0.6292707,151.39519,41.751672)"
+ d="M 438.76991 133.6877 A 20.567339 20.567339 0 1 1 397.63524,133.6877 A 20.567339 20.567339 0 1 1 438.76991 133.6877 z"
+ sodipodi:ry="20.567339"
+ sodipodi:rx="20.567339"
+ sodipodi:cy="133.6877"
+ sodipodi:cx="418.20258"
+ id="path2212"
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.58914125;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.58914125;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path3185"
+ sodipodi:cx="418.20258"
+ sodipodi:cy="133.6877"
+ sodipodi:rx="20.567339"
+ sodipodi:ry="20.567339"
+ d="M 438.76991 133.6877 A 20.567339 20.567339 0 1 1 397.63524,133.6877 A 20.567339 20.567339 0 1 1 438.76991 133.6877 z"
+ transform="matrix(0.6292707,0,0,0.6292707,125.3609,72.992795)" />
+ <path
+ transform="matrix(0.6292707,0,0,0.6292707,177.42944,72.992795)"
+ d="M 438.76991 133.6877 A 20.567339 20.567339 0 1 1 397.63524,133.6877 A 20.567339 20.567339 0 1 1 438.76991 133.6877 z"
+ sodipodi:ry="20.567339"
+ sodipodi:rx="20.567339"
+ sodipodi:cy="133.6877"
+ sodipodi:cx="418.20258"
+ id="path3187"
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.58914125;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ id="path3189"
+ d="M 396.76226,145.32825 L 407.17597,134.91454"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ id="path3191"
+ d="M 433.21024,147.41099 L 423.8379,134.91454"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <g
+ id="g3200"
+ transform="translate(-9.3723369,269.71503)">
+ <path
+ sodipodi:type="arc"
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.58914125;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path3202"
+ sodipodi:cx="418.20258"
+ sodipodi:cy="133.6877"
+ sodipodi:rx="20.567339"
+ sodipodi:ry="20.567339"
+ d="M 438.76991 133.6877 A 20.567339 20.567339 0 1 1 397.63524,133.6877 A 20.567339 20.567339 0 1 1 438.76991 133.6877 z"
+ transform="matrix(0.6292707,0,0,0.6292707,151.39519,41.751672)" />
+ <path
+ transform="matrix(0.6292707,0,0,0.6292707,125.3609,72.992795)"
+ d="M 438.76991 133.6877 A 20.567339 20.567339 0 1 1 397.63524,133.6877 A 20.567339 20.567339 0 1 1 438.76991 133.6877 z"
+ sodipodi:ry="20.567339"
+ sodipodi:rx="20.567339"
+ sodipodi:cy="133.6877"
+ sodipodi:cx="418.20258"
+ id="path3204"
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.58914125;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.58914125;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path3206"
+ sodipodi:cx="418.20258"
+ sodipodi:cy="133.6877"
+ sodipodi:rx="20.567339"
+ sodipodi:ry="20.567339"
+ d="M 438.76991 133.6877 A 20.567339 20.567339 0 1 1 397.63524,133.6877 A 20.567339 20.567339 0 1 1 438.76991 133.6877 z"
+ transform="matrix(0.6292707,0,0,0.6292707,177.42944,72.992795)" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 396.76226,145.32825 L 407.17597,134.91454"
+ id="path3208" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 433.21024,147.41099 L 423.8379,134.91454"
+ id="path3210" />
+ </g>
+ <g
+ transform="translate(-6.2482246,538.38869)"
+ id="g3212">
+ <path
+ transform="matrix(0.6292707,0,0,0.6292707,151.39519,41.751672)"
+ d="M 438.76991 133.6877 A 20.567339 20.567339 0 1 1 397.63524,133.6877 A 20.567339 20.567339 0 1 1 438.76991 133.6877 z"
+ sodipodi:ry="20.567339"
+ sodipodi:rx="20.567339"
+ sodipodi:cy="133.6877"
+ sodipodi:cx="418.20258"
+ id="path3214"
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.58914125;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.58914125;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path3216"
+ sodipodi:cx="418.20258"
+ sodipodi:cy="133.6877"
+ sodipodi:rx="20.567339"
+ sodipodi:ry="20.567339"
+ d="M 438.76991 133.6877 A 20.567339 20.567339 0 1 1 397.63524,133.6877 A 20.567339 20.567339 0 1 1 438.76991 133.6877 z"
+ transform="matrix(0.6292707,0,0,0.6292707,125.3609,72.992795)" />
+ <path
+ transform="matrix(0.6292707,0,0,0.6292707,177.42944,72.992795)"
+ d="M 438.76991 133.6877 A 20.567339 20.567339 0 1 1 397.63524,133.6877 A 20.567339 20.567339 0 1 1 438.76991 133.6877 z"
+ sodipodi:ry="20.567339"
+ sodipodi:rx="20.567339"
+ sodipodi:cy="133.6877"
+ sodipodi:cx="418.20258"
+ id="path3218"
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.58914125;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ id="path3220"
+ d="M 396.76226,145.32825 L 407.17597,134.91454"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ id="path3222"
+ d="M 433.21024,147.41099 L 423.8379,134.91454"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="399.88635"
+ y="110.96302"
+ id="text3224"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3226"
+ x="399.88635"
+ y="110.96302">plaintext</tspan><tspan
+ sodipodi:role="line"
+ x="399.88635"
+ y="130.96302"
+ id="tspan3228">hash tree</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="400.92773"
+ y="350.4783"
+ id="text3230"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3232"
+ x="400.92773"
+ y="350.4783">crypttext</tspan><tspan
+ sodipodi:role="line"
+ x="400.92773"
+ y="370.4783"
+ id="tspan3234">hash tree</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="405.09323"
+ y="618.1106"
+ id="text3236"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3238"
+ x="405.09323"
+ y="618.1106">share</tspan><tspan
+ sodipodi:role="line"
+ x="405.09323"
+ y="638.1106"
+ id="tspan3240">hash tree</tspan></text>
+ <rect
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.05825377;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect3242"
+ width="207.32907"
+ height="421.5722"
+ x="527.92419"
+ y="161.13995" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="536.46478"
+ y="183.39211"
+ id="text3244"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3246"
+ x="536.46478"
+ y="183.39211">URI Extension Block</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="536.95264"
+ y="245.09413"
+ id="text3248"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3250"
+ x="536.95264"
+ y="245.09413">plaintext root</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="536.95264"
+ y="281.08698"
+ id="text3252"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3254"
+ x="536.95264"
+ y="281.08698">plaintext (flat) hash</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="540.59265"
+ y="435.34201"
+ id="text3256"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3258"
+ x="540.59265"
+ y="435.34201">crypttext root</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="540.59265"
+ y="483.33246"
+ id="text3260"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3262"
+ x="540.59265"
+ y="483.33246">crypttext (flat) hash</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="539.89264"
+ y="558.74603"
+ id="text3264"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3266"
+ x="539.89264"
+ y="558.74603">share root</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#8a02b8;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;fill-opacity:1"
+ d="M 239.95229,183.39211 L 363.35632,183.39211"
+ id="path3383" />
+ <path
+ id="path3583"
+ d="M 239.95229,425.05834 L 363.35632,425.05834"
+ style="fill:none;fill-rule:evenodd;stroke:#8a02b8;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;fill-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#8a02b8;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;fill-opacity:1"
+ d="M 239.95229,692.43375 L 363.35632,692.43375"
+ id="path3585" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#8a02b8;stroke-width:1.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 417.58968,150.5351 C 470.69959,151.57647 472.62807,183.93923 479.03055,202.60364 C 487.14356,226.25457 499.85797,233.58442 529.01635,241.13436"
+ id="path3589"
+ sodipodi:nodetypes="csz" />
+ <path
+ sodipodi:nodetypes="csz"
+ id="path3591"
+ d="M 421.75516,391.09175 C 449.87218,392.13312 454.33789,400.8898 470.69958,411.91917 C 496.5159,429.32187 494.65112,422.07253 523.8095,429.62247"
+ style="fill:none;fill-opacity:1;stroke:#8a02b8;stroke-width:1.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#8a02b8;stroke-width:1.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 420.71379,662.88952 C 420.71379,662.88952 471.01868,647.53267 473.30302,607.17618 C 475.6461,565.78169 496.083,554.97747 525.89224,551.46284"
+ id="path3595"
+ sodipodi:nodetypes="czz" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#8a02b8;stroke-width:1.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 241.59802,201.56227 C 288.98039,203.12433 310.58883,210.67426 381.1417,228.63791 C 451.69457,246.60156 477.72883,273.67719 523.80949,273.41685"
+ id="path3599"
+ sodipodi:nodetypes="czz" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#8a02b8;stroke-width:1.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 243.68076,448.36714 C 296.26998,448.88782 323.60597,457.47913 393.63815,465.02907 C 463.67033,472.57901 487.62186,479.8686 523.80949,478.56689"
+ id="path3601"
+ sodipodi:nodetypes="czz" />
+ <rect
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect3603"
+ width="611.87836"
+ height="109.69247"
+ x="54.846237"
+ y="807.26807" />
+ <text
+ xml:space="preserve"
+ style="font-size:36px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="329.71826"
+ y="910.10474"
+ id="text3605"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3607"
+ x="329.71826"
+ y="910.10474">URI</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="159.39687"
+ y="841.54694"
+ id="text3609"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3611"
+ x="159.39687"
+ y="841.54694">encryption</tspan><tspan
+ sodipodi:role="line"
+ x="159.39687"
+ y="861.54694"
+ id="tspan3613">key</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="359.92844"
+ y="842.72693"
+ id="text3615"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3617"
+ x="359.92844"
+ y="842.72693">storage</tspan><tspan
+ sodipodi:role="line"
+ x="359.92844"
+ y="862.72693"
+ id="tspan3619">index</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="570.74371"
+ y="844.42694"
+ id="text3621"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3623"
+ x="570.74371"
+ y="844.42694">UEB</tspan><tspan
+ sodipodi:role="line"
+ x="570.74371"
+ y="864.42694"
+ id="tspan3625">hash</tspan></text>
+ <path
+ style="fill:none;fill-opacity:1;stroke:#1bcc03;stroke-width:1.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:9,9;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 267.37541,557.0321 L 315.36587,66.843852 L 740.4242,73.699632 L 740.4242,752.42182 L 418.20256,752.42182 L 416.48862,713.00109 L 356.50054,646.15724 L 310.22403,661.58274 L 190.24789,659.8688 L 191.96183,557.0321 L 267.37541,557.0321 z "
+ id="path3627"
+ sodipodi:nodetypes="ccccccccccc" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#1bcc03;stroke-width:2;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 358.21449,824.40751 C 362.49935,783.27283 382.20972,758.84911 414.77467,740.42421"
+ id="path3629"
+ sodipodi:nodetypes="cz" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#8a02b8;stroke-width:2;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 629.01779,582.74128 C 623.87595,661.15426 575.88549,723.71325 574.17154,814.12384"
+ id="path3631"
+ sodipodi:nodetypes="cz" />
+ <g
+ id="g3434">
+ <path
+ transform="translate(1.7139449,-5.1418348)"
+ d="M 174.82238 278.51605 A 36.849815 23.138256 0 1 1 101.12275,278.51605 A 36.849815 23.138256 0 1 1 174.82238 278.51605 z"
+ sodipodi:ry="23.138256"
+ sodipodi:rx="36.849815"
+ sodipodi:cy="278.51605"
+ sodipodi:cx="137.97256"
+ id="path3635"
+ style="fill:#ffffff;fill-opacity:1;stroke:#a10101;stroke-width:2;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3637"
+ y="281.24622"
+ x="115.93739"
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#a10101;fill-opacity:1;stroke:#a10101;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="281.24622"
+ x="115.93739"
+ id="tspan3639"
+ sodipodi:role="line">AES</tspan></text>
+ </g>
+ <path
+ style="fill:none;fill-opacity:1;stroke:#a10101;stroke-width:2;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
+ d="M 133.6877,212.52917 L 135.40165,250.23596"
+ id="path3646" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#a10101;stroke-width:2;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
+ d="M 138.82954,296.51247 L 138.82954,323.93559"
+ id="path3648" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#a10101;stroke-width:2;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 147.39926,817.55173 C 123.40403,754.13577 56.155146,767.27832 30.851008,736.99632 C 4.7133492,705.71682 5.5877376,315.58243 32.564954,281.08697 C 58.702614,247.66504 65.129907,260.94812 101.12275,272.51724"
+ id="path3650"
+ sodipodi:nodetypes="czzz" />
+ <g
+ id="g3426">
+ <path
+ transform="translate(-1.7139449,243.38018)"
+ sodipodi:type="arc"
+ style="fill:#ffffff;fill-opacity:1;stroke:#a10101;stroke-width:2;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path3219"
+ sodipodi:cx="137.97256"
+ sodipodi:cy="278.51605"
+ sodipodi:rx="36.849815"
+ sodipodi:ry="23.138256"
+ d="M 174.82238 278.51605 A 36.849815 23.138256 0 1 1 101.12275,278.51605 A 36.849815 23.138256 0 1 1 174.82238 278.51605 z" />
+ <text
+ xml:space="preserve"
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#a10101;fill-opacity:1;stroke:#a10101;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="112.5095"
+ y="529.76825"
+ id="text3221"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3223"
+ x="112.5095"
+ y="529.76825">FEC</tspan></text>
+ </g>
+ <path
+ id="path3445"
+ d="M 195.38972,855.25852 L 318.79375,855.25852"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#8a02b8;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path3447"
+ d="M 133.68771,457.62329 L 133.68771,498.75797"
+ style="fill:none;fill-opacity:1;stroke:#a10101;stroke-width:2;stroke-linecap:butt;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#a10101;stroke-width:2;stroke-linecap:butt;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 133.68771,546.74843 L 133.68771,582.74127"
+ id="path3449"
+ sodipodi:nodetypes="cc" />
+ <path
+ id="path3451"
+ d="M 99.408806,943.93737 L 147.39926,943.93737"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#8a02b8;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-size:28px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="65.129906"
+ y="953.42938"
+ id="text3453"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3455"
+ x="65.129906"
+ y="953.42938">A</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:28px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="164.53871"
+ y="952.95337"
+ id="text3457"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ x="164.53871"
+ y="952.95337"
+ id="tspan3461">B :</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="217.67101"
+ y="952.95337"
+ id="text3465"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3467"
+ x="217.67101"
+ y="952.95337">B is derived from A by hashing, therefore B validates A</tspan></text>
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#a10101;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 99.408806,969.64654 L 147.39926,969.64654"
+ id="path3469" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3471"
+ y="979.13855"
+ x="65.129906"
+ style="font-size:28px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="979.13855"
+ x="65.129906"
+ id="tspan3473"
+ sodipodi:role="line">A</tspan></text>
+ <text
+ sodipodi:linespacing="100%"
+ id="text3475"
+ y="978.66254"
+ x="164.53871"
+ style="font-size:28px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ id="tspan3477"
+ y="978.66254"
+ x="164.53871"
+ sodipodi:role="line">B :</tspan></text>
+ <text
+ sodipodi:linespacing="100%"
+ id="text3479"
+ y="978.66254"
+ x="217.67101"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="978.66254"
+ x="217.67101"
+ id="tspan3481"
+ sodipodi:role="line">B is derived from A by encryption or erasure coding</tspan></text>
+ <path
+ id="path3483"
+ d="M 99.408806,997.06966 L 147.39926,997.06966"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1bcc03;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-size:28px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="65.129906"
+ y="1006.5616"
+ id="text3485"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3487"
+ x="65.129906"
+ y="1006.5616">A</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:28px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="164.53871"
+ y="1006.0856"
+ id="text3489"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ x="164.53871"
+ y="1006.0856"
+ id="tspan3491">B :</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="217.67101"
+ y="1006.0856"
+ id="text3493"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3495"
+ x="217.67101"
+ y="1006.0856">A is used as an index to retrieve data B</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:32px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#1bcc03;fill-opacity:1;stroke:#1bcc03;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="625.5899"
+ y="740.42419"
+ id="text3497"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3499"
+ x="625.5899"
+ y="740.42419">SHARE</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:32px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="249.20799"
+ y="30.851007"
+ id="text3501"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3503"
+ x="249.20799"
+ y="30.851007">CHK File Hashes</tspan></text>
+ </g>
+</svg>
--- /dev/null
+SOURCES = CHK-hashes.svg file-encoding1.svg file-encoding2.svg \
+ file-encoding3.svg file-encoding4.svg file-encoding5.svg \
+ file-encoding6.svg
+
+PNGS = $(patsubst %.svg,%.png,$(SOURCES))
+EPSS = $(patsubst %.svg,%.eps,$(SOURCES))
+
+.PHONY: images-png images-eps
+all: $(PNGS) $(EPSS)
+images-png: $(PNGS)
+images-eps: $(EPSS)
+
+%.png: %.svg
+ inkscape -b white -d 90 -D --export-png $@ $<
+%.eps: %.svg
+ inkscape --export-eps $@ $<
+
+clean:
+ rm -f *.png *.eps
--- /dev/null
+
+"URI Extension Block"
+
+This block is a serialized dictionary with string keys and string values
+(some of which represent numbers, some of which are SHA-256 hashes). All
+buckets hold an identical copy. The hash of the serialized data is kept in
+the URI.
+
+The download process must obtain a valid copy of this data before any
+decoding can take place. The download process must also obtain other data
+before incremental validation can be performed. Full-file validation (for
+clients who do not wish to do incremental validation) can be performed solely
+with the data from this block.
+
+At the moment, this data block contains the following keys (and an estimate
+on their sizes):
+
+ size 5
+ segment_size 7
+ num_segments 2
+ needed_shares 2
+ total_shares 3
+
+ codec_name 3
+ codec_params 5+1+2+1+3=12
+ tail_codec_params 12
+
+ share_root_hash 32 (binary) or 52 (base32-encoded) each
+ plaintext_hash
+ plaintext_root_hash
+ crypttext_hash
+ crypttext_root_hash
+
+Some pieces are needed elsewhere (size should be visible without pulling the
+block, the Tahoe3 algorithm needs total_shares to find the right peers, all
+peer selection algorithms need needed_shares to ask a minimal set of peers).
+Some pieces are arguably redundant but are convenient to have present
+(test_encode.py makes use of num_segments).
+
+The rule for this data block is that it should be a constant size for all
+files, regardless of file size. Therefore hash trees (which have a size that
+depends linearly upon the number of segments) are stored elsewhere in the
+bucket, with only the hash tree root stored in this data block.
+
+This block will be serialized as follows:
+
+ assert that all keys match ^[a-zA-z_\-]+$
+ sort all the keys lexicographically
+ for k in keys:
+ write("%s:" % k)
+ write(netstring(data[k]))
+
+
+Serialized size:
+
+ dense binary (but decimal) packing: 160+46=206
+ including 'key:' (185) and netstring (6*3+7*4=46) on values: 231
+ including 'key:%d\n' (185+13=198) and printable values (46+5*52=306)=504
+
+We'll go with the 231-sized block, and provide a tool to dump it as text if
+we really want one.
--- /dev/null
+
+= Tahoe Directory Nodes =
+
+As explained in the architecture docs, Tahoe can be roughly viewed as a
+collection of three layers. The lowest layer is the distributed filestore, or
+DHT: it provides operations that accept files and upload them to the mesh,
+creating a URI in the process which securely references the file's contents.
+The middle layer is the filesystem, creating a structure of directories and
+filenames resembling the traditional unix/windows filesystems. The top layer
+is the application layer, which uses the lower layers to provide useful
+services to users, like a backup application, or a way to share files with
+friends.
+
+This document examines the middle layer, the "filesystem".
+
+== DHT Primitives ==
+
+In the lowest layer (DHT), there are two operations that reference immutable
+data (which we refer to as "CHK URIs" or "CHK read-capabilities" or "CHK
+read-caps"). One puts data into the grid (but only if it doesn't exist
+already), the other retrieves it:
+
+ chk_uri = put(data)
+ data = get(chk_uri)
+
+We also have three operations which reference mutable data (which we refer to
+as "mutable slots", or "mutable write-caps and read-caps", or sometimes "SSK
+slots"). One creates a slot with some initial contents, a second replaces the
+contents of a pre-existing slot, and the third retrieves the contents:
+
+ mutable_uri = create(initial_data)
+ replace(mutable_uri, new_data)
+ data = get(mutable_uri)
+
+== Filesystem Goals ==
+
+The main goal for the middle (filesystem) layer is to give users a way to
+organize the data that they have uploaded into the mesh. The traditional way
+to do this in computer filesystems is to put this data into files, give those
+files names, and collect these names into directories.
+
+Each directory is a series of name-value pairs, which maps "child name" to an
+object of some kind. Those child objects might be files, or they might be
+other directories.
+
+The directory structure is therefore a directed graph of nodes, in which each
+node might be a directory node or a file node. All file nodes are terminal
+nodes.
+
+== Dirnode Goals ==
+
+What properties might be desirable for these directory nodes? In no
+particular order:
+
+ 1: functional. Code which does not work doesn't count.
+ 2: easy to document, explain, and understand
+ 3: confidential: it should not be possible for others to see the contents of
+ a directory
+ 4: integrity: it should not be possible for others to modify the contents
+ of a directory
+ 5: available: directories should survive host failure, just like files do
+ 6: efficient: in storage, communication bandwidth, number of round-trips
+ 7: easy to delegate individual directories in a flexible way
+ 8: updateness: everybody looking at a directory should see the same contents
+ 9: monotonicity: everybody looking at a directory should see the same
+ sequence of updates
+
+Some of these goals are mutually exclusive. For example, availability and
+consistency are opposing, so it is not possible to achieve #5 and #8 at the
+same time. Moreover, it takes a more complex architecture to get close to the
+available-and-consistent ideal, so #2/#6 is in opposition to #5/#8.
+
+Tahoe-0.7.0 introduced distributed mutable files, which use public key
+cryptography for integrity, and erasure coding for availability. These
+achieve roughly the same properties as immutable CHK files, but their
+contents can be replaced without changing their identity. Dirnodes are then
+just a special way of interpreting the contents of a specific mutable file.
+Earlier releases used a "vdrive server": this server was abolished in the
+0.7.0 release.
+
+For details of how mutable files work, please see "mutable.txt" in this
+directory.
+
+For the current 0.7.0 release, we achieve most of our desired properties. The
+integrity and availability of dirnodes is equivalent to that of regular
+(immutable) files, with the exception that there are more simultaneous-update
+failure modes for mutable slots. Delegation is quite strong: you can give
+read-write or read-only access to any subtree, and the data format used for
+dirnodes is such that read-only access is transitive: i.e. if you grant Bob
+read-only access to a parent directory, then Bob will get read-only access
+(and *not* read-write access) to its children.
+
+Relative to the previous "vdrive-server" based scheme, the current
+distributed dirnode approach gives better availability, but cannot guarantee
+updateness quite as well, and requires far more network traffic for each
+retrieval and update. Mutable files are somewhat less available than
+immutable files, simply because of the increased number of combinations
+(shares of an immutable file are either present or not, whereas there are
+multiple versions of each mutable file, and you might have some shares of
+version 1 and other shares of version 2). In extreme cases of simultaneous
+update, mutable files might suffer from non-monotonicity.
+
+
+== Dirnode secret values ==
+
+As mentioned before, dirnodes are simply a special way to interpret the
+contents of a mutable file, so the secret keys and capability strings
+described in "mutable.txt" are all the same. Each dirnode contains an RSA
+public/private keypair, and the holder of the "write capability" will be able
+to retrieve the private key (as well as the AES encryption key used for the
+data itself). The holder of the "read capability" will be able to obtain the
+public key and the AES data key, but not the RSA private key needed to modify
+the data.
+
+The "write capability" for a dirnode grants read-write access to its
+contents. This is expressed on concrete form as the "dirnode write cap": a
+printable string which contains the necessary secrets to grant this access.
+Likewise, the "read capability" grants read-only access to a dirnode, and can
+be represented by a "dirnode read cap" string.
+
+For example,
+URI:DIR2:swdi8ge1s7qko45d3ckkyw1aac%3Aar8r5j99a4mezdojejmsfp4fj1zeky9gjigyrid4urxdimego68o
+is a write-capability URI, while
+URI:DIR2-RO:buxjqykt637u61nnmjg7s8zkny:ar8r5j99a4mezdojejmsfp4fj1zeky9gjigyrid4urxdimego68o
+is a read-capability URI, both for the same dirnode.
+
+
+== Dirnode storage format ==
+
+Each dirnode is stored in a single mutable file, distributed in the Tahoe
+grid. The contents of this file are a serialized list of netstrings, one per
+child. Each child is a list of four netstrings: (name, rocap, rwcap,
+metadata). (remember that the contents of the mutable file are encrypted by
+the read-cap, so this section describes the plaintext contents of the mutable
+file, *after* it has been decrypted by the read-cap).
+
+The name is simple a UTF-8 -encoded child name. The 'rocap' is a read-only
+capability URI to that child, either an immutable (CHK) file, a mutable file,
+or a directory. The 'rwcap' is a read-write capability URI for that child,
+encrypted with the dirnode's write-cap: this enables the "transitive
+readonlyness" property, described further below. The 'metadata' is a
+JSON-encoded dictionary of type,value metadata pairs. Some metadata keys are
+pre-defined, the rest are left up to the application.
+
+Each rwcap is stored as IV + ciphertext + MAC. The IV is a 16-byte random
+value. The ciphertext is obtained by using AES in CTR mode on the rwcap URI
+string, using a key that is formed from a tagged hash of the IV and the
+dirnode's writekey. The MAC is a 32-byte SHA-256 -based HMAC (using that same
+AES key) over the (IV+ciphertext) pair.
+
+If Bob has read-only access to the 'bar' directory, and he adds it as a child
+to the 'foo' directory, then he will put the read-only cap for 'bar' in both
+the rwcap and rocap slots (encrypting the rwcap contents as described above).
+If he has full read-write access to 'bar', then he will put the read-write
+cap in the 'rwcap' slot, and the read-only cap in the 'rocap' slot. Since
+other users who have read-only access to 'foo' will be unable to decrypt its
+rwcap slot, this limits those users to read-only access to 'bar' as well,
+thus providing the transitive readonlyness that we desire.
+
+=== Dirnode sizes, mutable-file initial read sizes ===
+
+How big are dirnodes? When reading dirnode data out of mutable files, how
+large should our initial read be? If we guess exactly, we can read a dirnode
+in a single round-trip, and update one in two RTT. If we guess too high,
+we'll waste some amount of bandwidth. If we guess low, we need to make a
+second pass to get the data (or the encrypted privkey, for writes), which
+will cost us at least another RTT.
+
+Assuming child names are between 10 and 99 characters long, how long are the
+various pieces of a dirnode?
+
+ netstring(name) ~= 4+len(name)
+ chk-cap = 97 (for 4-char filesizes)
+ dir-rw-cap = 88
+ dir-ro-cap = 91
+ netstring(cap) = 4+len(cap)
+ encrypted(cap) = 16+cap+32
+ JSON({}) = 2
+ JSON({ctime=float,mtime=float}): 57
+ netstring(metadata) = 4+57 = 61
+
+so a CHK entry is:
+ 5+ 4+len(name) + 4+97 + 5+16+97+32 + 4+57
+And a 15-byte filename gives a 336-byte entry. When the entry points at a
+subdirectory instead of a file, the entry is a little bit smaller. So an
+empty directory uses 0 bytes, a directory with one child uses about 336
+bytes, a directory with two children uses about 672, etc.
+
+When the dirnode data is encoding using our default 3-of-10, that means we
+get 112ish bytes of data in each share per child.
+
+The pubkey, signature, and hashes form the first 935ish bytes of the
+container, then comes our data, then about 1216 bytes of encprivkey. So if we
+read the first:
+
+ 1kB: we get 65bytes of dirnode data : only empty directories
+ 1kiB: 89bytes of dirnode data : maybe one short-named subdir
+ 2kB: 1065bytes: about 9 entries
+ 3kB: 2065bytes: about 18 entries, or 7.5 entries plus the encprivkey
+ 4kB: 3065bytes: about 27 entries, or about 16.5 plus the encprivkey
+
+So we've written the code to do an initial read of 2kB from each share when
+we read the mutable file, which should give good performance (one RTT) for
+small directories.
+
+
+== Design Goals, redux ==
+
+How well does this design meet the goals?
+
+ #1 functional: YES: the code works and has extensive unit tests
+ #2 documentable: YES: this document is the existence proof
+ #3 confidential: YES: see below
+ #4 integrity: MOSTLY: a coalition of storage servers can rollback individual
+ mutable files, but not a single one. No server can
+ substitute fake data as genuine.
+ #5 availability: YES: as long as 'k' storage servers are present and have
+ the same version of the mutable file, the dirnode will
+ be available.
+ #6 efficient: MOSTLY:
+ network: single dirnode lookup is very efficient, since clients can
+ fetch specific keys rather than being required to get or set
+ the entire dirnode each time. Traversing many directories
+ takes a lot of roundtrips, and these can't be collapsed with
+ promise-pipelining because the intermediate values must only
+ be visible to the client. Modifying many dirnodes at once
+ (e.g. importing a large pre-existing directory tree) is pretty
+ slow, since each graph edge must be created independently.
+ storage: each child has a separate IV, which makes them larger than
+ if all children were aggregated into a single encrypted string
+ #7 delegation: VERY: each dirnode is a completely independent object,
+ to which clients can be granted separate read-write or
+ read-only access
+ #8 updateness: VERY: with only a single point of access, and no caching,
+ each client operation starts by fetching the current
+ value, so there are no opportunities for staleness
+ #9 monotonicity: VERY: the single point of access also protects against
+ retrograde motion
+
+
+
+=== Confidentiality leaks in the vdrive server ===
+
+Dirnode (and the mutable files upon which they are based) are very private
+against other clients: traffic between the client and the storage servers is
+protected by the Foolscap SSL connection, so they can observe very little.
+Storage index values are hashes of secrets and thus unguessable, and they are
+not made public, so other clients cannot snoop through encrypted dirnodes
+that they have not been told about.
+
+Storage servers can observe access patterns and see ciphertext, but they
+cannot see the plaintext (of child names, metadata, or URIs). If an attacker
+operates a significant number of storage servers, they can infer the shape of
+the directory structure by assuming that directories are usually accessed
+from root to leaf in rapid succession. Since filenames are usually much
+shorter than read-caps and write-caps, the attacker can use the length of the
+ciphertext to guess the number of children of each node, and might be able to
+guess the length of the child names (or at least their sum). From this, the
+attacker may be able to build up a graph with the same shape as the plaintext
+filesystem, but with unlabeled edges and unknown file contents.
+
+
+=== Integrity failures in the vdrive server ===
+
+The mutable file's integrity mechanism (RSA signature on the hash of the file
+contents) prevents the storage server from modifying the dirnode's contents
+without detection. Therefore the storage servers can make the dirnode
+unavailable, but not corrupt it.
+
+A sufficient number of colluding storage servers can perform a rollback
+attack: replace all shares of the whole mutable file with an earlier version.
+TODO: To prevent this, when retrieving the contents of a mutable file, the
+client should query more servers than necessary and use the highest available
+version number. This insures that one or two misbehaving storage servers
+cannot cause this rollback on their own.
+
+
+=== Improving the efficiency of dirnodes ===
+
+The current mutable-file -based dirnode scheme suffers from certain
+inefficiencies. A very large directory (with thousands or millions of
+children) will take a significant time to extract any single entry, because
+the whole file must be downloaded first, then parsed and searched to find the
+desired child entry. Likewise, modifying a single child will require the
+whole file to be re-uploaded.
+
+The current design assumes (and in some cases, requires) that dirnodes remain
+small. The mutable files on which dirnodes are based are currently using
+"SDMF" ("Small Distributed Mutable File") design rules, which state that the
+size of the data shall remain below one megabyte. More advanced forms of
+mutable files (MDMF and LDMF) are in the design phase to allow efficient
+manipulation of larger mutable files. This would reduce the work needed to
+modify a single entry in a large directory.
+
+Judicious caching may help improve the reading-large-directory case. Some
+form of mutable index at the beginning of the dirnode might help as well. The
+MDMF design rules allow for efficient random-access reads from the middle of
+the file, which would give the index something useful to point at.
+
+The current SDMF design generates a new RSA public/private keypair for each
+directory. This takes considerable time and CPU effort, generally one or two
+seconds per directory. We have designed (but not yet built) a DSA-based
+mutable file scheme which will use shared parameters to reduce the
+directory-creation effort to a bare minimum (picking a random number instead
+of generating two random primes).
+
+
+When a backup program is run for the first time, it needs to copy a large
+amount of data from a pre-existing filesystem into reliable storage. This
+means that a large and complex directory structure needs to be duplicated in
+the dirnode layer. With the one-object-per-dirnode approach described here,
+this requires as many operations as there are edges in the imported
+filesystem graph.
+
+Another approach would be to aggregate multiple directories into a single
+storage object. This object would contain a serialized graph rather than a
+single name-to-child dictionary. Most directory operations would fetch the
+whole block of data (and presumeably cache it for a while to avoid lots of
+re-fetches), and modification operations would need to replace the whole
+thing at once. This "realm" approach would have the added benefit of
+combining more data into a single encrypted bundle (perhaps hiding the shape
+of the graph from a determined attacker), and would reduce round-trips when
+performing deep directory traversals (assuming the realm was already cached).
+It would also prevent fine-grained rollback attacks from working: a coalition
+of storage servers could change the entire realm to look like an earlier
+state, but it could not independently roll back individual directories.
+
+The drawbacks of this aggregation would be that small accesses (adding a
+single child, looking up a single child) would require pulling or pushing a
+lot of unrelated data, increasing network overhead (and necessitating
+test-and-set semantics for the modification side, which increases the chances
+that a user operation will fail, making it more challenging to provide
+promises of atomicity to the user).
+
+It would also make it much more difficult to enable the delegation
+("sharing") of specific directories. Since each aggregate "realm" provides
+all-or-nothing access control, the act of delegating any directory from the
+middle of the realm would require the realm first be split into the upper
+piece that isn't being shared and the lower piece that is. This splitting
+would have to be done in response to what is essentially a read operation,
+which is not traditionally supposed to be a high-effort action. On the other
+hand, it may be possible to aggregate the ciphertext, but use distinct
+encryption keys for each component directory, to get the benefits of both
+schemes at once.
+
+
+=== Dirnode expiration and leases ===
+
+Dirnodes are created any time a client wishes to add a new directory. How
+long do they live? What's to keep them from sticking around forever, taking
+up space that nobody can reach any longer?
+
+Mutable files are created with limited-time "leases", which keep the shares
+alive until the last lease has expired or been cancelled. Clients which know
+and care about specific dirnodes can ask to keep them alive for a while, by
+renewing a lease on them (with a typical period of one month). Clients are
+expected to assist in the deletion of dirnodes by canceling their leases as
+soon as they are done with them. This means that when a client deletes a
+directory, it should also cancel its lease on that directory. When the lease
+count on a given share goes to zero, the storage server can delete the
+related storage. Multiple clients may all have leases on the same dirnode:
+the server may delete the shares only after all of the leases have gone away.
+
+We expect that clients will periodically create a "manifest": a list of
+so-called "refresh capabilities" for all of the dirnodes and files that they
+can reach. They will give this manifest to the "repairer", which is a service
+that keeps files (and dirnodes) alive on behalf of clients who cannot take on
+this responsibility for themselves. These refresh capabilities include the
+storage index, but do *not* include the readkeys or writekeys, so the
+repairer does not get to read the files or directories that it is helping to
+keep alive.
+
+After each change to the user's vdrive, the client creates a manifest and
+looks for differences from their previous version. Anything which was removed
+prompts the client to send out lease-cancellation messages, allowing the data
+to be deleted.
+
+
+== Starting Points: root dirnodes ==
+
+Any client can record the URI of a directory node in some external form (say,
+in a local file) and use it as the starting point of later traversal. Each
+Tahoe user is expected to create a new (unattached) dirnode when they first
+start using the grid, and record its URI for later use.
+
+== Mounting and Sharing Directories ==
+
+The biggest benefit of this dirnode approach is that sharing individual
+directories is almost trivial. Alice creates a subdirectory that she wants to
+use to share files with Bob. This subdirectory is attached to Alice's
+filesystem at "~alice/share-with-bob". She asks her filesystem for the
+read-write directory URI for that new directory, and emails it to Bob. When
+Bob receives the URI, he asks his own local vdrive to attach the given URI,
+perhaps at a place named "~bob/shared-with-alice". Every time either party
+writes a file into this directory, the other will be able to read it. If
+Alice prefers, she can give a read-only URI to Bob instead, and then Bob will
+be able to read files but not change the contents of the directory. Neither
+Alice nor Bob will get access to any files above the mounted directory: there
+are no 'parent directory' pointers. If Alice creates a nested set of
+directories, "~alice/share-with-bob/subdir2", and gives a read-only URI to
+share-with-bob to Bob, then Bob will be unable to write to either
+share-with-bob/ or subdir2/.
+
+A suitable UI needs to be created to allow users to easily perform this
+sharing action: dragging a folder their vdrive to an IM or email user icon,
+for example. The UI will need to give the sending user an opportunity to
+indicate whether they want to grant read-write or read-only access to the
+recipient. The recipient then needs an interface to drag the new folder into
+their vdrive and give it a home.
+
+== Revocation ==
+
+When Alice decides that she no longer wants Bob to be able to access the
+shared directory, what should she do? Suppose she's shared this folder with
+both Bob and Carol, and now she wants Carol to retain access to it but Bob to
+be shut out. Ideally Carol should not have to do anything: her access should
+continue unabated.
+
+The current plan is to have her client create a deep copy of the folder in
+question, delegate access to the new folder to the remaining members of the
+group (Carol), asking the lucky survivors to replace their old reference with
+the new one. Bob may still have access to the old folder, but he is now the
+only one who cares: everyone else has moved on, and he will no longer be able
+to see their new changes. In a strict sense, this is the strongest form of
+revocation that can be accomplished: there is no point trying to force Bob to
+forget about the files that he read a moment before being kicked out. In
+addition it must be noted that anyone who can access the directory can proxy
+for Bob, reading files to him and accepting changes whenever he wants.
+Preventing delegation between communication parties is just as pointless as
+asking Bob to forget previously accessed files. However, there may be value
+to configuring the UI to ask Carol to not share files with Bob, or to
+removing all files from Bob's view at the same time his access is revoked.
+
--- /dev/null
+
+== FileEncoding ==
+
+When the client wishes to upload an immutable file, the first step is to
+decide upon an encryption key. There are two methods: convergent or random.
+The goal of the convergent-key method is to make sure that multiple uploads
+of the same file will result in only one copy on the grid, whereas the
+random-key method does not provide this "convergence" feature.
+
+The convergent-key method computes the SHA-256d hash of a single-purpose tag,
+the encoding parameters, a "convergence secret", and the contents of the
+file. It uses a portion of the resulting hash as the AES encryption key.
+There are security concerns with using convergence this approach (the
+"partial-information guessing attack", please see ticket #365 for some
+references), so Tahoe uses a separate (randomly-generated) "convergence
+secret" for each node, stored in NODEDIR/private/convergence . The encoding
+parameters (k, N, and the segment size) are included in the hash to make sure
+that two different encodings of the same file will get different keys. This
+method requires an extra IO pass over the file, to compute this key, and
+encryption cannot be started until the pass is complete. This means that the
+convergent-key method will require at least two total passes over the file.
+
+The random-key method simply chooses a random encryption key. Convergence is
+disabled, however this method does not require a separate IO pass, so upload
+can be done with a single pass. This mode makes it easier to perform
+streaming upload.
+
+Regardless of which method is used to generate the key, the plaintext file is
+encrypted (using AES in CTR mode) to produce a ciphertext. This ciphertext is
+then erasure-coded and uploaded to the servers. Two hashes of the ciphertext
+are generated as the encryption proceeds: a flat hash of the whole
+ciphertext, and a Merkle tree. These are used to verify the correctness of
+the erasure decoding step, and can be used by a "verifier" process to make
+sure the file is intact without requiring the decryption key.
+
+The encryption key is hashed (with SHA-256d and a single-purpose tag) to
+produce the "Storage Index". This Storage Index (or SI) is used to identify
+the shares produced by the method described below. The grid can be thought of
+as a large table that maps Storage Index to a ciphertext. Since the
+ciphertext is stored as erasure-coded shares, it can also be thought of as a
+table that maps SI to shares.
+
+Anybody who knows a Storage Index can retrieve the associated ciphertext:
+ciphertexts are not secret.
+
+
+[[Image(file-encoding1.png)]]
+
+The ciphertext file is then broken up into segments. The last segment is
+likely to be shorter than the rest. Each segment is erasure-coded into a
+number of "blocks". This takes place one segment at a time. (In fact,
+encryption and erasure-coding take place at the same time, once per plaintext
+segment). Larger segment sizes result in less overhead overall, but increase
+both the memory footprint and the "alacrity" (the number of bytes we have to
+receive before we can deliver validated plaintext to the user). The current
+default segment size is 128KiB.
+
+One block from each segment is sent to each shareholder (aka leaseholder,
+aka landlord, aka storage node, aka peer). The "share" held by each remote
+shareholder is nominally just a collection of these blocks. The file will
+be recoverable when a certain number of shares have been retrieved.
+
+[[Image(file-encoding2.png)]]
+
+The blocks are hashed as they are generated and transmitted. These
+block hashes are put into a Merkle hash tree. When the last share has been
+created, the merkle tree is completed and delivered to the peer. Later, when
+we retrieve these blocks, the peer will send many of the merkle hash tree
+nodes ahead of time, so we can validate each block independently.
+
+The root of this block hash tree is called the "block root hash" and
+used in the next step.
+
+[[Image(file-encoding3.png)]]
+
+There is a higher-level Merkle tree called the "share hash tree". Its leaves
+are the block root hashes from each share. The root of this tree is called
+the "share root hash" and is included in the "URI Extension Block", aka UEB.
+The ciphertext hash and Merkle tree are also put here, along with the
+original file size, and the encoding parameters. The UEB contains all the
+non-secret values that could be put in the URI, but would have made the URI
+too big. So instead, the UEB is stored with the share, and the hash of the
+UEB is put in the URI.
+
+The URI then contains the secret encryption key and the UEB hash. It also
+contains the basic encoding parameters (k and N) and the file size, to make
+download more efficient (by knowing the number of required shares ahead of
+time, sufficient download queries can be generated in parallel).
+
+The URI (also known as the immutable-file read-cap, since possessing it
+grants the holder the capability to read the file's plaintext) is then
+represented as a (relatively) short printable string like so:
+
+ URI:CHK:auxet66ynq55naiy2ay7cgrshm:6rudoctmbxsmbg7gwtjlimd6umtwrrsxkjzthuldsmo4nnfoc6fa:3:10:1000000
+
+[[Image(file-encoding4.png)]]
+
+During download, when a peer begins to transmit a share, it first transmits
+all of the parts of the share hash tree that are necessary to validate its
+block root hash. Then it transmits the portions of the block hash tree
+that are necessary to validate the first block. Then it transmits the
+first block. It then continues this loop: transmitting any portions of the
+block hash tree to validate block#N, then sending block#N.
+
+[[Image(file-encoding5.png)]]
+
+So the "share" that is sent to the remote peer actually consists of three
+pieces, sent in a specific order as they become available, and retrieved
+during download in a different order according to when they are needed.
+
+The first piece is the blocks themselves, one per segment. The last
+block will likely be shorter than the rest, because the last segment is
+probably shorter than the rest. The second piece is the block hash tree,
+consisting of a total of two SHA-1 hashes per block. The third piece is a
+hash chain from the share hash tree, consisting of log2(numshares) hashes.
+
+During upload, all blocks are sent first, followed by the block hash
+tree, followed by the share hash chain. During download, the share hash chain
+is delivered first, followed by the block root hash. The client then uses
+the hash chain to validate the block root hash. Then the peer delivers
+enough of the block hash tree to validate the first block, followed by
+the first block itself. The block hash chain is used to validate the
+block, then it is passed (along with the first block from several other
+peers) into decoding, to produce the first segment of crypttext, which is
+then decrypted to produce the first segment of plaintext, which is finally
+delivered to the user.
+
+[[Image(file-encoding6.png)]]
+
+== Hashes ==
+
+All hashes use SHA-256d, as defined in Practical Cryptography (by Ferguson
+and Schneier). All hashes use a single-purpose tag, e.g. the hash that
+converts an encryption key into a storage index is defined as follows:
+
+ SI = SHA256d(netstring("allmydata_immutable_key_to_storage_index_v1") + key)
+
+When two separate values need to be combined together in a hash, we wrap each
+in a netstring.
+
+Using SHA-256d (instead of plain SHA-256) guards against length-extension
+attacks. Using the tag protects our Merkle trees against attacks in which the
+hash of a leaf is confused with a hash of two children (allowing an attacker
+to generate corrupted data that nevertheless appears to be valid), and is
+simply good "cryptograhic hygiene". The "Chosen Protocol Attack" by Kelsey,
+Schneier, and Wagner (http://www.schneier.com/paper-chosen-protocol.html) is
+relevant. Putting the tag in a netstring guards against attacks that seek to
+confuse the end of the tag with the beginning of the subsequent value.
--- /dev/null
+<?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="744.09448819"
+ height="1052.3622047"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docbase="/home/warner/trees/tahoe/docs"
+ sodipodi:docname="file-encoding1.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ sodipodi:modified="true">
+ <defs
+ id="defs4">
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Mend"
+ style="overflow:visible;">
+ <path
+ id="path3252"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+ transform="scale(0.4) rotate(180) translate(10,0)" />
+ </marker>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective81" />
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Lend"
+ style="overflow:visible;">
+ <path
+ id="path2976"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+ transform="scale(0.8) rotate(180) translate(12.5,0)" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.0395661"
+ inkscape:cx="631.22458"
+ inkscape:cy="706.27996"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ inkscape:window-width="1680"
+ inkscape:window-height="1050"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ showgrid="false" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g3081"
+ transform="translate(-198.1596,-0.9619396)">
+ <rect
+ y="17.505058"
+ x="210.76614"
+ height="78.85553"
+ width="305.95944"
+ id="rect1872"
+ style="fill:#e3f4d7;stroke:#000000;stroke-opacity:1" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text1874"
+ y="44.315933"
+ x="258.83313"
+ style="font-size:28px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="44.315933"
+ x="258.83313"
+ id="tspan3079"
+ sodipodi:role="line">FILE (plaintext)</tspan></text>
+ </g>
+ <g
+ id="g4629"
+ transform="translate(-8.6574585,46.173112)">
+ <rect
+ style="fill:#d5f6ff;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+ id="rect3033"
+ width="116.35974"
+ height="73.956482"
+ x="442.19803"
+ y="243.98456" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="501.92212"
+ y="264.25281"
+ id="text3035"
+ sodipodi:linespacing="100%"><tspan
+ y="264.25281"
+ x="501.92212"
+ id="tspan3047"
+ sodipodi:role="line">convergent</tspan><tspan
+ id="tspan4627"
+ y="284.25281"
+ x="501.92212"
+ sodipodi:role="line">encryption</tspan><tspan
+ y="304.25281"
+ x="501.92212"
+ sodipodi:role="line"
+ id="tspan4604">key</tspan></text>
+ </g>
+ <g
+ id="g3139"
+ transform="translate(-122.35224,48.551816)">
+ <path
+ transform="matrix(0.923205,0,0,0.923205,-231.4625,247.6493)"
+ d="M 642.52774,196.10106 A 34.958466,34.073441 0 1 1 572.61081,196.10106 A 34.958466,34.073441 0 1 1 642.52774,196.10106 z"
+ sodipodi:ry="34.073441"
+ sodipodi:rx="34.958466"
+ sodipodi:cy="196.10106"
+ sodipodi:cx="607.56927"
+ id="path3128"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3130"
+ y="434.10446"
+ x="299.26846"
+ style="font-size:14.77128029px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="434.10446"
+ x="299.26846"
+ id="tspan3137"
+ sodipodi:role="line">AES-CTR</tspan></text>
+ </g>
+ <g
+ id="g3201"
+ transform="translate(-129.86188,50.020871)">
+ <rect
+ style="fill:#d5e5ff;stroke:#000000;stroke-width:0.96806562;stroke-opacity:1"
+ id="rect3154"
+ width="286.73019"
+ height="78.85553"
+ x="196.96533"
+ y="521.95709" />
+ <text
+ transform="scale(0.968066,1.032988)"
+ xml:space="preserve"
+ style="font-size:27.10585976px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="249.83606"
+ y="531.24384"
+ id="text3156"
+ sodipodi:linespacing="100%"><tspan
+ y="531.24384"
+ x="249.83606"
+ id="tspan3163"
+ sodipodi:role="line">FILE (crypttext)</tspan></text>
+ </g>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ d="M 208.10132,509.1107 L 208.10132,568.80529"
+ id="path3170"
+ sodipodi:nodetypes="cc" />
+ <g
+ id="g4640"
+ transform="translate(447.30202,-236.63721)">
+ <rect
+ y="755.01099"
+ x="24.107248"
+ height="28.084265"
+ width="36.708984"
+ id="rect3195"
+ style="fill:#e3f4d7;stroke:#000000;stroke-width:1.19514322;stroke-opacity:1" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3197"
+ y="771.30011"
+ x="32.327164"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="771.30011"
+ x="32.327164"
+ id="tspan3246"
+ sodipodi:role="line">tag</tspan></text>
+ </g>
+ <g
+ id="g4661"
+ transform="translate(1.9238797,4.8096992)">
+ <rect
+ y="702.01349"
+ x="514.47058"
+ height="55.723186"
+ width="100.84161"
+ id="rect3237"
+ style="fill:#d5f6ff;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3239"
+ y="724.94507"
+ x="564.60577"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="724.94507"
+ x="564.60577"
+ id="tspan3253"
+ sodipodi:role="line">storage</tspan><tspan
+ id="tspan4659"
+ y="744.94507"
+ x="564.60577"
+ sodipodi:role="line">index</tspan></text>
+ </g>
+ <g
+ id="g3212"
+ transform="translate(-96.193983,-7.2527756)">
+ <path
+ sodipodi:type="arc"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+ id="path3214"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774,196.10106 A 34.958466,34.073441 0 1 1 572.61081,196.10106 A 34.958466,34.073441 0 1 1 642.52774,196.10106 z"
+ transform="matrix(0.923205,0,0,0.923205,16.499579,-4.4109378)" />
+ <text
+ xml:space="preserve"
+ style="font-size:14.77128029px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="548.34637"
+ y="181.94142"
+ id="text3216"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3218"
+ x="548.34637"
+ y="181.94142">SHA-256</tspan></text>
+ </g>
+ <g
+ transform="translate(-9.1639282,440.10771)"
+ id="g3220">
+ <path
+ transform="matrix(0.923205,0,0,0.923205,16.499579,-4.4109378)"
+ d="M 642.52774,196.10106 A 34.958466,34.073441 0 1 1 572.61081,196.10106 A 34.958466,34.073441 0 1 1 642.52774,196.10106 z"
+ sodipodi:ry="34.073441"
+ sodipodi:rx="34.958466"
+ sodipodi:cy="196.10106"
+ sodipodi:cx="607.56927"
+ id="path3222"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3224"
+ y="181.94142"
+ x="548.34637"
+ style="font-size:14.77128029px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="181.94142"
+ x="548.34637"
+ id="tspan3226"
+ sodipodi:role="line">SHA-256</tspan></text>
+ </g>
+ <path
+ style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2b0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 320.32596,46.173119 C 407.86248,54.830577 448.26397,96.193988 468.4647,138.51934"
+ id="path2462"
+ sodipodi:nodetypes="cz" />
+ <path
+ style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2b0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 200.08348,97.15593 C 198.48026,294.3536 195.91508,353.03192 205.85512,444.41621"
+ id="path4024"
+ sodipodi:nodetypes="cs" />
+ <g
+ id="g4558"
+ transform="translate(141.40516,-11.543278)">
+ <rect
+ y="125.18694"
+ x="220.07802"
+ height="36.436913"
+ width="55.42865"
+ id="rect4549"
+ style="fill:#e3f4d7;stroke:#000000;stroke-width:1.19514322;stroke-opacity:1" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text4551"
+ y="145.6524"
+ x="237.65776"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan4553"
+ x="237.65776"
+ y="145.6524">tag</tspan></text>
+ </g>
+ <path
+ sodipodi:nodetypes="cz"
+ id="path4563"
+ d="M 416.51994,129.86189 C 429.9871,127.93801 436.72069,133.70964 452.11173,151.9865"
+ style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2b0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <g
+ id="g4576"
+ transform="translate(12.505218,-12.505218)">
+ <rect
+ style="fill:#e3f4d7;stroke:#000000;stroke-width:1.19514322;stroke-opacity:1"
+ id="rect4567"
+ width="161.24203"
+ height="40.284672"
+ x="481.72565"
+ y="69.394432" />
+ <text
+ xml:space="preserve"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="498.39401"
+ y="92.476768"
+ id="text4569"
+ sodipodi:linespacing="100%"><tspan
+ y="92.476768"
+ x="498.39401"
+ id="tspan4571"
+ sodipodi:role="line">encoding parameters</tspan></text>
+ </g>
+ <path
+ sodipodi:nodetypes="cz"
+ id="path4581"
+ d="M 564.65868,98.11787 C 565.62061,128.89994 533.87661,132.7477 507.90423,147.1768"
+ style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2b0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2b0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 479.04603,201.04543 C 487.70348,234.71332 489.62738,252.99018 491.55126,288.58195"
+ id="path4583"
+ sodipodi:nodetypes="cz" />
+ <g
+ id="g4616"
+ transform="translate(16.352977,64.449968)">
+ <rect
+ y="227.63158"
+ x="583.60315"
+ height="71.070618"
+ width="119.24558"
+ id="rect4587"
+ style="fill:#d5f6ff;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text4589"
+ y="246.66689"
+ x="644.2406"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan4591"
+ x="644.2406"
+ y="246.66689">random</tspan><tspan
+ id="tspan4600"
+ sodipodi:role="line"
+ x="644.2406"
+ y="266.66687">encryption</tspan><tspan
+ id="tspan4602"
+ sodipodi:role="line"
+ x="644.2406"
+ y="286.66687">key</tspan></text>
+ </g>
+ <path
+ sodipodi:nodetypes="cz"
+ id="path4593"
+ d="M 486.74156,365.53714 C 480.96991,415.55801 289.54389,464.61694 241.4469,469.42664"
+ style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2b0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2b0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 654.1191,362.65133 C 625.26089,454.03561 275.1148,476.16022 241.4469,480.00798"
+ id="path4595"
+ sodipodi:nodetypes="cz" />
+ <text
+ xml:space="preserve"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Courier 10 Pitch"
+ x="561.77289"
+ y="335.71701"
+ id="text4636"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan4638"
+ x="561.77289"
+ y="335.71701">or</tspan></text>
+ <path
+ style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2b0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 485.77962,367.46102 C 496.36095,429.98711 582.93553,528.10497 576.20196,584.85942"
+ id="path4645"
+ sodipodi:nodetypes="cz" />
+ <path
+ sodipodi:nodetypes="cz"
+ id="path4647"
+ d="M 654.1191,364.57521 C 642.57581,418.44383 597.36465,548.3057 582.93554,585.82136"
+ style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2b0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2b0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 507.90424,532.91467 C 534.83855,543.49601 533.87661,566.58256 548.30571,589.66912"
+ id="path4649"
+ sodipodi:nodetypes="cz" />
+ <path
+ sodipodi:nodetypes="cz"
+ id="path4651"
+ d="M 564.65869,648.34745 C 568.50644,671.43401 569.46838,687.78698 569.46838,704.13996"
+ style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2b0000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ </g>
+</svg>
--- /dev/null
+<?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://web.resource.org/cc/"
+ 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="744.09448819"
+ height="1052.3622047"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.45"
+ sodipodi:docbase="/home/warner/trees/tahoe/docs"
+ sodipodi:docname="file-encoding2.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ sodipodi:modified="true">
+ <defs
+ id="defs4">
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Lend"
+ style="overflow:visible;">
+ <path
+ id="path2976"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+ transform="scale(0.8) rotate(180) translate(12.5,0)" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.51978303"
+ inkscape:cx="372.04724"
+ inkscape:cy="526.18109"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ inkscape:window-width="900"
+ inkscape:window-height="756"
+ inkscape:window-x="779"
+ inkscape:window-y="153" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g3201"
+ transform="translate(-5.78221,-477.996)">
+ <rect
+ style="fill:#d5e5ff;stroke:black;stroke-width:0.96806562;stroke-opacity:1"
+ id="rect3154"
+ width="286.73019"
+ height="78.85553"
+ x="196.96533"
+ y="521.95709" />
+ <text
+ transform="scale(0.968066,1.032988)"
+ xml:space="preserve"
+ style="font-size:27.10585976px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="249.83606"
+ y="531.24384"
+ id="text3156"
+ sodipodi:linespacing="100%"><tspan
+ y="531.24384"
+ x="249.83606"
+ id="tspan3163"
+ sodipodi:role="line">FILE (crypttext)</tspan></text>
+ </g>
+ <g
+ id="g2022">
+ <rect
+ y="214.548"
+ x="40.845631"
+ height="80.782936"
+ width="80.498047"
+ id="rect3273"
+ style="fill:#d5e5ff;stroke:black;stroke-width:0.96806562;stroke-opacity:1" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3275"
+ y="255.87878"
+ x="56.581703"
+ style="font-size:27.99999214;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"
+ transform="scale(0.968066,1.032988)"><tspan
+ y="255.87878"
+ x="56.581703"
+ id="tspan1993"
+ sodipodi:role="line">segA</tspan></text>
+ </g>
+ <g
+ id="g2017">
+ <rect
+ style="fill:#d5e5ff;stroke:black;stroke-width:0.96806562;stroke-opacity:1"
+ id="rect3284"
+ width="80.498047"
+ height="80.782936"
+ x="161.45784"
+ y="214.548" />
+ <text
+ transform="scale(0.968066,1.032988)"
+ xml:space="preserve"
+ style="font-size:28;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="184.53419"
+ y="251.69087"
+ id="text3286"
+ sodipodi:linespacing="100%"><tspan
+ y="251.69087"
+ x="184.53419"
+ id="tspan1995"
+ sodipodi:role="line">segB</tspan></text>
+ </g>
+ <g
+ id="g2012">
+ <rect
+ y="214.548"
+ x="282.07007"
+ height="80.782936"
+ width="80.498047"
+ id="rect3290"
+ style="fill:#d5e5ff;stroke:black;stroke-width:0.96806562;stroke-opacity:1" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3292"
+ y="253.62892"
+ x="304.44913"
+ style="font-size:27.99999214;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"
+ transform="scale(0.968066,1.032988)"><tspan
+ y="253.62892"
+ x="304.44913"
+ id="tspan1997"
+ sodipodi:role="line">segC</tspan></text>
+ </g>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 223.51231,125.60384 L 88.587195,212.82815"
+ id="path4243"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 297.10782,124.24096 L 205.79487,215.55391"
+ id="path4245"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 373.4291,122.87808 L 325.7283,212.82816"
+ id="path4247"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 458.9333,124.24096 L 443.56317,216.05143"
+ id="path4249"
+ sodipodi:nodetypes="cc" />
+ <rect
+ y="214.548"
+ x="422.02194"
+ height="80.782951"
+ width="61.22403"
+ id="rect3296"
+ style="fill:#d5e5ff;stroke:black;stroke-width:0.96806562;stroke-opacity:1" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3298"
+ y="253.42572"
+ x="440.45892"
+ style="font-size:28px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"
+ transform="scale(0.968066,1.032988)"><tspan
+ sodipodi:role="line"
+ id="tspan1999"
+ x="440.45892"
+ y="253.42572">segD</tspan></text>
+ <rect
+ style="fill:white;fill-opacity:1;stroke:black;stroke-width:0.96806562;stroke-opacity:1"
+ id="rect3308"
+ width="32.312965"
+ height="80.782936"
+ x="484.21405"
+ y="214.548" />
+ <g
+ id="g2040"
+ transform="translate(-16.41804,-13.31249)">
+ <path
+ sodipodi:type="arc"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="path2029"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ transform="matrix(0.923205,0,0,0.923205,-463.3983,190.6491)" />
+ <text
+ xml:space="preserve"
+ style="font-size:14.77128029px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="84.763"
+ y="377.10425"
+ id="text2031"
+ sodipodi:linespacing="100%"><tspan
+ y="377.10425"
+ x="84.763"
+ id="tspan2038"
+ sodipodi:role="line">FEC</tspan></text>
+ </g>
+ <rect
+ style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="rect2045"
+ width="62.568695"
+ height="54.581161"
+ x="106.49989"
+ y="400.05042"
+ ry="0" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="114.42955"
+ y="424.05099"
+ id="text2932"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan2934"
+ x="114.42955"
+ y="424.05099">block</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="126.88751"
+ y="445.35098"
+ id="text2936"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan2938"
+ x="126.88751"
+ y="445.35098">A1</tspan></text>
+ <rect
+ ry="0"
+ y="471.49408"
+ x="106.49989"
+ height="54.581161"
+ width="62.568695"
+ id="rect2956"
+ style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text2960"
+ y="495.49466"
+ x="114.42955"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan3869"
+ x="114.42955"
+ y="495.49466">block</tspan></text>
+ <text
+ sodipodi:linespacing="100%"
+ id="text2964"
+ y="516.79468"
+ x="126.88751"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan3018"
+ x="126.88751"
+ y="516.79468">A2</tspan></text>
+ <rect
+ style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="rect2970"
+ width="62.568695"
+ height="54.581161"
+ x="106.49989"
+ y="542.93781"
+ ry="0" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="114.42955"
+ y="566.93835"
+ id="text2974"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan2976"
+ x="114.42955"
+ y="566.93835">block</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="126.88751"
+ y="588.23834"
+ id="text2978"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3040"
+ x="126.88751"
+ y="588.23834">A3</tspan></text>
+ <rect
+ ry="0"
+ y="614.38141"
+ x="106.49989"
+ height="54.581161"
+ width="62.568695"
+ id="rect2984"
+ style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text2988"
+ y="638.38196"
+ x="114.42955"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="638.38196"
+ x="114.42955"
+ id="tspan2990"
+ sodipodi:role="line">block</tspan></text>
+ <text
+ sodipodi:linespacing="100%"
+ id="text2992"
+ y="659.68195"
+ x="126.88751"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan3042"
+ x="126.88751"
+ y="659.68195">A4</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 79.874914,296.213 L 79.874914,326.83172"
+ id="path2996" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 90.524902,388.06915 C 85.442028,403.37176 95.420905,411.5033 105.16864,424.01286"
+ id="path3000"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 82.537411,389.4004 C 77.419162,441.79407 81.801856,464.47336 103.83739,495.90028"
+ id="path3002"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 71.887422,389.4004 C 62.3162,464.27336 66.595451,538.86154 105.16864,573.1127"
+ id="path3004"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 59.906185,384.0754 C 30.833264,497.98462 73.280777,611.91471 105.16864,643.66887"
+ id="path3006"
+ sodipodi:nodetypes="cc" />
+ <g
+ transform="translate(114.1248,-13.31249)"
+ id="g3090">
+ <path
+ transform="matrix(0.923205,0,0,0.923205,-463.3983,190.6491)"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ sodipodi:ry="34.073441"
+ sodipodi:rx="34.958466"
+ sodipodi:cy="196.10106"
+ sodipodi:cx="607.56927"
+ id="path3092"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3094"
+ y="377.10425"
+ x="84.763"
+ style="font-size:14.77128029px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan3096"
+ x="84.763"
+ y="377.10425">FEC</tspan></text>
+ </g>
+ <rect
+ ry="0"
+ y="400.05042"
+ x="237.04271"
+ height="54.581161"
+ width="62.568695"
+ id="rect3098"
+ style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3100"
+ y="424.05099"
+ x="244.97237"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="424.05099"
+ x="244.97237"
+ id="tspan3102"
+ sodipodi:role="line">block</tspan></text>
+ <text
+ sodipodi:linespacing="100%"
+ id="text3104"
+ y="445.35098"
+ x="257.43033"
+ style="font-size:20;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan3266"
+ x="257.43033"
+ y="445.35098">B1</tspan></text>
+ <rect
+ style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="rect3108"
+ width="62.568695"
+ height="54.581161"
+ x="237.04271"
+ y="471.49408"
+ ry="0" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="244.97237"
+ y="495.49466"
+ id="text3110"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3112"
+ x="244.97237"
+ y="495.49466">block</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="257.43033"
+ y="516.79468"
+ id="text3114"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3268"
+ x="257.43033"
+ y="516.79468">B2</tspan></text>
+ <rect
+ ry="0"
+ y="542.93781"
+ x="237.04271"
+ height="54.581161"
+ width="62.568695"
+ id="rect3118"
+ style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3120"
+ y="566.93835"
+ x="244.97237"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="566.93835"
+ x="244.97237"
+ id="tspan3122"
+ sodipodi:role="line">block</tspan></text>
+ <text
+ sodipodi:linespacing="100%"
+ id="text3124"
+ y="588.23834"
+ x="257.43033"
+ style="font-size:20;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan3270"
+ x="257.43033"
+ y="588.23834">B3</tspan></text>
+ <rect
+ style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="rect3128"
+ width="62.568695"
+ height="54.581161"
+ x="237.04271"
+ y="614.38141"
+ ry="0" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="244.97237"
+ y="638.38196"
+ id="text3130"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3132"
+ x="244.97237"
+ y="638.38196">block</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="257.43033"
+ y="659.68195"
+ id="text3134"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3272"
+ x="257.43033"
+ y="659.68195">B4</tspan></text>
+ <path
+ id="path3138"
+ d="M 210.41773,296.213 L 210.41773,326.83172"
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path3140"
+ d="M 221.06772,388.06915 C 215.98484,403.37176 225.96372,411.5033 235.71146,424.01286"
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path3142"
+ d="M 213.08023,389.4004 C 207.96198,441.79407 212.34467,464.47336 234.38021,495.90028"
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path3144"
+ d="M 202.43024,389.4004 C 192.85902,464.27336 197.13827,538.86154 235.71146,573.1127"
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path3146"
+ d="M 190.449,384.0754 C 161.37608,497.98462 203.82359,611.91471 235.71146,643.66887"
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1" />
+ <g
+ id="g3148"
+ transform="translate(241.4443,-13.31249)">
+ <path
+ sodipodi:type="arc"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="path3150"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ transform="matrix(0.923205,0,0,0.923205,-463.3983,190.6491)" />
+ <text
+ xml:space="preserve"
+ style="font-size:14.77128029px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="84.763"
+ y="377.10425"
+ id="text3152"
+ sodipodi:linespacing="100%"><tspan
+ y="377.10425"
+ x="84.763"
+ id="tspan3154"
+ sodipodi:role="line">FEC</tspan></text>
+ </g>
+ <rect
+ style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="rect3156"
+ width="62.568695"
+ height="54.581161"
+ x="364.36224"
+ y="400.05042"
+ ry="0" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="372.2919"
+ y="424.05099"
+ id="text3158"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3160"
+ x="372.2919"
+ y="424.05099">block</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="384.74988"
+ y="445.35098"
+ id="text3162"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3274"
+ x="384.74988"
+ y="445.35098">C1</tspan></text>
+ <rect
+ ry="0"
+ y="471.49408"
+ x="364.36224"
+ height="54.581161"
+ width="62.568695"
+ id="rect3166"
+ style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3168"
+ y="495.49466"
+ x="372.2919"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="495.49466"
+ x="372.2919"
+ id="tspan3170"
+ sodipodi:role="line">block</tspan></text>
+ <text
+ sodipodi:linespacing="100%"
+ id="text3172"
+ y="516.79468"
+ x="384.74988"
+ style="font-size:20;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan3278"
+ x="384.74988"
+ y="516.79468">C2</tspan></text>
+ <rect
+ style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="rect3176"
+ width="62.568695"
+ height="54.581161"
+ x="364.36224"
+ y="542.93781"
+ ry="0" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="372.2919"
+ y="566.93835"
+ id="text3178"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3180"
+ x="372.2919"
+ y="566.93835">block</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="384.74988"
+ y="588.23834"
+ id="text3182"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3280"
+ x="384.74988"
+ y="588.23834">C3</tspan></text>
+ <rect
+ ry="0"
+ y="614.38141"
+ x="364.36224"
+ height="54.581161"
+ width="62.568695"
+ id="rect3186"
+ style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3188"
+ y="638.38196"
+ x="372.2919"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="638.38196"
+ x="372.2919"
+ id="tspan3190"
+ sodipodi:role="line">block</tspan></text>
+ <text
+ sodipodi:linespacing="100%"
+ id="text3192"
+ y="659.68195"
+ x="384.74988"
+ style="font-size:20;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan3282"
+ x="384.74988"
+ y="659.68195">C4</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ d="M 337.73727,296.213 L 337.73727,326.83172"
+ id="path3196" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ d="M 348.38726,388.06915 C 343.30438,403.37176 353.28326,411.5033 363.031,424.01286"
+ id="path3198"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ d="M 340.39977,389.4004 C 335.28152,441.79407 339.66421,464.47336 361.69975,495.90028"
+ id="path3200"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ d="M 329.74978,389.4004 C 320.17856,464.27336 324.45781,538.86154 363.031,573.1127"
+ id="path3202"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ d="M 317.76854,384.0754 C 288.69562,497.98462 331.14313,611.91471 363.031,643.66887"
+ id="path3204"
+ sodipodi:nodetypes="cc" />
+ <g
+ transform="translate(370.3755,-13.31249)"
+ id="g3207">
+ <path
+ transform="matrix(0.923205,0,0,0.923205,-463.3983,190.6491)"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ sodipodi:ry="34.073441"
+ sodipodi:rx="34.958466"
+ sodipodi:cy="196.10106"
+ sodipodi:cx="607.56927"
+ id="path3209"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3211"
+ y="377.10425"
+ x="84.763"
+ style="font-size:14.77128029px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan3213"
+ x="84.763"
+ y="377.10425">FEC</tspan></text>
+ </g>
+ <rect
+ ry="0"
+ y="400.05042"
+ x="493.29343"
+ height="54.581161"
+ width="62.568695"
+ id="rect3215"
+ style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3217"
+ y="424.05099"
+ x="501.22308"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="424.05099"
+ x="501.22308"
+ id="tspan3219"
+ sodipodi:role="line">block</tspan></text>
+ <text
+ sodipodi:linespacing="100%"
+ id="text3221"
+ y="445.35098"
+ x="513.68103"
+ style="font-size:20;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan3284"
+ x="513.68103"
+ y="445.35098">D1</tspan></text>
+ <rect
+ style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="rect3225"
+ width="62.568695"
+ height="54.581161"
+ x="493.29343"
+ y="471.49408"
+ ry="0" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="501.22308"
+ y="495.49466"
+ id="text3227"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3229"
+ x="501.22308"
+ y="495.49466">block</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="513.68103"
+ y="516.79468"
+ id="text3231"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3286"
+ x="513.68103"
+ y="516.79468">D2</tspan></text>
+ <rect
+ ry="0"
+ y="542.93781"
+ x="493.29343"
+ height="54.581161"
+ width="62.568695"
+ id="rect3235"
+ style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3237"
+ y="566.93835"
+ x="501.22308"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="566.93835"
+ x="501.22308"
+ id="tspan3239"
+ sodipodi:role="line">block</tspan></text>
+ <text
+ sodipodi:linespacing="100%"
+ id="text3241"
+ y="588.23834"
+ x="513.68103"
+ style="font-size:20;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan3288"
+ x="513.68103"
+ y="588.23834">D3</tspan></text>
+ <rect
+ style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="rect3245"
+ width="62.568695"
+ height="54.581161"
+ x="493.29343"
+ y="614.38141"
+ ry="0" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="501.22308"
+ y="638.38196"
+ id="text3247"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3249"
+ x="501.22308"
+ y="638.38196">block</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="513.68103"
+ y="659.68195"
+ id="text3251"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3293"
+ x="513.68103"
+ y="659.68195">D4</tspan></text>
+ <path
+ id="path3256"
+ d="M 466.66845,296.213 L 466.66845,326.83172"
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path3258"
+ d="M 477.31844,388.06915 C 472.23556,403.37176 482.21444,411.5033 491.96218,424.01286"
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path3260"
+ d="M 469.33095,389.4004 C 464.2127,441.79407 468.59539,464.47336 490.63093,495.90028"
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path3262"
+ d="M 458.68096,389.4004 C 449.10974,464.27336 453.38899,538.86154 491.96218,573.1127"
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path3264"
+ d="M 446.69972,384.0754 C 417.6268,497.98462 460.07431,611.91471 491.96218,643.66887"
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1" />
+ <rect
+ style="fill:none;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="rect3831"
+ width="516.80328"
+ height="103.59095"
+ x="66.758537"
+ y="604.61957" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="80.570648"
+ y="700.15332"
+ id="text3833"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3835"
+ x="80.570648"
+ y="700.15332">share4</tspan></text>
+ <rect
+ style="fill:#ffd5f6;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="rect3837"
+ width="95.533775"
+ height="81.721664"
+ x="631.90411"
+ y="640.30084" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="650.27539"
+ y="660.8269"
+ id="text3839"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3841"
+ x="650.27539"
+ y="660.8269">peer 4</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 582.41071,673.68012 C 631.90411,677.13315 631.90411,677.13315 631.90411,677.13315"
+ id="path3843" />
+ </g>
+</svg>
--- /dev/null
+<?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://web.resource.org/cc/"
+ 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="744.09448819"
+ height="1052.3622047"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.44.1"
+ sodipodi:docbase="/home/warner/work/tahoe-misc"
+ sodipodi:docname="file-encoding3.svg">
+ <defs
+ id="defs4">
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Lend"
+ style="overflow:visible;">
+ <path
+ id="path2976"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+ transform="scale(0.8) rotate(180) translate(12.5,0)" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.523584"
+ inkscape:cx="372.04724"
+ inkscape:cy="526.18109"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ inkscape:window-width="900"
+ inkscape:window-height="756"
+ inkscape:window-x="778"
+ inkscape:window-y="96" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g3308"
+ transform="translate(-492.4404,-287.9192)">
+ <path
+ sodipodi:type="arc"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="path3297"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)" />
+ <text
+ xml:space="preserve"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="591.47559"
+ y="483.09396"
+ id="text3299"
+ sodipodi:linespacing="100%"><tspan
+ y="483.09396"
+ x="591.47559"
+ id="tspan3306"
+ sodipodi:role="line">SHA</tspan></text>
+ </g>
+ <g
+ transform="translate(-361.8975,-287.9192)"
+ id="g3313">
+ <path
+ transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ sodipodi:ry="34.073441"
+ sodipodi:rx="34.958466"
+ sodipodi:cy="196.10106"
+ sodipodi:cx="607.56927"
+ id="path3315"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3317"
+ y="483.09396"
+ x="591.47559"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan3319"
+ x="591.47559"
+ y="483.09396">SHA</tspan></text>
+ </g>
+ <g
+ id="g3321"
+ transform="translate(-427.1689,-180.8987)">
+ <path
+ sodipodi:type="arc"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="path3323"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)" />
+ <text
+ xml:space="preserve"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="591.47559"
+ y="483.09396"
+ id="text3325"
+ sodipodi:linespacing="100%"><tspan
+ y="483.09396"
+ x="591.47559"
+ id="tspan3327"
+ sodipodi:role="line">SHA</tspan></text>
+ </g>
+ <g
+ transform="translate(-298.6406,-78.23132)"
+ id="g3329">
+ <path
+ transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ sodipodi:ry="34.073441"
+ sodipodi:rx="34.958466"
+ sodipodi:cy="196.10106"
+ sodipodi:cx="607.56927"
+ id="path3331"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3333"
+ y="483.09396"
+ x="591.47559"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan3335"
+ x="591.47559"
+ y="483.09396">SHA</tspan></text>
+ </g>
+ <g
+ transform="translate(-234.578,-287.9192)"
+ id="g3345">
+ <path
+ transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ sodipodi:ry="34.073441"
+ sodipodi:rx="34.958466"
+ sodipodi:cy="196.10106"
+ sodipodi:cx="607.56927"
+ id="path3347"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3349"
+ y="483.09396"
+ x="591.47559"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan3351"
+ x="591.47559"
+ y="483.09396">SHA</tspan></text>
+ </g>
+ <g
+ id="g3353"
+ transform="translate(-170.1124,-180.8987)">
+ <path
+ sodipodi:type="arc"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="path3355"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)" />
+ <text
+ xml:space="preserve"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="591.47559"
+ y="483.09396"
+ id="text3357"
+ sodipodi:linespacing="100%"><tspan
+ y="483.09396"
+ x="591.47559"
+ id="tspan3359"
+ sodipodi:role="line">SHA</tspan></text>
+ </g>
+ <g
+ transform="translate(-105.6468,-287.9192)"
+ id="g3361">
+ <path
+ transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ sodipodi:ry="34.073441"
+ sodipodi:rx="34.958466"
+ sodipodi:cy="196.10106"
+ sodipodi:cx="607.56927"
+ id="path3363"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3365"
+ y="483.09396"
+ x="591.47559"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan3367"
+ x="591.47559"
+ y="483.09396">SHA</tspan></text>
+ </g>
+ <rect
+ ry="0"
+ y="47.720215"
+ x="76.855522"
+ height="54.581161"
+ width="62.568695"
+ id="rect2984"
+ style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text2988"
+ y="71.720772"
+ x="84.785179"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="71.720772"
+ x="84.785179"
+ id="tspan2990"
+ sodipodi:role="line">share</tspan></text>
+ <text
+ sodipodi:linespacing="100%"
+ id="text2992"
+ y="93.020752"
+ x="97.243141"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan3042"
+ x="97.243141"
+ y="93.020752">A4</tspan></text>
+ <rect
+ style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="rect3128"
+ width="62.568695"
+ height="54.581161"
+ x="207.39835"
+ y="47.720215"
+ ry="0" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="215.328"
+ y="71.720772"
+ id="text3130"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3132"
+ x="215.328"
+ y="71.720772">share</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="227.78596"
+ y="93.020752"
+ id="text3134"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3272"
+ x="227.78596"
+ y="93.020752">B4</tspan></text>
+ <rect
+ ry="0"
+ y="47.720215"
+ x="334.7179"
+ height="54.581161"
+ width="62.568695"
+ id="rect3186"
+ style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3188"
+ y="71.720772"
+ x="342.64755"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="71.720772"
+ x="342.64755"
+ id="tspan3190"
+ sodipodi:role="line">share</tspan></text>
+ <text
+ sodipodi:linespacing="100%"
+ id="text3192"
+ y="93.020752"
+ x="355.10553"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan3282"
+ x="355.10553"
+ y="93.020752">C4</tspan></text>
+ <rect
+ style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="rect3245"
+ width="62.568695"
+ height="54.581161"
+ x="463.64905"
+ y="47.720215"
+ ry="0" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="471.5787"
+ y="71.720772"
+ id="text3247"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3249"
+ x="471.5787"
+ y="71.720772">share</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="484.03665"
+ y="93.020752"
+ id="text3251"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3293"
+ x="484.03665"
+ y="93.020752">D4</tspan></text>
+ <rect
+ style="fill:none;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="rect3831"
+ width="516.80328"
+ height="491.99808"
+ x="37.114162"
+ y="37.958374" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="44.343109"
+ y="521.89929"
+ id="text3833"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3835"
+ x="44.343109"
+ y="521.89929">share4</tspan></text>
+ <rect
+ style="fill:#ffd5f6;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="rect3837"
+ width="95.533775"
+ height="81.721664"
+ x="602.25977"
+ y="73.639648" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="620.63104"
+ y="94.16571"
+ id="text3839"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3841"
+ x="620.63104"
+ y="94.16571">peer 4</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ d="M 552.76635,107.01893 C 602.25975,110.47196 602.25975,110.47196 602.25975,110.47196"
+ id="path3843" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 106.27121,102.50451 L 108.15211,173.97895"
+ id="path2431" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 238.8751,102.50451 L 237.93464,173.03849"
+ id="path2433" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 366.77673,103.44496 L 366.77673,172.09804"
+ id="path2435" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 495.61881,103.44496 L 495.61881,173.03849"
+ id="path2437" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 489.97609,208.77571 L 438.25116,282.13106"
+ id="path2439" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 370.53854,207.83526 L 420.38255,282.13106"
+ id="path2441" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 236.05374,209.71617 L 183.38836,284.01197"
+ id="path2443" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 110.97347,207.83526 L 164.5793,282.13106"
+ id="path2445" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 178.6861,315.98737 L 289.65957,388.40226"
+ id="path2447" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 426.02527,315.98737 L 316.93271,389.34272"
+ id="path2449" />
+ <rect
+ style="fill:none;fill-opacity:1;stroke:blue;stroke-opacity:1"
+ id="rect3336"
+ width="474.92883"
+ height="334.80142"
+ x="61.129456"
+ y="140.12263" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:blue;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="241.69646"
+ y="263.32199"
+ id="text3338"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3340"
+ x="241.69646"
+ y="263.32199">Merkle Tree</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:blue;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="68.653069"
+ y="466.45987"
+ id="text3342"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3344"
+ x="68.653069"
+ y="466.45987">block hash tree</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="321.63498"
+ y="405.33044"
+ id="text3346"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3352"
+ x="321.63498"
+ y="405.33044">"block root hash"</tspan></text>
+ </g>
+</svg>
--- /dev/null
+<?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="744.09448819"
+ height="1052.3622047"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docbase="/home/warner/work/tahoe-misc"
+ sodipodi:docname="file-encoding4.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective5442" />
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Lend"
+ style="overflow:visible;">
+ <path
+ id="path2976"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+ transform="scale(0.8) rotate(180) translate(12.5,0)" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.0814091"
+ inkscape:cx="327.67132"
+ inkscape:cy="590.71497"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ inkscape:window-width="1680"
+ inkscape:window-height="1050"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ showgrid="false" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="212.25175"
+ y="109.45165"
+ id="text3632"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3634"
+ x="212.25175"
+ y="109.45165">block</tspan><tspan
+ sodipodi:role="line"
+ x="212.25175"
+ y="129.45165"
+ id="tspan3636">root hashes</tspan></text>
+ <g
+ id="g3642"
+ transform="translate(-226.712,-129.0765)">
+ <path
+ sodipodi:type="arc"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="path3644"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)" />
+ <text
+ xml:space="preserve"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="591.47559"
+ y="483.09396"
+ id="text3646"
+ sodipodi:linespacing="100%"><tspan
+ y="483.09396"
+ x="591.47559"
+ id="tspan3648"
+ sodipodi:role="line">SHA</tspan></text>
+ </g>
+ <g
+ id="g3675"
+ transform="translate(175.712,7.63966)">
+ <path
+ transform="matrix(0.511994,0,0,0.511994,-233.9701,54.30905)"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ sodipodi:ry="34.073441"
+ sodipodi:rx="34.958466"
+ sodipodi:cy="196.10106"
+ sodipodi:cx="607.56927"
+ id="path3331"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3653"
+ y="160.03162"
+ x="68.92907"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="160.03162"
+ x="68.92907"
+ id="tspan3655"
+ sodipodi:role="line">s1</tspan></text>
+ </g>
+ <g
+ id="g3686"
+ transform="translate(175.712,2.282887)">
+ <path
+ sodipodi:type="arc"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="path3657"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ transform="matrix(0.511994,0,0,0.511994,-231.4293,132.056)" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="68.029869"
+ y="239.32857"
+ id="text3659"
+ sodipodi:linespacing="100%"><tspan
+ y="239.32857"
+ x="68.029869"
+ id="tspan3680"
+ sodipodi:role="line">s2</tspan></text>
+ </g>
+ <g
+ id="g3691"
+ transform="translate(175.712,0.186429)">
+ <path
+ transform="matrix(0.511994,0,0,0.511994,-229.5194,206.5426)"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ sodipodi:ry="34.073441"
+ sodipodi:rx="34.958466"
+ sodipodi:cy="196.10106"
+ sodipodi:cx="607.56927"
+ id="path3663"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3665"
+ y="313.49518"
+ x="70.729767"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="313.49518"
+ x="70.729767"
+ id="tspan3682"
+ sodipodi:role="line">s3</tspan></text>
+ </g>
+ <g
+ id="g3696"
+ transform="translate(175.712,7.639653)">
+ <path
+ sodipodi:type="arc"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="path3669"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ transform="matrix(0.511994,0,0,0.511994,-229.5194,271.4796)" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="72.669769"
+ y="377.16217"
+ id="text3671"
+ sodipodi:linespacing="100%"><tspan
+ y="377.16217"
+ x="72.669769"
+ id="tspan3684"
+ sodipodi:role="line">s4</tspan></text>
+ </g>
+ <g
+ transform="translate(-228.8541,-284.0256)"
+ id="g3701">
+ <path
+ transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ sodipodi:ry="34.073441"
+ sodipodi:rx="34.958466"
+ sodipodi:cy="196.10106"
+ sodipodi:cx="607.56927"
+ id="path3703"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3705"
+ y="483.09396"
+ x="591.47559"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan3707"
+ x="591.47559"
+ y="483.09396">SHA</tspan></text>
+ </g>
+ <g
+ transform="translate(-110.3217,-218.3329)"
+ id="g3709">
+ <path
+ transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ sodipodi:ry="34.073441"
+ sodipodi:rx="34.958466"
+ sodipodi:cy="196.10106"
+ sodipodi:cx="607.56927"
+ id="path3711"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3713"
+ y="483.09396"
+ x="591.47559"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan3715"
+ x="591.47559"
+ y="483.09396">SHA</tspan></text>
+ </g>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ d="M 270.6808,165.29588 L 353.51073,189.57362"
+ id="path3717" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ d="M 272.10891,234.55883 C 275.67916,233.13073 354.22478,203.14059 354.22478,203.14059"
+ id="path3719" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ d="M 274.96511,307.39204 L 356.36693,341.66649"
+ id="path3721" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ d="M 275.67916,379.51119 L 355.65288,358.80371"
+ id="path3723" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ d="M 390.64138,347.3789 L 473.4713,271.68949"
+ id="path3725" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ d="M 389.92733,198.14223 L 472.75725,253.12416"
+ id="path3727" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="82.126266"
+ y="105.04523"
+ id="text4615"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan4617"
+ x="82.126266"
+ y="105.04523">shares</tspan></text>
+ <g
+ id="g4662"
+ transform="translate(0,-7.629395e-6)">
+ <rect
+ ry="0"
+ y="131.23222"
+ x="69.941055"
+ height="62.310936"
+ width="88.076958"
+ id="rect3245"
+ style="fill:#aa87de;fill-opacity:1;stroke:black;stroke-opacity:1" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text4619"
+ y="167.66769"
+ x="84.927971"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="167.66769"
+ x="84.927971"
+ id="tspan4621"
+ sodipodi:role="line">share1</tspan></text>
+ </g>
+ <g
+ id="g4657"
+ transform="translate(-0.77298,-0.515305)">
+ <rect
+ style="fill:#aa87de;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="rect4623"
+ width="88.076958"
+ height="62.310936"
+ x="70.714035"
+ y="203.11914"
+ ry="0" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="85.700951"
+ y="239.55461"
+ id="text4625"
+ sodipodi:linespacing="100%"><tspan
+ y="239.55461"
+ x="85.700951"
+ id="tspan4641"
+ sodipodi:role="line">share2</tspan></text>
+ </g>
+ <g
+ id="g4652"
+ transform="translate(-3.864891,1.288307)">
+ <rect
+ ry="0"
+ y="272.68713"
+ x="73.805946"
+ height="62.310936"
+ width="88.076958"
+ id="rect4629"
+ style="fill:#aa87de;fill-opacity:1;stroke:black;stroke-opacity:1" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text4631"
+ y="309.12259"
+ x="88.792862"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="309.12259"
+ x="88.792862"
+ id="tspan4643"
+ sodipodi:role="line">share3</tspan></text>
+ </g>
+ <g
+ id="g4647"
+ transform="translate(-4.637871,0)">
+ <rect
+ style="fill:#aa87de;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="rect4635"
+ width="88.076958"
+ height="62.310936"
+ x="74.578926"
+ y="345.34702"
+ ry="0" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="89.565842"
+ y="381.78247"
+ id="text4637"
+ sodipodi:linespacing="100%"><tspan
+ y="381.78247"
+ x="89.565842"
+ id="tspan4645"
+ sodipodi:role="line">share4</tspan></text>
+ </g>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:3,3;stroke-dashoffset:0"
+ d="M 159.23338,161.89201 L 234.98518,160.34605"
+ id="path4667" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:3,3;stroke-dashoffset:0"
+ d="M 159.23338,233.77892 L 236.53114,233.00595"
+ id="path4669" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:3,3;stroke-dashoffset:0"
+ d="M 160.77934,304.11988 L 239.62305,305.66584"
+ id="path4671" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:3,3;stroke-dashoffset:0"
+ d="M 158.4604,374.46084 L 238.85007,377.55275"
+ id="path4673" />
+ <rect
+ style="fill:none;fill-opacity:1;stroke:blue;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect5560"
+ width="451.25253"
+ height="376.15237"
+ x="201.65356"
+ y="75.152138" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:blue;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="320.79318"
+ y="271.27441"
+ id="text3338"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3340"
+ x="320.79318"
+ y="271.27441">Merkle Tree</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:blue;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="211.74399"
+ y="441.22202"
+ id="text3342"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan7495"
+ x="211.74399"
+ y="441.22202">share hash tree</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="495.05698"
+ y="240.97345"
+ id="text5566"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan5568"
+ x="495.05698"
+ y="240.97345">"share root hash"</tspan></text>
+ <rect
+ style="fill:#d5f6ff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect8042"
+ width="372.43307"
+ height="126.05428"
+ x="258.43817"
+ y="492.44629" />
+ <text
+ xml:space="preserve"
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="267.38785"
+ y="521.40631"
+ id="text8044"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan8046"
+ x="267.38785"
+ y="521.40631">URI Extension Block</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 491.09641,278.8051 L 505.57143,535.71157"
+ id="path8064"
+ sodipodi:nodetypes="cc" />
+ <g
+ id="g5534">
+ <text
+ sodipodi:linespacing="100%"
+ id="text8048"
+ y="560.19122"
+ x="296.70987"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="560.19122"
+ x="296.70987"
+ id="tspan8050"
+ sodipodi:role="line">file size</tspan></text>
+ <rect
+ y="538.7973"
+ x="291.02008"
+ height="31.027878"
+ width="84.953964"
+ id="rect8066"
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <g
+ id="g5539"
+ transform="translate(-21.380944,3.5634906)">
+ <text
+ sodipodi:linespacing="100%"
+ id="text8052"
+ y="595.66229"
+ x="296.09039"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="595.66229"
+ x="296.09039"
+ id="tspan8054"
+ sodipodi:role="line">encoding parameters</tspan></text>
+ <rect
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect8068"
+ width="205.77185"
+ height="29.795084"
+ x="291.02008"
+ y="576.24475" />
+ </g>
+ <g
+ id="g5529">
+ <text
+ sodipodi:linespacing="100%"
+ id="text8060"
+ y="557.45142"
+ x="430.06894"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="557.45142"
+ x="430.06894"
+ id="tspan8062"
+ sodipodi:role="line">share root hash</tspan></text>
+ <rect
+ y="536.65747"
+ x="420.48123"
+ height="31.027878"
+ width="162.62888"
+ id="rect8070"
+ style="fill:none;fill-opacity:1;stroke:black;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot5444"
+ style="fill:black;stroke:none;stroke-opacity:1;stroke-width:1px;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:1;font-family:Courier 10 Pitch;font-style:normal;font-weight:normal;font-size:18px;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr;line-height:100%"><flowRegion
+ id="flowRegion5446"><rect
+ id="rect5448"
+ width="440.86795"
+ height="206.59506"
+ x="212.52603"
+ y="478.04767" /></flowRegion><flowPara
+ id="flowPara5450"></flowPara></flowRoot> <flowRoot
+ style="fill:black;stroke:none;stroke-opacity:1;stroke-width:1px;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:1;font-family:Courier 10 Pitch;font-style:normal;font-weight:normal;font-size:18px;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr;line-height:100%"
+ id="flowRoot5452"
+ xml:space="preserve"><flowRegion
+ id="flowRegion5454"><rect
+ y="478.04767"
+ x="212.52603"
+ height="206.59506"
+ width="440.86795"
+ id="rect5456" /></flowRegion><flowPara
+ id="flowPara5458"></flowPara></flowRoot> <rect
+ y="722.08801"
+ x="249.14307"
+ height="126.05428"
+ width="372.43307"
+ id="rect5460"
+ style="fill:#d5f6ff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text5462"
+ y="750.73669"
+ x="264.42236"
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="750.73669"
+ x="264.42236"
+ id="tspan5464"
+ sodipodi:role="line">URI / "file read-cap"</tspan></text>
+ <g
+ id="g5498">
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="471.72757"
+ y="789.75726"
+ id="text5478"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan5480"
+ x="471.72757"
+ y="789.75726">UEB hash</tspan></text>
+ <rect
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect5486"
+ width="109.25024"
+ height="31.027878"
+ x="461.99792"
+ y="768.95331" />
+ </g>
+ <g
+ id="g5503">
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="275.49631"
+ y="792.89374"
+ id="text5474"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan5476"
+ x="275.49631"
+ y="792.89374">encryption key</tspan></text>
+ <rect
+ y="770.815"
+ x="268.32343"
+ height="36.37751"
+ width="148.71983"
+ id="rect5488"
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <g
+ transform="translate(-97.251286,198.1785)"
+ id="g5490">
+ <path
+ transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)"
+ d="M 642.52774,196.10106 A 34.958466,34.073441 0 1 1 572.61081,196.10106 A 34.958466,34.073441 0 1 1 642.52774,196.10106 z"
+ sodipodi:ry="34.073441"
+ sodipodi:rx="34.958466"
+ sodipodi:cy="196.10106"
+ sodipodi:cx="607.56927"
+ id="path5492"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text5494"
+ y="483.09396"
+ x="591.47559"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan5496"
+ x="591.47559"
+ y="483.09396">SHA</tspan></text>
+ </g>
+ <path
+ id="path5508"
+ d="M 490.16032,618.22602 L 500.19251,660.16729"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ d="M 506.13565,695.45603 L 516.96501,767.91304"
+ id="path5510" />
+ <g
+ id="g5524"
+ transform="translate(-7.8396793,-5.701585)">
+ <rect
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect8072"
+ width="127.96149"
+ height="31.434599"
+ x="502.91043"
+ y="583.00134" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="507.92603"
+ y="603.99866"
+ id="text5520"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan5522"
+ x="507.92603"
+ y="603.99866">other hashes</tspan></text>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?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://web.resource.org/cc/"
+ 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="744.09448819"
+ height="1052.3622047"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.44.1"
+ sodipodi:docbase="/home/warner/work/tahoe-misc"
+ sodipodi:docname="file-encoding5.svg">
+ <defs
+ id="defs4">
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Lend"
+ style="overflow:visible;">
+ <path
+ id="path2976"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+ transform="scale(0.8) rotate(180) translate(12.5,0)" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.79718499"
+ inkscape:cx="410.02658"
+ inkscape:cy="638.93685"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ inkscape:window-width="900"
+ inkscape:window-height="756"
+ inkscape:window-x="699"
+ inkscape:window-y="165" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="93.755287"
+ y="98.537506"
+ id="text3632"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3634"
+ x="93.755287"
+ y="98.537506">block</tspan><tspan
+ sodipodi:role="line"
+ x="93.755287"
+ y="118.53751"
+ id="tspan3636">root hashes</tspan></text>
+ <g
+ id="g3642"
+ transform="translate(-279.7236,-129.0765)">
+ <path
+ sodipodi:type="arc"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="path3644"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)" />
+ <text
+ xml:space="preserve"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="591.47559"
+ y="483.09396"
+ id="text3646"
+ sodipodi:linespacing="100%"><tspan
+ y="483.09396"
+ x="591.47559"
+ id="tspan3648"
+ sodipodi:role="line">SHA</tspan></text>
+ </g>
+ <g
+ id="g3675"
+ transform="translate(63.82283,6.080481)">
+ <path
+ transform="matrix(0.511994,0,0,0.511994,-233.9701,54.30905)"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ sodipodi:ry="34.073441"
+ sodipodi:rx="34.958466"
+ sodipodi:cy="196.10106"
+ sodipodi:cx="607.56927"
+ id="path3331"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3653"
+ y="160.03162"
+ x="68.92907"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="160.03162"
+ x="68.92907"
+ id="tspan3655"
+ sodipodi:role="line">s1</tspan></text>
+ </g>
+ <g
+ id="g3686"
+ transform="translate(61.28203,2.918364)">
+ <path
+ sodipodi:type="arc"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="path3657"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ transform="matrix(0.511994,0,0,0.511994,-231.4293,132.056)" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="68.029869"
+ y="239.32857"
+ id="text3659"
+ sodipodi:linespacing="100%"><tspan
+ y="239.32857"
+ x="68.029869"
+ id="tspan3680"
+ sodipodi:role="line">s2</tspan></text>
+ </g>
+ <g
+ id="g3691"
+ transform="translate(59.37213,3.016624)">
+ <path
+ transform="matrix(0.511994,0,0,0.511994,-229.5194,206.5426)"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ sodipodi:ry="34.073441"
+ sodipodi:rx="34.958466"
+ sodipodi:cy="196.10106"
+ sodipodi:cx="607.56927"
+ id="path3663"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3665"
+ y="313.49518"
+ x="70.729767"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="313.49518"
+ x="70.729767"
+ id="tspan3682"
+ sodipodi:role="line">s3</tspan></text>
+ </g>
+ <g
+ id="g3696"
+ transform="translate(59.37213,12.6645)">
+ <path
+ sodipodi:type="arc"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="path3669"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ transform="matrix(0.511994,0,0,0.511994,-229.5194,271.4796)" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="72.669769"
+ y="377.16217"
+ id="text3671"
+ sodipodi:linespacing="100%"><tspan
+ y="377.16217"
+ x="72.669769"
+ id="tspan3684"
+ sodipodi:role="line">s4</tspan></text>
+ </g>
+ <g
+ transform="translate(-281.8657,-284.0256)"
+ id="g3701">
+ <path
+ transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ sodipodi:ry="34.073441"
+ sodipodi:rx="34.958466"
+ sodipodi:cy="196.10106"
+ sodipodi:cx="607.56927"
+ id="path3703"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3705"
+ y="483.09396"
+ x="591.47559"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan3707"
+ x="591.47559"
+ y="483.09396">SHA</tspan></text>
+ </g>
+ <g
+ transform="translate(-104.085,-218.3329)"
+ id="g3709">
+ <path
+ transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ sodipodi:ry="34.073441"
+ sodipodi:rx="34.958466"
+ sodipodi:cy="196.10106"
+ sodipodi:cx="607.56927"
+ id="path3711"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3713"
+ y="483.09396"
+ x="591.47559"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan3715"
+ x="591.47559"
+ y="483.09396">SHA</tspan></text>
+ </g>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ d="M 158.42099,162.17755 L 300.49915,189.57362"
+ id="path3717"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ d="M 162.96742,234.55883 C 166.53767,233.13073 301.2132,203.14059 301.2132,203.14059"
+ id="path3719"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ d="M 162.7053,312.06953 L 303.35535,341.66649"
+ id="path3721"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ d="M 160.30102,384.18868 L 302.6413,358.80371"
+ id="path3723"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ d="M 340.74813,350.49723 L 479.70796,268.57116"
+ id="path3725"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ d="M 341.59324,198.14223 L 480.55307,259.36082"
+ id="path3727"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-size:20;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:blue;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="387.9295"
+ y="82.614281"
+ id="text3342"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan7297"
+ x="387.9295"
+ y="82.614281">share hash tree</tspan></text>
+ <g
+ transform="translate(-277.1965,175.8469)"
+ id="g6278">
+ <path
+ transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ sodipodi:ry="34.073441"
+ sodipodi:rx="34.958466"
+ sodipodi:cy="196.10106"
+ sodipodi:cx="607.56927"
+ id="path6280"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text6282"
+ y="483.09396"
+ x="591.47559"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan6284"
+ x="591.47559"
+ y="483.09396">SHA</tspan></text>
+ </g>
+ <g
+ id="g6374"
+ transform="translate(0,-6.583939)">
+ <path
+ sodipodi:type="arc"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="path6288"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ transform="matrix(0.511994,0,0,0.511994,-170.1473,365.3129)" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="130.1619"
+ y="471.03552"
+ id="text6290"
+ sodipodi:linespacing="100%"><tspan
+ y="471.03552"
+ x="130.1619"
+ id="tspan6366"
+ sodipodi:role="line">s5</tspan></text>
+ </g>
+ <g
+ id="g6379"
+ transform="translate(0,-4.389282)">
+ <path
+ transform="matrix(0.511994,0,0,0.511994,-170.1473,437.7031)"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ sodipodi:ry="34.073441"
+ sodipodi:rx="34.958466"
+ sodipodi:cy="196.10106"
+ sodipodi:cx="607.56927"
+ id="path6296"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text6298"
+ y="544.97565"
+ x="130.2619"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="544.97565"
+ x="130.2619"
+ id="tspan6368"
+ sodipodi:role="line">s6</tspan></text>
+ </g>
+ <g
+ id="g6384"
+ transform="translate(0,-2.194656)">
+ <path
+ sodipodi:type="arc"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="path6304"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ transform="matrix(0.511994,0,0,0.511994,-170.1473,510.0933)" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="132.1519"
+ y="617.0459"
+ id="text6306"
+ sodipodi:linespacing="100%"><tspan
+ y="617.0459"
+ x="132.1519"
+ id="tspan6370"
+ sodipodi:role="line">s7</tspan></text>
+ </g>
+ <g
+ id="g6389">
+ <path
+ transform="matrix(0.511994,0,0,0.511994,-170.1473,582.4835)"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ sodipodi:ry="34.073441"
+ sodipodi:rx="34.958466"
+ sodipodi:cy="196.10106"
+ sodipodi:cx="607.56927"
+ id="path6312"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text6314"
+ y="688.16608"
+ x="130.03189"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="688.16608"
+ x="130.03189"
+ id="tspan6372"
+ sodipodi:role="line">s8</tspan></text>
+ </g>
+ <g
+ id="g6318"
+ transform="translate(-279.3386,20.89783)">
+ <path
+ sodipodi:type="arc"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="path6320"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)" />
+ <text
+ xml:space="preserve"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="591.47559"
+ y="483.09396"
+ id="text6322"
+ sodipodi:linespacing="100%"><tspan
+ y="483.09396"
+ x="591.47559"
+ id="tspan6324"
+ sodipodi:role="line">SHA</tspan></text>
+ </g>
+ <g
+ id="g6326"
+ transform="translate(-101.5579,86.59053)">
+ <path
+ sodipodi:type="arc"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="path6328"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)" />
+ <text
+ xml:space="preserve"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="591.47559"
+ y="483.09396"
+ id="text6330"
+ sodipodi:linespacing="100%"><tspan
+ y="483.09396"
+ x="591.47559"
+ id="tspan6332"
+ sodipodi:role="line">SHA</tspan></text>
+ </g>
+ <path
+ id="path6334"
+ d="M 160.94817,457.746 L 303.02633,494.49705"
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ id="path6336"
+ d="M 162.37628,533.2456 C 165.94653,531.8175 303.74038,508.06402 303.74038,508.06402"
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ id="path6338"
+ d="M 162.11415,609.19714 L 305.88253,646.58992"
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ id="path6340"
+ d="M 162.8282,682.87546 L 305.16848,663.72714"
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ id="path6342"
+ d="M 343.27531,653.86149 L 482.23514,575.05376"
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ id="path6344"
+ d="M 341.0021,499.94733 L 481.52109,562.72508"
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text6346"
+ y="424.95895"
+ x="480.79593"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:blue;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="424.95895"
+ x="480.79593"
+ id="tspan6348"
+ sodipodi:role="line">Merkle Tree</tspan></text>
+ <text
+ sodipodi:linespacing="100%"
+ id="text6350"
+ y="384.32007"
+ x="593.30579"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="384.32007"
+ x="593.30579"
+ id="tspan6352"
+ sodipodi:role="line">"share root hash"</tspan></text>
+ <g
+ id="g6396"
+ transform="translate(65.86388,-62.41649)">
+ <path
+ sodipodi:type="arc"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="path6398"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)" />
+ <text
+ xml:space="preserve"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="591.47559"
+ y="483.09396"
+ id="text6400"
+ sodipodi:linespacing="100%"><tspan
+ y="483.09396"
+ x="591.47559"
+ id="tspan6402"
+ sodipodi:role="line">SHA</tspan></text>
+ </g>
+ <path
+ id="path6404"
+ d="M 516.21962,265.18629 L 653.62028,407.4814"
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ d="M 516.21962,558.30913 L 653.62028,429.30971"
+ id="path6406"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:3,3;stroke-dashoffset:0"
+ d="M 88.872351,202.61777 L 183.98136,204.17694 L 352.37108,321.11424 L 570.65404,564.34383 L 498.9325,650.09786 L 291.56368,394.39495 L 162.15306,280.57598 L 79.517367,263.42517 L 88.872351,202.61777 z "
+ id="path6408" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="430.70282"
+ y="734.79639"
+ id="text7299"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan7301"
+ x="430.70282"
+ y="734.79639">merkle hash chain</tspan><tspan
+ sodipodi:role="line"
+ x="430.70282"
+ y="754.79639"
+ id="tspan7303">to validate s1</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 519.99961,716.92402 C 528.23607,699.12899 558.20121,653.69346 528.55661,615.79625"
+ id="path7305"
+ sodipodi:nodetypes="cc" />
+ </g>
+</svg>
--- /dev/null
+<?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://web.resource.org/cc/"
+ 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="744.09448819"
+ height="1052.3622047"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.44.1"
+ sodipodi:docbase="/home/warner/work/tahoe-misc"
+ sodipodi:docname="file-encoding6.svg">
+ <defs
+ id="defs4">
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Lend"
+ style="overflow:visible;">
+ <path
+ id="path2976"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+ transform="scale(0.8) rotate(180) translate(12.5,0)" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.60354902"
+ inkscape:cx="367.4898"
+ inkscape:cy="564.16839"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ inkscape:window-width="900"
+ inkscape:window-height="756"
+ inkscape:window-x="732"
+ inkscape:window-y="176" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g3308"
+ transform="translate(-492.4404,-287.9192)">
+ <path
+ sodipodi:type="arc"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="path3297"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)" />
+ <text
+ xml:space="preserve"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="591.47559"
+ y="483.09396"
+ id="text3299"
+ sodipodi:linespacing="100%"><tspan
+ y="483.09396"
+ x="591.47559"
+ id="tspan3306"
+ sodipodi:role="line">SHA</tspan></text>
+ </g>
+ <g
+ transform="translate(-361.8975,-287.9192)"
+ id="g3313">
+ <path
+ transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ sodipodi:ry="34.073441"
+ sodipodi:rx="34.958466"
+ sodipodi:cy="196.10106"
+ sodipodi:cx="607.56927"
+ id="path3315"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3317"
+ y="483.09396"
+ x="591.47559"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan3319"
+ x="591.47559"
+ y="483.09396">SHA</tspan></text>
+ </g>
+ <g
+ id="g3321"
+ transform="translate(-427.1689,-180.8987)">
+ <path
+ sodipodi:type="arc"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="path3323"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)" />
+ <text
+ xml:space="preserve"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="591.47559"
+ y="483.09396"
+ id="text3325"
+ sodipodi:linespacing="100%"><tspan
+ y="483.09396"
+ x="591.47559"
+ id="tspan3327"
+ sodipodi:role="line">SHA</tspan></text>
+ </g>
+ <g
+ transform="translate(-234.578,-287.9192)"
+ id="g3345">
+ <path
+ transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ sodipodi:ry="34.073441"
+ sodipodi:rx="34.958466"
+ sodipodi:cy="196.10106"
+ sodipodi:cx="607.56927"
+ id="path3347"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3349"
+ y="483.09396"
+ x="591.47559"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan3351"
+ x="591.47559"
+ y="483.09396">SHA</tspan></text>
+ </g>
+ <g
+ id="g3353"
+ transform="translate(-170.1124,-180.8987)">
+ <path
+ sodipodi:type="arc"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="path3355"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)" />
+ <text
+ xml:space="preserve"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="591.47559"
+ y="483.09396"
+ id="text3357"
+ sodipodi:linespacing="100%"><tspan
+ y="483.09396"
+ x="591.47559"
+ id="tspan3359"
+ sodipodi:role="line">SHA</tspan></text>
+ </g>
+ <g
+ transform="translate(-105.6468,-287.9192)"
+ id="g3361">
+ <path
+ transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ sodipodi:ry="34.073441"
+ sodipodi:rx="34.958466"
+ sodipodi:cy="196.10106"
+ sodipodi:cx="607.56927"
+ id="path3363"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3365"
+ y="483.09396"
+ x="591.47559"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan3367"
+ x="591.47559"
+ y="483.09396">SHA</tspan></text>
+ </g>
+ <rect
+ ry="0"
+ y="47.720215"
+ x="76.855522"
+ height="54.581161"
+ width="62.568695"
+ id="rect2984"
+ style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text2988"
+ y="71.720772"
+ x="84.785179"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="71.720772"
+ x="84.785179"
+ id="tspan2990"
+ sodipodi:role="line">share</tspan></text>
+ <text
+ sodipodi:linespacing="100%"
+ id="text2992"
+ y="93.020752"
+ x="97.243141"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan3042"
+ x="97.243141"
+ y="93.020752">A4</tspan></text>
+ <rect
+ style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="rect3128"
+ width="62.568695"
+ height="54.581161"
+ x="207.39835"
+ y="47.720215"
+ ry="0" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="215.328"
+ y="71.720772"
+ id="text3130"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3132"
+ x="215.328"
+ y="71.720772">share</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="227.78596"
+ y="93.020752"
+ id="text3134"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3272"
+ x="227.78596"
+ y="93.020752">B4</tspan></text>
+ <rect
+ ry="0"
+ y="47.720215"
+ x="334.7179"
+ height="54.581161"
+ width="62.568695"
+ id="rect3186"
+ style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3188"
+ y="71.720772"
+ x="342.64755"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="71.720772"
+ x="342.64755"
+ id="tspan3190"
+ sodipodi:role="line">share</tspan></text>
+ <text
+ sodipodi:linespacing="100%"
+ id="text3192"
+ y="93.020752"
+ x="355.10553"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan3282"
+ x="355.10553"
+ y="93.020752">C4</tspan></text>
+ <rect
+ style="fill:#e3d7f4;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="rect3245"
+ width="62.568695"
+ height="54.581161"
+ x="463.64905"
+ y="47.720215"
+ ry="0" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="471.5787"
+ y="71.720772"
+ id="text3247"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3249"
+ x="471.5787"
+ y="71.720772">share</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="484.03665"
+ y="93.020752"
+ id="text3251"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3293"
+ x="484.03665"
+ y="93.020752">D4</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="479.80331"
+ y="521.89929"
+ id="text3833"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3835"
+ x="479.80331"
+ y="521.89929">share4</tspan></text>
+ <rect
+ style="fill:#ffd5f6;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="rect3837"
+ width="95.533775"
+ height="81.721664"
+ x="608.88721"
+ y="272.46359" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="627.25848"
+ y="292.98965"
+ id="text3839"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3841"
+ x="627.25848"
+ y="292.98965">peer 4</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ d="M 559.39381,305.84288 C 608.88721,309.29591 608.88721,309.29591 608.88721,309.29591"
+ id="path3843" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 106.27121,102.50451 L 108.15211,173.97895"
+ id="path2431" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 238.8751,102.50451 L 237.93464,173.03849"
+ id="path2433" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 366.77673,103.44496 L 366.77673,172.09804"
+ id="path2435" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 495.61881,103.44496 L 495.61881,173.03849"
+ id="path2437" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 489.97609,208.77571 L 438.25116,282.13106"
+ id="path2439" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 370.53854,207.83526 L 420.38255,282.13106"
+ id="path2441" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 236.05374,209.71617 L 183.38836,284.01197"
+ id="path2443" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 110.97347,207.83526 L 164.5793,282.13106"
+ id="path2445" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 178.6861,315.98737 L 289.65957,388.40226"
+ id="path2447" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 426.02527,315.98737 L 316.93271,389.34272"
+ id="path2449" />
+ <rect
+ style="fill:none;fill-opacity:1;stroke:blue;stroke-opacity:1"
+ id="rect3336"
+ width="474.92883"
+ height="334.80142"
+ x="61.129456"
+ y="140.12263" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:blue;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="241.69646"
+ y="263.32199"
+ id="text3338"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3340"
+ x="241.69646"
+ y="263.32199">Merkle Tree</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:blue;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="68.653069"
+ y="466.45987"
+ id="text3342"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3344"
+ x="68.653069"
+ y="466.45987">block hash tree</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="321.63498"
+ y="405.33044"
+ id="text3346"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3352"
+ x="321.63498"
+ y="405.33044">"block root hash"</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="88.648125"
+ y="598.72913"
+ id="text3632"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan3634"
+ x="88.648125"
+ y="598.72913">block</tspan><tspan
+ sodipodi:role="line"
+ x="88.648125"
+ y="618.72913"
+ id="tspan3636">root hashes</tspan></text>
+ <g
+ id="g3642"
+ transform="translate(-350.3156,360.201)">
+ <path
+ sodipodi:type="arc"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="path3644"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)" />
+ <text
+ xml:space="preserve"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="591.47559"
+ y="483.09396"
+ id="text3646"
+ sodipodi:linespacing="100%"><tspan
+ y="483.09396"
+ x="591.47559"
+ id="tspan3648"
+ sodipodi:role="line">SHA</tspan></text>
+ </g>
+ <g
+ id="g3675"
+ transform="translate(52.10837,496.9171)">
+ <path
+ transform="matrix(0.511994,0,0,0.511994,-233.9701,54.30905)"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ sodipodi:ry="34.073441"
+ sodipodi:rx="34.958466"
+ sodipodi:cy="196.10106"
+ sodipodi:cx="607.56927"
+ id="path5669"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3653"
+ y="160.03162"
+ x="68.92907"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="160.03162"
+ x="68.92907"
+ id="tspan3655"
+ sodipodi:role="line">s1</tspan></text>
+ </g>
+ <g
+ id="g3686"
+ transform="translate(52.10837,491.5603)">
+ <path
+ sodipodi:type="arc"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="path3657"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ transform="matrix(0.511994,0,0,0.511994,-231.4293,132.056)" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="68.029869"
+ y="239.32857"
+ id="text3659"
+ sodipodi:linespacing="100%"><tspan
+ y="239.32857"
+ x="68.029869"
+ id="tspan3680"
+ sodipodi:role="line">s2</tspan></text>
+ </g>
+ <g
+ id="g3691"
+ transform="translate(52.10837,489.4639)">
+ <path
+ transform="matrix(0.511994,0,0,0.511994,-229.5194,206.5426)"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ sodipodi:ry="34.073441"
+ sodipodi:rx="34.958466"
+ sodipodi:cy="196.10106"
+ sodipodi:cx="607.56927"
+ id="path3663"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3665"
+ y="313.49518"
+ x="70.729767"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="313.49518"
+ x="70.729767"
+ id="tspan3682"
+ sodipodi:role="line">s3</tspan></text>
+ </g>
+ <g
+ id="g3696"
+ transform="translate(52.10837,496.9171)">
+ <path
+ sodipodi:type="arc"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ id="path3669"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ transform="matrix(0.511994,0,0,0.511994,-229.5194,271.4796)" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="72.669769"
+ y="377.16217"
+ id="text3671"
+ sodipodi:linespacing="100%"><tspan
+ y="377.16217"
+ x="72.669769"
+ id="tspan3684"
+ sodipodi:role="line">s4</tspan></text>
+ </g>
+ <g
+ transform="translate(-352.4577,205.2519)"
+ id="g3701">
+ <path
+ transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ sodipodi:ry="34.073441"
+ sodipodi:rx="34.958466"
+ sodipodi:cy="196.10106"
+ sodipodi:cx="607.56927"
+ id="path3703"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3705"
+ y="483.09396"
+ x="591.47559"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan3707"
+ x="591.47559"
+ y="483.09396">SHA</tspan></text>
+ </g>
+ <g
+ transform="translate(-233.9253,270.9446)"
+ id="g3709">
+ <path
+ transform="matrix(0.511994,0,0,0.511994,289.5084,379.3664)"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ sodipodi:ry="34.073441"
+ sodipodi:rx="34.958466"
+ sodipodi:cy="196.10106"
+ sodipodi:cx="607.56927"
+ id="path3711"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text3713"
+ y="483.09396"
+ x="591.47559"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan3715"
+ x="591.47559"
+ y="483.09396">SHA</tspan></text>
+ </g>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ d="M 147.07717,654.57336 L 229.9071,678.8511"
+ id="path3717" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ d="M 148.50528,723.83631 C 152.07553,722.40821 230.62115,692.41807 230.62115,692.41807"
+ id="path3719" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ d="M 151.36148,796.66952 L 232.7633,830.94397"
+ id="path3721" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ d="M 152.07553,868.78867 L 232.04925,848.08119"
+ id="path3723" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ d="M 267.03775,836.65638 L 349.86767,760.96697"
+ id="path3725" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ d="M 266.3237,687.41971 L 349.15362,742.40164"
+ id="path3727" />
+ <rect
+ style="fill:none;fill-opacity:1;stroke:blue;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect5560"
+ width="484.38986"
+ height="374.49551"
+ x="78.049934"
+ y="564.42963" />
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:blue;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="358.2843"
+ y="865.40643"
+ id="text5700"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan5702"
+ x="358.2843"
+ y="865.40643">Merkle Tree</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:blue;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="88.140358"
+ y="930.49945"
+ id="text5704"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan7497"
+ x="88.140358"
+ y="930.49945">share hash tree</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="356.4744"
+ y="786.95703"
+ id="text5566"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan5568"
+ x="356.4744"
+ y="786.95703">"share root hash"</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:3,3;stroke-dashoffset:0"
+ d="M 290.30681,720.03728 L 108.29659,845.9841 L 74.309836,804.80832 L 190.42285,712.9661 L 239.36655,641.22131 L 299.69,669.98266 L 290.30681,720.03728 z "
+ id="path5949"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 32.468525,28.648698 L 557.69466,30.558611 L 561.51449,540.50544 L 374.34299,540.50544 L 296.03655,725.76702 L 80.216355,869.01051 L 30.558611,817.44286 L 164.25254,727.67694 L 234.91933,590.16318 L 219.64002,534.7757 L 36.288351,534.7757 L 32.468525,28.648698 z "
+ id="path5951" />
+ <text
+ xml:space="preserve"
+ style="font-size:20;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ x="370.89407"
+ y="630.30597"
+ id="text7307"
+ sodipodi:linespacing="100%"><tspan
+ sodipodi:role="line"
+ id="tspan7499"
+ x="370.89407"
+ y="630.30597">merkle hash chain</tspan><tspan
+ sodipodi:role="line"
+ id="tspan7501"
+ x="370.89407"
+ y="650.30597">to validate s4</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 444.20214,656.77444 C 435.69736,681.11928 360.49372,712.77648 296.54955,691.10088"
+ id="path7317"
+ sodipodi:nodetypes="cc" />
+ <g
+ transform="translate(221.2501,29.91837)"
+ id="g7322">
+ <path
+ transform="matrix(0.511994,0,0,0.511994,-229.5194,271.4796)"
+ d="M 642.52774 196.10106 A 34.958466 34.073441 0 1 1 572.61081,196.10106 A 34.958466 34.073441 0 1 1 642.52774 196.10106 z"
+ sodipodi:ry="34.073441"
+ sodipodi:rx="34.958466"
+ sodipodi:cy="196.10106"
+ sodipodi:cx="607.56927"
+ id="path7324"
+ style="fill:#ffe6d5;fill-opacity:1;stroke:black;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <text
+ sodipodi:linespacing="100%"
+ id="text7326"
+ y="377.16217"
+ x="72.669769"
+ style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
+ xml:space="preserve"><tspan
+ sodipodi:role="line"
+ id="tspan7328"
+ x="72.669769"
+ y="377.16217">s4</tspan></text>
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?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:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="278.36371"
+ height="295.09766"
+ id="svg2841"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="mut.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ version="1.0">
+ <defs
+ id="defs2843">
+ <marker
+ inkscape:stockid="Arrow1Send"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Send"
+ style="overflow:visible">
+ <path
+ id="path7680"
+ d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.2,0,0,-0.2,-1.2,0)" />
+ </marker>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient7760">
+ <stop
+ style="stop-color:#ca1818;stop-opacity:1;"
+ offset="0"
+ id="stop7762" />
+ <stop
+ style="stop-color:#ca1818;stop-opacity:0;"
+ offset="1"
+ id="stop7764" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Mend"
+ style="overflow:visible">
+ <path
+ id="path3751"
+ d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend"
+ style="overflow:visible">
+ <path
+ id="path3745"
+ d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective2849" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7760"
+ id="linearGradient7766"
+ x1="-0.41100001"
+ y1="412.36218"
+ x2="160.411"
+ y2="412.36218"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7760"
+ id="linearGradient7788"
+ gradientUnits="userSpaceOnUse"
+ x1="-0.41100001"
+ y1="412.36218"
+ x2="160.411"
+ y2="412.36218" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7760"
+ id="linearGradient7793"
+ gradientUnits="userSpaceOnUse"
+ x1="-0.41100001"
+ y1="412.36218"
+ x2="160.411"
+ y2="412.36218" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="3.3332515"
+ inkscape:cx="210.25878"
+ inkscape:cy="123.41841"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer2"
+ showgrid="true"
+ inkscape:window-width="1598"
+ inkscape:window-height="1198"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ showguides="true"
+ inkscape:snap-global="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2883"
+ visible="true"
+ enabled="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2846">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-217.17997,-198.38081)">
+ <rect
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#250f25;stroke-width:0.61650002;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="rect2885"
+ width="7.5"
+ height="0"
+ x="314.88028"
+ y="111.80756" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot7772"
+ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ transform="matrix(0.75,0,0,0.75,89.880266,80.035916)"><flowRegion
+ id="flowRegion7774"><rect
+ id="rect7776"
+ width="378.57144"
+ height="65.714287"
+ x="-35.714287"
+ y="384.50504"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter" /></flowRegion><flowPara
+ id="flowPara7778" /></flowRoot> <path
+ sodipodi:type="arc"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="path8437"
+ sodipodi:cx="420"
+ sodipodi:cy="212.36218"
+ sodipodi:rx="80"
+ sodipodi:ry="20"
+ d="M 500,212.36218 A 80,20 0 1 1 340,212.36218 A 80,20 0 1 1 500,212.36218 z"
+ transform="matrix(0.3375,0,0,0.3375,257.2117,137.23422)" />
+ <path
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.2919375;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ d="M 438.13856,269.91499 C 446.63381,280.47335 453.38314,289.63578 453.38314,289.63578"
+ id="path9557"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.33749998px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ d="M 463.64994,293.69223 C 463.64994,297.55233 463.64994,302.1186 463.64994,302.1186"
+ id="path11208"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-size:30px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="467.92987"
+ y="288.97491"
+ id="text16751"><tspan
+ sodipodi:role="line"
+ id="tspan16753"
+ x="467.92987"
+ y="288.97491" /></text>
+ <text
+ xml:space="preserve"
+ style="font-size:30px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="464.14178"
+ y="291.24774"
+ id="text16755"><tspan
+ sodipodi:role="line"
+ id="tspan16757"
+ x="464.14178"
+ y="291.24774" /></text>
+ <text
+ transform="scale(0.8196045,1.2201006)"
+ xml:space="preserve"
+ style="font-size:13.5px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="589.64325"
+ y="218.94211"
+ id="text16759"
+ sodipodi:linespacing="100%"><tspan
+ y="218.94211"
+ x="589.64325"
+ id="tspan16761"
+ sodipodi:role="line" /></text>
+ <path
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.32201561px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ d="M 372.25866,281.18125 C 391.14052,275.94279 412.5754,263.5215 412.5754,263.5215"
+ id="path21360"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.33749998px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ d="M 467.95624,303.64299 C 465.78336,307.89979 463.10818,312.90038 463.10818,312.90038"
+ id="path4716"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.10000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="445.04538"
+ y="385.5498"
+ id="text4926"><tspan
+ sodipodi:role="line"
+ id="tspan4928"
+ x="445.04538"
+ y="385.5498">shares</tspan></text>
+ <path
+ sodipodi:type="arc"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="path4938"
+ sodipodi:cx="420"
+ sodipodi:cy="212.36218"
+ sodipodi:rx="80"
+ sodipodi:ry="20"
+ d="M 500,212.36218 A 80,20 0 1 1 340,212.36218 A 80,20 0 1 1 500,212.36218 z"
+ transform="matrix(0,0.1683097,-0.3399575,0,508.99378,294.48202)" />
+ <path
+ transform="matrix(0,0.1683097,-0.3399575,0,517.99378,294.48202)"
+ d="M 500,212.36218 A 80,20 0 1 1 340,212.36218 A 80,20 0 1 1 500,212.36218 z"
+ sodipodi:ry="20"
+ sodipodi:rx="80"
+ sodipodi:cy="212.36218"
+ sodipodi:cx="420"
+ id="path4940"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="path4942"
+ sodipodi:cx="420"
+ sodipodi:cy="212.36218"
+ sodipodi:rx="80"
+ sodipodi:ry="20"
+ d="M 500,212.36218 A 80,20 0 1 1 340,212.36218 A 80,20 0 1 1 500,212.36218 z"
+ transform="matrix(0,0.1683097,-0.3399575,0,526.99378,294.48202)" />
+ <path
+ transform="matrix(0,0.1683097,-0.3399575,0,535.99378,294.48202)"
+ d="M 500,212.36218 A 80,20 0 1 1 340,212.36218 A 80,20 0 1 1 500,212.36218 z"
+ sodipodi:ry="20"
+ sodipodi:rx="80"
+ sodipodi:cy="212.36218"
+ sodipodi:cx="420"
+ id="path4944"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0,0.1683097,-0.3399575,0,542.80003,294.65787)"
+ d="M 500,212.36218 A 80,20 0 1 1 340,212.36218 A 80,20 0 1 1 500,212.36218 z"
+ sodipodi:ry="20"
+ sodipodi:rx="80"
+ sodipodi:cy="212.36218"
+ sodipodi:cx="420"
+ id="path4946"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0,0.1683097,-0.3399575,0,551.80003,294.58742)"
+ d="M 500,212.36218 A 80,20 0 1 1 340,212.36218 A 80,20 0 1 1 500,212.36218 z"
+ sodipodi:ry="20"
+ sodipodi:rx="80"
+ sodipodi:cy="212.36218"
+ sodipodi:cx="420"
+ id="path4948"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ sodipodi:type="arc" />
+ <rect
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:0.21600063px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="rect4950"
+ width="60.860748"
+ height="2.1464994"
+ x="427.86215"
+ y="376.78323" />
+ <path
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.44999999px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ d="M 436.85592,349.56271 C 436.85592,349.56271 434.60592,329.31271 461.60592,329.31271 C 445.85592,333.81271 445.85592,349.56271 445.85592,349.56271"
+ id="path4952" />
+ <path
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.44999999px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ d="M 461.60592,329.31271 C 454.85592,336.06271 454.85592,349.56271 454.85592,349.56271"
+ id="path4954" />
+ <path
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.44999999px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ d="M 461.60592,329.31271 C 463.85592,329.31271 463.85592,349.56271 463.85592,349.56271"
+ id="path4956" />
+ <path
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.44999999px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ d="M 461.60592,329.31271 C 470.60592,329.31271 470.60592,349.56271 470.60592,349.56271"
+ id="path4958" />
+ <path
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.44999999px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ d="M 461.60592,329.31271 C 479.60592,329.31271 479.60592,349.56271 479.60592,349.56271"
+ id="path4960" />
+ <rect
+ y="372.16623"
+ x="427.74518"
+ height="2.1464994"
+ width="60.860748"
+ id="rect4962"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:0.21600063px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter" />
+ <rect
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:0.21600063px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="rect4964"
+ width="60.860748"
+ height="2.1464994"
+ x="427.74518"
+ y="367.66623" />
+ <rect
+ y="363.16623"
+ x="427.74518"
+ height="2.1464994"
+ width="60.860748"
+ id="rect4966"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:0.21600063px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter" />
+ <rect
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:0.21600063px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="rect4968"
+ width="60.860748"
+ height="2.1464994"
+ x="427.74518"
+ y="358.66623" />
+ <rect
+ y="354.16623"
+ x="427.74518"
+ height="2.1464994"
+ width="60.860748"
+ id="rect4970"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:0.21600063px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter" />
+ <rect
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:0.21600063px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="rect4972"
+ width="60.860748"
+ height="2.1464994"
+ x="427.74518"
+ y="354.16623" />
+ <g
+ transform="matrix(0,0.2054517,-0.1664743,0,467.60988,354.01332)"
+ id="g4974"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">
+ <path
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.70842391px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ d="M -0.53492796,252.21639 C -5.5179181,262.28794 39.328998,262.28794 39.328998,262.28794 C 59.260953,262.28794 59.260953,292.50259 59.260953,292.50259"
+ id="path4976" />
+ <path
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.70842391px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ d="M 120.64913,252.36218 C 125.63212,262.43373 80.7852,262.43373 80.7852,262.43373 C 60.85325,262.43373 60.85325,292.64838 60.85325,292.64838"
+ id="path4978" />
+ </g>
+ <path
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.32513919px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ d="M 407.29684,407.56445 L 411.94948,419.32947"
+ id="path4998"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-size:6.50278425px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="468.50412"
+ y="382.92706"
+ id="text5004"
+ sodipodi:linespacing="100%"
+ transform="scale(0.9062658,1.1034291)"><tspan
+ sodipodi:role="line"
+ id="tspan5006"
+ x="468.50412"
+ y="382.92706"
+ style="font-size:8.10000038px">Merkle Tree</tspan></text>
+ <path
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.16140337px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ d="M 418.04929,366.13921 C 402.75501,384.90072 405.78989,392.50491 405.78989,392.50491 L 405.78989,392.50491"
+ id="path5008" />
+ <g
+ id="g9174"
+ transform="matrix(0.7985291,0,0,0.5813416,-172.4015,-45.31981)"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">
+ <path
+ sodipodi:type="arc"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffe6d5;fill-opacity:1;stroke:#000000;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="path9176"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774,196.10106 A 34.958466,34.073441 0 1 1 572.61081,196.10106 A 34.958466,34.073441 0 1 1 642.52774,196.10106 z"
+ transform="matrix(0.512658,0,0,0.4006128,289.10499,398.76956)" />
+ <text
+ xml:space="preserve"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="591.47559"
+ y="483.09396"
+ id="text9178"
+ sodipodi:linespacing="100%"><tspan
+ y="483.09396"
+ x="591.47559"
+ id="tspan9180"
+ sodipodi:role="line" /><tspan
+ y="493.09396"
+ x="591.47559"
+ sodipodi:role="line"
+ id="tspan9182" /><tspan
+ y="503.09396"
+ x="591.47559"
+ sodipodi:role="line"
+ id="tspan9184" /></text>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-size:2.70000005px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="297.6908"
+ y="233.17752"
+ id="text9186"><tspan
+ sodipodi:role="line"
+ x="297.6908"
+ y="233.17752"
+ style="font-size:5px"
+ id="tspan9188">AES-CTR</tspan></text>
+ <g
+ id="g9877"
+ transform="matrix(0.7985291,0,0,0.5813416,-65.298876,150.88501)"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">
+ <path
+ sodipodi:type="arc"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffe6d5;fill-opacity:1;stroke:#000000;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="path9879"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774,196.10106 A 34.958466,34.073441 0 1 1 572.61081,196.10106 A 34.958466,34.073441 0 1 1 642.52774,196.10106 z"
+ transform="matrix(0.512658,0,0,0.4006128,289.10499,398.76956)" />
+ <text
+ xml:space="preserve"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="591.47559"
+ y="483.09396"
+ id="text9881"
+ sodipodi:linespacing="100%"><tspan
+ y="483.09396"
+ x="591.47559"
+ id="tspan9883"
+ sodipodi:role="line" /><tspan
+ y="493.09396"
+ x="591.47559"
+ sodipodi:role="line"
+ id="tspan9885" /><tspan
+ y="503.09396"
+ x="591.47559"
+ sodipodi:role="line"
+ id="tspan9887" /></text>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-size:2.70000005px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="404.19336"
+ y="429.98233"
+ id="text9889"><tspan
+ sodipodi:role="line"
+ x="404.19336"
+ y="429.98233"
+ style="font-size:5px"
+ id="tspan9891">SHA256d</tspan></text>
+ <g
+ id="g9893"
+ transform="matrix(0.7985291,0,0,0.5813416,-7.0974465,151.48502)"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">
+ <path
+ sodipodi:type="arc"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffe6d5;fill-opacity:1;stroke:#000000;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="path9895"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774,196.10106 A 34.958466,34.073441 0 1 1 572.61081,196.10106 A 34.958466,34.073441 0 1 1 642.52774,196.10106 z"
+ transform="matrix(0.512658,0,0,0.4006128,289.10499,398.76956)" />
+ <text
+ xml:space="preserve"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="591.47559"
+ y="483.09396"
+ id="text9897"
+ sodipodi:linespacing="100%"><tspan
+ y="483.09396"
+ x="591.47559"
+ id="tspan9899"
+ sodipodi:role="line" /><tspan
+ y="493.09396"
+ x="591.47559"
+ sodipodi:role="line"
+ id="tspan9901" /><tspan
+ y="503.09396"
+ x="591.47559"
+ sodipodi:role="line"
+ id="tspan9903" /></text>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-size:2.70000005px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="462.39481"
+ y="430.58234"
+ id="text9905"><tspan
+ sodipodi:role="line"
+ x="462.39481"
+ y="430.58234"
+ style="font-size:5px"
+ id="tspan9907">SHA256d</tspan></text>
+ <g
+ id="g9909"
+ transform="matrix(0.7985291,0,0,0.5813416,-37.39819,179.0857)"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">
+ <path
+ sodipodi:type="arc"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffe6d5;fill-opacity:1;stroke:#000000;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="path9911"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774,196.10106 A 34.958466,34.073441 0 1 1 572.61081,196.10106 A 34.958466,34.073441 0 1 1 642.52774,196.10106 z"
+ transform="matrix(0.512658,0,0,0.4006128,289.10499,398.76956)" />
+ <text
+ xml:space="preserve"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="591.47559"
+ y="483.09396"
+ id="text9913"
+ sodipodi:linespacing="100%"><tspan
+ y="483.09396"
+ x="591.47559"
+ id="tspan9915"
+ sodipodi:role="line" /><tspan
+ y="493.09396"
+ x="591.47559"
+ sodipodi:role="line"
+ id="tspan9917" /><tspan
+ y="503.09396"
+ x="591.47559"
+ sodipodi:role="line"
+ id="tspan9919" /></text>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-size:2.70000005px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="432.09406"
+ y="458.18301"
+ id="text9921"><tspan
+ sodipodi:role="line"
+ x="432.09406"
+ y="458.18301"
+ style="font-size:5px"
+ id="tspan9923">SHA256d</tspan></text>
+ <path
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.32513919px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ d="M 424.55591,436.29471 L 429.20855,448.05973"
+ id="path9925"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.32513919px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ d="M 463.55687,407.19399 L 468.20951,418.95901"
+ id="path9927"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.32513919px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ d="M 484.06352,407.70392 L 479.41088,419.46894"
+ id="path9929"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.32513919px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ d="M 425.60846,407.49401 L 420.95582,419.25903"
+ id="path9931"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.32513919px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ d="M 458.90929,435.99471 L 454.25665,447.75973"
+ id="path9933"
+ sodipodi:nodetypes="cc" />
+ <g
+ id="g9935"
+ transform="matrix(0.7985291,0,0,0.5813416,-17.597704,43.482372)"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">
+ <path
+ sodipodi:type="arc"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffe6d5;fill-opacity:1;stroke:#000000;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="path9937"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774,196.10106 A 34.958466,34.073441 0 1 1 572.61081,196.10106 A 34.958466,34.073441 0 1 1 642.52774,196.10106 z"
+ transform="matrix(0.512658,0,0,0.4006128,289.10499,398.76956)" />
+ <text
+ xml:space="preserve"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="591.47559"
+ y="483.09396"
+ id="text9939"
+ sodipodi:linespacing="100%"><tspan
+ y="483.09396"
+ x="591.47559"
+ id="tspan9941"
+ sodipodi:role="line" /><tspan
+ y="493.09396"
+ x="591.47559"
+ sodipodi:role="line"
+ id="tspan9943" /><tspan
+ y="503.09396"
+ x="591.47559"
+ sodipodi:role="line"
+ id="tspan9945" /></text>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-size:2.70000005px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="456.99469"
+ y="322.27969"
+ id="text9947"><tspan
+ sodipodi:role="line"
+ x="456.99469"
+ y="322.27969"
+ style="font-size:5px"
+ id="tspan9949">FEC</tspan></text>
+ <path
+ style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke-width:0.5;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 132.91688,87.962066 L 132.91688,86.612033 L 159.76754,86.612033 L 186.6182,86.612033 L 186.6182,87.962066 L 186.6182,89.3121 L 159.76754,89.3121 L 132.91688,89.3121 L 132.91688,87.962066 z"
+ id="path9993"
+ transform="translate(216.27706,196.47119)" />
+ <path
+ style="opacity:1;fill:#d40000;fill-opacity:1;fill-rule:nonzero;stroke-width:0.5;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 130.51682,147.96354 L 130.51682,146.61351 L 157.21748,146.61351 L 183.91813,146.61351 L 183.91813,147.96354 L 183.91813,149.31357 L 157.21748,149.31357 L 130.51682,149.31357 L 130.51682,147.96354 z"
+ id="path9995"
+ transform="translate(216.27706,196.47119)" />
+ <path
+ style="opacity:1;fill:#d40000;fill-opacity:1;fill-rule:nonzero;stroke-width:0.5;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 26.114257,76.71179 L 26.114257,75.211753 L 53.11492,75.211753 L 80.115583,75.211753 L 80.115583,76.71179 L 80.115583,78.211827 L 53.11492,78.211827 L 26.114257,78.211827 L 26.114257,76.71179 z"
+ id="path9997"
+ transform="translate(216.27706,196.47119)" />
+ <path
+ style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke-width:0.5;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 26.414265,133.7148 L 26.414265,132.21315 L 53.431371,132.21315 L 80.44846,132.21315 L 80.357032,133.63819 L 80.265587,135.06322 L 53.339926,135.13984 L 26.414265,135.21643 L 26.414265,133.7148 z"
+ id="path9999"
+ transform="translate(216.27706,196.47119)" />
+ <path
+ style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke-width:0.5;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 132.91688,87.962066 L 132.91688,86.612033 L 159.76754,86.612033 L 186.6182,86.612033 L 186.6182,87.962066 L 186.6182,89.3121 L 159.76754,89.3121 L 132.91688,89.3121 L 132.91688,87.962066 z"
+ id="path10001"
+ transform="translate(216.27706,196.47119)" />
+ <path
+ style="opacity:1;fill:#e4161b;fill-opacity:1;fill-rule:nonzero;stroke-width:0.5;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 130.51682,147.96354 L 130.51682,146.61351 L 157.21748,146.61351 L 183.91813,146.61351 L 183.91813,147.96354 L 183.91813,149.31357 L 157.21748,149.31357 L 130.51682,149.31357 L 130.51682,147.96354 z"
+ id="path10003"
+ transform="translate(216.27706,196.47119)" />
+ <path
+ style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke-width:0.5;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 26.414265,133.72419 L 26.414265,132.21315 L 53.432178,132.21315 L 80.450089,132.21315 L 80.357839,133.48818 L 80.265587,134.76322 L 73.515421,134.91631 C 69.80283,135.00052 57.686283,135.10673 46.58976,135.15233 L 26.414265,135.23524 L 26.414265,133.72419 z"
+ id="path10045"
+ transform="translate(216.27706,196.47119)" />
+ <path
+ style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke-width:0.5;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 130.51682,147.96354 L 130.51682,146.61351 L 157.21748,146.61351 L 183.91813,146.61351 L 183.91813,147.96354 L 183.91813,149.31357 L 157.21748,149.31357 L 130.51682,149.31357 L 130.51682,147.96354 z"
+ id="path10047"
+ transform="translate(216.27706,196.47119)" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="text"
+ transform="translate(-217.17997,-198.38081)">
+ <path
+ transform="matrix(0.3375,0,0,0.3375,326.62493,224.71999)"
+ d="M 500,212.36218 A 80,20 0 1 1 340,212.36218 A 80,20 0 1 1 500,212.36218 z"
+ sodipodi:ry="20"
+ sodipodi:rx="80"
+ sodipodi:cy="212.36218"
+ sodipodi:cx="420"
+ id="path12528"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ sodipodi:type="arc" />
+ <path
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.33749998px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ d="M 398.91941,217.38625 C 397.86315,236.37897 412.97295,261.62455 412.97295,261.62455"
+ id="path8489"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:type="arc"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="path10092"
+ sodipodi:cx="420"
+ sodipodi:cy="212.36218"
+ sodipodi:rx="80"
+ sodipodi:ry="20"
+ d="M 500,212.36218 A 80,20 0 1 1 340,212.36218 A 80,20 0 1 1 500,212.36218 z"
+ transform="matrix(0.3375,0,0,0.3375,326.62493,224.71999)" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.09999943px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="556.67358"
+ y="169.5114"
+ id="text10094"
+ transform="scale(0.8252145,1.2118062)"><tspan
+ sodipodi:role="line"
+ id="tspan10096"
+ x="556.67358"
+ y="169.5114" /></text>
+ <rect
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="rect13628"
+ width="7.5"
+ height="0"
+ x="524.88025"
+ y="299.30756" />
+ <g
+ id="g16785"
+ transform="matrix(0.364293,0,0,0.4974358,-16.906009,-38.001986)"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">
+ <g
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#00ffff;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="g16787"
+ transform="translate(-210,240)" />
+ <text
+ transform="scale(1.0714114,0.9333483)"
+ id="text16789"
+ y="325.48486"
+ x="362.67249"
+ style="font-size:32.76525116px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ xml:space="preserve"><tspan
+ id="tspan16791"
+ y="325.48486"
+ x="362.67249"
+ sodipodi:role="line" /></text>
+ </g>
+ <text
+ transform="scale(0.9161476,1.0915272)"
+ id="text16795"
+ y="124.86931"
+ x="159.02403"
+ style="font-size:13.94785595px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="124.86931"
+ x="159.02403"
+ id="tspan16797"
+ sodipodi:role="line" /></text>
+ <text
+ xml:space="preserve"
+ style="font-size:13.947855px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="247.0589"
+ y="116.87234"
+ id="text16801"
+ transform="scale(0.7061936,1.4160423)"><tspan
+ sodipodi:role="line"
+ id="tspan16803"
+ x="247.0589"
+ y="116.87234" /></text>
+ <rect
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:1.875;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="rect20335"
+ width="4.5456867"
+ height="0"
+ x="206.55289"
+ y="326.09802" />
+ <rect
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:0.52360517;fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ca1818;stroke-width:0.27742502;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="rect7836"
+ width="54"
+ height="3.375"
+ x="346.5321"
+ y="342.79144" />
+ <text
+ transform="scale(1.0705538,0.934096)"
+ id="text7838"
+ y="377.70102"
+ x="341.13809"
+ style="font-size:6.07499981px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="377.70102"
+ x="341.13809"
+ id="tspan7840"
+ sodipodi:role="line"
+ style="font-size:8.10000038px">salt</tspan></text>
+ <g
+ transform="matrix(0.3375,0,0,0.3375,168.46227,275.21496)"
+ id="g8416"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#00ffff;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">
+ <rect
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:0.52360517;fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ca1818;stroke-width:0.82200003;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="rect8418"
+ width="160"
+ height="10"
+ x="535"
+ y="22.362183" />
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-size:6.07500029px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="332.31949"
+ y="313.88254"
+ id="text8424"
+ transform="scale(1.0714114,0.9333483)"><tspan
+ sodipodi:role="line"
+ id="tspan8426"
+ x="332.31949"
+ y="313.88254"
+ style="font-size:8.10000038px">encryption</tspan><tspan
+ sodipodi:role="line"
+ x="332.31949"
+ y="324.00754"
+ id="tspan8428"
+ style="font-size:8.10000038px"> key</tspan></text>
+ <path
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.33749998px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ d="M 298.98227,329.83819 C 326.42371,330.53571 348.95266,320.06453 348.95266,320.06453"
+ id="path21352"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.33749998px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ d="M 362.28379,341.51001 C 341.45603,329.97307 346.83916,321.99552 346.83916,321.99552"
+ id="path21354"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.2438544px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ d="M 355.39701,305.53135 L 360.98003,293.64584"
+ id="path21358"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-size:6px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="487.03278"
+ y="411.55334"
+ id="text3034"><tspan
+ sodipodi:role="line"
+ id="tspan3036"
+ x="487.03278"
+ y="411.55334" /></text>
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot3254"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ transform="matrix(0.75,0,0,0.75,89.880266,80.035916)"><flowRegion
+ id="flowRegion3256"><rect
+ id="rect3258"
+ width="18.039574"
+ height="36.830799"
+ x="-31.569254"
+ y="-50.306789"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter" /></flowRegion><flowPara
+ id="flowPara3260" /></flowRoot> <rect
+ y="198.60286"
+ x="219.6953"
+ height="24.165203"
+ width="107.25604"
+ id="rect3282"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#250f25;stroke-width:0.44410068;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter" />
+ <rect
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:0.52360517;fill:#e4161b;fill-opacity:1;fill-rule:nonzero;stroke:#250f25;stroke-width:0.13748316;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="rect5573"
+ width="54.139946"
+ height="3.3068728"
+ x="242.37775"
+ y="271.45877" />
+ <text
+ xml:space="preserve"
+ style="font-size:11.05827236px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="235.36351"
+ y="301.57739"
+ id="text7107"
+ transform="scale(1.0705539,0.9340959)"><tspan
+ sodipodi:role="line"
+ id="tspan7109"
+ x="235.36351"
+ y="301.57739"
+ style="font-size:8.10000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">write key</tspan></text>
+ <text
+ transform="scale(1.0705539,0.9340959)"
+ id="text7768"
+ y="362.28162"
+ x="234.52074"
+ style="font-size:11.05827236px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="362.28162"
+ x="234.52074"
+ id="tspan7770"
+ sodipodi:role="line"
+ style="font-size:8.10000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">read key</tspan></text>
+ <rect
+ y="356.53317"
+ x="230.62067"
+ height="24.165203"
+ width="107.25604"
+ id="rect3291"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#250f25;stroke-width:0.44410068;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter" />
+ <text
+ xml:space="preserve"
+ style="font-size:6.07500029px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="248.95004"
+ y="370.59125"
+ id="text3246"><tspan
+ sodipodi:role="line"
+ id="tspan3248"
+ x="248.95004"
+ y="370.59125"
+ style="font-size:8.10000038px">verifying (public) key</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:6.07500029px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="239.46277"
+ y="213.58257"
+ id="text3328"><tspan
+ sodipodi:role="line"
+ x="239.46277"
+ y="213.58257"
+ style="font-size:8.10000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke-width:0;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:0;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="tspan3021">signing (private) key</tspan></text>
+ <rect
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:0.52360517;fill:#f22a33;fill-opacity:1;fill-rule:nonzero;stroke:#250f25;stroke-width:0.13748316;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="rect4024"
+ width="54.139946"
+ height="3.3068728"
+ x="242.55493"
+ y="328.39029" />
+ <text
+ xml:space="preserve"
+ style="font-size:6.07500029px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="381.61792"
+ y="386.57251"
+ id="text4229"><tspan
+ sodipodi:role="line"
+ id="tspan4231"
+ x="381.61792"
+ y="386.57251" /></text>
+ <path
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ d="M 234.50363,224.362 L 234.50363,354.01202"
+ id="path4243"
+ inkscape:connector-type="polyline" />
+ <rect
+ y="241.14568"
+ x="288.69962"
+ height="24.165203"
+ width="107.25604"
+ id="rect5564"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:1;fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#250f25;stroke-width:0.44410068;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter" />
+ <text
+ xml:space="preserve"
+ style="font-size:6.07500029px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="306.05878"
+ y="255.20375"
+ id="text5566"><tspan
+ sodipodi:role="line"
+ id="tspan5568"
+ x="306.05878"
+ y="255.20375"
+ style="font-size:8.10000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">encrypted signing key</tspan></text>
+ <path
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.375;stroke-linecap:butt;stroke-linejoin:miter;marker-mid:none;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ d="M 279.02164,269.72178 C 281.56206,241.33051 292.24088,235.15181 292.24088,235.15181"
+ id="path5574"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.375;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ d="M 285.08543,222.90932 L 291.78123,230.87533"
+ id="path6618"
+ inkscape:connector-type="polyline"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.375;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ d="M 322.35949,233.1782 L 335.48526,239.16028"
+ id="path8979"
+ sodipodi:nodetypes="cc" />
+ <text
+ transform="scale(1.0705539,0.9340959)"
+ id="text9528"
+ y="462.90314"
+ x="245.50374"
+ style="font-size:11.05827236px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="462.90314"
+ x="245.50374"
+ id="tspan9530"
+ sodipodi:role="line"
+ style="font-size:8.10000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">verify cap</tspan></text>
+ <rect
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:0.52360517;fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#250f25;stroke-width:0.19443056;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="rect9554"
+ width="108.27989"
+ height="3.3068728"
+ x="222.74568"
+ y="419.13055" />
+ <rect
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:0.2415408px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="rect16799"
+ width="171.15405"
+ height="13.22591"
+ x="222.05762"
+ y="440.96823" />
+ <text
+ xml:space="preserve"
+ style="font-size:6.07500029px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="279.37097"
+ y="462.55542"
+ id="text3313"><tspan
+ sodipodi:role="line"
+ x="279.37097"
+ y="462.55542"
+ id="tspan3317"
+ style="font-size:8.10000038px">read-write cap</tspan></text>
+ <path
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#00ff00;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ d="M 222.87392,420.82386 L 222.87392,419.36856 L 276.84166,419.36856 L 330.8094,419.36856 L 330.8094,420.82386 L 330.8094,422.27917 L 276.84166,422.27917 L 222.87392,422.27917 L 222.87392,420.82386 z"
+ id="path9564" />
+ <text
+ transform="scale(1.0705539,0.9340959)"
+ id="text9566"
+ y="483.10208"
+ x="304.77203"
+ style="font-size:11.05827236px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="483.10208"
+ x="304.77203"
+ id="tspan9568"
+ sodipodi:role="line"
+ style="font-size:6px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">verify cap</tspan></text>
+ <rect
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:0.52360517;fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#250f25;stroke-width:0.19443056;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="rect9570"
+ width="108.27989"
+ height="3.3068728"
+ x="281.14557"
+ y="443.04819" />
+ <path
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#00ff00;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ d="M 281.27383,444.74153 L 281.27383,443.28622 L 335.24158,443.28622 L 389.20931,443.28622 L 389.20931,444.74153 L 389.20931,446.19684 L 335.24158,446.19684 L 281.27383,446.19684 L 281.27383,444.74153 z"
+ id="path9572" />
+ <rect
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:0.52360517;fill:#f22a33;fill-opacity:1;fill-rule:nonzero;stroke:#250f25;stroke-width:0.13748316;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="rect9574"
+ width="54.139946"
+ height="3.3068728"
+ x="225.99055"
+ y="442.97894" />
+ <text
+ xml:space="preserve"
+ style="font-size:11.05827236px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="223.80324"
+ y="483.19937"
+ id="text9576"
+ transform="scale(1.0705539,0.9340959)"><tspan
+ sodipodi:role="line"
+ id="tspan9578"
+ x="223.80324"
+ y="483.19937"
+ style="font-size:6px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">write key</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:6.07500029px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="279.37097"
+ y="490.32758"
+ id="text9582"><tspan
+ sodipodi:role="line"
+ x="279.37097"
+ y="490.32758"
+ id="tspan9584"
+ style="font-size:8.10000038px">read-only cap</tspan></text>
+ <text
+ transform="scale(1.0705539,0.9340959)"
+ id="text9586"
+ y="512.94104"
+ x="305.00543"
+ style="font-size:11.05827236px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ xml:space="preserve"><tspan
+ y="512.94104"
+ x="305.00543"
+ id="tspan9588"
+ sodipodi:role="line"
+ style="font-size:6px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">verify cap</tspan></text>
+ <rect
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:0.52360517;fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#250f25;stroke-width:0.19443056;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="rect9590"
+ width="108.27989"
+ height="3.3068728"
+ x="281.14554"
+ y="470.82034" />
+ <path
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#00ff00;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ d="M 281.27383,472.51368 L 281.27383,471.05837 L 335.24157,471.05837 L 389.2093,471.05837 L 389.2093,472.51368 L 389.2093,473.96898 L 335.24157,473.96898 L 281.27383,473.96898 L 281.27383,472.51368 z"
+ id="path9592" />
+ <rect
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;opacity:0.52360517;fill:#f22a33;fill-opacity:1;fill-rule:nonzero;stroke:#250f25;stroke-width:0.13748316;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="rect9594"
+ width="54.139946"
+ height="3.3068728"
+ x="225.99054"
+ y="470.7511" />
+ <text
+ xml:space="preserve"
+ style="font-size:11.05827236px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="224.83044"
+ y="512.93097"
+ id="text9596"
+ transform="scale(1.0705539,0.9340959)"><tspan
+ sodipodi:role="line"
+ id="tspan9598"
+ x="224.83044"
+ y="512.93097"
+ style="font-size:6px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">read key</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.10000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="384.58023"
+ y="210.64319"
+ id="text3025"><tspan
+ sodipodi:role="line"
+ id="tspan3027"
+ x="384.58023"
+ y="210.64319">plaintext</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.10000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="451.8754"
+ y="298.79443"
+ id="text3029"><tspan
+ sodipodi:role="line"
+ id="tspan3031"
+ x="451.8754"
+ y="298.79443">ciphertext</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.10000038px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="102.84189"
+ y="100.84377"
+ id="text3459"
+ transform="translate(218.99833,196.47119)"><tspan
+ sodipodi:role="line"
+ id="tspan3461"
+ x="102.84189"
+ y="100.84377" /></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 48.719461,27.732616 L 48.719461,41.723846"
+ id="path3512"
+ transform="translate(218.99833,196.47119)"
+ inkscape:connector-type="polyline" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 267.71779,255.74642 L 267.71779,269.73765"
+ id="path4829"
+ inkscape:connector-type="polyline" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 266.96826,282.47967 L 266.96826,296.4709"
+ id="path4831"
+ inkscape:connector-type="polyline" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 266.96826,312.96055 L 266.96826,326.95178"
+ id="path4833"
+ inkscape:connector-type="polyline" />
+ <rect
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:0.14901878px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="rect5110"
+ width="113.09831"
+ height="7.6182923"
+ x="221.60002"
+ y="417.24417" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 49.877177,187.22739 L 50.127816,194.49593"
+ id="path5112"
+ transform="translate(218.99833,196.47119)"
+ inkscape:connector-type="polyline" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;marker-mid:none;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+ d="M 50.127816,212.04066 L 50.127816,219.3092"
+ id="path5641"
+ transform="translate(218.99833,196.47119)"
+ inkscape:connector-type="polyline" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 22.500552,81.301996 C 3.3317037,108.63786 -8.6943462,156.11861 6.9001691,245.40603"
+ id="path7224"
+ transform="translate(218.99833,196.47119)"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 240.57714,332.04074 C 221.40829,359.37661 207.8822,408.95742 225.87678,470.34415"
+ id="path7753"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 90.602225,227.40558 L 105.30258,246.00604"
+ id="path7755"
+ transform="translate(218.99833,196.47119)"
+ inkscape:connector-type="polyline"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 367.86051,447.5929 L 367.5605,469.79345"
+ id="path8286"
+ inkscape:connector-type="polyline"
+ sodipodi:nodetypes="cc" />
+ <g
+ id="g9190"
+ transform="matrix(0.7985291,0,0,0.5813416,-211.70247,-29.719429)"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">
+ <path
+ sodipodi:type="arc"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffe6d5;fill-opacity:1;stroke:#000000;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="path9192"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774,196.10106 A 34.958466,34.073441 0 1 1 572.61081,196.10106 A 34.958466,34.073441 0 1 1 642.52774,196.10106 z"
+ transform="matrix(0.512658,0,0,0.4006128,289.10499,398.76956)" />
+ <text
+ xml:space="preserve"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="591.47559"
+ y="483.09396"
+ id="text9194"
+ sodipodi:linespacing="100%"><tspan
+ y="483.09396"
+ x="591.47559"
+ id="tspan9196"
+ sodipodi:role="line" /><tspan
+ y="493.09396"
+ x="591.47559"
+ sodipodi:role="line"
+ id="tspan9198" /><tspan
+ y="503.09396"
+ x="591.47559"
+ sodipodi:role="line"
+ id="tspan9200" /></text>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-size:2.70000005px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="257.18979"
+ y="245.77785"
+ id="text9202"><tspan
+ sodipodi:role="line"
+ x="257.18979"
+ y="245.77785"
+ id="tspan9204"
+ style="font-size:5px">SHA256d</tspan><tspan
+ sodipodi:role="line"
+ x="257.18979"
+ y="252.02785"
+ style="font-size:5px"
+ id="tspan9206">truncated</tspan></text>
+ <g
+ id="g9208"
+ transform="matrix(0.7985291,0,0,0.5813416,-211.70247,28.482004)"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">
+ <path
+ sodipodi:type="arc"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffe6d5;fill-opacity:1;stroke:#000000;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="path9210"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774,196.10106 A 34.958466,34.073441 0 1 1 572.61081,196.10106 A 34.958466,34.073441 0 1 1 642.52774,196.10106 z"
+ transform="matrix(0.512658,0,0,0.4006128,289.10499,398.76956)" />
+ <text
+ xml:space="preserve"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="591.47559"
+ y="483.09396"
+ id="text9212"
+ sodipodi:linespacing="100%"><tspan
+ y="483.09396"
+ x="591.47559"
+ id="tspan9214"
+ sodipodi:role="line" /><tspan
+ y="493.09396"
+ x="591.47559"
+ sodipodi:role="line"
+ id="tspan9216" /><tspan
+ y="503.09396"
+ x="591.47559"
+ sodipodi:role="line"
+ id="tspan9218" /></text>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-size:2.70000005px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="257.18979"
+ y="303.97925"
+ id="text9220"><tspan
+ sodipodi:role="line"
+ x="257.18979"
+ y="303.97925"
+ id="tspan9222"
+ style="font-size:5px">SHA256d</tspan><tspan
+ sodipodi:role="line"
+ x="257.18979"
+ y="310.22925"
+ style="font-size:5px"
+ id="tspan9224">truncated</tspan></text>
+ <g
+ id="g9226"
+ transform="matrix(0.7985291,0,0,0.5813416,-127.4004,35.982184)"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">
+ <path
+ sodipodi:type="arc"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffe6d5;fill-opacity:1;stroke:#000000;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="path9228"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774,196.10106 A 34.958466,34.073441 0 1 1 572.61081,196.10106 A 34.958466,34.073441 0 1 1 642.52774,196.10106 z"
+ transform="matrix(0.512658,0,0,0.4006128,289.10499,398.76956)" />
+ <text
+ xml:space="preserve"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="591.47559"
+ y="483.09396"
+ id="text9230"
+ sodipodi:linespacing="100%"><tspan
+ y="483.09396"
+ x="591.47559"
+ id="tspan9232"
+ sodipodi:role="line" /><tspan
+ y="493.09396"
+ x="591.47559"
+ sodipodi:role="line"
+ id="tspan9234" /><tspan
+ y="503.09396"
+ x="591.47559"
+ sodipodi:role="line"
+ id="tspan9236" /></text>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-size:2.70000005px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="341.49188"
+ y="311.47946"
+ id="text9238"><tspan
+ sodipodi:role="line"
+ x="341.49188"
+ y="311.47946"
+ id="tspan9240"
+ style="font-size:5px">SHA256d</tspan><tspan
+ sodipodi:role="line"
+ x="341.49188"
+ y="317.72946"
+ style="font-size:5px"
+ id="tspan9242">truncated</tspan></text>
+ <g
+ id="g9244"
+ transform="matrix(0.7985291,0,0,0.5813416,-210.80245,122.98432)"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">
+ <path
+ sodipodi:type="arc"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffe6d5;fill-opacity:1;stroke:#000000;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="path9246"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774,196.10106 A 34.958466,34.073441 0 1 1 572.61081,196.10106 A 34.958466,34.073441 0 1 1 642.52774,196.10106 z"
+ transform="matrix(0.512658,0,0,0.4006128,289.10499,398.76956)" />
+ <text
+ xml:space="preserve"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="591.47559"
+ y="483.09396"
+ id="text9248"
+ sodipodi:linespacing="100%"><tspan
+ y="483.09396"
+ x="591.47559"
+ id="tspan9250"
+ sodipodi:role="line" /><tspan
+ y="493.09396"
+ x="591.47559"
+ sodipodi:role="line"
+ id="tspan9252" /><tspan
+ y="503.09396"
+ x="591.47559"
+ sodipodi:role="line"
+ id="tspan9254" /></text>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-size:2.70000005px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="258.08981"
+ y="398.4816"
+ id="text9256"><tspan
+ sodipodi:role="line"
+ x="258.08981"
+ y="398.4816"
+ id="tspan9258"
+ style="font-size:5px">SHA256d</tspan><tspan
+ sodipodi:role="line"
+ x="258.08981"
+ y="404.7316"
+ style="font-size:5px"
+ id="tspan9260">truncated</tspan></text>
+ <g
+ id="g9262"
+ transform="matrix(0.7985291,0,0,0.5813416,-52.098552,-13.519031)"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter">
+ <path
+ sodipodi:type="arc"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#ffe6d5;fill-opacity:1;stroke:#000000;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="path9264"
+ sodipodi:cx="607.56927"
+ sodipodi:cy="196.10106"
+ sodipodi:rx="34.958466"
+ sodipodi:ry="34.073441"
+ d="M 642.52774,196.10106 A 34.958466,34.073441 0 1 1 572.61081,196.10106 A 34.958466,34.073441 0 1 1 642.52774,196.10106 z"
+ transform="matrix(0.512658,0,0,0.4006128,289.10499,398.76956)" />
+ <text
+ xml:space="preserve"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="591.47559"
+ y="483.09396"
+ id="text9266"
+ sodipodi:linespacing="100%"><tspan
+ y="483.09396"
+ x="591.47559"
+ id="tspan9268"
+ sodipodi:role="line" /><tspan
+ y="493.09396"
+ x="591.47559"
+ sodipodi:role="line"
+ id="tspan9270" /><tspan
+ y="503.09396"
+ x="591.47559"
+ sodipodi:role="line"
+ id="tspan9272" /></text>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-size:2.70000005px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="417.99377"
+ y="264.97833"
+ id="text9274"><tspan
+ sodipodi:role="line"
+ x="417.99377"
+ y="264.97833"
+ style="font-size:5px"
+ id="tspan9276">AES-CTR</tspan></text>
+ <rect
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:0.07011827px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="rect9845"
+ width="20.741352"
+ height="9.1972332"
+ x="395.21106"
+ y="396.4776"
+ inkscape:transform-center-y="4.6611973"
+ inkscape:transform-center-x="1.720467e-05" />
+ <path
+ style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke-width:0.5;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 395.27984,401.04002 L 395.27984,396.56484 L 405.56868,396.56484 L 415.85752,396.56484 L 415.85752,401.04002 L 415.85752,405.51519 L 405.56868,405.51519 L 395.27984,405.51519 L 395.27984,401.04002 z"
+ id="path9847"
+ inkscape:transform-center-x="0.013044945"
+ inkscape:transform-center-y="4.6250009" />
+ <text
+ xml:space="preserve"
+ style="font-size:5px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="397.93158"
+ y="402.57623"
+ id="text9849"><tspan
+ sodipodi:role="line"
+ id="tspan9851"
+ x="397.93158"
+ y="402.57623">share 1</tspan></text>
+ <rect
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:0.07011827px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="rect9853"
+ width="20.741352"
+ height="9.1972332"
+ x="421.31168"
+ y="396.4776"
+ inkscape:transform-center-y="4.6611973"
+ inkscape:transform-center-x="1.720467e-05" />
+ <path
+ style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke-width:0.5;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 421.38048,401.04003 L 421.38048,396.56485 L 431.66932,396.56485 L 441.95816,396.56485 L 441.95816,401.04003 L 441.95816,405.5152 L 431.66932,405.5152 L 421.38048,405.5152 L 421.38048,401.04003 z"
+ id="path9855"
+ inkscape:transform-center-x="0.013044945"
+ inkscape:transform-center-y="4.6250009" />
+ <text
+ xml:space="preserve"
+ style="font-size:5px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="424.0322"
+ y="402.57623"
+ id="text9857"><tspan
+ sodipodi:role="line"
+ id="tspan9859"
+ x="424.0322"
+ y="402.57623">share 2</tspan></text>
+ <rect
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:0.07011827px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="rect9861"
+ width="20.741352"
+ height="9.1972332"
+ x="446.81232"
+ y="396.4776"
+ inkscape:transform-center-y="4.6611973"
+ inkscape:transform-center-x="1.720467e-05" />
+ <path
+ style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke-width:0.5;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 446.88111,401.04003 L 446.88111,396.56485 L 457.16995,396.56485 L 467.45879,396.56485 L 467.45879,401.04003 L 467.45879,405.5152 L 457.16995,405.5152 L 446.88111,405.5152 L 446.88111,401.04003 z"
+ id="path9863"
+ inkscape:transform-center-x="0.013044945"
+ inkscape:transform-center-y="4.6250009" />
+ <text
+ xml:space="preserve"
+ style="font-size:5px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="449.53284"
+ y="402.57623"
+ id="text9865"><tspan
+ sodipodi:role="line"
+ id="tspan9867"
+ x="449.53284"
+ y="402.57623">share 3</tspan></text>
+ <rect
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:0.07011827px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="rect9869"
+ width="20.741352"
+ height="9.1972332"
+ x="473.81299"
+ y="396.77759"
+ inkscape:transform-center-y="4.6611973"
+ inkscape:transform-center-x="1.720467e-05" />
+ <path
+ style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:nonzero;stroke-width:0.5;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 473.88178,401.34003 L 473.88178,396.86485 L 484.17062,396.86485 L 494.45946,396.86485 L 494.45946,401.34003 L 494.45946,405.8152 L 484.17062,405.8152 L 473.88178,405.8152 L 473.88178,401.34003 z"
+ id="path9871"
+ inkscape:transform-center-x="0.013044945"
+ inkscape:transform-center-y="4.6250009" />
+ <text
+ xml:space="preserve"
+ style="font-size:5px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ x="476.53351"
+ y="402.87622"
+ id="text9873"><tspan
+ sodipodi:role="line"
+ id="tspan9875"
+ x="476.53351"
+ y="402.87622">share 4</tspan></text>
+ <path
+ style="opacity:1;fill:#e4161b;fill-opacity:1;fill-rule:nonzero;stroke-width:0.5;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 26.414265,133.71319 L 26.414265,132.21315 L 53.414928,132.21315 L 80.415591,132.21315 L 80.415591,133.51519 L 80.415591,134.81725 L 73.166834,135.01523 C 69.180018,135.12413 57.02972,135.21323 46.166171,135.21323 L 26.414265,135.21323 L 26.414265,133.71319 z"
+ id="path10049"
+ transform="translate(216.27706,196.47119)" />
+ <path
+ style="opacity:1;fill:#e4161b;fill-opacity:1;fill-rule:nonzero;stroke-width:0.5;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 9.9138595,248.166 L 9.9138595,246.51596 L 36.764519,246.51596 L 63.615178,246.51596 L 63.615178,248.166 L 63.615178,249.81604 L 36.764519,249.81604 L 9.9138595,249.81604 L 9.9138595,248.166 z"
+ id="path10051"
+ transform="translate(216.27706,196.47119)" />
+ <path
+ style="opacity:1;fill:#e4161b;fill-opacity:1;fill-rule:nonzero;stroke-width:0.5;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 9.9138595,275.91668 L 9.9138595,274.41665 L 36.764519,274.41665 L 63.615178,274.41665 L 63.615178,275.91668 L 63.615178,277.41672 L 36.764519,277.41672 L 9.9138595,277.41672 L 9.9138595,275.91668 z"
+ id="path10055"
+ transform="translate(216.27706,196.47119)" />
+ <rect
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2a1010;stroke-width:0.2415408px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
+ id="rect2971"
+ width="171.15405"
+ height="13.22591"
+ x="222.20229"
+ y="469.1651" />
+ </g>
+</svg>
--- /dev/null
+
+This describes the "RSA-based mutable files" which were shipped in Tahoe v0.8.0.
+
+= Mutable Files =
+
+Mutable File Slots are places with a stable identifier that can hold data
+that changes over time. In contrast to CHK slots, for which the
+URI/identifier is derived from the contents themselves, the Mutable File Slot
+URI remains fixed for the life of the slot, regardless of what data is placed
+inside it.
+
+Each mutable slot is referenced by two different URIs. The "read-write" URI
+grants read-write access to its holder, allowing them to put whatever
+contents they like into the slot. The "read-only" URI is less powerful, only
+granting read access, and not enabling modification of the data. The
+read-write URI can be turned into the read-only URI, but not the other way
+around.
+
+The data in these slots is distributed over a number of servers, using the
+same erasure coding that CHK files use, with 3-of-10 being a typical choice
+of encoding parameters. The data is encrypted and signed in such a way that
+only the holders of the read-write URI will be able to set the contents of
+the slot, and only the holders of the read-only URI will be able to read
+those contents. Holders of either URI will be able to validate the contents
+as being written by someone with the read-write URI. The servers who hold the
+shares cannot read or modify them: the worst they can do is deny service (by
+deleting or corrupting the shares), or attempt a rollback attack (which can
+only succeed with the cooperation of at least k servers).
+
+== Consistency vs Availability ==
+
+There is an age-old battle between consistency and availability. Epic papers
+have been written, elaborate proofs have been established, and generations of
+theorists have learned that you cannot simultaneously achieve guaranteed
+consistency with guaranteed reliability. In addition, the closer to 0 you get
+on either axis, the cost and complexity of the design goes up.
+
+Tahoe's design goals are to largely favor design simplicity, then slightly
+favor read availability, over the other criteria.
+
+As we develop more sophisticated mutable slots, the API may expose multiple
+read versions to the application layer. The tahoe philosophy is to defer most
+consistency recovery logic to the higher layers. Some applications have
+effective ways to merge multiple versions, so inconsistency is not
+necessarily a problem (i.e. directory nodes can usually merge multiple "add
+child" operations).
+
+== The Prime Coordination Directive: "Don't Do That" ==
+
+The current rule for applications which run on top of Tahoe is "do not
+perform simultaneous uncoordinated writes". That means you need non-tahoe
+means to make sure that two parties are not trying to modify the same mutable
+slot at the same time. For example:
+
+ * don't give the read-write URI to anyone else. Dirnodes in a private
+ directory generally satisfy this case, as long as you don't use two
+ clients on the same account at the same time
+ * if you give a read-write URI to someone else, stop using it yourself. An
+ inbox would be a good example of this.
+ * if you give a read-write URI to someone else, call them on the phone
+ before you write into it
+ * build an automated mechanism to have your agents coordinate writes.
+ For example, we expect a future release to include a FURL for a
+ "coordination server" in the dirnodes. The rule can be that you must
+ contact the coordination server and obtain a lock/lease on the file
+ before you're allowed to modify it.
+
+If you do not follow this rule, Bad Things will happen. The worst-case Bad
+Thing is that the entire file will be lost. A less-bad Bad Thing is that one
+or more of the simultaneous writers will lose their changes. An observer of
+the file may not see monotonically-increasing changes to the file, i.e. they
+may see version 1, then version 2, then 3, then 2 again.
+
+Tahoe takes some amount of care to reduce the badness of these Bad Things.
+One way you can help nudge it from the "lose your file" case into the "lose
+some changes" case is to reduce the number of competing versions: multiple
+versions of the file that different parties are trying to establish as the
+one true current contents. Each simultaneous writer counts as a "competing
+version", as does the previous version of the file. If the count "S" of these
+competing versions is larger than N/k, then the file runs the risk of being
+lost completely. [TODO] If at least one of the writers remains running after
+the collision is detected, it will attempt to recover, but if S>(N/k) and all
+writers crash after writing a few shares, the file will be lost.
+
+Note that Tahoe uses serialization internally to make sure that a single
+Tahoe node will not perform simultaneous modifications to a mutable file. It
+accomplishes this by using a weakref cache of the MutableFileNode (so that
+there will never be two distinct MutableFileNodes for the same file), and by
+forcing all mutable file operations to obtain a per-node lock before they
+run. The Prime Coordination Directive therefore applies to inter-node
+conflicts, not intra-node ones.
+
+
+== Small Distributed Mutable Files ==
+
+SDMF slots are suitable for small (<1MB) files that are editing by rewriting
+the entire file. The three operations are:
+
+ * allocate (with initial contents)
+ * set (with new contents)
+ * get (old contents)
+
+The first use of SDMF slots will be to hold directories (dirnodes), which map
+encrypted child names to rw-URI/ro-URI pairs.
+
+=== SDMF slots overview ===
+
+Each SDMF slot is created with a public/private key pair. The public key is
+known as the "verification key", while the private key is called the
+"signature key". The private key is hashed and truncated to 16 bytes to form
+the "write key" (an AES symmetric key). The write key is then hashed and
+truncated to form the "read key". The read key is hashed and truncated to
+form the 16-byte "storage index" (a unique string used as an index to locate
+stored data).
+
+The public key is hashed by itself to form the "verification key hash".
+
+The write key is hashed a different way to form the "write enabler master".
+For each storage server on which a share is kept, the write enabler master is
+concatenated with the server's nodeid and hashed, and the result is called
+the "write enabler" for that particular server. Note that multiple shares of
+the same slot stored on the same server will all get the same write enabler,
+i.e. the write enabler is associated with the "bucket", rather than the
+individual shares.
+
+The private key is encrypted (using AES in counter mode) by the write key,
+and the resulting crypttext is stored on the servers. so it will be
+retrievable by anyone who knows the write key. The write key is not used to
+encrypt anything else, and the private key never changes, so we do not need
+an IV for this purpose.
+
+The actual data is encrypted (using AES in counter mode) with a key derived
+by concatenating the readkey with the IV, the hashing the results and
+truncating to 16 bytes. The IV is randomly generated each time the slot is
+updated, and stored next to the encrypted data.
+
+The read-write URI consists of the write key and the verification key hash.
+The read-only URI contains the read key and the verification key hash. The
+verify-only URI contains the storage index and the verification key hash.
+
+ URI:SSK-RW:b2a(writekey):b2a(verification_key_hash)
+ URI:SSK-RO:b2a(readkey):b2a(verification_key_hash)
+ URI:SSK-Verify:b2a(storage_index):b2a(verification_key_hash)
+
+Note that this allows the read-only and verify-only URIs to be derived from
+the read-write URI without actually retrieving the public keys. Also note
+that it means the read-write agent must validate both the private key and the
+public key when they are first fetched. All users validate the public key in
+exactly the same way.
+
+The SDMF slot is allocated by sending a request to the storage server with a
+desired size, the storage index, and the write enabler for that server's
+nodeid. If granted, the write enabler is stashed inside the slot's backing
+store file. All further write requests must be accompanied by the write
+enabler or they will not be honored. The storage server does not share the
+write enabler with anyone else.
+
+The SDMF slot structure will be described in more detail below. The important
+pieces are:
+
+ * a sequence number
+ * a root hash "R"
+ * the encoding parameters (including k, N, file size, segment size)
+ * a signed copy of [seqnum,R,encoding_params], using the signature key
+ * the verification key (not encrypted)
+ * the share hash chain (part of a Merkle tree over the share hashes)
+ * the block hash tree (Merkle tree over blocks of share data)
+ * the share data itself (erasure-coding of read-key-encrypted file data)
+ * the signature key, encrypted with the write key
+
+The access pattern for read is:
+ * hash read-key to get storage index
+ * use storage index to locate 'k' shares with identical 'R' values
+ * either get one share, read 'k' from it, then read k-1 shares
+ * or read, say, 5 shares, discover k, either get more or be finished
+ * or copy k into the URIs
+ * read verification key
+ * hash verification key, compare against verification key hash
+ * read seqnum, R, encoding parameters, signature
+ * verify signature against verification key
+ * read share data, compute block-hash Merkle tree and root "r"
+ * read share hash chain (leading from "r" to "R")
+ * validate share hash chain up to the root "R"
+ * submit share data to erasure decoding
+ * decrypt decoded data with read-key
+ * submit plaintext to application
+
+The access pattern for write is:
+ * hash write-key to get read-key, hash read-key to get storage index
+ * use the storage index to locate at least one share
+ * read verification key and encrypted signature key
+ * decrypt signature key using write-key
+ * hash signature key, compare against write-key
+ * hash verification key, compare against verification key hash
+ * encrypt plaintext from application with read-key
+ * application can encrypt some data with the write-key to make it only
+ available to writers (use this for transitive read-onlyness of dirnodes)
+ * erasure-code crypttext to form shares
+ * split shares into blocks
+ * compute Merkle tree of blocks, giving root "r" for each share
+ * compute Merkle tree of shares, find root "R" for the file as a whole
+ * create share data structures, one per server:
+ * use seqnum which is one higher than the old version
+ * share hash chain has log(N) hashes, different for each server
+ * signed data is the same for each server
+ * now we have N shares and need homes for them
+ * walk through peers
+ * if share is not already present, allocate-and-set
+ * otherwise, try to modify existing share:
+ * send testv_and_writev operation to each one
+ * testv says to accept share if their(seqnum+R) <= our(seqnum+R)
+ * count how many servers wind up with which versions (histogram over R)
+ * keep going until N servers have the same version, or we run out of servers
+ * if any servers wound up with a different version, report error to
+ application
+ * if we ran out of servers, initiate recovery process (described below)
+
+=== Server Storage Protocol ===
+
+The storage servers will provide a mutable slot container which is oblivious
+to the details of the data being contained inside it. Each storage index
+refers to a "bucket", and each bucket has one or more shares inside it. (In a
+well-provisioned network, each bucket will have only one share). The bucket
+is stored as a directory, using the base32-encoded storage index as the
+directory name. Each share is stored in a single file, using the share number
+as the filename.
+
+The container holds space for a container magic number (for versioning), the
+write enabler, the nodeid which accepted the write enabler (used for share
+migration, described below), a small number of lease structures, the embedded
+data itself, and expansion space for additional lease structures.
+
+ # offset size name
+ 1 0 32 magic verstr "tahoe mutable container v1" plus binary
+ 2 32 20 write enabler's nodeid
+ 3 52 32 write enabler
+ 4 84 8 data size (actual share data present) (a)
+ 5 92 8 offset of (8) count of extra leases (after data)
+ 6 100 368 four leases, 92 bytes each
+ 0 4 ownerid (0 means "no lease here")
+ 4 4 expiration timestamp
+ 8 32 renewal token
+ 40 32 cancel token
+ 72 20 nodeid which accepted the tokens
+ 7 468 (a) data
+ 8 ?? 4 count of extra leases
+ 9 ?? n*92 extra leases
+
+The "extra leases" field must be copied and rewritten each time the size of
+the enclosed data changes. The hope is that most buckets will have four or
+fewer leases and this extra copying will not usually be necessary.
+
+The (4) "data size" field contains the actual number of bytes of data present
+in field (7), such that a client request to read beyond 504+(a) will result
+in an error. This allows the client to (one day) read relative to the end of
+the file. The container size (that is, (8)-(7)) might be larger, especially
+if extra size was pre-allocated in anticipation of filling the container with
+a lot of data.
+
+The offset in (5) points at the *count* of extra leases, at (8). The actual
+leases (at (9)) begin 4 bytes later. If the container size changes, both (8)
+and (9) must be relocated by copying.
+
+The server will honor any write commands that provide the write token and do
+not exceed the server-wide storage size limitations. Read and write commands
+MUST be restricted to the 'data' portion of the container: the implementation
+of those commands MUST perform correct bounds-checking to make sure other
+portions of the container are inaccessible to the clients.
+
+The two methods provided by the storage server on these "MutableSlot" share
+objects are:
+
+ * readv(ListOf(offset=int, length=int))
+ * returns a list of bytestrings, of the various requested lengths
+ * offset < 0 is interpreted relative to the end of the data
+ * spans which hit the end of the data will return truncated data
+
+ * testv_and_writev(write_enabler, test_vector, write_vector)
+ * this is a test-and-set operation which performs the given tests and only
+ applies the desired writes if all tests succeed. This is used to detect
+ simultaneous writers, and to reduce the chance that an update will lose
+ data recently written by some other party (written after the last time
+ this slot was read).
+ * test_vector=ListOf(TupleOf(offset, length, opcode, specimen))
+ * the opcode is a string, from the set [gt, ge, eq, le, lt, ne]
+ * each element of the test vector is read from the slot's data and
+ compared against the specimen using the desired (in)equality. If all
+ tests evaluate True, the write is performed
+ * write_vector=ListOf(TupleOf(offset, newdata))
+ * offset < 0 is not yet defined, it probably means relative to the
+ end of the data, which probably means append, but we haven't nailed
+ it down quite yet
+ * write vectors are executed in order, which specifies the results of
+ overlapping writes
+ * return value:
+ * error: OutOfSpace
+ * error: something else (io error, out of memory, whatever)
+ * (True, old_test_data): the write was accepted (test_vector passed)
+ * (False, old_test_data): the write was rejected (test_vector failed)
+ * both 'accepted' and 'rejected' return the old data that was used
+ for the test_vector comparison. This can be used by the client
+ to detect write collisions, including collisions for which the
+ desired behavior was to overwrite the old version.
+
+In addition, the storage server provides several methods to access these
+share objects:
+
+ * allocate_mutable_slot(storage_index, sharenums=SetOf(int))
+ * returns DictOf(int, MutableSlot)
+ * get_mutable_slot(storage_index)
+ * returns DictOf(int, MutableSlot)
+ * or raises KeyError
+
+We intend to add an interface which allows small slots to allocate-and-write
+in a single call, as well as do update or read in a single call. The goal is
+to allow a reasonably-sized dirnode to be created (or updated, or read) in
+just one round trip (to all N shareholders in parallel).
+
+==== migrating shares ====
+
+If a share must be migrated from one server to another, two values become
+invalid: the write enabler (since it was computed for the old server), and
+the lease renew/cancel tokens.
+
+Suppose that a slot was first created on nodeA, and was thus initialized with
+WE(nodeA) (= H(WEM+nodeA)). Later, for provisioning reasons, the share is
+moved from nodeA to nodeB.
+
+Readers may still be able to find the share in its new home, depending upon
+how many servers are present in the grid, where the new nodeid lands in the
+permuted index for this particular storage index, and how many servers the
+reading client is willing to contact.
+
+When a client attempts to write to this migrated share, it will get a "bad
+write enabler" error, since the WE it computes for nodeB will not match the
+WE(nodeA) that was embedded in the share. When this occurs, the "bad write
+enabler" message must include the old nodeid (e.g. nodeA) that was in the
+share.
+
+The client then computes H(nodeB+H(WEM+nodeA)), which is the same as
+H(nodeB+WE(nodeA)). The client sends this along with the new WE(nodeB), which
+is H(WEM+nodeB). Note that the client only sends WE(nodeB) to nodeB, never to
+anyone else. Also note that the client does not send a value to nodeB that
+would allow the node to impersonate the client to a third node: everything
+sent to nodeB will include something specific to nodeB in it.
+
+The server locally computes H(nodeB+WE(nodeA)), using its own node id and the
+old write enabler from the share. It compares this against the value supplied
+by the client. If they match, this serves as proof that the client was able
+to compute the old write enabler. The server then accepts the client's new
+WE(nodeB) and writes it into the container.
+
+This WE-fixup process requires an extra round trip, and requires the error
+message to include the old nodeid, but does not require any public key
+operations on either client or server.
+
+Migrating the leases will require a similar protocol. This protocol will be
+defined concretely at a later date.
+
+=== Code Details ===
+
+The MutableFileNode class is used to manipulate mutable files (as opposed to
+ImmutableFileNodes). These are initially generated with
+client.create_mutable_file(), and later recreated from URIs with
+client.create_node_from_uri(). Instances of this class will contain a URI and
+a reference to the client (for peer selection and connection).
+
+NOTE: this section is out of date. Please see src/allmydata/interfaces.py
+(the section on IMutableFilesystemNode) for more accurate information.
+
+The methods of MutableFileNode are:
+
+ * download_to_data() -> [deferred] newdata, NotEnoughSharesError
+ * if there are multiple retrieveable versions in the grid, get() returns
+ the first version it can reconstruct, and silently ignores the others.
+ In the future, a more advanced API will signal and provide access to
+ the multiple heads.
+ * update(newdata) -> OK, UncoordinatedWriteError, NotEnoughSharesError
+ * overwrite(newdata) -> OK, UncoordinatedWriteError, NotEnoughSharesError
+
+download_to_data() causes a new retrieval to occur, pulling the current
+contents from the grid and returning them to the caller. At the same time,
+this call caches information about the current version of the file. This
+information will be used in a subsequent call to update(), and if another
+change has occured between the two, this information will be out of date,
+triggering the UncoordinatedWriteError.
+
+update() is therefore intended to be used just after a download_to_data(), in
+the following pattern:
+
+ d = mfn.download_to_data()
+ d.addCallback(apply_delta)
+ d.addCallback(mfn.update)
+
+If the update() call raises UCW, then the application can simply return an
+error to the user ("you violated the Prime Coordination Directive"), and they
+can try again later. Alternatively, the application can attempt to retry on
+its own. To accomplish this, the app needs to pause, download the new
+(post-collision and post-recovery) form of the file, reapply their delta,
+then submit the update request again. A randomized pause is necessary to
+reduce the chances of colliding a second time with another client that is
+doing exactly the same thing:
+
+ d = mfn.download_to_data()
+ d.addCallback(apply_delta)
+ d.addCallback(mfn.update)
+ def _retry(f):
+ f.trap(UncoordinatedWriteError)
+ d1 = pause(random.uniform(5, 20))
+ d1.addCallback(lambda res: mfn.download_to_data())
+ d1.addCallback(apply_delta)
+ d1.addCallback(mfn.update)
+ return d1
+ d.addErrback(_retry)
+
+Enthusiastic applications can retry multiple times, using a randomized
+exponential backoff between each. A particularly enthusiastic application can
+retry forever, but such apps are encouraged to provide a means to the user of
+giving up after a while.
+
+UCW does not mean that the update was not applied, so it is also a good idea
+to skip the retry-update step if the delta was already applied:
+
+ d = mfn.download_to_data()
+ d.addCallback(apply_delta)
+ d.addCallback(mfn.update)
+ def _retry(f):
+ f.trap(UncoordinatedWriteError)
+ d1 = pause(random.uniform(5, 20))
+ d1.addCallback(lambda res: mfn.download_to_data())
+ def _maybe_apply_delta(contents):
+ new_contents = apply_delta(contents)
+ if new_contents != contents:
+ return mfn.update(new_contents)
+ d1.addCallback(_maybe_apply_delta)
+ return d1
+ d.addErrback(_retry)
+
+update() is the right interface to use for delta-application situations, like
+directory nodes (in which apply_delta might be adding or removing child
+entries from a serialized table).
+
+Note that any uncoordinated write has the potential to lose data. We must do
+more analysis to be sure, but it appears that two clients who write to the
+same mutable file at the same time (even if both eventually retry) will, with
+high probability, result in one client observing UCW and the other silently
+losing their changes. It is also possible for both clients to observe UCW.
+The moral of the story is that the Prime Coordination Directive is there for
+a reason, and that recovery/UCW/retry is not a subsitute for write
+coordination.
+
+overwrite() tells the client to ignore this cached version information, and
+to unconditionally replace the mutable file's contents with the new data.
+This should not be used in delta application, but rather in situations where
+you want to replace the file's contents with completely unrelated ones. When
+raw files are uploaded into a mutable slot through the tahoe webapi (using
+POST and the ?mutable=true argument), they are put in place with overwrite().
+
+
+
+The peer-selection and data-structure manipulation (and signing/verification)
+steps will be implemented in a separate class in allmydata/mutable.py .
+
+=== SMDF Slot Format ===
+
+This SMDF data lives inside a server-side MutableSlot container. The server
+is oblivious to this format.
+
+This data is tightly packed. In particular, the share data is defined to run
+all the way to the beginning of the encrypted private key (the encprivkey
+offset is used both to terminate the share data and to begin the encprivkey).
+
+ # offset size name
+ 1 0 1 version byte, \x00 for this format
+ 2 1 8 sequence number. 2^64-1 must be handled specially, TBD
+ 3 9 32 "R" (root of share hash Merkle tree)
+ 4 41 16 IV (share data is AES(H(readkey+IV)) )
+ 5 57 18 encoding parameters:
+ 57 1 k
+ 58 1 N
+ 59 8 segment size
+ 67 8 data length (of original plaintext)
+ 6 75 32 offset table:
+ 75 4 (8) signature
+ 79 4 (9) share hash chain
+ 83 4 (10) block hash tree
+ 87 4 (11) share data
+ 91 8 (12) encrypted private key
+ 99 8 (13) EOF
+ 7 107 436ish verification key (2048 RSA key)
+ 8 543ish 256ish signature=RSAenc(sigkey, H(version+seqnum+r+IV+encparm))
+ 9 799ish (a) share hash chain, encoded as:
+ "".join([pack(">H32s", shnum, hash)
+ for (shnum,hash) in needed_hashes])
+10 (927ish) (b) block hash tree, encoded as:
+ "".join([pack(">32s",hash) for hash in block_hash_tree])
+11 (935ish) LEN share data (no gap between this and encprivkey)
+12 ?? 1216ish encrypted private key= AESenc(write-key, RSA-key)
+13 ?? -- EOF
+
+(a) The share hash chain contains ceil(log(N)) hashes, each 32 bytes long.
+ This is the set of hashes necessary to validate this share's leaf in the
+ share Merkle tree. For N=10, this is 4 hashes, i.e. 128 bytes.
+(b) The block hash tree contains ceil(length/segsize) hashes, each 32 bytes
+ long. This is the set of hashes necessary to validate any given block of
+ share data up to the per-share root "r". Each "r" is a leaf of the share
+ has tree (with root "R"), from which a minimal subset of hashes is put in
+ the share hash chain in (8).
+
+=== Recovery ===
+
+The first line of defense against damage caused by colliding writes is the
+Prime Coordination Directive: "Don't Do That".
+
+The second line of defense is to keep "S" (the number of competing versions)
+lower than N/k. If this holds true, at least one competing version will have
+k shares and thus be recoverable. Note that server unavailability counts
+against us here: the old version stored on the unavailable server must be
+included in the value of S.
+
+The third line of defense is our use of testv_and_writev() (described below),
+which increases the convergence of simultaneous writes: one of the writers
+will be favored (the one with the highest "R"), and that version is more
+likely to be accepted than the others. This defense is least effective in the
+pathological situation where S simultaneous writers are active, the one with
+the lowest "R" writes to N-k+1 of the shares and then dies, then the one with
+the next-lowest "R" writes to N-2k+1 of the shares and dies, etc, until the
+one with the highest "R" writes to k-1 shares and dies. Any other sequencing
+will allow the highest "R" to write to at least k shares and establish a new
+revision.
+
+The fourth line of defense is the fact that each client keeps writing until
+at least one version has N shares. This uses additional servers, if
+necessary, to make sure that either the client's version or some
+newer/overriding version is highly available.
+
+The fifth line of defense is the recovery algorithm, which seeks to make sure
+that at least *one* version is highly available, even if that version is
+somebody else's.
+
+The write-shares-to-peers algorithm is as follows:
+
+ * permute peers according to storage index
+ * walk through peers, trying to assign one share per peer
+ * for each peer:
+ * send testv_and_writev, using "old(seqnum+R) <= our(seqnum+R)" as the test
+ * this means that we will overwrite any old versions, and we will
+ overwrite simultaenous writers of the same version if our R is higher.
+ We will not overwrite writers using a higher seqnum.
+ * record the version that each share winds up with. If the write was
+ accepted, this is our own version. If it was rejected, read the
+ old_test_data to find out what version was retained.
+ * if old_test_data indicates the seqnum was equal or greater than our
+ own, mark the "Simultanous Writes Detected" flag, which will eventually
+ result in an error being reported to the writer (in their close() call).
+ * build a histogram of "R" values
+ * repeat until the histogram indicate that some version (possibly ours)
+ has N shares. Use new servers if necessary.
+ * If we run out of servers:
+ * if there are at least shares-of-happiness of any one version, we're
+ happy, so return. (the close() might still get an error)
+ * not happy, need to reinforce something, goto RECOVERY
+
+RECOVERY:
+ * read all shares, count the versions, identify the recoverable ones,
+ discard the unrecoverable ones.
+ * sort versions: locate max(seqnums), put all versions with that seqnum
+ in the list, sort by number of outstanding shares. Then put our own
+ version. (TODO: put versions with seqnum <max but >us ahead of us?).
+ * for each version:
+ * attempt to recover that version
+ * if not possible, remove it from the list, go to next one
+ * if recovered, start at beginning of peer list, push that version,
+ continue until N shares are placed
+ * if pushing our own version, bump up the seqnum to one higher than
+ the max seqnum we saw
+ * if we run out of servers:
+ * schedule retry and exponential backoff to repeat RECOVERY
+ * admit defeat after some period? presumeably the client will be shut down
+ eventually, maybe keep trying (once per hour?) until then.
+
+
+
+
+== Medium Distributed Mutable Files ==
+
+These are just like the SDMF case, but:
+
+ * we actually take advantage of the Merkle hash tree over the blocks, by
+ reading a single segment of data at a time (and its necessary hashes), to
+ reduce the read-time alacrity
+ * we allow arbitrary writes to the file (i.e. seek() is provided, and
+ O_TRUNC is no longer required)
+ * we write more code on the client side (in the MutableFileNode class), to
+ first read each segment that a write must modify. This looks exactly like
+ the way a normal filesystem uses a block device, or how a CPU must perform
+ a cache-line fill before modifying a single word.
+ * we might implement some sort of copy-based atomic update server call,
+ to allow multiple writev() calls to appear atomic to any readers.
+
+MDMF slots provide fairly efficient in-place edits of very large files (a few
+GB). Appending data is also fairly efficient, although each time a power of 2
+boundary is crossed, the entire file must effectively be re-uploaded (because
+the size of the block hash tree changes), so if the filesize is known in
+advance, that space ought to be pre-allocated (by leaving extra space between
+the block hash tree and the actual data).
+
+MDMF1 uses the Merkle tree to enable low-alacrity random-access reads. MDMF2
+adds cache-line reads to allow random-access writes.
+
+== Large Distributed Mutable Files ==
+
+LDMF slots use a fundamentally different way to store the file, inspired by
+Mercurial's "revlog" format. They enable very efficient insert/remove/replace
+editing of arbitrary spans. Multiple versions of the file can be retained, in
+a revision graph that can have multiple heads. Each revision can be
+referenced by a cryptographic identifier. There are two forms of the URI, one
+that means "most recent version", and a longer one that points to a specific
+revision.
+
+Metadata can be attached to the revisions, like timestamps, to enable rolling
+back an entire tree to a specific point in history.
+
+LDMF1 provides deltas but tries to avoid dealing with multiple heads. LDMF2
+provides explicit support for revision identifiers and branching.
+
+== TODO ==
+
+improve allocate-and-write or get-writer-buckets API to allow one-call (or
+maybe two-call) updates. The challenge is in figuring out which shares are on
+which machines. First cut will have lots of round trips.
+
+(eventually) define behavior when seqnum wraps. At the very least make sure
+it can't cause a security problem. "the slot is worn out" is acceptable.
+
+(eventually) define share-migration lease update protocol. Including the
+nodeid who accepted the lease is useful, we can use the same protocol as we
+do for updating the write enabler. However we need to know which lease to
+update.. maybe send back a list of all old nodeids that we find, then try all
+of them when we accept the update?
+
+ We now do this in a specially-formatted IndexError exception:
+ "UNABLE to renew non-existent lease. I have leases accepted by " +
+ "nodeids: '12345','abcde','44221' ."
+
+confirm that a repairer can regenerate shares without the private key. Hmm,
+without the write-enabler they won't be able to write those shares to the
+servers.. although they could add immutable new shares to new servers.
--- /dev/null
+
+= Tahoe URIs =
+
+Each file and directory in a Tahoe filesystem is described by a "URI". There
+are different kinds of URIs for different kinds of objects, and there are
+different kinds of URIs to provide different kinds of access to those
+objects. Each URI is a string representation of a "capability" or "cap", and
+there are read-caps, write-caps, verify-caps, and others.
+
+Each URI provides both '''location''' and '''identification''' properties.
+'''location''' means that holding the URI is sufficient to locate the data it
+represents (this means it contains a storage index or a lookup key, whatever
+is necessary to find the place or places where the data is being kept).
+'''identification''' means that the URI also serves to validate the data: an
+attacker who wants to trick you into into using the wrong data will be
+limited in their abilities by the identification properties of the URI.
+
+Some URIs are subsets of others. In particular, if you know a URI which
+allows you to modify some object, you can produce a weaker read-only URI and
+give it to someone else, and they will be able to read that object but not
+modify it. Directories, for example, have a read-cap which is derived from
+the write-cap: anyone with read/write access to the directory can produce a
+limited URI that grants read-only access, but not the other way around.
+
+source:src/allmydata/uri.py is the main place where URIs are processed. It is
+the authoritative definition point for all the the URI types described
+herein.
+
+== File URIs ==
+
+The lowest layer of the Tahoe architecture (the "grid") is reponsible for
+mapping URIs to data. This is basically a distributed hash table, in which
+the URI is the key, and some sequence of bytes is the value.
+
+There are two kinds of entries in this table: immutable and mutable. For
+immutable entries, the URI represents a fixed chunk of data. The URI itself
+is derived from the data when it is uploaded into the grid, and can be used
+to locate and download that data from the grid at some time in the future.
+
+For mutable entries, the URI identifies a "slot" or "container", which can be
+filled with different pieces of data at different times.
+
+It is important to note that the "files" described by these URIs are just a
+bunch of bytes, and that __no__ filenames or other metadata is retained at
+this layer. The vdrive layer (which sits above the grid layer) is entirely
+responsible for directories and filenames and the like.
+
+=== CHI URIs ===
+
+CHK (Content Hash Keyed) files are immutable sequences of bytes. They are
+uploaded in a distributed fashion using a "storage index" (for the "location"
+property), and encrypted using a "read key". A secure hash of the data is
+computed to help validate the data afterwards (providing the "identification"
+property). All of these pieces, plus information about the file's size and
+the number of shares into which it has been distributed, are put into the
+"CHK" uri. The storage index is derived by hashing the read key (using a
+tagged SHA-256d hash, then truncated to 128 bits), so it does not need to be
+physically present in the URI.
+
+The current format for CHK URIs is the concatenation of the following
+strings:
+
+ URI:CHK:(key):(hash):(needed-shares):(total-shares):(size)
+
+Where (key) is the base32 encoding of the 16-byte AES read key, (hash) is the
+base32 encoding of the SHA-256 hash of the URI Extension Block,
+(needed-shares) is an ascii decimal representation of the number of shares
+required to reconstruct this file, (total-shares) is the same representation
+of the total number of shares created, and (size) is an ascii decimal
+representation of the size of the data represented by this URI. All base32
+encodings are expressed in lower-case, with the trailing '=' signs removed.
+
+For example, the following is a CHK URI, generated from the contents of the
+architecture.txt document that lives next to this one in the source tree:
+
+URI:CHK:ihrbeov7lbvoduupd4qblysj7a:bg5agsdt62jb34hxvxmdsbza6do64f4fg5anxxod2buttbo6udzq:3:10:28733
+
+Historical note: The name "CHK" is somewhat inaccurate and continues to be
+used for historical reasons. "Content Hash Key" means that the encryption key
+is derived by hashing the contents, which gives the useful property that
+encoding the same file twice will result in the same URI. However, this is an
+optional step: by passing a different flag to the appropriate API call, Tahoe
+will generate a random encryption key instead of hashing the file: this gives
+the useful property that the URI or storage index does not reveal anything
+about the file's contents (except filesize), which improves privacy. The
+URI:CHK: prefix really indicates that an immutable file is in use, without
+saying anything about how the key was derived.
+
+=== LIT URIs ===
+
+LITeral files are also an immutable sequence of bytes, but they are so short
+that the data is stored inside the URI itself. These are used for files of 55
+bytes or shorter, which is the point at which the LIT URI is the same length
+as a CHK URI would be.
+
+LIT URIs do not require an upload or download phase, as their data is stored
+directly in the URI.
+
+The format of a LIT URI is simply a fixed prefix concatenated with the base32
+encoding of the file's data:
+
+ URI:LIT:bjuw4y3movsgkidbnrwg26lemf2gcl3xmvrc6kropbuhi3lmbi
+
+The LIT URI for an empty file is "URI:LIT:", and the LIT URI for a 5-byte
+file that contains the string "hello" is "URI:LIT:nbswy3dp".
+
+=== Mutable File URIs ===
+
+The other kind of DHT entry is the "mutable slot", in which the URI names a
+container to which data can be placed and retrieved without changing the
+identity of the container.
+
+These slots have write-caps (which allow read/write access), read-caps (which
+only allow read-access), and verify-caps (which allow a file checker/repairer
+to confirm that the contents exist, but does not let it decrypt the
+contents).
+
+Mutable slots use public key technology to provide data integrity, and put a
+hash of the public key in the URI. As a result, the data validation is
+limited to confirming that the data retrieved matches _some_ data that was
+uploaded in the past, but not _which_ version of that data.
+
+The format of the write-cap for mutable files is:
+
+ URI:SSK:(writekey):(fingerprint)
+
+Where (writekey) is the base32 encoding of the 16-byte AES encryption key
+that is used to encrypt the RSA private key, and (fingerprint) is the base32
+encoded 32-byte SHA-256 hash of the RSA public key. For more details about
+the way these keys are used, please see docs/mutable.txt .
+
+The format for mutable read-caps is:
+
+ URI:SSK-RO:(readkey):(fingerprint)
+
+The read-cap is just like the write-cap except it contains the other AES
+encryption key: the one used for encrypting the mutable file's contents. This
+second key is derived by hashing the writekey, which allows the holder of a
+write-cap to produce a read-cap, but not the other way around. The
+fingerprint is the same in both caps.
+
+Historical note: the "SSK" prefix is a perhaps-inaccurate reference to
+"Sub-Space Keys" from the Freenet project, which uses a vaguely similar
+structure to provide mutable file access.
+
+== Directory URIs ==
+
+The grid layer provides a mapping from URI to data. To turn this into a graph
+of directories and files, the "vdrive" layer (which sits on top of the grid
+layer) needs to keep track of "directory nodes", or "dirnodes" for short.
+source:docs/dirnodes.txt describes how these work.
+
+Dirnodes are contained inside mutable files, and are thus simply a particular
+way to interpret the contents of these files. As a result, a directory
+write-cap looks a lot like a mutable-file write-cap:
+
+ URI:DIR2:(writekey):(fingerprint)
+
+Likewise directory read-caps (which provide read-only access to the
+directory) look much like mutable-file read-caps:
+
+ URI:DIR2-RO:(readkey):(fingerprint)
+
+Historical note: the "DIR2" prefix is used because the non-distributed
+dirnodes in earlier Tahoe releases had already claimed the "DIR" prefix.
+
+== Internal Usage of URIs ==
+
+The classes in source:src/allmydata/uri.py are used to pack and unpack these
+various kinds of URIs. Three Interfaces are defined (IURI, IFileURI, and
+IDirnodeURI) which are implemented by these classes, and string-to-URI-class
+conversion routines have been registered as adapters, so that code which
+wants to extract e.g. the size of a CHK or LIT uri can do:
+
+{{{
+print IFileURI(uri).get_size()
+}}}
+
+If the URI does not represent a CHK or LIT uri (for example, if it was for a
+directory instead), the adaptation will fail, raising a TypeError inside the
+IFileURI() call.
+
+Several utility methods are provided on these objects. The most important is
+{{{ to_string() }}}, which returns the string form of the URI. Therefore {{{
+IURI(uri).to_string == uri }}} is true for any valid URI. See the IURI class
+in source:src/allmydata/interfaces.py for more details.
+
+++ /dev/null
-
-= Tahoe URIs =
-
-Each file and directory in a Tahoe filesystem is described by a "URI". There
-are different kinds of URIs for different kinds of objects, and there are
-different kinds of URIs to provide different kinds of access to those
-objects. Each URI is a string representation of a "capability" or "cap", and
-there are read-caps, write-caps, verify-caps, and others.
-
-Each URI provides both '''location''' and '''identification''' properties.
-'''location''' means that holding the URI is sufficient to locate the data it
-represents (this means it contains a storage index or a lookup key, whatever
-is necessary to find the place or places where the data is being kept).
-'''identification''' means that the URI also serves to validate the data: an
-attacker who wants to trick you into into using the wrong data will be
-limited in their abilities by the identification properties of the URI.
-
-Some URIs are subsets of others. In particular, if you know a URI which
-allows you to modify some object, you can produce a weaker read-only URI and
-give it to someone else, and they will be able to read that object but not
-modify it. Directories, for example, have a read-cap which is derived from
-the write-cap: anyone with read/write access to the directory can produce a
-limited URI that grants read-only access, but not the other way around.
-
-source:src/allmydata/uri.py is the main place where URIs are processed. It is
-the authoritative definition point for all the the URI types described
-herein.
-
-== File URIs ==
-
-The lowest layer of the Tahoe architecture (the "grid") is reponsible for
-mapping URIs to data. This is basically a distributed hash table, in which
-the URI is the key, and some sequence of bytes is the value.
-
-There are two kinds of entries in this table: immutable and mutable. For
-immutable entries, the URI represents a fixed chunk of data. The URI itself
-is derived from the data when it is uploaded into the grid, and can be used
-to locate and download that data from the grid at some time in the future.
-
-For mutable entries, the URI identifies a "slot" or "container", which can be
-filled with different pieces of data at different times.
-
-It is important to note that the "files" described by these URIs are just a
-bunch of bytes, and that __no__ filenames or other metadata is retained at
-this layer. The vdrive layer (which sits above the grid layer) is entirely
-responsible for directories and filenames and the like.
-
-=== CHI URIs ===
-
-CHK (Content Hash Keyed) files are immutable sequences of bytes. They are
-uploaded in a distributed fashion using a "storage index" (for the "location"
-property), and encrypted using a "read key". A secure hash of the data is
-computed to help validate the data afterwards (providing the "identification"
-property). All of these pieces, plus information about the file's size and
-the number of shares into which it has been distributed, are put into the
-"CHK" uri. The storage index is derived by hashing the read key (using a
-tagged SHA-256d hash, then truncated to 128 bits), so it does not need to be
-physically present in the URI.
-
-The current format for CHK URIs is the concatenation of the following
-strings:
-
- URI:CHK:(key):(hash):(needed-shares):(total-shares):(size)
-
-Where (key) is the base32 encoding of the 16-byte AES read key, (hash) is the
-base32 encoding of the SHA-256 hash of the URI Extension Block,
-(needed-shares) is an ascii decimal representation of the number of shares
-required to reconstruct this file, (total-shares) is the same representation
-of the total number of shares created, and (size) is an ascii decimal
-representation of the size of the data represented by this URI. All base32
-encodings are expressed in lower-case, with the trailing '=' signs removed.
-
-For example, the following is a CHK URI, generated from the contents of the
-architecture.txt document that lives next to this one in the source tree:
-
-URI:CHK:ihrbeov7lbvoduupd4qblysj7a:bg5agsdt62jb34hxvxmdsbza6do64f4fg5anxxod2buttbo6udzq:3:10:28733
-
-Historical note: The name "CHK" is somewhat inaccurate and continues to be
-used for historical reasons. "Content Hash Key" means that the encryption key
-is derived by hashing the contents, which gives the useful property that
-encoding the same file twice will result in the same URI. However, this is an
-optional step: by passing a different flag to the appropriate API call, Tahoe
-will generate a random encryption key instead of hashing the file: this gives
-the useful property that the URI or storage index does not reveal anything
-about the file's contents (except filesize), which improves privacy. The
-URI:CHK: prefix really indicates that an immutable file is in use, without
-saying anything about how the key was derived.
-
-=== LIT URIs ===
-
-LITeral files are also an immutable sequence of bytes, but they are so short
-that the data is stored inside the URI itself. These are used for files of 55
-bytes or shorter, which is the point at which the LIT URI is the same length
-as a CHK URI would be.
-
-LIT URIs do not require an upload or download phase, as their data is stored
-directly in the URI.
-
-The format of a LIT URI is simply a fixed prefix concatenated with the base32
-encoding of the file's data:
-
- URI:LIT:bjuw4y3movsgkidbnrwg26lemf2gcl3xmvrc6kropbuhi3lmbi
-
-The LIT URI for an empty file is "URI:LIT:", and the LIT URI for a 5-byte
-file that contains the string "hello" is "URI:LIT:nbswy3dp".
-
-=== Mutable File URIs ===
-
-The other kind of DHT entry is the "mutable slot", in which the URI names a
-container to which data can be placed and retrieved without changing the
-identity of the container.
-
-These slots have write-caps (which allow read/write access), read-caps (which
-only allow read-access), and verify-caps (which allow a file checker/repairer
-to confirm that the contents exist, but does not let it decrypt the
-contents).
-
-Mutable slots use public key technology to provide data integrity, and put a
-hash of the public key in the URI. As a result, the data validation is
-limited to confirming that the data retrieved matches _some_ data that was
-uploaded in the past, but not _which_ version of that data.
-
-The format of the write-cap for mutable files is:
-
- URI:SSK:(writekey):(fingerprint)
-
-Where (writekey) is the base32 encoding of the 16-byte AES encryption key
-that is used to encrypt the RSA private key, and (fingerprint) is the base32
-encoded 32-byte SHA-256 hash of the RSA public key. For more details about
-the way these keys are used, please see docs/mutable.txt .
-
-The format for mutable read-caps is:
-
- URI:SSK-RO:(readkey):(fingerprint)
-
-The read-cap is just like the write-cap except it contains the other AES
-encryption key: the one used for encrypting the mutable file's contents. This
-second key is derived by hashing the writekey, which allows the holder of a
-write-cap to produce a read-cap, but not the other way around. The
-fingerprint is the same in both caps.
-
-Historical note: the "SSK" prefix is a perhaps-inaccurate reference to
-"Sub-Space Keys" from the Freenet project, which uses a vaguely similar
-structure to provide mutable file access.
-
-== Directory URIs ==
-
-The grid layer provides a mapping from URI to data. To turn this into a graph
-of directories and files, the "vdrive" layer (which sits on top of the grid
-layer) needs to keep track of "directory nodes", or "dirnodes" for short.
-source:docs/dirnodes.txt describes how these work.
-
-Dirnodes are contained inside mutable files, and are thus simply a particular
-way to interpret the contents of these files. As a result, a directory
-write-cap looks a lot like a mutable-file write-cap:
-
- URI:DIR2:(writekey):(fingerprint)
-
-Likewise directory read-caps (which provide read-only access to the
-directory) look much like mutable-file read-caps:
-
- URI:DIR2-RO:(readkey):(fingerprint)
-
-Historical note: the "DIR2" prefix is used because the non-distributed
-dirnodes in earlier Tahoe releases had already claimed the "DIR" prefix.
-
-== Internal Usage of URIs ==
-
-The classes in source:src/allmydata/uri.py are used to pack and unpack these
-various kinds of URIs. Three Interfaces are defined (IURI, IFileURI, and
-IDirnodeURI) which are implemented by these classes, and string-to-URI-class
-conversion routines have been registered as adapters, so that code which
-wants to extract e.g. the size of a CHK or LIT uri can do:
-
-{{{
-print IFileURI(uri).get_size()
-}}}
-
-If the URI does not represent a CHK or LIT uri (for example, if it was for a
-directory instead), the adaptation will fail, raising a TypeError inside the
-IFileURI() call.
-
-Several utility methods are provided on these objects. The most important is
-{{{ to_string() }}}, which returns the string form of the URI. Therefore {{{
-IURI(uri).to_string == uri }}} is true for any valid URI. See the IURI class
-in source:src/allmydata/interfaces.py for more details.
-