<svg id="mermaid_64a568e0" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" height="539.5182495117188" style="max-width: 573.4765625px;" viewBox="0 0 573.4765625 539.5182495117188"><style>#mermaid_64a568e0 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid_64a568e0 .error-icon{fill:#552222;}#mermaid_64a568e0 .error-text{fill:#552222;stroke:#552222;}#mermaid_64a568e0 .edge-thickness-normal{stroke-width:2px;}#mermaid_64a568e0 .edge-thickness-thick{stroke-width:3.5px;}#mermaid_64a568e0 .edge-pattern-solid{stroke-dasharray:0;}#mermaid_64a568e0 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid_64a568e0 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid_64a568e0 .marker{fill:#333333;stroke:#333333;}#mermaid_64a568e0 .marker.cross{stroke:#333333;}#mermaid_64a568e0 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid_64a568e0 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid_64a568e0 .cluster-label text{fill:#333;}#mermaid_64a568e0 .cluster-label span{color:#333;}#mermaid_64a568e0 .label text,#mermaid_64a568e0 span{fill:#333;color:#333;}#mermaid_64a568e0 .node rect,#mermaid_64a568e0 .node circle,#mermaid_64a568e0 .node ellipse,#mermaid_64a568e0 .node polygon,#mermaid_64a568e0 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid_64a568e0 .node .label{text-align:center;}#mermaid_64a568e0 .node.clickable{cursor:pointer;}#mermaid_64a568e0 .arrowheadPath{fill:#333333;}#mermaid_64a568e0 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid_64a568e0 .flowchart-link{stroke:#333333;fill:none;}#mermaid_64a568e0 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid_64a568e0 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid_64a568e0 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid_64a568e0 .cluster text{fill:#333;}#mermaid_64a568e0 .cluster span{color:#333;}#mermaid_64a568e0 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid_64a568e0 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style><g><g class="output"><g class="clusters"><g class="cluster" id="flowchart-Routing-46" transform="translate(211.79296875,269.7591209411621)" style="opacity: 1;"><rect width="407.5859375" height="523.5182418823242" x="-203.79296875" y="-261.7591209411621"></rect><g class="label" transform="translate(0, -247.75912475585938)" id="mermaid_64a568e0Text"><g transform="translate(-26.8359375,-9.5)"><foreignObject width="53.671875" height="19"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">Routing</div></foreignObject></g></g></g><g class="cluster" id="flowchart-Transports-47" transform="translate(208.609375,199.19803619384766)" style="opacity: 1;"><rect width="241.515625" height="116.39607238769531" x="-120.7578125" y="-58.198036193847656"></rect><g class="label" transform="translate(0, -44.198036193847656)" id="mermaid_64a568e0Text"><g transform="translate(-36.9609375,-9.5)"><foreignObject width="73.921875" height="19"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">Transports</div></foreignObject></g></g></g></g><g class="edgePaths"><g class="edgePath LS-Resolver LE-Record" id="L-Resolver-Record" style="opacity: 1;"><path class="path" d="M248.39116753472223,365.3960723876953L258.83508752893516,371.1460723876953C269.27900752314815,376.8960723876953,290.1668475115741,388.3960723876953,325.0388695741338,402.73958651224774C359.9108916366936,417.0831006368001,408.76709577338715,434.27012888590497,433.19519784173394,442.86364301045734L457.6232999100808,451.45715713500977" marker-end="url(#arrowhead105)" style="fill:none"></path><defs><marker id="arrowhead105" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath LS-Record LE-Publisher" id="L-Record-Publisher" style="opacity: 1;"><path class="path" d="M470.2385330012058,451.45715713500977L451.3159650010048,442.86364301045734C432.3933970008038,434.27012888590497,394.5482610004019,417.0831006368001,375.62569300020095,399.48958651224774C356.703125,381.8960723876953,356.703125,363.8960723876953,356.703125,345.8960723876953C356.703125,327.8960723876953,356.703125,309.8960723876953,356.703125,295.1460723876953C356.703125,280.3960723876953,356.703125,268.8960723876953,356.703125,253.4463996887207C356.703125,237.9967269897461,356.703125,218.59738159179688,356.703125,199.19803619384766C356.703125,179.79869079589844,356.703125,160.39934539794922,356.703125,144.9496726989746C356.703125,129.5,356.703125,118,340.2890625,105.9859761484099C323.875,93.9719522968198,291.046875,81.44390459363957,274.6328125,75.17988074204948L258.21875,68.91585689045937" marker-end="url(#arrowhead106)" style="fill:none"></path><defs><marker id="arrowhead106" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath LS-Publisher LE-DHT" id="L-Publisher-DHT" style="opacity: 1;"><path class="path" d="M190.80555555555554,72L183.61140046296296,77.75C176.41724537037035,83.5,162.0289351851852,95,154.83478009259258,106.5C147.640625,118,147.640625,129.5,147.640625,139.92474619547525C147.640625,150.34949239095053,147.640625,159.69898478190103,147.640625,164.3737309773763L147.640625,169.04847717285156" marker-end="url(#arrowhead107)" style="fill:none"></path><defs><marker id="arrowhead107" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath LS-DHT LE-Resolver" id="L-DHT-Resolver" style="opacity: 1;"><path class="path" d="M147.640625,229.34759521484375L147.640625,234.022341410319C147.640625,238.69708760579428,147.640625,248.04657999674478,147.640625,258.47132619222003C147.640625,268.8960723876953,147.640625,280.3960723876953,154.59727647569443,291.8960723876953C161.55392795138889,303.3960723876953,175.46723090277774,314.8960723876953,182.4238823784722,320.6460723876953L189.38053385416666,326.3960723876953" marker-end="url(#arrowhead108)" style="fill:none;stroke-width:2px;stroke-dasharray:3;"></path><defs><marker id="arrowhead108" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath LS-Publisher LE-PubSub" id="L-Publisher-PubSub" style="opacity: 1;"><path class="path" d="M230.80143229166666,72L235.4009331597222,77.75C240.00043402777774,83.5,249.19943576388889,95,253.79893663194446,106.5C258.3984375,118,258.3984375,129.5,258.3984375,139.41666666666666C258.3984375,149.33333333333334,258.3984375,157.66666666666666,258.3984375,161.83333333333334L258.3984375,166" marker-end="url(#arrowhead109)" style="fill:none"></path><defs><marker id="arrowhead109" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath LS-PubSub LE-Resolver" id="L-PubSub-Resolver" style="opacity: 1;"><path class="path" d="M258.3984375,232.3960723876953L258.3984375,236.56273905436197C258.3984375,240.72940572102866,258.3984375,249.06273905436197,258.3984375,258.9794057210286C258.3984375,268.8960723876953,258.3984375,280.3960723876953,253.5614330150463,291.8960723876953C248.7244285300926,303.3960723876953,239.0504195601852,314.8960723876953,234.2134150752315,320.6460723876953L229.37641059027777,326.3960723876953" marker-end="url(#arrowhead110)" style="fill:none;stroke-width:2px;stroke-dasharray:3;"></path><defs><marker id="arrowhead110" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath LS-Publisher LE-Local" id="L-Publisher-Local" style="opacity: 1;"><path class="path" d="M172.1875,68.26395737235566L154.79817708333334,74.63663114362971C137.40885416666666,81.00930491490378,102.63020833333333,93.75465245745188,85.24088541666667,105.87732622872595C67.8515625,118,67.8515625,129.5,67.8515625,144.9496726989746C67.8515625,160.39934539794922,67.8515625,179.79869079589844,67.8515625,199.19803619384766C67.8515625,218.59738159179688,67.8515625,237.9967269897461,67.8515625,253.4463996887207C67.8515625,268.8960723876953,67.8515625,280.3960723876953,67.8515625,295.1460723876953C67.8515625,309.8960723876953,67.8515625,327.8960723876953,67.8515625,345.8960723876953C67.8515625,363.8960723876953,67.8515625,381.8960723876953,72.84503344541245,397.06214232989674C77.8385043908249,412.22821227209823,87.82544628164977,424.5603521565011,92.81891722706223,430.7264220987026L97.81238817247467,436.892492040904" marker-end="url(#arrowhead111)" style="fill:none"></path><defs><marker id="arrowhead111" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath LS-Local LE-Resolver" id="L-Local-Resolver" style="opacity: 1;"><path class="path" d="M173.11816333154974,440.39358703437904L180.1323236096248,433.6440012599317C187.14648388769982,426.89441548548444,201.17480444384992,413.39524393658985,207.95146110502682,400.8956581621426C214.7281177662037,388.3960723876953,214.2531105324074,376.8960723876953,214.01560691550924,371.1460723876953L213.77810329861111,365.3960723876953" marker-end="url(#arrowhead112)" style="fill:none;stroke-width:2px;stroke-dasharray:3;"></path><defs><marker id="arrowhead112" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath LS-Resolver LE-Local" id="L-Resolver-Local" style="opacity: 1;"><path class="path" d="M176.78396267361111,365.3960723876953L166.11293764467592,371.1460723876953C155.44191261574073,376.8960723876953,134.09986255787035,388.3960723876953,124.76291266963916,399.9226045635624C115.42596278140799,411.44913673942955,118.09411306281599,423.0022010911637,119.42818820351998,428.7787332670309L120.76226334422397,434.5552654428979" marker-end="url(#arrowhead113)" style="fill:none"></path><defs><marker id="arrowhead113" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g></g><g class="edgeLabels"><g class="edgeLabel" transform="translate(311.0546875,399.8960723876953)" style="opacity: 1;"><g transform="translate(-25.6484375,-9.5)" class="label"><rect rx="0" ry="0" width="51.296875" height="19"></rect><foreignObject width="51.296875" height="19"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span id="L-L-Resolver-Record" class="edgeLabel L-LS-Resolver' L-LE-Record">resolve</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(356.703125,291.8960723876953)" style="opacity: 1;"><g transform="translate(-38.8828125,-9.5)" class="label"><rect rx="0" ry="0" width="77.765625" height="19"></rect><foreignObject width="77.765625" height="19"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span id="L-L-Record-Publisher" class="edgeLabel L-LS-Record' L-LE-Publisher">(re)publish</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(147.640625,106.5)" style="opacity: 1;"><g transform="translate(-14.296875,-9.5)" class="label"><rect rx="0" ry="0" width="28.59375" height="19"></rect><foreignObject width="28.59375" height="19"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span id="L-L-Publisher-DHT" class="edgeLabel L-LS-Publisher' L-LE-DHT">PUT</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(147.640625,291.8960723876953)" style="opacity: 1;"><g transform="translate(-14.34375,-9.5)" class="label"><rect rx="0" ry="0" width="28.6875" height="19"></rect><foreignObject width="28.6875" height="19"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span id="L-L-DHT-Resolver" class="edgeLabel L-LS-DHT' L-LE-Resolver">GET</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(258.3984375,106.5)" style="opacity: 1;"><g transform="translate(-14.296875,-9.5)" class="label"><rect rx="0" ry="0" width="28.59375" height="19"></rect><foreignObject width="28.59375" height="19"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span id="L-L-Publisher-PubSub" class="edgeLabel L-LS-Publisher' L-LE-PubSub">PUT</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(258.3984375,291.8960723876953)" style="opacity: 1;"><g transform="translate(-14.34375,-9.5)" class="label"><rect rx="0" ry="0" width="28.6875" height="19"></rect><foreignObject width="28.6875" height="19"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span id="L-L-PubSub-Resolver" class="edgeLabel L-LS-PubSub' L-LE-Resolver">GET</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(67.8515625,291.8960723876953)" style="opacity: 1;"><g transform="translate(-21.6875,-9.5)" class="label"><rect rx="0" ry="0" width="43.375" height="19"></rect><foreignObject width="43.375" height="19"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span id="L-L-Publisher-Local" class="edgeLabel L-LS-Publisher' L-LE-Local">Cache</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(215.203125,399.8960723876953)" style="opacity: 1;"><g transform="translate(-14.34375,-9.5)" class="label"><rect rx="0" ry="0" width="28.6875" height="19"></rect><foreignObject width="28.6875" height="19"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span id="L-L-Local-Resolver" class="edgeLabel L-LS-Local' L-LE-Resolver">GET</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(112.7578125,399.8960723876953)" style="opacity: 1;"><g transform="translate(-21.6875,-9.5)" class="label"><rect rx="0" ry="0" width="43.375" height="19"></rect><foreignObject width="43.375" height="19"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span id="L-L-Resolver-Local" class="edgeLabel L-LS-Resolver' L-LE-Local">Cache</span></div></foreignObject></g></g></g><g class="nodes"><g class="node default" id="flowchart-Publisher-28" transform="translate(215.203125,52.5)" style="opacity: 1;"><rect rx="0" ry="0" x="-43.015625" y="-19.5" width="86.03125" height="39" class="label-container"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-33.015625,-9.5)"><foreignObject width="66.03125" height="19"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">Publisher</div></foreignObject></g></g></g><g class="node default" id="flowchart-Resolver-29" transform="translate(212.97265625,345.8960723876953)" style="opacity: 1;"><rect rx="0" ry="0" x="-39.9765625" y="-19.5" width="79.953125" height="39" class="label-container"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-29.9765625,-9.5)"><foreignObject width="59.953125" height="19"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">Resolver</div></foreignObject></g></g></g><g class="node default" id="flowchart-Local-30" label-offset-y="11.043265875785066" transform="translate(129.12890625,470.45715713500977)" style="opacity: 1;"><path d="M 0,11.043265875785066 a 49.453125,11.043265875785066 0,0,0 98.90625 0 a 49.453125,11.043265875785066 0,0,0 -98.90625 0 l 0,50.04326587578507 a 49.453125,11.043265875785066 0,0,0 98.90625 0 l 0,-50.04326587578507" transform="translate(-49.453125,-36.0648988136776)" class="label-container"></path><g class="label" transform="translate(0,0)"><g transform="translate(-39.453125,-9.5)"><foreignObject width="78.90625" height="19"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">Local store</div></foreignObject></g></g></g><g class="node default" id="flowchart-PubSub-31" label-offset-y="9.132021580450651" transform="translate(258.3984375,199.19803619384766)" style="opacity: 1;"><path d="M 0,9.132021580450651 a 35.96875,9.132021580450651 0,0,0 71.9375 0 a 35.96875,9.132021580450651 0,0,0 -71.9375 0 l 0,48.132021580450655 a 35.96875,9.132021580450651 0,0,0 71.9375 0 l 0,-48.132021580450655" transform="translate(-35.96875,-33.198032370675975)" class="label-container"></path><g class="label" transform="translate(0,0)"><g transform="translate(-25.96875,-9.5)"><foreignObject width="51.9375" height="19"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">PubSub</div></foreignObject></g></g></g><g class="node default" id="flowchart-DHT-32" label-offset-y="7.099704645126645" transform="translate(147.640625,199.19803619384766)" style="opacity: 1;"><path d="M 0,7.099704645126645 a 24.7890625,7.099704645126645 0,0,0 49.578125 0 a 24.7890625,7.099704645126645 0,0,0 -49.578125 0 l 0,46.09970464512664 a 24.7890625,7.099704645126645 0,0,0 49.578125 0 l 0,-46.09970464512664" transform="translate(-24.7890625,-30.149556967689968)" class="label-container"></path><g class="label" transform="translate(0,0)"><g transform="translate(-14.7890625,-9.5)"><foreignObject width="29.578125" height="19"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">DHT</div></foreignObject></g></g></g><g class="node default" id="flowchart-Record-27" transform="translate(512.90625,470.45715713500977)" style="opacity: 1;"><polygon points="-19.5,0 105.140625,0 105.140625,-39 -19.5,-39 0,-19.5" transform="translate(-52.5703125,19.5)" class="label-container"></polygon><g class="label" transform="translate(0,0)"><g transform="translate(-42.5703125,-9.5)"><foreignObject width="85.140625" height="19"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">IPNS Record</div></foreignObject></g></g></g></g></g></g></svg>