<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
 "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
 -->
<!-- Title: UmlClassDiagram Pages: 1 -->
<svg width="5450pt" height="2213pt"
 viewBox="0.00 0.00 5450.05 2213.40" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 2209.4)">
<title>UmlClassDiagram</title>
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-2209.4 5446.0461,-2209.4 5446.0461,4 -4,4"/>
<!-- 0 -->
<g id="node1" class="node">
<title>0</title>
<polygon fill="#f2f2f2" stroke="#000000" points="1118.7329,-1563.3 1118.7329,-1704.9 1417.3887,-1704.9 1417.3887,-1563.3 1118.7329,-1563.3"/>
<text text-anchor="middle" x="1268.0608" y="-1688.3" font-family="Times,serif" font-size="14.00" fill="#000000">&lt;&lt;Interface&gt;&gt;</text>
<text text-anchor="middle" x="1268.0608" y="-1671.5" font-family="Times,serif" font-size="14.00" fill="#000000">IArbToken</text>
<polyline fill="none" stroke="#000000" points="1118.7329,-1663.3 1417.3887,-1663.3 "/>
<text text-anchor="middle" x="1268.0608" y="-1646.7" font-family="Times,serif" font-size="14.00" fill="#000000"> </text>
<polyline fill="none" stroke="#000000" points="1118.7329,-1638.5 1417.3887,-1638.5 "/>
<text text-anchor="start" x="1126.7329" y="-1621.9" font-family="Times,serif" font-size="14.00" fill="#000000">External:</text>
<text text-anchor="start" x="1126.7329" y="-1605.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&#160;bridgeMint(account: address, amount: uint256)</text>
<text text-anchor="start" x="1126.7329" y="-1588.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&#160;bridgeBurn(account: address, amount: uint256)</text>
<text text-anchor="start" x="1126.7329" y="-1571.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&#160;l1Address(): address</text>
</g>
<!-- 1 -->
<g id="node2" class="node">
<title>1</title>
<polygon fill="#f2f2f2" stroke="#000000" points="631.1007,-786.1 631.1007,-877.3 913.0209,-877.3 913.0209,-786.1 631.1007,-786.1"/>
<text text-anchor="middle" x="772.0608" y="-860.7" font-family="Times,serif" font-size="14.00" fill="#000000">StandardArbERC20</text>
<polyline fill="none" stroke="#000000" points="631.1007,-852.5 913.0209,-852.5 "/>
<text text-anchor="middle" x="772.0608" y="-835.9" font-family="Times,serif" font-size="14.00" fill="#000000"> </text>
<polyline fill="none" stroke="#000000" points="631.1007,-827.7 913.0209,-827.7 "/>
<text text-anchor="start" x="639.1007" y="-811.1" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="639.1007" y="-794.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;bridgeInit(_l1Address: address, _data: bytes)</text>
</g>
<!-- 1&#45;&gt;0 -->
<g id="edge1" class="edge">
<title>1&#45;&gt;0</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M836.0414,-877.3262C898.7579,-920.0764 998.4576,-982.8856 1093.0608,-1020.6 1159.1576,-1046.9501 1203.8532,-1001.6511 1249.0608,-1056.6 1278.4823,-1092.3612 1275.3455,-1376.9936 1271.3118,-1532.8684"/>
<polygon fill="none" stroke="#000000" points="1260.8084,-1532.8492 1270.4757,-1563.1278 1281.8004,-1533.4293 1260.8084,-1532.8492"/>
</g>
<!-- 15 -->
<g id="node16" class="node">
<title>15</title>
<polygon fill="#f2f2f2" stroke="#000000" points="932.0562,-1183.1 932.0562,-1307.9 1240.0654,-1307.9 1240.0654,-1183.1 932.0562,-1183.1"/>
<text text-anchor="middle" x="1086.0608" y="-1291.3" font-family="Times,serif" font-size="14.00" fill="#000000">&lt;&lt;Library&gt;&gt;</text>
<text text-anchor="middle" x="1086.0608" y="-1274.5" font-family="Times,serif" font-size="14.00" fill="#000000">BytesParserWithDefault</text>
<polyline fill="none" stroke="#000000" points="932.0562,-1266.3 1240.0654,-1266.3 "/>
<text text-anchor="middle" x="1086.0608" y="-1249.7" font-family="Times,serif" font-size="14.00" fill="#000000"> </text>
<polyline fill="none" stroke="#000000" points="932.0562,-1241.5 1240.0654,-1241.5 "/>
<text text-anchor="start" x="940.0562" y="-1224.9" font-family="Times,serif" font-size="14.00" fill="#000000">Internal:</text>
<text text-anchor="start" x="940.0562" y="-1208.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;toUint8(input: bytes, defaultValue: uint8): uint8</text>
<text text-anchor="start" x="940.0562" y="-1191.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;toString(input: bytes, defaultValue: string): string</text>
</g>
<!-- 1&#45;&gt;15 -->
<g id="edge3" class="edge">
<title>1&#45;&gt;15</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M806.864,-877.5649C861.5453,-949.6258 967.982,-1089.8917 1032.478,-1174.8867"/>
<polygon fill="#000000" stroke="#000000" points="1029.7524,-1177.0849 1038.5855,-1182.9354 1035.3287,-1172.8535 1029.7524,-1177.0849"/>
</g>
<!-- 23 -->
<g id="node24" class="node">
<title>23</title>
<polygon fill="#f2f2f2" stroke="#000000" points="289.8226,-1132.7 289.8226,-1358.3 914.299,-1358.3 914.299,-1132.7 289.8226,-1132.7"/>
<text text-anchor="middle" x="602.0608" y="-1341.7" font-family="Times,serif" font-size="14.00" fill="#000000">&lt;&lt;Abstract&gt;&gt;</text>
<text text-anchor="middle" x="602.0608" y="-1324.9" font-family="Times,serif" font-size="14.00" fill="#000000">L2GatewayToken</text>
<polyline fill="none" stroke="#000000" points="289.8226,-1316.7 914.299,-1316.7 "/>
<text text-anchor="start" x="297.8226" y="-1300.1" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="297.8226" y="-1283.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;l2Gateway: address</text>
<text text-anchor="start" x="297.8226" y="-1266.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;l1Address: address</text>
<polyline fill="none" stroke="#000000" points="289.8226,-1258.3 914.299,-1258.3 "/>
<text text-anchor="start" x="297.8226" y="-1241.7" font-family="Times,serif" font-size="14.00" fill="#000000">Internal:</text>
<text text-anchor="start" x="297.8226" y="-1224.9" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;initialize(_name: string, _symbol: string, _decimals: uint8, _l2Gateway: address, _l1Counterpart: address)</text>
<text text-anchor="start" x="297.8226" y="-1208.1" font-family="Times,serif" font-size="14.00" fill="#000000">External:</text>
<text text-anchor="start" x="297.8226" y="-1191.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;bridgeMint(account: address, amount: uint256)</text>
<text text-anchor="start" x="297.8226" y="-1174.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;bridgeBurn(account: address, amount: uint256)</text>
<text text-anchor="start" x="297.8226" y="-1157.7" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="297.8226" y="-1140.9" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;modifier&gt;&gt; onlyGateway()</text>
</g>
<!-- 1&#45;&gt;23 -->
<g id="edge2" class="edge">
<title>1&#45;&gt;23</title>
<path fill="none" stroke="#000000" d="M753.2183,-877.5649C730.8413,-932.0331 692.4555,-1025.4687 659.9671,-1104.5493"/>
<polygon fill="none" stroke="#000000" points="650.2196,-1100.645 648.5316,-1132.3846 669.6442,-1108.6252 650.2196,-1100.645"/>
</g>
<!-- 2 -->
<g id="node3" class="node">
<title>2</title>
<polygon fill="#f2f2f2" stroke="#000000" points="1102.2703,-643.3 1102.2703,-1020.1 2091.8513,-1020.1 2091.8513,-643.3 1102.2703,-643.3"/>
<text text-anchor="middle" x="1597.0608" y="-1003.5" font-family="Times,serif" font-size="14.00" fill="#000000">&lt;&lt;Abstract&gt;&gt;</text>
<text text-anchor="middle" x="1597.0608" y="-986.7" font-family="Times,serif" font-size="14.00" fill="#000000">L2ArbitrumGateway</text>
<polyline fill="none" stroke="#000000" points="1102.2703,-978.5 2091.8513,-978.5 "/>
<text text-anchor="start" x="1110.2703" y="-961.9" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="1110.2703" y="-945.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;exitNum: uint256</text>
<polyline fill="none" stroke="#000000" points="1102.2703,-936.9 2091.8513,-936.9 "/>
<text text-anchor="start" x="1110.2703" y="-920.3" font-family="Times,serif" font-size="14.00" fill="#000000">Internal:</text>
<text text-anchor="start" x="1110.2703" y="-903.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;abstract&gt;&gt; handleNoContract(_l1Token: address, expectedL2Address: address, _from: address, _to: address, _amount: uint256, gatewayData: bytes): (shouldHalt: bool)</text>
<text text-anchor="start" x="1110.2703" y="-886.7" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;isSenderCounterpartGateway(): bool</text>
<text text-anchor="start" x="1110.2703" y="-869.9" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;_initialize(_l1Counterpart: address, _router: address)</text>
<text text-anchor="start" x="1110.2703" y="-853.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;createOutboundTx(_l1Token: address, _from: address, _to: address, _amount: uint256, _extraData: bytes): uint256</text>
<text text-anchor="start" x="1110.2703" y="-836.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;sendTxToL1(_from: address, _l1CallValue: uint256, _data: bytes): uint256</text>
<text text-anchor="start" x="1110.2703" y="-819.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;outboundEscrowTransfer(_l2Token: address, _from: address, _amount: uint256)</text>
<text text-anchor="start" x="1110.2703" y="-802.7" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;parseOutboundData(_data: bytes): (_from: address, _extraData: bytes)</text>
<text text-anchor="start" x="1110.2703" y="-785.9" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;inboundEscrowTransfer(_l2Address: address, _dest: address, _amount: uint256)</text>
<text text-anchor="start" x="1110.2703" y="-769.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;isSenderRouter(): bool</text>
<text text-anchor="start" x="1110.2703" y="-752.3" font-family="Times,serif" font-size="14.00" fill="#000000">External:</text>
<text text-anchor="start" x="1110.2703" y="-735.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;payable&gt;&gt; finalizeInboundTransfer(_token: address, _from: address, _to: address, _amount: uint256, _data: bytes): bytes</text>
<text text-anchor="start" x="1110.2703" y="-718.7" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="1110.2703" y="-701.9" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;payable&gt;&gt; outboundTransfer(_l1Token: address, _to: address, _amount: uint256, _data: bytes): bytes</text>
<text text-anchor="start" x="1110.2703" y="-685.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;payable&gt;&gt; outboundTransfer(_l1Token: address, _to: address, _amount: uint256, _maxGas: uint256, _gasPriceBid: uint256, _data: bytes): bytes</text>
<text text-anchor="start" x="1110.2703" y="-668.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;gasReserveIfCallRevert(): uint256</text>
<text text-anchor="start" x="1110.2703" y="-651.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;getOutboundCalldata(_token: address, _from: address, _to: address, _amount: uint256, _data: bytes): (outboundCalldata: bytes)</text>
</g>
<!-- 2&#45;&gt;0 -->
<g id="edge6" class="edge">
<title>2&#45;&gt;0</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M1347.9834,-1020.1866C1339.4761,-1031.8781 1331.7546,-1044.0244 1325.0608,-1056.6 1313.5788,-1078.171 1286.755,-1398.8299 1274.4435,-1552.7816"/>
<polygon fill="#000000" stroke="#000000" points="1270.9248,-1552.8772 1273.6182,-1563.124 1277.9026,-1553.4341 1270.9248,-1552.8772"/>
</g>
<!-- 25 -->
<g id="node26" class="node">
<title>25</title>
<polygon fill="#f2f2f2" stroke="#000000" points="1952.6866,-1124.3 1952.6866,-1366.7 2807.435,-1366.7 2807.435,-1124.3 1952.6866,-1124.3"/>
<text text-anchor="middle" x="2380.0608" y="-1350.1" font-family="Times,serif" font-size="14.00" fill="#000000">&lt;&lt;Abstract&gt;&gt;</text>
<text text-anchor="middle" x="2380.0608" y="-1333.3" font-family="Times,serif" font-size="14.00" fill="#000000">ArbitrumGateway</text>
<polyline fill="none" stroke="#000000" points="1952.6866,-1325.1 2807.435,-1325.1 "/>
<text text-anchor="middle" x="2380.0608" y="-1308.5" font-family="Times,serif" font-size="14.00" fill="#000000"> </text>
<polyline fill="none" stroke="#000000" points="1952.6866,-1300.3 2807.435,-1300.3 "/>
<text text-anchor="start" x="1960.6866" y="-1283.7" font-family="Times,serif" font-size="14.00" fill="#000000">Internal:</text>
<text text-anchor="start" x="1960.6866" y="-1266.9" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;abstract&gt;&gt; inboundEscrowTransfer(_l2Address: address, _dest: address, _amount: uint256)</text>
<text text-anchor="start" x="1960.6866" y="-1250.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;_initialize(_counterpartGateway: address, _router: address)</text>
<text text-anchor="start" x="1960.6866" y="-1233.3" font-family="Times,serif" font-size="14.00" fill="#000000">External:</text>
<text text-anchor="start" x="1960.6866" y="-1216.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;abstract&gt;&gt; outboundTransfer(_l1Token: address, _to: address, _amount: uint256, _maxGas: uint256, _gasPriceBid: uint256, _data: bytes): bytes</text>
<text text-anchor="start" x="1960.6866" y="-1199.7" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;abstract&gt;&gt; finalizeInboundTransfer(_token: address, _from: address, _to: address, _amount: uint256, _data: bytes): bytes</text>
<text text-anchor="start" x="1960.6866" y="-1182.9" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;inboundEscrowAndCall(_l2Address: address, _amount: uint256, _from: address, _to: address, _data: bytes)</text>
<text text-anchor="start" x="1960.6866" y="-1166.1" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="1960.6866" y="-1149.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;abstract&gt;&gt; gasReserveIfCallRevert(): uint256</text>
<text text-anchor="start" x="1960.6866" y="-1132.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;event&gt;&gt; TransferAndCallTriggered(success: bool, _from: address, _to: address, _amount: uint256, callHookData: bytes)</text>
</g>
<!-- 2&#45;&gt;25 -->
<g id="edge5" class="edge">
<title>2&#45;&gt;25</title>
<path fill="none" stroke="#000000" d="M1953.6195,-1020.1342C2010.987,-1050.4518 2069.3631,-1081.3024 2123.768,-1110.0543"/>
<polygon fill="none" stroke="#000000" points="2119.1262,-1119.4773 2150.5561,-1124.2113 2128.9384,-1100.9106 2119.1262,-1119.4773"/>
</g>
<!-- 27 -->
<g id="node28" class="node">
<title>27</title>
<polygon fill="#f2f2f2" stroke="#000000" points="1334.1943,-1166.3 1334.1943,-1324.7 1859.9273,-1324.7 1859.9273,-1166.3 1334.1943,-1166.3"/>
<text text-anchor="middle" x="1597.0608" y="-1308.1" font-family="Times,serif" font-size="14.00" fill="#000000">&lt;&lt;Abstract&gt;&gt;</text>
<text text-anchor="middle" x="1597.0608" y="-1291.3" font-family="Times,serif" font-size="14.00" fill="#000000">L2ArbitrumMessenger</text>
<polyline fill="none" stroke="#000000" points="1334.1943,-1283.1 1859.9273,-1283.1 "/>
<text text-anchor="start" x="1342.1943" y="-1266.5" font-family="Times,serif" font-size="14.00" fill="#000000">Internal:</text>
<text text-anchor="start" x="1342.1943" y="-1249.7" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;arbsysAddr: address</text>
<polyline fill="none" stroke="#000000" points="1334.1943,-1241.5 1859.9273,-1241.5 "/>
<text text-anchor="start" x="1342.1943" y="-1224.9" font-family="Times,serif" font-size="14.00" fill="#000000">Internal:</text>
<text text-anchor="start" x="1342.1943" y="-1208.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;sendTxToL1(_l1CallValue: uint256, _from: address, _to: address, _data: bytes): uint256</text>
<text text-anchor="start" x="1342.1943" y="-1191.3" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="1342.1943" y="-1174.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;event&gt;&gt; TxToL1(_from: address, _to: address, _id: uint256, _data: bytes)</text>
</g>
<!-- 2&#45;&gt;27 -->
<g id="edge4" class="edge">
<title>2&#45;&gt;27</title>
<path fill="none" stroke="#000000" d="M1597.0608,-1020.1342C1597.0608,-1059.7977 1597.0608,-1100.3735 1597.0608,-1135.9686"/>
<polygon fill="none" stroke="#000000" points="1586.5609,-1136.1346 1597.0608,-1166.1346 1607.5609,-1136.1346 1586.5609,-1136.1346"/>
</g>
<!-- 3 -->
<g id="node4" class="node">
<title>3</title>
<polygon fill="#f2f2f2" stroke="#000000" points="948.5746,-347.1 948.5746,-555.9 1859.547,-555.9 1859.547,-347.1 948.5746,-347.1"/>
<text text-anchor="middle" x="1404.0608" y="-539.3" font-family="Times,serif" font-size="14.00" fill="#000000">L2CustomGateway</text>
<polyline fill="none" stroke="#000000" points="948.5746,-531.1 1859.547,-531.1 "/>
<text text-anchor="start" x="956.5746" y="-514.5" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="956.5746" y="-497.7" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;l1ToL2Token: mapping(address=&gt;address)</text>
<polyline fill="none" stroke="#000000" points="948.5746,-489.5 1859.547,-489.5 "/>
<text text-anchor="start" x="956.5746" y="-472.9" font-family="Times,serif" font-size="14.00" fill="#000000">Internal:</text>
<text text-anchor="start" x="956.5746" y="-456.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;handleNoContract(_l1Token: address, expectedL2Address: address, _from: address, _to: address, _amount: uint256, gatewayData: bytes): (shouldHalt: bool)</text>
<text text-anchor="start" x="956.5746" y="-439.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;_calculateL2TokenAddress(l1ERC20: address): address</text>
<text text-anchor="start" x="956.5746" y="-422.5" font-family="Times,serif" font-size="14.00" fill="#000000">External:</text>
<text text-anchor="start" x="956.5746" y="-405.7" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;calculateL2TokenAddress(l1ERC20: address): address</text>
<text text-anchor="start" x="956.5746" y="-388.9" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;registerTokenFromL1(l1Address: address[], l2Address: address[])</text>
<text text-anchor="start" x="956.5746" y="-372.1" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="956.5746" y="-355.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;initialize(_l1Counterpart: address, _router: address)</text>
</g>
<!-- 3&#45;&gt;2 -->
<g id="edge7" class="edge">
<title>3&#45;&gt;2</title>
<path fill="none" stroke="#000000" d="M1457.1819,-556.1459C1466.7787,-575.0509 1477.0982,-595.3798 1487.6269,-616.1208"/>
<polygon fill="none" stroke="#000000" points="1478.3472,-621.0374 1501.2894,-643.0353 1497.0727,-611.5318 1478.3472,-621.0374"/>
</g>
<!-- 4 -->
<g id="node5" class="node">
<title>4</title>
<polygon fill="#f2f2f2" stroke="#000000" points="29.6132,-330.3 29.6132,-572.7 930.5084,-572.7 930.5084,-330.3 29.6132,-330.3"/>
<text text-anchor="middle" x="480.0608" y="-556.1" font-family="Times,serif" font-size="14.00" fill="#000000">L2ERC20Gateway</text>
<polyline fill="none" stroke="#000000" points="29.6132,-547.9 930.5084,-547.9 "/>
<text text-anchor="start" x="37.6132" y="-531.3" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="37.6132" y="-514.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;beaconProxyFactory: address</text>
<polyline fill="none" stroke="#000000" points="29.6132,-506.3 930.5084,-506.3 "/>
<text text-anchor="start" x="37.6132" y="-489.7" font-family="Times,serif" font-size="14.00" fill="#000000">Internal:</text>
<text text-anchor="start" x="37.6132" y="-472.9" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;_calculateL2TokenAddress(l1ERC20: address): address</text>
<text text-anchor="start" x="37.6132" y="-456.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;handleNoContract(l1ERC20: address, expectedL2Address: address, _from: address, _to: address, _amount: uint256, deployData: bytes): (shouldHalt: bool)</text>
<text text-anchor="start" x="37.6132" y="-439.3" font-family="Times,serif" font-size="14.00" fill="#000000">External:</text>
<text text-anchor="start" x="37.6132" y="-422.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;postUpgradeInit(_beaconProxyFactory: address)</text>
<text text-anchor="start" x="37.6132" y="-405.7" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;calculateL2TokenAddress(l1ERC20: address): address</text>
<text text-anchor="start" x="37.6132" y="-388.9" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="37.6132" y="-372.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;initialize(_l1Counterpart: address, _router: address, _beaconProxyFactory: address)</text>
<text text-anchor="start" x="37.6132" y="-355.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;cloneableProxyHash(): bytes32</text>
<text text-anchor="start" x="37.6132" y="-338.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;getUserSalt(l1ERC20: address): bytes32</text>
</g>
<!-- 4&#45;&gt;1 -->
<g id="edge10" class="edge">
<title>4&#45;&gt;1</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M573.2543,-572.843C626.1699,-641.7421 689.7814,-724.5677 730.5531,-777.6547"/>
<polygon fill="#000000" stroke="#000000" points="728.0286,-780.1138 736.8955,-785.9129 733.5802,-775.8501 728.0286,-780.1138"/>
</g>
<!-- 4&#45;&gt;2 -->
<g id="edge8" class="edge">
<title>4&#45;&gt;2</title>
<path fill="none" stroke="#000000" d="M836.1735,-572.7122C911.8589,-598.4737 993.2786,-626.187 1073.7217,-653.5679"/>
<polygon fill="none" stroke="#000000" points="1070.3404,-663.5085 1102.1237,-663.2353 1077.1071,-643.6286 1070.3404,-663.5085"/>
</g>
<!-- 18 -->
<g id="node19" class="node">
<title>18</title>
<polygon fill="#f2f2f2" stroke="#000000" points="0,-727.3 0,-936.1 412.1216,-936.1 412.1216,-727.3 0,-727.3"/>
<text text-anchor="middle" x="206.0608" y="-919.5" font-family="Times,serif" font-size="14.00" fill="#000000">BeaconProxyFactory</text>
<polyline fill="none" stroke="#000000" points="0,-911.3 412.1216,-911.3 "/>
<text text-anchor="start" x="8" y="-894.7" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="8" y="-877.9" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;cloneableProxyHash: bytes32</text>
<text text-anchor="start" x="8" y="-861.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;beacon: address</text>
<polyline fill="none" stroke="#000000" points="0,-852.9 412.1216,-852.9 "/>
<text text-anchor="start" x="8" y="-836.3" font-family="Times,serif" font-size="14.00" fill="#000000">External:</text>
<text text-anchor="start" x="8" y="-819.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;initialize(_beacon: address)</text>
<text text-anchor="start" x="8" y="-802.7" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;createProxy(userSalt: bytes32): address</text>
<text text-anchor="start" x="8" y="-785.9" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="8" y="-769.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;getSalt(user: address, userSalt: bytes32): bytes32</text>
<text text-anchor="start" x="8" y="-752.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;calculateExpectedAddress(user: address, userSalt: bytes32): address</text>
<text text-anchor="start" x="8" y="-735.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;calculateExpectedAddress(salt: bytes32): address</text>
</g>
<!-- 4&#45;&gt;18 -->
<g id="edge9" class="edge">
<title>4&#45;&gt;18</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M392.6121,-572.843C358.8521,-619.6881 320.4525,-672.9711 287.3039,-718.9678"/>
<polygon fill="#000000" stroke="#000000" points="284.3992,-717.012 281.392,-727.1711 290.0781,-721.1047 284.3992,-717.012"/>
</g>
<!-- 5 -->
<g id="node6" class="node">
<title>5</title>
<polygon fill="#f2f2f2" stroke="#000000" points="4069.6165,-735.7 4069.6165,-927.7 4682.5051,-927.7 4682.5051,-735.7 4069.6165,-735.7"/>
<text text-anchor="middle" x="4376.0608" y="-911.1" font-family="Times,serif" font-size="14.00" fill="#000000">L2GatewayRouter</text>
<polyline fill="none" stroke="#000000" points="4069.6165,-902.9 4682.5051,-902.9 "/>
<text text-anchor="middle" x="4376.0608" y="-886.3" font-family="Times,serif" font-size="14.00" fill="#000000"> </text>
<polyline fill="none" stroke="#000000" points="4069.6165,-878.1 4682.5051,-878.1 "/>
<text text-anchor="start" x="4077.6165" y="-861.5" font-family="Times,serif" font-size="14.00" fill="#000000">Internal:</text>
<text text-anchor="start" x="4077.6165" y="-844.7" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;isSenderCounterpartGateway(): bool</text>
<text text-anchor="start" x="4077.6165" y="-827.9" font-family="Times,serif" font-size="14.00" fill="#000000">External:</text>
<text text-anchor="start" x="4077.6165" y="-811.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;setGateway(_l1Token: address[], _gateway: address[])</text>
<text text-anchor="start" x="4077.6165" y="-794.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;setDefaultGateway(newL2DefaultGateway: address)</text>
<text text-anchor="start" x="4077.6165" y="-777.5" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="4077.6165" y="-760.7" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;payable&gt;&gt; outboundTransfer(_l1Token: address, _to: address, _amount: uint256, _data: bytes): bytes</text>
<text text-anchor="start" x="4077.6165" y="-743.9" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;initialize(_counterpartGateway: address, _defaultGateway: address)</text>
</g>
<!-- 28 -->
<g id="node29" class="node">
<title>28</title>
<polygon fill="#f2f2f2" stroke="#000000" points="3882.4608,-1057.1 3882.4608,-1433.9 4721.6608,-1433.9 4721.6608,-1057.1 3882.4608,-1057.1"/>
<text text-anchor="middle" x="4302.0608" y="-1417.3" font-family="Times,serif" font-size="14.00" fill="#000000">&lt;&lt;Abstract&gt;&gt;</text>
<text text-anchor="middle" x="4302.0608" y="-1400.5" font-family="Times,serif" font-size="14.00" fill="#000000">GatewayRouter</text>
<polyline fill="none" stroke="#000000" points="3882.4608,-1392.3 4721.6608,-1392.3 "/>
<text text-anchor="start" x="3890.4608" y="-1375.7" font-family="Times,serif" font-size="14.00" fill="#000000">Internal:</text>
<text text-anchor="start" x="3890.4608" y="-1358.9" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;ZERO_ADDR: address</text>
<text text-anchor="start" x="3890.4608" y="-1342.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;BLACKLISTED: address</text>
<text text-anchor="start" x="3890.4608" y="-1325.3" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="3890.4608" y="-1308.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;l1TokenToGateway: mapping(address=&gt;address)</text>
<text text-anchor="start" x="3890.4608" y="-1291.7" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;defaultGateway: address</text>
<polyline fill="none" stroke="#000000" points="3882.4608,-1283.5 4721.6608,-1283.5 "/>
<text text-anchor="start" x="3890.4608" y="-1266.9" font-family="Times,serif" font-size="14.00" fill="#000000">Internal:</text>
<text text-anchor="start" x="3890.4608" y="-1250.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;_initialize(_counterpartGateway: address, _defaultGateway: address)</text>
<text text-anchor="start" x="3890.4608" y="-1233.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;isSenderRouter(): bool</text>
<text text-anchor="start" x="3890.4608" y="-1216.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;_calculateL2TokenAddress(l1ERC20: address): address</text>
<text text-anchor="start" x="3890.4608" y="-1199.7" font-family="Times,serif" font-size="14.00" fill="#000000">External:</text>
<text text-anchor="start" x="3890.4608" y="-1182.9" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;payable&gt;&gt; finalizeInboundTransfer(_token: address, _from: address, _to: address, _amount: uint256, _data: bytes): bytes</text>
<text text-anchor="start" x="3890.4608" y="-1166.1" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="3890.4608" y="-1149.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;payable&gt;&gt; outboundTransfer(_token: address, _to: address, _amount: uint256, _maxGas: uint256, _gasPriceBid: uint256, _data: bytes): bytes</text>
<text text-anchor="start" x="3890.4608" y="-1132.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;event&gt;&gt; TransferRouted(token: address, _userFrom: address, _userTo: address, gateway: address)</text>
<text text-anchor="start" x="3890.4608" y="-1115.7" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;event&gt;&gt; GatewaySet(l1Token: address, gateway: address)</text>
<text text-anchor="start" x="3890.4608" y="-1098.9" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;event&gt;&gt; DefaultGatewayUpdated(newDefaultGateway: address)</text>
<text text-anchor="start" x="3890.4608" y="-1082.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;getOutboundCalldata(_token: address, _from: address, _to: address, _amount: uint256, _data: bytes): bytes</text>
<text text-anchor="start" x="3890.4608" y="-1065.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;getGateway(_token: address): (gateway: address)</text>
</g>
<!-- 5&#45;&gt;28 -->
<g id="edge11" class="edge">
<title>5&#45;&gt;28</title>
<path fill="none" stroke="#000000" d="M4358.8511,-927.9347C4353.4768,-957.9873 4347.3131,-992.4539 4341.0729,-1027.3485"/>
<polygon fill="none" stroke="#000000" points="4330.714,-1025.6283 4335.7688,-1057.0083 4351.3861,-1029.3252 4330.714,-1025.6283"/>
</g>
<!-- 6 -->
<g id="node7" class="node">
<title>6</title>
<polygon fill="#f2f2f2" stroke="#000000" points="1877.6132,-313.5 1877.6132,-589.5 2778.5084,-589.5 2778.5084,-313.5 1877.6132,-313.5"/>
<text text-anchor="middle" x="2328.0608" y="-572.9" font-family="Times,serif" font-size="14.00" fill="#000000">L2WethGateway</text>
<polyline fill="none" stroke="#000000" points="1877.6132,-564.7 2778.5084,-564.7 "/>
<text text-anchor="start" x="1885.6132" y="-548.1" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="1885.6132" y="-531.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;l1Weth: address</text>
<text text-anchor="start" x="1885.6132" y="-514.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;l2Weth: address</text>
<polyline fill="none" stroke="#000000" points="1877.6132,-506.3 2778.5084,-506.3 "/>
<text text-anchor="start" x="1885.6132" y="-489.7" font-family="Times,serif" font-size="14.00" fill="#000000">Internal:</text>
<text text-anchor="start" x="1885.6132" y="-472.9" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;handleNoContract(l1ERC20: address, expectedL2Address: address, _from: address, _to: address, _amount: uint256, deployData: bytes): (shouldHalt: bool)</text>
<text text-anchor="start" x="1885.6132" y="-456.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;_calculateL2TokenAddress(l1ERC20: address): address</text>
<text text-anchor="start" x="1885.6132" y="-439.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;outboundEscrowTransfer(_l2TokenAddress: address, _from: address, _amount: uint256)</text>
<text text-anchor="start" x="1885.6132" y="-422.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;inboundEscrowTransfer(_l2TokenAddress: address, _dest: address, _amount: uint256)</text>
<text text-anchor="start" x="1885.6132" y="-405.7" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;createOutboundTx(_l1Token: address, _from: address, _to: address, _amount: uint256, _extraData: bytes): uint256</text>
<text text-anchor="start" x="1885.6132" y="-388.9" font-family="Times,serif" font-size="14.00" fill="#000000">External:</text>
<text text-anchor="start" x="1885.6132" y="-372.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;payable&gt;&gt; null()</text>
<text text-anchor="start" x="1885.6132" y="-355.3" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="1885.6132" y="-338.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;initialize(_l1Counterpart: address, _router: address, _l1Weth: address, _l2Weth: address)</text>
<text text-anchor="start" x="1885.6132" y="-321.7" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;gasReserveIfCallRevert(): uint256</text>
</g>
<!-- 6&#45;&gt;2 -->
<g id="edge12" class="edge">
<title>6&#45;&gt;2</title>
<path fill="none" stroke="#000000" d="M2062.6024,-589.5674C2037.6711,-602.5344 2012.067,-615.8514 1986.3049,-629.2505"/>
<polygon fill="none" stroke="#000000" points="1981.1927,-620.074 1959.4224,-643.2323 1990.8828,-638.7047 1981.1927,-620.074"/>
</g>
<!-- 22 -->
<g id="node23" class="node">
<title>22</title>
<polygon fill="#f2f2f2" stroke="#000000" points="2230.6316,-769.3 2230.6316,-894.1 2425.49,-894.1 2425.49,-769.3 2230.6316,-769.3"/>
<text text-anchor="middle" x="2328.0608" y="-877.5" font-family="Times,serif" font-size="14.00" fill="#000000">&lt;&lt;Interface&gt;&gt;</text>
<text text-anchor="middle" x="2328.0608" y="-860.7" font-family="Times,serif" font-size="14.00" fill="#000000">IWETH9</text>
<polyline fill="none" stroke="#000000" points="2230.6316,-852.5 2425.49,-852.5 "/>
<text text-anchor="middle" x="2328.0608" y="-835.9" font-family="Times,serif" font-size="14.00" fill="#000000"> </text>
<polyline fill="none" stroke="#000000" points="2230.6316,-827.7 2425.49,-827.7 "/>
<text text-anchor="start" x="2238.6316" y="-811.1" font-family="Times,serif" font-size="14.00" fill="#000000">External:</text>
<text text-anchor="start" x="2238.6316" y="-794.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&#160;deposit()</text>
<text text-anchor="start" x="2238.6316" y="-777.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&#160;withdraw(_amount: uint256)</text>
</g>
<!-- 6&#45;&gt;22 -->
<g id="edge13" class="edge">
<title>6&#45;&gt;22</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M2328.0608,-589.5674C2328.0608,-646.8585 2328.0608,-710.9807 2328.0608,-758.8392"/>
<polygon fill="#000000" stroke="#000000" points="2324.5609,-759.1022 2328.0608,-769.1022 2331.5609,-759.1023 2324.5609,-759.1022"/>
</g>
<!-- 7 -->
<g id="node8" class="node">
<title>7</title>
<polygon fill="#f2f2f2" stroke="#000000" points="4543.6403,-59.3 4543.6403,-200.9 5282.4813,-200.9 5282.4813,-59.3 4543.6403,-59.3"/>
<text text-anchor="middle" x="4913.0608" y="-184.3" font-family="Times,serif" font-size="14.00" fill="#000000">&lt;&lt;Interface&gt;&gt;</text>
<text text-anchor="middle" x="4913.0608" y="-167.5" font-family="Times,serif" font-size="14.00" fill="#000000">ICustomToken</text>
<polyline fill="none" stroke="#000000" points="4543.6403,-159.3 5282.4813,-159.3 "/>
<text text-anchor="middle" x="4913.0608" y="-142.7" font-family="Times,serif" font-size="14.00" fill="#000000"> </text>
<polyline fill="none" stroke="#000000" points="4543.6403,-134.5 5282.4813,-134.5 "/>
<text text-anchor="start" x="4551.6403" y="-117.9" font-family="Times,serif" font-size="14.00" fill="#000000">External:</text>
<text text-anchor="start" x="4551.6403" y="-101.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&#160;registerTokenOnL2(l2CustomTokenAddress: address, maxSubmissionCost: uint256, maxGas: uint256, gasPriceBid: uint256)</text>
<text text-anchor="start" x="4551.6403" y="-84.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&#160;transferFrom(sender: address, recipient: address, amount: uint256): bool</text>
<text text-anchor="start" x="4551.6403" y="-67.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&#160;balanceOf(account: address): uint256</text>
</g>
<!-- 8 -->
<g id="node9" class="node">
<title>8</title>
<polygon fill="#f2f2f2" stroke="#000000" points="3556.4741,-777.7 3556.4741,-885.7 3975.6475,-885.7 3975.6475,-777.7 3556.4741,-777.7"/>
<text text-anchor="middle" x="3766.0608" y="-869.1" font-family="Times,serif" font-size="14.00" fill="#000000">&lt;&lt;Interface&gt;&gt;</text>
<text text-anchor="middle" x="3766.0608" y="-852.3" font-family="Times,serif" font-size="14.00" fill="#000000">ITradeableExitReceiver</text>
<polyline fill="none" stroke="#000000" points="3556.4741,-844.1 3975.6475,-844.1 "/>
<text text-anchor="middle" x="3766.0608" y="-827.5" font-family="Times,serif" font-size="14.00" fill="#000000"> </text>
<polyline fill="none" stroke="#000000" points="3556.4741,-819.3 3975.6475,-819.3 "/>
<text text-anchor="start" x="3564.4741" y="-802.7" font-family="Times,serif" font-size="14.00" fill="#000000">External:</text>
<text text-anchor="start" x="3564.4741" y="-785.9" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&#160;onExitTransfer(sender: address, exitNum: uint256, data: bytes): bool</text>
</g>
<!-- 9 -->
<g id="node10" class="node">
<title>9</title>
<polygon fill="#f2f2f2" stroke="#000000" points="2833.5821,-313.5 2833.5821,-589.5 3512.5395,-589.5 3512.5395,-313.5 2833.5821,-313.5"/>
<text text-anchor="middle" x="3173.0608" y="-572.9" font-family="Times,serif" font-size="14.00" fill="#000000">&lt;&lt;Abstract&gt;&gt;</text>
<text text-anchor="middle" x="3173.0608" y="-556.1" font-family="Times,serif" font-size="14.00" fill="#000000">L1ArbitrumExtendedGateway</text>
<polyline fill="none" stroke="#000000" points="2833.5821,-547.9 3512.5395,-547.9 "/>
<text text-anchor="start" x="2841.5821" y="-531.3" font-family="Times,serif" font-size="14.00" fill="#000000">Internal:</text>
<text text-anchor="start" x="2841.5821" y="-514.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;USED_ADDRESS: address</text>
<text text-anchor="start" x="2841.5821" y="-497.7" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="2841.5821" y="-480.9" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;redirectedExits: mapping(bytes32=&gt;address)</text>
<polyline fill="none" stroke="#000000" points="2833.5821,-472.7 3512.5395,-472.7 "/>
<text text-anchor="start" x="2841.5821" y="-456.1" font-family="Times,serif" font-size="14.00" fill="#000000">Internal:</text>
<text text-anchor="start" x="2841.5821" y="-439.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;_initialize(_l2Counterpart: address, _router: address, _inbox: address)</text>
<text text-anchor="start" x="2841.5821" y="-422.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;updateDestination(_exitNum: uint256, _initialDestination: address, _newDestination: address)</text>
<text text-anchor="start" x="2841.5821" y="-405.7" font-family="Times,serif" font-size="14.00" fill="#000000">External:</text>
<text text-anchor="start" x="2841.5821" y="-388.9" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;transferExitAndCall(_exitNum: uint256, _initialDestination: address, _newDestination: address, _data: bytes)</text>
<text text-anchor="start" x="2841.5821" y="-372.1" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="2841.5821" y="-355.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;event&gt;&gt; WithdrawRedirected(from: address, to: address, exitNum: uint256, data: bytes, madeExternalCall: bool)</text>
<text text-anchor="start" x="2841.5821" y="-338.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;getCurrentDestination(_exitNum: uint256, _initialDestination: address): address</text>
<text text-anchor="start" x="2841.5821" y="-321.7" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;encodeWithdrawal(_exitNum: uint256, _initialDestination: address): bytes32</text>
</g>
<!-- 9&#45;&gt;8 -->
<g id="edge15" class="edge">
<title>9&#45;&gt;8</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M3460.467,-589.5251C3490.2942,-606.49 3519.6803,-624.377 3547.0608,-642.8 3603.4548,-680.7447 3661.445,-731.3807 3703.574,-770.6755"/>
<polygon fill="#000000" stroke="#000000" points="3701.298,-773.3393 3710.9872,-777.6255 3706.0857,-768.2326 3701.298,-773.3393"/>
</g>
<!-- 10 -->
<g id="node11" class="node">
<title>10</title>
<polygon fill="#f2f2f2" stroke="#000000" points="2443.5645,-643.3 2443.5645,-1020.1 3538.5571,-1020.1 3538.5571,-643.3 2443.5645,-643.3"/>
<text text-anchor="middle" x="2991.0608" y="-1003.5" font-family="Times,serif" font-size="14.00" fill="#000000">&lt;&lt;Abstract&gt;&gt;</text>
<text text-anchor="middle" x="2991.0608" y="-986.7" font-family="Times,serif" font-size="14.00" fill="#000000">L1ArbitrumGateway</text>
<polyline fill="none" stroke="#000000" points="2443.5645,-978.5 3538.5571,-978.5 "/>
<text text-anchor="start" x="2451.5645" y="-961.9" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="2451.5645" y="-945.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;inbox: address</text>
<polyline fill="none" stroke="#000000" points="2443.5645,-936.9 3538.5571,-936.9 "/>
<text text-anchor="start" x="2451.5645" y="-920.3" font-family="Times,serif" font-size="14.00" fill="#000000">Internal:</text>
<text text-anchor="start" x="2451.5645" y="-903.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;isSenderCounterpartGateway(): bool</text>
<text text-anchor="start" x="2451.5645" y="-886.7" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;_initialize(_l2Counterpart: address, _router: address, _inbox: address)</text>
<text text-anchor="start" x="2451.5645" y="-869.9" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;inboundEscrowTransfer(_l1Token: address, _dest: address, _amount: uint256)</text>
<text text-anchor="start" x="2451.5645" y="-853.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;createOutboundTx(_l1Token: address, _from: address, _to: address, _amount: uint256, _maxGas: uint256, _gasPriceBid: uint256, _maxSubmissionCost: uint256, _extraData: bytes): uint256</text>
<text text-anchor="start" x="2451.5645" y="-836.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;sendTxToL2(_user: address, _l2CallValue: uint256, _maxSubmissionCost: uint256, _maxGas: uint256, _gasPriceBid: uint256, _data: bytes): uint256</text>
<text text-anchor="start" x="2451.5645" y="-819.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;outboundEscrowTransfer(_l1Token: address, _from: address, _amount: uint256)</text>
<text text-anchor="start" x="2451.5645" y="-802.7" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;parseOutboundData(_data: bytes): (_from: address, _maxSubmissionCost: uint256, _extraData: bytes)</text>
<text text-anchor="start" x="2451.5645" y="-785.9" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;isSenderRouter(): bool</text>
<text text-anchor="start" x="2451.5645" y="-769.1" font-family="Times,serif" font-size="14.00" fill="#000000">External:</text>
<text text-anchor="start" x="2451.5645" y="-752.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;payable&gt;&gt; finalizeInboundTransfer(_token: address, _from: address, _to: address, _amount: uint256, _data: bytes): bytes</text>
<text text-anchor="start" x="2451.5645" y="-735.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;payable&gt;&gt; outboundTransfer(_l1Token: address, _to: address, _amount: uint256, _maxGas: uint256, _gasPriceBid: uint256, _data: bytes): (res: bytes)</text>
<text text-anchor="start" x="2451.5645" y="-718.7" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="2451.5645" y="-701.9" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;gasReserveIfCallRevert(): uint256</text>
<text text-anchor="start" x="2451.5645" y="-685.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;getCurrentDestination(_exitNum: uint256, _initialDestination: address): address</text>
<text text-anchor="start" x="2451.5645" y="-668.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;parseInboundData(_data: bytes): (_exitNum: uint256, _extraData: bytes)</text>
<text text-anchor="start" x="2451.5645" y="-651.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;getOutboundCalldata(_l1Token: address, _from: address, _to: address, _amount: uint256, _data: bytes): (outboundCalldata: bytes)</text>
</g>
<!-- 9&#45;&gt;10 -->
<g id="edge14" class="edge">
<title>9&#45;&gt;10</title>
<path fill="none" stroke="#000000" d="M3106.9686,-589.5674C3102.8647,-598.1405 3098.6876,-606.8665 3094.4743,-615.668"/>
<polygon fill="none" stroke="#000000" points="3084.8409,-611.4743 3081.3584,-643.0674 3103.7825,-620.5416 3084.8409,-611.4743"/>
</g>
<!-- 10&#45;&gt;25 -->
<g id="edge17" class="edge">
<title>10&#45;&gt;25</title>
<path fill="none" stroke="#000000" d="M2712.8266,-1020.1342C2669.5539,-1049.4407 2625.5457,-1079.2452 2584.3121,-1107.1707"/>
<polygon fill="none" stroke="#000000" points="2578.3203,-1098.5472 2559.3687,-1124.0636 2590.0962,-1115.9349 2578.3203,-1098.5472"/>
</g>
<!-- 26 -->
<g id="node27" class="node">
<title>26</title>
<polygon fill="#f2f2f2" stroke="#000000" points="2825.932,-1174.7 2825.932,-1316.3 3864.1896,-1316.3 3864.1896,-1174.7 2825.932,-1174.7"/>
<text text-anchor="middle" x="3345.0608" y="-1299.7" font-family="Times,serif" font-size="14.00" fill="#000000">&lt;&lt;Abstract&gt;&gt;</text>
<text text-anchor="middle" x="3345.0608" y="-1282.9" font-family="Times,serif" font-size="14.00" fill="#000000">L1ArbitrumMessenger</text>
<polyline fill="none" stroke="#000000" points="2825.932,-1274.7 3864.1896,-1274.7 "/>
<text text-anchor="middle" x="3345.0608" y="-1258.1" font-family="Times,serif" font-size="14.00" fill="#000000"> </text>
<polyline fill="none" stroke="#000000" points="2825.932,-1249.9 3864.1896,-1249.9 "/>
<text text-anchor="start" x="2833.932" y="-1233.3" font-family="Times,serif" font-size="14.00" fill="#000000">Internal:</text>
<text text-anchor="start" x="2833.932" y="-1216.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;sendTxToL2(_inbox: address, _to: address, _user: address, _l2CallValue: uint256, _maxSubmissionCost: uint256, _maxGas: uint256, _gasPriceBid: uint256, _data: bytes): uint256</text>
<text text-anchor="start" x="2833.932" y="-1199.7" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="2833.932" y="-1182.9" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;event&gt;&gt; TxToL2(_from: address, _to: address, _seqNum: uint256, _data: bytes)</text>
</g>
<!-- 10&#45;&gt;26 -->
<g id="edge16" class="edge">
<title>10&#45;&gt;26</title>
<path fill="none" stroke="#000000" d="M3152.2636,-1020.1342C3191.196,-1065.6434 3231.1559,-1112.3536 3264.5283,-1151.3634"/>
<polygon fill="none" stroke="#000000" points="3256.6486,-1158.3049 3284.1293,-1174.2756 3272.6061,-1144.6535 3256.6486,-1158.3049"/>
</g>
<!-- 11 -->
<g id="node12" class="node">
<title>11</title>
<polygon fill="#f2f2f2" stroke="#000000" points="1678.987,-8.9 1678.987,-251.3 2607.1346,-251.3 2607.1346,-8.9 1678.987,-8.9"/>
<text text-anchor="middle" x="2143.0608" y="-234.7" font-family="Times,serif" font-size="14.00" fill="#000000">L1CustomGateway</text>
<polyline fill="none" stroke="#000000" points="1678.987,-226.5 2607.1346,-226.5 "/>
<text text-anchor="start" x="1686.987" y="-209.9" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="1686.987" y="-193.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;l1ToL2Token: mapping(address=&gt;address)</text>
<text text-anchor="start" x="1686.987" y="-176.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;owner: address</text>
<polyline fill="none" stroke="#000000" points="1678.987,-168.1 2607.1346,-168.1 "/>
<text text-anchor="start" x="1686.987" y="-151.5" font-family="Times,serif" font-size="14.00" fill="#000000">Internal:</text>
<text text-anchor="start" x="1686.987" y="-134.7" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;_calculateL2TokenAddress(l1ERC20: address): address</text>
<text text-anchor="start" x="1686.987" y="-117.9" font-family="Times,serif" font-size="14.00" fill="#000000">External:</text>
<text text-anchor="start" x="1686.987" y="-101.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;calculateL2TokenAddress(l1ERC20: address): address</text>
<text text-anchor="start" x="1686.987" y="-84.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;registerTokenToL2(_l2Address: address, _maxGas: uint256, _gasPriceBid: uint256, _maxSubmissionCost: uint256): uint256</text>
<text text-anchor="start" x="1686.987" y="-67.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;forceRegisterTokenToL2(_l1Addresses: address[], _l2Addresses: address[], _maxGas: uint256, _gasPriceBid: uint256, _maxSubmissionCost: uint256): uint256</text>
<text text-anchor="start" x="1686.987" y="-50.7" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="1686.987" y="-33.9" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;event&gt;&gt; TokenSet(l1Address: address, l2Address: address)</text>
<text text-anchor="start" x="1686.987" y="-17.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;initialize(_l1Counterpart: address, _l1Router: address, _inbox: address, _owner: address)</text>
</g>
<!-- 11&#45;&gt;3 -->
<g id="edge19" class="edge">
<title>11&#45;&gt;3</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M1864.2032,-251.3785C1795.072,-281.4445 1721.4292,-313.4726 1653.7903,-342.8896"/>
<polygon fill="#000000" stroke="#000000" points="1652.0615,-339.8248 1644.2871,-347.0227 1654.8533,-346.244 1652.0615,-339.8248"/>
</g>
<!-- 11&#45;&gt;9 -->
<g id="edge18" class="edge">
<title>11&#45;&gt;9</title>
<path fill="none" stroke="#000000" d="M2581.205,-251.3569C2593.2743,-254.376 2605.2441,-257.3298 2617.0608,-260.2 2692.1098,-278.4289 2713.1794,-273.7016 2787.0608,-296.2 2795.2801,-298.7029 2803.5689,-301.3085 2811.903,-304.0019"/>
<polygon fill="none" stroke="#000000" points="2808.5977,-313.968 2840.3784,-313.4756 2815.2271,-294.0419 2808.5977,-313.968"/>
</g>
<!-- 12 -->
<g id="node13" class="node">
<title>12</title>
<polygon fill="#f2f2f2" stroke="#000000" points="3738.1963,-.5 3738.1963,-259.7 4525.9253,-259.7 4525.9253,-.5 3738.1963,-.5"/>
<text text-anchor="middle" x="4132.0608" y="-243.1" font-family="Times,serif" font-size="14.00" fill="#000000">L1ERC20Gateway</text>
<polyline fill="none" stroke="#000000" points="3738.1963,-234.9 4525.9253,-234.9 "/>
<text text-anchor="start" x="3746.1963" y="-218.3" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="3746.1963" y="-201.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;cloneableProxyHash: bytes32</text>
<text text-anchor="start" x="3746.1963" y="-184.7" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;l2BeaconProxyFactory: address</text>
<polyline fill="none" stroke="#000000" points="3738.1963,-176.5 4525.9253,-176.5 "/>
<text text-anchor="start" x="3746.1963" y="-159.9" font-family="Times,serif" font-size="14.00" fill="#000000">Internal:</text>
<text text-anchor="start" x="3746.1963" y="-143.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;callStatic(targetContract: address, targetFunction: bytes4): bytes</text>
<text text-anchor="start" x="3746.1963" y="-126.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;_calculateL2TokenAddress(l1ERC20: address): address</text>
<text text-anchor="start" x="3746.1963" y="-109.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;getSalt(l1ERC20: address): bytes32</text>
<text text-anchor="start" x="3746.1963" y="-92.7" font-family="Times,serif" font-size="14.00" fill="#000000">External:</text>
<text text-anchor="start" x="3746.1963" y="-75.9" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;postUpgradeInit(_cloneableProxyHash: bytes32, _l2BeaconProxyFactory: address)</text>
<text text-anchor="start" x="3746.1963" y="-59.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;calculateL2TokenAddress(l1ERC20: address): address</text>
<text text-anchor="start" x="3746.1963" y="-42.3" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="3746.1963" y="-25.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;initialize(_l2Counterpart: address, _router: address, _inbox: address, _cloneableProxyHash: bytes32, _l2BeaconProxyFactory: address)</text>
<text text-anchor="start" x="3746.1963" y="-8.7" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;getOutboundCalldata(_token: address, _from: address, _to: address, _amount: uint256, _data: bytes): (outboundCalldata: bytes)</text>
</g>
<!-- 12&#45;&gt;9 -->
<g id="edge20" class="edge">
<title>12&#45;&gt;9</title>
<path fill="none" stroke="#000000" d="M3738.0838,-257.5243C3735.0654,-258.4224 3732.0573,-259.3144 3729.0608,-260.2 3669.9221,-277.678 3653.8347,-277.5321 3595.0608,-296.2 3577.4217,-301.8026 3559.4305,-307.6993 3541.3038,-313.7876"/>
<polygon fill="none" stroke="#000000" points="3537.7628,-303.9012 3512.7386,-323.4981 3544.5217,-323.7838 3537.7628,-303.9012"/>
</g>
<!-- 13 -->
<g id="node14" class="node">
<title>13</title>
<polygon fill="#f2f2f2" stroke="#000000" points="3603.8079,-296.7 3603.8079,-606.3 4480.3137,-606.3 4480.3137,-296.7 3603.8079,-296.7"/>
<text text-anchor="middle" x="4042.0608" y="-589.7" font-family="Times,serif" font-size="14.00" fill="#000000">L1GatewayRouter</text>
<polyline fill="none" stroke="#000000" points="3603.8079,-581.5 4480.3137,-581.5 "/>
<text text-anchor="start" x="3611.8079" y="-564.9" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="3611.8079" y="-548.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;owner: address</text>
<text text-anchor="start" x="3611.8079" y="-531.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;inbox: address</text>
<polyline fill="none" stroke="#000000" points="3603.8079,-523.1 4480.3137,-523.1 "/>
<text text-anchor="start" x="3611.8079" y="-506.5" font-family="Times,serif" font-size="14.00" fill="#000000">Internal:</text>
<text text-anchor="start" x="3611.8079" y="-489.7" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;sendTxToL2(_user: address, _l2CallValue: uint256, _maxSubmissionCost: uint256, _maxGas: uint256, _gasPriceBid: uint256, _data: bytes): uint256</text>
<text text-anchor="start" x="3611.8079" y="-472.9" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;_setGateways(_token: address[], _gateway: address[], _maxGas: uint256, _gasPriceBid: uint256, _maxSubmissionCost: uint256): uint256</text>
<text text-anchor="start" x="3611.8079" y="-456.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;isSenderCounterpartGateway(): bool</text>
<text text-anchor="start" x="3611.8079" y="-439.3" font-family="Times,serif" font-size="14.00" fill="#000000">External:</text>
<text text-anchor="start" x="3611.8079" y="-422.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;payable&gt;&gt; setDefaultGateway(newL1DefaultGateway: address, _maxGas: uint256, _gasPriceBid: uint256, _maxSubmissionCost: uint256): uint256</text>
<text text-anchor="start" x="3611.8079" y="-405.7" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;payable&gt;&gt; setGateway(_gateway: address, _maxGas: uint256, _gasPriceBid: uint256, _maxSubmissionCost: uint256): uint256</text>
<text text-anchor="start" x="3611.8079" y="-388.9" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;payable&gt;&gt; setGateways(_token: address[], _gateway: address[], _maxGas: uint256, _gasPriceBid: uint256, _maxSubmissionCost: uint256): uint256</text>
<text text-anchor="start" x="3611.8079" y="-372.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;setOwner(newOwner: address)</text>
<text text-anchor="start" x="3611.8079" y="-355.3" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="3611.8079" y="-338.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;payable&gt;&gt; outboundTransfer(_token: address, _to: address, _amount: uint256, _maxGas: uint256, _gasPriceBid: uint256, _data: bytes): bytes</text>
<text text-anchor="start" x="3611.8079" y="-321.7" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;modifier&gt;&gt; onlyOwner()</text>
<text text-anchor="start" x="3611.8079" y="-304.9" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;initialize(_owner: address, _defaultGateway: address, _whitelist: address, _counterpartGateway: address, _inbox: address)</text>
</g>
<!-- 13&#45;&gt;5 -->
<g id="edge23" class="edge">
<title>13&#45;&gt;5</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M4178.1522,-606.416C4213.9599,-647.1768 4251.7321,-690.1737 4284.5702,-727.5541"/>
<polygon fill="#000000" stroke="#000000" points="4282.2707,-730.2397 4291.5001,-735.4425 4287.5297,-725.6198 4282.2707,-730.2397"/>
</g>
<!-- 13&#45;&gt;26 -->
<g id="edge21" class="edge">
<title>13&#45;&gt;26</title>
<path fill="none" stroke="#000000" d="M4028.6115,-606.3598C4013.9142,-772.0956 3991.5859,-1012.5279 3985.0608,-1020.6 3952.1914,-1061.2624 3922.5714,-1039.7913 3873.0608,-1056.6 3772.0703,-1090.8859 3660.8264,-1130.4191 3566.5974,-1164.4305"/>
<polygon fill="none" stroke="#000000" points="3562.8944,-1154.604 3538.2526,-1174.6798 3570.0354,-1174.3526 3562.8944,-1154.604"/>
</g>
<!-- 13&#45;&gt;28 -->
<g id="edge22" class="edge">
<title>13&#45;&gt;28</title>
<path fill="none" stroke="#000000" d="M4034.0735,-606.5882C4029.0791,-749.3853 4028.7418,-949.504 4061.0608,-1020.6 4062.615,-1024.019 4064.2479,-1027.4104 4065.9544,-1030.7736"/>
<polygon fill="none" stroke="#000000" points="4056.9616,-1036.1983 4081.0226,-1056.9666 4075.1645,-1025.7267 4056.9616,-1036.1983"/>
</g>
<!-- 14 -->
<g id="node15" class="node">
<title>14</title>
<polygon fill="#f2f2f2" stroke="#000000" points="2625.5645,-.5 2625.5645,-259.7 3720.5571,-259.7 3720.5571,-.5 2625.5645,-.5"/>
<text text-anchor="middle" x="3173.0608" y="-243.1" font-family="Times,serif" font-size="14.00" fill="#000000">L1WethGateway</text>
<polyline fill="none" stroke="#000000" points="2625.5645,-234.9 3720.5571,-234.9 "/>
<text text-anchor="start" x="2633.5645" y="-218.3" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="2633.5645" y="-201.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;l1Weth: address</text>
<text text-anchor="start" x="2633.5645" y="-184.7" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;l2Weth: address</text>
<polyline fill="none" stroke="#000000" points="2625.5645,-176.5 3720.5571,-176.5 "/>
<text text-anchor="start" x="2633.5645" y="-159.9" font-family="Times,serif" font-size="14.00" fill="#000000">Internal:</text>
<text text-anchor="start" x="2633.5645" y="-143.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;createOutboundTx(_l1Token: address, _from: address, _to: address, _amount: uint256, _maxGas: uint256, _gasPriceBid: uint256, _maxSubmissionCost: uint256, _extraData: bytes): uint256</text>
<text text-anchor="start" x="2633.5645" y="-126.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;outboundEscrowTransfer(_l1Token: address, _from: address, _amount: uint256)</text>
<text text-anchor="start" x="2633.5645" y="-109.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;inboundEscrowTransfer(_l1Token: address, _dest: address, _amount: uint256)</text>
<text text-anchor="start" x="2633.5645" y="-92.7" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;_calculateL2TokenAddress(l1ERC20: address): address</text>
<text text-anchor="start" x="2633.5645" y="-75.9" font-family="Times,serif" font-size="14.00" fill="#000000">External:</text>
<text text-anchor="start" x="2633.5645" y="-59.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;payable&gt;&gt; null()</text>
<text text-anchor="start" x="2633.5645" y="-42.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;calculateL2TokenAddress(l1ERC20: address): address</text>
<text text-anchor="start" x="2633.5645" y="-25.5" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="2633.5645" y="-8.7" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;initialize(_l1Counterpart: address, _l1Router: address, _inbox: address, _l1Weth: address, _l2Weth: address)</text>
</g>
<!-- 14&#45;&gt;9 -->
<g id="edge24" class="edge">
<title>14&#45;&gt;9</title>
<path fill="none" stroke="#000000" d="M3173.0608,-259.8993C3173.0608,-267.5976 3173.0608,-275.3942 3173.0608,-283.2149"/>
<polygon fill="none" stroke="#000000" points="3162.5609,-283.3413 3173.0608,-313.3413 3183.5609,-283.3414 3162.5609,-283.3413"/>
</g>
<!-- 14&#45;&gt;22 -->
<g id="edge25" class="edge">
<title>14&#45;&gt;22</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M2856.7805,-259.9584C2845.1253,-271.1 2834.4434,-283.1572 2825.0608,-296.2 2743.8464,-409.097 2886.3705,-509.4394 2787.0608,-606.8 2730.9125,-661.8463 2500.8893,-599.7963 2435.0608,-642.8 2393.7842,-669.7647 2366.7529,-718.4943 2350.1861,-759.7055"/>
<polygon fill="#000000" stroke="#000000" points="2346.8622,-758.5964 2346.5034,-769.1852 2353.3871,-761.1313 2346.8622,-758.5964"/>
</g>
<!-- 16 -->
<g id="node17" class="node">
<title>16</title>
<polygon fill="#f2f2f2" stroke="#000000" points="140.1435,-1191.5 140.1435,-1299.5 271.9781,-1299.5 271.9781,-1191.5 140.1435,-1191.5"/>
<text text-anchor="middle" x="206.0608" y="-1282.9" font-family="Times,serif" font-size="14.00" fill="#000000">&lt;&lt;Interface&gt;&gt;</text>
<text text-anchor="middle" x="206.0608" y="-1266.1" font-family="Times,serif" font-size="14.00" fill="#000000">ProxySetter</text>
<polyline fill="none" stroke="#000000" points="140.1435,-1257.9 271.9781,-1257.9 "/>
<text text-anchor="middle" x="206.0608" y="-1241.3" font-family="Times,serif" font-size="14.00" fill="#000000"> </text>
<polyline fill="none" stroke="#000000" points="140.1435,-1233.1 271.9781,-1233.1 "/>
<text text-anchor="start" x="148.1435" y="-1216.5" font-family="Times,serif" font-size="14.00" fill="#000000">External:</text>
<text text-anchor="start" x="148.1435" y="-1199.7" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&#160;beacon(): address</text>
</g>
<!-- 17 -->
<g id="node18" class="node">
<title>17</title>
<polygon fill="#f2f2f2" stroke="#000000" points="5300.0755,-84.5 5300.0755,-175.7 5442.0461,-175.7 5442.0461,-84.5 5300.0755,-84.5"/>
<text text-anchor="middle" x="5371.0608" y="-159.1" font-family="Times,serif" font-size="14.00" fill="#000000">ClonableBeaconProxy</text>
<polyline fill="none" stroke="#000000" points="5300.0755,-150.9 5442.0461,-150.9 "/>
<text text-anchor="middle" x="5371.0608" y="-134.3" font-family="Times,serif" font-size="14.00" fill="#000000"> </text>
<polyline fill="none" stroke="#000000" points="5300.0755,-126.1 5442.0461,-126.1 "/>
<text text-anchor="start" x="5308.0755" y="-109.5" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="5308.0755" y="-92.7" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;constructor()</text>
</g>
<!-- 18&#45;&gt;16 -->
<g id="edge26" class="edge">
<title>18&#45;&gt;16</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M206.0608,-936.1192C206.0608,-1005.8141 206.0608,-1096.2648 206.0608,-1161.3418"/>
<polygon fill="none" stroke="#000000" points="195.5609,-1161.4891 206.0608,-1191.4892 216.5609,-1161.4892 195.5609,-1161.4891"/>
</g>
<!-- 19 -->
<g id="node20" class="node">
<title>19</title>
<polygon fill="#f2f2f2" stroke="#000000" points="373.8163,-1851.1 373.8163,-2009.5 830.3053,-2009.5 830.3053,-1851.1 373.8163,-1851.1"/>
<text text-anchor="middle" x="602.0608" y="-1992.9" font-family="Times,serif" font-size="14.00" fill="#000000">&lt;&lt;Abstract&gt;&gt;</text>
<text text-anchor="middle" x="602.0608" y="-1976.1" font-family="Times,serif" font-size="14.00" fill="#000000">ERC677Token</text>
<polyline fill="none" stroke="#000000" points="373.8163,-1967.9 830.3053,-1967.9 "/>
<text text-anchor="middle" x="602.0608" y="-1951.3" font-family="Times,serif" font-size="14.00" fill="#000000"> </text>
<polyline fill="none" stroke="#000000" points="373.8163,-1943.1 830.3053,-1943.1 "/>
<text text-anchor="start" x="381.8163" y="-1926.5" font-family="Times,serif" font-size="14.00" fill="#000000">Private:</text>
<text text-anchor="start" x="381.8163" y="-1909.7" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;contractFallback(_to: address, _value: uint256, _data: bytes)</text>
<text text-anchor="start" x="381.8163" y="-1892.9" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;isContract(_addr: address): (hasCode: bool)</text>
<text text-anchor="start" x="381.8163" y="-1876.1" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="381.8163" y="-1859.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;transferAndCall(_to: address, _value: uint256, _data: bytes): (success: bool)</text>
</g>
<!-- 20 -->
<g id="node21" class="node">
<title>20</title>
<polygon fill="#f2f2f2" stroke="#000000" points="376.7003,-2063.3 376.7003,-2204.9 827.4213,-2204.9 827.4213,-2063.3 376.7003,-2063.3"/>
<text text-anchor="middle" x="602.0608" y="-2188.3" font-family="Times,serif" font-size="14.00" fill="#000000">&lt;&lt;Interface&gt;&gt;</text>
<text text-anchor="middle" x="602.0608" y="-2171.5" font-family="Times,serif" font-size="14.00" fill="#000000">IERC677</text>
<polyline fill="none" stroke="#000000" points="376.7003,-2163.3 827.4213,-2163.3 "/>
<text text-anchor="middle" x="602.0608" y="-2146.7" font-family="Times,serif" font-size="14.00" fill="#000000"> </text>
<polyline fill="none" stroke="#000000" points="376.7003,-2138.5 827.4213,-2138.5 "/>
<text text-anchor="start" x="384.7003" y="-2121.9" font-family="Times,serif" font-size="14.00" fill="#000000">External:</text>
<text text-anchor="start" x="384.7003" y="-2105.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&#160;transferAndCall(to: address, value: uint256, data: bytes): (success: bool)</text>
<text text-anchor="start" x="384.7003" y="-2088.3" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="384.7003" y="-2071.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;event&gt;&gt; Transfer(from: address, to: address, value: uint256, data: bytes)</text>
</g>
<!-- 19&#45;&gt;20 -->
<g id="edge27" class="edge">
<title>19&#45;&gt;20</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M602.0608,-2009.678C602.0608,-2017.4037 602.0608,-2025.3113 602.0608,-2033.2107"/>
<polygon fill="none" stroke="#000000" points="591.5609,-2033.2363 602.0608,-2063.2363 612.5609,-2033.2363 591.5609,-2033.2363"/>
</g>
<!-- 21 -->
<g id="node22" class="node">
<title>21</title>
<polygon fill="#f2f2f2" stroke="#000000" points="845.2346,-2080.1 845.2346,-2188.1 1246.887,-2188.1 1246.887,-2080.1 845.2346,-2080.1"/>
<text text-anchor="middle" x="1046.0608" y="-2171.5" font-family="Times,serif" font-size="14.00" fill="#000000">&lt;&lt;Interface&gt;&gt;</text>
<text text-anchor="middle" x="1046.0608" y="-2154.7" font-family="Times,serif" font-size="14.00" fill="#000000">IERC677Receiver</text>
<polyline fill="none" stroke="#000000" points="845.2346,-2146.5 1246.887,-2146.5 "/>
<text text-anchor="middle" x="1046.0608" y="-2129.9" font-family="Times,serif" font-size="14.00" fill="#000000"> </text>
<polyline fill="none" stroke="#000000" points="845.2346,-2121.7 1246.887,-2121.7 "/>
<text text-anchor="start" x="853.2346" y="-2105.1" font-family="Times,serif" font-size="14.00" fill="#000000">External:</text>
<text text-anchor="start" x="853.2346" y="-2088.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&#160;onTokenTransfer(_sender: address, _value: uint256, _data: bytes)</text>
</g>
<!-- 19&#45;&gt;21 -->
<g id="edge28" class="edge">
<title>19&#45;&gt;21</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M774.6762,-2009.532C822.7681,-2031.6066 874.1171,-2055.1763 919.0629,-2075.8068"/>
<polygon fill="#000000" stroke="#000000" points="917.7096,-2079.0367 928.258,-2080.0274 920.6297,-2072.6749 917.7096,-2079.0367"/>
</g>
<!-- 23&#45;&gt;0 -->
<g id="edge30" class="edge">
<title>23&#45;&gt;0</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M793.31,-1358.3484C835.9819,-1383.4428 881.0362,-1409.8725 923.0608,-1434.4 987.102,-1471.7775 1057.9702,-1512.849 1118.7326,-1547.975"/>
<polygon fill="none" stroke="#000000" points="1113.7604,-1557.2288 1144.989,-1563.1472 1124.2672,-1539.0461 1113.7604,-1557.2288"/>
</g>
<!-- 24 -->
<g id="node25" class="node">
<title>24</title>
<polygon fill="#f2f2f2" stroke="#000000" points="432.8907,-1588.5 432.8907,-1679.7 771.2309,-1679.7 771.2309,-1588.5 432.8907,-1588.5"/>
<text text-anchor="middle" x="602.0608" y="-1663.1" font-family="Times,serif" font-size="14.00" fill="#000000">aeERC20</text>
<polyline fill="none" stroke="#000000" points="432.8907,-1654.9 771.2309,-1654.9 "/>
<text text-anchor="middle" x="602.0608" y="-1638.3" font-family="Times,serif" font-size="14.00" fill="#000000"> </text>
<polyline fill="none" stroke="#000000" points="432.8907,-1630.1 771.2309,-1630.1 "/>
<text text-anchor="start" x="440.8907" y="-1613.5" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="440.8907" y="-1596.7" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;initialize(name: string, symbol: string, decimals: uint8)</text>
</g>
<!-- 23&#45;&gt;24 -->
<g id="edge29" class="edge">
<title>23&#45;&gt;24</title>
<path fill="none" stroke="#000000" d="M602.0608,-1358.4212C602.0608,-1422.6367 602.0608,-1501.3269 602.0608,-1558.174"/>
<polygon fill="none" stroke="#000000" points="591.5609,-1558.4531 602.0608,-1588.4532 612.5609,-1558.4532 591.5609,-1558.4531"/>
</g>
<!-- 24&#45;&gt;19 -->
<g id="edge31" class="edge">
<title>24&#45;&gt;19</title>
<path fill="none" stroke="#000000" d="M602.0608,-1679.7321C602.0608,-1717.2498 602.0608,-1771.9753 602.0608,-1820.7186"/>
<polygon fill="none" stroke="#000000" points="591.5609,-1820.8637 602.0608,-1850.8638 612.5609,-1820.8638 591.5609,-1820.8637"/>
</g>
<!-- 30 -->
<g id="node31" class="node">
<title>30</title>
<polygon fill="#f2f2f2" stroke="#000000" points="2921.4629,-1470.9 2921.4629,-1797.3 3760.6587,-1797.3 3760.6587,-1470.9 2921.4629,-1470.9"/>
<text text-anchor="middle" x="3341.0608" y="-1780.7" font-family="Times,serif" font-size="14.00" fill="#000000">&lt;&lt;Abstract&gt;&gt;</text>
<text text-anchor="middle" x="3341.0608" y="-1763.9" font-family="Times,serif" font-size="14.00" fill="#000000">TokenGateway</text>
<polyline fill="none" stroke="#000000" points="2921.4629,-1755.7 3760.6587,-1755.7 "/>
<text text-anchor="start" x="2929.4629" y="-1739.1" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="2929.4629" y="-1722.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;counterpartGateway: address</text>
<text text-anchor="start" x="2929.4629" y="-1705.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;router: address</text>
<polyline fill="none" stroke="#000000" points="2921.4629,-1697.3 3760.6587,-1697.3 "/>
<text text-anchor="start" x="2929.4629" y="-1680.7" font-family="Times,serif" font-size="14.00" fill="#000000">Internal:</text>
<text text-anchor="start" x="2929.4629" y="-1663.9" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;abstract&gt;&gt; _calculateL2TokenAddress(l1ERC20: address): address</text>
<text text-anchor="start" x="2929.4629" y="-1647.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;abstract&gt;&gt; isSenderRouter(): bool</text>
<text text-anchor="start" x="2929.4629" y="-1630.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;abstract&gt;&gt; isSenderCounterpartGateway(): bool</text>
<text text-anchor="start" x="2929.4629" y="-1613.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;_initialize(_counterpartGateway: address, _router: address)</text>
<text text-anchor="start" x="2929.4629" y="-1596.7" font-family="Times,serif" font-size="14.00" fill="#000000">External:</text>
<text text-anchor="start" x="2929.4629" y="-1579.9" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;abstract&gt;&gt; outboundTransfer(_token: address, _to: address, _amount: uint256, _maxGas: uint256, _gasPriceBid: uint256, _data: bytes): bytes</text>
<text text-anchor="start" x="2929.4629" y="-1563.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;abstract&gt;&gt; finalizeInboundTransfer(_token: address, _from: address, _to: address, _amount: uint256, _data: bytes): bytes</text>
<text text-anchor="start" x="2929.4629" y="-1546.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;calculateL2TokenAddress(l1ERC20: address): address</text>
<text text-anchor="start" x="2929.4629" y="-1529.5" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="2929.4629" y="-1512.7" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;abstract&gt;&gt; getOutboundCalldata(_token: address, _from: address, _to: address, _amount: uint256, _data: bytes): bytes</text>
<text text-anchor="start" x="2929.4629" y="-1495.9" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;modifier&gt;&gt; onlyCounterpartGateway()</text>
<text text-anchor="start" x="2929.4629" y="-1479.1" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;modifier&gt;&gt; onlyRouter()</text>
</g>
<!-- 25&#45;&gt;30 -->
<g id="edge32" class="edge">
<title>25&#45;&gt;30</title>
<path fill="none" stroke="#000000" d="M2655.5306,-1366.7545C2708.9412,-1389.6465 2764.6107,-1413.0812 2817.0608,-1434.4 2841.8981,-1444.4953 2867.4556,-1454.7296 2893.2909,-1464.9562"/>
<polygon fill="none" stroke="#000000" points="2889.6525,-1474.8083 2921.4129,-1476.0431 2897.3547,-1455.2717 2889.6525,-1474.8083"/>
</g>
<!-- 28&#45;&gt;30 -->
<g id="edge33" class="edge">
<title>28&#45;&gt;30</title>
<path fill="none" stroke="#000000" d="M3882.4194,-1430.5757C3879.2895,-1431.8583 3876.1695,-1433.1332 3873.0608,-1434.4 3845.6822,-1445.5563 3817.4233,-1456.8373 3788.8654,-1468.0608"/>
<polygon fill="none" stroke="#000000" points="3784.9393,-1458.3217 3760.8241,-1479.0269 3792.5878,-1477.8793 3784.9393,-1458.3217"/>
</g>
<!-- 29 -->
<g id="node30" class="node">
<title>29</title>
<polygon fill="#f2f2f2" stroke="#000000" points="2941.5109,-1834.3 2941.5109,-2026.3 3740.6107,-2026.3 3740.6107,-1834.3 2941.5109,-1834.3"/>
<text text-anchor="middle" x="3341.0608" y="-2009.7" font-family="Times,serif" font-size="14.00" fill="#000000">&lt;&lt;Interface&gt;&gt;</text>
<text text-anchor="middle" x="3341.0608" y="-1992.9" font-family="Times,serif" font-size="14.00" fill="#000000">ITokenGateway</text>
<polyline fill="none" stroke="#000000" points="2941.5109,-1984.7 3740.6107,-1984.7 "/>
<text text-anchor="middle" x="3341.0608" y="-1968.1" font-family="Times,serif" font-size="14.00" fill="#000000"> </text>
<polyline fill="none" stroke="#000000" points="2941.5109,-1959.9 3740.6107,-1959.9 "/>
<text text-anchor="start" x="2949.5109" y="-1943.3" font-family="Times,serif" font-size="14.00" fill="#000000">External:</text>
<text text-anchor="start" x="2949.5109" y="-1926.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&#160;outboundTransfer(_token: address, _to: address, _amount: uint256, _maxGas: uint256, _gasPriceBid: uint256, _data: bytes): bytes</text>
<text text-anchor="start" x="2949.5109" y="-1909.7" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&#160;finalizeInboundTransfer(_token: address, _from: address, _to: address, _amount: uint256, _data: bytes): bytes</text>
<text text-anchor="start" x="2949.5109" y="-1892.9" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&#160;calculateL2TokenAddress(l1ERC20: address): address</text>
<text text-anchor="start" x="2949.5109" y="-1876.1" font-family="Times,serif" font-size="14.00" fill="#000000">Public:</text>
<text text-anchor="start" x="2949.5109" y="-1859.3" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;event&gt;&gt; OutboundTransferInitiated(token: address, _from: address, _to: address, _transferId: uint256, _amount: uint256, _data: bytes)</text>
<text text-anchor="start" x="2949.5109" y="-1842.5" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;&#160;&#160;&lt;&lt;event&gt;&gt; InboundTransferFinalized(token: address, _from: address, _to: address, _transferId: uint256, _amount: uint256, _data: bytes)</text>
</g>
<!-- 30&#45;&gt;29 -->
<g id="edge34" class="edge">
<title>30&#45;&gt;29</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M3341.0608,-1797.3624C3341.0608,-1799.5061 3341.0608,-1801.6455 3341.0608,-1803.7788"/>
<polygon fill="none" stroke="#000000" points="3330.5609,-1803.986 3341.0608,-1833.986 3351.5609,-1803.9861 3330.5609,-1803.986"/>
</g>
</g>
</svg>
