ソースを参照

Much cooler looking priority graphs

Joeri Exelmans 5 年 前
コミット
0594ee5c6d

+ 316 - 564
examples/chatclient/model_chatclient_priorities.svg

@@ -4,664 +4,416 @@
 <!-- Generated by graphviz version 2.40.1 (20161225.0304)
  -->
 <!-- Title: priorities Pages: 1 -->
-<svg width="3259pt" height="548pt"
- viewBox="0.00 0.00 3259.30 548.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 544)">
+<svg width="1899pt" height="678pt"
+ viewBox="0.00 0.00 1899.43 678.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 674)">
 <title>priorities</title>
-<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-544 3255.2978,-544 3255.2978,4 -4,4"/>
-<!-- 3. Connected&#45;&gt;Connecting -->
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-674 1895.4331,-674 1895.4331,4 -4,4"/>
+<!-- 1. TryingConnect&#45;&gt;H -->
 <g id="node1" class="node">
-<title>3. Connected&#45;&gt;Connecting</title>
-<ellipse fill="none" stroke="#000000" cx="1627.2978" cy="-522" rx="106.6812" ry="18"/>
-<text text-anchor="middle" x="1627.2978" y="-518.3" font-family="Times,serif" font-size="14.00" fill="#000000">3. Connected&#45;&gt;Connecting</text>
+<title>1. TryingConnect&#45;&gt;H</title>
+<ellipse fill="none" stroke="#000000" cx="87.7422" cy="-436" rx="87.9851" ry="18"/>
+<text text-anchor="middle" x="87.7422" y="-432.3" font-family="Times,serif" font-size="14.00" fill="#000000">1. TryingConnect&#45;&gt;H</text>
 </g>
-<!-- 4. NotJoined&#45;&gt;GettingRoomNumber -->
+<!-- 2. TryingConnect&#45;&gt;Initial -->
 <g id="node2" class="node">
-<title>4. NotJoined&#45;&gt;GettingRoomNumber</title>
-<ellipse fill="none" stroke="#000000" cx="1589.2978" cy="-234" rx="141.8751" ry="18"/>
-<text text-anchor="middle" x="1589.2978" y="-230.3" font-family="Times,serif" font-size="14.00" fill="#000000">4. NotJoined&#45;&gt;GettingRoomNumber</text>
+<title>2. TryingConnect&#45;&gt;Initial</title>
+<ellipse fill="none" stroke="#000000" cx="152.7422" cy="-364" rx="102.8821" ry="18"/>
+<text text-anchor="middle" x="152.7422" y="-360.3" font-family="Times,serif" font-size="14.00" fill="#000000">2. TryingConnect&#45;&gt;Initial</text>
 </g>
-<!-- 3. Connected&#45;&gt;Connecting&#45;&gt;4. NotJoined&#45;&gt;GettingRoomNumber -->
+<!-- 1. TryingConnect&#45;&gt;H&#45;&gt;2. TryingConnect&#45;&gt;Initial -->
 <g id="edge1" class="edge">
-<title>3. Connected&#45;&gt;Connecting&#45;&gt;4. NotJoined&#45;&gt;GettingRoomNumber</title>
-<path fill="none" stroke="#000000" d="M1624.9207,-503.9843C1618.4963,-455.2939 1600.75,-320.7961 1592.9998,-262.0573"/>
-<polygon fill="#000000" stroke="#000000" points="1596.4521,-261.4651 1591.6739,-252.0089 1589.5122,-262.3808 1596.4521,-261.4651"/>
+<title>1. TryingConnect&#45;&gt;H&#45;&gt;2. TryingConnect&#45;&gt;Initial</title>
+<path fill="none" stroke="#00ff00" d="M103.8096,-418.2022C111.6222,-409.5483 121.1541,-398.99 129.7224,-389.4988"/>
+<polygon fill="#00ff00" stroke="#00ff00" points="132.5312,-391.6106 136.6344,-381.8425 127.3354,-386.9199 132.5312,-391.6106"/>
+</g>
+<!-- pseudo0 -->
+<g id="node18" class="node">
+<title>pseudo0</title>
+<ellipse fill="#c0c0c0" stroke="#000000" cx="1010.7422" cy="-295.5" rx="14.5" ry="14.5"/>
+</g>
+<!-- 1. TryingConnect&#45;&gt;H&#45;&gt;pseudo0 -->
+<g id="edge22" class="edge">
+<title>1. TryingConnect&#45;&gt;H&#45;&gt;pseudo0</title>
+<path fill="none" stroke="#0000ff" d="M66.9298,-418.3192C46.3393,-398.7641 20.5964,-367.2219 40.7422,-346 74.2632,-310.6884 836.9712,-297.9863 985.7222,-295.8409"/>
+<polygon fill="#0000ff" stroke="#0000ff" points="986.1247,-299.3356 996.0742,-295.6945 986.0257,-292.3363 986.1247,-299.3356"/>
+</g>
+<!-- 2. TryingConnect&#45;&gt;Initial&#45;&gt;pseudo0 -->
+<g id="edge23" class="edge">
+<title>2. TryingConnect&#45;&gt;Initial&#45;&gt;pseudo0</title>
+<path fill="none" stroke="#0000ff" d="M227.2027,-351.5791C241.3032,-349.5011 255.9543,-347.5277 269.7422,-346 549.917,-314.9573 891.9469,-300.1061 985.8726,-296.4304"/>
+<polygon fill="#0000ff" stroke="#0000ff" points="986.2184,-299.9197 996.0762,-296.0372 985.9488,-292.9249 986.2184,-299.9197"/>
 </g>
 <!-- 5. GettingRoomNumber&#45;&gt;GettingRoomNumber -->
 <g id="node3" class="node">
 <title>5. GettingRoomNumber&#45;&gt;GettingRoomNumber</title>
-<ellipse fill="none" stroke="#000000" cx="2863.2978" cy="-450" rx="183.0677" ry="18"/>
-<text text-anchor="middle" x="2863.2978" y="-446.3" font-family="Times,serif" font-size="14.00" fill="#000000">5. GettingRoomNumber&#45;&gt;GettingRoomNumber</text>
-</g>
-<!-- 3. Connected&#45;&gt;Connecting&#45;&gt;5. GettingRoomNumber&#45;&gt;GettingRoomNumber -->
-<g id="edge2" class="edge">
-<title>3. Connected&#45;&gt;Connecting&#45;&gt;5. GettingRoomNumber&#45;&gt;GettingRoomNumber</title>
-<path fill="none" stroke="#000000" d="M1728.1827,-516.1232C1940.3021,-503.7667 2434.3878,-474.985 2695.1826,-459.7931"/>
-<polygon fill="#000000" stroke="#000000" points="2695.7294,-463.2673 2705.5089,-459.1916 2695.3223,-456.2791 2695.7294,-463.2673"/>
+<ellipse fill="none" stroke="#000000" cx="418.7422" cy="-580" rx="183.0677" ry="18"/>
+<text text-anchor="middle" x="418.7422" y="-576.3" font-family="Times,serif" font-size="14.00" fill="#000000">5. GettingRoomNumber&#45;&gt;GettingRoomNumber</text>
 </g>
 <!-- 6. GettingRoomNumber&#45;&gt;JoiningOrJoined -->
 <g id="node4" class="node">
 <title>6. GettingRoomNumber&#45;&gt;JoiningOrJoined</title>
-<ellipse fill="none" stroke="#000000" cx="2292.2978" cy="-378" rx="163.5712" ry="18"/>
-<text text-anchor="middle" x="2292.2978" y="-374.3" font-family="Times,serif" font-size="14.00" fill="#000000">6. GettingRoomNumber&#45;&gt;JoiningOrJoined</text>
+<ellipse fill="none" stroke="#000000" cx="475.7422" cy="-508" rx="163.5712" ry="18"/>
+<text text-anchor="middle" x="475.7422" y="-504.3" font-family="Times,serif" font-size="14.00" fill="#000000">6. GettingRoomNumber&#45;&gt;JoiningOrJoined</text>
 </g>
-<!-- 3. Connected&#45;&gt;Connecting&#45;&gt;6. GettingRoomNumber&#45;&gt;JoiningOrJoined -->
-<g id="edge3" class="edge">
-<title>3. Connected&#45;&gt;Connecting&#45;&gt;6. GettingRoomNumber&#45;&gt;JoiningOrJoined</title>
-<path fill="none" stroke="#000000" d="M1723.6688,-514.2622C1838.7918,-504.4106 2024.2455,-486.4436 2091.2978,-468 2149.4395,-452.0074 2212.231,-421.5608 2251.8755,-400.5397"/>
-<polygon fill="#000000" stroke="#000000" points="2253.5427,-403.6171 2260.7053,-395.8102 2250.2376,-397.4465 2253.5427,-403.6171"/>
+<!-- 5. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;6. GettingRoomNumber&#45;&gt;JoiningOrJoined -->
+<g id="edge2" class="edge">
+<title>5. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;6. GettingRoomNumber&#45;&gt;JoiningOrJoined</title>
+<path fill="none" stroke="#00ff00" d="M433.1257,-561.8314C439.6908,-553.5386 447.5929,-543.557 454.8,-534.4533"/>
+<polygon fill="#00ff00" stroke="#00ff00" points="457.7021,-536.4262 461.165,-526.4133 452.2138,-532.0813 457.7021,-536.4262"/>
+</g>
+<!-- 5. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;pseudo0 -->
+<g id="edge26" class="edge">
+<title>5. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;pseudo0</title>
+<path fill="none" stroke="#0000ff" d="M350.7491,-563.258C331.9966,-555.182 313.7883,-543.3264 302.7422,-526 256.7698,-453.8895 298.8006,-392.2363 370.7422,-346 423.2618,-312.2461 874.0909,-298.893 985.786,-296.086"/>
+<polygon fill="#0000ff" stroke="#0000ff" points="986.1531,-299.5782 996.0642,-295.8337 985.9813,-292.5803 986.1531,-299.5782"/>
 </g>
 <!-- 7. GettingRoomNumber&#45;&gt;GettingRoomNumber -->
 <g id="node5" class="node">
 <title>7. GettingRoomNumber&#45;&gt;GettingRoomNumber</title>
-<ellipse fill="none" stroke="#000000" cx="2292.2978" cy="-306" rx="183.0677" ry="18"/>
-<text text-anchor="middle" x="2292.2978" y="-302.3" font-family="Times,serif" font-size="14.00" fill="#000000">7. GettingRoomNumber&#45;&gt;GettingRoomNumber</text>
+<ellipse fill="none" stroke="#000000" cx="532.7422" cy="-436" rx="183.0677" ry="18"/>
+<text text-anchor="middle" x="532.7422" y="-432.3" font-family="Times,serif" font-size="14.00" fill="#000000">7. GettingRoomNumber&#45;&gt;GettingRoomNumber</text>
 </g>
-<!-- 3. Connected&#45;&gt;Connecting&#45;&gt;7. GettingRoomNumber&#45;&gt;GettingRoomNumber -->
-<g id="edge4" class="edge">
-<title>3. Connected&#45;&gt;Connecting&#45;&gt;7. GettingRoomNumber&#45;&gt;GettingRoomNumber</title>
-<path fill="none" stroke="#000000" d="M1717.9534,-512.4944C1803.4967,-502.6613 1925.0345,-486.2108 1969.2978,-468 2045.2683,-436.7442 2045.8084,-396.7118 2119.2978,-360 2137.5264,-350.8939 2181.595,-337.179 2220.6899,-325.85"/>
-<polygon fill="#000000" stroke="#000000" points="2221.8616,-329.1549 2230.5034,-323.0254 2219.9254,-322.428 2221.8616,-329.1549"/>
+<!-- 6. GettingRoomNumber&#45;&gt;JoiningOrJoined&#45;&gt;7. GettingRoomNumber&#45;&gt;GettingRoomNumber -->
+<g id="edge3" class="edge">
+<title>6. GettingRoomNumber&#45;&gt;JoiningOrJoined&#45;&gt;7. GettingRoomNumber&#45;&gt;GettingRoomNumber</title>
+<path fill="none" stroke="#00ff00" d="M490.1257,-489.8314C496.6908,-481.5386 504.5929,-471.557 511.8,-462.4533"/>
+<polygon fill="#00ff00" stroke="#00ff00" points="514.7021,-464.4262 518.165,-454.4133 509.2138,-460.0813 514.7021,-464.4262"/>
+</g>
+<!-- 6. GettingRoomNumber&#45;&gt;JoiningOrJoined&#45;&gt;pseudo0 -->
+<g id="edge27" class="edge">
+<title>6. GettingRoomNumber&#45;&gt;JoiningOrJoined&#45;&gt;pseudo0</title>
+<path fill="none" stroke="#0000ff" d="M393.3692,-492.3846C372.8146,-484.3856 353.1252,-472.29 340.7422,-454 331.7722,-440.7509 332.0236,-431.4159 340.7422,-418 383.6764,-351.9345 426.5723,-366.1531 502.7422,-346 595.796,-321.3798 896.6573,-302.1833 985.696,-296.9312"/>
+<polygon fill="#0000ff" stroke="#0000ff" points="986.1461,-300.411 995.9253,-296.3345 985.7384,-293.4229 986.1461,-300.411"/>
 </g>
 <!-- 8. GettingRoomNumber&#45;&gt;GettingRoomNumber -->
 <g id="node6" class="node">
 <title>8. GettingRoomNumber&#45;&gt;GettingRoomNumber</title>
-<ellipse fill="none" stroke="#000000" cx="2812.2978" cy="-234" rx="183.0677" ry="18"/>
-<text text-anchor="middle" x="2812.2978" y="-230.3" font-family="Times,serif" font-size="14.00" fill="#000000">8. GettingRoomNumber&#45;&gt;GettingRoomNumber</text>
-</g>
-<!-- 3. Connected&#45;&gt;Connecting&#45;&gt;8. GettingRoomNumber&#45;&gt;GettingRoomNumber -->
-<g id="edge5" class="edge">
-<title>3. Connected&#45;&gt;Connecting&#45;&gt;8. GettingRoomNumber&#45;&gt;GettingRoomNumber</title>
-<path fill="none" stroke="#000000" d="M1732.0813,-518.4112C1893.6306,-510.2047 2211.4143,-483.3706 2465.2978,-396 2580.0437,-356.5117 2707.5612,-290.9807 2771.3082,-256.6165"/>
-<polygon fill="#000000" stroke="#000000" points="2773.1145,-259.6186 2780.2416,-251.7793 2769.7814,-253.4631 2773.1145,-259.6186"/>
-</g>
-<!-- 9. Leaving&#45;&gt;NotJoined -->
-<g id="node7" class="node">
-<title>9. Leaving&#45;&gt;NotJoined</title>
-<ellipse fill="none" stroke="#000000" cx="2328.2978" cy="-234" rx="92.8835" ry="18"/>
-<text text-anchor="middle" x="2328.2978" y="-230.3" font-family="Times,serif" font-size="14.00" fill="#000000">9. Leaving&#45;&gt;NotJoined</text>
+<ellipse fill="none" stroke="#000000" cx="706.7422" cy="-364" rx="183.0677" ry="18"/>
+<text text-anchor="middle" x="706.7422" y="-360.3" font-family="Times,serif" font-size="14.00" fill="#000000">8. GettingRoomNumber&#45;&gt;GettingRoomNumber</text>
 </g>
