digraph G { initial[label="", shape="circle", xlabel="pay merchant"]; pending_dp[label="claim-proposal"]; pending_sp[label="submit-payment"]; pending_ar[label="auto-refund"]; pending_re[label="rebind-session"]; pending_cr[label="check-refund"]; pending_accept_refunds[label="accept-refund"]; aborting_pi[label="payment-incomplete", style=dashed]; aborted[label="aborted", shape="box", style=dashed]; dialog_proposal[label="dialog(merchant-order-proposed)", shape="box"]; done[label="done", shape="box"]; subgraph { rank=same; done; aborted; pending_re; } subgraph { pending_ar; pending_sp; } initial -> pending_dp; pending_dp -> dialog_proposal [color=green]; dialog_proposal -> pending_sp [color=blue]; pending_sp -> pending_ar [color=green]; pending_sp -> aborting_pi [color=blue,style=dashed]; aborting_pi->done [color=red]; aborting_pi->aborted [color=green]; pending_ar -> done [color=green, label="time over"]; pending_ar -> pending_accept_refunds; done -> pending_cr [color=blue]; done -> pending_re [color=blue]; pending_cr -> done [color=green]; pending_cr -> pending_accept_refunds [color=green]; pending_accept_refunds -> done [color=green]; pending_re -> done [color=green]; }