<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<diagram program="umlet" version="14.2">
  <zoom_level>10</zoom_level>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>160</x>
      <y>60</y>
      <w>180</w>
      <h>90</h>
    </coordinates>
    <panel_attributes>Find the latest validated ledger index. Call this value A.
style=wordwrap</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>50</x>
      <y>50</y>
      <w>130</w>
      <h>70</h>
    </coordinates>
    <panel_attributes>lt=&lt;-</panel_attributes>
    <additional_attributes>110.0;50.0;10.0;50.0;10.0;10.0</additional_attributes>
  </element>
  <element>
    <id>UMLSpecialState</id>
    <coordinates>
      <x>50</x>
      <y>40</y>
      <w>20</w>
      <h>20</h>
    </coordinates>
    <panel_attributes>type=initial</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>390</x>
      <y>50</y>
      <w>180</w>
      <h>110</h>
    </coordinates>
    <panel_attributes>Construct transaction JSON including Sequence and LastLedgerSequence.
(LastLedgerSequence is &gt; A)
style=wordwrap</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>330</x>
      <y>90</y>
      <w>80</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>lt=&lt;-</panel_attributes>
    <additional_attributes>60.0;10.0;10.0;10.0</additional_attributes>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>560</x>
      <y>90</y>
      <w>70</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>lt=&lt;-</panel_attributes>
    <additional_attributes>50.0;10.0;10.0;10.0</additional_attributes>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>610</x>
      <y>80</y>
      <w>180</w>
      <h>50</h>
    </coordinates>
    <panel_attributes>Sign transaction.
style=wordwrap</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>840</x>
      <y>50</y>
      <w>180</w>
      <h>130</h>
    </coordinates>
    <panel_attributes>Save transaction to persistent storage. Be sure to include the hash, Sequence, LastLedgerSequence, and the validated ledger index.
style=wordwrap</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>780</x>
      <y>90</y>
      <w>80</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>lt=&lt;-</panel_attributes>
    <additional_attributes>60.0;10.0;10.0;10.0</additional_attributes>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>1010</x>
      <y>90</y>
      <w>80</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>lt=&lt;-</panel_attributes>
    <additional_attributes>60.0;10.0;10.0;10.0</additional_attributes>
  </element>
  <element>
    <id>Text</id>
    <coordinates>
      <x>10</x>
      <y>10</y>
      <w>160</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>New transaction
style=wordwrap</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>1070</x>
      <y>80</y>
      <w>180</w>
      <h>50</h>
    </coordinates>
    <panel_attributes>Submit transaction.
style=wordwrap</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLTimer</id>
    <coordinates>
      <x>1080</x>
      <y>230</y>
      <w>140</w>
      <h>90</h>
    </coordinates>
    <panel_attributes>Wait ~4s for next
validated ledger</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>90</x>
      <y>530</y>
      <w>180</w>
      <h>50</h>
    </coordinates>
    <panel_attributes>Check status of transaction by hash.
style=wordwrap</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLSpecialState</id>
    <coordinates>
      <x>370</x>
      <y>530</y>
      <w>40</w>
      <h>40</h>
    </coordinates>
    <panel_attributes>type=decision</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>260</x>
      <y>540</y>
      <w>130</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>lt=&lt;-</panel_attributes>
    <additional_attributes>110.0;10.0;10.0;10.0</additional_attributes>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>400</x>
      <y>530</y>
      <w>240</w>
      <h>60</h>
    </coordinates>
    <panel_attributes>lt=&lt;-
[transaction not found,
or is found in a
non-validated ledger]</panel_attributes>
    <additional_attributes>220.0;20.0;10.0;20.0</additional_attributes>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>160</x>
      <y>560</y>
      <w>250</w>
      <h>120</h>
    </coordinates>
    <panel_attributes>lt=&lt;-
[transaction is 
in a validated ledger]</panel_attributes>
    <additional_attributes>10.0;100.0;10.0;60.0;230.0;60.0;230.0;10.0</additional_attributes>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>90</x>
      <y>660</y>
      <w>180</w>
      <h>50</h>
    </coordinates>
    <panel_attributes>Save final outcome to persistent storage.
style=wordwrap</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLSpecialState</id>
    <coordinates>
      <x>160</x>
      <y>740</y>
      <w>20</w>
      <h>20</h>
    </coordinates>
    <panel_attributes>type=final</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>160</x>
      <y>700</y>
      <w>30</w>
      <h>60</h>
    </coordinates>
    <panel_attributes>lt=&lt;-</panel_attributes>
    <additional_attributes>10.0;40.0;10.0;10.0</additional_attributes>
  </element>
  <element>
    <id>Text</id>
    <coordinates>
      <x>150</x>
      <y>760</y>
      <w>60</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>Done