-<!-- 3. Connected&#45;&gt;Connecting&#45;&gt;9. Leaving&#45;&gt;NotJoined -->
-<g id="edge6" class="edge">
-<title>3. Connected&#45;&gt;Connecting&#45;&gt;9. Leaving&#45;&gt;NotJoined</title>
-<path fill="none" stroke="#000000" d="M1656.4202,-504.6468C1728.9897,-462.0693 1924.6888,-351.3042 2100.2978,-288 2148.6827,-270.558 2204.8902,-257.1727 2249.3905,-248.0916"/>
-<polygon fill="#000000" stroke="#000000" points="2250.1632,-251.5063 2259.2779,-246.1051 2248.7844,-244.6435 2250.1632,-251.5063"/>
+<!-- 7. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;8. GettingRoomNumber&#45;&gt;GettingRoomNumber -->
+<g id="edge4" class="edge">
+<title>7. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;8. GettingRoomNumber&#45;&gt;GettingRoomNumber</title>
+<path fill="none" stroke="#00ff00" d="M575.3074,-418.3868C599.3057,-408.4565 629.47,-395.9747 654.8467,-385.474"/>
+<polygon fill="#00ff00" stroke="#00ff00" points="656.4133,-388.6136 664.3153,-381.556 653.7368,-382.1455 656.4133,-388.6136"/>
 </g>
-<!-- 10. Joining&#45;&gt;H -->
-<g id="node8" class="node">
-<title>10. Joining&#45;&gt;H</title>
-<ellipse fill="none" stroke="#000000" cx="1852.2978" cy="-234" rx="64.9885" ry="18"/>
-<text text-anchor="middle" x="1852.2978" y="-230.3" font-family="Times,serif" font-size="14.00" fill="#000000">10. Joining&#45;&gt;H</text>
+<!-- 7. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;pseudo0 -->
+<g id="edge28" class="edge">
+<title>7. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;pseudo0</title>
+<path fill="none" stroke="#0000ff" d="M521.0577,-417.7283C509.8434,-397.6435 497.011,-365.6282 514.7422,-346 546.6598,-310.6677 890.1442,-298.7649 986.0178,-296.118"/>
+<polygon fill="#0000ff" stroke="#0000ff" points="986.3035,-299.6117 996.2066,-295.8462 986.1168,-292.6142 986.3035,-299.6117"/>
 </g>
-<!-- 3. Connected&#45;&gt;Connecting&#45;&gt;10. Joining&#45;&gt;H -->
-<g id="edge7" class="edge">
-<title>3. Connected&#45;&gt;Connecting&#45;&gt;10. Joining&#45;&gt;H</title>
-<path fill="none" stroke="#000000" d="M1641.3725,-503.9843C1679.898,-454.6717 1787.1848,-317.3446 1832.108,-259.8429"/>
-<polygon fill="#000000" stroke="#000000" points="1835.1172,-261.6762 1838.5156,-251.6412 1829.601,-257.3667 1835.1172,-261.6762"/>
+<!-- 8. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;pseudo0 -->
+<g id="edge29" class="edge">
+<title>8. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;pseudo0</title>
+<path fill="none" stroke="#0000ff" d="M780.3321,-347.4181C847.3773,-332.3108 942.4498,-310.8883 986.5464,-300.952"/>
+<polygon fill="#0000ff" stroke="#0000ff" points="987.384,-304.3511 996.3701,-298.7385 985.8453,-297.5223 987.384,-304.3511"/>
 </g>
 <!-- 11. Initial&#45;&gt;EnteringMessage -->
-<g id="node9" class="node">
+<g id="node7" class="node">
 <title>11. Initial&#45;&gt;EnteringMessage</title>
-<ellipse fill="none" stroke="#000000" cx="1446.2978" cy="-306" rx="115.0796" ry="18"/>
-<text text-anchor="middle" x="1446.2978" y="-302.3" font-family="Times,serif" font-size="14.00" fill="#000000">11. Initial&#45;&gt;EnteringMessage</text>
-</g>
-<!-- 3. Connected&#45;&gt;Connecting&#45;&gt;11. Initial&#45;&gt;EnteringMessage -->
-<g id="edge8" class="edge">
-<title>3. Connected&#45;&gt;Connecting&#45;&gt;11. Initial&#45;&gt;EnteringMessage</title>
-<path fill="none" stroke="#000000" d="M1609.0491,-503.9092C1598.8707,-493.6083 1586.1049,-480.3342 1575.2978,-468 1534.626,-421.5812 1490.4961,-364.5737 1465.8332,-332.0495"/>
-<polygon fill="#000000" stroke="#000000" points="1468.5266,-329.8083 1459.7042,-323.9418 1462.9426,-334.0296 1468.5266,-329.8083"/>
+<ellipse fill="none" stroke="#000000" cx="848.7422" cy="-580" rx="115.0796" ry="18"/>
+<text text-anchor="middle" x="848.7422" y="-576.3" font-family="Times,serif" font-size="14.00" fill="#000000">11. Initial&#45;&gt;EnteringMessage</text>
 </g>
 <!-- 12. Initial&#45;&gt;Leaving -->
-<g id="node10" class="node">
+<g id="node8" class="node">
 <title>12. Initial&#45;&gt;Leaving</title>
-<ellipse fill="none" stroke="#000000" cx="1347.2978" cy="-234" rx="82.5854" ry="18"/>
-<text text-anchor="middle" x="1347.2978" y="-230.3" font-family="Times,serif" font-size="14.00" fill="#000000">12. Initial&#45;&gt;Leaving</text>
+<ellipse fill="none" stroke="#000000" cx="991.7422" cy="-508" rx="82.5854" ry="18"/>
+<text text-anchor="middle" x="991.7422" y="-504.3" font-family="Times,serif" font-size="14.00" fill="#000000">12. Initial&#45;&gt;Leaving</text>
 </g>
-<!-- 3. Connected&#45;&gt;Connecting&#45;&gt;12. Initial&#45;&gt;Leaving -->
-<g id="edge9" class="edge">
-<title>3. Connected&#45;&gt;Connecting&#45;&gt;12. Initial&#45;&gt;Leaving</title>
-<path fill="none" stroke="#000000" d="M1576.0044,-506.1231C1504.1002,-480.7627 1376.1146,-423.5457 1322.2978,-324 1311.5438,-304.1082 1319.9223,-279.1841 1329.7812,-260.6115"/>
-<polygon fill="#000000" stroke="#000000" points="1332.8958,-262.2155 1334.8199,-251.7968 1326.8186,-258.7416 1332.8958,-262.2155"/>
+<!-- 11. Initial&#45;&gt;EnteringMessage&#45;&gt;12. Initial&#45;&gt;Leaving -->
+<g id="edge5" class="edge">
+<title>11. Initial&#45;&gt;EnteringMessage&#45;&gt;12. Initial&#45;&gt;Leaving</title>
+<path fill="none" stroke="#00ff00" d="M882.9943,-562.7542C903.0037,-552.6795 928.4128,-539.8861 949.6375,-529.1996"/>
+<polygon fill="#00ff00" stroke="#00ff00" points="951.3964,-532.2326 958.7542,-524.6094 948.2484,-525.9804 951.3964,-532.2326"/>
+</g>
+<!-- 11. Initial&#45;&gt;EnteringMessage&#45;&gt;pseudo0 -->
+<g id="edge32" class="edge">
+<title>11. Initial&#45;&gt;EnteringMessage&#45;&gt;pseudo0</title>
+<path fill="none" stroke="#0000ff" d="M858.8863,-562.0612C869.1668,-543.8901 885.5375,-514.9784 899.7422,-490 935.4048,-427.2887 977.6851,-353.3025 998.2538,-317.3325"/>
+<polygon fill="#0000ff" stroke="#0000ff" points="1001.5297,-318.6544 1003.456,-308.2361 995.4533,-315.1793 1001.5297,-318.6544"/>
+</g>
+<!-- 12. Initial&#45;&gt;Leaving&#45;&gt;pseudo0 -->
+<g id="edge33" class="edge">
+<title>12. Initial&#45;&gt;Leaving&#45;&gt;pseudo0</title>
+<path fill="none" stroke="#0000ff" d="M993.3621,-489.8824C996.7634,-451.8421 1004.6528,-363.6048 1008.5219,-320.3321"/>
+<polygon fill="#0000ff" stroke="#0000ff" points="1012.0308,-320.3884 1009.4353,-310.1165 1005.0586,-319.765 1012.0308,-320.3884"/>
 </g>
 <!-- 13. EnteringMessage&#45;&gt;EnteringMessage -->
-<g id="node11" class="node">
+<g id="node9" class="node">
 <title>13. EnteringMessage&#45;&gt;EnteringMessage</title>
-<ellipse fill="none" stroke="#000000" cx="916.2978" cy="-378" rx="155.1726" ry="18"/>
-<text text-anchor="middle" x="916.2978" y="-374.3" font-family="Times,serif" font-size="14.00" fill="#000000">13. EnteringMessage&#45;&gt;EnteringMessage</text>
-</g>
-<!-- 3. Connected&#45;&gt;Connecting&#45;&gt;13. EnteringMessage&#45;&gt;EnteringMessage -->
-<g id="edge10" class="edge">
-<title>3. Connected&#45;&gt;Connecting&#45;&gt;13. EnteringMessage&#45;&gt;EnteringMessage</title>
-<path fill="none" stroke="#000000" d="M1528.8388,-514.9184C1440.8985,-507.3522 1308.9509,-492.9336 1196.2978,-468 1116.3463,-450.3043 1026.683,-419.46 970.8519,-398.8855"/>
-<polygon fill="#000000" stroke="#000000" points="971.7637,-395.4907 961.1707,-395.2956 969.33,-402.0541 971.7637,-395.4907"/>
+<ellipse fill="none" stroke="#000000" cx="1174.7422" cy="-580" rx="155.1726" ry="18"/>
+<text text-anchor="middle" x="1174.7422" y="-576.3" font-family="Times,serif" font-size="14.00" fill="#000000">13. EnteringMessage&#45;&gt;EnteringMessage</text>
 </g>
 <!-- 14. EnteringMessage&#45;&gt;Initial -->
-<g id="node12" class="node">
+<g id="node10" class="node">
 <title>14. EnteringMessage&#45;&gt;Initial</title>
-<ellipse fill="none" stroke="#000000" cx="853.2978" cy="-306" rx="115.0796" ry="18"/>
-<text text-anchor="middle" x="853.2978" y="-302.3" font-family="Times,serif" font-size="14.00" fill="#000000">14. EnteringMessage&#45;&gt;Initial</text>
+<ellipse fill="none" stroke="#000000" cx="1248.7422" cy="-508" rx="115.0796" ry="18"/>
+<text text-anchor="middle" x="1248.7422" y="-504.3" font-family="Times,serif" font-size="14.00" fill="#000000">14. EnteringMessage&#45;&gt;Initial</text>
 </g>
-<!-- 3. Connected&#45;&gt;Connecting&#45;&gt;14. EnteringMessage&#45;&gt;Initial -->
-<g id="edge11" class="edge">
-<title>3. Connected&#45;&gt;Connecting&#45;&gt;14. EnteringMessage&#45;&gt;Initial</title>
-<path fill="none" stroke="#000000" d="M1529.5688,-514.6788C1461.0033,-507.554 1367.9059,-493.8485 1289.2978,-468 1189.972,-435.339 1178.327,-396.3678 1080.2978,-360 1035.1084,-343.2352 982.8894,-330.3893 939.9367,-321.4409"/>
-<polygon fill="#000000" stroke="#000000" points="940.5748,-317.999 930.0758,-319.4208 939.1698,-324.8566 940.5748,-317.999"/>
+<!-- 13. EnteringMessage&#45;&gt;EnteringMessage&#45;&gt;14. EnteringMessage&#45;&gt;Initial -->
+<g id="edge6" class="edge">
+<title>13. EnteringMessage&#45;&gt;EnteringMessage&#45;&gt;14. EnteringMessage&#45;&gt;Initial</title>
+<path fill="none" stroke="#00ff00" d="M1193.4155,-561.8314C1202.423,-553.0673 1213.3691,-542.4171 1223.14,-532.9103"/>
+<polygon fill="#00ff00" stroke="#00ff00" points="1225.6047,-535.3955 1230.3312,-525.9134 1220.7232,-530.3784 1225.6047,-535.3955"/>
+</g>
+<!-- 13. EnteringMessage&#45;&gt;EnteringMessage&#45;&gt;pseudo0 -->
+<g id="edge34" class="edge">
+<title>13. EnteringMessage&#45;&gt;EnteringMessage&#45;&gt;pseudo0</title>
+<path fill="none" stroke="#0000ff" d="M1153.4071,-562.1117C1127.6786,-539.4529 1084.7781,-498.0229 1059.7422,-454 1034.7971,-410.1368 1021.0458,-352.0772 1014.8502,-319.7951"/>
+<polygon fill="#0000ff" stroke="#0000ff" points="1018.2807,-319.0974 1013.0334,-309.8932 1011.3956,-320.3607 1018.2807,-319.0974"/>
 </g>
 <!-- 15. EnteringMessage&#45;&gt;EnteringMessage -->
-<g id="node13" class="node">
+<g id="node11" class="node">
 <title>15. EnteringMessage&#45;&gt;EnteringMessage</title>
-<ellipse fill="none" stroke="#000000" cx="525.2978" cy="-234" rx="155.1726" ry="18"/>
-<text text-anchor="middle" x="525.2978" y="-230.3" font-family="Times,serif" font-size="14.00" fill="#000000">15. EnteringMessage&#45;&gt;EnteringMessage</text>
-</g>
-<!-- 3. Connected&#45;&gt;Connecting&#45;&gt;15. EnteringMessage&#45;&gt;EnteringMessage -->
-<g id="edge12" class="edge">
-<title>3. Connected&#45;&gt;Connecting&#45;&gt;15. EnteringMessage&#45;&gt;EnteringMessage</title>
-<path fill="none" stroke="#000000" d="M1526.3965,-516.1898C1413.8859,-508.8024 1226.7508,-493.8014 1067.2978,-468 925.5311,-445.0605 883.2936,-454.8565 752.2978,-396 672.5965,-360.1902 592.4564,-294.3611 552.1048,-258.6334"/>
-<polygon fill="#000000" stroke="#000000" points="554.3658,-255.96 544.5769,-251.907 549.7018,-261.1799 554.3658,-255.96"/>
+<ellipse fill="none" stroke="#000000" cx="1250.7422" cy="-436" rx="155.1726" ry="18"/>
+<text text-anchor="middle" x="1250.7422" y="-432.3" font-family="Times,serif" font-size="14.00" fill="#000000">15. EnteringMessage&#45;&gt;EnteringMessage</text>
 </g>
-<!-- 18. ExpectingAnswer&#45;&gt;Pinging -->
-<g id="node16" class="node">
-<title>18. ExpectingAnswer&#45;&gt;Pinging</title>
-<ellipse fill="none" stroke="#000000" cx="1002.2978" cy="-162" rx="122.6784" ry="18"/>
-<text text-anchor="middle" x="1002.2978" y="-158.3" font-family="Times,serif" font-size="14.00" fill="#000000">18. ExpectingAnswer&#45;&gt;Pinging</text>
+<!-- 14. EnteringMessage&#45;&gt;Initial&#45;&gt;15. EnteringMessage&#45;&gt;EnteringMessage -->
+<g id="edge7" class="edge">
+<title>14. EnteringMessage&#45;&gt;Initial&#45;&gt;15. EnteringMessage&#45;&gt;EnteringMessage</title>
+<path fill="none" stroke="#00ff00" d="M1249.2469,-489.8314C1249.4608,-482.131 1249.7151,-472.9743 1249.9529,-464.4166"/>
+<polygon fill="#00ff00" stroke="#00ff00" points="1253.4516,-464.5066 1250.2307,-454.4133 1246.4543,-464.3122 1253.4516,-464.5066"/>
 </g>
