1 2 3
|
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="781px" height="411px" viewBox="-0.5 -0.5 781 411" content="<mxfile host="www.draw.io" modified="2020-03-27T13:07:39.408Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" version="12.9.3" etag="KR6k_eLa14AzyXmPAQoy" type="device"><diagram id="914EpuxxD2sgCs98bY8F">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</diagram></mxfile>"><defs/><g><rect x="130" y="0" width="650" height="340" rx="51" ry="51" fill="none" stroke="#000000" stroke-dasharray="3 3" pointer-events="all"/><path d="M 50 40 L 50 340" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><rect x="210" y="209.51" width="200" height="70" fill="#ffffff" stroke="#000000" pointer-events="all"/><rect x="210" y="40" width="200" height="130" fill="#ffffff" stroke="#000000" pointer-events="all"/><path d="M 252 40 L 252 170 M 368 40 L 368 170" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 114px; height: 1px; padding-top: 105px; margin-left: 253px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">xcontrol thread<br />(xcontrol)</div></div></div></foreignObject><text x="310" y="109" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">xcontrol thread...</text></switch></g><rect x="570" y="200" width="170" height="80" fill="#ffffff" stroke="#000000" pointer-events="all"/><path d="M 603 200 L 603 280 M 707 200 L 707 280" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 103px; height: 1px; padding-top: 240px; margin-left: 604px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Publisher Thread<br />(xpublisher)<br /></div></div></div></foreignObject><text x="656" y="244" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Publisher Thread...</text></switch></g><rect x="566.5" y="40" width="170" height="80" fill="#ffffff" stroke="#000000" pointer-events="all"/><path d="M 605.5 40 L 605.5 120 M 697.5 40 L 697.5 120" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 90px; height: 1px; padding-top: 80px; margin-left: 607px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Heartbeat Thread<br />(xheartbeat)<br /></div></div></div></foreignObject><text x="652" y="84" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Heartbeat Threa...</text></switch></g><rect x="180" y="0" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 10px; margin-left: 181px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Server</div></div></div></foreignObject><text x="200" y="14" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Server</text></switch></g><path d="M 565 220 L 540 220 Q 530 220 530 210 L 530 100 Q 530 90 520 90 L 415 90" fill="none" stroke="#ae4132" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 415 120 L 500 120 Q 510 120 510 130 L 510 250 Q 510 260 520 260 L 565 260" fill="none" stroke="#10739e" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 745 260 L 752.5 260 Q 760 260 760 270 L 760 300 Q 760 310 750 310 L 55 310" fill="none" stroke="#10739e" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 50 300 L 50 0" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><rect x="10" y="0" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 10px; margin-left: 11px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Client</div></div></div></foreignObject><text x="30" y="14" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Client</text></switch></g><rect x="420" y="70" width="100" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 98px; height: 1px; padding-top: 80px; margin-left: 422px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #ae4132; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">publisher_controller</div></div></div></foreignObject><text x="422" y="83" fill="#ae4132" font-family="Helvetica" font-size="10px">publisher_controller</text></switch></g><rect x="521.5" y="189.51" width="50" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 48px; height: 1px; padding-top: 200px; margin-left: 522px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #ae4132; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">controller</div></div></div></foreignObject><text x="570" y="203" fill="#ae4132" font-family="Helvetica" font-size="10px" text-anchor="end">controller</text></switch></g><rect x="420" y="100" width="100" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 98px; height: 1px; padding-top: 110px; margin-left: 422px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #12739e; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">publisher_pub</div></div></div></foreignObject><text x="422" y="113" fill="#12739e" font-family="Helvetica" font-size="10px">publisher_pub</text></switch></g><rect x="505" y="239.51" width="60" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 58px; height: 1px; padding-top: 250px; margin-left: 505px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #12739e; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">listener</div></div></div></foreignObject><text x="563" y="253" fill="#12739e" font-family="Helvetica" font-size="10px" text-anchor="end">listener</text></switch></g><rect x="688.5" y="280" width="60" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 290px; margin-left: 690px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #12739e; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">publisher</div></div></div></foreignObject><text x="719" y="293" fill="#12739e" font-family="Helvetica" font-size="10px" text-anchor="middle">publisher</text></switch></g><path d="M 561.5 60 L 480 60 Q 470 60 460 60 L 415 60" fill="none" stroke="#ae4132" stroke-miterlimit="10" pointer-events="stroke"/><rect x="420" y="40" width="100" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 98px; height: 1px; padding-top: 50px; margin-left: 422px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #ae4132; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">heartbeat_controller</div></div></div></foreignObject><text x="422" y="53" fill="#ae4132" font-family="Helvetica" font-size="10px">heartbeat_controller</text></switch></g><rect x="511.5" y="60" width="50" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 48px; height: 1px; padding-top: 70px; margin-left: 512px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #ae4132; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">controller</div></div></div></foreignObject><text x="560" y="73" fill="#ae4132" font-family="Helvetica" font-size="10px" text-anchor="end">controller</text></switch></g><path d="M 741.5 100 L 750.75 100 Q 760 100 760 90 L 760 40 Q 760 30 750 30 L 55 30" fill="none" stroke="#009900" stroke-miterlimit="10" pointer-events="stroke"/><rect x="685" y="120" width="60" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 130px; margin-left: 686px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #009900; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">heartbeat</div></div></div></foreignObject><text x="715" y="133" fill="#009900" font-family="Helvetica" font-size="10px" text-anchor="middle">heartbeat</text></switch></g><path d="M 55 80 L 205 80" fill="none" stroke="#ae4132" stroke-miterlimit="10" pointer-events="stroke"/><rect x="140" y="80" width="60" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 58px; height: 1px; padding-top: 90px; margin-left: 140px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #AE4132; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">controller</div></div></div></foreignObject><text x="198" y="93" fill="#AE4132" font-family="Helvetica" font-size="10px" text-anchor="end">controller</text></switch></g><path d="M 405 359.5 L 445 359.5" fill="none" stroke="#10739e" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 405 379.5 L 445 379.5" fill="none" stroke="#ae4132" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 405 399.5 L 445 399.5" fill="none" stroke="#009900" stroke-miterlimit="10" pointer-events="stroke"/><rect x="455" y="350" width="180" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 178px; height: 1px; padding-top: 360px; margin-left: 457px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Shell (code, input, output...)<br /></div></div></div></foreignObject><text x="457" y="364" fill="#000000" font-family="Helvetica" font-size="12px">Shell (code, input, output...)
</text></switch></g><rect x="455" y="370" width="180" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 178px; height: 1px; padding-top: 380px; margin-left: 457px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Control (shutdown, restart)</div></div></div></foreignObject><text x="457" y="384" fill="#000000" font-family="Helvetica" font-size="12px">Control (shutdown, restart)</text></switch></g><rect x="455" y="390" width="180" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 178px; height: 1px; padding-top: 400px; margin-left: 457px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Heartbeat</div></div></div></foreignObject><text x="457" y="404" fill="#000000" font-family="Helvetica" font-size="12px">Heartbeat</text></switch></g><path d="M 603 260 L 606.5 260 Q 610 260 620 260 L 630 260 Q 640 260 650 260 L 707 260" fill="none" stroke="#10739e" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><path d="M 55 224.51 L 205 224.51" fill="none" stroke="#10739e" stroke-miterlimit="10" pointer-events="stroke"/><rect x="140" y="199.51" width="60" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 58px; height: 1px; padding-top: 210px; margin-left: 140px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #10739E; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">shell</div></div></div></foreignObject><text x="198" y="213" fill="#10739E" font-family="Helvetica" font-size="10px" text-anchor="end">shell</text></switch></g><path d="M 55 259.51 L 205 259.51" fill="none" stroke="#10739e" stroke-miterlimit="10" pointer-events="stroke"/><rect x="140" y="239.51" width="60" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 58px; height: 1px; padding-top: 250px; margin-left: 140px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #10739E; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">stdin</div></div></div></foreignObject><text x="198" y="253" fill="#10739E" font-family="Helvetica" font-size="10px" text-anchor="end">stdin</text></switch></g><rect x="205" y="214.51" width="10" height="20" fill="#ffffff" stroke="#000000" pointer-events="all"/><rect x="205" y="249.51" width="10" height="20" fill="#ffffff" stroke="#000000" pointer-events="all"/><rect x="205" y="70" width="10" height="20" fill="#ffffff" stroke="#000000" pointer-events="all"/><rect x="220" y="214.51" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 38px; height: 1px; padding-top: 225px; margin-left: 222px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">router<br style="font-size: 10px" /></div></div></div></foreignObject><text x="222" y="228" fill="#000000" font-family="Helvetica" font-size="10px">router
</text></switch></g><rect x="220" y="249.51" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 38px; height: 1px; padding-top: 260px; margin-left: 222px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">router<br style="font-size: 10px" /></div></div></div></foreignObject><text x="222" y="263" fill="#000000" font-family="Helvetica" font-size="10px">router
</text></switch></g><rect x="220" y="70" width="32" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 30px; height: 1px; padding-top: 80px; margin-left: 222px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">router<br style="font-size: 10px" /></div></div></div></foreignObject><text x="222" y="83" fill="#000000" font-family="Helvetica" font-size="10px">router
</text></switch></g><path d="M 252 80 L 360 80.04" fill="none" stroke="#ae4132" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><rect x="405" y="80" width="10" height="20" fill="#ffffff" stroke="#000000" pointer-events="all"/><rect x="405" y="110" width="10" height="20" fill="#ffffff" stroke="#000000" pointer-events="all"/><rect x="405" y="50" width="10" height="20" fill="#ffffff" stroke="#000000" pointer-events="all"/><rect x="368" y="80" width="32" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 30px; height: 1px; padding-top: 90px; margin-left: 368px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">req<br /></div></div></div></foreignObject><text x="398" y="93" fill="#000000" font-family="Helvetica" font-size="10px" text-anchor="end">req
</text></switch></g><rect x="368" y="50" width="32" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 30px; height: 1px; padding-top: 60px; margin-left: 368px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">req<br /></div></div></div></foreignObject><text x="398" y="63" fill="#000000" font-family="Helvetica" font-size="10px" text-anchor="end">req
</text></switch></g><rect x="370" y="110" width="30" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 28px; height: 1px; padding-top: 120px; margin-left: 370px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">pub<br /></div></div></div></foreignObject><text x="398" y="123" fill="#000000" font-family="Helvetica" font-size="10px" text-anchor="end">pub
</text></switch></g><rect x="565" y="210" width="10" height="20" fill="#ffffff" stroke="#000000" pointer-events="all"/><rect x="565" y="250" width="10" height="20" fill="#ffffff" stroke="#000000" pointer-events="all"/><rect x="580" y="210" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 38px; height: 1px; padding-top: 220px; margin-left: 582px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">rep<br /></div></div></div></foreignObject><text x="582" y="223" fill="#000000" font-family="Helvetica" font-size="10px">rep
</text></switch></g><rect x="580" y="250" width="23" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 21px; height: 1px; padding-top: 260px; margin-left: 582px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">sub</div></div></div></foreignObject><text x="582" y="263" fill="#000000" font-family="Helvetica" font-size="10px">sub</text></switch></g><rect x="707" y="245" width="23" height="30" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 21px; height: 1px; padding-top: 260px; margin-left: 707px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">pub<br /></div></div></div></foreignObject><text x="728" y="263" fill="#000000" font-family="Helvetica" font-size="10px" text-anchor="end">pub
</text></switch></g><rect x="735" y="250" width="10" height="20" fill="#ffffff" stroke="#000000" pointer-events="all"/><rect x="576.5" y="50" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 38px; height: 1px; padding-top: 60px; margin-left: 579px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">rep<br /></div></div></div></foreignObject><text x="579" y="63" fill="#000000" font-family="Helvetica" font-size="10px">rep
</text></switch></g><rect x="561.5" y="50" width="10" height="20" fill="#ffffff" stroke="#000000" pointer-events="all"/><rect x="731.5" y="90" width="10" height="20" fill="#ffffff" stroke="#000000" pointer-events="all"/><rect x="686.5" y="85" width="40" height="30" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 38px; height: 1px; padding-top: 100px; margin-left: 687px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">router<br /></div></div></div></foreignObject><text x="725" y="103" fill="#000000" font-family="Helvetica" font-size="10px" text-anchor="end">router
</text></switch></g><rect x="45" y="214.51" width="10" height="20" fill="#ffffff" stroke="#000000" pointer-events="all"/><rect x="45" y="249.51" width="10" height="20" fill="#ffffff" stroke="#000000" pointer-events="all"/><rect x="45" y="70" width="10" height="20" fill="#ffffff" stroke="#000000" pointer-events="all"/><rect x="45" y="300" width="10" height="20" fill="#ffffff" stroke="#000000" pointer-events="all"/><rect x="45" y="20" width="10" height="20" fill="#ffffff" stroke="#000000" pointer-events="all"/><path d="M 50 50 L 50 40" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><rect x="0" y="214.51" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 38px; height: 1px; padding-top: 225px; margin-left: 0px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">dealer<br style="font-size: 10px" /></div></div></div></foreignObject><text x="38" y="228" fill="#000000" font-family="Helvetica" font-size="10px" text-anchor="end">dealer
</text></switch></g><rect x="0" y="249.51" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 38px; height: 1px; padding-top: 260px; margin-left: 0px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">dealer<br style="font-size: 10px" /></div></div></div></foreignObject><text x="38" y="263" fill="#000000" font-family="Helvetica" font-size="10px" text-anchor="end">dealer
</text></switch></g><rect x="0" y="70" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 38px; height: 1px; padding-top: 80px; margin-left: 0px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">req<br style="font-size: 10px" /></div></div></div></foreignObject><text x="38" y="83" fill="#000000" font-family="Helvetica" font-size="10px" text-anchor="end">req
</text></switch></g><rect x="0" y="300" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 38px; height: 1px; padding-top: 310px; margin-left: 0px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">sub<br style="font-size: 10px" /></div></div></div></foreignObject><text x="38" y="313" fill="#000000" font-family="Helvetica" font-size="10px" text-anchor="end">sub
</text></switch></g><rect x="0" y="20" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 38px; height: 1px; padding-top: 30px; margin-left: 0px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">dealer<br style="font-size: 10px" /></div></div></div></foreignObject><text x="38" y="33" fill="#000000" font-family="Helvetica" font-size="10px" text-anchor="end">dealer
</text></switch></g><rect x="405" y="140" width="10" height="20" fill="#ffffff" stroke="#000000" pointer-events="all"/><path d="M 251.6 280 L 250.2 209.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 368 150 L 364 150 Q 360 150 360 140 L 360 70 Q 360 60 364 60 L 368 60" fill="none" stroke="#ae4132" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><rect x="420" y="130" width="100" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 98px; height: 1px; padding-top: 140px; margin-left: 422px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #ae4132; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">shell_controller</div></div></div></foreignObject><text x="422" y="143" fill="#ae4132" font-family="Helvetica" font-size="10px">shell_controller</text></switch></g><rect x="405" y="249.51" width="10" height="20" fill="#ffffff" stroke="#000000" pointer-events="all"/><rect x="368" y="249.51" width="30" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 28px; height: 1px; padding-top: 260px; margin-left: 368px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">pub<br /></div></div></div></foreignObject><text x="396" y="263" fill="#000000" font-family="Helvetica" font-size="10px" text-anchor="end">pub
</text></switch></g><rect x="405" y="219.51" width="10" height="20" fill="#ffffff" stroke="#000000" pointer-events="all"/><rect x="415" y="204.51" width="50" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 48px; height: 1px; padding-top: 215px; margin-left: 415px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #ae4132; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">controller</div></div></div></foreignObject><text x="463" y="218" fill="#ae4132" font-family="Helvetica" font-size="10px" text-anchor="end">controller</text></switch></g><rect x="420" y="260" width="100" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 98px; height: 1px; padding-top: 270px; margin-left: 422px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #12739e; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">publisher_pub</div></div></div></foreignObject><text x="422" y="273" fill="#12739e" font-family="Helvetica" font-size="10px">publisher_pub</text></switch></g><path d="M 415 150 L 460 150 Q 470 150 470 160 L 470 219.5 Q 470 229.5 460 229.5 L 415 229.51" fill="none" stroke="#ae4132" stroke-miterlimit="10" pointer-events="stroke"/><rect x="280" y="229.51" width="90" height="30" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 237px; margin-left: 282px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">Main thread<br />(xshell)</div></div></div></foreignObject><text x="282" y="249" fill="#000000" font-family="Helvetica" font-size="12px">Main thread...</text></switch></g><rect x="368" y="140" width="32" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 30px; height: 1px; padding-top: 150px; margin-left: 368px;"><div style="box-sizing: border-box; font-size: 0; text-align: right; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">req<br /></div></div></div></foreignObject><text x="398" y="153" fill="#000000" font-family="Helvetica" font-size="10px" text-anchor="end">req
</text></switch></g><rect x="380" y="219.51" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 38px; height: 1px; padding-top: 230px; margin-left: 382px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 10px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">rep<br /></div></div></div></foreignObject><text x="382" y="233" fill="#000000" font-family="Helvetica" font-size="10px">rep
</text></switch></g><path d="M 415 259.51 L 565 260" fill="none" stroke="#006eaf" stroke-miterlimit="10" pointer-events="stroke"/></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://desk.draw.io/support/solutions/articles/16000042487" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>
|