style=wordwrap</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLSpecialState</id>
    <coordinates>
      <x>620</x>
      <y>530</y>
      <w>40</w>
      <h>40</h>
    </coordinates>
    <panel_attributes>type=decision</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>630</x>
      <y>240</y>
      <w>640</w>
      <h>310</h>
    </coordinates>
    <panel_attributes>lt=&lt;-
r2=[latest validated ledger \nis &lt; LastLedgerSequence]
r2pos=20,5</panel_attributes>
    <additional_attributes>550.0;10.0;620.0;10.0;620.0;270.0;10.0;270.0;10.0;290.0</additional_attributes>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>650</x>
      <y>540</y>
      <w>240</w>
      <h>50</h>
    </coordinates>
    <panel_attributes>lt=&lt;-
r1=[latest validated ledger \nis ≥ LastLedgerSequence]
r1pos=-10,30</panel_attributes>
    <additional_attributes>220.0;10.0;10.0;10.0</additional_attributes>
  </element>
  <element>
    <id>UMLSpecialState</id>
    <coordinates>
      <x>870</x>
      <y>530</y>
      <w>40</w>
      <h>40</h>
    </coordinates>
    <panel_attributes>type=decision</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>420</x>
      <y>560</y>
      <w>490</w>
      <h>160</h>
    </coordinates>
    <panel_attributes>lt=&lt;-
[server has continuous ledger history 
from A to LastLedgerSequence, inclusive]
</panel_attributes>
    <additional_attributes>10.0;140.0;10.0;90.0;470.0;90.0;470.0;10.0</additional_attributes>
  </element>
  <element>
    <id>UMLSpecialState</id>
    <coordinates>
      <x>630</x>
      <y>710</y>
      <w>40</w>
      <h>40</h>
    </coordinates>
    <panel_attributes>type=decision</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>520</x>
      <y>720</y>
      <w>130</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>lt=&lt;-</panel_attributes>
    <additional_attributes>110.0;10.0;10.0;10.0</additional_attributes>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>900</x>
      <y>530</y>
      <w>230</w>
      <h>130</h>
    </coordinates>
    <panel_attributes>lt=&lt;-
[server does not 
have continuous 
ledger history 
from A to 
LastLedgerSequence 
(inclusive)]
</panel_attributes>
    <additional_attributes>210.0;20.0;10.0;20.0</additional_attributes>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>1110</x>
      <y>530</y>
      <w>180</w>
      <h>60</h>
    </coordinates>
    <panel_attributes>Wait for gaps to fill in or ask a different server.
style=wordwrap</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>1240</x>
      <y>240</y>
      <w>90</w>
      <h>330</h>
    </coordinates>
    <panel_attributes>lt=&lt;-</panel_attributes>
    <additional_attributes>10.0;10.0;70.0;10.0;70.0;310.0;50.0;310.0</additional_attributes>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>350</x>
      <y>700</y>
      <w>180</w>
      <h>70</h>
    </coordinates>
    <panel_attributes>Look up account Sequence number in latest validated ledger.
style=wordwrap</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>240</x>
      <y>740</y>
      <w>430</w>
      <h>140</h>
    </coordinates>
    <panel_attributes>lt=&lt;-
[Account Sequence is 
less than or equal to
transaction Sequence]</panel_attributes>
    <additional_attributes>10.0;120.0;10.0;70.0;410.0;70.0;410.0;10.0</additional_attributes>
  </element>
  <element>
    <id>UMLSpecialState</id>
    <coordinates>
      <x>690</x>
      <y>880</y>
      <w>20</w>
      <h>20</h>
    </coordinates>
    <panel_attributes>type=flow_final</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>200</x>
      <y>860</y>
      <w>180</w>
      <h>80</h>
    </coordinates>
    <panel_attributes>Transaction has not been included in any validated ledger and never will be.
style=wordwrap</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>450</x>
      <y>870</y>
      <w>180</w>
      <h>50</h>
    </coordinates>
    <panel_attributes>Save final outcome to persistent storage.
style=wordwrap</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>370</x>
      <y>880</y>
      <w>100</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>lt=&lt;-</panel_attributes>
    <additional_attributes>80.0;10.0;10.0;10.0</additional_attributes>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>620</x>
      <y>880</y>
      <w>90</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>lt=&lt;-</panel_attributes>
    <additional_attributes>70.0;10.0;10.0;10.0</additional_attributes>
  </element>
  <element>
    <id>Text</id>
    <coordinates>
      <x>680</x>
      <y>900</y>
      <w>60</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>Done