-<!-- 3. Connected&#45;&gt;Connecting&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging -->
+<!-- 14. EnteringMessage&#45;&gt;Initial&#45;&gt;pseudo0 -->
 <g id="edge35" class="edge">
-<title>3. Connected&#45;&gt;Connecting&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging</title>
-<path fill="none" stroke="#000000" d="M1524.9928,-516.829C1202.4839,-499.8583 228.2978,-443.1997 228.2978,-378 228.2978,-378 228.2978,-378 228.2978,-306 228.2978,-238.9772 286.5954,-239.674 349.2978,-216 441.3545,-181.2429 707.2107,-168.8014 869.9199,-164.3875"/>
-<polygon fill="#000000" stroke="#000000" points="870.0978,-167.8841 880.0017,-164.1207 869.9125,-160.8866 870.0978,-167.8841"/>
-</g>
-<!-- 19. ExpectingAnswer&#45;&gt;Initial -->
-<g id="node17" class="node">
-<title>19. ExpectingAnswer&#45;&gt;Initial</title>
-<ellipse fill="none" stroke="#000000" cx="1425.2978" cy="-90" rx="116.1796" ry="18"/>
-<text text-anchor="middle" x="1425.2978" y="-86.3" font-family="Times,serif" font-size="14.00" fill="#000000">19. ExpectingAnswer&#45;&gt;Initial</text>
+<title>14. EnteringMessage&#45;&gt;Initial&#45;&gt;pseudo0</title>
+<path fill="none" stroke="#0000ff" d="M1166.8521,-495.311C1138.6147,-487.4271 1108.6191,-474.6609 1086.7422,-454 1049.1808,-418.5264 1067.5475,-391.8535 1043.7422,-346 1038.3856,-335.6822 1031.4701,-324.8177 1025.3546,-315.8204"/>
+<polygon fill="#0000ff" stroke="#0000ff" points="1028.1757,-313.7468 1019.5931,-307.5348 1022.4286,-317.7432 1028.1757,-313.7468"/>
 </g>
-<!-- 3. Connected&#45;&gt;Connecting&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial -->
+<!-- 15. EnteringMessage&#45;&gt;EnteringMessage&#45;&gt;pseudo0 -->
 <g id="edge36" class="edge">
-<title>3. Connected&#45;&gt;Connecting&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial</title>
-<path fill="none" stroke="#000000" d="M1521.1988,-519.9461C1273.2352,-514.685 661.4126,-498.9111 458.2978,-468 302.0618,-444.2232 114.2978,-536.0348 114.2978,-378 114.2978,-378 114.2978,-378 114.2978,-234 114.2978,-146.9343 204.2123,-166.5849 288.2978,-144 383.797,-118.3494 1024.9874,-99.7993 1300.204,-92.9264"/>
-<polygon fill="#000000" stroke="#000000" points="1300.328,-96.4245 1310.2379,-92.6769 1300.154,-89.4266 1300.328,-96.4245"/>
-</g>
-<!-- 16. Initial&#45;&gt;Pinging -->
-<g id="node19" class="node">
-<title>16. Initial&#45;&gt;Pinging</title>
-<ellipse fill="none" stroke="#000000" cx="2449.2978" cy="-162" rx="81.4863" ry="18"/>
-<text text-anchor="middle" x="2449.2978" y="-158.3" font-family="Times,serif" font-size="14.00" fill="#000000">16. Initial&#45;&gt;Pinging</text>
-</g>
-<!-- 3. Connected&#45;&gt;Connecting&#45;&gt;16. Initial&#45;&gt;Pinging -->
-<g id="edge33" class="edge">
-<title>3. Connected&#45;&gt;Connecting&#45;&gt;16. Initial&#45;&gt;Pinging</title>
-<path fill="none" stroke="#000000" d="M1733.7892,-521.1232C2050.0092,-518.0965 2969.5986,-506.0876 3099.2978,-468 3174.6264,-445.8789 3251.2978,-456.5096 3251.2978,-378 3251.2978,-378 3251.2978,-378 3251.2978,-306 3251.2978,-210.9512 3149.1158,-240.5707 3057.2978,-216 2962.0141,-190.5019 2683.8047,-173.5326 2539.0929,-166.1713"/>
-<polygon fill="#000000" stroke="#000000" points="2539.0723,-162.6659 2528.9087,-165.6579 2538.7198,-169.657 2539.0723,-162.6659"/>
-</g>
-<!-- 17. Pinging&#45;&gt;ExpectingAnswer -->
-<g id="node20" class="node">
-<title>17. Pinging&#45;&gt;ExpectingAnswer</title>
-<ellipse fill="none" stroke="#000000" cx="1701.2978" cy="-162" rx="122.6784" ry="18"/>
-<text text-anchor="middle" x="1701.2978" y="-158.3" font-family="Times,serif" font-size="14.00" fill="#000000">17. Pinging&#45;&gt;ExpectingAnswer</text>
-</g>
-<!-- 3. Connected&#45;&gt;Connecting&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer -->
-<g id="edge34" class="edge">
-<title>3. Connected&#45;&gt;Connecting&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer</title>
-<path fill="none" stroke="#000000" d="M1733.4983,-520.2272C2054.3826,-514.5754 2995.636,-495.7122 3055.2978,-468 3104.3748,-445.2043 3137.2978,-432.1128 3137.2978,-378 3137.2978,-378 3137.2978,-378 3137.2978,-306 3137.2978,-242.488 3085.7157,-238.434 3026.2978,-216 2998.6098,-205.5461 2160.0967,-177.0322 1831.5365,-166.227"/>
-<polygon fill="#000000" stroke="#000000" points="1831.6,-162.7273 1821.4904,-165.8969 1831.3701,-169.7235 1831.6,-162.7273"/>
+<title>15. EnteringMessage&#45;&gt;EnteringMessage&#45;&gt;pseudo0</title>
+<path fill="none" stroke="#0000ff" d="M1220.346,-418.2056C1171.0946,-389.373 1075.057,-333.1509 1032.2398,-308.085"/>
+<polygon fill="#0000ff" stroke="#0000ff" points="1033.8797,-304.9895 1023.4815,-302.9578 1030.3432,-311.0304 1033.8797,-304.9895"/>
 </g>
-<!-- 4. NotJoined&#45;&gt;GettingRoomNumber&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging -->
-<g id="edge39" class="edge">
-<title>4. NotJoined&#45;&gt;GettingRoomNumber&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging</title>
-<path fill="none" stroke="#000000" d="M1487.0502,-221.4586C1380.4496,-208.3832 1214.2296,-187.995 1106.7982,-174.8178"/>
-<polygon fill="#000000" stroke="#000000" points="1106.9409,-171.3091 1096.5891,-173.5655 1106.0886,-178.2571 1106.9409,-171.3091"/>
+<!-- 18. ExpectingAnswer&#45;&gt;Pinging -->
+<g id="node12" class="node">
+<title>18. ExpectingAnswer&#45;&gt;Pinging</title>
+<ellipse fill="none" stroke="#000000" cx="840.7422" cy="-227" rx="122.6784" ry="18"/>
+<text text-anchor="middle" x="840.7422" y="-223.3" font-family="Times,serif" font-size="14.00" fill="#000000">18. ExpectingAnswer&#45;&gt;Pinging</text>
 </g>
-<!-- 4. NotJoined&#45;&gt;GettingRoomNumber&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial -->
-<g id="edge40" class="edge">
-<title>4. NotJoined&#45;&gt;GettingRoomNumber&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial</title>
-<path fill="none" stroke="#000000" d="M1568.8587,-216.0535C1539.808,-190.5455 1486.4642,-143.7071 1453.6181,-114.8666"/>
-<polygon fill="#000000" stroke="#000000" points="1455.56,-111.914 1445.7362,-107.946 1450.9414,-117.1741 1455.56,-111.914"/>
+<!-- 19. ExpectingAnswer&#45;&gt;Initial -->
+<g id="node13" class="node">
+<title>19. ExpectingAnswer&#45;&gt;Initial</title>
+<ellipse fill="none" stroke="#000000" cx="855.7422" cy="-155" rx="116.1796" ry="18"/>
+<text text-anchor="middle" x="855.7422" y="-151.3" font-family="Times,serif" font-size="14.00" fill="#000000">19. ExpectingAnswer&#45;&gt;Initial</text>
 </g>
-<!-- 4. NotJoined&#45;&gt;GettingRoomNumber&#45;&gt;16. Initial&#45;&gt;Pinging -->
-<g id="edge37" class="edge">
-<title>4. NotJoined&#45;&gt;GettingRoomNumber&#45;&gt;16. Initial&#45;&gt;Pinging</title>
-<path fill="none" stroke="#000000" d="M1701.7052,-223.0215C1726.9009,-220.6368 1753.5077,-218.1779 1778.2978,-216 1987.7148,-197.6021 2234.1227,-178.398 2362.1451,-168.6041"/>
-<polygon fill="#000000" stroke="#000000" points="2362.5784,-172.0812 2372.2826,-167.8293 2362.0449,-165.1016 2362.5784,-172.0812"/>
+<!-- 18. ExpectingAnswer&#45;&gt;Pinging&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial -->
+<g id="edge8" class="edge">
+<title>18. ExpectingAnswer&#45;&gt;Pinging&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial</title>
+<path fill="none" stroke="#00ff00" d="M844.5273,-208.8314C846.1316,-201.131 848.0392,-191.9743 849.8221,-183.4166"/>
+<polygon fill="#00ff00" stroke="#00ff00" points="853.2929,-183.9169 851.9061,-173.4133 846.4401,-182.4892 853.2929,-183.9169"/>
 </g>
-<!-- 4. NotJoined&#45;&gt;GettingRoomNumber&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer -->
-<g id="edge38" class="edge">
-<title>4. NotJoined&#45;&gt;GettingRoomNumber&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer</title>
-<path fill="none" stroke="#000000" d="M1616.9832,-216.2022C1631.6311,-206.7857 1649.7865,-195.1144 1665.4941,-185.0167"/>
-<polygon fill="#000000" stroke="#000000" points="1667.4117,-187.9448 1673.9308,-179.593 1663.6264,-182.0565 1667.4117,-187.9448"/>
+<!-- pseudo1 -->
+<g id="node22" class="node">
+<title>pseudo1</title>
+<ellipse fill="#c0c0c0" stroke="#000000" cx="963.7422" cy="-86.5" rx="14.5" ry="14.5"/>
 </g>
-<!-- 5. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;6. GettingRoomNumber&#45;&gt;JoiningOrJoined -->
-<g id="edge14" class="edge">
-<title>5. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;6. GettingRoomNumber&#45;&gt;JoiningOrJoined</title>
-<path fill="none" stroke="#000000" d="M2750.4865,-435.7751C2652.1351,-423.3735 2509.988,-405.4496 2410.1702,-392.8631"/>
-<polygon fill="#000000" stroke="#000000" points="2410.3985,-389.3642 2400.0392,-391.5856 2409.5228,-396.3092 2410.3985,-389.3642"/>
-</g>
-<!-- 5. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging -->
+<!-- 18. ExpectingAnswer&#45;&gt;Pinging&#45;&gt;pseudo1 -->
 <g id="edge43" class="edge">
-<title>5. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging</title>
-<path fill="none" stroke="#000000" d="M2692.0406,-443.4981C2540.8499,-436.348 2314.7209,-422.2147 2119.2978,-396 1872.8289,-362.9378 1817.0092,-319.2004 1570.2978,-288 1501.0678,-279.2448 991.2056,-302.7374 943.2978,-252 924.4805,-232.0713 946.6054,-205.4276 968.9275,-186.3095"/>
-<polygon fill="#000000" stroke="#000000" points="971.2503,-188.9312 976.7645,-179.8844 966.8122,-183.5178 971.2503,-188.9312"/>
+<title>18. ExpectingAnswer&#45;&gt;Pinging&#45;&gt;pseudo1</title>
+<path fill="none" stroke="#0000ff" d="M780.2273,-211.274C761.0462,-203.1235 741.9365,-190.9658 730.7422,-173 722.2809,-159.4204 720.698,-149.4544 730.7422,-137 756.7527,-104.7481 884.5862,-92.0554 939.0712,-88.0547"/>
+<polygon fill="#0000ff" stroke="#0000ff" points="939.4975,-91.5336 949.2305,-87.3481 939.0117,-84.5505 939.4975,-91.5336"/>
 </g>
-<!-- 5. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial -->
+<!-- 19. ExpectingAnswer&#45;&gt;Initial&#45;&gt;pseudo1 -->
 <g id="edge44" class="edge">
-<title>5. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial</title>
-<path fill="none" stroke="#000000" d="M2977.9699,-435.9492C3028.9436,-427.3147 3081.28,-414.3309 3098.2978,-396 3193.5496,-293.3984 3045.1314,-177.9002 2909.2978,-144 2779.6318,-111.6391 1886.441,-96.2742 1551.6538,-91.6032"/>
-<polygon fill="#000000" stroke="#000000" points="1551.4773,-88.1005 1541.4297,-91.4614 1551.3802,-95.0998 1551.4773,-88.1005"/>
+<title>19. ExpectingAnswer&#45;&gt;Initial&#45;&gt;pseudo1</title>
+<path fill="none" stroke="#0000ff" d="M883.5549,-137.3595C902.0117,-125.6531 925.8539,-110.531 942.729,-99.8278"/>
+<polygon fill="#0000ff" stroke="#0000ff" points="944.7388,-102.6978 951.3088,-94.386 940.9895,-96.7865 944.7388,-102.6978"/>
 </g>
-<!-- 5. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;16. Initial&#45;&gt;Pinging -->
-<g id="edge41" class="edge">
-<title>5. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;16. Initial&#45;&gt;Pinging</title>
-<path fill="none" stroke="#000000" d="M2969.4158,-435.322C3015.2343,-426.6029 3061.5173,-413.7306 3075.2978,-396 3126.5524,-330.0533 3094.1625,-256.8256 3021.2978,-216 2980.2807,-193.0184 2689.414,-174.5975 2538.9726,-166.4853"/>
-<polygon fill="#000000" stroke="#000000" points="2539.0024,-162.9819 2528.8296,-165.9425 2538.6283,-169.9719 2539.0024,-162.9819"/>
+<!-- 3. Connected&#45;&gt;Connecting -->
+<g id="node14" class="node">
+<title>3. Connected&#45;&gt;Connecting</title>
+<ellipse fill="none" stroke="#000000" cx="1174.7422" cy="-652" rx="106.6812" ry="18"/>
+<text text-anchor="middle" x="1174.7422" y="-648.3" font-family="Times,serif" font-size="14.00" fill="#000000">3. Connected&#45;&gt;Connecting</text>
 </g>
