From mboxrd@z Thu Jan 1 00:00:00 1970 From: harry Subject: States for correct establishment and tear-down of an inter-domain communication channel. Date: Mon, 24 Oct 2005 15:46:27 +0100 Message-ID: <1130165187.16500.47.camel@localhost.localdomain> References: <1129547697.32584.61.camel@localhost.localdomain> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-p2dWa7RAVcOYyDgd3tTz" Return-path: In-Reply-To: <1129547697.32584.61.camel@localhost.localdomain> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com, Rusty Russell List-Id: xen-devel@lists.xenproject.org --=-p2dWa7RAVcOYyDgd3tTz Content-Type: text/plain Content-Transfer-Encoding: 7bit I've attached a diagram of the state machine I came up with. It's fairly subtle and this is the fourth attempt so there's a chance that this version is also somehow fundamentally flawed. In the end I went with a 'ready' node and used the event-channel and ring-reference to represent the connected state. This is because the state machine doesn't make use of the info until the other side gets to the connected state. The green states are the normal path, the red states are internal errors, the orange states are when we are disconnecting and the blue state is where we are going down to go around and reconnect again due to a reconnection of the remote side. The state machine would be simpler without the internal errors. Here are some comments about the state machine (cut and pasted from the implementation) to aid in understanding: /*****************************************************************************/ /* The state machine below makes the following assumptions: */ /* */ /* 1) The store might contain some stale cruft from the last time our device */ /* driver failed. This is a handy assumption for testing new versions of */ /* the driver but isn't strictly necessary. */ /* */ /* 2) If the other side generates a protocol error on the inter-domain */ /* connection then we attempt to disconnect and reconnect. An alternative */ /* behaviour would be to wait for our interface to be called to disconnect */ /* and then reconnect before retrying. */ /* */ /* 3) If we experience an internal failure (fail to register watch for */ /* example) then we attempt to disconnect and wait for our interface to be */ /* called to disconnect (by module unload for example) and reconnect before */ /* retrying. */ /* */ /* 4) Connection and disconnection of the channel is done in two phases: the */ /* first phase makes the local resources available to the remote side, the */ /* second phase uses the resources of the remote side to complete the */ /* connection. */ /* */ /* The key for the stimuli is as follows: */ /* */ /* cn: interface called to connect the channel when interface state is */ /* disconnected (for example on module load). */ /* */ /* pe: protocol error detected when channel is in a state between phase two */ /* connected and the completion of the phase two disconnect callback. */ /* */ /* dn: interface called to disconnect the channel when the interface state */ /* is connected (for example on module unload). */ /* */ /* ou: a synchronous stimulus from the response test_other_state which */ /* indicates that the other state is still unknown because the watch */ /* callback hasn't happened yet. Can only happen when making the response */ /* test_other_state. */ /* */ /* od: other state is disconnected. This is both a synchronous stimulus */ /* from test_other_state and an asynchronous stimulus from the watch */ /* function. Disconnected means that we can't read the at least the other */ /* side's ready node from the store. */ /* */ /* or: other state is ready. This is both a synchronous stimulus from */ /* test_other_state and an asynchronous stimulus from the watch function. */ /* Ready means that we can see the other side's ready node but not the */ /* ring-reference and event-channel information. */ /* */ /* oc: other state is connected. This is both a synchronous stimulus from */ /* test_other_state and an asynchronous stimulus from the watch function. */ /* Connected means that we found both the ready node and the connected */ /* information in the store. */ /* */ /* If the values of the connected information change when the other side is */ /* connected then we generate the 'oc' stimulus again which forces a */ /* reconnect. */ /* */ /* rs: An asynchronous response was successful (we only make one response at */ /* a time so all asynchronous responses have the same completion stimuli). */ /* */ /* rf: An asynchronous response failed. Only register_watch, clear_store, */ /* write_ready, write_connected, phase_two_connect can fail. Only */ /* phase_two_connect has a good reason for failure: the other side might */ /* have passed bogus parameters; the other failures are poor API design and */ /* ought to be promoted to domain failures. */ /* */ /* The state machine responses are as follows: */ /* */ /* test_other_state: what state do we currently think the other side is in */ /* as reflected by the last watch event. Synchronous (called with the lock */ /* held) completes with ou/od/or/oc. */ /* */ /* register_watch: register a watch on the other side. */ /* */ /* unregister_watch: unregister the watch. */ /* */ /* clear_store: remove the ready node and connected information. */ /* */ /* write_ready: write the ready node to the store. */ /* */ /* write_connected: write the connected information to the store. */ /* */ /* phase_one_connect: grant the remote side access to the local page etc. */ /* */ /* phase_two_connect: map the remote page etc. */ /* */ /* phase_two_disconnect: unmap the remote page. */ /* */ /* phase_one_disconnect: revoke the access of the remote side. */ /* */ /* complete_disconnect: When our interface is called to get us to disconnect */ /* the channel we quiesce and disconnect and then call this to indicate we */ /* are done. */ /* */ /*****************************************************************************/ Enjoy, Harry. On Mon, 2005-10-17 at 21:14 +1000, Rusty Russell wrote: > Hi Harry, > > Did some more thinking about state diagram. It is far simpler if (1) > we assume that failures all terminate the device (ie. wait for device > deletion), and (2) simply treat all changes the same, whether a resume > (backend change) or tools changing some configuration stuff. It's not > complete, but useful to seeing what a nicer xenbus interface would look > like. I think something like the following: > > ->create() > // Allocate, read tool-written fields > // Xenbus watches backend > > ->open() > // Write fields for backend to read > // Xenbus ensures backend not connected anymore > > ->close() > // Abort connection to backend, remove fields for be > // Xenbus removes connected field > > ->change() > // Re-read tool-written fields. > > ->destroy() > // Deallocate. > > Grammar: > LIFE := create() CONN destroy() > CONN := change()* OPENCLOSE change()* > OPENCLOSE := open() change()* close() > > Anyway, here's the first cut (haven't sent out yet, since my brain is > still a little fried and I want to sleep on it). > > State Transition Diagram for Xen Skeleton Front End Device > > Events: > da: Device appears (tools create directory in store w/ initial fields incl. backend) > dd: Device destruction (tools remove directory from store) > dc: Device changes (tools alter fields in store) > db: Backend changes (restore) > rm: Module remove > > Unless otherwise referenced, failure puts into "fail" state, which can > only be resolved by destroying the device. > > i: Initial state > Device does not exist, only one event possible. > > da: goto i_da: read initial fields, watch backend > (be: backend info exists, bd: backend info doesn't exist) > > i_da: > We need to make sure backend isn't still connected so it > notices us coming up. Check if backend has "connected" node > (ce: "connected" exists, cd: "connected" doesn't exist) > > ce: goto i_da: report error that other end still connected > cd: goto i_da_cd: create and write info for backend > db: goto i_da: move watch to new backend > rm: goto i_da_rm: unwatch backend, free resources > > i_da_cd: > Backend is not connected to old frontend, we can set up. > > dd: goto i: delete info for backend, unwatch backend, free resources > dc: goto i_da_cd: update fe info > db: goto i_da: move watch to new backend, delete info for backend > be: goto id_da_cd_be: read and store backend info, > write "connected" field > rm: goto i_da_rm: remove info for backend, unwatch backend, > free resources > > id_da_cd_be: > Fully connected. > > dd: goto i: unwatch backend, free resources > dc: goto i_da_cd_be: update fe info > db: goto i_da: abort connection, move watch to new backend, > remove info for backend > bd: goto i_da: remove "connected", remove info for backend, > abort connection > rm: goto i_da_rm: remove "connected", abort connection, remove info for backend, unwatch backend, free resources > > i_da_rm: > Remove module > --=-p2dWa7RAVcOYyDgd3tTz Content-Disposition: attachment; filename=xenidc_xbgt_channel_enumeration.ps Content-Type: application/postscript; name=xenidc_xbgt_channel_enumeration.ps Content-Transfer-Encoding: 7bit %!PS-Adobe-2.0 %%Creator: dot version 2.2.1 (Tue Apr 12 00:03:35 UTC 2005) %%For: (harry) harry,,, %%Title: enumeration %%Pages: (atend) %%BoundingBox: 35 35 541 513 %%EndComments save %%BeginProlog /DotDict 200 dict def DotDict begin /setupLatin1 { mark /EncodingVector 256 array def EncodingVector 0 ISOLatin1Encoding 0 255 getinterval putinterval EncodingVector dup 306 /AE dup 301 /Aacute dup 302 /Acircumflex dup 304 /Adieresis dup 300 /Agrave dup 305 /Aring dup 303 /Atilde dup 307 /Ccedilla dup 311 /Eacute dup 312 /Ecircumflex dup 313 /Edieresis dup 310 /Egrave dup 315 /Iacute dup 316 /Icircumflex dup 317 /Idieresis dup 314 /Igrave dup 334 /Udieresis dup 335 /Yacute dup 376 /thorn dup 337 /germandbls dup 341 /aacute dup 342 /acircumflex dup 344 /adieresis dup 346 /ae dup 340 /agrave dup 345 /aring dup 347 /ccedilla dup 351 /eacute dup 352 /ecircumflex dup 353 /edieresis dup 350 /egrave dup 355 /iacute dup 356 /icircumflex dup 357 /idieresis dup 354 /igrave dup 360 /dcroat dup 361 /ntilde dup 363 /oacute dup 364 /ocircumflex dup 366 /odieresis dup 362 /ograve dup 365 /otilde dup 370 /oslash dup 372 /uacute dup 373 /ucircumflex dup 374 /udieresis dup 371 /ugrave dup 375 /yacute dup 377 /ydieresis % Set up ISO Latin 1 character encoding /starnetISO { dup dup findfont dup length dict begin { 1 index /FID ne { def }{ pop pop } ifelse } forall /Encoding EncodingVector def currentdict end definefont } def /Times-Roman starnetISO def /Times-Italic starnetISO def /Times-Bold starnetISO def /Times-BoldItalic starnetISO def /Helvetica starnetISO def /Helvetica-Oblique starnetISO def /Helvetica-Bold starnetISO def /Helvetica-BoldOblique starnetISO def /Courier starnetISO def /Courier-Oblique starnetISO def /Courier-Bold starnetISO def /Courier-BoldOblique starnetISO def cleartomark } bind def %%BeginResource: procset graphviz 0 0 /coord-font-family /Times-Roman def /default-font-family /Times-Roman def /coordfont coord-font-family findfont 8 scalefont def /InvScaleFactor 1.0 def /set_scale { dup 1 exch div /InvScaleFactor exch def dup scale } bind def % styles /solid { [] 0 setdash } bind def /dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def /dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def /invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def /bold { 2 setlinewidth } bind def /filled { } bind def /unfilled { } bind def /rounded { } bind def /diagonals { } bind def % hooks for setting color /nodecolor { sethsbcolor } bind def /edgecolor { sethsbcolor } bind def /graphcolor { sethsbcolor } bind def /nopcolor {pop pop pop} bind def /beginpage { % i j npages /npages exch def /j exch def /i exch def /str 10 string def npages 1 gt { gsave coordfont setfont 0 0 moveto (\() show i str cvs show (,) show j str cvs show (\)) show grestore } if } bind def /set_font { findfont exch scalefont setfont } def % draw aligned label in bounding box aligned to current point /alignedtext { % width adj text /text exch def /adj exch def /width exch def gsave width 0 gt { text stringwidth pop adj mul 0 rmoveto } if [] 0 setdash text show grestore } def /boxprim { % xcorner ycorner xsize ysize 4 2 roll moveto 2 copy exch 0 rlineto 0 exch rlineto pop neg 0 rlineto closepath } bind def /ellipse_path { /ry exch def /rx exch def /y exch def /x exch def matrix currentmatrix newpath x y translate rx ry scale 0 0 1 0 360 arc setmatrix } bind def /endpage { showpage } bind def /showpage { } def /layercolorseq [ % layer color sequence - darkest to lightest [0 0 0] [.2 .8 .8] [.4 .8 .8] [.6 .8 .8] [.8 .8 .8] ] def /layerlen layercolorseq length def /setlayer {/maxlayer exch def /curlayer exch def layercolorseq curlayer 1 sub layerlen mod get aload pop sethsbcolor /nodecolor {nopcolor} def /edgecolor {nopcolor} def /graphcolor {nopcolor} def } bind def /onlayer { curlayer ne {invis} if } def /onlayers { /myupper exch def /mylower exch def curlayer mylower lt curlayer myupper gt or {invis} if } def /curlayer 0 def %%EndResource %%EndProlog %%BeginSetup 14 default-font-family set_font 1 setmiterlimit % /arrowlength 10 def % /arrowwidth 5 def % make sure pdfmark is harmless for PS-interpreters other than Distiller /pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse % make '<<' and '>>' safe on PS Level 1 devices /languagelevel where {pop languagelevel}{1} ifelse 2 lt { userdict (<<) cvn ([) cvn load put userdict (>>) cvn ([) cvn load put } if %%EndSetup %%Page: 1 1 %%PageBoundingBox: 36 36 541 513 %%PageOrientation: Portrait gsave 35 35 506 478 boxprim clip newpath 36 36 translate 0 0 1 beginpage 0.2979 set_scale 0 0 translate 0 rotate 0.000 0.000 0.000 graphcolor 14.00 /Times-Roman set_font % i gsave 10 dict begin filled 0.333 1.000 1.000 nodecolor 1441 1582 27 18 ellipse_path fill 0.000 0.000 0.000 nodecolor 1441 1582 27 18 ellipse_path stroke gsave 10 dict begin 1441 1577 moveto 5.0 -0.5 (i) alignedtext end grestore end grestore % i_cn gsave 10 dict begin filled 0.333 1.000 1.000 nodecolor 1283 1478 27 18 ellipse_path fill 0.000 0.000 0.000 nodecolor 1283 1478 27 18 ellipse_path stroke gsave 10 dict begin 1270 1473 moveto (i_cn) [3.84 6.96 6.24 6.96] xshow end grestore end grestore % i -> i_cn newpath 1415 1577 moveto 1383 1570 1331 1558 1316 1546 curveto 1304 1536 1296 1519 1290 1505 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 1293 1504 moveto 1287 1496 lineto 1287 1507 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 1293 1504 moveto 1287 1496 lineto 1287 1507 lineto closepath stroke end grestore gsave 10 dict begin 1366 1533 moveto (cn) [6.24 6.96] xshow 1317 1517 moveto (phase_one_connect) [6.96 6.96 6.24 5.52 6.24 6.96 6.96 6.96 6.24 6.96 6.24 6.96 6.96 6.96 6.24 6.24 3.84] xshow end grestore % i_cn_dn gsave 10 dict begin filled 0.106 1.000 1.000 nodecolor 1283 1320 36 18 ellipse_path fill 0.000 0.000 0.000 nodecolor 1283 1320 36 18 ellipse_path stroke gsave 10 dict begin 1259 1315 moveto (i_cn_dn) [3.84 6.96 6.24 6.96 6.96 6.96 6.96] xshow end grestore end grestore % i_cn -> i_cn_dn newpath 1283 1460 moveto 1283 1432 1283 1381 1283 1348 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 1287 1348 moveto 1283 1338 lineto 1280 1348 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 1287 1348 moveto 1283 1338 lineto 1280 1348 lineto closepath stroke end grestore gsave 10 dict begin 1282 1421 moveto (dn) [6.96 6.96] xshow end grestore % i_cn_rs gsave 10 dict begin filled 0.333 1.000 1.000 nodecolor 836 1374 34 18 ellipse_path fill 0.000 0.000 0.000 nodecolor 836 1374 34 18 ellipse_path stroke gsave 10 dict begin 814 1369 moveto (i_cn_rs) [3.84 6.96 6.24 6.96 6.96 4.56 5.52] xshow end grestore end grestore % i_cn -> i_cn_rs newpath 1257 1472 moveto 1183 1455 968 1405 877 1383 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 877 1380 moveto 867 1381 lineto 876 1386 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 877 1380 moveto 867 1381 lineto 876 1386 lineto closepath stroke end grestore gsave 10 dict begin 1159 1429 moveto (dn) [6.96 6.96] xshow 1125 1413 moveto (register_watch) [4.56 6.24 6.96 3.84 5.52 3.84 6.24 4.56 6.96 10.08 6.24 3.84 6.24 6.96] xshow end grestore % i_cn_dn_rs gsave 10 dict begin filled 0.106 1.000 1.000 nodecolor 1179 122 45 18 ellipse_path fill 0.000 0.000 0.000 nodecolor 1179 122 45 18 ellipse_path stroke gsave 10 dict begin 1147 117 moveto (i_cn_dn_rs) [3.84 6.96 6.24 6.96 6.96 6.96 6.96 6.96 4.56 5.52] xshow end grestore end grestore % i_cn_dn -> i_cn_dn_rs newpath 1283 1302 moveto 1283 1281 1283 1245 1283 1214 curveto 1283 1214 1283 1214 1283 226 curveto 1283 187 1247 158 1218 141 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 1219 138 moveto 1209 136 lineto 1216 144 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 1219 138 moveto 1209 136 lineto 1216 144 lineto closepath stroke end grestore gsave 10 dict begin 1308 749 moveto (rs) [4.56 5.52] xshow 1283 733 moveto (clear_store) [6.24 3.84 6.24 6.24 4.56 6.96 5.52 3.84 6.96 4.56 6.24] xshow end grestore % i_cn_rs -> i_cn_rs newpath 860 1361 moveto 874 1359 888 1363 888 1374 curveto 888 1382 880 1387 870 1387 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 870 1384 moveto 860 1387 lineto 870 1391 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 870 1384 moveto 860 1387 lineto 870 1391 lineto closepath stroke end grestore gsave 10 dict begin 887 1369 moveto (pe/od/or/oc) [6.96 6.24 3.84 6.96 6.96 3.84 6.96 4.56 3.84 6.96 6.24] xshow end grestore % i_cn_rs_dn gsave 10 dict begin filled 0.106 1.000 1.000 nodecolor 1145 330 45 18 ellipse_path fill 0.000 0.000 0.000 nodecolor 1145 330 45 18 ellipse_path stroke gsave 10 dict begin 1113 325 moveto (i_cn_rs_dn) [3.84 6.96 6.24 6.96 6.96 4.56 5.52 6.96 6.96 6.96] xshow end grestore end grestore % i_cn_rs -> i_cn_rs_dn newpath 869 1370 moveto 952 1359 1160 1326 1160 1266 curveto 1160 1266 1160 1266 1160 902 curveto 1160 752 1260 721 1234 574 curveto 1219 491 1179 401 1158 357 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 1161 356 moveto 1154 348 lineto 1155 359 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 1161 356 moveto 1154 348 lineto 1155 359 lineto closepath stroke end grestore gsave 10 dict begin 1165 845 moveto (dn) [6.96 6.96] xshow end grestore % i_cn_rs_rs gsave 10 dict begin filled 0.333 1.000 1.000 nodecolor 545 1266 43 18 ellipse_path fill 0.000 0.000 0.000 nodecolor 545 1266 43 18 ellipse_path stroke gsave 10 dict begin 515 1261 moveto (i_cn_rs_rs) [3.84 6.96 6.24 6.96 6.96 4.56 5.52 6.96 4.56 5.52] xshow end grestore end grestore % i_cn_rs -> i_cn_rs_rs newpath 808 1364 moveto 757 1345 647 1304 587 1282 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 588 1278 moveto 577 1278 lineto 585 1285 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 588 1278 moveto 577 1278 lineto 585 1285 lineto closepath stroke end grestore gsave 10 dict begin 768 1323 moveto (rs) [4.56 5.52] xshow 743 1307 moveto (clear_store) [6.24 3.84 6.24 6.24 4.56 6.96 5.52 3.84 6.96 4.56 6.24] xshow end grestore % i_cn_rs_rf gsave 10 dict begin filled 0.000 1.000 1.000 nodecolor 1094 642 42 18 ellipse_path fill 0.000 0.000 0.000 nodecolor 1094 642 42 18 ellipse_path stroke gsave 10 dict begin 1064 637 moveto (i_cn_rs_rf) [3.84 6.96 6.24 6.96 6.96 4.56 5.52 6.96 4.56 4.56] xshow end grestore end grestore % i_cn_rs -> i_cn_rs_rf newpath 870 1372 moveto 951 1368 1149 1355 1174 1338 curveto 1201 1317 1203 1300 1203 1266 curveto 1203 1266 1203 1266 1203 902 curveto 1203 802 1241 758 1182 678 curveto 1172 665 1158 657 1143 652 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 1144 649 moveto 1133 649 lineto 1142 655 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 1144 649 moveto 1133 649 lineto 1142 655 lineto closepath stroke end grestore gsave 10 dict begin 1228 1009 moveto (rf) [4.56 4.56] xshow 1203 993 moveto (clear_store) [6.24 3.84 6.24 6.24 4.56 6.96 5.52 3.84 6.96 4.56 6.24] xshow end grestore % i_cn_dn_rs_rs gsave 10 dict begin filled 0.106 1.000 1.000 nodecolor 1354 18 53 18 ellipse_path fill 0.000 0.000 0.000 nodecolor 1354 18 53 18 ellipse_path stroke gsave 10 dict begin 1313 13 moveto (i_cn_dn_rs_rs) [3.84 6.96 6.24 6.96 6.96 6.96 6.96 6.96 4.56 5.52 6.96 4.56 5.52] xshow end grestore end grestore % i_cn_dn_rs -> i_cn_dn_rs_rs newpath 1183 104 moveto 1188 88 1197 67 1213 54 curveto 1226 43 1263 34 1296 28 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 1297 31 moveto 1306 26 lineto 1296 25 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 1297 31 moveto 1306 26 lineto 1296 25 lineto closepath stroke end grestore gsave 10 dict begin 1263 73 moveto (rs/rf) [4.56 5.52 3.84 4.56 4.56] xshow 1212 57 moveto (phase_one_disconnect) [6.96 6.96 6.24 5.52 6.24 6.96 6.96 6.96 6.24 6.96 6.96 3.84 5.52 6.24 6.96 6.96 6.96 6.24 6.24 3.84] xshow end grestore % i_cn_rs_dn -> i_cn_dn_rs newpath 1148 312 moveto 1154 275 1168 194 1174 150 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 1177 150 moveto 1176 140 lineto 1171 149 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 1177 150 moveto 1176 140 lineto 1171 149 lineto closepath stroke end grestore gsave 10 dict begin 1188 229 moveto (rf) [4.56 4.56] xshow 1163 213 moveto (clear_store) [6.24 3.84 6.24 6.24 4.56 6.96 5.52 3.84 6.96 4.56 6.24] xshow end grestore % i_cn_rs_dn -> i_cn_rs_dn newpath 1176 317 moveto 1193 315 1208 319 1208 330 curveto 1208 339 1198 343 1186 343 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 1186 340 moveto 1176 343 lineto 1186 347 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 1186 340 moveto 1176 343 lineto 1186 347 lineto closepath stroke end grestore gsave 10 dict begin 1207 325 moveto (od/or/oc) [6.96 6.96 3.84 6.96 4.56 3.84 6.96 6.24] xshow end grestore % i_cn_rs_dn_rs gsave 10 dict begin filled 0.106 1.000 1.000 nodecolor 906 226 53 18 ellipse_path fill 0.000 0.000 0.000 nodecolor 906 226 53 18 ellipse_path stroke gsave 10 dict begin 865 221 moveto (i_cn_rs_dn_rs) [3.84 6.96 6.24 6.96 6.96 4.56 5.52 6.96 6.96 6.96 6.96 4.56 5.52] xshow end grestore end grestore % i_cn_rs_dn -> i_cn_rs_dn_rs newpath 1115 316 moveto 1100 310 1083 301 1067 294 curveto 1037 280 1030 274 1001 262 curveto 985 255 968 249 953 243 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 954 239 moveto 943 239 lineto 951 246 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 954 239 moveto 943 239 lineto 951 246 lineto closepath stroke end grestore gsave 10 dict begin 1113 281 moveto (rs) [4.56 5.52] xshow 1070 265 moveto (unregister_watch) [6.96 6.96 4.56 6.24 6.96 3.84 5.52 3.84 6.24 4.56 6.96 10.08 6.24 3.84 6.24 6.96] xshow end grestore % i_cn_rs_rs -> i_cn_rs_rs newpath 575 1253 moveto 591 1251 606 1255 606 1266 curveto 606 1275 597 1279 585 1279 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 585 1276 moveto 575 1279 lineto 585 1283 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 585 1276 moveto 575 1279 lineto 585 1283 lineto closepath stroke end grestore gsave 10 dict begin 606 1261 moveto (od/or/oc) [6.96 6.96 3.84 6.96 4.56 3.84 6.96 6.24] xshow end grestore % i_cn_rs_rs_dn gsave 10 dict begin filled 0.106 1.000 1.000 nodecolor 600 330 53 18 ellipse_path fill 0.000 0.000 0.000 nodecolor 600 330 53 18 ellipse_path stroke gsave 10 dict begin 559 325 moveto (i_cn_rs_rs_dn) [3.84 6.96 6.24 6.96 6.96 4.56 5.52 6.96 4.56 5.52 6.96 6.96 6.96] xshow end grestore end grestore % i_cn_rs_rs -> i_cn_rs_rs_dn newpath 502 1265 moveto 498 1264 494 1264 493 1264 curveto 425 1248 371 1232 371 1162 curveto 371 1162 371 1162 371 1006 curveto 371 770 43 825 43 590 curveto 43 590 43 590 43 434 curveto 43 338 370 357 465 350 curveto 473 349 527 350 534 348 curveto 538 346 540 344 542 342 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 545 344 moveto 548 334 lineto 539 340 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 545 344 moveto 548 334 lineto 539 340 lineto closepath stroke end grestore gsave 10 dict begin 240 793 moveto (dn) [6.96 6.96] xshow end grestore % i_cn_rs_rs_rs gsave 10 dict begin filled 0.333 1.000 1.000 nodecolor 782 1162 51 18 ellipse_path fill 0.000 0.000 0.000 nodecolor 782 1162 51 18 ellipse_path stroke gsave 10 dict begin 743 1157 moveto (i_cn_rs_rs_rs) [3.84 6.96 6.24 6.96 6.96 4.56 5.52 6.96 4.56 5.52 6.96 4.56 5.52] xshow end grestore end grestore % i_cn_rs_rs -> i_cn_rs_rs_rs newpath 575 1253 moveto 617 1234 693 1201 741 1180 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 742 1183 moveto 750 1176 lineto 739 1177 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 742 1183 moveto 750 1176 lineto 739 1177 lineto closepath stroke end grestore gsave 10 dict begin 739 1217 moveto (rs) [4.56 5.52] xshow 700 1201 moveto (test_other_state) [3.84 6.24 5.52 3.84 6.96 6.96 3.84 6.96 6.24 4.56 6.96 5.52 3.84 6.24 3.84 6.24] xshow end grestore % i_cn_rs_rs_rf gsave 10 dict begin filled 0.000 1.000 1.000 nodecolor 936 746 51 18 ellipse_path fill 0.000 0.000 0.000 nodecolor 936 746 51 18 ellipse_path stroke gsave 10 dict begin 898 741 moveto (i_cn_rs_rs_rf) [3.84 6.96 6.24 6.96 6.96 4.56 5.52 6.96 4.56 5.52 6.96 4.56 4.56] xshow end grestore end grestore % i_cn_rs_rs -> i_cn_rs_rs_rf newpath 588 1263 moveto 708 1253 1047 1265 1047 1162 curveto 1047 1162 1047 1162 1047 954 curveto 1047 923 1046 914 1035 886 curveto 1011 827 997 807 961 770 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 964 768 moveto 954 763 lineto 959 773 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 964 768 moveto 954 763 lineto 959 773 lineto closepath stroke end grestore gsave 10 dict begin 1090 1009 moveto (rf) [4.56 4.56] xshow 1047 993 moveto (unregister_watch) [6.96 6.96 4.56 6.24 6.96 3.84 5.52 3.84 6.24 4.56 6.96 10.08 6.24 3.84 6.24 6.96] xshow end grestore % i_cn_rs_rf -> i_cn_dn_rs newpath 1088 624 moveto 1071 571 1029 415 1091 312 curveto 1099 297 1112 306 1123 294 curveto 1161 244 1142 217 1162 158 curveto 1163 155 1163 152 1164 149 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 1167 149 moveto 1165 139 lineto 1161 149 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 1167 149 moveto 1165 139 lineto 1161 149 lineto closepath stroke end grestore gsave 10 dict begin 1065 377 moveto (dn) [6.96 6.96] xshow end grestore % i_cn_rs_rf_rs gsave 10 dict begin filled 0.000 1.000 1.000 nodecolor 1362 538 51 18 ellipse_path fill 0.000 0.000 0.000 nodecolor 1362 538 51 18 ellipse_path stroke gsave 10 dict begin 1324 533 moveto (i_cn_rs_rf_rs) [3.84 6.96 6.24 6.96 6.96 4.56 5.52 6.96 4.56 4.56 6.96 4.56 5.52] xshow end grestore end grestore % i_cn_rs_rf -> i_cn_rs_rf_rs newpath 1125 630 moveto 1173 611 1264 576 1319 555 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 1320 558 moveto 1328 551 lineto 1317 552 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 1320 558 moveto 1328 551 lineto 1317 552 lineto closepath stroke end grestore gsave 10 dict begin 1316 593 moveto (rs/rf) [4.56 5.52 3.84 4.56 4.56] xshow 1265 577 moveto (phase_one_disconnect) [6.96 6.96 6.24 5.52 6.24 6.96 6.96 6.96 6.24 6.96 6.96 3.84 5.52 6.24 6.96 6.96 6.96 6.24 6.24 3.84] xshow end grestore % i_cn_dn_rs_rs -> i newpath 1397 29 moveto 1461 46 1574 83 1574 122 curveto 1574 1478 1574 1478 1574 1478 curveto 1574 1528 1515 1557 1476 1572 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 1475 1569 moveto 1466 1575 lineto 1477 1575 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 1475 1569 moveto 1466 1575 lineto 1477 1575 lineto closepath stroke end grestore gsave 10 dict begin 1627 801 moveto (rs) [4.56 5.52] xshow 1574 785 moveto (complete_disconnect) [6.24 6.96 10.8 6.96 3.84 6.24 3.84 6.24 6.96 6.96 3.84 5.52 6.24 6.96 6.96 6.96 6.24 6.24 3.84] xshow end grestore % i_cn_rs_dn_rs -> i_cn_dn_rs newpath 936 211 moveto 966 196 1013 174 1057 158 curveto 1081 149 1109 141 1131 135 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 1132 138 moveto 1141 132 lineto 1130 132 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 1132 138 moveto 1141 132 lineto 1130 132 lineto closepath stroke end grestore gsave 10 dict begin 1082 177 moveto (rs) [4.56 5.52] xshow 1057 161 moveto (clear_store) [6.24 3.84 6.24 6.24 4.56 6.96 5.52 3.84 6.96 4.56 6.24] xshow end grestore % i_cn_rs_dn_rs -> i_cn_rs_dn_rs newpath 943 213 moveto 961 211 977 216 977 226 curveto 977 234 967 239 953 239 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 953 236 moveto 943 239 lineto 953 243 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 953 236 moveto 943 239 lineto 953 243 lineto closepath stroke end grestore gsave 10 dict begin 976 221 moveto (od/or/oc) [6.96 6.96 3.84 6.96 4.56 3.84 6.96 6.24] xshow end grestore % i_cn_rs_rs_dn -> i_cn_rs_dn_rs newpath 615 313 moveto 631 297 655 274 681 262 curveto 710 249 788 238 845 232 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 845 235 moveto 855 231 lineto 845 229 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 845 235 moveto 855 231 lineto 845 229 lineto closepath stroke end grestore gsave 10 dict begin 717 281 moveto (rs/rf) [4.56 5.52 3.84 4.56 4.56] xshow 681 265 moveto (unregister_watch) [6.96 6.96 4.56 6.24 6.96 3.84 5.52 3.84 6.24 4.56 6.96 10.08 6.24 3.84 6.24 6.96] xshow end grestore % i_cn_rs_rs_dn -> i_cn_rs_rs_dn newpath 637 317 moveto 655 315 671 320 671 330 curveto 671 338 661 343 647 343 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 647 340 moveto 637 343 lineto 647 347 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 647 340 moveto 637 343 lineto 647 347 lineto closepath stroke end grestore gsave 10 dict begin 671 325 moveto (od/or/oc) [6.96 6.96 3.84 6.96 4.56 3.84 6.96 6.24] xshow end grestore % i_cn_rs_rs_rs -> i_cn_rs_dn_rs newpath 813 1148 moveto 825 1141 840 1134 853 1126 curveto 883 1106 892 1102 918 1076 curveto 979 1013 1000 998 1035 918 curveto 1062 854 1054 833 1061 764 curveto 1064 725 1077 713 1062 678 curveto 1057 667 1048 670 1043 660 curveto 967 521 1016 464 976 312 curveto 967 282 966 262 952 245 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 955 243 moveto 945 238 lineto 950 248 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 955 243 moveto 945 238 lineto 950 248 lineto closepath stroke end grestore gsave 10 dict begin 1109 697 moveto (dn) [6.96 6.96] xshow 1068 681 moveto (unregister_watch) [6.96 6.96 4.56 6.24 6.96 3.84 5.52 3.84 6.24 4.56 6.96 10.08 6.24 3.84 6.24 6.96] xshow end grestore % i_cn_rs_rs_rs -> i_cn_rs_rs_rs newpath 817 1149 moveto 835 1147 851 1151 851 1162 curveto 851 1171 841 1175 827 1175 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 827 1172 moveto 817 1175 lineto 827 1179 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 827 1172 moveto 817 1175 lineto 827 1179 lineto closepath stroke end grestore gsave 10 dict begin 851 1157 moveto (ou/oc) [6.96 6.96 3.84 6.96 6.24] xshow end grestore % i_cn_rs_rs_rs_od gsave 10 dict begin filled 0.333 1.000 1.000 nodecolor 782 1058 62 18 ellipse_path fill 0.000 0.000 0.000 nodecolor 782 1058 62 18 ellipse_path stroke gsave 10 dict begin 733 1053 moveto (i_cn_rs_rs_rs_od) [3.84 6.96 6.24 6.96 6.96 4.56 5.52 6.96 4.56 5.52 6.96 4.56 5.52 6.96 6.96 6.96] xshow end grestore end grestore % i_cn_rs_rs_rs -> i_cn_rs_rs_rs_od newpath 782 1144 moveto 782 1128 782 1105 782 1086 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 786 1086 moveto 782 1076 lineto 779 1086 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 786 1086 moveto 782 1076 lineto 779 1086 lineto closepath stroke end grestore gsave 10 dict begin 801 1113 moveto (od/or) [6.96 6.96 3.84 6.96 4.56] xshow 782 1097 moveto (write_ready) [10.08 4.56 3.84 3.84 6.24 6.96 4.56 6.24 6.24 6.96 6.96] xshow end grestore % i_cn_rs_rs_rf -> i_cn_rs_rf newpath 956 729 moveto 963 724 970 717 976 710 curveto 986 697 982 688 996 678 curveto 1010 666 1029 658 1046 653 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 1047 656 moveto 1056 650 lineto 1045 650 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 1047 656 moveto 1056 650 lineto 1045 650 lineto closepath stroke end grestore gsave 10 dict begin 1021 697 moveto (rs) [4.56 5.52] xshow 996 681 moveto (clear_store) [6.24 3.84 6.24 6.24 4.56 6.96 5.52 3.84 6.96 4.56 6.24] xshow end grestore % i_cn_rs_rs_rf -> i_cn_rs_dn_rs newpath 943 728 moveto 951 708 962 673 962 642 curveto 962 642 962 642 962 330 curveto 962 300 944 271 928 251 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 931 249 moveto 922 243 lineto 925 253 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 931 249 moveto 922 243 lineto 925 253 lineto closepath stroke end grestore gsave 10 dict begin 961 481 moveto (dn) [6.96 6.96] xshow end grestore % i_cn_rs_rs_rf -> i_cn_rs_rs_rf newpath 971 733 moveto 989 731 1005 735 1005 746 curveto 1005 755 995 759 981 759 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 981 756 moveto 971 759 lineto 981 763 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 981 756 moveto 971 759 lineto 981 763 lineto closepath stroke end grestore gsave 10 dict begin 1004 741 moveto (od/or/oc) [6.96 6.96 3.84 6.96 4.56 3.84 6.96 6.24] xshow end grestore % i_cn_rs_rf_rs -> i_cn_dn_rs_rs newpath 1360 520 moveto 1357 499 1354 464 1354 434 curveto 1354 434 1354 434 1354 122 curveto 1354 96 1354 67 1354 46 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 1358 46 moveto 1354 36 lineto 1351 46 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 1358 46 moveto 1354 36 lineto 1351 46 lineto closepath stroke end grestore gsave 10 dict begin 1353 273 moveto (dn) [6.96 6.96] xshow end grestore % i_cn_rs_rf_rs_rs gsave 10 dict begin filled 0.000 1.000 1.000 nodecolor 1441 434 59 18 ellipse_path fill 0.000 0.000 0.000 nodecolor 1441 434 59 18 ellipse_path stroke gsave 10 dict begin 1394 429 moveto (i_cn_rs_rf_rs_rs) [3.84 6.96 6.24 6.96 6.96 4.56 5.52 6.96 4.56 4.56 6.96 4.56 5.52 6.96 4.56 5.52] xshow end grestore end grestore % i_cn_rs_rf_rs -> i_cn_rs_rf_rs_rs newpath 1375 520 moveto 1388 504 1407 479 1422 460 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 1425 462 moveto 1428 452 lineto 1419 458 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 1425 462 moveto 1428 452 lineto 1419 458 lineto closepath stroke end grestore gsave 10 dict begin 1412 481 moveto (rs) [4.56 5.52] xshow end grestore % i_cn_rs_rs_rs_od -> i_cn_rs_rs_dn newpath 762 1041 moveto 728 1010 662 942 641 868 curveto 637 852 632 845 641 832 curveto 656 812 679 833 693 814 curveto 740 753 718 546 713 470 curveto 712 445 719 437 707 416 curveto 692 388 662 365 639 350 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 640 347 moveto 630 345 lineto 637 353 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 640 347 moveto 630 345 lineto 637 353 lineto closepath stroke end grestore gsave 10 dict begin 724 689 moveto (dn) [6.96 6.96] xshow end grestore % i_cn_rs_rs_rs_od -> i_cn_rs_rs_rf newpath 832 1047 moveto 847 1042 863 1034 875 1022 curveto 942 955 942 830 939 774 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 942 774 moveto 938 764 lineto 936 774 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 942 774 moveto 938 764 lineto 936 774 lineto closepath stroke end grestore gsave 10 dict begin 976 905 moveto (rf) [4.56 4.56] xshow 933 889 moveto (unregister_watch) [6.96 6.96 4.56 6.24 6.96 3.84 5.52 3.84 6.24 4.56 6.96 10.08 6.24 3.84 6.24 6.96] xshow end grestore % i_cn_rs_rs_rs_od -> i_cn_rs_rs_rs_od newpath 825 1045 moveto 844 1043 862 1048 862 1058 curveto 862 1066 850 1071 835 1071 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 835 1068 moveto 825 1071 lineto 835 1075 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 835 1068 moveto 825 1071 lineto 835 1075 lineto closepath stroke end grestore gsave 10 dict begin 861 1053 moveto (od/or/oc) [6.96 6.96 3.84 6.96 4.56 3.84 6.96 6.24] xshow end grestore % i_cn_rs_rs_rs_od_rs gsave 10 dict begin filled 0.333 1.000 1.000 nodecolor 782 954 70 18 ellipse_path fill 0.000 0.000 0.000 nodecolor 782 954 70 18 ellipse_path stroke gsave 10 dict begin 724 949 moveto (i_cn_rs_rs_rs_od_rs) [3.84 6.96 6.24 6.96 6.96 4.56 5.52 6.96 4.56 5.52 6.96 4.56 5.52 6.96 6.96 6.96 6.96 4.56 5.52] xshow end grestore end grestore % i_cn_rs_rs_rs_od -> i_cn_rs_rs_rs_od_rs newpath 782 1040 moveto 782 1024 782 1001 782 982 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 786 982 moveto 782 972 lineto 779 982 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 786 982 moveto 782 972 lineto 779 982 lineto closepath stroke end grestore gsave 10 dict begin 820 1009 moveto (rs) [4.56 5.52] xshow 781 993 moveto (test_other_state) [3.84 6.24 5.52 3.84 6.96 6.96 3.84 6.96 6.24 4.56 6.96 5.52 3.84 6.24 3.84 6.24] xshow end grestore % i_cn_rs_rf_rs_rs -> i newpath 1441 452 moveto 1441 473 1441 508 1441 538 curveto 1441 1478 1441 1478 1441 1478 curveto 1441 1504 1441 1533 1441 1554 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 1438 1554 moveto 1441 1564 lineto 1445 1554 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 1438 1554 moveto 1441 1564 lineto 1445 1554 lineto closepath stroke end grestore gsave 10 dict begin 1492 1009 moveto (dn) [6.96 6.96] xshow 1441 993 moveto (complete_disconnect) [6.24 6.96 10.8 6.96 3.84 6.24 3.84 6.24 6.96 6.96 3.84 5.52 6.24 6.96 6.96 6.96 6.24 6.24 3.84] xshow end grestore % i_cn_rs_rs_rs_od_rs -> i_cn_rs_dn_rs newpath 827 940 moveto 839 935 852 927 861 918 curveto 877 900 875 891 882 868 curveto 892 831 904 818 891 782 curveto 887 772 880 773 876 764 curveto 846 699 856 676 850 606 curveto 847 575 849 568 849 538 curveto 849 538 849 538 849 330 curveto 849 300 868 271 884 251 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 887 253 moveto 890 243 lineto 881 249 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 887 253 moveto 890 243 lineto 881 249 lineto closepath stroke end grestore gsave 10 dict begin 891 593 moveto (dn) [6.96 6.96] xshow 850 577 moveto (unregister_watch) [6.96 6.96 4.56 6.24 6.96 3.84 5.52 3.84 6.24 4.56 6.96 10.08 6.24 3.84 6.24 6.96] xshow end grestore % i_cn_rs_rs_rs_od_rs -> i_cn_rs_rs_rs_od_rs newpath 829 941 moveto 851 939 870 944 870 954 curveto 870 962 856 967 839 967 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 839 964 moveto 829 967 lineto 839 971 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 839 964 moveto 829 967 lineto 839 971 lineto closepath stroke end grestore gsave 10 dict begin 869 949 moveto (od) [6.96 6.96] xshow end grestore % i_cn_rs_rs_rs_od_rs_or gsave 10 dict begin filled 0.333 1.000 1.000 nodecolor 729 850 79 18 ellipse_path fill 0.000 0.000 0.000 nodecolor 729 850 79 18 ellipse_path stroke gsave 10 dict begin 662 845 moveto (i_cn_rs_rs_rs_od_rs_or) [3.84 6.96 6.24 6.96 6.96 4.56 5.52 6.96 4.56 5.52 6.96 4.56 5.52 6.96 6.96 6.96 6.96 4.56 5.52 6.96 6.96 4.56] xshow end grestore end grestore % i_cn_rs_rs_rs_od_rs -> i_cn_rs_rs_rs_od_rs_or newpath 773 936 moveto 764 920 752 896 743 877 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 746 875 moveto 738 868 lineto 740 878 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 746 875 moveto 738 868 lineto 740 878 lineto closepath stroke end grestore gsave 10 dict begin 796 905 moveto (or/oc) [6.96 4.56 3.84 6.96 6.24] xshow 764 889 moveto (write_connected) [10.08 4.56 3.84 3.84 6.24 6.96 6.24 6.96 6.96 6.96 6.24 6.24 3.84 6.24 6.96] xshow end grestore % i_cn_rs_rs_rs_od_rs_or -> i_cn_rs_rs_dn newpath 736 832 moveto 744 811 755 776 755 746 curveto 755 746 755 746 755 434 curveto 755 401 755 387 731 366 curveto 720 355 688 347 658 340 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 658 337 moveto 648 338 lineto 657 343 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 658 337 moveto 648 338 lineto 657 343 lineto closepath stroke end grestore gsave 10 dict begin 755 585 moveto (dn) [6.96 6.96] xshow end grestore % i_cn_rs_rs_rs_od_rs_or -> i_cn_rs_rs_rf newpath 750 833 moveto 769 817 799 796 827 782 curveto 845 773 866 765 885 759 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 886 762 moveto 895 756 lineto 884 756 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 886 762 moveto 895 756 lineto 884 756 lineto closepath stroke end grestore gsave 10 dict begin 870 801 moveto (rf) [4.56 4.56] xshow 827 785 moveto (unregister_watch) [6.96 6.96 4.56 6.24 6.96 3.84 5.52 3.84 6.24 4.56 6.96 10.08 6.24 3.84 6.24 6.96] xshow end grestore % i_cn_rs_rs_rs_od_rs_or -> i_cn_rs_rs_rs_od_rs_or newpath 782 837 moveto 806 836 826 840 826 850 curveto 826 859 811 863 792 863 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 792 860 moveto 782 863 lineto 792 867 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 792 860 moveto 782 863 lineto 792 867 lineto closepath stroke end grestore gsave 10 dict begin 825 845 moveto (od/or/oc) [6.96 6.96 3.84 6.96 4.56 3.84 6.96 6.24] xshow end grestore % i_cn_rs_rs_rs_od_rs_or_rs gsave 10 dict begin filled 0.333 1.000 1.000 nodecolor 549 746 88 18 ellipse_path fill 0.000 0.000 0.000 nodecolor 549 746 88 18 ellipse_path stroke gsave 10 dict begin 474 741 moveto (i_cn_rs_rs_rs_od_rs_or_rs) [3.84 6.96 6.24 6.96 6.96 4.56 5.52 6.96 4.56 5.52 6.96 4.56 5.52 6.96 6.96 6.96 6.96 4.56 5.52 6.96 6.96 4.56 6.96 4.56 5.52] xshow end grestore end grestore % i_cn_rs_rs_rs_od_rs_or -> i_cn_rs_rs_rs_od_rs_or_rs newpath 692 834 moveto 679 828 665 821 652 814 curveto 628 800 602 783 582 769 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 584 766 moveto 574 763 lineto 580 772 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 584 766 moveto 574 763 lineto 580 772 lineto closepath stroke end grestore gsave 10 dict begin 697 801 moveto (rs) [4.56 5.52] xshow 658 785 moveto (test_other_state) [3.84 6.24 5.52 3.84 6.96 6.96 3.84 6.96 6.24 4.56 6.96 5.52 3.84 6.24 3.84 6.24] xshow end grestore % i_cn_rs_rs_rs_od_rs_or_rs -> i_cn_rs_rs newpath 548 764 moveto 547 785 545 820 545 850 curveto 545 1162 545 1162 545 1162 curveto 545 1188 545 1217 545 1238 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 542 1238 moveto 545 1248 lineto 549 1238 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 542 1238 moveto 545 1248 lineto 549 1238 lineto closepath stroke end grestore gsave 10 dict begin 568 1009 moveto (od) [6.96 6.96] xshow 545 993 moveto (clear_store) [6.24 3.84 6.24 6.24 4.56 6.96 5.52 3.84 6.96 4.56 6.24] xshow end grestore % i_cn_rs_rs_rs_od_rs_or_rs -> i_cn_rs_dn_rs newpath 564 728 moveto 568 722 573 716 577 710 curveto 642 614 752 341 835 262 curveto 843 254 851 249 861 244 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 863 247 moveto 870 239 lineto 860 241 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 863 247 moveto 870 239 lineto 860 241 lineto closepath stroke end grestore gsave 10 dict begin 746 489 moveto (dn) [6.96 6.96] xshow 705 473 moveto (unregister_watch) [6.96 6.96 4.56 6.24 6.96 3.84 5.52 3.84 6.24 4.56 6.96 10.08 6.24 3.84 6.24 6.96] xshow end grestore % i_cn_rs_rs_rs_od_rs_or_rs -> i_cn_rs_rs_rs_od_rs_or_rs newpath 608 733 moveto 633 732 655 736 655 746 curveto 655 755 639 759 618 759 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 618 756 moveto 608 759 lineto 618 763 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 618 756 moveto 608 759 lineto 618 763 lineto closepath stroke end grestore gsave 10 dict begin 655 741 moveto (or) [6.96 4.56] xshow end grestore % i_cn_rs_rs_rs_od_rs_or_rs_oc gsave 10 dict begin filled 0.333 1.000 1.000 nodecolor 419 642 98 18 ellipse_path fill 0.000 0.000 0.000 nodecolor 419 642 98 18 ellipse_path stroke gsave 10 dict begin 334 637 moveto (i_cn_rs_rs_rs_od_rs_or_rs_oc) [3.84 6.96 6.24 6.96 6.96 4.56 5.52 6.96 4.56 5.52 6.96 4.56 5.52 6.96 6.96 6.96 6.96 4.56 5.52 6.96 6.96 4.56 6.96 4.56 5.52 6.96 6.96 6.24] xshow end grestore end grestore % i_cn_rs_rs_rs_od_rs_or_rs -> i_cn_rs_rs_rs_od_rs_or_rs_oc newpath 527 728 moveto 506 711 473 685 449 666 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 451 663 moveto 441 660 lineto 447 669 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 451 663 moveto 441 660 lineto 447 669 lineto closepath stroke end grestore gsave 10 dict begin 553 697 moveto (oc) [6.96 6.24] xshow 504 681 moveto (phase_two_connect) [6.96 6.96 6.24 5.52 6.24 6.96 3.84 10.08 6.96 6.96 6.24 6.96 6.96 6.96 6.24 6.24 3.84] xshow end grestore % i_cn_rs_rs_rs_od_rs_or_rs_oc -> i_cn_rs_rs newpath 422 660 moveto 431 713 455 872 455 1006 curveto 455 1162 455 1162 455 1162 curveto 455 1198 485 1227 510 1245 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 509 1248 moveto 519 1251 lineto 513 1243 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 509 1248 moveto 519 1251 lineto 513 1243 lineto closepath stroke end grestore gsave 10 dict begin 480 957 moveto (rf) [4.56 4.56] xshow 455 941 moveto (clear_store) [6.24 3.84 6.24 6.24 4.56 6.96 5.52 3.84 6.96 4.56 6.24] xshow end grestore % i_cn_rs_rs_rs_od_rs_or_rs_oc_pe gsave 10 dict begin filled 0.667 1.000 1.000 nodecolor 179 538 108 18 ellipse_path fill 0.000 0.000 0.000 nodecolor 179 538 108 18 ellipse_path stroke gsave 10 dict begin 83 533 moveto (i_cn_rs_rs_rs_od_rs_or_rs_oc_pe) [3.84 6.96 6.24 6.96 6.96 4.56 5.52 6.96 4.56 5.52 6.96 4.56 5.52 6.96 6.96 6.96 6.96 4.56 5.52 6.96 6.96 4.56 6.96 4.56 5.52 6.96 6.96 6.24 6.96 6.96 6.24] xshow end grestore end grestore % i_cn_rs_rs_rs_od_rs_or_rs_oc -> i_cn_rs_rs_rs_od_rs_or_rs_oc_pe newpath 364 627 moveto 351 622 338 615 327 606 curveto 315 595 321 584 307 574 curveto 296 565 282 559 268 553 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 269 550 moveto 258 550 lineto 267 556 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 269 550 moveto 258 550 lineto 267 556 lineto closepath stroke end grestore gsave 10 dict begin 333 585 moveto (pe/od/or/oc) [6.96 6.24 3.84 6.96 6.96 3.84 6.96 4.56 3.84 6.96 6.24] xshow end grestore % i_cn_rs_rs_rs_od_rs_or_rs_oc_dn gsave 10 dict begin filled 0.106 1.000 1.000 nodecolor 287 434 108 18 ellipse_path fill 0.000 0.000 0.000 nodecolor 287 434 108 18 ellipse_path stroke gsave 10 dict begin 191 429 moveto (i_cn_rs_rs_rs_od_rs_or_rs_oc_dn) [3.84 6.96 6.24 6.96 6.96 4.56 5.52 6.96 4.56 5.52 6.96 4.56 5.52 6.96 6.96 6.96 6.96 4.56 5.52 6.96 6.96 4.56 6.96 4.56 5.52 6.96 6.96 6.24 6.96 6.96 6.96] xshow end grestore end grestore % i_cn_rs_rs_rs_od_rs_or_rs_oc -> i_cn_rs_rs_rs_od_rs_or_rs_oc_dn newpath 416 624 moveto 411 599 400 553 379 520 curveto 363 496 340 473 320 458 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 322 455 moveto 312 452 lineto 318 461 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 322 455 moveto 312 452 lineto 318 461 lineto closepath stroke end grestore gsave 10 dict begin 400 533 moveto (dn) [6.96 6.96] xshow end grestore % i_cn_rs_rs_rs_od_rs_or_rs_oc_rs gsave 10 dict begin filled 0.333 1.000 1.000 nodecolor 545 538 106 18 ellipse_path fill 0.000 0.000 0.000 nodecolor 545 538 106 18 ellipse_path stroke gsave 10 dict begin 451 533 moveto (i_cn_rs_rs_rs_od_rs_or_rs_oc_rs) [3.84 6.96 6.24 6.96 6.96 4.56 5.52 6.96 4.56 5.52 6.96 4.56 5.52 6.96 6.96 6.96 6.96 4.56 5.52 6.96 6.96 4.56 6.96 4.56 5.52 6.96 6.96 6.24 6.96 4.56 5.52] xshow end grestore end grestore % i_cn_rs_rs_rs_od_rs_or_rs_oc -> i_cn_rs_rs_rs_od_rs_or_rs_oc_rs newpath 440 624 moveto 460 607 492 581 515 563 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 518 565 moveto 523 556 lineto 513 560 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 518 565 moveto 523 556 lineto 513 560 lineto closepath stroke end grestore gsave 10 dict begin 501 585 moveto (rs) [4.56 5.52] xshow end grestore % i_cn_rs_rs_rs_od_rs_or_rs_oc_pe -> i_cn_rs newpath 170 556 moveto 141 618 51 825 51 1006 curveto 51 1266 51 1266 51 1266 curveto 51 1370 172 1318 274 1338 curveto 373 1356 678 1368 792 1373 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 792 1377 moveto 802 1373 lineto 792 1370 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 792 1377 moveto 802 1373 lineto 792 1370 lineto closepath stroke end grestore gsave 10 dict begin 114 957 moveto (rs) [4.56 5.52] xshow 56 941 moveto (phase_two_disconnect) [6.96 6.96 6.24 5.52 6.24 6.96 3.84 10.08 6.96 6.96 6.96 3.84 5.52 6.24 6.96 6.96 6.96 6.24 6.24 3.84] xshow end grestore % i_cn_rs_rs_rs_od_rs_or_rs_oc_pe -> i_cn_rs_rs newpath 191 556 moveto 217 596 280 694 323 782 curveto 356 848 360 866 385 936 curveto 397 966 409 973 409 1006 curveto 409 1162 409 1162 409 1162 curveto 409 1219 443 1239 493 1257 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 492 1261 moveto 503 1261 lineto 495 1254 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 492 1261 moveto 503 1261 lineto 495 1254 lineto closepath stroke end grestore gsave 10 dict begin 406 905 moveto (rf) [4.56 4.56] xshow 381 889 moveto (clear_store) [6.24 3.84 6.24 6.24 4.56 6.96 5.52 3.84 6.96 4.56 6.24] xshow end grestore % i_cn_rs_rs_rs_od_rs_or_rs_oc_pe -> i_cn_rs_rs_rs_od_rs_or_rs_oc_pe newpath 251 525 moveto 280 524 305 528 305 538 curveto 305 547 286 551 261 551 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 261 548 moveto 251 551 lineto 261 555 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 261 548 moveto 251 551 lineto 261 555 lineto closepath stroke end grestore gsave 10 dict begin 305 533 moveto (pe/od/or/oc) [6.96 6.24 3.84 6.96 6.96 3.84 6.96 4.56 3.84 6.96 6.24] xshow end grestore % i_cn_rs_rs_rs_od_rs_or_rs_oc_pe -> i_cn_rs_rs_rs_od_rs_or_rs_oc_dn newpath 198 520 moveto 216 503 242 478 261 459 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 263 462 moveto 268 452 lineto 258 457 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 263 462 moveto 268 452 lineto 258 457 lineto closepath stroke end grestore gsave 10 dict begin 250 481 moveto (dn) [6.96 6.96] xshow end grestore % i_cn_rs_rs_rs_od_rs_or_rs_oc_dn -> i_cn_rs_dn_rs newpath 298 416 moveto 308 401 323 380 339 366 curveto 378 333 393 330 440 312 curveto 609 245 660 245 843 228 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 843 231 moveto 853 227 lineto 843 225 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 843 231 moveto 853 227 lineto 843 225 lineto closepath stroke end grestore gsave 10 dict begin 483 333 moveto (rf) [4.56 4.56] xshow 440 317 moveto (unregister_watch) [6.96 6.96 4.56 6.24 6.96 3.84 5.52 3.84 6.24 4.56 6.96 10.08 6.24 3.84 6.24 6.96] xshow end grestore % i_cn_rs_rs_rs_od_rs_or_rs_oc_dn -> i_cn_rs_rs_dn newpath 313 416 moveto 338 401 376 379 411 366 curveto 453 351 502 342 539 336 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 539 339 moveto 549 335 lineto 539 333 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 539 339 moveto 549 335 lineto 539 333 lineto closepath stroke end grestore gsave 10 dict begin 469 385 moveto (rs) [4.56 5.52] xshow 411 369 moveto (phase_two_disconnect) [6.96 6.96 6.24 5.52 6.24 6.96 3.84 10.08 6.96 6.96 6.96 3.84 5.52 6.24 6.96 6.96 6.96 6.24 6.24 3.84] xshow end grestore % i_cn_rs_rs_rs_od_rs_or_rs_oc_dn -> i_cn_rs_rs_rs_od_rs_or_rs_oc_dn newpath 359 421 moveto 388 420 413 424 413 434 curveto 413 443 394 447 369 447 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 369 444 moveto 359 447 lineto 369 451 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 369 444 moveto 359 447 lineto 369 451 lineto closepath stroke end grestore gsave 10 dict begin 413 429 moveto (pe/od/or/oc) [6.96 6.24 3.84 6.96 6.96 3.84 6.96 4.56 3.84 6.96 6.24] xshow end grestore % i_cn_rs_rs_rs_od_rs_or_rs_oc_rs -> i_cn_rs newpath 553 556 moveto 567 590 591 666 553 710 curveto 539 727 475 722 452 728 curveto 376 746 339 726 282 782 curveto 208 854 215 902 215 1006 curveto 215 1266 215 1266 215 1266 curveto 215 1325 651 1361 792 1371 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 792 1374 moveto 802 1372 lineto 792 1368 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 792 1374 moveto 802 1372 lineto 792 1368 lineto closepath stroke end grestore gsave 10 dict begin 247 957 moveto (pe/od/or/oc) [6.96 6.24 3.84 6.96 6.96 3.84 6.96 4.56 3.84 6.96 6.24] xshow 216 941 moveto (phase_two_disconnect) [6.96 6.96 6.24 5.52 6.24 6.96 3.84 10.08 6.96 6.96 6.96 3.84 5.52 6.24 6.96 6.96 6.96 6.24 6.24 3.84] xshow end grestore % i_cn_rs_rs_rs_od_rs_or_rs_oc_rs -> i_cn_rs_rs_dn newpath 549 520 moveto 555 496 565 452 575 416 curveto 581 396 587 375 592 358 curveto stroke gsave 10 dict begin solid 1 setlinewidth 0.000 0.000 0.000 edgecolor newpath 595 359 moveto 595 348 lineto 589 357 lineto closepath fill 0.000 0.000 0.000 edgecolor newpath 595 359 moveto 595 348 lineto 589 357 lineto closepath stroke end grestore gsave 10 dict begin 631 437 moveto (dn) [6.96 6.96] xshow 575 421 moveto (phase_two_disconnect) [6.96 6.96 6.24 5.52 6.24 6.96 3.84 10.08 6.96 6.96 6.96 3.84 5.52 6.24 6.96 6.96 6.96 6.24 6.24 3.84] xshow end grestore endpage showpage grestore %%PageTrailer %%EndPage: 1 %%Trailer %%Pages: 1 end restore %%EOF --=-p2dWa7RAVcOYyDgd3tTz Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --=-p2dWa7RAVcOYyDgd3tTz--