style=wordwrap</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLSpecialState</id>
    <coordinates>
      <x>50</x>
      <y>220</y>
      <w>20</w>
      <h>20</h>
    </coordinates>
    <panel_attributes>type=initial</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>Text</id>
    <coordinates>
      <x>10</x>
      <y>190</y>
      <w>190</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>Recover from outage
style=wordwrap</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>660</x>
      <y>710</y>
      <w>240</w>
      <h>60</h>
    </coordinates>
    <panel_attributes>lt=&lt;-
[Account Sequence is
greater than transaction 
Sequence]</panel_attributes>
    <additional_attributes>220.0;20.0;10.0;20.0</additional_attributes>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>880</x>
      <y>700</y>
      <w>180</w>
      <h>80</h>
    </coordinates>
    <panel_attributes>Unknown transaction has been validated. Manual intervention recommended.
style=wordwrap</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>160</x>
      <y>240</y>
      <w>180</w>
      <h>80</h>
    </coordinates>
    <panel_attributes>Check persistent storage for transactions without a final outcome saved.
style=wordwrap</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>50</x>
      <y>230</y>
      <w>130</w>
      <h>60</h>
    </coordinates>
    <panel_attributes>lt=&lt;-</panel_attributes>
    <additional_attributes>110.0;40.0;10.0;40.0;10.0;10.0</additional_attributes>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>330</x>
      <y>260</y>
      <w>100</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>lt=&lt;-</panel_attributes>
    <additional_attributes>80.0;10.0;10.0;10.0</additional_attributes>
  </element>
  <element>
    <id>UMLSpecialState</id>
    <coordinates>
      <x>410</x>
      <y>250</y>
      <w>40</w>
      <h>40</h>
    </coordinates>
    <panel_attributes>type=decision</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>420</x>
      <y>280</y>
      <w>150</w>
      <h>130</h>
    </coordinates>
    <panel_attributes>lt=&lt;-
[final outcomes of
all transactions
are recorded]</panel_attributes>
    <additional_attributes>10.0;110.0;10.0;10.0</additional_attributes>
  </element>
  <element>
    <id>Text</id>
    <coordinates>
      <x>410</x>
      <y>410</y>
      <w>60</w>
      <h>30</h>
    </coordinates>
    <panel_attributes>Done
style=wordwrap</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>UMLSpecialState</id>
    <coordinates>
      <x>420</x>
      <y>390</y>
      <w>20</w>
      <h>20</h>
    </coordinates>
    <panel_attributes>type=final</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>440</x>
      <y>250</y>
      <w>230</w>
      <h>60</h>
    </coordinates>
    <panel_attributes>lt=&lt;-
[final outcomes of
some transactions
are not recorded]</panel_attributes>
    <additional_attributes>210.0;20.0;10.0;20.0</additional_attributes>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>1140</x>
      <y>120</y>
      <w>30</w>
      <h>130</h>
    </coordinates>
    <panel_attributes>lt=&lt;-</panel_attributes>
    <additional_attributes>10.0;110.0;10.0;10.0</additional_attributes>
  </element>
  <element>
    <id>UMLClass</id>
    <coordinates>
      <x>650</x>
      <y>220</y>
      <w>180</w>
      <h>100</h>
    </coordinates>
    <panel_attributes>Repeat the following steps for each transaction without a final outcome recorded.
style=wordwrap</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>850</x>
      <y>310</y>
      <w>320</w>
      <h>160</h>
    </coordinates>
    <panel_attributes>lt=&lt;-</panel_attributes>
    <additional_attributes>10.0;140.0;300.0;140.0;300.0;10.0</additional_attributes>
  </element>
  <element>
    <id>UMLNote</id>
    <coordinates>
      <x>1080</x>
      <y>700</y>
      <w>230</w>
      <h>230</h>
    </coordinates>
    <panel_attributes>bg=yellow
transparency=0
style=wordwrap
Some reasons an unknown transaction may have been validated:
- The transaction was malleable and succeeded with a different hash.
- A different program or person with your secret key is also sending transactions from the same account.
- You previously sent a transaction, but lost your record of it.</panel_attributes>
    <additional_attributes/>
  </element>
  <element>
    <id>Relation</id>
    <coordinates>
      <x>50</x>
      <y>260</y>
      <w>830</w>
      <h>310</h>
    </coordinates>
    <panel_attributes>lt=&lt;-</panel_attributes>
    <additional_attributes>40.0;290.0;10.0;290.0;10.0;190.0;810.0;190.0;810.0;10.0;780.0;10.0</additional_attributes>
  </element>
</diagram>