-<!-- 5. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer -->
-<g id="edge42" class="edge">
-<title>5. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer</title>
-<path fill="none" stroke="#000000" d="M2888.7446,-432.0762C2945.1145,-390.3364 3070.4633,-284.9644 3004.2978,-216 2994.2228,-205.4989 2159.2221,-177.0137 1831.3622,-166.2215"/>
-<polygon fill="#000000" stroke="#000000" points="1831.4466,-162.7225 1821.337,-165.8918 1831.2165,-169.7187 1831.4466,-162.7225"/>
+<!-- 3. Connected&#45;&gt;Connecting&#45;&gt;5. GettingRoomNumber&#45;&gt;GettingRoomNumber -->
+<g id="edge10" class="edge">
+<title>3. Connected&#45;&gt;Connecting&#45;&gt;5. GettingRoomNumber&#45;&gt;GettingRoomNumber</title>
+<path fill="none" stroke="#ff0000" d="M1081.663,-643.1353C951.3569,-630.7252 713.4425,-608.0667 560.8881,-593.5377"/>
+<polygon fill="#ff0000" stroke="#ff0000" points="560.7967,-590.0132 550.5099,-592.5493 560.133,-596.9817 560.7967,-590.0132"/>
 </g>
-<!-- 6. GettingRoomNumber&#45;&gt;JoiningOrJoined&#45;&gt;7. GettingRoomNumber&#45;&gt;GettingRoomNumber -->
-<g id="edge15" class="edge">
-<title>6. GettingRoomNumber&#45;&gt;JoiningOrJoined&#45;&gt;7. GettingRoomNumber&#45;&gt;GettingRoomNumber</title>
-<path fill="none" stroke="#000000" d="M2292.2978,-359.8314C2292.2978,-352.131 2292.2978,-342.9743 2292.2978,-334.4166"/>
-<polygon fill="#000000" stroke="#000000" points="2295.7979,-334.4132 2292.2978,-324.4133 2288.7979,-334.4133 2295.7979,-334.4132"/>
-</g>
-<!-- 6. GettingRoomNumber&#45;&gt;JoiningOrJoined&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging -->
-<g id="edge47" class="edge">
-<title>6. GettingRoomNumber&#45;&gt;JoiningOrJoined&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging</title>
-<path fill="none" stroke="#000000" d="M2193.8405,-363.6135C2055.0726,-343.8195 1793.9042,-308.3332 1570.2978,-288 1500.8031,-281.6806 991.2056,-302.7374 943.2978,-252 924.4805,-232.0713 946.6054,-205.4276 968.9275,-186.3095"/>
-<polygon fill="#000000" stroke="#000000" points="971.2503,-188.9312 976.7645,-179.8844 966.8122,-183.5178 971.2503,-188.9312"/>
-</g>
-<!-- 6. GettingRoomNumber&#45;&gt;JoiningOrJoined&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial -->
-<g id="edge48" class="edge">
-<title>6. GettingRoomNumber&#45;&gt;JoiningOrJoined&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial</title>
-<path fill="none" stroke="#000000" d="M2450.8146,-373.4531C2606.9218,-367.3355 2833.627,-353.5882 2916.2978,-324 2979.3285,-301.4411 3060.4418,-270.3095 3021.2978,-216 2962.1292,-133.9081 2904.8479,-162.1594 2805.2978,-144 2684.07,-121.8863 1867.604,-100.4655 1550.6963,-92.8855"/>
-<polygon fill="#000000" stroke="#000000" points="1550.6315,-89.3831 1540.5508,-92.6435 1550.4645,-96.3811 1550.6315,-89.3831"/>
-</g>
-<!-- 6. GettingRoomNumber&#45;&gt;JoiningOrJoined&#45;&gt;16. Initial&#45;&gt;Pinging -->
-<g id="edge45" class="edge">
-<title>6. GettingRoomNumber&#45;&gt;JoiningOrJoined&#45;&gt;16. Initial&#45;&gt;Pinging</title>
-<path fill="none" stroke="#000000" d="M2449.5597,-372.9238C2637.3668,-363.1645 2934.9298,-334.7216 3004.2978,-252 3014.5786,-239.7401 3015.0497,-227.8489 3004.2978,-216 2973.7725,-182.3606 2689.6858,-169.0211 2540.2447,-164.2973"/>
-<polygon fill="#000000" stroke="#000000" points="2540.2651,-160.7963 2530.1615,-163.9852 2540.0484,-167.793 2540.2651,-160.7963"/>
+<!-- 3. Connected&#45;&gt;Connecting&#45;&gt;6. GettingRoomNumber&#45;&gt;JoiningOrJoined -->
+<g id="edge11" class="edge">
+<title>3. Connected&#45;&gt;Connecting&#45;&gt;6. GettingRoomNumber&#45;&gt;JoiningOrJoined</title>
+<path fill="none" stroke="#ff0000" d="M1070.209,-648.3772C940.1861,-642.6305 726.4496,-628.753 653.7422,-598 630.7866,-588.2905 632.1361,-574.7882 610.7422,-562 588.4615,-548.6817 562.2979,-537.3499 538.9659,-528.5577"/>
+<polygon fill="#ff0000" stroke="#ff0000" points="540.0942,-525.2434 529.5008,-525.0696 537.6737,-531.8117 540.0942,-525.2434"/>
 </g>
-<!-- 6. GettingRoomNumber&#45;&gt;JoiningOrJoined&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer -->
-<g id="edge46" class="edge">
-<title>6. GettingRoomNumber&#45;&gt;JoiningOrJoined&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer</title>
-<path fill="none" stroke="#000000" d="M2221.4336,-361.6457C2184.7122,-352.2795 2139.474,-339.3369 2100.2978,-324 2034.7757,-298.3491 2015.2928,-294.6106 1959.2978,-252 1942.0251,-238.856 1945.0009,-227.0138 1926.2978,-216 1891.344,-195.4167 1848.9584,-182.6696 1810.442,-174.7794"/>
-<polygon fill="#000000" stroke="#000000" points="1810.7032,-171.2642 1800.2171,-172.7784 1809.3587,-178.1339 1810.7032,-171.2642"/>
+<!-- 3. Connected&#45;&gt;Connecting&#45;&gt;7. GettingRoomNumber&#45;&gt;GettingRoomNumber -->
+<g id="edge12" class="edge">
+<title>3. Connected&#45;&gt;Connecting&#45;&gt;7. GettingRoomNumber&#45;&gt;GettingRoomNumber</title>
+<path fill="none" stroke="#ff0000" d="M1073.6232,-646.2156C940.959,-637.7896 721.4288,-620.6436 691.7422,-598 650.6633,-566.667 684.223,-527.5546 648.7422,-490 635.5485,-476.0352 618.0303,-465.3428 600.6153,-457.3057"/>
+<polygon fill="#ff0000" stroke="#ff0000" points="601.5449,-453.8931 590.979,-453.1099 598.7503,-460.3111 601.5449,-453.8931"/>
 </g>
-<!-- 7. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;8. GettingRoomNumber&#45;&gt;GettingRoomNumber -->
+<!-- 3. Connected&#45;&gt;Connecting&#45;&gt;8. GettingRoomNumber&#45;&gt;GettingRoomNumber -->
+<g id="edge13" class="edge">
+<title>3. Connected&#45;&gt;Connecting&#45;&gt;8. GettingRoomNumber&#45;&gt;GettingRoomNumber</title>
+<path fill="none" stroke="#ff0000" d="M1072.5307,-646.793C946.8962,-639.3268 747.4413,-623.5859 724.7422,-598 671.6505,-538.1563 737.5568,-496.967 724.7422,-418 723.3242,-409.2621 720.6947,-400.0275 717.8751,-391.7136"/>
+<polygon fill="#ff0000" stroke="#ff0000" points="721.1002,-390.3399 714.4101,-382.1244 714.5168,-392.7187 721.1002,-390.3399"/>
+</g>
+<!-- 3. Connected&#45;&gt;Connecting&#45;&gt;11. Initial&#45;&gt;EnteringMessage -->
 <g id="edge16" class="edge">
-<title>7. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;8. GettingRoomNumber&#45;&gt;GettingRoomNumber</title>
-<path fill="none" stroke="#000000" d="M2398.4682,-291.2995C2484.8467,-279.3394 2606.5972,-262.4816 2695.6769,-250.1475"/>
-<polygon fill="#000000" stroke="#000000" points="2696.4013,-253.5807 2705.8267,-248.7421 2695.4411,-246.6468 2696.4013,-253.5807"/>
-</g>
-<!-- 7. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging -->
-<g id="edge51" class="edge">
-<title>7. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging</title>
-<path fill="none" stroke="#000000" d="M2117.6781,-300.4931C1757.6056,-288.9334 965.242,-262.3539 955.2978,-252 937.4331,-233.3992 955.3401,-206.6628 973.9657,-187.1658"/>
-<polygon fill="#000000" stroke="#000000" points="976.4602,-189.6211 981.0662,-180.0798 971.5155,-184.6662 976.4602,-189.6211"/>
-</g>
-<!-- 7. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial -->
-<g id="edge52" class="edge">
-<title>7. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial</title>
-<path fill="none" stroke="#000000" d="M2461.2205,-298.9127C2665.9403,-289.4857 2986.0332,-271.7022 3004.2978,-252 3015.1753,-240.2663 3014.5246,-228.305 3004.2978,-216 2892.473,-81.4518 2791.1015,-164.0068 2617.2978,-144 2413.7055,-120.5642 1812.7879,-101.098 1550.3265,-93.4646"/>
-<polygon fill="#000000" stroke="#000000" points="1550.0875,-89.9563 1539.9903,-93.165 1549.8846,-96.9533 1550.0875,-89.9563"/>
-</g>
-<!-- 7. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;16. Initial&#45;&gt;Pinging -->
-<g id="edge49" class="edge">
-<title>7. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;16. Initial&#45;&gt;Pinging</title>
-<path fill="none" stroke="#000000" d="M2439.6215,-295.1957C2499.4379,-287.462 2558.8262,-274.3001 2577.2978,-252 2587.5042,-239.6781 2586.1435,-229.3324 2577.2978,-216 2564.6938,-197.003 2543.9469,-184.6727 2522.7886,-176.6758"/>
-<polygon fill="#000000" stroke="#000000" points="2523.6608,-173.2737 2513.066,-173.2981 2521.3636,-179.886 2523.6608,-173.2737"/>
-</g>
-<!-- 7. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer -->
-<g id="edge50" class="edge">
-<title>7. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer</title>
-<path fill="none" stroke="#000000" d="M2183.1348,-291.5406C2114.8513,-281.3733 2034.0287,-266.96 2002.2978,-252 1979.7532,-241.371 1981.7229,-226.8789 1959.2978,-216 1914.5141,-194.2746 1861.211,-181.2623 1814.7124,-173.481"/>
-<polygon fill="#000000" stroke="#000000" points="1815.0221,-169.9859 1804.5928,-171.8513 1813.909,-176.8969 1815.0221,-169.9859"/>
-</g>
-<!-- 8. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging -->
-<g id="edge55" class="edge">
-<title>8. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging</title>
-<path fill="none" stroke="#000000" d="M2648.259,-225.9358C2580.7527,-222.7043 2501.7718,-219.0353 2430.2978,-216 1952.0306,-195.6895 1383.4933,-175.3191 1132.4567,-166.5171"/>
-<polygon fill="#000000" stroke="#000000" points="1132.3181,-163.0102 1122.2016,-166.1578 1132.0729,-170.0059 1132.3181,-163.0102"/>
-</g>
-<!-- 8. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial -->
-<g id="edge56" class="edge">
-<title>8. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial</title>
-<path fill="none" stroke="#000000" d="M2770.6682,-216.3467C2717.9194,-194.903 2623.6941,-159.658 2539.2978,-144 2353.28,-109.4883 1802.1311,-96.1997 1551.6847,-91.8429"/>
-<polygon fill="#000000" stroke="#000000" points="1551.5039,-88.3394 1541.4451,-91.6669 1551.3835,-95.3384 1551.5039,-88.3394"/>
-</g>
-<!-- 8. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;16. Initial&#45;&gt;Pinging -->
-<g id="edge53" class="edge">
-<title>8. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;16. Initial&#45;&gt;Pinging</title>
-<path fill="none" stroke="#000000" d="M2730.8335,-217.8418C2667.3716,-205.2543 2580.1808,-187.9603 2519.7157,-175.9672"/>
-<polygon fill="#000000" stroke="#000000" points="2520.3645,-172.5278 2509.8746,-174.0152 2519.0025,-179.394 2520.3645,-172.5278"/>
-</g>
-<!-- 8. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer -->
-<g id="edge54" class="edge">
-<title>8. GettingRoomNumber&#45;&gt;GettingRoomNumber&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer</title>
-<path fill="none" stroke="#000000" d="M2659.2755,-224.0832C2436.7744,-209.6637 2028.2883,-183.1911 1824.1674,-169.9627"/>
-<polygon fill="#000000" stroke="#000000" points="1824.2117,-166.4584 1814.0062,-169.3042 1823.7589,-173.4437 1824.2117,-166.4584"/>
-</g>
-<!-- 9. Leaving&#45;&gt;NotJoined&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging -->
-<g id="edge59" class="edge">
-<title>9. Leaving&#45;&gt;NotJoined&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging</title>
-<path fill="none" stroke="#000000" d="M2262.9099,-221.1586C2250.7782,-219.1472 2238.1843,-217.3054 2226.2978,-216 2119.9252,-204.3183 1424.4358,-177.6338 1131.7574,-166.7521"/>
-<polygon fill="#000000" stroke="#000000" points="1131.6406,-163.2454 1121.5175,-166.3717 1131.3806,-170.2406 1131.6406,-163.2454"/>
-</g>
-<!-- 9. Leaving&#45;&gt;NotJoined&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial -->
-<g id="edge60" class="edge">
-<title>9. Leaving&#45;&gt;NotJoined&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial</title>
-<path fill="none" stroke="#000000" d="M2272.7589,-219.4754C2195.5543,-199.765 2051.1924,-164.6439 1926.2978,-144 1794.7375,-122.2544 1642.2317,-107.2602 1540.3619,-98.6868"/>
-<polygon fill="#000000" stroke="#000000" points="1540.6128,-95.1957 1530.3563,-97.8517 1540.0305,-102.1714 1540.6128,-95.1957"/>
-</g>
-<!-- 9. Leaving&#45;&gt;NotJoined&#45;&gt;16. Initial&#45;&gt;Pinging -->
-<g id="edge57" class="edge">
-<title>9. Leaving&#45;&gt;NotJoined&#45;&gt;16. Initial&#45;&gt;Pinging</title>
-<path fill="none" stroke="#000000" d="M2357.2803,-216.7542C2373.5936,-207.0471 2394.1485,-194.8161 2411.6911,-184.3775"/>
-<polygon fill="#000000" stroke="#000000" points="2413.7478,-187.2265 2420.5517,-179.1051 2410.1683,-181.2109 2413.7478,-187.2265"/>
-</g>
-<!-- 9. Leaving&#45;&gt;NotJoined&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer -->
-<g id="edge58" class="edge">
-<title>9. Leaving&#45;&gt;NotJoined&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer</title>
-<path fill="none" stroke="#000000" d="M2261.1953,-221.4487C2249.5813,-219.4797 2237.6068,-217.5774 2226.2978,-216 2086.7369,-196.5343 1925.3897,-180.9683 1818.7975,-171.6415"/>
-<polygon fill="#000000" stroke="#000000" points="1818.9216,-168.1392 1808.6557,-170.7585 1818.3144,-175.1128 1818.9216,-168.1392"/>
-</g>
-<!-- 10. Joining&#45;&gt;H&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging -->
-<g id="edge63" class="edge">
-<title>10. Joining&#45;&gt;H&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging</title>
-<path fill="none" stroke="#000000" d="M1797.4567,-224.2172C1779.3082,-221.2391 1758.9787,-218.1805 1740.2978,-216 1526.6887,-191.0671 1276.8689,-175.6515 1129.5378,-167.9676"/>
-<polygon fill="#000000" stroke="#000000" points="1129.7138,-164.4721 1119.5462,-167.4501 1129.3517,-171.4627 1129.7138,-164.4721"/>
-</g>
-<!-- 10. Joining&#45;&gt;H&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial -->
-<g id="edge64" class="edge">
-<title>10. Joining&#45;&gt;H&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial</title>
-<path fill="none" stroke="#000000" d="M1854.083,-215.8701C1855.0117,-195.294 1852.9797,-162.2317 1833.2978,-144 1812.0386,-124.3073 1653.8775,-107.8879 1540.863,-98.5014"/>
-<polygon fill="#000000" stroke="#000000" points="1541.0118,-95.0019 1530.7587,-97.6708 1540.4383,-101.9784 1541.0118,-95.0019"/>
-</g>
-<!-- 10. Joining&#45;&gt;H&#45;&gt;16. Initial&#45;&gt;Pinging -->
-<g id="edge61" class="edge">
-<title>10. Joining&#45;&gt;H&#45;&gt;16. Initial&#45;&gt;Pinging</title>
-<path fill="none" stroke="#000000" d="M1911.9981,-226.8C2019.5672,-213.8268 2246.0336,-186.5143 2367.773,-171.8321"/>
-<polygon fill="#000000" stroke="#000000" points="2368.278,-175.2967 2377.7869,-170.6244 2367.4398,-168.347 2368.278,-175.2967"/>
-</g>
-<!-- 10. Joining&#45;&gt;H&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer -->
-<g id="edge62" class="edge">
-<title>10. Joining&#45;&gt;H&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer</title>
-<path fill="none" stroke="#000000" d="M1819.533,-218.3771C1798.1688,-208.1902 1769.9974,-194.7575 1746.5124,-183.5593"/>
-<polygon fill="#000000" stroke="#000000" points="1747.9674,-180.3756 1737.4345,-179.2308 1744.9545,-186.6941 1747.9674,-180.3756"/>
+<title>3. Connected&#45;&gt;Connecting&#45;&gt;11. Initial&#45;&gt;EnteringMessage</title>
+<path fill="none" stroke="#ff0000" d="M1109.9453,-637.689C1056.7815,-625.9473 981.397,-609.298 925.2678,-596.9014"/>
+<polygon fill="#ff0000" stroke="#ff0000" points="925.8943,-593.4555 915.3748,-594.7164 924.3846,-600.2907 925.8943,-593.4555"/>
 </g>
