summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Harlow <harlowja@yahoo-inc.com>2015-07-31 10:19:49 -0700
committerJoshua Harlow <harlowja@yahoo-inc.com>2015-10-11 01:11:29 +0000
commit8bc4d07a278099433ee12a15646512f60f42fe76 (patch)
tree3d99d89ac833ab0aa3f6b8a3be2534b5310ddff8
parentd54c76c7c8de78e8c009f4e2f27dd575876b1c5b (diff)
downloadtaskflow-8bc4d07a278099433ee12a15646512f60f42fe76.tar.gz
Use automaton's converters/pydot
This uses the automaton library's converters/pydot to generate the state machine diagram. It also regenerates the diagrams using this new code base. Depends-On: I968a15ebce839761d0a935ba6b22de64b3b7783c Change-Id: Ie59e093196d06c634378e4f4099f681b3c425aac
-rw-r--r--doc/source/img/engine_states.svg4
-rw-r--r--doc/source/img/wbe_request_states.svg4
-rwxr-xr-xtools/state_graph.py129
-rwxr-xr-xtools/update_states.sh2
4 files changed, 60 insertions, 79 deletions
diff --git a/doc/source/img/engine_states.svg b/doc/source/img/engine_states.svg
index 08a419d..9b874fc 100644
--- a/doc/source/img/engine_states.svg
+++ b/doc/source/img/engine_states.svg
@@ -3,6 +3,6 @@
<!-- Generated by graphviz version 2.36.0 (20140111.2315)
-->
<!-- Title: Engines states Pages: 1 -->
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="760pt" height="370pt" viewBox="0.00 0.00 759.60 370.00" preserveAspectRatio="xMidYMid meet" zoomAndPan="magnify" version="1.1" contentScriptType="application/ecmascript" contentStyleType="text/css"><defs><linearGradient id="white" x1="0%" y1="0%" x2="0%" y2="0%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/></linearGradient><linearGradient id="black" x1="0%" y1="0%" x2="0%" y2="0%"><stop offset="0%" style="stop-color:rgb(0,0,0);stop-opacity:1"/></linearGradient><linearGradient id="aquamarine" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(127,255,212);stop-opacity:1"/></linearGradient><linearGradient id="azure" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(240,255,255);stop-opacity:1"/></linearGradient><linearGradient id="blue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,0,255);stop-opacity:1"/></linearGradient><linearGradient id="blueviolet" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(138,43,226);stop-opacity:1"/></linearGradient><linearGradient id="brown" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(165,42,42);stop-opacity:1"/></linearGradient><linearGradient id="cadetblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(95,158,160);stop-opacity:1"/></linearGradient><linearGradient id="chocolate" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(210,105,30);stop-opacity:1"/></linearGradient><linearGradient id="cornflowerblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(100,149,237);stop-opacity:1"/></linearGradient><linearGradient id="crimson" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(220,20,60);stop-opacity:1"/></linearGradient><linearGradient id="cyan" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,255,255);stop-opacity:1"/></linearGradient><linearGradient id="darkgreen" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,100,0);stop-opacity:1"/></linearGradient><linearGradient id="darkorange" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,140,0);stop-opacity:1"/></linearGradient><linearGradient id="gold" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,215,0);stop-opacity:1"/></linearGradient><linearGradient id="gray" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(192,192,192);stop-opacity:1"/></linearGradient><linearGradient id="greenyellow" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(173,255,47);stop-opacity:1"/></linearGradient><linearGradient id="green" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,255,0);stop-opacity:1"/></linearGradient><linearGradient id="grey" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(192,192,192);stop-opacity:1"/></linearGradient><linearGradient id="hotpink" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,105,180);stop-opacity:1"/></linearGradient><linearGradient id="indianred" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(205,92,92);stop-opacity:1"/></linearGradient><linearGradient id="indigo" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(75,0,130);stop-opacity:1"/></linearGradient><linearGradient id="lavender" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(230,230,250);stop-opacity:1"/></linearGradient><linearGradient id="lightblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(173,216,230);stop-opacity:1"/></linearGradient><linearGradient id="lightgray" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(211,211,211);stop-opacity:1"/></linearGradient><linearGradient id="lightgrey" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(211,211,211);stop-opacity:1"/></linearGradient><linearGradient id="magenta" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,0,255);stop-opacity:1"/></linearGradient><linearGradient id="maroon" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(176,48,96);stop-opacity:1"/></linearGradient><linearGradient id="mediumblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,0,205);stop-opacity:1"/></linearGradient><linearGradient id="mediumpurple" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(147,112,219);stop-opacity:1"/></linearGradient><linearGradient id="orange" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,165,0);stop-opacity:1"/></linearGradient><linearGradient id="pink" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,192,203);stop-opacity:1"/></linearGradient><linearGradient id="purple" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(160,32,240);stop-opacity:1"/></linearGradient><linearGradient id="red" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,0,0);stop-opacity:1"/></linearGradient><linearGradient id="steelblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(70,130,180);stop-opacity:1"/></linearGradient><linearGradient id="violet" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(238,130,238);stop-opacity:1"/></linearGradient><linearGradient id="yellow" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,255,0);stop-opacity:1"/></linearGradient><linearGradient id="none" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,255,255);stop-opacity:1"/></linearGradient></defs>
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 366)"><polygon fill="white" stroke="none" points="-4,4 -4,-366 755.6,-366 755.6,4 -4,4"/><title>Engines states</title><g id="node1" class="node"><ellipse fill="none" stroke="black" cx="492.6" cy="-236" rx="49.8222" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="492.6" cy="-236" rx="49.8222" ry="18" style="fill: url(#none);stroke: black;"/><text text-anchor="middle" x="492.6" y="-233.2" font-family="Times,serif" font-size="11.00" fill="blue" style="font-size:10px; font-family:sans-serif;">GAME_OVER</text></g><g id="node2" class="node"><ellipse fill="none" stroke="black" cx="703.6" cy="-344" rx="42.8909" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="703.6" cy="-344" rx="42.8909" ry="18" style="fill: url(#none);stroke: black;"/><text text-anchor="middle" x="703.6" y="-341.2" font-family="Times,serif" font-size="11.00" fill="darkorange" style="font-size:10px; font-family:sans-serif;">REVERTED</text></g><g id="edge1" class="edge"><polygon fill="black" stroke="black" points="656.958,-334.642 667.547,-334.275 659.04,-327.959 656.958,-334.642" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M511.448,-252.933C524.946,-265.052 544.382,-281.089 563.6,-292 593.464,-308.955 629.91,-322.351 657.989,-331.297" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="656.958,-334.642 667.547,-334.275 659.04,-327.959 656.958,-334.642" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M511.448,-252.933C524.946,-265.052 544.382,-281.089 563.6,-292 593.464,-308.955 629.91,-322.351 657.989,-331.297"/><text text-anchor="middle" x="600.6" y="-327.8" font-family="Times,serif" font-size="14.00" fill="darkorange" style="font-size:10px; font-family:sans-serif;">reverted</text></g><g id="node3" class="node"><ellipse fill="none" stroke="black" cx="703.6" cy="-290" rx="38.4712" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="703.6" cy="-290" rx="38.4712" ry="18" style="fill: url(#none);stroke: black;"/><text text-anchor="middle" x="703.6" y="-287.2" font-family="Times,serif" font-size="11.00" fill="green" style="font-size:10px; font-family:sans-serif;">SUCCESS</text></g><g id="edge2" class="edge"><polygon fill="black" stroke="black" points="658.585,-282.743 669.134,-281.756 660.272,-275.949 658.585,-282.743" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M532.81,-246.779C542.838,-249.498 553.61,-252.387 563.6,-255 595.515,-263.349 631.649,-272.436 659.076,-279.259" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="658.585,-282.743 669.134,-281.756 660.272,-275.949 658.585,-282.743" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M532.81,-246.779C542.838,-249.498 553.61,-252.387 563.6,-255 595.515,-263.349 631.649,-272.436 659.076,-279.259"/><text text-anchor="middle" x="600.6" y="-276.8" font-family="Times,serif" font-size="14.00" fill="green" style="font-size:10px; font-family:sans-serif;">success</text></g><g id="node4" class="node"><ellipse fill="none" stroke="black" cx="703.6" cy="-236" rx="48.2143" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="703.6" cy="-236" rx="48.2143" ry="18" style="fill: url(#none);stroke: black;"/><text text-anchor="middle" x="703.6" y="-233.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:sans-serif;">SUSPENDED</text></g><g id="edge3" class="edge"><polygon fill="black" stroke="black" points="645.344,-239.5 655.344,-236 645.344,-232.5 645.344,-239.5" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M542.601,-236C573.303,-236 613.007,-236 645.183,-236" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="645.344,-239.5 655.344,-236 645.344,-232.5 645.344,-239.5" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M542.601,-236C573.303,-236 613.007,-236 645.183,-236"/><text text-anchor="middle" x="600.6" y="-239.8" font-family="Times,serif" font-size="14.00" style="font-size:10px; font-family:sans-serif;">suspended</text></g><g id="node5" class="node"><ellipse fill="none" stroke="black" cx="703.6" cy="-182" rx="37.0671" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="703.6" cy="-182" rx="37.0671" ry="18" style="fill: url(#none);stroke: black;"/><text text-anchor="middle" x="703.6" y="-179.2" font-family="Times,serif" font-size="11.00" fill="red" style="font-size:10px; font-family:sans-serif;">FAILURE</text></g><g id="edge4" class="edge"><polygon fill="black" stroke="black" points="661.116,-195.841 669.978,-190.035 659.429,-189.047 661.116,-195.841" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M532.81,-225.221C542.838,-222.502 553.61,-219.613 563.6,-217 595.977,-208.53 632.697,-199.301 660.262,-192.446" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="661.116,-195.841 669.978,-190.035 659.429,-189.047 661.116,-195.841" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M532.81,-225.221C542.838,-222.502 553.61,-219.613 563.6,-217 595.977,-208.53 632.697,-199.301 660.262,-192.446"/><text text-anchor="middle" x="600.6" y="-220.8" font-family="Times,serif" font-size="14.00" fill="red" style="font-size:10px; font-family:sans-serif;">failed</text></g><g id="node6" class="node"><ellipse fill="none" stroke="black" cx="113.6" cy="-18" rx="48.2143" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="113.6" cy="-18" rx="48.2143" ry="18" style="fill: url(#none);stroke: black;"/><text text-anchor="middle" x="113.6" y="-15.2" font-family="Times,serif" font-size="11.00" fill="blue" style="font-size:10px; font-family:sans-serif;">UNDEFINED</text></g><g id="node7" class="node"><ellipse fill="none" stroke="black" cx="272.6" cy="-18" rx="44.498" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="272.6" cy="-18" rx="44.498" ry="18" style="fill: url(#none);stroke: black;"/><text text-anchor="middle" x="272.6" y="-15.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:sans-serif;">RESUMING</text></g><g id="edge5" class="edge"><polygon fill="black" stroke="black" points="217.978,-21.5001 227.978,-18 217.978,-14.5001 217.978,-21.5001" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M162.131,-18C179.716,-18 199.771,-18 217.868,-18" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="217.978,-21.5001 227.978,-18 217.978,-14.5001 217.978,-21.5001" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M162.131,-18C179.716,-18 199.771,-18 217.868,-18"/><text text-anchor="middle" x="191.6" y="-21.8" font-family="Times,serif" font-size="14.00" style="font-size:10px; font-family:sans-serif;">start</text></g><g id="node9" class="node"><ellipse fill="none" stroke="black" cx="492.6" cy="-99" rx="52.8356" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="492.6" cy="-99" rx="52.8356" ry="18" style="fill: url(#none);stroke: black;"/><text text-anchor="middle" x="492.6" y="-96.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:sans-serif;">SCHEDULING</text></g><g id="edge9" class="edge"><polygon fill="black" stroke="black" points="445.611,-85.6462 456.204,-85.8484 448.049,-79.0845 445.611,-85.6462" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M306.237,-30.1265C343.593,-44.0066 404.997,-66.8218 446.81,-82.358" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="445.611,-85.6462 456.204,-85.8484 448.049,-79.0845 445.611,-85.6462" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M306.237,-30.1265C343.593,-44.0066 404.997,-66.8218 446.81,-82.358"/><text text-anchor="middle" x="381.6" y="-75.8" font-family="Times,serif" font-size="14.00" style="font-size:10px; font-family:sans-serif;">schedule next</text></g><g id="node8" class="node"><ellipse fill="none" stroke="black" cx="272.6" cy="-169" rx="50.5248" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="272.6" cy="-169" rx="50.5248" ry="18" style="fill: url(#none);stroke: black;"/><text text-anchor="middle" x="272.6" y="-166.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:sans-serif;">ANALYZING</text></g><g id="edge6" class="edge"><polygon fill="black" stroke="black" points="434.948,-231.735 445.386,-229.915 436.092,-224.829 434.948,-231.735" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M298.647,-184.453C311.162,-191.599 326.768,-199.664 341.6,-205 371.685,-215.824 406.598,-223.318 435.168,-228.224" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="434.948,-231.735 445.386,-229.915 436.092,-224.829 434.948,-231.735" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M298.647,-184.453C311.162,-191.599 326.768,-199.664 341.6,-205 371.685,-215.824 406.598,-223.318 435.168,-228.224"/><text text-anchor="middle" x="381.6" y="-228.8" font-family="Times,serif" font-size="14.00" style="font-size:10px; font-family:sans-serif;">completed</text></g><g id="edge7" class="edge"><polygon fill="black" stroke="black" points="444.886,-117.676 453.337,-111.286 442.746,-111.011 444.886,-117.676" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M310.581,-157.125C347.278,-145.342 403.689,-127.228 443.774,-114.357" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="444.886,-117.676 453.337,-111.286 442.746,-111.011 444.886,-117.676" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M310.581,-157.125C347.278,-145.342 403.689,-127.228 443.774,-114.357"/><text text-anchor="middle" x="381.6" y="-149.8" font-family="Times,serif" font-size="14.00" style="font-size:10px; font-family:sans-serif;">schedule next</text></g><g id="node10" class="node"><ellipse fill="none" stroke="black" cx="703.6" cy="-99" rx="39.8775" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="703.6" cy="-99" rx="39.8775" ry="18" style="fill: url(#none);stroke: black;"/><text text-anchor="middle" x="703.6" y="-96.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:sans-serif;">WAITING</text></g><g id="edge8" class="edge"><polygon fill="black" stroke="black" points="662.133,-115.448 670.767,-109.306 660.188,-108.723 662.133,-115.448" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M321.688,-164.51C391.715,-157.464 525.617,-142.078 637.6,-118 645.278,-116.349 653.374,-114.266 661.148,-112.089" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="662.133,-115.448 670.767,-109.306 660.188,-108.723 662.133,-115.448" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M321.688,-164.51C391.715,-157.464 525.617,-142.078 637.6,-118 645.278,-116.349 653.374,-114.266 661.148,-112.089"/><text text-anchor="middle" x="492.6" y="-153.8" font-family="Times,serif" font-size="14.00" style="font-size:10px; font-family:sans-serif;">wait finished</text></g><g id="edge10" class="edge"><polygon fill="black" stroke="black" points="653.762,-102.5 663.762,-99 653.762,-95.5001 653.762,-102.5" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M545.531,-99C578.585,-99 621.127,-99 653.598,-99" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="653.762,-102.5 663.762,-99 653.762,-95.5001 653.762,-102.5" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M545.531,-99C578.585,-99 621.127,-99 653.598,-99"/><text text-anchor="middle" x="600.6" y="-102.8" font-family="Times,serif" font-size="14.00" style="font-size:10px; font-family:sans-serif;">wait finished</text></g><g id="edge11" class="edge"><polygon fill="black" stroke="black" points="296.094,-142.506 291.09,-151.844 300.825,-147.664 296.094,-142.506" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M674.773,-86.4639C626.147,-66.3304 522.949,-31.5117 439.6,-57 383.446,-74.1721 329.128,-117.44 298.668,-144.893" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="296.094,-142.506 291.09,-151.844 300.825,-147.664 296.094,-142.506" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M674.773,-86.4639C626.147,-66.3304 522.949,-31.5117 439.6,-57 383.446,-74.1721 329.128,-117.44 298.668,-144.893"/><text text-anchor="middle" x="492.6" y="-60.8" font-family="Times,serif" font-size="14.00" style="font-size:10px; font-family:sans-serif;">examine finished</text></g><g id="node11" class="node"><ellipse fill="black" stroke="black" cx="23.6" cy="-18" rx="3.6" ry="3.6" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="black" stroke="black" cx="23.6" cy="-18" rx="3.6" ry="3.6" style="fill: url(#black);stroke: black;"/><text text-anchor="middle" x="10" y="-5.6" font-family="Times,serif" font-size="11.00" fill="green" style="font-size:10px; font-family:sans-serif;">start</text></g><g id="edge12" class="edge"><polygon fill="black" stroke="black" points="55.2594,-21.5001 65.2594,-18 55.2593,-14.5001 55.2594,-21.5001" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" stroke-dasharray="1,5" d="M27.5279,-18C32.4207,-18 42.913,-18 54.9137,-18" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="55.2594,-21.5001 65.2594,-18 55.2593,-14.5001 55.2594,-21.5001" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" stroke-dasharray="1,5" d="M27.5279,-18C32.4207,-18 42.913,-18 54.9137,-18"/></g></g>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="758pt" height="370pt" viewBox="0.00 0.00 757.60 370.00" preserveAspectRatio="xMidYMid meet" zoomAndPan="magnify" version="1.1" contentScriptType="application/ecmascript" contentStyleType="text/css"><defs><linearGradient id="white" x1="0%" y1="0%" x2="0%" y2="0%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/></linearGradient><linearGradient id="black" x1="0%" y1="0%" x2="0%" y2="0%"><stop offset="0%" style="stop-color:rgb(0,0,0);stop-opacity:1"/></linearGradient><linearGradient id="aquamarine" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(127,255,212);stop-opacity:1"/></linearGradient><linearGradient id="azure" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(240,255,255);stop-opacity:1"/></linearGradient><linearGradient id="blue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,0,255);stop-opacity:1"/></linearGradient><linearGradient id="blueviolet" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(138,43,226);stop-opacity:1"/></linearGradient><linearGradient id="brown" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(165,42,42);stop-opacity:1"/></linearGradient><linearGradient id="cadetblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(95,158,160);stop-opacity:1"/></linearGradient><linearGradient id="chocolate" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(210,105,30);stop-opacity:1"/></linearGradient><linearGradient id="cornflowerblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(100,149,237);stop-opacity:1"/></linearGradient><linearGradient id="crimson" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(220,20,60);stop-opacity:1"/></linearGradient><linearGradient id="cyan" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,255,255);stop-opacity:1"/></linearGradient><linearGradient id="darkgreen" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,100,0);stop-opacity:1"/></linearGradient><linearGradient id="darkorange" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,140,0);stop-opacity:1"/></linearGradient><linearGradient id="gold" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,215,0);stop-opacity:1"/></linearGradient><linearGradient id="gray" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(192,192,192);stop-opacity:1"/></linearGradient><linearGradient id="greenyellow" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(173,255,47);stop-opacity:1"/></linearGradient><linearGradient id="green" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,255,0);stop-opacity:1"/></linearGradient><linearGradient id="grey" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(192,192,192);stop-opacity:1"/></linearGradient><linearGradient id="hotpink" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,105,180);stop-opacity:1"/></linearGradient><linearGradient id="indianred" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(205,92,92);stop-opacity:1"/></linearGradient><linearGradient id="indigo" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(75,0,130);stop-opacity:1"/></linearGradient><linearGradient id="lavender" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(230,230,250);stop-opacity:1"/></linearGradient><linearGradient id="lightblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(173,216,230);stop-opacity:1"/></linearGradient><linearGradient id="lightgray" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(211,211,211);stop-opacity:1"/></linearGradient><linearGradient id="lightgrey" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(211,211,211);stop-opacity:1"/></linearGradient><linearGradient id="magenta" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,0,255);stop-opacity:1"/></linearGradient><linearGradient id="maroon" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(176,48,96);stop-opacity:1"/></linearGradient><linearGradient id="mediumblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,0,205);stop-opacity:1"/></linearGradient><linearGradient id="mediumpurple" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(147,112,219);stop-opacity:1"/></linearGradient><linearGradient id="orange" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,165,0);stop-opacity:1"/></linearGradient><linearGradient id="pink" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,192,203);stop-opacity:1"/></linearGradient><linearGradient id="purple" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(160,32,240);stop-opacity:1"/></linearGradient><linearGradient id="red" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,0,0);stop-opacity:1"/></linearGradient><linearGradient id="steelblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(70,130,180);stop-opacity:1"/></linearGradient><linearGradient id="violet" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(238,130,238);stop-opacity:1"/></linearGradient><linearGradient id="yellow" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,255,0);stop-opacity:1"/></linearGradient><linearGradient id="none" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,255,255);stop-opacity:1"/></linearGradient></defs>
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 366)"><polygon fill="white" stroke="none" points="-4,4 -4,-366 753.6,-366 753.6,4 -4,4"/><title>Engines states</title><g id="node1" class="node"><ellipse fill="none" stroke="black" cx="489.6" cy="-236" rx="51.931" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="489.6" cy="-236" rx="51.931" ry="18" style="fill: url(#none);stroke: black;"/><text text-anchor="middle" x="489.6" y="-233.2" font-family="Times,serif" font-size="11.00" fill="blue" style="font-size:10px; font-family:sans-serif;">GAME_OVER</text></g><g id="node2" class="node"><ellipse fill="none" stroke="black" cx="700.6" cy="-344" rx="45.2009" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="700.6" cy="-344" rx="45.2009" ry="18" style="fill: url(#none);stroke: black;"/><text text-anchor="middle" x="700.6" y="-341.2" font-family="Times,serif" font-size="11.00" fill="darkorange" style="font-size:10px; font-family:sans-serif;">REVERTED</text></g><g id="edge1" class="edge"><polygon fill="black" stroke="black" points="652.79,-334.024 663.381,-333.721 654.913,-327.353 652.79,-334.024" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M508.751,-252.903C522.467,-265.007 542.189,-281.038 561.6,-292 590.688,-308.427 625.973,-321.617 653.582,-330.603" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="652.79,-334.024 663.381,-333.721 654.913,-327.353 652.79,-334.024" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M508.751,-252.903C522.467,-265.007 542.189,-281.038 561.6,-292 590.688,-308.427 625.973,-321.617 653.582,-330.603"/><text text-anchor="middle" x="597.6" y="-325.8" font-family="Times,serif" font-size="14.00" fill="darkorange" style="font-size:10px; font-family:sans-serif;">reverted</text></g><g id="node3" class="node"><ellipse fill="none" stroke="black" cx="700.6" cy="-290" rx="39.1741" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="700.6" cy="-290" rx="39.1741" ry="18" style="fill: url(#none);stroke: black;"/><text text-anchor="middle" x="700.6" y="-287.2" font-family="Times,serif" font-size="11.00" fill="green" style="font-size:10px; font-family:sans-serif;">SUCCESS</text></g><g id="edge2" class="edge"><polygon fill="black" stroke="black" points="655.272,-282.523 665.824,-281.565 656.978,-275.734 655.272,-282.523" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M531.126,-246.943C541.084,-249.605 551.722,-252.426 561.6,-255 593.095,-263.208 628.701,-272.232 655.856,-279.061" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="655.272,-282.523 665.824,-281.565 656.978,-275.734 655.272,-282.523" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M531.126,-246.943C541.084,-249.605 551.722,-252.426 561.6,-255 593.095,-263.208 628.701,-272.232 655.856,-279.061"/><text text-anchor="middle" x="597.6" y="-276.8" font-family="Times,serif" font-size="14.00" fill="green" style="font-size:10px; font-family:sans-serif;">success</text></g><g id="node4" class="node"><ellipse fill="none" stroke="black" cx="700.6" cy="-236" rx="48.9176" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="700.6" cy="-236" rx="48.9176" ry="18" style="fill: url(#none);stroke: black;"/><text text-anchor="middle" x="700.6" y="-233.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:sans-serif;">SUSPENDED</text></g><g id="edge3" class="edge"><polygon fill="black" stroke="black" points="641.746,-239.5 651.746,-236 641.746,-232.5 641.746,-239.5" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M541.46,-236C571.639,-236 610.007,-236 641.392,-236" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="641.746,-239.5 651.746,-236 641.746,-232.5 641.746,-239.5" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M541.46,-236C571.639,-236 610.007,-236 641.392,-236"/><text text-anchor="middle" x="597.6" y="-239.8" font-family="Times,serif" font-size="14.00" style="font-size:10px; font-family:sans-serif;">suspended</text></g><g id="node5" class="node"><ellipse fill="none" stroke="black" cx="700.6" cy="-182" rx="38.4712" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="700.6" cy="-182" rx="38.4712" ry="18" style="fill: url(#none);stroke: black;"/><text text-anchor="middle" x="700.6" y="-179.2" font-family="Times,serif" font-size="11.00" fill="red" style="font-size:10px; font-family:sans-serif;">FAILURE</text></g><g id="edge4" class="edge"><polygon fill="black" stroke="black" points="657.541,-196.125 666.387,-190.294 655.835,-189.335 657.541,-196.125" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M531.126,-225.057C541.084,-222.395 551.722,-219.574 561.6,-217 593.307,-208.737 629.181,-199.647 656.404,-192.801" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="657.541,-196.125 666.387,-190.294 655.835,-189.335 657.541,-196.125" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M531.126,-225.057C541.084,-222.395 551.722,-219.574 561.6,-217 593.307,-208.737 629.181,-199.647 656.404,-192.801"/><text text-anchor="middle" x="597.6" y="-220.8" font-family="Times,serif" font-size="14.00" fill="red" style="font-size:10px; font-family:sans-serif;">failed</text></g><g id="node6" class="node"><ellipse fill="none" stroke="black" cx="114.6" cy="-18" rx="48.9176" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="114.6" cy="-18" rx="48.9176" ry="18" style="fill: url(#none);stroke: black;"/><text text-anchor="middle" x="114.6" y="-15.2" font-family="Times,serif" font-size="11.00" fill="blue" style="font-size:10px; font-family:sans-serif;">UNDEFINED</text></g><g id="node7" class="node"><ellipse fill="none" stroke="black" cx="273.6" cy="-18" rx="45.2009" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="273.6" cy="-18" rx="45.2009" ry="18" style="fill: url(#none);stroke: black;"/><text text-anchor="middle" x="273.6" y="-15.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:sans-serif;">RESUMING</text></g><g id="edge5" class="edge"><polygon fill="black" stroke="black" points="218.413,-21.5001 228.413,-18 218.413,-14.5001 218.413,-21.5001" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M163.558,-18C180.821,-18 200.418,-18 218.191,-18" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="218.413,-21.5001 228.413,-18 218.413,-14.5001 218.413,-21.5001" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M163.558,-18C180.821,-18 200.418,-18 218.191,-18"/><text text-anchor="middle" x="193.6" y="-21.8" font-family="Times,serif" font-size="14.00" style="font-size:10px; font-family:sans-serif;">start</text></g><g id="node9" class="node"><ellipse fill="none" stroke="black" cx="489.6" cy="-99" rx="53.5381" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="489.6" cy="-99" rx="53.5381" ry="18" style="fill: url(#none);stroke: black;"/><text text-anchor="middle" x="489.6" y="-96.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:sans-serif;">SCHEDULING</text></g><g id="edge9" class="edge"><polygon fill="black" stroke="black" points="442.703,-85.3699 453.294,-85.6366 445.181,-78.8232 442.703,-85.3699" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M307.102,-30.3022C343.581,-44.1098 402.995,-66.5982 443.848,-82.0612" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="442.703,-85.3699 453.294,-85.6366 445.181,-78.8232 442.703,-85.3699" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M307.102,-30.3022C343.581,-44.1098 402.995,-66.5982 443.848,-82.0612"/><text text-anchor="middle" x="379.6" y="-73.8" font-family="Times,serif" font-size="14.00" style="font-size:10px; font-family:sans-serif;">schedule next</text></g><g id="node8" class="node"><ellipse fill="none" stroke="black" cx="273.6" cy="-169" rx="49.8222" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="273.6" cy="-169" rx="49.8222" ry="18" style="fill: url(#none);stroke: black;"/><text text-anchor="middle" x="273.6" y="-166.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:sans-serif;">ANALYZING</text></g><g id="edge6" class="edge"><polygon fill="black" stroke="black" points="430.856,-231.302 441.304,-229.546 432.041,-224.403 430.856,-231.302" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M299.26,-184.442C311.587,-191.584 326.965,-199.651 341.6,-205 370.399,-215.527 403.748,-222.923 431.395,-227.844" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="430.856,-231.302 441.304,-229.546 432.041,-224.403 430.856,-231.302" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M299.26,-184.442C311.587,-191.584 326.965,-199.651 341.6,-205 370.399,-215.527 403.748,-222.923 431.395,-227.844"/><text text-anchor="middle" x="379.6" y="-228.8" font-family="Times,serif" font-size="14.00" style="font-size:10px; font-family:sans-serif;">completed</text></g><g id="edge7" class="edge"><polygon fill="black" stroke="black" points="442.076,-117.901 450.492,-111.465 439.9,-111.248 442.076,-117.901" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M311.388,-156.967C347.192,-145.255 401.776,-127.4 440.9,-114.603" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="442.076,-117.901 450.492,-111.465 439.9,-111.248 442.076,-117.901" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M311.388,-156.967C347.192,-145.255 401.776,-127.4 440.9,-114.603"/><text text-anchor="middle" x="379.6" y="-149.8" font-family="Times,serif" font-size="14.00" style="font-size:10px; font-family:sans-serif;">schedule next</text></g><g id="node10" class="node"><ellipse fill="none" stroke="black" cx="700.6" cy="-99" rx="39.8775" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="700.6" cy="-99" rx="39.8775" ry="18" style="fill: url(#none);stroke: black;"/><text text-anchor="middle" x="700.6" y="-96.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:sans-serif;">WAITING</text></g><g id="edge8" class="edge"><polygon fill="black" stroke="black" points="658.945,-115.294 667.6,-109.183 657.024,-108.563 658.945,-115.294" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M322.012,-164.391C391.06,-157.199 523.1,-141.634 633.6,-118 641.47,-116.317 649.779,-114.2 657.747,-111.996" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="658.945,-115.294 667.6,-109.183 657.024,-108.563 658.945,-115.294" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M322.012,-164.391C391.06,-157.199 523.1,-141.634 633.6,-118 641.47,-116.317 649.779,-114.2 657.747,-111.996"/><text text-anchor="middle" x="489.6" y="-153.8" font-family="Times,serif" font-size="14.00" style="font-size:10px; font-family:sans-serif;">wait finished</text></g><g id="edge10" class="edge"><polygon fill="black" stroke="black" points="650.733,-102.5 660.733,-99 650.733,-95.5001 650.733,-102.5" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M543.34,-99C576.293,-99 618.434,-99 650.647,-99" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="650.733,-102.5 660.733,-99 650.733,-95.5001 650.733,-102.5" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M543.34,-99C576.293,-99 618.434,-99 650.647,-99"/><text text-anchor="middle" x="597.6" y="-102.8" font-family="Times,serif" font-size="14.00" style="font-size:10px; font-family:sans-serif;">wait finished</text></g><g id="edge11" class="edge"><polygon fill="black" stroke="black" points="296.296,-142.429 291.456,-151.854 301.117,-147.504 296.296,-142.429" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M672.014,-86.4816C623.305,-66.1533 519.295,-30.7519 435.6,-57 380.724,-74.2101 328.174,-117.466 298.77,-144.907" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="296.296,-142.429 291.456,-151.854 301.117,-147.504 296.296,-142.429" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M672.014,-86.4816C623.305,-66.1533 519.295,-30.7519 435.6,-57 380.724,-74.2101 328.174,-117.466 298.77,-144.907"/><text text-anchor="middle" x="489.6" y="-60.8" font-family="Times,serif" font-size="14.00" style="font-size:10px; font-family:sans-serif;">examine finished</text></g><g id="node11" class="node"><ellipse fill="black" stroke="black" cx="23.6" cy="-18" rx="3.6" ry="3.6" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="black" stroke="black" cx="23.6" cy="-18" rx="3.6" ry="3.6" style="fill: url(#black);stroke: black;"/><text text-anchor="middle" x="10" y="-5.6" font-family="Times,serif" font-size="11.00" fill="green" style="font-size:10px; font-family:sans-serif;">start</text></g><g id="edge12" class="edge"><polygon fill="black" stroke="black" points="55.7214,-21.5001 65.7214,-18 55.7214,-14.5001 55.7214,-21.5001" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" stroke-dasharray="1,5" d="M27.5612,-18C32.5591,-18 43.3339,-18 55.6228,-18" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="55.7214,-21.5001 65.7214,-18 55.7214,-14.5001 55.7214,-21.5001" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" stroke-dasharray="1,5" d="M27.5612,-18C32.5591,-18 43.3339,-18 55.6228,-18"/></g></g>
</svg>
diff --git a/doc/source/img/wbe_request_states.svg b/doc/source/img/wbe_request_states.svg
index da2c9d3..5842cfc 100644
--- a/doc/source/img/wbe_request_states.svg
+++ b/doc/source/img/wbe_request_states.svg
@@ -3,6 +3,6 @@
<!-- Generated by graphviz version 2.36.0 (20140111.2315)
-->
<!-- Title: WBE requests states Pages: 1 -->
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="498pt" height="109pt" viewBox="0.00 0.00 497.60 109.00" preserveAspectRatio="xMidYMid meet" zoomAndPan="magnify" version="1.1" contentScriptType="application/ecmascript" contentStyleType="text/css"><defs><linearGradient id="white" x1="0%" y1="0%" x2="0%" y2="0%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/></linearGradient><linearGradient id="black" x1="0%" y1="0%" x2="0%" y2="0%"><stop offset="0%" style="stop-color:rgb(0,0,0);stop-opacity:1"/></linearGradient><linearGradient id="aquamarine" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(127,255,212);stop-opacity:1"/></linearGradient><linearGradient id="azure" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(240,255,255);stop-opacity:1"/></linearGradient><linearGradient id="blue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,0,255);stop-opacity:1"/></linearGradient><linearGradient id="blueviolet" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(138,43,226);stop-opacity:1"/></linearGradient><linearGradient id="brown" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(165,42,42);stop-opacity:1"/></linearGradient><linearGradient id="cadetblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(95,158,160);stop-opacity:1"/></linearGradient><linearGradient id="chocolate" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(210,105,30);stop-opacity:1"/></linearGradient><linearGradient id="cornflowerblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(100,149,237);stop-opacity:1"/></linearGradient><linearGradient id="crimson" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(220,20,60);stop-opacity:1"/></linearGradient><linearGradient id="cyan" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,255,255);stop-opacity:1"/></linearGradient><linearGradient id="darkgreen" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,100,0);stop-opacity:1"/></linearGradient><linearGradient id="darkorange" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,140,0);stop-opacity:1"/></linearGradient><linearGradient id="gold" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,215,0);stop-opacity:1"/></linearGradient><linearGradient id="gray" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(192,192,192);stop-opacity:1"/></linearGradient><linearGradient id="greenyellow" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(173,255,47);stop-opacity:1"/></linearGradient><linearGradient id="green" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,255,0);stop-opacity:1"/></linearGradient><linearGradient id="grey" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(192,192,192);stop-opacity:1"/></linearGradient><linearGradient id="hotpink" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,105,180);stop-opacity:1"/></linearGradient><linearGradient id="indianred" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(205,92,92);stop-opacity:1"/></linearGradient><linearGradient id="indigo" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(75,0,130);stop-opacity:1"/></linearGradient><linearGradient id="lavender" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(230,230,250);stop-opacity:1"/></linearGradient><linearGradient id="lightblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(173,216,230);stop-opacity:1"/></linearGradient><linearGradient id="lightgray" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(211,211,211);stop-opacity:1"/></linearGradient><linearGradient id="lightgrey" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(211,211,211);stop-opacity:1"/></linearGradient><linearGradient id="magenta" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,0,255);stop-opacity:1"/></linearGradient><linearGradient id="maroon" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(176,48,96);stop-opacity:1"/></linearGradient><linearGradient id="mediumblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,0,205);stop-opacity:1"/></linearGradient><linearGradient id="mediumpurple" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(147,112,219);stop-opacity:1"/></linearGradient><linearGradient id="orange" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,165,0);stop-opacity:1"/></linearGradient><linearGradient id="pink" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,192,203);stop-opacity:1"/></linearGradient><linearGradient id="purple" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(160,32,240);stop-opacity:1"/></linearGradient><linearGradient id="red" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,0,0);stop-opacity:1"/></linearGradient><linearGradient id="steelblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(70,130,180);stop-opacity:1"/></linearGradient><linearGradient id="violet" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(238,130,238);stop-opacity:1"/></linearGradient><linearGradient id="yellow" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,255,0);stop-opacity:1"/></linearGradient><linearGradient id="none" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,255,255);stop-opacity:1"/></linearGradient></defs>
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 105)"><polygon fill="white" stroke="none" points="-4,4 -4,-105 493.6,-105 493.6,4 -4,4"/><title>WBE requests states</title><g id="node1" class="node"><ellipse fill="none" stroke="black" cx="103.6" cy="-83" rx="39.8775" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="103.6" cy="-83" rx="39.8775" ry="18" style="fill: url(#none);stroke: black;"/><text text-anchor="middle" x="103.6" y="-80.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:sans-serif;">WAITING</text></g><g id="node2" class="node"><ellipse fill="none" stroke="black" cx="218.6" cy="-60" rx="39.1741" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="218.6" cy="-60" rx="39.1741" ry="18" style="fill: url(#none);stroke: black;"/><text text-anchor="middle" x="218.6" y="-57.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:sans-serif;">PENDING</text></g><g id="edge1" class="edge"><polygon fill="black" stroke="black" points="173.568,-72.534 182.669,-67.1098 172.172,-65.6747 173.568,-72.534" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M140.044,-75.7858C150.344,-73.6892 161.734,-71.3709 172.541,-69.1713" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="173.568,-72.534 182.669,-67.1098 172.172,-65.6747 173.568,-72.534" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M140.044,-75.7858C150.344,-73.6892 161.734,-71.3709 172.541,-69.1713"/></g><g id="node3" class="node"><ellipse fill="none" stroke="black" cx="450.6" cy="-72" rx="37.0671" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="450.6" cy="-72" rx="37.0671" ry="18" style="fill: url(#none);stroke: black;"/><text text-anchor="middle" x="450.6" y="-69.2" font-family="Times,serif" font-size="11.00" fill="red" style="font-size:10px; font-family:sans-serif;">FAILURE</text></g><g id="edge2" class="edge"><polygon fill="black" stroke="black" points="404.685,-80.7273 414.251,-76.1739 403.934,-73.7678 404.685,-80.7273" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M143.124,-85.4491C154.833,-86.0871 167.738,-86.6839 179.6,-87 266.736,-89.322 288.737,-87.2675 375.6,-80 384.867,-79.2246 394.773,-78.253 404.225,-77.2566" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="404.685,-80.7273 414.251,-76.1739 403.934,-73.7678 404.685,-80.7273" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M143.124,-85.4491C154.833,-86.0871 167.738,-86.6839 179.6,-87 266.736,-89.322 288.737,-87.2675 375.6,-80 384.867,-79.2246 394.773,-78.253 404.225,-77.2566"/></g><g id="edge4" class="edge"><polygon fill="black" stroke="black" points="403.292,-73.0886 413.461,-70.1145 403.657,-66.0981 403.292,-73.0886" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M257.58,-61.9816C297.538,-64.0664 360.457,-67.3491 403.298,-69.5842" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="403.292,-73.0886 413.461,-70.1145 403.657,-66.0981 403.292,-73.0886" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M257.58,-61.9816C297.538,-64.0664 360.457,-67.3491 403.298,-69.5842"/></g><g id="node4" class="node"><ellipse fill="none" stroke="black" cx="334.6" cy="-22" rx="40.7822" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="334.6" cy="-22" rx="40.7822" ry="18" style="fill: url(#none);stroke: black;"/><text text-anchor="middle" x="334.6" y="-19.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:sans-serif;">RUNNING</text></g><g id="edge3" class="edge"><polygon fill="black" stroke="black" points="292.914,-39.2513 301.294,-32.7686 290.701,-32.6106 292.914,-39.2513" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M250.751,-49.6163C263.377,-45.4078 278.149,-40.4837 291.695,-35.9683" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="292.914,-39.2513 301.294,-32.7686 290.701,-32.6106 292.914,-39.2513" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M250.751,-49.6163C263.377,-45.4078 278.149,-40.4837 291.695,-35.9683"/></g><g id="edge5" class="edge"><polygon fill="black" stroke="black" points="411.711,-59.2039 422.275,-60.0153 414.523,-52.7934 411.711,-59.2039" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M364.073,-34.4881C378.819,-40.9556 396.996,-48.9283 412.796,-55.8581" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="411.711,-59.2039 422.275,-60.0153 414.523,-52.7934 411.711,-59.2039" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M364.073,-34.4881C378.819,-40.9556 396.996,-48.9283 412.796,-55.8581"/></g><g id="node5" class="node"><ellipse fill="none" stroke="black" cx="450.6" cy="-18" rx="38.4712" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="450.6" cy="-18" rx="38.4712" ry="18" style="fill: url(#none);stroke: black;"/><text text-anchor="middle" x="450.6" y="-15.2" font-family="Times,serif" font-size="11.00" fill="green" style="font-size:10px; font-family:sans-serif;">SUCCESS</text></g><g id="edge6" class="edge"><polygon fill="black" stroke="black" points="401.986,-23.1729 411.857,-19.3243 401.741,-16.1772 401.986,-23.1729" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M375.472,-20.601C383.963,-20.303 393.014,-19.9855 401.768,-19.6783" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="401.986,-23.1729 411.857,-19.3243 401.741,-16.1772 401.986,-23.1729" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M375.472,-20.601C383.963,-20.303 393.014,-19.9855 401.768,-19.6783"/></g><g id="node6" class="node"><ellipse fill="black" stroke="black" cx="23.6" cy="-83" rx="3.6" ry="3.6" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="black" stroke="black" cx="23.6" cy="-83" rx="3.6" ry="3.6" style="fill: url(#black);stroke: black;"/><text text-anchor="middle" x="10" y="-70.6" font-family="Times,serif" font-size="11.00" fill="green" style="font-size:10px; font-family:sans-serif;">start</text></g><g id="edge7" class="edge"><polygon fill="black" stroke="black" points="53.5965,-86.5001 63.5964,-83 53.5964,-79.5001 53.5965,-86.5001" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" stroke-dasharray="1,5" d="M27.5624,-83C32.3405,-83 42.3529,-83 53.5516,-83" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="53.5965,-86.5001 63.5964,-83 53.5964,-79.5001 53.5965,-86.5001" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" stroke-dasharray="1,5" d="M27.5624,-83C32.3405,-83 42.3529,-83 53.5516,-83"/></g></g>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" width="502pt" height="109pt" viewBox="0.00 0.00 501.60 109.00" preserveAspectRatio="xMidYMid meet" zoomAndPan="magnify" version="1.1" contentScriptType="application/ecmascript" contentStyleType="text/css"><defs><linearGradient id="white" x1="0%" y1="0%" x2="0%" y2="0%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/></linearGradient><linearGradient id="black" x1="0%" y1="0%" x2="0%" y2="0%"><stop offset="0%" style="stop-color:rgb(0,0,0);stop-opacity:1"/></linearGradient><linearGradient id="aquamarine" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(127,255,212);stop-opacity:1"/></linearGradient><linearGradient id="azure" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(240,255,255);stop-opacity:1"/></linearGradient><linearGradient id="blue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,0,255);stop-opacity:1"/></linearGradient><linearGradient id="blueviolet" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(138,43,226);stop-opacity:1"/></linearGradient><linearGradient id="brown" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(165,42,42);stop-opacity:1"/></linearGradient><linearGradient id="cadetblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(95,158,160);stop-opacity:1"/></linearGradient><linearGradient id="chocolate" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(210,105,30);stop-opacity:1"/></linearGradient><linearGradient id="cornflowerblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(100,149,237);stop-opacity:1"/></linearGradient><linearGradient id="crimson" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(220,20,60);stop-opacity:1"/></linearGradient><linearGradient id="cyan" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,255,255);stop-opacity:1"/></linearGradient><linearGradient id="darkgreen" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,100,0);stop-opacity:1"/></linearGradient><linearGradient id="darkorange" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,140,0);stop-opacity:1"/></linearGradient><linearGradient id="gold" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,215,0);stop-opacity:1"/></linearGradient><linearGradient id="gray" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(192,192,192);stop-opacity:1"/></linearGradient><linearGradient id="greenyellow" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(173,255,47);stop-opacity:1"/></linearGradient><linearGradient id="green" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,255,0);stop-opacity:1"/></linearGradient><linearGradient id="grey" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(192,192,192);stop-opacity:1"/></linearGradient><linearGradient id="hotpink" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,105,180);stop-opacity:1"/></linearGradient><linearGradient id="indianred" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(205,92,92);stop-opacity:1"/></linearGradient><linearGradient id="indigo" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(75,0,130);stop-opacity:1"/></linearGradient><linearGradient id="lavender" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(230,230,250);stop-opacity:1"/></linearGradient><linearGradient id="lightblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(173,216,230);stop-opacity:1"/></linearGradient><linearGradient id="lightgray" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(211,211,211);stop-opacity:1"/></linearGradient><linearGradient id="lightgrey" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(211,211,211);stop-opacity:1"/></linearGradient><linearGradient id="magenta" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,0,255);stop-opacity:1"/></linearGradient><linearGradient id="maroon" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(176,48,96);stop-opacity:1"/></linearGradient><linearGradient id="mediumblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(0,0,205);stop-opacity:1"/></linearGradient><linearGradient id="mediumpurple" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(147,112,219);stop-opacity:1"/></linearGradient><linearGradient id="orange" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,165,0);stop-opacity:1"/></linearGradient><linearGradient id="pink" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,192,203);stop-opacity:1"/></linearGradient><linearGradient id="purple" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(160,32,240);stop-opacity:1"/></linearGradient><linearGradient id="red" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,0,0);stop-opacity:1"/></linearGradient><linearGradient id="steelblue" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(70,130,180);stop-opacity:1"/></linearGradient><linearGradient id="violet" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(238,130,238);stop-opacity:1"/></linearGradient><linearGradient id="yellow" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,255,0);stop-opacity:1"/></linearGradient><linearGradient id="none" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:rgb(255,255,255);stop-opacity:1"/><stop offset="100%" style="stop-color:rgb(255,255,255);stop-opacity:1"/></linearGradient></defs>
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 105)"><polygon fill="white" stroke="none" points="-4,4 -4,-105 497.6,-105 497.6,4 -4,4"/><title>WBE requests states</title><g id="node1" class="node"><ellipse fill="none" stroke="black" cx="103.6" cy="-83" rx="39.8775" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="103.6" cy="-83" rx="39.8775" ry="18" style="fill: url(#none);stroke: black;"/><text text-anchor="middle" x="103.6" y="-80.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:sans-serif;">WAITING</text></g><g id="node2" class="node"><ellipse fill="none" stroke="black" cx="219.6" cy="-60" rx="39.8775" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="219.6" cy="-60" rx="39.8775" ry="18" style="fill: url(#none);stroke: black;"/><text text-anchor="middle" x="219.6" y="-57.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:sans-serif;">PENDING</text></g><g id="edge1" class="edge"><polygon fill="black" stroke="black" points="173.674,-72.6347 182.784,-67.2261 172.289,-65.773 173.674,-72.6347" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M140.045,-75.8487C150.454,-73.7487 161.988,-71.4218 172.939,-69.2123" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="173.674,-72.6347 182.784,-67.2261 172.289,-65.773 173.674,-72.6347" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M140.045,-75.8487C150.454,-73.7487 161.988,-71.4218 172.939,-69.2123"/></g><g id="node3" class="node"><ellipse fill="none" stroke="black" cx="454.6" cy="-72" rx="38.4712" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="454.6" cy="-72" rx="38.4712" ry="18" style="fill: url(#none);stroke: black;"/><text text-anchor="middle" x="454.6" y="-69.2" font-family="Times,serif" font-size="11.00" fill="red" style="font-size:10px; font-family:sans-serif;">FAILURE</text></g><g id="edge2" class="edge"><polygon fill="black" stroke="black" points="407.555,-80.8531 417.125,-76.3053 406.808,-73.8931 407.555,-80.8531" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M143.124,-85.4491C154.833,-86.0871 167.738,-86.6839 179.6,-87 268.512,-89.3693 290.963,-87.3719 379.6,-80 388.489,-79.2607 397.964,-78.3386 407.063,-77.3858" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="407.555,-80.8531 417.125,-76.3053 406.808,-73.8931 407.555,-80.8531" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M143.124,-85.4491C154.833,-86.0871 167.738,-86.6839 179.6,-87 268.512,-89.3693 290.963,-87.3719 379.6,-80 388.489,-79.2607 397.964,-78.3386 407.063,-77.3858"/></g><g id="edge4" class="edge"><polygon fill="black" stroke="black" points="406.058,-73.056 416.225,-70.0751 406.418,-66.0653 406.058,-73.056" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M259.075,-61.9816C299.401,-64.0584 362.811,-67.3242 406.198,-69.5587" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="406.058,-73.056 416.225,-70.0751 406.418,-66.0653 406.058,-73.056" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M259.075,-61.9816C299.401,-64.0584 362.811,-67.3242 406.198,-69.5587"/></g><g id="node4" class="node"><ellipse fill="none" stroke="black" cx="337.6" cy="-22" rx="41.4846" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="337.6" cy="-22" rx="41.4846" ry="18" style="fill: url(#none);stroke: black;"/><text text-anchor="middle" x="337.6" y="-19.2" font-family="Times,serif" font-size="11.00" style="font-size:10px; font-family:sans-serif;">RUNNING</text></g><g id="edge3" class="edge"><polygon fill="black" stroke="black" points="295.314,-39.2078 303.727,-32.7686 293.135,-32.5557 295.314,-39.2078" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M252.298,-49.6163C265.145,-45.4078 280.176,-40.4837 293.96,-35.9683" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="295.314,-39.2078 303.727,-32.7686 293.135,-32.5557 295.314,-39.2078" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M252.298,-49.6163C265.145,-45.4078 280.176,-40.4837 293.96,-35.9683"/></g><g id="edge5" class="edge"><polygon fill="black" stroke="black" points="415.214,-59.1268 425.78,-59.9044 418.005,-52.7073 415.214,-59.1268" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M367.619,-34.6171C382.387,-41.0377 400.507,-48.9162 416.299,-55.7822" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="415.214,-59.1268 425.78,-59.9044 418.005,-52.7073 415.214,-59.1268" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M367.619,-34.6171C382.387,-41.0377 400.507,-48.9162 416.299,-55.7822"/></g><g id="node5" class="node"><ellipse fill="none" stroke="black" cx="454.6" cy="-18" rx="39.1741" ry="18" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="none" stroke="black" cx="454.6" cy="-18" rx="39.1741" ry="18" style="fill: url(#none);stroke: black;"/><text text-anchor="middle" x="454.6" y="-15.2" font-family="Times,serif" font-size="11.00" fill="green" style="font-size:10px; font-family:sans-serif;">SUCCESS</text></g><g id="edge6" class="edge"><polygon fill="black" stroke="black" points="405.476,-23.1761 415.348,-19.3305 405.232,-16.1803 405.476,-23.1761" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" d="M379.145,-20.5897C387.604,-20.2955 396.601,-19.9826 405.308,-19.6797" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="405.476,-23.1761 415.348,-19.3305 405.232,-16.1803 405.476,-23.1761" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" d="M379.145,-20.5897C387.604,-20.2955 396.601,-19.9826 405.308,-19.6797"/></g><g id="node6" class="node"><ellipse fill="black" stroke="black" cx="23.6" cy="-83" rx="3.6" ry="3.6" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><ellipse fill="black" stroke="black" cx="23.6" cy="-83" rx="3.6" ry="3.6" style="fill: url(#black);stroke: black;"/><text text-anchor="middle" x="10" y="-70.6" font-family="Times,serif" font-size="11.00" fill="green" style="font-size:10px; font-family:sans-serif;">start</text></g><g id="edge7" class="edge"><polygon fill="black" stroke="black" points="53.5965,-86.5001 63.5964,-83 53.5964,-79.5001 53.5965,-86.5001" style="fill: black; stroke: none; fill-opacity:0.3" transform="translate(3,3)"/><path fill="none" stroke="black" stroke-dasharray="1,5" d="M27.5624,-83C32.3405,-83 42.3529,-83 53.5516,-83" style="fill: none; stroke: black; stroke-opacity:0.3" transform="translate(3,3)"/><polygon fill="black" stroke="black" points="53.5965,-86.5001 63.5964,-83 53.5964,-79.5001 53.5965,-86.5001" style="fill: url(#black);stroke: black;"/><path fill="none" stroke="black" stroke-dasharray="1,5" d="M27.5624,-83C32.3405,-83 42.3529,-83 53.5516,-83"/></g></g>
</svg>
diff --git a/tools/state_graph.py b/tools/state_graph.py
index 5530a46..9b08638 100755
--- a/tools/state_graph.py
+++ b/tools/state_graph.py
@@ -24,11 +24,7 @@ top_dir = os.path.abspath(os.path.join(os.path.dirname(__file__),
os.pardir))
sys.path.insert(0, top_dir)
-# To get this installed you have to do the following:
-#
-# $ pip install pydot2
-import pydot
-
+from automaton.converters import pydot
from automaton import machines
from taskflow.engines.action_engine import builder
@@ -46,39 +42,20 @@ class DummyRuntime(object):
self.storage = mock.MagicMock()
-def clean_event(name):
- name = name.replace("_", " ")
- name = name.strip()
- return name
-
-
-def make_machine(start_state, transitions):
+def make_machine(start_state, transitions, event_name_cb):
machine = machines.FiniteMachine()
machine.add_state(start_state)
+ machine.default_start_state = start_state
for (start_state, end_state) in transitions:
if start_state not in machine:
machine.add_state(start_state)
if end_state not in machine:
machine.add_state(end_state)
- # Make a fake event (not used anyway)...
- event = "on_%s" % (end_state)
- machine.add_transition(start_state, end_state, event.lower())
- machine.default_start_state = start_state
+ event = event_name_cb(start_state, end_state)
+ machine.add_transition(start_state, end_state, event)
return machine
-def map_color(internal_states, state):
- if state in internal_states:
- return 'blue'
- if state in (states.FAILURE, states.REVERT_FAILURE):
- return 'red'
- if state == states.REVERTED:
- return 'darkorange'
- if state in (states.SUCCESS, states.COMPLETE):
- return 'green'
- return None
-
-
def main():
parser = optparse.OptionParser()
parser.add_option("-f", "--file", dest="filename",
@@ -103,6 +80,10 @@ def main():
action='store_true',
help="use job transitions",
default=False)
+ parser.add_option("--flow", dest="flow",
+ action='store_true',
+ help="use flow transitions",
+ default=False)
parser.add_option("-T", "--format", dest="format",
help="output in given format",
default='svg')
@@ -117,21 +98,34 @@ def main():
options.tasks,
options.wbe_requests,
options.jobs,
+ options.flow,
]
- if sum([int(i) for i in types]) > 1:
- parser.error("Only one of task/retry/engines/wbe requests/jobs"
+ provided = sum([int(i) for i in types])
+ if provided > 1:
+ parser.error("Only one of task/retry/engines/wbe requests/jobs/flow"
" may be specified.")
+ if provided == 0:
+ parser.error("One of task/retry/engines/wbe requests/jobs/flow"
+ " must be specified.")
+ event_name_cb = lambda start_state, end_state: "on_%s" % end_state.lower()
internal_states = list()
ordering = 'in'
if options.tasks:
source_type = "Tasks"
source = make_machine(states.PENDING,
- list(states._ALLOWED_TASK_TRANSITIONS))
+ list(states._ALLOWED_TASK_TRANSITIONS),
+ event_name_cb)
elif options.retries:
source_type = "Retries"
source = make_machine(states.PENDING,
- list(states._ALLOWED_RETRY_TRANSITIONS))
+ list(states._ALLOWED_RETRY_TRANSITIONS),
+ event_name_cb)
+ elif options.flow:
+ source_type = "Flow"
+ source = make_machine(states.PENDING,
+ list(states._ALLOWED_FLOW_TRANSITIONS),
+ event_name_cb)
elif options.engines:
source_type = "Engines"
b = builder.MachineBuilder(DummyRuntime(), mock.MagicMock())
@@ -141,61 +135,48 @@ def main():
elif options.wbe_requests:
source_type = "WBE requests"
source = make_machine(protocol.WAITING,
- list(protocol._ALLOWED_TRANSITIONS))
+ list(protocol._ALLOWED_TRANSITIONS),
+ event_name_cb)
elif options.jobs:
source_type = "Jobs"
source = make_machine(states.UNCLAIMED,
- list(states._ALLOWED_JOB_TRANSITIONS))
- else:
- source_type = "Flow"
- source = make_machine(states.PENDING,
- list(states._ALLOWED_FLOW_TRANSITIONS))
+ list(states._ALLOWED_JOB_TRANSITIONS),
+ event_name_cb)
- graph_name = "%s states" % source_type
- g = pydot.Dot(graph_name=graph_name, rankdir='LR',
- nodesep='0.25', overlap='false',
- ranksep="0.5", size="11x8.5",
- splines='true', ordering=ordering)
- node_attrs = {
- 'fontsize': '11',
+ graph_attrs = {
+ 'ordering': ordering,
}
- nodes = {}
- for (start_state, on_event, end_state) in source:
- on_event = clean_event(on_event)
- if start_state not in nodes:
- start_node_attrs = node_attrs.copy()
- text_color = map_color(internal_states, start_state)
- if text_color:
- start_node_attrs['fontcolor'] = text_color
- nodes[start_state] = pydot.Node(start_state, **start_node_attrs)
- g.add_node(nodes[start_state])
- if end_state not in nodes:
- end_node_attrs = node_attrs.copy()
- text_color = map_color(internal_states, end_state)
- if text_color:
- end_node_attrs['fontcolor'] = text_color
- nodes[end_state] = pydot.Node(end_state, **end_node_attrs)
- g.add_node(nodes[end_state])
+ graph_name = "%s states" % source_type
+
+ def node_attrs_cb(state):
+ node_color = None
+ if state in internal_states:
+ node_color = 'blue'
+ if state in (states.FAILURE, states.REVERT_FAILURE):
+ node_color = 'red'
+ if state == states.REVERTED:
+ node_color = 'darkorange'
+ if state in (states.SUCCESS, states.COMPLETE):
+ node_color = 'green'
+ node_attrs = {}
+ if node_color:
+ node_attrs['fontcolor'] = node_color
+ return node_attrs
+
+ def edge_attrs_cb(start_state, on_event, end_state):
+ edge_attrs = {}
if options.engines:
- edge_attrs = {
- 'label': on_event,
- }
+ edge_attrs['label'] = on_event.replace("_", " ").strip()
if 'reverted' in on_event:
edge_attrs['fontcolor'] = 'darkorange'
if 'fail' in on_event:
edge_attrs['fontcolor'] = 'red'
if 'success' in on_event:
edge_attrs['fontcolor'] = 'green'
- else:
- edge_attrs = {}
- g.add_edge(pydot.Edge(nodes[start_state], nodes[end_state],
- **edge_attrs))
-
- start = pydot.Node("__start__", shape="point", width="0.1",
- xlabel='start', fontcolor='green', **node_attrs)
- g.add_node(start)
- g.add_edge(pydot.Edge(start, nodes[source.default_start_state], style='dotted'))
+ return edge_attrs
+ g = pydot.convert(source, graph_name, graph_attrs=graph_attrs,
+ node_attrs_cb=node_attrs_cb, edge_attrs_cb=edge_attrs_cb)
print("*" * len(graph_name))
print(graph_name)
print("*" * len(graph_name))
diff --git a/tools/update_states.sh b/tools/update_states.sh
index 61b54e8..afaa45d 100755
--- a/tools/update_states.sh
+++ b/tools/update_states.sh
@@ -20,7 +20,7 @@ python $script_dir/state_graph.py -t -f /tmp/states.svg
$xsltproc $PWD/.diagram-tools/notugly.xsl /tmp/states.svg > $img_dir/task_states.svg
echo "---- Updating flow state diagram ----"
-python $script_dir/state_graph.py -f /tmp/states.svg
+python $script_dir/state_graph.py --flow -f /tmp/states.svg
$xsltproc $PWD/.diagram-tools/notugly.xsl /tmp/states.svg > $img_dir/flow_states.svg
echo "---- Updating engine state diagram ----"