blob: 5a3c9110847ee9508a5d6686ffbe1a4e14a65d93 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.44.1 (20201121.0304)
-->
<!-- Pages: 1 -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1274pt" height="777pt" viewBox="0.00 0.00 1274.46 777.00"><script>
(function() {
var enablePanZoom = false;
var enablePanZoomControls = false;
var panZoomScriptUrl = "https://graphviz.corp.google.com/svg-pan-zoom.js";
var isEmbedded = true;
try {
// This condition is true when the SVG is being displayed in a
// top-level browser window. If the parent location's href is
// different, or we can't access it (due to security constraints
// on accessing javascript properties on a different domain),
// then the document is embedded.
if (window.location.href == window.parent.location.href) {
isEmbedded = false;
}
} catch (e) {}
if (!isEmbedded) enablePanZoom = true;
if (enablePanZoom &amp;&amp; typeof svgPanZoom === 'undefined') {
var panZoomScript =
document.createElementNS('http://www.w3.org/2000/svg', 'script');
panZoomScript.setAttributeNS(
'http://www.w3.org/1999/xlink', 'xlink:href', panZoomScriptUrl);
document.currentScript.parentElement.appendChild(panZoomScript);
}
window.onload = function() {
var svg = document.getElementsByTagName("svg")[0];
if (!isEmbedded) {
svg.removeAttribute("width");
svg.removeAttribute("height");
}
if (enablePanZoom) {
svgPanZoom(svg, {
minZoom: 0.2,
maxZoom: 100,
controlIconsEnabled: enablePanZoomControls
});
}
var links = document.getElementsByTagName("a");
for (var i = 0; i &lt; links.length; i++) {
if (!links[i].getAttribute("target")) {
links[i].setAttribute("target", "_top");
}
}
};
})();
</script>
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 773)">
<polygon fill="white" stroke="transparent" points="-4,4 -4,-773 1270.46,-773 1270.46,4 -4,4"/>
<text text-anchor="middle" x="633.23" y="-753.8" font-family="Times,serif" font-size="14.00">TWO-FINGER SWIPE RECOGNIZER</text>
<g id="clust1" class="cluster">
<title>cluster_initial_contender</title>
<polygon fill="none" stroke="black" points="142.79,-590 142.79,-738 935.46,-738 935.46,-590 142.79,-590"/>
<text text-anchor="middle" x="539.13" y="-722.8" font-family="Times,serif" font-size="14.00">InitialContender</text>
<text text-anchor="middle" x="539.13" y="-707.8" font-family="Times,serif" font-size="14.00">`impl Contender`</text>
</g>
<g id="clust4" class="cluster">
<title>cluster_forward_motion</title>
<polygon fill="none" stroke="black" points="187.79,-8 187.79,-194 1242.46,-194 1242.46,-8 187.79,-8"/>
<text text-anchor="middle" x="715.13" y="-178.8" font-family="Times,serif" font-size="14.00">Winner</text>
</g>
<g id="clust3" class="cluster">
<title>cluster_matched_contender</title>
<polygon fill="none" stroke="black" points="164.79,-202 164.79,-388 1217.96,-388 1217.96,-202 164.79,-202"/>
<text text-anchor="middle" x="691.38" y="-372.8" font-family="Times,serif" font-size="14.00">MatchedContender</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_finger_contact_contender</title>
<polygon fill="none" stroke="black" points="179.79,-396 179.79,-582 1258.46,-582 1258.46,-396 179.79,-396"/>
<text text-anchor="middle" x="719.13" y="-566.8" font-family="Times,serif" font-size="14.00">FingerContactContender</text>
<text text-anchor="middle" x="719.13" y="-551.8" font-family="Times,serif" font-size="14.00">`impl Contender`</text>
</g>
<!-- arena -->
<g id="node1" class="node">
<title>arena</title>
<ellipse fill="none" stroke="black" cx="33.9" cy="-311" rx="29.81" ry="29.81"/>
<ellipse fill="none" stroke="black" cx="33.9" cy="-311" rx="33.8" ry="33.8"/>
<text text-anchor="middle" x="33.9" y="-307.3" font-family="Times,serif" font-size="14.00">arena</text>
</g>
<!-- examine_at_initial_contender -->
<g id="node2" class="node">
<title>examine_at_initial_contender</title>
<polygon fill="none" stroke="black" points="258.79,-674 150.79,-636 258.79,-598 366.79,-636 258.79,-674"/>
<text text-anchor="middle" x="258.79" y="-639.8" font-family="Times,serif" font-size="14.00">exactly</text>
<text text-anchor="middle" x="258.79" y="-624.8" font-family="Times,serif" font-size="14.00">2 finger contact?</text>
</g>
<!-- arena&#45;&gt;examine_at_initial_contender -->
<g id="edge1" class="edge">
<title>arena-&gt;examine_at_initial_contender</title>
<path fill="none" stroke="black" d="M39.6,-344.66C49.19,-401.44 76.04,-516.78 142.79,-586 155.05,-598.71 171.08,-608.38 187.26,-615.67"/>
<polygon fill="black" stroke="black" points="186.21,-619.02 196.78,-619.69 188.93,-612.57 186.21,-619.02"/>
<text text-anchor="middle" x="109.29" y="-592.8" font-family="Times,serif" font-size="14.00">examine</text>
<text text-anchor="middle" x="109.29" y="-577.8" font-family="Times,serif" font-size="14.00">event()</text>
</g>
<!-- examine_at_finger_contact_contender -->
<g id="node6" class="node">
<title>examine_at_finger_contact_contender</title>
<polygon fill="none" stroke="black" points="258.79,-480 187.79,-442 258.79,-404 329.79,-442 258.79,-480"/>
<text text-anchor="middle" x="258.79" y="-445.8" font-family="Times,serif" font-size="14.00">exactly</text>
<text text-anchor="middle" x="258.79" y="-430.8" font-family="Times,serif" font-size="14.00">2 fingers?</text>
</g>
<!-- arena&#45;&gt;examine_at_finger_contact_contender -->
<g id="edge6" class="edge">
<title>arena-&gt;examine_at_finger_contact_contender</title>
<path fill="none" stroke="black" d="M60.31,-332.78C81.45,-350.22 112.83,-374.56 142.79,-392 162.94,-403.72 186.34,-414.38 206.76,-422.82"/>
<polygon fill="black" stroke="black" points="205.63,-426.14 216.21,-426.66 208.26,-419.65 205.63,-426.14"/>
<text text-anchor="middle" x="109.29" y="-402.8" font-family="Times,serif" font-size="14.00">examine</text>
<text text-anchor="middle" x="109.29" y="-387.8" font-family="Times,serif" font-size="14.00">event()</text>
</g>
<!-- verify_at_matched_contender -->
<g id="node12" class="node">
<title>verify_at_matched_contender</title>
<polygon fill="none" stroke="black" points="258.79,-349 184.79,-311 258.79,-273 332.79,-311 258.79,-349"/>
<text text-anchor="middle" x="258.79" y="-314.8" font-family="Times,serif" font-size="14.00">exactly</text>
<text text-anchor="middle" x="258.79" y="-299.8" font-family="Times,serif" font-size="14.00"> 2 fingers?</text>
</g>
<!-- arena&#45;&gt;verify_at_matched_contender -->
<g id="edge13" class="edge">
<title>arena-&gt;verify_at_matched_contender</title>
<path fill="none" stroke="black" d="M68.27,-311C96.24,-311 137.41,-311 174.23,-311"/>
<polygon fill="black" stroke="black" points="174.49,-314.5 184.49,-311 174.49,-307.5 174.49,-314.5"/>
<text text-anchor="middle" x="109.29" y="-329.8" font-family="Times,serif" font-size="14.00">verify</text>
<text text-anchor="middle" x="109.29" y="-314.8" font-family="Times,serif" font-size="14.00">event()</text>
</g>
<!-- return_winner_at_matched_contender -->
<g id="node17" class="node">
<title>return_winner_at_matched_contender</title>
<polygon fill="none" stroke="black" points="344.79,-255 172.79,-255 172.79,-217 344.79,-217 344.79,-255"/>
<text text-anchor="middle" x="258.79" y="-239.8" font-family="Times,serif" font-size="14.00">return</text>
<text text-anchor="middle" x="258.79" y="-224.8" font-family="Times,serif" font-size="14.00">vec![events], Winner, Scroll</text>
</g>
<!-- arena&#45;&gt;return_winner_at_matched_contender -->
<g id="edge20" class="edge">
<title>arena-&gt;return_winner_at_matched_contender</title>
<path fill="none" stroke="black" d="M56.06,-284.89C64.42,-276.26 74.68,-267.48 85.79,-262 109.23,-250.44 136.47,-243.73 162.26,-239.9"/>
<polygon fill="black" stroke="black" points="163,-243.33 172.45,-238.53 162.07,-236.4 163,-243.33"/>
<text text-anchor="middle" x="109.29" y="-295.8" font-family="Times,serif" font-size="14.00">process</text>
<text text-anchor="middle" x="109.29" y="-280.8" font-family="Times,serif" font-size="14.00">buffered</text>
<text text-anchor="middle" x="109.29" y="-265.8" font-family="Times,serif" font-size="14.00">events()</text>
</g>
<!-- process_at_winner -->
<g id="node18" class="node">
<title>process_at_winner</title>
<polygon fill="none" stroke="black" points="258.79,-146 195.79,-108 258.79,-70 321.79,-108 258.79,-146"/>
<text text-anchor="middle" x="258.79" y="-111.8" font-family="Times,serif" font-size="14.00">button</text>
<text text-anchor="middle" x="258.79" y="-96.8" font-family="Times,serif" font-size="14.00">pressed?</text>
</g>
<!-- arena&#45;&gt;process_at_winner -->
<g id="edge21" class="edge">
<title>arena-&gt;process_at_winner</title>
<path fill="none" stroke="black" d="M43.14,-278.18C50.76,-253.39 64.22,-219.85 85.79,-197 118.95,-161.88 169.06,-138.15 206.65,-124.08"/>
<polygon fill="black" stroke="black" points="208.21,-127.24 216.41,-120.54 205.82,-120.66 208.21,-127.24"/>
<text text-anchor="middle" x="109.29" y="-230.8" font-family="Times,serif" font-size="14.00">process</text>
<text text-anchor="middle" x="109.29" y="-215.8" font-family="Times,serif" font-size="14.00">new</text>
<text text-anchor="middle" x="109.29" y="-200.8" font-family="Times,serif" font-size="14.00">event()</text>
</g>
<!-- examine2_at_initial_contender -->
<g id="node3" class="node">
<title>examine2_at_initial_contender</title>
<polygon fill="none" stroke="black" points="514.63,-640 421.96,-622 514.63,-604 607.3,-622 514.63,-640"/>
<text text-anchor="middle" x="514.63" y="-618.3" font-family="Times,serif" font-size="14.00">button pressed?</text>
</g>
<!-- examine_at_initial_contender&#45;&gt;examine2_at_initial_contender -->
<g id="edge2" class="edge">
<title>examine_at_initial_contender-&gt;examine2_at_initial_contender</title>
<path fill="none" stroke="black" d="M352.51,-630.89C378.4,-629.46 406.35,-627.92 431.57,-626.53"/>
<polygon fill="black" stroke="black" points="432.04,-630.01 441.83,-625.96 431.66,-623.02 432.04,-630.01"/>
<text text-anchor="middle" x="394.29" y="-632.8" font-family="Times,serif" font-size="14.00">yes</text>
</g>
<!-- return_mismatch_at_initial_contender -->
<g id="node4" class="node">
<title>return_mismatch_at_initial_contender</title>
<polygon fill="none" stroke="black" points="888.46,-692 816.46,-692 816.46,-654 888.46,-654 888.46,-692"/>
<text text-anchor="middle" x="852.46" y="-676.8" font-family="Times,serif" font-size="14.00">return</text>
<text text-anchor="middle" x="852.46" y="-661.8" font-family="Times,serif" font-size="14.00">Mismatch</text>
</g>
<!-- examine_at_initial_contender&#45;&gt;return_mismatch_at_initial_contender -->
<g id="edge3" class="edge">
<title>examine_at_initial_contender-&gt;return_mismatch_at_initial_contender</title>
<path fill="none" stroke="black" d="M342.79,-644.46C356.8,-645.75 371.21,-646.98 384.79,-648 539.2,-659.54 722.73,-667.77 806.16,-671.21"/>
<polygon fill="black" stroke="black" points="806.17,-674.71 816.31,-671.62 806.46,-667.72 806.17,-674.71"/>
<text text-anchor="middle" x="514.63" y="-664.8" font-family="Times,serif" font-size="14.00">no</text>
</g>
<!-- examine2_at_initial_contender&#45;&gt;return_mismatch_at_initial_contender -->
<g id="edge5" class="edge">
<title>examine2_at_initial_contender-&gt;return_mismatch_at_initial_contender</title>
<path fill="none" stroke="black" d="M566.24,-630.03C594.54,-634.5 630.45,-640.12 662.46,-645 711.47,-652.47 767.67,-660.76 805.96,-666.37"/>
<polygon fill="black" stroke="black" points="805.87,-669.89 816.27,-667.88 806.88,-662.96 805.87,-669.89"/>
<text text-anchor="middle" x="634.96" y="-644.8" font-family="Times,serif" font-size="14.00">yes</text>
</g>
<!-- return_finger_contact_contender_at_initial_contender -->
<g id="node5" class="node">
<title>return_finger_contact_contender_at_initial_contender</title>
<polygon fill="none" stroke="black" points="927.46,-636 777.46,-636 777.46,-598 927.46,-598 927.46,-636"/>
<text text-anchor="middle" x="852.46" y="-620.8" font-family="Times,serif" font-size="14.00">return</text>
<text text-anchor="middle" x="852.46" y="-605.8" font-family="Times,serif" font-size="14.00">FingerContactContender</text>
</g>
<!-- examine2_at_initial_contender&#45;&gt;return_finger_contact_contender_at_initial_contender -->
<g id="edge4" class="edge">
<title>examine2_at_initial_contender-&gt;return_finger_contact_contender_at_initial_contender</title>
<path fill="none" stroke="black" d="M591.54,-618.92C602.91,-618.55 614.5,-618.22 625.46,-618 672.4,-617.04 724.84,-616.76 767.38,-616.73"/>
<polygon fill="black" stroke="black" points="767.41,-620.23 777.41,-616.73 767.41,-613.23 767.41,-620.23"/>
<text text-anchor="middle" x="634.96" y="-621.8" font-family="Times,serif" font-size="14.00">no</text>
</g>
<!-- return_mismatch_at_finger_contact_contender -->
<g id="node7" class="node">
<title>return_mismatch_at_finger_contact_contender</title>
<polygon fill="none" stroke="black" points="888.46,-442 816.46,-442 816.46,-404 888.46,-404 888.46,-442"/>
<text text-anchor="middle" x="852.46" y="-426.8" font-family="Times,serif" font-size="14.00">return</text>
<text text-anchor="middle" x="852.46" y="-411.8" font-family="Times,serif" font-size="14.00">Mismatch</text>
</g>
<!-- examine_at_finger_contact_contender&#45;&gt;return_mismatch_at_finger_contact_contender -->
<g id="edge7" class="edge">
<title>examine_at_finger_contact_contender-&gt;return_mismatch_at_finger_contact_contender</title>
<path fill="none" stroke="black" d="M321.69,-437.59C351.87,-435.59 388.71,-433.37 421.79,-432 561.99,-426.21 728.07,-424.07 806.36,-423.34"/>
<polygon fill="black" stroke="black" points="806.39,-426.84 816.36,-423.25 806.33,-419.84 806.39,-426.84"/>
<text text-anchor="middle" x="514.63" y="-435.8" font-family="Times,serif" font-size="14.00">no</text>
</g>
<!-- examine2_at_finger_contact_contender -->
<g id="node8" class="node">
<title>examine2_at_finger_contact_contender</title>
<polygon fill="none" stroke="black" points="514.63,-532 451.63,-494 514.63,-456 577.63,-494 514.63,-532"/>
<text text-anchor="middle" x="514.63" y="-497.8" font-family="Times,serif" font-size="14.00">button</text>
<text text-anchor="middle" x="514.63" y="-482.8" font-family="Times,serif" font-size="14.00">pressed?</text>
</g>
<!-- examine_at_finger_contact_contender&#45;&gt;examine2_at_finger_contact_contender -->
<g id="edge8" class="edge">
<title>examine_at_finger_contact_contender-&gt;examine2_at_finger_contact_contender</title>
<path fill="none" stroke="black" d="M310.55,-452.4C352.97,-461.09 413.39,-473.46 457.29,-482.46"/>
<polygon fill="black" stroke="black" points="456.73,-485.92 467.23,-484.5 458.14,-479.06 456.73,-485.92"/>
<text text-anchor="middle" x="394.29" y="-474.8" font-family="Times,serif" font-size="14.00">yes</text>
</g>
<!-- examine2_at_finger_contact_contender&#45;&gt;return_mismatch_at_finger_contact_contender -->
<g id="edge9" class="edge">
<title>examine2_at_finger_contact_contender-&gt;return_mismatch_at_finger_contact_contender</title>
<path fill="none" stroke="black" d="M555.75,-480.62C585.05,-471.26 625.88,-459.03 662.46,-451 711.03,-440.34 767.53,-432.57 806.01,-427.95"/>
<polygon fill="black" stroke="black" points="806.85,-431.38 816.37,-426.73 806.03,-424.42 806.85,-431.38"/>
<text text-anchor="middle" x="634.96" y="-462.8" font-family="Times,serif" font-size="14.00">yes</text>
</g>
<!-- examine3_at_finger_contact_contender -->
<g id="node9" class="node">
<title>examine3_at_finger_contact_contender</title>
<polygon fill="none" stroke="black" points="852.46,-536 662.46,-498 852.46,-460 1042.46,-498 852.46,-536"/>
<text text-anchor="middle" x="852.46" y="-501.8" font-family="Times,serif" font-size="14.00">movement &gt; threshold &amp;&amp; </text>
<text text-anchor="middle" x="852.46" y="-486.8" font-family="Times,serif" font-size="14.00"> director ~vertical ~horizontal ?</text>
</g>
<!-- examine2_at_finger_contact_contender&#45;&gt;examine3_at_finger_contact_contender -->
<g id="edge10" class="edge">
<title>examine2_at_finger_contact_contender-&gt;examine3_at_finger_contact_contender</title>
<path fill="none" stroke="black" d="M576.45,-494.72C601.26,-495.02 631.44,-495.38 662.59,-495.75"/>
<polygon fill="black" stroke="black" points="662.69,-499.25 672.73,-495.87 662.77,-492.25 662.69,-499.25"/>
<text text-anchor="middle" x="634.96" y="-498.8" font-family="Times,serif" font-size="14.00">no</text>
</g>
<!-- return_self_at_finger_contact_contender -->
<g id="node10" class="node">
<title>return_self_at_finger_contact_contender</title>
<polygon fill="none" stroke="black" points="1200.96,-476 1146.96,-476 1146.96,-438 1200.96,-438 1200.96,-476"/>
<text text-anchor="middle" x="1173.96" y="-460.8" font-family="Times,serif" font-size="14.00">return</text>
<text text-anchor="middle" x="1173.96" y="-445.8" font-family="Times,serif" font-size="14.00">`self`</text>
</g>
<!-- examine3_at_finger_contact_contender&#45;&gt;return_self_at_finger_contact_contender -->
<g id="edge11" class="edge">
<title>examine3_at_finger_contact_contender-&gt;return_self_at_finger_contact_contender</title>
<path fill="none" stroke="black" d="M968.81,-483.2C1028.01,-475.6 1096.04,-466.87 1136.71,-461.65"/>
<polygon fill="black" stroke="black" points="1137.21,-465.12 1146.68,-460.37 1136.32,-458.17 1137.21,-465.12"/>
<text text-anchor="middle" x="1069.96" y="-474.8" font-family="Times,serif" font-size="14.00">no</text>
</g>
<!-- return_matched_contender -->
<g id="node11" class="node">
<title>return_matched_contender</title>
<polygon fill="none" stroke="black" points="1250.46,-530 1097.46,-530 1097.46,-494 1250.46,-494 1250.46,-530"/>
<text text-anchor="middle" x="1173.96" y="-508.3" font-family="Times,serif" font-size="14.00">returnMatchedContender</text>
</g>
<!-- examine3_at_finger_contact_contender&#45;&gt;return_matched_contender -->
<g id="edge12" class="edge">
<title>examine3_at_finger_contact_contender-&gt;return_matched_contender</title>
<path fill="none" stroke="black" d="M1008.53,-504.79C1035.52,-505.98 1062.69,-507.17 1086.95,-508.23"/>
<polygon fill="black" stroke="black" points="1087.02,-511.74 1097.16,-508.68 1087.32,-504.74 1087.02,-511.74"/>
<text text-anchor="middle" x="1069.96" y="-510.8" font-family="Times,serif" font-size="14.00">yes</text>
</g>
<!-- return_mismatch_at_matched_contender -->
<g id="node13" class="node">
<title>return_mismatch_at_matched_contender</title>
<polygon fill="none" stroke="black" points="1209.96,-267 1137.96,-267 1137.96,-229 1209.96,-229 1209.96,-267"/>
<text text-anchor="middle" x="1173.96" y="-251.8" font-family="Times,serif" font-size="14.00">return</text>
<text text-anchor="middle" x="1173.96" y="-236.8" font-family="Times,serif" font-size="14.00">Mismatch</text>
</g>
<!-- verify_at_matched_contender&#45;&gt;return_mismatch_at_matched_contender -->
<g id="edge14" class="edge">
<title>verify_at_matched_contender-&gt;return_mismatch_at_matched_contender</title>
<path fill="none" stroke="black" d="M304.39,-296.15C336.68,-285.87 381.55,-272.55 421.79,-264 692.01,-206.6 766.62,-216.13 1042.46,-231 1071.04,-232.54 1102.89,-236.64 1127.97,-240.43"/>
<polygon fill="black" stroke="black" points="1127.51,-243.9 1137.93,-241.97 1128.58,-236.98 1127.51,-243.9"/>
<text text-anchor="middle" x="634.96" y="-231.8" font-family="Times,serif" font-size="14.00">no</text>
</g>
<!-- verify2_at_matched_contender -->
<g id="node14" class="node">
<title>verify2_at_matched_contender</title>
<polygon fill="none" stroke="black" points="514.63,-349 451.63,-311 514.63,-273 577.63,-311 514.63,-349"/>
<text text-anchor="middle" x="514.63" y="-314.8" font-family="Times,serif" font-size="14.00">button</text>
<text text-anchor="middle" x="514.63" y="-299.8" font-family="Times,serif" font-size="14.00">pressed?</text>
</g>
<!-- verify_at_matched_contender&#45;&gt;verify2_at_matched_contender -->
<g id="edge15" class="edge">
<title>verify_at_matched_contender-&gt;verify2_at_matched_contender</title>
<path fill="none" stroke="black" d="M332.87,-311C366.85,-311 407.15,-311 441.07,-311"/>
<polygon fill="black" stroke="black" points="441.37,-314.5 451.37,-311 441.37,-307.5 441.37,-314.5"/>
<text text-anchor="middle" x="394.29" y="-314.8" font-family="Times,serif" font-size="14.00">yes</text>
</g>
<!-- verify2_at_matched_contender&#45;&gt;return_mismatch_at_matched_contender -->
<g id="edge16" class="edge">
<title>verify2_at_matched_contender-&gt;return_mismatch_at_matched_contender</title>
<path fill="none" stroke="black" d="M550.29,-294.49C579.47,-281.52 622.68,-264.45 662.46,-257 831.76,-225.31 1038.16,-236.54 1127.81,-243.8"/>
<polygon fill="black" stroke="black" points="1127.64,-247.29 1137.9,-244.64 1128.22,-240.32 1127.64,-247.29"/>
<text text-anchor="middle" x="852.46" y="-260.8" font-family="Times,serif" font-size="14.00">yes</text>
</g>
<!-- verify3_at_matched_contender -->
<g id="node15" class="node">
<title>verify3_at_matched_contender</title>
<polygon fill="none" stroke="black" points="852.46,-357 781.46,-319 852.46,-281 923.46,-319 852.46,-357"/>
<text text-anchor="middle" x="852.46" y="-322.8" font-family="Times,serif" font-size="14.00">on same</text>
<text text-anchor="middle" x="852.46" y="-307.8" font-family="Times,serif" font-size="14.00">direction?</text>
</g>
<!-- verify2_at_matched_contender&#45;&gt;verify3_at_matched_contender -->
<g id="edge17" class="edge">
<title>verify2_at_matched_contender-&gt;verify3_at_matched_contender</title>
<path fill="none" stroke="black" d="M575.28,-312.42C630.7,-313.74 713.53,-315.71 774.03,-317.16"/>
<polygon fill="black" stroke="black" points="774.21,-320.66 784.29,-317.4 774.38,-313.66 774.21,-320.66"/>
<text text-anchor="middle" x="634.96" y="-317.8" font-family="Times,serif" font-size="14.00">no</text>
</g>
<!-- verify3_at_matched_contender&#45;&gt;return_mismatch_at_matched_contender -->
<g id="edge18" class="edge">
<title>verify3_at_matched_contender-&gt;return_mismatch_at_matched_contender</title>
<path fill="none" stroke="black" d="M903.04,-307.98C964.51,-294.32 1068.42,-271.23 1127.78,-258.04"/>
<polygon fill="black" stroke="black" points="1128.62,-261.44 1137.62,-255.85 1127.1,-254.61 1128.62,-261.44"/>
<text text-anchor="middle" x="1069.96" y="-275.8" font-family="Times,serif" font-size="14.00">no</text>
</g>
<!-- return_self_at_matched_contender -->
<g id="node16" class="node">
<title>return_self_at_matched_contender</title>
<polygon fill="none" stroke="black" points="1200.96,-338 1146.96,-338 1146.96,-300 1200.96,-300 1200.96,-338"/>
<text text-anchor="middle" x="1173.96" y="-322.8" font-family="Times,serif" font-size="14.00">return</text>
<text text-anchor="middle" x="1173.96" y="-307.8" font-family="Times,serif" font-size="14.00">`self`</text>
</g>
<!-- verify3_at_matched_contender&#45;&gt;return_self_at_matched_contender -->
<g id="edge19" class="edge">
<title>verify3_at_matched_contender-&gt;return_self_at_matched_contender</title>
<path fill="none" stroke="black" d="M923.58,-319C989.4,-319 1085.23,-319 1136.84,-319"/>
<polygon fill="black" stroke="black" points="1136.85,-322.5 1146.85,-319 1136.85,-315.5 1136.85,-322.5"/>
<text text-anchor="middle" x="1069.96" y="-322.8" font-family="Times,serif" font-size="14.00">yes</text>
</g>
<!-- return_end_with_event_at_winner -->
<g id="node19" class="node">
<title>return_end_with_event_at_winner</title>
<polygon fill="none" stroke="black" points="1234.46,-73 1113.46,-73 1113.46,-35 1234.46,-35 1234.46,-73"/>
<text text-anchor="middle" x="1173.96" y="-57.8" font-family="Times,serif" font-size="14.00">return</text>
<text text-anchor="middle" x="1173.96" y="-42.8" font-family="Times,serif" font-size="14.00">EndGesture(Some)</text>
</g>
<!-- process_at_winner&#45;&gt;return_end_with_event_at_winner -->
<g id="edge22" class="edge">
<title>process_at_winner-&gt;return_end_with_event_at_winner</title>
<path fill="none" stroke="black" d="M293.84,-90.99C325.94,-75.93 375.84,-54.99 421.79,-46 668.48,2.25 969.48,-26.69 1103.2,-43.93"/>
<polygon fill="black" stroke="black" points="1102.93,-47.43 1113.3,-45.26 1103.84,-40.49 1102.93,-47.43"/>
<text text-anchor="middle" x="634.96" y="-26.8" font-family="Times,serif" font-size="14.00">yes</text>
</g>
<!-- process2_at_winner -->
<g id="node20" class="node">
<title>process2_at_winner</title>
<polygon fill="none" stroke="black" points="514.63,-161 458.63,-108 514.63,-55 570.63,-108 514.63,-161"/>
<text text-anchor="middle" x="514.63" y="-119.3" font-family="Times,serif" font-size="14.00">num</text>
<text text-anchor="middle" x="514.63" y="-104.3" font-family="Times,serif" font-size="14.00">fingers</text>
<text text-anchor="middle" x="514.63" y="-89.3" font-family="Times,serif" font-size="14.00">present</text>
</g>
<!-- process_at_winner&#45;&gt;process2_at_winner -->
<g id="edge23" class="edge">
<title>process_at_winner-&gt;process2_at_winner</title>
<path fill="none" stroke="black" d="M321.89,-108C360.15,-108 409.16,-108 448.05,-108"/>
<polygon fill="black" stroke="black" points="448.22,-111.5 458.22,-108 448.22,-104.5 448.22,-111.5"/>
<text text-anchor="middle" x="394.29" y="-111.8" font-family="Times,serif" font-size="14.00">no</text>
</g>
<!-- process2_at_winner&#45;&gt;return_end_with_event_at_winner -->
<g id="edge25" class="edge">
<title>process2_at_winner-&gt;return_end_with_event_at_winner</title>
<path fill="none" stroke="black" d="M554.81,-92.71C583.98,-82.13 625.07,-68.94 662.46,-63 818.25,-38.26 1004.13,-43.56 1102.99,-49.1"/>
<polygon fill="black" stroke="black" points="1102.97,-52.6 1113.15,-49.69 1103.37,-45.62 1102.97,-52.6"/>
<text text-anchor="middle" x="852.46" y="-66.8" font-family="Times,serif" font-size="14.00">!=2</text>
</g>
<!-- process3_at_winner -->
<g id="node21" class="node">
<title>process3_at_winner</title>
<polygon fill="none" stroke="black" points="852.46,-163 781.46,-125 852.46,-87 923.46,-125 852.46,-163"/>
<text text-anchor="middle" x="852.46" y="-128.8" font-family="Times,serif" font-size="14.00">on same</text>
<text text-anchor="middle" x="852.46" y="-113.8" font-family="Times,serif" font-size="14.00">direction?</text>
</g>
<!-- process2_at_winner&#45;&gt;process3_at_winner -->
<g id="edge24" class="edge">
<title>process2_at_winner-&gt;process3_at_winner</title>
<path fill="none" stroke="black" d="M568.1,-110.66C624.2,-113.5 713.61,-118.02 776.98,-121.23"/>
<polygon fill="black" stroke="black" points="777.14,-124.74 787.31,-121.75 777.5,-117.75 777.14,-124.74"/>
<text text-anchor="middle" x="634.96" y="-117.8" font-family="Times,serif" font-size="14.00">2</text>
</g>
<!-- process3_at_winner&#45;&gt;return_end_with_event_at_winner -->
<g id="edge26" class="edge">
<title>process3_at_winner-&gt;return_end_with_event_at_winner</title>
<path fill="none" stroke="black" d="M903.04,-113.98C956.75,-102.05 1042.86,-82.91 1103.35,-69.47"/>
<polygon fill="black" stroke="black" points="1104.2,-72.87 1113.2,-67.28 1102.68,-66.03 1104.2,-72.87"/>
<text text-anchor="middle" x="1069.96" y="-81.8" font-family="Times,serif" font-size="14.00">no</text>
</g>
<!-- return_continue_with_event_at_winner -->
<g id="node22" class="node">
<title>return_continue_with_event_at_winner</title>
<polygon fill="none" stroke="black" points="1230.46,-151.5 1117.46,-151.5 1117.46,-98.5 1230.46,-98.5 1230.46,-151.5"/>
<text text-anchor="middle" x="1173.96" y="-136.3" font-family="Times,serif" font-size="14.00">return</text>
<text text-anchor="middle" x="1173.96" y="-121.3" font-family="Times,serif" font-size="14.00">ContinueGesture(</text>
<text text-anchor="middle" x="1173.96" y="-106.3" font-family="Times,serif" font-size="14.00">Some, self)</text>
</g>
<!-- process3_at_winner&#45;&gt;return_continue_with_event_at_winner -->
<g id="edge27" class="edge">
<title>process3_at_winner-&gt;return_continue_with_event_at_winner</title>
<path fill="none" stroke="black" d="M923.58,-125C978.28,-125 1053.72,-125 1107.27,-125"/>
<polygon fill="black" stroke="black" points="1107.34,-128.5 1117.34,-125 1107.34,-121.5 1107.34,-128.5"/>
<text text-anchor="middle" x="1069.96" y="-128.8" font-family="Times,serif" font-size="14.00">yes</text>
</g>
</g>
</svg>