-<!-- 11. Initial&#45;&gt;EnteringMessage&#45;&gt;12. Initial&#45;&gt;Leaving -->
+<!-- 3. Connected&#45;&gt;Connecting&#45;&gt;12. Initial&#45;&gt;Leaving -->
 <g id="edge17" class="edge">
-<title>11. Initial&#45;&gt;EnteringMessage&#45;&gt;12. Initial&#45;&gt;Leaving</title>
-<path fill="none" stroke="#000000" d="M1422.0796,-288.3868C1409.2803,-279.0782 1393.3982,-267.5276 1379.5669,-257.4685"/>
-<polygon fill="#000000" stroke="#000000" points="1381.4119,-254.4825 1371.2659,-251.4313 1377.2946,-260.1437 1381.4119,-254.4825"/>
-</g>
-<!-- 11. Initial&#45;&gt;EnteringMessage&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging -->
-<g id="edge67" class="edge">
-<title>11. Initial&#45;&gt;EnteringMessage&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging</title>
-<path fill="none" stroke="#000000" d="M1340.6057,-298.8753C1161.6055,-286.5597 817.1942,-261.6813 808.2978,-252 772.2751,-212.7996 837.4692,-189.2771 901.7955,-176.1679"/>
-<polygon fill="#000000" stroke="#000000" points="902.5411,-179.5885 911.6814,-174.2307 901.1949,-172.7191 902.5411,-179.5885"/>
-</g>
-<!-- 11. Initial&#45;&gt;EnteringMessage&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial -->
-<g id="edge68" class="edge">
-<title>11. Initial&#45;&gt;EnteringMessage&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial</title>
-<path fill="none" stroke="#000000" d="M1341.2072,-298.6032C1289.9693,-295.1292 1227.4312,-291.0842 1171.2978,-288 1126.3212,-285.5288 392.4338,-284.5506 361.2978,-252 188.7082,-71.5694 -524.177,-316.7848 713.2978,-144 918.6223,-115.3312 1159.5349,-101.0742 1301.9146,-94.6342"/>
-<polygon fill="#000000" stroke="#000000" points="1302.1601,-98.1268 1311.9939,-94.1839 1301.8476,-91.1338 1302.1601,-98.1268"/>
-</g>
-<!-- 11. Initial&#45;&gt;EnteringMessage&#45;&gt;16. Initial&#45;&gt;Pinging -->
-<g id="edge65" class="edge">
-<title>11. Initial&#45;&gt;EnteringMessage&#45;&gt;16. Initial&#45;&gt;Pinging</title>
-<path fill="none" stroke="#000000" d="M1557.7088,-301.2914C1827.2755,-289.7698 2493.2396,-260.4812 2501.2978,-252 2519.6743,-232.6588 2499.4822,-205.6402 2479.1404,-186.2625"/>
-<polygon fill="#000000" stroke="#000000" points="2481.461,-183.642 2471.7104,-179.4974 2476.7482,-188.8179 2481.461,-183.642"/>
-</g>
-<!-- 11. Initial&#45;&gt;EnteringMessage&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer -->
-<g id="edge66" class="edge">
-<title>11. Initial&#45;&gt;EnteringMessage&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer</title>
-<path fill="none" stroke="#000000" d="M1555.6355,-300.2197C1629.1456,-293.7802 1716.7558,-280.2598 1740.2978,-252 1756.0339,-233.1103 1741.6166,-206.9018 1726.0518,-187.6375"/>
-<polygon fill="#000000" stroke="#000000" points="1728.5529,-185.1768 1719.3955,-179.8482 1723.2312,-189.7243 1728.5529,-185.1768"/>
-</g>
-<!-- 12. Initial&#45;&gt;Leaving&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging -->
-<g id="edge71" class="edge">
-<title>12. Initial&#45;&gt;Leaving&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging</title>
-<path fill="none" stroke="#000000" d="M1287.5972,-221.5408C1231.0302,-209.7355 1145.645,-191.916 1083.0238,-178.8472"/>
-<polygon fill="#000000" stroke="#000000" points="1083.681,-175.409 1073.1768,-176.7922 1082.2509,-182.2614 1083.681,-175.409"/>
-</g>
-<!-- 12. Initial&#45;&gt;Leaving&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial -->
-<g id="edge72" class="edge">
-<title>12. Initial&#45;&gt;Leaving&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial</title>
-<path fill="none" stroke="#000000" d="M1357.0188,-216.0535C1370.4476,-191.2618 1394.7907,-146.3207 1410.4898,-117.3378"/>
-<polygon fill="#000000" stroke="#000000" points="1413.7689,-118.6327 1415.4542,-108.1727 1407.6138,-115.2986 1413.7689,-118.6327"/>
-</g>
-<!-- 12. Initial&#45;&gt;Leaving&#45;&gt;16. Initial&#45;&gt;Pinging -->
-<g id="edge69" class="edge">
-<title>12. Initial&#45;&gt;Leaving&#45;&gt;16. Initial&#45;&gt;Pinging</title>
-<path fill="none" stroke="#000000" d="M1405.8416,-221.1504C1416.5934,-219.1529 1427.7507,-217.318 1438.2978,-216 1614.9427,-193.9254 2144.9991,-172.9761 2358.609,-165.1914"/>
-<polygon fill="#000000" stroke="#000000" points="2358.9801,-168.6803 2368.8465,-164.8196 2358.726,-161.6849 2358.9801,-168.6803"/>
-</g>
-<!-- 12. Initial&#45;&gt;Leaving&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer -->
-<g id="edge70" class="edge">
-<title>12. Initial&#45;&gt;Leaving&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer</title>
-<path fill="none" stroke="#000000" d="M1407.7503,-221.7046C1466.046,-209.8478 1554.7048,-191.8155 1619.3336,-178.6707"/>
-<polygon fill="#000000" stroke="#000000" points="1620.3898,-182.0276 1629.4915,-176.6047 1618.9945,-175.1681 1620.3898,-182.0276"/>
+<title>3. Connected&#45;&gt;Connecting&#45;&gt;12. Initial&#45;&gt;Leaving</title>
+<path fill="none" stroke="#ff0000" d="M1109.8205,-637.6479C1070.111,-627.5805 1024.3913,-613.24 1010.7422,-598 995.8199,-581.3383 991.5387,-555.9679 990.7215,-536.4057"/>
+<polygon fill="#ff0000" stroke="#ff0000" points="994.2188,-536.1774 990.5784,-526.2276 987.2195,-536.2759 994.2188,-536.1774"/>
 </g>
-<!-- 13. EnteringMessage&#45;&gt;EnteringMessage&#45;&gt;14. EnteringMessage&#45;&gt;Initial -->
+<!-- 3. Connected&#45;&gt;Connecting&#45;&gt;13. EnteringMessage&#45;&gt;EnteringMessage -->
 <g id="edge18" class="edge">
-<title>13. EnteringMessage&#45;&gt;EnteringMessage&#45;&gt;14. EnteringMessage&#45;&gt;Initial</title>
-<path fill="none" stroke="#000000" d="M900.4002,-359.8314C892.8821,-351.2392 883.7775,-340.834 875.5847,-331.4708"/>
-<polygon fill="#000000" stroke="#000000" points="878.1911,-329.1344 868.972,-323.9134 872.9231,-333.744 878.1911,-329.1344"/>
-</g>
-<!-- 13. EnteringMessage&#45;&gt;EnteringMessage&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging -->
-<g id="edge75" class="edge">
-<title>13. EnteringMessage&#45;&gt;EnteringMessage&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging</title>
-<path fill="none" stroke="#000000" d="M790.8045,-367.3863C643.9317,-352.0591 414.0079,-318.018 361.2978,-252 351.3147,-239.4965 350.4693,-227.779 361.2978,-216 394.9399,-179.4046 691.8367,-167.5925 869.5371,-163.7921"/>
-<polygon fill="#000000" stroke="#000000" points="869.8234,-167.287 879.7485,-163.5797 869.6778,-160.2885 869.8234,-167.287"/>
-</g>
-<!-- 13. EnteringMessage&#45;&gt;EnteringMessage&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial -->
-<g id="edge76" class="edge">
-<title>13. EnteringMessage&#45;&gt;EnteringMessage&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial</title>
-<path fill="none" stroke="#000000" d="M778.5427,-369.6528C653.222,-360.8955 478.0912,-345.4141 412.2978,-324 351.333,-304.1576 319.3822,-307.5069 287.2978,-252 272.4046,-226.2345 302.4753,-146.3152 305.2978,-144 343.1745,-112.9297 1014.1552,-97.3313 1299.0381,-92.0856"/>
-<polygon fill="#000000" stroke="#000000" points="1299.4866,-95.5781 1309.421,-91.8959 1299.3587,-88.5793 1299.4866,-95.5781"/>
-</g>
-<!-- 13. EnteringMessage&#45;&gt;EnteringMessage&#45;&gt;16. Initial&#45;&gt;Pinging -->
-<g id="edge73" class="edge">
-<title>13. EnteringMessage&#45;&gt;EnteringMessage&#45;&gt;16. Initial&#45;&gt;Pinging</title>
-<path fill="none" stroke="#000000" d="M1046.0906,-368.0797C1426.9717,-338.9319 2515.1732,-255.38 2518.2978,-252 2538.1965,-230.4748 2511.6105,-203.5451 2485.8792,-184.7781"/>
-<polygon fill="#000000" stroke="#000000" points="2487.8134,-181.8598 2477.6149,-178.989 2483.7972,-187.5931 2487.8134,-181.8598"/>
-</g>
-<!-- 13. EnteringMessage&#45;&gt;EnteringMessage&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer -->
-<g id="edge74" class="edge">
-<title>13. EnteringMessage&#45;&gt;EnteringMessage&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer</title>
-<path fill="none" stroke="#000000" d="M1015.663,-364.1275C1075.6504,-354.3881 1145.3573,-340.2351 1171.2978,-324 1222.8441,-291.7392 1202.3795,-245.9572 1255.2978,-216 1307.8008,-186.2779 1459.7268,-172.7582 1571.735,-166.7126"/>
-<polygon fill="#000000" stroke="#000000" points="1571.9613,-170.2056 1581.7637,-166.1854 1571.5937,-163.2153 1571.9613,-170.2056"/>
+<title>3. Connected&#45;&gt;Connecting&#45;&gt;13. EnteringMessage&#45;&gt;EnteringMessage</title>
+<path fill="none" stroke="#ff0000" d="M1174.7422,-633.8314C1174.7422,-626.131 1174.7422,-616.9743 1174.7422,-608.4166"/>
+<polygon fill="#ff0000" stroke="#ff0000" points="1178.2423,-608.4132 1174.7422,-598.4133 1171.2423,-608.4133 1178.2423,-608.4132"/>
 </g>
-<!-- 14. EnteringMessage&#45;&gt;Initial&#45;&gt;15. EnteringMessage&#45;&gt;EnteringMessage -->
+<!-- 3. Connected&#45;&gt;Connecting&#45;&gt;14. EnteringMessage&#45;&gt;Initial -->
 <g id="edge19" class="edge">
-<title>14. EnteringMessage&#45;&gt;Initial&#45;&gt;15. EnteringMessage&#45;&gt;EnteringMessage</title>
-<path fill="none" stroke="#000000" d="M786.1306,-291.256C734.6097,-279.9465 663.2246,-264.2766 608.1566,-252.1885"/>
-<polygon fill="#000000" stroke="#000000" points="608.5904,-248.7005 598.0725,-249.9749 607.0895,-255.5377 608.5904,-248.7005"/>
-</g>
-<!-- 14. EnteringMessage&#45;&gt;Initial&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging -->
-<g id="edge79" class="edge">
-<title>14. EnteringMessage&#45;&gt;Initial&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging</title>
-<path fill="none" stroke="#000000" d="M801.5457,-289.8919C783.6739,-281.568 765.5734,-269.3945 755.2978,-252 747.1598,-238.2242 745.2647,-228.4635 755.2978,-216 772.5326,-194.5902 832.0127,-181.2048 888.2823,-173.1164"/>
-<polygon fill="#000000" stroke="#000000" points="888.9492,-176.5574 898.3733,-171.7161 887.9871,-169.6239 888.9492,-176.5574"/>
-</g>
-<!-- 14. EnteringMessage&#45;&gt;Initial&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial -->
-<g id="edge80" class="edge">
-<title>14. EnteringMessage&#45;&gt;Initial&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial</title>
-<path fill="none" stroke="#000000" d="M739.8915,-302.9157C586.6662,-297.5582 329.2196,-283.8836 300.2978,-252 270.9942,-219.6956 328.0514,-149.9638 337.2978,-144 377.1463,-118.298 1022.4942,-99.721 1300.0236,-92.8826"/>
-<polygon fill="#000000" stroke="#000000" points="1300.2311,-96.3786 1310.1423,-92.6344 1300.0595,-89.3807 1300.2311,-96.3786"/>
-</g>
-<!-- 14. EnteringMessage&#45;&gt;Initial&#45;&gt;16. Initial&#45;&gt;Pinging -->
-<g id="edge77" class="edge">
-<title>14. EnteringMessage&#45;&gt;Initial&#45;&gt;16. Initial&#45;&gt;Pinging</title>
-<path fill="none" stroke="#000000" d="M933.1805,-292.9739C947.8203,-290.9943 962.9917,-289.2112 977.2978,-288 1057.7569,-281.188 2368.2154,-303.632 2430.2978,-252 2447.9676,-237.3045 2451.7753,-210.689 2451.7223,-190.1997"/>
-<polygon fill="#000000" stroke="#000000" points="2455.2184,-190.0202 2451.3956,-180.1391 2448.2221,-190.2474 2455.2184,-190.0202"/>
-</g>
-<!-- 14. EnteringMessage&#45;&gt;Initial&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer -->
-<g id="edge78" class="edge">
-<title>14. EnteringMessage&#45;&gt;Initial&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer</title>
-<path fill="none" stroke="#000000" d="M867.251,-287.9946C885.062,-266.5407 918.0646,-231.6376 955.2978,-216 1010.4953,-192.8176 1373.3058,-175.0122 1571.8849,-166.8673"/>
-<polygon fill="#000000" stroke="#000000" points="1572.2424,-170.3558 1582.0915,-166.4513 1571.9572,-163.3616 1572.2424,-170.3558"/>
-</g>
-<!-- 15. EnteringMessage&#45;&gt;EnteringMessage&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging -->
-<g id="edge83" class="edge">
-<title>15. EnteringMessage&#45;&gt;EnteringMessage&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging</title>
-<path fill="none" stroke="#000000" d="M620.1079,-219.689C703.1318,-207.1571 823.1924,-189.0348 906.5065,-176.4591"/>
-<polygon fill="#000000" stroke="#000000" points="907.114,-179.9071 916.4796,-174.9537 906.0692,-172.9855 907.114,-179.9071"/>
-</g>
-<!-- 15. EnteringMessage&#45;&gt;EnteringMessage&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial -->
-<g id="edge84" class="edge">
-<title>15. EnteringMessage&#45;&gt;EnteringMessage&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial</title>
-<path fill="none" stroke="#000000" d="M579.3815,-217.0452C646.8133,-196.5691 765.9326,-162.5697 870.2978,-144 1018.5608,-117.6196 1191.5624,-103.3605 1304.4962,-96.2324"/>
-<polygon fill="#000000" stroke="#000000" points="1304.7919,-99.7208 1314.5552,-95.6063 1304.357,-92.7344 1304.7919,-99.7208"/>
-</g>
-<!-- 15. EnteringMessage&#45;&gt;EnteringMessage&#45;&gt;16. Initial&#45;&gt;Pinging -->
-<g id="edge81" class="edge">
-<title>15. EnteringMessage&#45;&gt;EnteringMessage&#45;&gt;16. Initial&#45;&gt;Pinging</title>
-<path fill="none" stroke="#000000" d="M671.0791,-227.6907C754.3297,-224.1395 860.6645,-219.6909 955.2978,-216 1487.1574,-195.2563 2125.6352,-173.094 2358.6028,-165.0977"/>
-<polygon fill="#000000" stroke="#000000" points="2358.8482,-168.5914 2368.7222,-164.7505 2358.6081,-161.5956 2358.8482,-168.5914"/>
-</g>
-<!-- 15. EnteringMessage&#45;&gt;EnteringMessage&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer -->
-<g id="edge82" class="edge">
-<title>15. EnteringMessage&#45;&gt;EnteringMessage&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer</title>
-<path fill="none" stroke="#000000" d="M662.7903,-225.5821C893.842,-211.4361 1356.3932,-183.1166 1577.7397,-169.5648"/>
-<polygon fill="#000000" stroke="#000000" points="1578.0056,-173.0552 1587.773,-168.9505 1577.5777,-166.0682 1578.0056,-173.0552"/>
+<title>3. Connected&#45;&gt;Connecting&#45;&gt;14. EnteringMessage&#45;&gt;Initial</title>
+<path fill="none" stroke="#ff0000" d="M1242.516,-638.0915C1282.2555,-628.4086 1326.9252,-614.3321 1338.7422,-598 1348.1213,-585.0373 1346.6254,-575.9232 1338.7422,-562 1330.9357,-548.2122 1318.0491,-537.5609 1304.434,-529.5059"/>
+<polygon fill="#ff0000" stroke="#ff0000" points="1305.8809,-526.3081 1295.4279,-524.5808 1302.5223,-532.4497 1305.8809,-526.3081"/>
 </g>
-<!-- 1. TryingConnect&#45;&gt;H -->
-<g id="node14" class="node">
-<title>1. TryingConnect&#45;&gt;H</title>
-<ellipse fill="none" stroke="#000000" cx="1074.2978" cy="-306" rx="87.9851" ry="18"/>
-<text text-anchor="middle" x="1074.2978" y="-302.3" font-family="Times,serif" font-size="14.00" fill="#000000">1. TryingConnect&#45;&gt;H</text>
+<!-- 3. Connected&#45;&gt;Connecting&#45;&gt;15. EnteringMessage&#45;&gt;EnteringMessage -->
+<g id="edge20" class="edge">
+<title>3. Connected&#45;&gt;Connecting&#45;&gt;15. EnteringMessage&#45;&gt;EnteringMessage</title>
+<path fill="none" stroke="#ff0000" d="M1245.7199,-638.4339C1289.5734,-628.6544 1340.3265,-614.338 1355.7422,-598 1389.0893,-562.658 1399.2511,-530.723 1372.7422,-490 1363.024,-475.0709 1348.1344,-464.2382 1332.0576,-456.388"/>
+<polygon fill="#ff0000" stroke="#ff0000" points="1333.042,-452.994 1322.4847,-452.1021 1330.1816,-459.3829 1333.042,-452.994"/>
 </g>
-<!-- 2. TryingConnect&#45;&gt;Initial -->
+<!-- 4. NotJoined&#45;&gt;GettingRoomNumber -->
 <g id="node15" class="node">
-<title>2. TryingConnect&#45;&gt;Initial</title>
-<ellipse fill="none" stroke="#000000" cx="1067.2978" cy="-234" rx="102.8821" ry="18"/>
-<text text-anchor="middle" x="1067.2978" y="-230.3" font-family="Times,serif" font-size="14.00" fill="#000000">2. TryingConnect&#45;&gt;Initial</text>
+<title>4. NotJoined&#45;&gt;GettingRoomNumber</title>
+<ellipse fill="none" stroke="#000000" cx="1603.7422" cy="-508" rx="141.8751" ry="18"/>
+<text text-anchor="middle" x="1603.7422" y="-504.3" font-family="Times,serif" font-size="14.00" fill="#000000">4. NotJoined&#45;&gt;GettingRoomNumber</text>
 </g>
-<!-- 1. TryingConnect&#45;&gt;H&#45;&gt;2. TryingConnect&#45;&gt;Initial -->
-<g id="edge13" class="edge">
-<title>1. TryingConnect&#45;&gt;H&#45;&gt;2. TryingConnect&#45;&gt;Initial</title>
-<path fill="none" stroke="#000000" d="M1072.5314,-287.8314C1071.7827,-280.131 1070.8925,-270.9743 1070.0605,-262.4166"/>
-<polygon fill="#000000" stroke="#000000" points="1073.5393,-262.0276 1069.0879,-252.4133 1066.5721,-262.7051 1073.5393,-262.0276"/>
+<!-- 3. Connected&#45;&gt;Connecting&#45;&gt;4. NotJoined&#45;&gt;GettingRoomNumber -->
+<g id="edge9" class="edge">
+<title>3. Connected&#45;&gt;Connecting&#45;&gt;4. NotJoined&#45;&gt;GettingRoomNumber</title>
+<path fill="none" stroke="#ff0000" d="M1263.4437,-641.9571C1317.8586,-633.9758 1388.2657,-620.3382 1447.7422,-598 1492.6325,-581.1401 1539.7238,-552.1812 1570.2686,-531.6703"/>
+<polygon fill="#ff0000" stroke="#ff0000" points="1572.5095,-534.3792 1578.8124,-525.863 1568.5744,-528.5899 1572.5095,-534.3792"/>
 </g>
-<!-- 1. TryingConnect&#45;&gt;H&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging -->
-<g id="edge27" class="edge">
-<title>1. TryingConnect&#45;&gt;H&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging</title>
-<path fill="none" stroke="#000000" d="M1009.356,-293.8442C998.6496,-291.8703 987.6652,-289.8634 977.2978,-288 931.3437,-279.7405 800.3517,-287.7318 770.2978,-252 730.6433,-204.8539 807.1491,-182.306 882.7113,-171.581"/>
-<polygon fill="#000000" stroke="#000000" points="883.4321,-175.0155 892.8728,-170.2068 882.4939,-168.0786 883.4321,-175.0155"/>
+<!-- 9. Leaving&#45;&gt;NotJoined -->
+<g id="node16" class="node">
+<title>9. Leaving&#45;&gt;NotJoined</title>
+<ellipse fill="none" stroke="#000000" cx="1641.7422" cy="-436" rx="92.8835" ry="18"/>
+<text text-anchor="middle" x="1641.7422" y="-432.3" font-family="Times,serif" font-size="14.00" fill="#000000">9. Leaving&#45;&gt;NotJoined</text>
 </g>
-<!-- 1. TryingConnect&#45;&gt;H&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial -->
-<g id="edge28" class="edge">
-<title>1. TryingConnect&#45;&gt;H&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial</title>
-<path fill="none" stroke="#000000" d="M1012.1248,-293.2315C1000.5868,-291.2128 988.6075,-289.3497 977.2978,-288 903.8221,-279.2312 363.1877,-305.7194 312.2978,-252 301.2941,-240.3845 304.4146,-229.9232 312.2978,-216 342.9421,-161.8763 372.8308,-162.2243 432.2978,-144 513.1461,-119.2232 1051.7931,-100.7438 1300.2106,-93.4336"/>
-<polygon fill="#000000" stroke="#000000" points="1300.4783,-96.9274 1310.3715,-93.1361 1300.2733,-89.9304 1300.4783,-96.9274"/>
+<!-- 3. Connected&#45;&gt;Connecting&#45;&gt;9. Leaving&#45;&gt;NotJoined -->
+<g id="edge14" class="edge">
+<title>3. Connected&#45;&gt;Connecting&#45;&gt;9. Leaving&#45;&gt;NotJoined</title>
+<path fill="none" stroke="#ff0000" d="M1274.5014,-645.5006C1424.7332,-633.3463 1697.6164,-601.2507 1754.7422,-526 1764.4166,-513.2561 1763.2751,-503.5348 1754.7422,-490 1744.3741,-473.5541 1727.4635,-462.0089 1709.8454,-453.9473"/>
+<polygon fill="#ff0000" stroke="#ff0000" points="1711.1726,-450.7085 1700.5988,-450.0416 1708.4488,-457.1568 1711.1726,-450.7085"/>
+</g>
+<!-- 10. Joining&#45;&gt;H -->
+<g id="node17" class="node">
+<title>10. Joining&#45;&gt;H</title>
+<ellipse fill="none" stroke="#000000" cx="1602.7422" cy="-364" rx="64.9885" ry="18"/>
+<text text-anchor="middle" x="1602.7422" y="-360.3" font-family="Times,serif" font-size="14.00" fill="#000000">10. Joining&#45;&gt;H</text>
 </g>
-<!-- 1. TryingConnect&#45;&gt;H&#45;&gt;16. Initial&#45;&gt;Pinging -->
+<!-- 3. Connected&#45;&gt;Connecting&#45;&gt;10. Joining&#45;&gt;H -->
+<g id="edge15" class="edge">
+<title>3. Connected&#45;&gt;Connecting&#45;&gt;10. Joining&#45;&gt;H</title>
+<path fill="none" stroke="#ff0000" d="M1276.9658,-646.8041C1400.1637,-639.5053 1599.2885,-624.1011 1668.7422,-598 1721.0255,-578.3516 1745.9324,-575.5324 1771.7422,-526 1794.6563,-482.0249 1778.8955,-452.973 1743.7422,-418 1731.0571,-405.38 1691.801,-390.8626 1657.9218,-380.0607"/>
+<polygon fill="#ff0000" stroke="#ff0000" points="1658.6659,-376.6261 1648.0769,-376.9759 1656.5729,-383.3059 1658.6659,-376.6261"/>
+</g>
+<!-- 3. Connected&#45;&gt;Connecting&#45;&gt;pseudo0 -->
+<g id="edge24" class="edge">
+<title>3. Connected&#45;&gt;Connecting&#45;&gt;pseudo0</title>
+<path fill="none" stroke="#0000ff" d="M1248.5839,-638.9719C1299.1548,-628.8992 1360.7294,-614.0082 1381.7422,-598 1418.4898,-570.0046 1433.7422,-554.1966 1433.7422,-508 1433.7422,-508 1433.7422,-508 1433.7422,-436 1433.7422,-351.5017 1125.8985,-308.9221 1035.448,-298.235"/>
+<polygon fill="#0000ff" stroke="#0000ff" points="1035.6383,-294.7338 1025.3028,-297.0635 1034.8353,-301.6876 1035.6383,-294.7338"/>
+</g>
+<!-- 4. NotJoined&#45;&gt;GettingRoomNumber&#45;&gt;pseudo0 -->
 <g id="edge25" class="edge">
-<title>1. TryingConnect&#45;&gt;H&#45;&gt;16. Initial&#45;&gt;Pinging</title>
-<path fill="none" stroke="#000000" d="M1155.7845,-299.2424C1204.1472,-295.4423 1266.6853,-290.8943 1322.2978,-288 1385.6325,-284.7038 2419.1655,-297.5466 2463.2978,-252 2479.0898,-235.7019 2472.7756,-209.3921 2464.1779,-189.4182"/>
-<polygon fill="#000000" stroke="#000000" points="2467.2695,-187.767 2459.8607,-180.1934 2460.9295,-190.7342 2467.2695,-187.767"/>
+<title>4. NotJoined&#45;&gt;GettingRoomNumber&#45;&gt;pseudo0</title>
+<path fill="none" stroke="#0000ff" d="M1580.7355,-490.1215C1568.1828,-479.9945 1552.6222,-466.8194 1539.7422,-454 1517.3965,-431.7594 1475.5578,-360.8415 1447.7422,-346 1375.5043,-307.4562 1117.7159,-298.0518 1035.871,-296.0136"/>
+<polygon fill="#0000ff" stroke="#0000ff" points="1035.6066,-292.5065 1025.5277,-295.7726 1035.4434,-299.5046 1035.6066,-292.5065"/>
 </g>
-<!-- 1. TryingConnect&#45;&gt;H&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer -->
-<g id="edge26" class="edge">
-<title>1. TryingConnect&#45;&gt;H&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer</title>
-<path fill="none" stroke="#000000" d="M1111.3807,-289.4178C1132.0066,-279.5888 1157.7789,-266.2842 1179.2978,-252 1200.0637,-238.2156 1199.386,-225.8125 1222.2978,-216 1283.5606,-189.7627 1454.0047,-175.2705 1574.0604,-168.0648"/>
-<polygon fill="#000000" stroke="#000000" points="1574.2863,-171.5577 1584.0626,-167.4743 1573.8737,-164.5698 1574.2863,-171.5577"/>
+<!-- 9. Leaving&#45;&gt;NotJoined&#45;&gt;pseudo0 -->
+<g id="edge30" class="edge">
+<title>9. Leaving&#45;&gt;NotJoined&#45;&gt;pseudo0</title>
+<path fill="none" stroke="#0000ff" d="M1601.4806,-419.7138C1579.3004,-410.0235 1551.6948,-396.7575 1528.7422,-382 1507.7771,-368.5204 1508.685,-355.7398 1485.7422,-346 1403.2875,-310.9958 1121.7394,-299.1077 1035.8333,-296.2488"/>
+<polygon fill="#0000ff" stroke="#0000ff" points="1035.8048,-292.7462 1025.6977,-295.9237 1035.5803,-299.7426 1035.8048,-292.7462"/>
 </g>
-<!-- 2. TryingConnect&#45;&gt;Initial&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging -->
+<!-- 10. Joining&#45;&gt;H&#45;&gt;pseudo0 -->
 <g id="edge31" class="edge">
-<title>2. TryingConnect&#45;&gt;Initial&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging</title>
-<path fill="none" stroke="#000000" d="M1051.2303,-216.2022C1043.4765,-207.6134 1034.0292,-197.1486 1025.511,-187.7131"/>
-<polygon fill="#000000" stroke="#000000" points="1027.9308,-185.1705 1018.6318,-180.0931 1022.735,-189.8612 1027.9308,-185.1705"/>
+<title>10. Joining&#45;&gt;H&#45;&gt;pseudo0</title>
+<path fill="none" stroke="#0000ff" d="M1554.0462,-351.8951C1544.0669,-349.6996 1533.6004,-347.6018 1523.7422,-346 1337.6349,-315.761 1110.3968,-301.0906 1035.7798,-296.8444"/>
+<polygon fill="#0000ff" stroke="#0000ff" points="1035.7007,-293.3346 1025.5213,-296.2721 1035.3108,-300.3237 1035.7007,-293.3346"/>
 </g>
-<!-- 2. TryingConnect&#45;&gt;Initial&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial -->
-<g id="edge32" class="edge">
-<title>2. TryingConnect&#45;&gt;Initial&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial</title>
-<path fill="none" stroke="#000000" d="M1108.3649,-217.4814C1174.0152,-191.0746 1302.4743,-139.4038 1374.0442,-110.616"/>
-<polygon fill="#000000" stroke="#000000" points="1375.3579,-113.8602 1383.3293,-106.8812 1372.7456,-107.3658 1375.3579,-113.8602"/>
+<!-- pseudo0&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging -->
+<g id="edge39" class="edge">
+<title>pseudo0&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging</title>
+<path fill="none" stroke="#0000ff" d="M997.1178,-290.0102C974.6242,-280.9466 928.5963,-262.4 892.2727,-247.7638"/>
+<polygon fill="#0000ff" stroke="#0000ff" points="893.3746,-244.4343 882.7911,-243.9432 890.7583,-250.9271 893.3746,-244.4343"/>
 </g>
-<!-- 2. TryingConnect&#45;&gt;Initial&#45;&gt;16. Initial&#45;&gt;Pinging -->
-<g id="edge29" class="edge">
-<title>2. TryingConnect&#45;&gt;Initial&#45;&gt;16. Initial&#45;&gt;Pinging</title>
-<path fill="none" stroke="#000000" d="M1155.2134,-224.6606C1186.7495,-221.5545 1222.5907,-218.3039 1255.2978,-216 1666.5276,-187.0327 2158.5861,-170.5037 2358.3485,-164.5533"/>
-<polygon fill="#000000" stroke="#000000" points="2358.6093,-168.0472 2368.5012,-164.2525 2358.4019,-161.0502 2358.6093,-168.0472"/>
+<!-- pseudo0&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial -->
+<g id="edge40" class="edge">
+<title>pseudo0&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial</title>
+<path fill="none" stroke="#0000ff" d="M1007.7762,-281.1528C1003.2247,-262.3839 992.8509,-229.4838 972.7422,-209 958.2625,-194.2502 938.9951,-183.1134 920.2817,-174.9028"/>
+<polygon fill="#0000ff" stroke="#0000ff" points="921.4474,-171.597 910.8701,-170.9885 918.7594,-178.0603 921.4474,-171.597"/>
 </g>
-<!-- 2. TryingConnect&#45;&gt;Initial&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer -->
-<g id="edge30" class="edge">
-<title>2. TryingConnect&#45;&gt;Initial&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer</title>
-<path fill="none" stroke="#000000" d="M1143.061,-221.7946C1156.7692,-219.7429 1170.9473,-217.7231 1184.2978,-216 1322.16,-198.2061 1481.2897,-182.2755 1586.1847,-172.4078"/>
-<polygon fill="#000000" stroke="#000000" points="1586.5345,-175.8905 1596.164,-171.472 1585.8808,-168.9211 1586.5345,-175.8905"/>
+<!-- 16. Initial&#45;&gt;Pinging -->
+<g id="node20" class="node">
+<title>16. Initial&#45;&gt;Pinging</title>
+<ellipse fill="none" stroke="#000000" cx="1071.7422" cy="-155" rx="81.4863" ry="18"/>
+<text text-anchor="middle" x="1071.7422" y="-151.3" font-family="Times,serif" font-size="14.00" fill="#000000">16. Initial&#45;&gt;Pinging</text>
 </g>
-<!-- 18. ExpectingAnswer&#45;&gt;Pinging&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial -->
-<g id="edge20" class="edge">
-<title>18. ExpectingAnswer&#45;&gt;Pinging&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial</title>
-<path fill="none" stroke="#000000" d="M1082.8565,-148.2879C1155.4636,-135.9292 1262.0138,-117.793 1336.9335,-105.0407"/>
-<polygon fill="#000000" stroke="#000000" points="1337.5566,-108.4851 1346.8275,-103.3566 1336.3819,-101.5844 1337.5566,-108.4851"/>
+<!-- pseudo0&#45;&gt;16. Initial&#45;&gt;Pinging -->
+<g id="edge37" class="edge">
+<title>pseudo0&#45;&gt;16. Initial&#45;&gt;Pinging</title>
+<path fill="none" stroke="#0000ff" d="M1016.5912,-282.0283C1026.504,-259.1963 1046.7932,-212.4646 1059.8061,-182.4921"/>
+<polygon fill="#0000ff" stroke="#0000ff" points="1063.1427,-183.5955 1063.9148,-173.0288 1056.7218,-180.8077 1063.1427,-183.5955"/>
 </g>
-<!-- 20. Receiving&#45;&gt;Receiving -->
+<!-- 17. Pinging&#45;&gt;ExpectingAnswer -->
 <g id="node21" class="node">
-<title>20. Receiving&#45;&gt;Receiving</title>
-<ellipse fill="none" stroke="#000000" cx="1497.2978" cy="-18" rx="103.9815" ry="18"/>
-<text text-anchor="middle" x="1497.2978" y="-14.3" font-family="Times,serif" font-size="14.00" fill="#000000">20. Receiving&#45;&gt;Receiving</text>
-</g>
-<!-- 18. ExpectingAnswer&#45;&gt;Pinging&#45;&gt;20. Receiving&#45;&gt;Receiving -->
-<g id="edge87" class="edge">
-<title>18. ExpectingAnswer&#45;&gt;Pinging&#45;&gt;20. Receiving&#45;&gt;Receiving</title>
-<path fill="none" stroke="#000000" d="M1054.9302,-145.6567C1114.3817,-127.3004 1214.0888,-96.8291 1300.2978,-72 1343.4674,-59.5667 1392.1519,-46.2155 1430.3224,-35.8994"/>
-<polygon fill="#000000" stroke="#000000" points="1431.5491,-39.1936 1440.292,-33.2093 1429.7255,-32.4353 1431.5491,-39.1936"/>
+<title>17. Pinging&#45;&gt;ExpectingAnswer</title>
+<ellipse fill="none" stroke="#000000" cx="1180.7422" cy="-227" rx="122.6784" ry="18"/>
+<text text-anchor="middle" x="1180.7422" y="-223.3" font-family="Times,serif" font-size="14.00" fill="#000000">17. Pinging&#45;&gt;ExpectingAnswer</text>
 </g>
-<!-- 19. ExpectingAnswer&#45;&gt;Initial&#45;&gt;20. Receiving&#45;&gt;Receiving -->
-<g id="edge88" class="edge">
-<title>19. ExpectingAnswer&#45;&gt;Initial&#45;&gt;20. Receiving&#45;&gt;Receiving</title>
-<path fill="none" stroke="#000000" d="M1443.0955,-72.2022C1451.9226,-63.3752 1462.7309,-52.5669 1472.3671,-42.9307"/>
-<polygon fill="#000000" stroke="#000000" points="1474.859,-45.3885 1479.4552,-35.8425 1469.9092,-40.4388 1474.859,-45.3885"/>
+<!-- pseudo0&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer -->
+<g id="edge38" class="edge">
+<title>pseudo0&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer</title>
+<path fill="none" stroke="#0000ff" d="M1024.3667,-290.0102C1046.8602,-280.9466 1092.8882,-262.4 1129.2117,-247.7638"/>
+<polygon fill="#0000ff" stroke="#0000ff" points="1130.7261,-250.9271 1138.6933,-243.9432 1128.1098,-244.4343 1130.7261,-250.9271"/>
 </g>
 <!-- 0. Initial&#45;&gt;TryingConnect -->
-<g id="node18" class="node">
+<g id="node19" class="node">
 <title>0. Initial&#45;&gt;TryingConnect</title>
-<ellipse fill="none" stroke="#000000" cx="2114.2978" cy="-234" rx="102.8821" ry="18"/>
-<text text-anchor="middle" x="2114.2978" y="-230.3" font-family="Times,serif" font-size="14.00" fill="#000000">0. Initial&#45;&gt;TryingConnect</text>
+<ellipse fill="none" stroke="#000000" cx="1788.7422" cy="-364" rx="102.8821" ry="18"/>
+<text text-anchor="middle" x="1788.7422" y="-360.3" font-family="Times,serif" font-size="14.00" fill="#000000">0. Initial&#45;&gt;TryingConnect</text>
 </g>
-<!-- 0. Initial&#45;&gt;TryingConnect&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging -->
-<g id="edge23" class="edge">
-<title>0. Initial&#45;&gt;TryingConnect&#45;&gt;18. ExpectingAnswer&#45;&gt;Pinging</title>
-<path fill="none" stroke="#000000" d="M2025.417,-224.8081C1994.1103,-221.7512 1958.6621,-218.4942 1926.2978,-216 1642.0268,-194.0922 1307.9424,-176.6124 1129.6505,-167.9465"/>
-<polygon fill="#000000" stroke="#000000" points="1129.6025,-164.4402 1119.4448,-167.4519 1129.2635,-171.432 1129.6025,-164.4402"/>
+<!-- 0. Initial&#45;&gt;TryingConnect&#45;&gt;pseudo0 -->
+<g id="edge21" class="edge">
+<title>0. Initial&#45;&gt;TryingConnect&#45;&gt;pseudo0</title>
+<path fill="none" stroke="#0000ff" d="M1715.666,-351.3523C1702.7252,-349.3708 1689.3572,-347.4893 1676.7422,-346 1427.1616,-316.5344 1122.8255,-300.7649 1035.33,-296.6203"/>
+<polygon fill="#0000ff" stroke="#0000ff" points="1035.4673,-293.123 1025.3148,-296.1521 1035.1404,-300.1153 1035.4673,-293.123"/>
 </g>
-<!-- 0. Initial&#45;&gt;TryingConnect&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial -->
-<g id="edge24" class="edge">
-<title>0. Initial&#45;&gt;TryingConnect&#45;&gt;19. ExpectingAnswer&#45;&gt;Initial</title>
-<path fill="none" stroke="#000000" d="M2074.6926,-217.3101C2024.535,-196.8604 1935.0242,-162.6407 1855.2978,-144 1750.9978,-119.6138 1629.7222,-105.6505 1542.6067,-98.0592"/>
-<polygon fill="#000000" stroke="#000000" points="1542.685,-94.5532 1532.4228,-97.1872 1542.0877,-101.5276 1542.685,-94.5532"/>
+<!-- 16. Initial&#45;&gt;Pinging&#45;&gt;pseudo1 -->
+<g id="edge41" class="edge">
+<title>16. Initial&#45;&gt;Pinging&#45;&gt;pseudo1</title>
+<path fill="none" stroke="#0000ff" d="M1044.7678,-137.8913C1026.2118,-126.1219 1001.9193,-110.7142 984.7895,-99.8494"/>
+<polygon fill="#0000ff" stroke="#0000ff" points="986.411,-96.7333 976.0917,-94.3328 982.6617,-102.6446 986.411,-96.7333"/>
 </g>
-<!-- 0. Initial&#45;&gt;TryingConnect&#45;&gt;16. Initial&#45;&gt;Pinging -->
-<g id="edge21" class="edge">
-<title>0. Initial&#45;&gt;TryingConnect&#45;&gt;16. Initial&#45;&gt;Pinging</title>
-<path fill="none" stroke="#000000" d="M2179.2864,-220.0323C2237.2936,-207.5651 2321.9526,-189.3697 2380.9584,-176.6879"/>
-<polygon fill="#000000" stroke="#000000" points="2381.8901,-180.0676 2390.9314,-174.5444 2380.4192,-173.2239 2381.8901,-180.0676"/>
+<!-- 17. Pinging&#45;&gt;ExpectingAnswer&#45;&gt;pseudo1 -->
+<g id="edge42" class="edge">
+<title>17. Pinging&#45;&gt;ExpectingAnswer&#45;&gt;pseudo1</title>
+<path fill="none" stroke="#0000ff" d="M1182.1434,-208.9087C1182.6637,-188.6821 1180.203,-156.2465 1161.7422,-137 1137.8778,-112.1198 1036.1199,-95.9097 988.5009,-89.546"/>
+<polygon fill="#0000ff" stroke="#0000ff" points="988.7881,-86.0541 978.421,-88.2387 987.8877,-92.9959 988.7881,-86.0541"/>
 </g>
-<!-- 0. Initial&#45;&gt;TryingConnect&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer -->
-<g id="edge22" class="edge">
-<title>0. Initial&#45;&gt;TryingConnect&#45;&gt;17. Pinging&#45;&gt;ExpectingAnswer</title>
-<path fill="none" stroke="#000000" d="M2041.4123,-221.2936C1971.3804,-209.0846 1865.4176,-190.6117 1790.4037,-177.5342"/>
-<polygon fill="#000000" stroke="#000000" points="1790.9456,-174.076 1780.4931,-175.8064 1789.7433,-180.972 1790.9456,-174.076"/>
-</g>
-<!-- 16. Initial&#45;&gt;Pinging&#45;&gt;20. Receiving&#45;&gt;Receiving -->
-<g id="edge85" class="edge">
-<title>16. Initial&#45;&gt;Pinging&#45;&gt;20. Receiving&#45;&gt;Receiving</title>
-<path fill="none" stroke="#000000" d="M2381.9757,-151.8168C2213.6854,-126.3612 1774.6864,-59.9579 1585.8108,-31.3885"/>
-<polygon fill="#000000" stroke="#000000" points="1586.3266,-27.9268 1575.9156,-29.8918 1585.2796,-34.8481 1586.3266,-27.9268"/>
-</g>
-<!-- 17. Pinging&#45;&gt;ExpectingAnswer&#45;&gt;20. Receiving&#45;&gt;Receiving -->
-<g id="edge86" class="edge">
-<title>17. Pinging&#45;&gt;ExpectingAnswer&#45;&gt;20. Receiving&#45;&gt;Receiving</title>
-<path fill="none" stroke="#000000" d="M1676.2834,-144.3428C1639.6309,-118.4705 1571.2711,-70.2164 1530.4653,-41.4124"/>
-<polygon fill="#000000" stroke="#000000" points="1532.3855,-38.4837 1522.1974,-35.5762 1528.3487,-44.2025 1532.3855,-38.4837"/>
+<!-- 20. Receiving&#45;&gt;Receiving -->
+<g id="node23" class="node">
+<title>20. Receiving&#45;&gt;Receiving</title>
+<ellipse fill="none" stroke="#000000" cx="963.7422" cy="-18" rx="103.9815" ry="18"/>
+<text text-anchor="middle" x="963.7422" y="-14.3" font-family="Times,serif" font-size="14.00" fill="#000000">20. Receiving&#45;&gt;Receiving</text>
+</g>
+<!-- pseudo1&#45;&gt;20. Receiving&#45;&gt;Receiving -->
+<g id="edge45" class="edge">
+<title>pseudo1&#45;&gt;20. Receiving&#45;&gt;Receiving</title>
+<path fill="none" stroke="#0000ff" d="M963.7422,-71.9729C963.7422,-64.4645 963.7422,-55.0377 963.7422,-46.1722"/>
+<polygon fill="#0000ff" stroke="#0000ff" points="967.2423,-46.1713 963.7422,-36.1713 960.2423,-46.1713 967.2423,-46.1713"/>
 </g>
 </g>
 </svg>

ファイルの差分が大きいため隠しています
+ 632 - 1284
examples/digitalwatch/model_digitalwatch_priorities.svg


+ 50 - 14
src/sccd/statechart/cmd/render_priorities.py

@@ -38,11 +38,14 @@ if __name__ == '__main__':
           # All other nodes will be ignored.
           return ({"statechart": parse_sc}, when_done)
 
-        statechart = parse_f(src, {
-          "test": find_statechart,
-          "single_instance_cd": find_statechart,
-          "statechart": parse_sc,
-        }, ignore_unmatched=True)
+        try:
+            statechart = parse_f(src, {
+              "test": find_statechart,
+              "single_instance_cd": find_statechart,
+              "statechart": parse_sc,
+            }, ignore_unmatched=True)
+        except SkipFile:
+            continue
 
         assert isinstance(statechart, Statechart)
 
@@ -51,6 +54,29 @@ if __name__ == '__main__':
           continue
 
         tree = statechart.tree
+        semantics = statechart.semantics
+
+        hierarchical = {
+            HierarchicalPriority.NONE: priority.none,
+            HierarchicalPriority.SOURCE_PARENT: priority.source_parent,
+            HierarchicalPriority.SOURCE_CHILD: priority.source_child,
+            HierarchicalPriority.ARENA_PARENT: priority.arena_parent,
+            HierarchicalPriority.ARENA_CHILD: priority.arena_child,
+        }[semantics.hierarchical_priority]
+
+        same_state = {
+            SameSourcePriority.NONE: priority.none,
+            SameSourcePriority.EXPLICIT: priority.explicit_same_state,
+        }[semantics.same_source_priority]
+
+        orthogonal = {
+            OrthogonalPriority.NONE: priority.none,
+            OrthogonalPriority.EXPLICIT: priority.explicit_ortho,
+        }[semantics.orthogonal_priority]
+
+        same_state_edges = same_state(tree)
+        hierarchical_edges = hierarchical(tree)
+        orthogonal_edges = orthogonal(tree)
 
         dot_target = dropext(src)+'_priorities.dot'
         svg_target = dropext(src)+'_priorities.svg'
@@ -60,15 +86,25 @@ if __name__ == '__main__':
             w.write("digraph priorities {")
             w.indent()
 
-            graph = priority.get_graph(tree, statechart.semantics)
-
-            print("Priority graph has", len(graph), "edges")
-
-            def label(t):
-                return '"'+str(tree.transition_list.index(t)) + ". " + t.source.short_name + "->" + t.target.short_name+'"'
-
-            for high, low in graph:
-                w.write(label(high) + " -> " + label(low) + ";")
+            pseudo_dict = {}
+
+            def node_label(t):
+                if isinstance(t, priority.PseudoVertex):
+                    try:
+                        label = pseudo_dict[t]
+                    except KeyError:
+                        pseudo_dict[t] = label = "pseudo"+str(len(pseudo_dict))
+                        w.write("%s [label=\"\" shape=circle style=filled fixedsize=true width=0.4 height=0.4 fillcolor=\"grey\"];" % label)
+                    return label
+                elif isinstance(t, Transition):
+                    return '"'+str(tree.transition_list.index(t)) + ". " + t.source.short_name + "->" + t.target.short_name+'"'
+            def draw_edges(edges, color):
+                for high, low in edges:
+                    w.write("%s -> %s [color=%s];" % (node_label(high), node_label(low), color))
+
+            draw_edges(same_state_edges, "green")
+            draw_edges(hierarchical_edges, "red")
+            draw_edges(orthogonal_edges, "blue")
 
             w.dedent()
             w.write("}")

+ 107 - 97
src/sccd/statechart/static/priority.py

@@ -8,104 +8,112 @@ from sccd.util.bitmap import *
 import collections
 import itertools
 
-EdgeList = List[Tuple[Transition,Transition]]
+# Pseudo-vertices reduce the amount of edges in the priority graph
+class PseudoVertex:
+    pass
+
+Vertex = Union[Transition, PseudoVertex]
+EdgeList = List[Tuple[Vertex,Vertex]]
+
+# explicit ordering of orthogonal regions
+def explicit_ortho(tree: StateTree) -> EdgeList:
+    edges: EdgeList = []
+    # get all outgoing transitions of state or one of its descendants
+    def get_transitions(s: State) -> List[Transition]:
+        transitions = []
+        def visit_state(s: State, _=None):
+            transitions.extend(s.transitions)
+        visit_tree(s, lambda s: s.children, before_children=[visit_state])
+        return transitions
+    # create edges between transitions in one region to another
+    def visit_parallel_state(s: State, _=None):
+        if isinstance(s, ParallelState):
+            prev = []
+            # s.children are the orthogonal regions in document order
+            for region in s.children:
+                curr = get_transitions(region)
+                if len(curr) > 0: # skip empty regions
+                    # instead of creating edges between all transitions in component 'prev' and all transitions in component 'curr' (|prev| x |curr| edges), we add a pseudo-vertex in the graph between them, so we only have to create |prev| + |curr| edges, expressing the same information.
+                    if len(prev) > 0:
+                        connector = PseudoVertex()
+                        edges.extend((t, connector) for t in prev)
+                        edges.extend((connector, t) for t in curr)
+                    prev = curr
+    visit_tree(tree.root, lambda s: s.children,
+        before_children=[visit_parallel_state])
+    return edges
 
-# Get the (partial) priority ordering between transitions in the state tree, according to given semantics, as a graph
-def get_graph(tree: StateTree, semantics: SemanticConfiguration) -> EdgeList:
+# explicit ordering of outgoing transitions of the same state
+def explicit_same_state(tree: StateTree) -> EdgeList:
+    edges: EdgeList = []
+    def visit_state(s: State, _=None):
+        prev = None
+        # s.transitions are s' outgoing transitions in document order
+        for t in s.transitions:
+            if prev is not None:
+                edges.append((prev, t))
+            prev = t
+    visit_tree(tree.root, lambda s: s.children,
+        before_children=[visit_state])
+    return edges
 
-    # explicit ordering of orthogonal regions
-    def explicit_ortho(tree: StateTree) -> EdgeList:
-        edges: EdgeList = []
-        # get all outgoing transitions of state or one of its descendants
-        def get_transitions(s: State) -> List[Transition]:
-            transitions = []
-            def visit_state(s: State, _=None):
-                transitions.extend(s.transitions)
-            visit_tree(s, lambda s: s.children, before_children=[visit_state])
-            return transitions
-        # create edges between transitions in one region to another
-        def visit_parallel_state(s: State, _=None):
-            if isinstance(s, ParallelState):
-                prev = []
-                # s.children are the orthogonal regions in document order
-                for region in s.children:
-                    curr = get_transitions(region)
-                    if len(curr) > 0: # skip empty regions
-                        edges.extend(itertools.product(prev, curr))
-                        prev = curr
-        visit_tree(tree.root, lambda s: s.children,
-            before_children=[visit_parallel_state])
-        return edges
-
-    # explicit ordering of outgoing transitions of the same state
-    def explicit_same_state(tree: StateTree) -> EdgeList:
-        edges: EdgeList = []
-        def visit_state(s: State, _=None):
-            prev = None
-            # s.transitions are s' outgoing transitions in document order
-            for t in s.transitions:
-                if prev is not None:
-                    edges.append((prev, t))
-                prev = t
-        visit_tree(tree.root, lambda s: s.children,
-            before_children=[visit_state])
-        return edges
-
-    # hierarchical Source-Parent ordering
-    def source_parent(tree: StateTree) -> EdgeList:
-        edges: EdgeList = []
-        def visit_state(s: State, parent_transitions: List[Transition] = []) -> List[Transition]:
-            if len(s.transitions) > 0: # skip states without transitions
-                edges.extend(itertools.product(parent_transitions, s.transitions))
-                return s.transitions
-            return parent_transitions
-        visit_tree(tree.root, lambda s: s.children, before_children=[visit_state])
-        return edges
-
-    # hierarchical Source-Child ordering
-    def source_child(tree: StateTree) -> EdgeList:
-        edges: EdgeList = []
-        def visit_state(s: State, ts: List[List[Transition]]) -> List[Transition]:
-            children_transitions = list(itertools.chain.from_iterable(ts))
-            if len(s.transitions) > 0: # skip states without transitions
-                edges.extend(itertools.product(children_transitions, s.transitions))
-                return s.transitions
-            else:
-                return children_transitions
-        visit_tree(tree.root, lambda s: s.children, after_children=[visit_state])
-        return edges
-
-    # hierarchical Arena-Parent ordering
-    def arena_parent(tree: StateTree) -> EdgeList:
-        edges: EdgeList = []
-        partitions = collections.defaultdict(list) # mapping of transition's arena depth to list of transitions
-        for t in tree.transition_list:
-            partitions[t.opt.arena.opt.depth].append(t)
-        ordered_partitions = sorted(partitions.items(), key=lambda tup: tup[0])
-        prev = []
-        for depth, curr in ordered_partitions:
-            edges.extend(itertools.product(prev, curr))
-            prev = curr
-        return edges
-
-    # hierarchical Arena-Child ordering
-    def arena_child(tree: StateTree) -> EdgeList:
-        edges: EdgeList = []
-        partitions = collections.defaultdict(list) # mapping of transition's arena depth to list of transitions
-        for t in tree.transition_list:
-            partitions[t.opt.arena.opt.depth].append(t)
-        ordered_partitions = sorted(partitions.items(), key=lambda tup: -tup[0])
-        prev = []
-        for depth, curr in ordered_partitions:
-            edges.extend(itertools.product(prev, curr))
-            prev = curr
-        return edges
-
-    # no priority
-    def none(tree: StateTree) -> EdgeList:
-        return []
+# hierarchical Source-Parent ordering
+def source_parent(tree: StateTree) -> EdgeList:
+    edges: EdgeList = []
+    def visit_state(s: State, parent_transitions: List[Transition] = []) -> List[Transition]:
+        if len(s.transitions) > 0: # skip states without transitions
+            edges.extend(itertools.product(parent_transitions, s.transitions))
+            return s.transitions
+        return parent_transitions
+    visit_tree(tree.root, lambda s: s.children, before_children=[visit_state])
+    return edges
+
+# hierarchical Source-Child ordering
+def source_child(tree: StateTree) -> EdgeList:
+    edges: EdgeList = []
+    def visit_state(s: State, ts: List[List[Transition]]) -> List[Transition]:
+        children_transitions = list(itertools.chain.from_iterable(ts))
+        if len(s.transitions) > 0: # skip states without transitions
+            edges.extend(itertools.product(children_transitions, s.transitions))
+            return s.transitions
+        else:
+            return children_transitions
+    visit_tree(tree.root, lambda s: s.children, after_children=[visit_state])
+    return edges
+
+# hierarchical Arena-Parent ordering
+def arena_parent(tree: StateTree) -> EdgeList:
+    edges: EdgeList = []
+    partitions = collections.defaultdict(list) # mapping of transition's arena depth to list of transitions
+    for t in tree.transition_list:
+        partitions[t.opt.arena.opt.depth].append(t)
+    ordered_partitions = sorted(partitions.items(), key=lambda tup: tup[0])
+    prev = []
+    for depth, curr in ordered_partitions:
+        edges.extend(itertools.product(prev, curr))
+        prev = curr
+    return edges
+
+# hierarchical Arena-Child ordering
+def arena_child(tree: StateTree) -> EdgeList:
+    edges: EdgeList = []
+    partitions = collections.defaultdict(list) # mapping of transition's arena depth to list of transitions
+    for t in tree.transition_list:
+        partitions[t.opt.arena.opt.depth].append(t)
+    ordered_partitions = sorted(partitions.items(), key=lambda tup: -tup[0])
+    prev = []
+    for depth, curr in ordered_partitions:
+        edges.extend(itertools.product(prev, curr))
+        prev = curr
+    return edges
+
+# no priority
+def none(tree: StateTree) -> EdgeList:
+    return []
 
 
+# Get the (partial) priority ordering between transitions in the state tree, according to given semantics, as a graph
+def get_graph(tree: StateTree, semantics: SemanticConfiguration) -> EdgeList:
     hierarchical = {
         HierarchicalPriority.NONE: none,
         HierarchicalPriority.SOURCE_PARENT: source_parent,
@@ -152,13 +160,15 @@ def generate_total_ordering(tree: StateTree, graph: EdgeList, consistency: Small
             highs.add(high)
             lows.add(low)
         highest_priority = highs - lows
+        # pseudo-vertices filtered from it:
+        highest_priority_transitions = set(t for t in highest_priority if not isinstance(t, PseudoVertex))
         # 2. Check if the transitions in this set are allowed to have equal priority.
-        check_nondeterminism(tree, highest_priority, consistency) # may raise Exception
+        check_nondeterminism(tree, highest_priority_transitions, consistency) # may raise Exception
         # 3. All good. Add the transitions in the highest-priority set in any order to the total ordering
-        total_ordering.extend(highest_priority)
+        total_ordering.extend(highest_priority_transitions)
         # 4. Remove the transitions of the highest-priority set from the graph, and repeat.
         remaining_edges = [(high,low) for high, low in remaining_edges if high not in highest_priority]
-        remaining_transitions -= highest_priority
+        remaining_transitions -= highest_priority_transitions
 
     # Finally, there may be transitions that occur in the priority graph only as vertices, e.g. in flat statecharts:
     check_nondeterminism(tree, remaining_transitions, consistency)