More Info
Private Name Tags
ContractCreator
Latest 22 from a total of 22 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Exact Input V2Sw... | 1359576 | 6 hrs ago | IN | 5.87790613 S | 0.00017796 | ||||
Exact Input V2Sw... | 869759 | 3 days ago | IN | 0.1 S | 0.00016633 | ||||
Exact Input V2Sw... | 856273 | 3 days ago | IN | 0.1 S | 0.00016096 | ||||
Exact Input V2Sw... | 833334 | 3 days ago | IN | 0.1 S | 0.00017438 | ||||
Exact Input V2Sw... | 832986 | 3 days ago | IN | 0.1 S | 0.00017438 | ||||
Exact Input V2Sw... | 832475 | 3 days ago | IN | 0 S | 0.00018537 | ||||
Exact Input V2Sw... | 832435 | 3 days ago | IN | 0.003 S | 0.0001759 | ||||
Exact Input V2Sw... | 831985 | 3 days ago | IN | 0 S | 0.00018692 | ||||
Exact Input V2Sw... | 831918 | 3 days ago | IN | 0.002 S | 0.00018186 | ||||
Exact Input V2Sw... | 831740 | 3 days ago | IN | 0 S | 0.00017639 | ||||
Exact Input V2Sw... | 831696 | 3 days ago | IN | 0.001 S | 0.00017195 | ||||
Exact Input V2Sw... | 824208 | 3 days ago | IN | 0 S | 0.0001764 | ||||
Exact Input V2Sw... | 824078 | 3 days ago | IN | 0.001 S | 0.00015485 | ||||
Exact Input V2Sw... | 822994 | 3 days ago | IN | 0 S | 0.00019593 | ||||
Exact Input V2Sw... | 808066 | 3 days ago | IN | 0.001 S | 0.00014875 | ||||
Exact Input V2Sw... | 807714 | 3 days ago | IN | 0.001 S | 0.00016619 | ||||
Exact Input V2Sw... | 807343 | 3 days ago | IN | 0.001 S | 0.00017589 | ||||
Exact Input V2Sw... | 807209 | 3 days ago | IN | 0.001 S | 0.00019629 | ||||
Exact Input V2Sw... | 654129 | 4 days ago | IN | 0.2 S | 0.00016924 | ||||
Change Allowed | 653347 | 4 days ago | IN | 0 S | 0.00005681 | ||||
Change Transit P... | 653318 | 4 days ago | IN | 0 S | 0.00007875 | ||||
Change Fee | 653265 | 4 days ago | IN | 0 S | 0.00008126 |
Latest 24 internal transactions
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
1359576 | 6 hrs ago | 5.86027241 S | ||||
869759 | 3 days ago | 0.09976 S | ||||
856273 | 3 days ago | 0.0997 S | ||||
833334 | 3 days ago | 0.09976 S | ||||
832986 | 3 days ago | 0.09976 S | ||||
832475 | 3 days ago | 0.00296735 S | ||||
832475 | 3 days ago | 0.00296735 S | ||||
832435 | 3 days ago | 0.003 S | ||||
831985 | 3 days ago | 0.00198801 S | ||||
831985 | 3 days ago | 0.00198801 S | ||||
831918 | 3 days ago | 0.002 S | ||||
831740 | 3 days ago | 0.000994 S | ||||
831740 | 3 days ago | 0.000994 S | ||||
831696 | 3 days ago | 0.001 S | ||||
824208 | 3 days ago | 0.00204931 S | ||||
824208 | 3 days ago | 0.00204931 S | ||||
824078 | 3 days ago | 0.001 S | ||||
822994 | 3 days ago | 0.00207455 S | ||||
822994 | 3 days ago | 0.00207455 S | ||||
808066 | 3 days ago | 0.000997 S | ||||
807714 | 3 days ago | 0.000997 S | ||||
807343 | 3 days ago | 0.001 S | ||||
807209 | 3 days ago | 0.001 S | ||||
654129 | 4 days ago | 0.1994 S |
Loading...
Loading
Contract Name:
TransitSwapRouterV5
Compiler Version
v0.8.20+commit.a1b79de6
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity =0.8.20; import "./UniswapV2Router.sol"; import "./UniswapV3Router.sol"; import "./AggregateRouter.sol"; import "./CrossRouter.sol"; contract TransitSwapRouterV5 is UniswapV2Router, UniswapV3Router, AggregateRouter, CrossRouter { function withdrawTokens(address[] memory tokens, address recipient) external onlyExecutor { for (uint index; index < tokens.length; index++) { uint amount; if (TransferHelper.isETH(tokens[index])) { amount = address(this).balance; TransferHelper.safeTransferETH(recipient, amount); } else { amount = IERC20(tokens[index]).balanceOf(address(this)); TransferHelper.safeTransferWithoutRequire(tokens[index], recipient, amount); } emit Withdraw(tokens[index], msg.sender, recipient, amount); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./BaseCore.sol"; contract CrossRouter is BaseCore { using SafeMath for uint256; constructor() {} function cross(CrossDescription calldata desc) external payable nonReentrant whenNotPaused(FunctionFlag.cross) { require(desc.calls.length > 0, "data should be not zero"); require(desc.amount > 0, "amount should be greater than 0"); require(_cross_caller_allowed[desc.caller], "invalid caller"); uint256 swapAmount = executeFunds(FunctionFlag.cross, desc.srcToken, desc.wrappedToken, desc.caller, desc.amount, desc.fee, desc.signature); { (bool success, bytes memory result) = desc.caller.call{value:swapAmount}(desc.calls); if (!success) { revert(RevertReasonParser.parse(result, "TransitCrossV5:")); } TransferHelper.safeApprove(desc.srcToken, desc.caller, 0); } _emitTransit(desc.srcToken, desc.dstToken, desc.dstReceiver, desc.amount, 0, desc.toChain, desc.channel); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./BaseCore.sol"; contract AggregateRouter is BaseCore { using SafeMath for uint256; constructor() { } function aggregateAndGasUsed(TransitSwapDescription calldata desc, CallbytesDescription calldata callbytesDesc) external payable returns (uint256 returnAmount, uint256 gasUsed) { uint256 gasLeftBefore = gasleft(); returnAmount = _executeAggregate(desc, callbytesDesc); gasUsed = gasLeftBefore - gasleft(); } function aggregate(TransitSwapDescription calldata desc, CallbytesDescription calldata callbytesDesc) external payable returns (uint256 returnAmount) { returnAmount = _executeAggregate(desc, callbytesDesc); } function _executeAggregate(TransitSwapDescription calldata desc, CallbytesDescription calldata callbytesDesc) internal nonReentrant whenNotPaused(FunctionFlag.executeAggregate) returns (uint256 returnAmount) { require(callbytesDesc.calldatas.length > 0, "data should be not zero"); require(desc.amount > 0, "amount should be greater than 0"); require(desc.dstReceiver != address(0), "receiver should be not address(0)"); require(desc.minReturnAmount > 0, "minReturnAmount should be greater than 0"); require(_wrapped_allowed[desc.wrappedToken], "invalid wrapped address"); uint256 toBeforeBalance; address bridgeAddress = _aggregate_bridge; uint256 swapAmount = executeFunds(FunctionFlag.executeAggregate, desc.srcToken, desc.wrappedToken, bridgeAddress, desc.amount, desc.fee, desc.signature); if (TransferHelper.isETH(desc.dstToken)) { toBeforeBalance = desc.dstReceiver.balance; } else { toBeforeBalance = IERC20(desc.dstToken).balanceOf(desc.dstReceiver); } { //bytes4(keccak256(bytes('callbytes(CallbytesDescription)'))); (bool success, bytes memory result) = bridgeAddress.call{value : swapAmount}(abi.encodeWithSelector(0x3f3204d2, callbytesDesc)); if (!success) { revert(RevertReasonParser.parse(result, "TransitSwap:")); } } if (TransferHelper.isETH(desc.dstToken)) { returnAmount = desc.dstReceiver.balance.sub(toBeforeBalance); } else { returnAmount = IERC20(desc.dstToken).balanceOf(desc.dstReceiver).sub(toBeforeBalance); } require(returnAmount >= desc.minReturnAmount, "Too little received"); _emitTransit(desc.srcToken, desc.dstToken, desc.dstReceiver, desc.amount, returnAmount, 0, desc.channel); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./BaseCore.sol"; contract UniswapV3Router is BaseCore { using SafeMath for uint256; uint256 private constant _ZERO_FOR_ONE_MASK = 1 << 255; uint160 private constant MIN_SQRT_RATIO = 4295128739; uint160 private constant MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342; constructor() {} fallback() external { (int256 amount0Delta, int256 amount1Delta, bytes memory _data) = abi.decode(msg.data[4:], (int256,int256,bytes)); _executeCallback(amount0Delta, amount1Delta, _data); } function pancakeV3SwapCallback( int256 amount0Delta, int256 amount1Delta, bytes calldata _data ) external { _executeCallback(amount0Delta, amount1Delta, _data); } function uniswapV3SwapCallback( int256 amount0Delta, int256 amount1Delta, bytes calldata _data ) external { _executeCallback(amount0Delta, amount1Delta, _data); } function _executeCallback( int256 amount0Delta, int256 amount1Delta, bytes memory _data ) internal { require(amount0Delta > 0 || amount1Delta > 0, "M0 or M1"); // swaps entirely within 0-liquidity regions are not supported (uint256 pool, bytes memory tokenInAndPoolSalt) = abi.decode(_data, (uint256, bytes)); (address tokenIn, bytes32 poolSalt) = abi.decode(tokenInAndPoolSalt, (address, bytes32)); _verifyCallback(pool, poolSalt, msg.sender); uint256 amountToPay = uint256(amount1Delta); if (amount0Delta > 0) { amountToPay = uint256(amount0Delta); } TransferHelper.safeTransfer(tokenIn, msg.sender, amountToPay); } function exactInputV3SwapAndGasUsed(ExactInputV3SwapParams calldata params) external payable returns (uint256 returnAmount, uint256 gasUsed) { uint256 gasLeftBefore = gasleft(); returnAmount = _executeV3Swap(params); gasUsed = gasLeftBefore - gasleft(); } function exactInputV3Swap(ExactInputV3SwapParams calldata params) external payable returns (uint256 returnAmount) { returnAmount = _executeV3Swap(params); } function _executeV3Swap(ExactInputV3SwapParams calldata params) internal nonReentrant whenNotPaused(FunctionFlag.executeV3Swap) returns (uint256 returnAmount) { require(params.pools.length > 0, "Empty pools"); require(params.deadline >= block.timestamp, "Expired"); require(_wrapped_allowed[params.wrappedToken], "Invalid wrapped address"); address tokenIn = params.srcToken; address tokenOut = params.dstToken; uint256 toBeforeBalance; bool isToETH; if (TransferHelper.isETH(params.srcToken)) { tokenIn = params.wrappedToken; } uint256 actualAmountIn = executeFunds(FunctionFlag.executeV3Swap, params.srcToken, params.wrappedToken, address(0), params.amount, params.fee, params.signature); if (TransferHelper.isETH(params.dstToken)) { tokenOut = params.wrappedToken; toBeforeBalance = IERC20(params.wrappedToken).balanceOf(address(this)); isToETH = true; } else { toBeforeBalance = IERC20(params.dstToken).balanceOf(params.dstReceiver); } { uint256 len = params.pools.length; address recipient = address(this); bytes memory tokenInAndPoolSalt; if (len > 1) { address thisTokenIn = tokenIn; address thisTokenOut = address(0); for (uint256 i; i < len; i++) { uint256 thisPool = params.pools[i]; (thisTokenIn, tokenInAndPoolSalt) = _verifyPool(thisTokenIn, thisTokenOut, thisPool); if (i == len - 1 && !isToETH) { recipient = params.dstReceiver; thisTokenOut = tokenOut; } actualAmountIn = _swap(recipient, thisPool, tokenInAndPoolSalt, actualAmountIn); } returnAmount = actualAmountIn; } else { (, tokenInAndPoolSalt) = _verifyPool(tokenIn, tokenOut, params.pools[0]); if (!isToETH) { recipient = params.dstReceiver; } returnAmount = _swap(recipient, params.pools[0], tokenInAndPoolSalt, actualAmountIn); } } if (isToETH) { returnAmount = IERC20(params.wrappedToken).balanceOf(address(this)).sub(toBeforeBalance); require(returnAmount >= params.minReturnAmount, "Too little received"); TransferHelper.safeWithdraw(params.wrappedToken, returnAmount); TransferHelper.safeTransferETH(params.dstReceiver, returnAmount); } else { returnAmount = IERC20(params.dstToken).balanceOf(params.dstReceiver).sub(toBeforeBalance); require(returnAmount >= params.minReturnAmount, "Too little received"); } _emitTransit(params.srcToken, params.dstToken, params.dstReceiver, params.amount, returnAmount, 0, params.channel); } function _swap(address recipient, uint256 pool, bytes memory tokenInAndPoolSalt, uint256 amount) internal returns (uint256 amountOut) { bool zeroForOne = pool & _ZERO_FOR_ONE_MASK == 0; if (zeroForOne) { (, int256 amount1) = IUniswapV3Pool(address(uint160(pool))).swap( recipient, zeroForOne, amount.toInt256(), MIN_SQRT_RATIO + 1, abi.encode(pool, tokenInAndPoolSalt) ); amountOut = SafeMath.toUint256(-amount1); } else { (int256 amount0,) = IUniswapV3Pool(address(uint160(pool))).swap( recipient, zeroForOne, amount.toInt256(), MAX_SQRT_RATIO - 1, abi.encode(pool, tokenInAndPoolSalt) ); amountOut = SafeMath.toUint256(-amount0); } } function _verifyPool(address tokenIn, address tokenOut, uint256 pool) internal view returns (address nextTokenIn, bytes memory tokenInAndPoolSalt) { IUniswapV3Pool iPool = IUniswapV3Pool(address(uint160(pool))); address token0 = iPool.token0(); address token1 = iPool.token1(); uint24 fee = iPool.fee(); bytes32 poolSalt = keccak256(abi.encode(token0, token1, fee)); bool zeroForOne = pool & _ZERO_FOR_ONE_MASK == 0; if (zeroForOne) { require(tokenIn == token0, "Bad pool"); if (tokenOut != address(0)) { require(tokenOut == token1, "Bad pool"); } nextTokenIn = token1; tokenInAndPoolSalt = abi.encode(token0, poolSalt); } else { require(tokenIn == token1, "Bad pool"); if (tokenOut != address(0)) { require(tokenOut == token0, "Bad pool"); } nextTokenIn = token0; tokenInAndPoolSalt = abi.encode(token1, poolSalt); } _verifyCallback(pool, poolSalt, address(uint160(pool))); } function _verifyCallback(uint256 pool, bytes32 poolSalt, address caller) internal view { uint poolDigit = pool >> 248 & 0xf; UniswapV3Pool memory v3Pool = _uniswapV3_factory_allowed[poolDigit]; require(v3Pool.factory != address(0), "Callback bad pool indexed"); address calcPool = address( uint160( uint256( keccak256( abi.encodePacked( hex'ff', v3Pool.factory, poolSalt, v3Pool.initCodeHash ) ) ) ) ); require(calcPool == caller, "Callback bad pool"); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./BaseCore.sol"; contract UniswapV2Router is BaseCore { using SafeMath for uint256; constructor() { } function _beforeSwap(ExactInputV2SwapParams calldata exactInput, bool supportingFeeOn) internal returns (bool isToETH, uint256 actualAmountIn, address[] memory paths, uint256 thisAddressBeforeBalance, uint256 toBeforeBalance) { require(exactInput.path.length == exactInput.pool.length + 1, "Invalid path"); require(_wrapped_allowed[exactInput.wrappedToken], "Invalid wrapped address"); (bool isToVault, uint256 vaultFee) = splitFee(exactInput.fee); actualAmountIn = calculateTradeFee(true, exactInput.amount, vaultFee, exactInput.signature); address[] memory path = exactInput.path; address dstToken = path[exactInput.path.length - 1]; if (TransferHelper.isETH(exactInput.path[0])) { require(msg.value == exactInput.amount, "Invalid msg.value"); if (isToVault) { TransferHelper.safeTransferETH(_vault, vaultFee); } path[0] = exactInput.wrappedToken; TransferHelper.safeDeposit(exactInput.wrappedToken, actualAmountIn); } else { if (supportingFeeOn) { actualAmountIn = IERC20(path[0]).balanceOf(address(this)); TransferHelper.safeTransferFrom(path[0], msg.sender, address(this), exactInput.amount); actualAmountIn = IERC20(path[0]).balanceOf(address(this)).sub(actualAmountIn).sub(exactInput.fee); } else { TransferHelper.safeTransferFrom(path[0], msg.sender, address(this), exactInput.amount); } if (isToVault) { TransferHelper.safeTransferWithoutRequire(path[0], _vault, vaultFee); } } if (TransferHelper.isETH(dstToken)) { path[path.length - 1] = exactInput.wrappedToken; isToETH = true; thisAddressBeforeBalance = IERC20(exactInput.wrappedToken).balanceOf(address(this)); } else { if (supportingFeeOn) { toBeforeBalance = IERC20(dstToken).balanceOf(exactInput.dstReceiver); } } paths = path; } function exactInputV2SwapAndGasUsed(ExactInputV2SwapParams calldata exactInput, uint256 deadline) external payable returns (uint256 returnAmount, uint256 gasUsed) { uint256 gasLeftBefore = gasleft(); returnAmount = _executeV2Swap(exactInput, deadline); gasUsed = gasLeftBefore - gasleft(); } function exactInputV2Swap(ExactInputV2SwapParams calldata exactInput, uint256 deadline) external payable returns (uint256 returnAmount) { returnAmount = _executeV2Swap(exactInput, deadline); } function _executeV2Swap(ExactInputV2SwapParams calldata exactInput, uint256 deadline) internal nonReentrant whenNotPaused(FunctionFlag.executeV2Swap) returns (uint256 returnAmount) { require(deadline >= block.timestamp, "Expired"); bool supportingFeeOn = exactInput.router >> 248 & 0xf == 1; { (bool isToETH, uint256 actualAmountIn, address[] memory paths, uint256 thisAddressBeforeBalance, uint256 toBeforeBalance) = _beforeSwap(exactInput, supportingFeeOn); TransferHelper.safeTransfer(paths[0], exactInput.pool[0], actualAmountIn); if (supportingFeeOn) { if(isToETH) { _swapSupportingFeeOnTransferTokens(address(uint160(exactInput.router)), paths, exactInput.pool, address(this)); returnAmount = IERC20(exactInput.wrappedToken).balanceOf(address(this)).sub(thisAddressBeforeBalance); } else { _swapSupportingFeeOnTransferTokens(address(uint160(exactInput.router)), paths, exactInput.pool, exactInput.dstReceiver); returnAmount = IERC20(paths[paths.length - 1]).balanceOf(exactInput.dstReceiver).sub(toBeforeBalance); } } else { uint[] memory amounts = IUniswapV2(address(uint160(exactInput.router))).getAmountsOut(actualAmountIn, paths); if(isToETH) { _swap(amounts, paths, exactInput.pool, address(this)); returnAmount = IERC20(exactInput.wrappedToken).balanceOf(address(this)).sub(thisAddressBeforeBalance); } else { _swap(amounts, paths, exactInput.pool, exactInput.dstReceiver); returnAmount = IERC20(paths[paths.length - 1]).balanceOf(exactInput.dstReceiver).sub(toBeforeBalance); } } require(returnAmount >= exactInput.minReturnAmount, "Too little received"); if (isToETH) { TransferHelper.safeWithdraw(exactInput.wrappedToken, returnAmount); TransferHelper.safeTransferETH(exactInput.dstReceiver, returnAmount); } } string memory channel = exactInput.channel; _emitTransit(exactInput.path[0], exactInput.path[exactInput.path.length - 1], exactInput.dstReceiver, exactInput.amount, returnAmount, 0, channel); } function _swap(uint[] memory amounts, address[] memory path, address[] memory pool, address _to) internal { for (uint i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0,) = input < output ? (input, output) : (output, input); uint amountOut = amounts[i + 1]; (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0)); address to = i < path.length - 2 ? pool[i + 1] : _to; IUniswapV2(pool[i]).swap( amount0Out, amount1Out, to, new bytes(0) ); } } function _swapSupportingFeeOnTransferTokens(address router, address[] memory path, address[] memory pool, address _to) internal virtual { for (uint i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0,) = input < output ? (input, output) : (output, input); IUniswapV2 pair = IUniswapV2(pool[i]); uint amountInput; uint amountOutput; { // scope to avoid stack too deep errors (uint reserve0, uint reserve1,) = pair.getReserves(); (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0); amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput); amountOutput = IUniswapV2(router).getAmountOut(amountInput, reserveInput, reserveOutput); } (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0)); address to = i < path.length - 2 ? pool[i + 1] : _to; pair.swap(amount0Out, amount1Out, to, new bytes(0)); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./libs/Pausable.sol"; import "./libs/ReentrancyGuard.sol"; import "./libs/TransferHelper.sol"; import "./libs/RevertReasonParser.sol"; import "./libs/SafeMath.sol"; import "./libs/Ownable.sol"; import "./interfaces/IERC20.sol"; import "./interfaces/IUniswapV2.sol"; import "./interfaces/IUniswapV3Pool.sol"; contract BaseCore is Ownable, Pausable, ReentrancyGuard { using SafeMath for uint256; struct ExactInputV2SwapParams { address dstReceiver; address wrappedToken; uint256 router; uint256 amount; uint256 minReturnAmount; uint256 fee; address[] path; address[] pool; bytes signature; string channel; } struct ExactInputV3SwapParams { address srcToken; address dstToken; address dstReceiver; address wrappedToken; uint256 amount; uint256 minReturnAmount; uint256 fee; uint256 deadline; uint256[] pools; bytes signature; string channel; } struct TransitSwapDescription { address srcToken; address dstToken; address dstReceiver; address wrappedToken; uint256 amount; uint256 minReturnAmount; uint256 fee; string channel; bytes signature; } struct CrossDescription { address srcToken; address dstToken; address caller; address dstReceiver; address wrappedToken; uint256 amount; uint256 fee; uint256 toChain; string channel; bytes calls; bytes signature; } struct CallbytesDescription { address srcToken; bytes calldatas; } struct UniswapV3Pool { address factory; bytes initCodeHash; } uint256 internal _aggregate_fee; uint256 internal _cross_fee; address internal _aggregate_bridge; address internal _fee_signer; address internal _vault; bytes32 public DOMAIN_SEPARATOR; //whitelist cross's caller mapping(address => bool) internal _cross_caller_allowed; //whitelist wrapped mapping(address => bool) internal _wrapped_allowed; //whitelist uniswap v3 factory mapping(uint => UniswapV3Pool) internal _uniswapV3_factory_allowed; bytes32 public constant CHECKFEE_TYPEHASH = keccak256("CheckFee(address payer,uint256 amount,uint256 fee)"); event Receipt(address from, uint256 amount); event Withdraw(address indexed token, address indexed executor, address indexed recipient, uint amount); event ChangeWrappedAllowed(address[] wrappedTokens, bool[] newAllowed); event ChangeV3FactoryAllowed(uint256[] poolIndex, address[] factories, bytes[] initCodeHash); event ChangeCrossCallerAllowed(address[] callers); event ChangeFeeRate(bool isAggregate, uint256 newRate); event ChangeSigner(address preSigner, address newSigner); event ChangeAggregateBridge(address newBridge); event ChangeVault(address preVault, address newVault); event TransitSwapped(address indexed srcToken, address indexed dstToken, address indexed dstReceiver, uint256 amount, uint256 returnAmount, uint256 toChainID, string channel); constructor() Ownable(msg.sender) { DOMAIN_SEPARATOR = keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(bytes("TransitSwapV5")), keccak256(bytes("5")), block.chainid, address(this) ) ); } receive() external payable { emit Receipt(msg.sender, msg.value); } function calculateTradeFee(bool isAggregate, uint256 tradeAmount, uint256 fee, bytes calldata signature) internal view returns (uint256) { uint256 thisFee; if (isAggregate) { thisFee = tradeAmount.mul(_aggregate_fee).div(10000); } else { thisFee = tradeAmount.mul(_cross_fee).div(10000); } if (fee < thisFee) { require(verifySignature(tradeAmount, fee, signature), "Invalid signature fee"); } return tradeAmount.sub(fee); } function _emitTransit(address srcToken, address dstToken, address dstReceiver, uint256 amount, uint256 returnAmount, uint256 toChainID, string memory channel) internal { emit TransitSwapped ( srcToken, dstToken, dstReceiver, amount, returnAmount, toChainID, channel ); } function changeFee(bool[] memory isAggregate, uint256[] memory newRate) external onlyExecutor { for (uint i; i < isAggregate.length; i++) { require(newRate[i] >= 0 && newRate[i] <= 1000, "fee rate is:0-1000"); if (isAggregate[i]) { _aggregate_fee = newRate[i]; } else { _cross_fee = newRate[i]; } emit ChangeFeeRate(isAggregate[i], newRate[i]); } } function changeTransitProxy(address aggregator, address signer, address vault) external onlyExecutor { if (aggregator != address(0)) { _aggregate_bridge = aggregator; emit ChangeAggregateBridge(aggregator); } if (signer != address(0)) { address preSigner = _fee_signer; _fee_signer = signer; emit ChangeSigner(preSigner, signer); } if (vault != address(0)) { address preVault = _vault; _vault = vault; emit ChangeVault(preVault, vault); } } function changeAllowed(address[] calldata crossCallers, address[] calldata wrappedTokens) public onlyExecutor { if(crossCallers.length != 0){ for (uint i; i < crossCallers.length; i++) { _cross_caller_allowed[crossCallers[i]] = !_cross_caller_allowed[crossCallers[i]]; } emit ChangeCrossCallerAllowed(crossCallers); } if(wrappedTokens.length != 0) { bool[] memory newAllowed = new bool[](wrappedTokens.length); for (uint index; index < wrappedTokens.length; index++) { _wrapped_allowed[wrappedTokens[index]] = !_wrapped_allowed[wrappedTokens[index]]; newAllowed[index] = _wrapped_allowed[wrappedTokens[index]]; } emit ChangeWrappedAllowed(wrappedTokens, newAllowed); } } function changeUniswapV3FactoryAllowed(uint[] calldata poolIndex, address[] calldata factories, bytes[] calldata initCodeHash) public onlyExecutor { require(poolIndex.length == initCodeHash.length, "invalid data"); require(factories.length == initCodeHash.length, "invalid data"); uint len = factories.length; for (uint i; i < len; i++) { _uniswapV3_factory_allowed[poolIndex[i]] = UniswapV3Pool(factories[i],initCodeHash[i]); } emit ChangeV3FactoryAllowed(poolIndex, factories, initCodeHash); } function changePause(bool paused, FunctionFlag[] calldata flags) external onlyExecutor { uint len = flags.length; for (uint i; i < len; i++) { if (paused) { _pause(flags[i]); } else { _unpause(flags[i]); } } } function transitProxyAddress() external view returns (address bridgeProxy, address feeSigner) { bridgeProxy = _aggregate_bridge; feeSigner = _fee_signer; } function transitFee() external view returns (uint256, uint256, address) { return (_aggregate_fee, _cross_fee, _vault); } function transitAllowedQuery(address crossCaller, address wrappedToken, uint256 poolIndex) external view returns (bool isCrossCallerAllowed, bool isWrappedAllowed, UniswapV3Pool memory pool) { isCrossCallerAllowed = _cross_caller_allowed[crossCaller]; isWrappedAllowed = _wrapped_allowed[wrappedToken]; pool = _uniswapV3_factory_allowed[poolIndex]; } function verifySignature(uint256 amount, uint256 fee, bytes calldata signature) internal view returns (bool) { bytes32 digest = keccak256( abi.encodePacked( "\x19\x01", DOMAIN_SEPARATOR, keccak256(abi.encode(CHECKFEE_TYPEHASH, msg.sender, amount, fee)) ) ); (uint8 v, bytes32 r, bytes32 s) = splitSignature(signature); address recovered = ecrecover(digest, v, r, s); return recovered == _fee_signer; } function splitSignature(bytes memory _signature) internal pure returns (uint8 v, bytes32 r, bytes32 s) { require(bytes(_signature).length == 65, "Invalid signature length"); assembly { r := mload(add(_signature, 0x20)) s := mload(add(_signature, 0x40)) v := byte(0, mload(add(_signature, 0x60))) } return (v, r, s); } function splitFee(uint256 fee) internal view returns (bool isToVault, uint256 vaultFee) { uint vaultFlag = fee % 10; vaultFee = (fee.sub(vaultFlag)).div(10); if (vaultFlag == 1 && vaultFee > 0 && _vault != address(0)) { isToVault = true; } } function executeFunds(FunctionFlag flag, address srcToken, address wrappedToken, address caller, uint256 amount, uint256 fee, bytes calldata signature) internal returns (uint256 swapAmount) { (bool isToVault, uint256 vaultFee) = splitFee(fee); bool isAggregate = flag == FunctionFlag.cross ? false : true; uint256 actualAmountIn = calculateTradeFee(isAggregate, amount, vaultFee, signature); if (TransferHelper.isETH(srcToken)) { if (flag == FunctionFlag.cross) { require(msg.value >= amount, "invalid msg.value"); swapAmount = msg.value.sub(vaultFee); } else { require(msg.value == amount, "invalid msg.value"); swapAmount = actualAmountIn; } if (wrappedToken != address(0)) { require(_wrapped_allowed[wrappedToken], "Invalid wrapped address"); if (flag == FunctionFlag.cross) { TransferHelper.safeDeposit(wrappedToken, swapAmount); TransferHelper.safeApprove(wrappedToken, caller, swapAmount); swapAmount = 0; } else if (flag == FunctionFlag.executeV3Swap) { TransferHelper.safeDeposit(wrappedToken, actualAmountIn); } } if (isToVault) { TransferHelper.safeTransferETH(_vault, vaultFee); } } else { TransferHelper.safeTransferFrom(srcToken, msg.sender, address(this), amount); if (flag == FunctionFlag.cross) { TransferHelper.safeApprove(srcToken, caller, actualAmountIn); swapAmount = msg.value; } else if (flag == FunctionFlag.executeAggregate) { TransferHelper.safeTransfer(srcToken, caller, actualAmountIn); } else if (flag == FunctionFlag.executeV3Swap) { swapAmount = actualAmountIn; } if (isToVault) { TransferHelper.safeTransferWithoutRequire(srcToken, _vault, vaultFee); } } } }
// SPDX-License-Identifier: MIT pragma solidity >=0.5.0; interface IUniswapV3Pool { function token0() external view returns (address); function token1() external view returns (address); function fee() external view returns (uint24); function swap( address recipient, bool zeroForOne, int256 amountSpecified, uint160 sqrtPriceLimitX96, bytes calldata data ) external returns (int256 amount0, int256 amount1); }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.9; interface IUniswapV2 { function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountsOut(uint amountIn, address[] memory path) external view returns (uint[] memory amounts); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.9; interface IERC20 { function totalSupply() external view returns (uint256); function decimals() external view returns (uint8); function name() external view returns (string memory); function symbol() external view returns (string memory); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) // Add executor extension pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable { address private _executor; address private _pendingExecutor; bool internal _initialized; event ExecutorshipTransferStarted(address indexed previousExecutor, address indexed newExecutor); event ExecutorshipTransferred(address indexed previousExecutor, address indexed newExecutor); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor(address newExecutor) { require(!_initialized, "Ownable: initialized"); _transferExecutorship(newExecutor); _initialized = true; } /** * @dev Throws if called by any account other than the executor. */ modifier onlyExecutor() { _checkExecutor(); _; } /** * @dev Returns the address of the current executor. */ function executor() public view virtual returns (address) { return _executor; } /** * @dev Returns the address of the pending executor. */ function pendingExecutor() public view virtual returns (address) { return _pendingExecutor; } /** * @dev Throws if the sender is not the executor. */ function _checkExecutor() internal view virtual { require(executor() == msg.sender, "Ownable: caller is not the executor"); } /** * @dev Transfers executorship of the contract to a new account (`newExecutor`). * Can only be called by the current executor. */ function transferExecutorship(address newExecutor) public virtual onlyExecutor { _pendingExecutor = newExecutor; emit ExecutorshipTransferStarted(executor(), newExecutor); } function _transferExecutorship(address newExecutor) internal virtual { delete _pendingExecutor; address oldExecutor = _executor; _executor = newExecutor; emit ExecutorshipTransferred(oldExecutor, newExecutor); } function acceptExecutorship() external { address sender = msg.sender; require(pendingExecutor() == sender, "Ownable: caller is not the new executor"); _transferExecutorship(sender); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0; library SafeMath { function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x, 'ds-math-sub-underflow'); } function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow'); } function div(uint x, uint y) internal pure returns (uint z) { require(y != 0 , 'ds-math-div-zero'); z = x / y; } function toInt256(uint256 value) internal pure returns (int256) { require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256"); return int256(value); } function toUint256(int256 value) internal pure returns (uint256) { require(value >= 0, "SafeCast: value must be positive"); return uint256(value); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0; library RevertReasonParser { function parse(bytes memory data, string memory prefix) internal pure returns (string memory) { // https://solidity.readthedocs.io/en/latest/control-structures.html#revert // We assume that revert reason is abi-encoded as Error(string) // 68 = 4-byte selector 0x08c379a0 + 32 bytes offset + 32 bytes length if (data.length >= 68 && data[0] == "\x08" && data[1] == "\xc3" && data[2] == "\x79" && data[3] == "\xa0") { string memory reason; // solhint-disable no-inline-assembly assembly { // 68 = 32 bytes data length + 4-byte selector + 32 bytes offset reason := add(data, 68) } /* revert reason is padded up to 32 bytes with ABI encoder: Error(string) also sometimes there is extra 32 bytes of zeros padded in the end: https://github.com/ethereum/solidity/issues/10170 because of that we can't check for equality and instead check that string length + extra 68 bytes is less than overall data length */ require(data.length >= 68 + bytes(reason).length, "Invalid revert reason"); return string(abi.encodePacked(prefix, "Error(", reason, ")")); } // 36 = 4-byte selector 0x4e487b71 + 32 bytes integer else if (data.length == 36 && data[0] == "\x4e" && data[1] == "\x48" && data[2] == "\x7b" && data[3] == "\x71") { uint256 code; // solhint-disable no-inline-assembly assembly { // 36 = 32 bytes data length + 4-byte selector code := mload(add(data, 36)) } return string(abi.encodePacked(prefix, "Panic(", _toHex(code), ")")); } return string(abi.encodePacked(prefix, "Unknown(", _toHex(data), ")")); } function _toHex(uint256 value) private pure returns(string memory) { return _toHex(abi.encodePacked(value)); } function _toHex(bytes memory data) private pure returns(string memory) { bytes16 alphabet = 0x30313233343536373839616263646566; bytes memory str = new bytes(2 + data.length * 2); str[0] = "0"; str[1] = "x"; for (uint256 i = 0; i < data.length; i++) { str[2 * i + 2] = alphabet[uint8(data[i] >> 4)]; str[2 * i + 3] = alphabet[uint8(data[i] & 0x0f)]; } return string(str); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0; library TransferHelper { address private constant _ETH_ADDRESS = address(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE); address private constant _ZERO_ADDRESS = address(0); function isETH(address token) internal pure returns (bool) { return (token == _ZERO_ADDRESS || token == _ETH_ADDRESS); } function safeApprove(address token, address to, uint value) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED'); } function safeTransfer(address token, address to, uint value) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_TOKEN_FAILED'); } function safeTransferWithoutRequire(address token, address to, uint256 value) internal returns (bool) { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); return (success && (data.length == 0 || abi.decode(data, (bool)))); } function safeTransferFrom(address token, address from, address to, uint value) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED'); } function safeTransferETH(address to, uint value) internal { // solium-disable-next-line (bool success,) = to.call{value:value}(new bytes(0)); require(success, 'TransferHelper: TRANSFER_FAILED'); } function safeDeposit(address wrapped, uint value) internal { // bytes4(keccak256(bytes('deposit()'))); (bool success, bytes memory data) = wrapped.call{value:value}(abi.encodeWithSelector(0xd0e30db0)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: DEPOSIT_FAILED'); } function safeWithdraw(address wrapped, uint value) internal { // bytes4(keccak256(bytes('withdraw(uint256 wad)'))); (bool success, bytes memory data) = wrapped.call{value:0}(abi.encodeWithSelector(0x2e1a7d4d, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: WITHDRAW_FAILED'); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); assembly { sstore(_status.slot, _ENTERED) } _; assembly { sstore(_status.slot, _NOT_ENTERED) } } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account, FunctionFlag flag); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account, FunctionFlag flag); mapping(FunctionFlag => bool) private _paused; enum FunctionFlag {executeAggregate, executeV2Swap, executeV3Swap, cross} /** * @dev Initializes the contract in unpaused state. */ constructor() { } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused(FunctionFlag flag) { _requireNotPaused(flag); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused(FunctionFlag flag) { _requirePaused(flag); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused(FunctionFlag flag) public view virtual returns (bool) { return _paused[flag]; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused(FunctionFlag flag) internal view virtual { require(!paused(flag), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused(FunctionFlag flag) internal view virtual { require(paused(flag), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause(FunctionFlag flag) internal virtual whenNotPaused(flag) { _paused[flag] = true; emit Paused(msg.sender, flag); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause(FunctionFlag flag) internal virtual whenPaused(flag) { _paused[flag] = false; emit Unpaused(msg.sender, flag); } function pausedOverAll() public view virtual returns (bool executeAggregate, bool executeV2Swap, bool executeV3Swap, bool cross) { executeAggregate = _paused[FunctionFlag.executeAggregate]; executeV2Swap = _paused[FunctionFlag.executeV2Swap]; executeV3Swap = _paused[FunctionFlag.executeV3Swap]; cross = _paused[FunctionFlag.cross]; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newBridge","type":"address"}],"name":"ChangeAggregateBridge","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"callers","type":"address[]"}],"name":"ChangeCrossCallerAllowed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isAggregate","type":"bool"},{"indexed":false,"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"ChangeFeeRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"preSigner","type":"address"},{"indexed":false,"internalType":"address","name":"newSigner","type":"address"}],"name":"ChangeSigner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"poolIndex","type":"uint256[]"},{"indexed":false,"internalType":"address[]","name":"factories","type":"address[]"},{"indexed":false,"internalType":"bytes[]","name":"initCodeHash","type":"bytes[]"}],"name":"ChangeV3FactoryAllowed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"preVault","type":"address"},{"indexed":false,"internalType":"address","name":"newVault","type":"address"}],"name":"ChangeVault","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"wrappedTokens","type":"address[]"},{"indexed":false,"internalType":"bool[]","name":"newAllowed","type":"bool[]"}],"name":"ChangeWrappedAllowed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousExecutor","type":"address"},{"indexed":true,"internalType":"address","name":"newExecutor","type":"address"}],"name":"ExecutorshipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousExecutor","type":"address"},{"indexed":true,"internalType":"address","name":"newExecutor","type":"address"}],"name":"ExecutorshipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"enum Pausable.FunctionFlag","name":"flag","type":"uint8"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Receipt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"srcToken","type":"address"},{"indexed":true,"internalType":"address","name":"dstToken","type":"address"},{"indexed":true,"internalType":"address","name":"dstReceiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"returnAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toChainID","type":"uint256"},{"indexed":false,"internalType":"string","name":"channel","type":"string"}],"name":"TransitSwapped","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"enum Pausable.FunctionFlag","name":"flag","type":"uint8"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"executor","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"stateMutability":"nonpayable","type":"fallback"},{"inputs":[],"name":"CHECKFEE_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptExecutorship","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"srcToken","type":"address"},{"internalType":"address","name":"dstToken","type":"address"},{"internalType":"address","name":"dstReceiver","type":"address"},{"internalType":"address","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minReturnAmount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"string","name":"channel","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct BaseCore.TransitSwapDescription","name":"desc","type":"tuple"},{"components":[{"internalType":"address","name":"srcToken","type":"address"},{"internalType":"bytes","name":"calldatas","type":"bytes"}],"internalType":"struct BaseCore.CallbytesDescription","name":"callbytesDesc","type":"tuple"}],"name":"aggregate","outputs":[{"internalType":"uint256","name":"returnAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"srcToken","type":"address"},{"internalType":"address","name":"dstToken","type":"address"},{"internalType":"address","name":"dstReceiver","type":"address"},{"internalType":"address","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minReturnAmount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"string","name":"channel","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct BaseCore.TransitSwapDescription","name":"desc","type":"tuple"},{"components":[{"internalType":"address","name":"srcToken","type":"address"},{"internalType":"bytes","name":"calldatas","type":"bytes"}],"internalType":"struct BaseCore.CallbytesDescription","name":"callbytesDesc","type":"tuple"}],"name":"aggregateAndGasUsed","outputs":[{"internalType":"uint256","name":"returnAmount","type":"uint256"},{"internalType":"uint256","name":"gasUsed","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"crossCallers","type":"address[]"},{"internalType":"address[]","name":"wrappedTokens","type":"address[]"}],"name":"changeAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool[]","name":"isAggregate","type":"bool[]"},{"internalType":"uint256[]","name":"newRate","type":"uint256[]"}],"name":"changeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"paused","type":"bool"},{"internalType":"enum Pausable.FunctionFlag[]","name":"flags","type":"uint8[]"}],"name":"changePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"aggregator","type":"address"},{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"vault","type":"address"}],"name":"changeTransitProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"poolIndex","type":"uint256[]"},{"internalType":"address[]","name":"factories","type":"address[]"},{"internalType":"bytes[]","name":"initCodeHash","type":"bytes[]"}],"name":"changeUniswapV3FactoryAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"srcToken","type":"address"},{"internalType":"address","name":"dstToken","type":"address"},{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"dstReceiver","type":"address"},{"internalType":"address","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"toChain","type":"uint256"},{"internalType":"string","name":"channel","type":"string"},{"internalType":"bytes","name":"calls","type":"bytes"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct BaseCore.CrossDescription","name":"desc","type":"tuple"}],"name":"cross","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"dstReceiver","type":"address"},{"internalType":"address","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"router","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minReturnAmount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address[]","name":"pool","type":"address[]"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"string","name":"channel","type":"string"}],"internalType":"struct BaseCore.ExactInputV2SwapParams","name":"exactInput","type":"tuple"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"exactInputV2Swap","outputs":[{"internalType":"uint256","name":"returnAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"dstReceiver","type":"address"},{"internalType":"address","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"router","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minReturnAmount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address[]","name":"pool","type":"address[]"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"string","name":"channel","type":"string"}],"internalType":"struct BaseCore.ExactInputV2SwapParams","name":"exactInput","type":"tuple"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"exactInputV2SwapAndGasUsed","outputs":[{"internalType":"uint256","name":"returnAmount","type":"uint256"},{"internalType":"uint256","name":"gasUsed","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"srcToken","type":"address"},{"internalType":"address","name":"dstToken","type":"address"},{"internalType":"address","name":"dstReceiver","type":"address"},{"internalType":"address","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minReturnAmount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256[]","name":"pools","type":"uint256[]"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"string","name":"channel","type":"string"}],"internalType":"struct BaseCore.ExactInputV3SwapParams","name":"params","type":"tuple"}],"name":"exactInputV3Swap","outputs":[{"internalType":"uint256","name":"returnAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"srcToken","type":"address"},{"internalType":"address","name":"dstToken","type":"address"},{"internalType":"address","name":"dstReceiver","type":"address"},{"internalType":"address","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minReturnAmount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256[]","name":"pools","type":"uint256[]"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"string","name":"channel","type":"string"}],"internalType":"struct BaseCore.ExactInputV3SwapParams","name":"params","type":"tuple"}],"name":"exactInputV3SwapAndGasUsed","outputs":[{"internalType":"uint256","name":"returnAmount","type":"uint256"},{"internalType":"uint256","name":"gasUsed","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"executor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int256","name":"amount0Delta","type":"int256"},{"internalType":"int256","name":"amount1Delta","type":"int256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"pancakeV3SwapCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum Pausable.FunctionFlag","name":"flag","type":"uint8"}],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pausedOverAll","outputs":[{"internalType":"bool","name":"executeAggregate","type":"bool"},{"internalType":"bool","name":"executeV2Swap","type":"bool"},{"internalType":"bool","name":"executeV3Swap","type":"bool"},{"internalType":"bool","name":"cross","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingExecutor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newExecutor","type":"address"}],"name":"transferExecutorship","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"crossCaller","type":"address"},{"internalType":"address","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"poolIndex","type":"uint256"}],"name":"transitAllowedQuery","outputs":[{"internalType":"bool","name":"isCrossCallerAllowed","type":"bool"},{"internalType":"bool","name":"isWrappedAllowed","type":"bool"},{"components":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"bytes","name":"initCodeHash","type":"bytes"}],"internalType":"struct BaseCore.UniswapV3Pool","name":"pool","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transitFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transitProxyAddress","outputs":[{"internalType":"address","name":"bridgeProxy","type":"address"},{"internalType":"address","name":"feeSigner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int256","name":"amount0Delta","type":"int256"},{"internalType":"int256","name":"amount1Delta","type":"int256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"uniswapV3SwapCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801562000010575f80fd5b506001543390600160a01b900460ff1615620000725760405162461bcd60e51b815260206004820152601460248201527f4f776e61626c653a20696e697469616c697a6564000000000000000000000000604482015260640160405180910390fd5b6200007d8162000175565b506001805460ff60a01b1916600160a01b1781556003819055604080518082018252600d81526c5472616e73697453776170563560981b60209182015281518083018352928352603560f81b9281019290925280517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f928101929092527f20b7d1a4a088b240a0e093c572f43e31015ce187a55e6f343e049dcb744e5341908201527fceebf77a833b30520287ddd9478ff51abbdffa30aa90a8d655dba0e8a79ce0c160608201524660808201523060a082015260c00160408051601f198184030181529190528051602090910120600955620001ce565b600180546001600160a01b03199081169091555f80546001600160a01b03848116938216841783556040519116929183917f88436636ea40d5bb1bcc55ff9cd54788af71da886f4147a87f199adcca733d4d9190a35050565b615e3a80620001dc5f395ff3fe608060405260043610610184575f3560e01c80637ec753fe116100d0578063b9b5149b11610089578063d63234e011610063578063d63234e0146105a8578063d808d889146105c5578063fa461e33146102a4578063fa9ec7af146105d8576101c3565b8063b9b5149b14610546578063bf5c55a214610559578063c34c08e514610578576101c3565b80637ec753fe1461049757806392bcc8be146104b657806394d3d793146104d5578063afed2d0e146104e9578063b93c0beb14610508578063b946fd3b14610527576101c3565b80633644e5151161013d5780635ac86ab7116101175780635ac86ab7146103e95780636b3ec416146104185780636fbf72f91461042b5780637e467ecf14610464576101c3565b80633644e515146102eb5780633c481d57146103005780634c42342f146103d6576101c3565b80630ced9fb9146101ff5780630dc4bdae146102365780630e8cc705146102575780631975b0961461027657806323a69e75146102a45780632adb806f146102c3576101c3565b366101c357604080513381523460208201527f7784f8d436dc514f0690e472c7e2d7f660a73e504c69b2350f6be5a5f02432ef910160405180910390a1005b3480156101ce575f80fd5b505f80806101df3660048184614c38565b8101906101ec9190614cc9565b9250925092506101fd8383836105eb565b005b34801561020a575f80fd5b50600654600754604080516001600160a01b039384168152929091166020830152015b60405180910390f35b610249610244366004614d54565b610694565b60405190815260200161022d565b348015610262575f80fd5b506101fd610271366004614de0565b6106a6565b348015610281575f80fd5b50610295610290366004614e86565b610826565b60405161022d93929190614f11565b3480156102af575f80fd5b506101fd6102be366004614f4e565b610925565b6102d66102d1366004614fc6565b61096b565b6040805192835260208301919091520161022d565b3480156102f6575f80fd5b5061024960095481565b34801561030b575f80fd5b5060026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b547fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0547f679795a0195a1b76cdebb7c51d74e058aee92919b8c3389af86ef24535e8a28c5460035f527f88601476d11616a71c5be67555bd1dff4b1cbf21533d2669b768b61518cfe1c35460ff938416939283169291821691166040805194151585529215156020850152901515918301919091521515606082015260800161022d565b6102d66103e436600461504a565b610992565b3480156103f4575f80fd5b50610408610403366004615083565b6109b6565b604051901515815260200161022d565b6101fd61042636600461504a565b6109f6565b348015610436575f80fd5b506004546005546008546040805193845260208401929092526001600160a01b03169082015260600161022d565b34801561046f575f80fd5b506102497f048f880a603b1aab0e626a287e33d603417b3d53a36f7527b7c86365bf7def4f81565b3480156104a2575f80fd5b506101fd6104b1366004615111565b610d11565b3480156104c1575f80fd5b506101fd6104d0366004615209565b610e96565b3480156104e0575f80fd5b506101fd61107f565b3480156104f4575f80fd5b506101fd61050336600461529b565b611105565b348015610513575f80fd5b506101fd6105223660046152b6565b611175565b348015610532575f80fd5b506101fd61054136600461531c565b61142a565b61024961055436600461504a565b611573565b348015610564575f80fd5b506101fd610573366004615364565b611583565b348015610583575f80fd5b505f546001600160a01b03165b6040516001600160a01b03909116815260200161022d565b3480156105b3575f80fd5b506001546001600160a01b0316610590565b6102496105d3366004614fc6565b611618565b6102d66105e6366004614d54565b611623565b5f8313806105f857505f82135b6106345760405162461bcd60e51b81526020600482015260086024820152674d30206f72204d3160c01b60448201526064015b60405180910390fd5b5f808280602001905181019061064a91906153b4565b915091505f80828060200190518101906106649190615431565b91509150610673848233611633565b855f88131561067f5750865b61068a8333836117e6565b5050505050505050565b5f61069f8383611903565b9392505050565b6106ae611e9f565b5f5b8251811015610821575f6106dc8483815181106106cf576106cf61545d565b6020026020010151611f15565b156106f25750476106ed8382611f4d565b61079e565b8382815181106107045761070461545d565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610752573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107769190615471565b905061079c84838151811061078d5761078d61545d565b60200260200101518483612006565b505b826001600160a01b0316336001600160a01b03168584815181106107c4576107c461545d565b60200260200101516001600160a01b03167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f78460405161080691815260200190565b60405180910390a450806108198161549c565b9150506106b0565b505050565b6040805180820182525f80825260606020808401919091526001600160a01b038781168352600a8252848320548782168452600b835285842054878552600c84529386902086518088019097528054909216865260018201805460ff92831697929095169594919384019161089a906154b4565b80601f01602080910402602001604051908101604052809291908181526020018280546108c6906154b4565b80156109115780601f106108e857610100808354040283529160200191610911565b820191905f5260205f20905b8154815290600101906020018083116108f457829003601f168201915b505050505081525050905093509350939050565b610965848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506105eb92505050565b50505050565b5f805f5a905061097b85856120ea565b92505a61098890826154e6565b9150509250929050565b5f805f5a90506109a1846125fb565b92505a6109ae90826154e6565b915050915091565b5f60025f8360038111156109cc576109cc6154f9565b60038111156109dd576109dd6154f9565b815260208101919091526040015f205460ff1692915050565b600260035403610a185760405162461bcd60e51b815260040161062b9061550d565b60026003556003610a2881612b44565b5f610a37610120840184615544565b905011610a805760405162461bcd60e51b8152602060048201526017602482015276646174612073686f756c64206265206e6f74207a65726f60481b604482015260640161062b565b5f8260a0013511610ad35760405162461bcd60e51b815260206004820152601f60248201527f616d6f756e742073686f756c642062652067726561746572207468616e203000604482015260640161062b565b600a5f610ae6606085016040860161529b565b6001600160a01b0316815260208101919091526040015f205460ff16610b3f5760405162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21031b0b63632b960911b604482015260640161062b565b5f610b8f6003610b52602086018661529b565b610b6260a087016080880161529b565b610b72606088016040890161529b565b60a088013560c0890135610b8a6101408b018b615544565b612b8d565b90505f80610ba3606086016040870161529b565b6001600160a01b031683610bbb610120880188615544565b604051610bc9929190615586565b5f6040518083038185875af1925050503d805f8114610c03576040519150601f19603f3d011682016040523d82523d5f602084013e610c08565b606091505b509150915081610c5c57610c43816040518060400160405280600f81526020016e2a3930b739b4ba21b937b9b9ab1a9d60891b815250612e03565b60405162461bcd60e51b815260040161062b9190615595565b610c82610c6c602087018761529b565b610c7c606088016040890161529b565b5f613077565b50610d079050610c95602085018561529b565b610ca5604086016020870161529b565b610cb5608087016060880161529b565b60a08701355f60e0890135610cce6101008b018b615544565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061318692505050565b5050600160035550565b610d19611e9f565b5f5b8251811015610821575f828281518110610d3757610d3761545d565b602002602001015110158015610d6857506103e8828281518110610d5d57610d5d61545d565b602002602001015111155b610da95760405162461bcd60e51b8152602060048201526012602482015271066656520726174652069733a302d313030360741b604482015260640161062b565b828181518110610dbb57610dbb61545d565b602002602001015115610ded57818181518110610dda57610dda61545d565b6020026020010151600481905550610e0e565b818181518110610dff57610dff61545d565b60200260200101516005819055505b7f5fa95345cbe35dad70f67a9ca1430c22453a695590cb4fca05d58f637e85af4f838281518110610e4157610e4161545d565b6020026020010151838381518110610e5b57610e5b61545d565b6020026020010151604051610e7c9291909115158252602082015260400190565b60405180910390a180610e8e8161549c565b915050610d1b565b610e9e611e9f565b848114610edc5760405162461bcd60e51b815260206004820152600c60248201526b696e76616c6964206461746160a01b604482015260640161062b565b828114610f1a5760405162461bcd60e51b815260206004820152600c60248201526b696e76616c6964206461746160a01b604482015260640161062b565b825f5b81811015611034576040518060400160405280878784818110610f4257610f4261545d565b9050602002016020810190610f57919061529b565b6001600160a01b03168152602001858584818110610f7757610f7761545d565b9050602002810190610f899190615544565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509390945250600c92508b90508a85818110610fd557610fd561545d565b60209081029290920135835250818101929092526040015f20825181546001600160a01b0319166001600160a01b0390911617815590820151600182019061101d90826155ec565b50905050808061102c9061549c565b915050610f1d565b507f652c1af850dcc0b28fcb71cd9473023f56a89edd81bbe7b51056a04caa94002487878787878760405161106e96959493929190615757565b60405180910390a150505050505050565b33806110936001546001600160a01b031690565b6001600160a01b0316146110f95760405162461bcd60e51b815260206004820152602760248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206e657720656044820152663c32b1baba37b960c91b606482015260840161062b565b611102816131ea565b50565b61110d611e9f565b600180546001600160a01b0383166001600160a01b0319909116811790915561113d5f546001600160a01b031690565b6001600160a01b03167fdd01547fc40682edc3cd8d164d53f5a1ae6b46138a83f045658ed760823ddba860405160405180910390a350565b61117d611e9f565b8215611275575f5b8381101561123a57600a5f8686848181106111a2576111a261545d565b90506020020160208101906111b7919061529b565b6001600160a01b0316815260208101919091526040015f9081205460ff161590600a908787858181106111ec576111ec61545d565b9050602002016020810190611201919061529b565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055806112328161549c565b915050611185565b507fb05655746bd43b7fe3ccd9d28b7685b4c67ddc51e70890062b0f7f85dd692695848460405161126c929190615807565b60405180910390a15b8015610965575f816001600160401b0381111561129457611294614c5f565b6040519080825280602002602001820160405280156112bd578160200160208202803683370190505b5090505f5b828110156113e757600b5f8585848181106112df576112df61545d565b90506020020160208101906112f4919061529b565b6001600160a01b0316815260208101919091526040015f9081205460ff161590600b908686858181106113295761132961545d565b905060200201602081019061133e919061529b565b6001600160a01b0316815260208101919091526040015f908120805460ff191692151592909217909155600b9085858481811061137d5761137d61545d565b9050602002016020810190611392919061529b565b6001600160a01b0316815260208101919091526040015f2054825160ff909116908390839081106113c5576113c561545d565b91151560209283029190910190910152806113df8161549c565b9150506112c2565b507f4a28b173d9bc739be3886d172e07fef80392184787fc6b92406ce0f0c05b7e6383838360405161141b9392919061581a565b60405180910390a15050505050565b611432611e9f565b6001600160a01b0383161561149357600680546001600160a01b0319166001600160a01b0385169081179091556040519081527f347fade115440908839b750620f0add8f417b77a392657edd70b950373eda9c39060200160405180910390a15b6001600160a01b0382161561150157600780546001600160a01b038481166001600160a01b031983168117909355604080519190921680825260208201939093527ff9c6fa562c9d8326f8518a29a53ef18ab03cd6b9eead73ac667c5e289354c73e910160405180910390a1505b6001600160a01b0381161561082157600880546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3911b5760f95a64aaa8d7f1775f57a7b6ed0bcf1ebb3fbfcc045e2f04eaad11910160405180910390a150505050565b5f61157d826125fb565b92915050565b61158b611e9f565b805f5b818110156116115784156115d0576115cb8484838181106115b1576115b161545d565b90506020020160208101906115c69190615083565b613243565b6115ff565b6115ff8484838181106115e5576115e561545d565b90506020020160208101906115fa9190615083565b6132d5565b806116098161549c565b91505061158e565b5050505050565b5f61069f83836120ea565b5f805f5a905061097b8585611903565b600f60f884901c165f818152600c60209081526040808320815180830190925280546001600160a01b031682526001810180549293919291840191611677906154b4565b80601f01602080910402602001604051908101604052809291908181526020018280546116a3906154b4565b80156116ee5780601f106116c5576101008083540402835291602001916116ee565b820191905f5260205f20905b8154815290600101906020018083116116d157829003601f168201915b5050509190925250508151919250506001600160a01b03166117525760405162461bcd60e51b815260206004820152601960248201527f43616c6c6261636b2062616420706f6f6c20696e646578656400000000000000604482015260640161062b565b5f815f015185836020015160405160200161176f93929190615873565b604051602081830303815290604052805190602001205f1c9050836001600160a01b0316816001600160a01b0316146117de5760405162461bcd60e51b815260206004820152601160248201527010d85b1b189858dac8189859081c1bdbdb607a1b604482015260640161062b565b505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291515f9283929087169161184191906158bb565b5f604051808303815f865af19150503d805f811461187a576040519150601f19603f3d011682016040523d82523d5f602084013e61187f565b606091505b50915091508180156118a95750805115806118a95750808060200190518101906118a991906158d6565b6116115760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657248656c7065723a205452414e534645525f544f4b454e5f46604482015264105253115160da1b606482015260840161062b565b5f6002600354036119265760405162461bcd60e51b815260040161062b9061550d565b6002600355600161193681612b44565b428310156119705760405162461bcd60e51b8152602060048201526007602482015266115e1c1a5c995960ca1b604482015260640161062b565b6001600f604086013560f81c16145f8080808061198d8a8761335a565b945094509450945094506119ef835f815181106119ac576119ac61545d565b60200260200101518b8060e001906119c491906158f1565b5f8181106119d4576119d461545d565b90506020020160208101906119e9919061529b565b866117e6565b8515611bb6578415611ad357611a4960408b013584611a1160e08e018e6158f1565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250309250613887915050565b611acc82611a5d60408d0160208e0161529b565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a08231906024015b602060405180830381865afa158015611aa2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ac69190615471565b90613b7e565b9750611d4f565b611b3f60408b013584611ae960e08e018e6158f1565b808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f820116905080830192505050505050508d5f016020810190611b3a919061529b565b613887565b611acc818460018651611b5291906154e6565b81518110611b6257611b6261545d565b60200260200101516001600160a01b03166370a082318d5f016020810190611b8a919061529b565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401611a87565b5f8a604001356001600160a01b031663d06ca61f86866040518363ffffffff1660e01b8152600401611be9929190615936565b5f60405180830381865afa158015611c03573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c2a919081019061598b565b90508515611c9757611c7c8185611c4460e08f018f6158f1565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250309250613bd3915050565b611c9083611a5d60408e0160208f0161529b565b9850611d4d565b611cff8185611ca960e08f018f6158f1565b808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f820116905080830192505050505050508e5f016020810190611cfa919061529b565b613bd3565b611d4a828560018751611d1291906154e6565b81518110611d2257611d2261545d565b60200260200101516001600160a01b03166370a082318e5f016020810190611b8a919061529b565b98505b505b8960800135881015611d735760405162461bcd60e51b815260040161062b90615a0b565b8415611da857611d92611d8c60408c0160208d0161529b565b89613dbd565b611da8611da260208c018c61529b565b89611f4d565b50505050505f85806101200190611dbf9190615544565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929350611e919250611e0791505060c08801886158f1565b5f818110611e1757611e1761545d565b9050602002016020810190611e2c919061529b565b611e3960c08901896158f1565b6001611e4860c08c018c6158f1565b611e539291506154e6565b818110611e6257611e6261545d565b9050602002016020810190611e77919061529b565b611e8460208a018a61529b565b8960600135885f87613186565b505050600160035592915050565b33611eb15f546001600160a01b031690565b6001600160a01b031614611f135760405162461bcd60e51b815260206004820152602360248201527f4f776e61626c653a2063616c6c6572206973206e6f74207468652065786563756044820152623a37b960e91b606482015260840161062b565b565b5f6001600160a01b038216158061157d57506001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1492915050565b604080515f808252602082019092526001600160a01b038416908390604051611f7691906158bb565b5f6040518083038185875af1925050503d805f8114611fb0576040519150601f19603f3d011682016040523d82523d5f602084013e611fb5565b606091505b50509050806108215760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015260640161062b565b5f805f856001600160a01b031663a9059cbb868660405160240161203f9291906001600160a01b03929092168252602082015260400190565b6040516020818303038152906040529060e01b6020820180516001600160e01b03838183161783525050505060405161207891906158bb565b5f604051808303815f865af19150503d805f81146120b1576040519150601f19603f3d011682016040523d82523d5f602084013e6120b6565b606091505b50915091508180156120e05750805115806120e05750808060200190518101906120e091906158d6565b9695505050505050565b5f60026003540361210d5760405162461bcd60e51b815260040161062b9061550d565b60026003555f61211c81612b44565b5f61212a6020850185615544565b9050116121735760405162461bcd60e51b8152602060048201526017602482015276646174612073686f756c64206265206e6f74207a65726f60481b604482015260640161062b565b5f8460800135116121c65760405162461bcd60e51b815260206004820152601f60248201527f616d6f756e742073686f756c642062652067726561746572207468616e203000604482015260640161062b565b5f6121d7606086016040870161529b565b6001600160a01b0316036122375760405162461bcd60e51b815260206004820152602160248201527f72656365697665722073686f756c64206265206e6f74206164647265737328306044820152602960f81b606482015260840161062b565b5f8460a001351161229b5760405162461bcd60e51b815260206004820152602860248201527f6d696e52657475726e416d6f756e742073686f756c6420626520677265617465604482015267072207468616e20360c41b606482015260840161062b565b600b5f6122ae608087016060880161529b565b6001600160a01b0316815260208101919091526040015f205460ff166123165760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420777261707065642061646472657373000000000000000000604482015260640161062b565b6006545f906001600160a01b03168161235f8161233660208a018a61529b565b61234660808b0160608c0161529b565b8560808c013560c08d0135610b8a6101008f018f615544565b90506123796123746040890160208a0161529b565b611f15565b1561239f5761238e606088016040890161529b565b6001600160a01b0316319250612436565b6123af604088016020890161529b565b6001600160a01b03166370a082316123cd60608a0160408b0161529b565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561240f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124339190615471565b92505b5f80836001600160a01b031683633f3204d28a6040516024016124599190615a38565b6040516020818303038152906040529060e01b6020820180516001600160e01b03838183161783525050505060405161249291906158bb565b5f6040518083038185875af1925050503d805f81146124cc576040519150601f19603f3d011682016040523d82523d5f602084013e6124d1565b606091505b50915091508161250957610c43816040518060400160405280600c81526020016b2a3930b739b4ba29bbb0b81d60a11b815250612e03565b5061251f90506123746040890160208a0161529b565b1561254f576125488361253860608a0160408b0161529b565b6001600160a01b03163190613b7e565b9450612584565b6125818361256360408a0160208b0161529b565b6001600160a01b03166370a08231611b8a60608c0160408d0161529b565b94505b8660a001358510156125a85760405162461bcd60e51b815260040161062b90615a0b565b6125ec6125b8602089018961529b565b6125c860408a0160208b0161529b565b6125d860608b0160408c0161529b565b60808b0135895f610cce60e08f018f615544565b50505050600160035592915050565b5f60026003540361261e5760405162461bcd60e51b815260040161062b9061550d565b6002600355600261262e81612b44565b5f61263d6101008501856158f1565b90501161267a5760405162461bcd60e51b815260206004820152600b60248201526a456d70747920706f6f6c7360a81b604482015260640161062b565b428360e0013510156126b85760405162461bcd60e51b8152602060048201526007602482015266115e1c1a5c995960ca1b604482015260640161062b565b600b5f6126cb608086016060870161529b565b6001600160a01b0316815260208101919091526040015f205460ff166127035760405162461bcd60e51b815260040161062b90615a83565b5f612711602085018561529b565b90505f612724604086016020870161529b565b90505f80612738612374602089018961529b565b156127505761274d608088016060890161529b565b93505b5f61278f600261276360208b018b61529b565b61277360808c0160608d0161529b565b5f8c608001358d60c001358e806101200190610b8a9190615544565b90506127a461237460408a0160208b0161529b565b1561283e576127b96080890160608a0161529b565b93506127cb6080890160608a0161529b565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561280f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128339190615471565b9250600191506128d5565b61284e6040890160208a0161529b565b6001600160a01b03166370a0823161286c60608b0160408c0161529b565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156128ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128d29190615471565b92505b5f6128e46101008a018a6158f1565b91503090506060600183111561299c57875f805b85811015612991575f8e80610100019061291291906158f1565b838181106129225761292261545d565b905060200201359050612936848483613ed0565b955093506129456001886154e6565b82148015612951575088155b1561296f578e6040016020810190612969919061529b565b95508a92505b61297b8682878b6141bb565b97505080806129899061549c565b9150506128f8565b50859b505050612a1a565b6129cb88886129af6101008f018f6158f1565b5f8181106129bf576129bf61545d565b90506020020135613ed0565b91508590506129e7576129e460608c0160408d0161529b565b91505b612a17826129f96101008e018e6158f1565b5f818110612a0957612a0961545d565b9050602002013583876141bb565b99505b5050508115612a9457612a3783611a5d60808b0160608c0161529b565b96508760a00135871015612a5d5760405162461bcd60e51b815260040161062b90615a0b565b612a76612a7060808a0160608b0161529b565b88613dbd565b612a8f612a8960608a0160408b0161529b565b88611f4d565b612aec565b612ac683612aa860408b0160208c0161529b565b6001600160a01b03166370a08231611b8a60608d0160408e0161529b565b96508760a00135871015612aec5760405162461bcd60e51b815260040161062b90615a0b565b612b34612afc60208a018a61529b565b612b0c60408b0160208c0161529b565b612b1c60608c0160408d0161529b565b8b608001358b5f8e806101400190610cce9190615544565b5050505050506001600355919050565b612b4d816109b6565b156111025760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161062b565b5f805f612b998661436a565b90925090505f60038c6003811115612bb357612bb36154f9565b14612bbf576001612bc1565b5f5b90505f612bd1828a858a8a6143c6565b9050612bdc8c611f15565b15612d565760038d6003811115612bf557612bf56154f9565b03612c4f5788341015612c3e5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964206d73672e76616c756560781b604482015260640161062b565b612c483484613b7e565b9450612c96565b883414612c925760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964206d73672e76616c756560781b604482015260640161062b565b8094505b6001600160a01b038b1615612d35576001600160a01b038b165f908152600b602052604090205460ff16612cdc5760405162461bcd60e51b815260040161062b90615a83565b60038d6003811115612cf057612cf06154f9565b03612d1257612cff8b8661447b565b612d0a8b8b87613077565b5f9450612d35565b60028d6003811115612d2657612d266154f9565b03612d3557612d358b8261447b565b8315612d5157600854612d51906001600160a01b031684611f4d565b612df3565b612d628c33308c614575565b60038d6003811115612d7657612d766154f9565b03612d8e57612d868c8b83613077565b349450612dd3565b5f8d6003811115612da157612da16154f9565b03612db657612db18c8b836117e6565b612dd3565b60028d6003811115612dca57612dca6154f9565b03612dd3578094505b8315612df357600854612df1908d906001600160a01b031685612006565b505b5050505098975050505050505050565b60606044835110158015612e3b5750825f81518110612e2457612e2461545d565b6020910101516001600160f81b031916600160fb1b145b8015612e6c575082600181518110612e5557612e5561545d565b6020910101516001600160f81b03191660c360f81b145b8015612e9d575082600281518110612e8657612e8661545d565b6020910101516001600160f81b031916607960f81b145b8015612ece575082600381518110612eb757612eb761545d565b6020910101516001600160f81b031916600560fd1b145b15612f5857604483810180519091612ee69190615aba565b84511015612f2e5760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103932bb32b93a103932b0b9b7b760591b604482015260640161062b565b8281604051602001612f41929190615acd565b60405160208183030381529060405291505061157d565b82516024148015612f8d5750825f81518110612f7657612f7661545d565b6020910101516001600160f81b031916602760f91b145b8015612fbe575082600181518110612fa757612fa761545d565b6020910101516001600160f81b031916600960fb1b145b8015612fef575082600281518110612fd857612fd861545d565b6020910101516001600160f81b031916607b60f81b145b80156130205750826003815181106130095761300961545d565b6020910101516001600160f81b031916607160f81b145b156130455760248301518261303482614698565b604051602001612f41929190615b1b565b8161304f846146c0565b604051602001613060929190615b4f565b604051602081830303815290604052905092915050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b17905291515f928392908716916130d291906158bb565b5f604051808303815f865af19150503d805f811461310b576040519150601f19603f3d011682016040523d82523d5f602084013e613110565b606091505b509150915081801561313a57508051158061313a57508080602001905181019061313a91906158d6565b6116115760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a20415050524f56455f4641494c45440000604482015260640161062b565b846001600160a01b0316866001600160a01b0316886001600160a01b03167f2251435bd151cd72851a82be055bf6d1c3d7f34d08d56493dddf874229b8e897878787876040516131d99493929190615b9f565b60405180910390a450505050505050565b600180546001600160a01b03199081169091555f80546001600160a01b03848116938216841783556040519116929183917f88436636ea40d5bb1bcc55ff9cd54788af71da886f4147a87f199adcca733d4d9190a35050565b8061324d81612b44565b600160025f846003811115613264576132646154f9565b6003811115613275576132756154f9565b81526020019081526020015f205f6101000a81548160ff0219169083151502179055507f534f879afd40abb4e39f8e1b77a316be4c8e3521d9cf5a3a3db8959d574d455933836040516132c9929190615bc3565b60405180910390a15050565b806132df816148a0565b5f60025f8460038111156132f5576132f56154f9565b6003811115613306576133066154f9565b81526020019081526020015f205f6101000a81548160ff0219169083151502179055507f4cd3e1443d03aba343c5d882744f8f172c07b495e955ac3defb325cbd73c855033836040516132c9929190615bc3565b5f806060818061336d60e08801886158f1565b61337991506001615aba565b61338660c08901896158f1565b9050146133c45760405162461bcd60e51b815260206004820152600c60248201526b092dcecc2d8d2c840e0c2e8d60a31b604482015260640161062b565b600b5f6133d760408a0160208b0161529b565b6001600160a01b0316815260208101919091526040015f205460ff1661340f5760405162461bcd60e51b815260040161062b90615a83565b5f8061341e8960a0013561436a565b9092509050613441600160608b01358361343c6101008e018e615544565b6143c6565b95505f61345160c08b018b6158f1565b808060200260200160405190810160405280939291908181526020018383602002808284375f92018290525093945084925060019150613496905060c08e018e6158f1565b6134a19291506154e6565b815181106134b1576134b161545d565b602002602001015190506134f38b8060c001906134ce91906158f1565b5f8181106134de576134de61545d565b9050602002016020810190612374919061529b565b156135b3578a60600135341461353f5760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964206d73672e76616c756560781b604482015260640161062b565b831561355b5760085461355b906001600160a01b031684611f4d565b61356b60408c0160208d0161529b565b825f8151811061357d5761357d61545d565b6001600160a01b039092166020928302919091018201526135ae906135a89060408e01908e0161529b565b8961447b565b613714565b89156136c557815f815181106135cb576135cb61545d565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015613619573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061363d9190615471565b9750613668825f815181106136545761365461545d565b602002602001015133308e60600135614575565b6136be8b60a00135611ac68a855f815181106136865761368661545d565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401611a87565b97506136da565b6136da825f815181106136545761365461545d565b831561371457613712825f815181106136f5576136f561545d565b60209081029190910101516008546001600160a01b031685612006565b505b61371d81611f15565b156137eb5761373260408c0160208d0161529b565b826001845161374191906154e6565b815181106137515761375161545d565b6001600160a01b039092166020928302919091018201526001995061377c9060408d01908d0161529b565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156137c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137e49190615471565b9550613876565b8915613876576001600160a01b0381166370a0823161380d60208e018e61529b565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561384f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138739190615471565b94505b819650505050509295509295909350565b5f5b6001845161389791906154e6565b811015611611575f808583815181106138b2576138b261545d565b6020026020010151868460016138c89190615aba565b815181106138d8576138d861545d565b6020026020010151915091505f816001600160a01b0316836001600160a01b031610613905578183613908565b82825b5090505f86858151811061391e5761391e61545d565b602002602001015190505f805f80846001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015613968573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061398c9190615c12565b506001600160701b031691506001600160701b031691505f80876001600160a01b03168a6001600160a01b0316146139c55782846139c8565b83835b6040516370a0823160e01b81526001600160a01b038a81166004830152929450909250613a03918491908d16906370a0823190602401611a87565b95508e6001600160a01b031663054d50d48784846040518463ffffffff1660e01b8152600401613a46939291909283526020830191909152604082015260600190565b602060405180830381865afa158015613a61573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a859190615471565b9450505050505f80856001600160a01b0316886001600160a01b031614613aad57825f613ab0565b5f835b915091505f60028d51613ac391906154e6565b8a10613acf578a613af4565b8b613adb8b6001615aba565b81518110613aeb57613aeb61545d565b60200260200101515b604080515f8152602081019182905263022c0d9f60e01b9091529091506001600160a01b0387169063022c0d9f90613b359086908690869060248101615c53565b5f604051808303815f87803b158015613b4c575f80fd5b505af1158015613b5e573d5f803e3d5ffd5b505050505050505050505050508080613b769061549c565b915050613889565b5f82613b8a83826154e6565b915081111561157d5760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015260640161062b565b5f5b60018451613be391906154e6565b811015611611575f80858381518110613bfe57613bfe61545d565b602002602001015186846001613c149190615aba565b81518110613c2457613c2461545d565b6020026020010151915091505f816001600160a01b0316836001600160a01b031610613c51578183613c54565b82825b5090505f88613c64866001615aba565b81518110613c7457613c7461545d565b602002602001015190505f80836001600160a01b0316866001600160a01b031614613ca057825f613ca3565b5f835b915091505f60028b51613cb691906154e6565b8810613cc25788613ce7565b89613cce896001615aba565b81518110613cde57613cde61545d565b60200260200101515b9050898881518110613cfb57613cfb61545d565b60200260200101516001600160a01b031663022c0d9f8484845f6001600160401b03811115613d2c57613d2c614c5f565b6040519080825280601f01601f191660200182016040528015613d56576020820181803683370190505b506040518563ffffffff1660e01b8152600401613d769493929190615c53565b5f604051808303815f87803b158015613d8d575f80fd5b505af1158015613d9f573d5f803e3d5ffd5b50505050505050505050508080613db59061549c565b915050613bd5565b5f80836001600160a01b03165f632e1a7d4d85604051602401613de291815260200190565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051613e1b91906158bb565b5f6040518083038185875af1925050503d805f8114613e55576040519150601f19603f3d011682016040523d82523d5f602084013e613e5a565b606091505b5091509150818015613e84575080511580613e84575080806020019051810190613e8491906158d6565b6109655760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a2057495448445241575f4641494c454400604482015260640161062b565b5f60605f8390505f816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f14573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f389190615c7f565b90505f826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f9b9190615c7f565b90505f836001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015613fda573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ffe9190615c9a565b604080516001600160a01b03808716602083015285169181019190915262ffffff821660608201529091505f9060800160408051601f1981840301815291905280516020909101209050600160ff1b88161580156140fe57846001600160a01b03168b6001600160a01b0316146140875760405162461bcd60e51b815260040161062b90615cbc565b6001600160a01b038a16156140c757836001600160a01b03168a6001600160a01b0316146140c75760405162461bcd60e51b815260040161062b90615cbc565b604080516001600160a01b0387166020820152908101839052939750879360600160405160208183030381529060405296506141a2565b836001600160a01b03168b6001600160a01b03161461412f5760405162461bcd60e51b815260040161062b90615cbc565b6001600160a01b038a161561416f57846001600160a01b03168a6001600160a01b03161461416f5760405162461bcd60e51b815260040161062b90615cbc565b604080516001600160a01b0386166020820152908101839052949750879460600160405160208183030381529060405296505b6141ad89838b611633565b505050505050935093915050565b5f600160ff1b8416158015614293575f856001600160a01b031663128acb0888846141e5886148ec565b6141f56401000276a36001615cde565b8b8b604051602001614208929190615d05565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401614237959493929190615d1d565b60408051808303815f875af1158015614252573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142769190615d57565b91505061428b8161428690615d79565b614959565b925050614361565b5f856001600160a01b031663128acb0888846142ae886148ec565b6142cd600173fffd8963efd1fc6a506488495d951d5263988d26615d93565b8b8b6040516020016142e0929190615d05565b6040516020818303038152906040526040518663ffffffff1660e01b815260040161430f959493929190615d1d565b60408051808303815f875af115801561432a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061434e9190615d57565b50905061435d61428682615d79565b9250505b50949350505050565b5f8080614378600a85615dc7565b905061438f600a6143898684613b7e565b906149aa565b91508060011480156143a057505f82115b80156143b657506008546001600160a01b031615155b156143c057600192505b50915091565b5f8086156143f0576143e9612710614389600454896149f790919063ffffffff16565b905061440e565b61440b612710614389600554896149f790919063ffffffff16565b90505b808510156144665761442286868686614a5d565b6144665760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207369676e61747572652066656560581b604482015260640161062b565b6144708686613b7e565b979650505050505050565b60408051600481526024810182526020810180516001600160e01b0316630d0e30db60e41b17905290515f9182916001600160a01b0386169185916144c091906158bb565b5f6040518083038185875af1925050503d805f81146144fa576040519150601f19603f3d011682016040523d82523d5f602084013e6144ff565b606091505b509150915081801561452957508051158061452957508080602001905181019061452991906158d6565b6109655760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a204445504f5349545f4641494c45440000604482015260640161062b565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291515f928392908816916145d891906158bb565b5f604051808303815f865af19150503d805f8114614611576040519150601f19603f3d011682016040523d82523d5f602084013e614616565b606091505b509150915081801561464057508051158061464057508080602001905181019061464091906158d6565b6117de5760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f46416044820152631253115160e21b606482015260840161062b565b606061157d826040516020016146b091815260200190565b6040516020818303038152906040525b80516060906f181899199a1a9b1b9c1cb0b131b232b360811b905f906146e7906002615dda565b6146f2906002615aba565b6001600160401b0381111561470957614709614c5f565b6040519080825280601f01601f191660200182016040528015614733576020820181803683370190505b509050600360fc1b815f8151811061474d5761474d61545d565b60200101906001600160f81b03191690815f1a905350600f60fb1b8160018151811061477b5761477b61545d565b60200101906001600160f81b03191690815f1a9053505f5b8451811015614898578260048683815181106147b1576147b161545d565b01602001516001600160f81b031916901c60f81c601081106147d5576147d561545d565b1a60f81b826147e5836002615dda565b6147f0906002615aba565b815181106148005761480061545d565b60200101906001600160f81b03191690815f1a905350828582815181106148295761482961545d565b60209101015160f81c600f16601081106148455761484561545d565b1a60f81b82614855836002615dda565b614860906003615aba565b815181106148705761487061545d565b60200101906001600160f81b03191690815f1a905350806148908161549c565b915050614793565b509392505050565b6148a9816109b6565b6111025760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161062b565b5f6001600160ff1b038211156149555760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b606482015260840161062b565b5090565b5f808212156149555760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015260640161062b565b5f815f036149ed5760405162461bcd60e51b815260206004820152601060248201526f64732d6d6174682d6469762d7a65726f60801b604482015260640161062b565b61069f8284615df1565b5f811580614a1a57508282614a0c8183615dda565b9250614a189083615df1565b145b61157d5760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015260640161062b565b600954604080517f048f880a603b1aab0e626a287e33d603417b3d53a36f7527b7c86365bf7def4f6020820152339181019190915260608101869052608081018590525f91829160a00160405160208183030381529060405280519060200120604051602001614ae492919061190160f01b81526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090505f805f614b3d87878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250614bc992505050565b9250925092505f6001858585856040515f8152602001604052604051614b7f949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015614b9f573d5f803e3d5ffd5b5050604051601f1901516007546001600160a01b039081169116149b9a5050505050505050505050565b5f805f8351604114614c1d5760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964207369676e6174757265206c656e6774680000000000000000604482015260640161062b565b505050602081015160408201516060909201515f1a92909190565b5f8085851115614c46575f80fd5b83861115614c52575f80fd5b5050820193919092039150565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715614c9b57614c9b614c5f565b604052919050565b5f6001600160401b03821115614cbb57614cbb614c5f565b50601f01601f191660200190565b5f805f60608486031215614cdb575f80fd5b833592506020840135915060408401356001600160401b03811115614cfe575f80fd5b8401601f81018613614d0e575f80fd5b8035614d21614d1c82614ca3565b614c73565b818152876020838501011115614d35575f80fd5b816020840160208301375f602083830101528093505050509250925092565b5f8060408385031215614d65575f80fd5b82356001600160401b03811115614d7a575f80fd5b83016101408186031215614d8c575f80fd5b946020939093013593505050565b5f6001600160401b03821115614db257614db2614c5f565b5060051b60200190565b6001600160a01b0381168114611102575f80fd5b8035614ddb81614dbc565b919050565b5f8060408385031215614df1575f80fd5b82356001600160401b03811115614e06575f80fd5b8301601f81018513614e16575f80fd5b80356020614e26614d1c83614d9a565b82815260059290921b83018101918181019088841115614e44575f80fd5b938201935b83851015614e6b578435614e5c81614dbc565b82529382019390820190614e49565b9550614e7a9050868201614dd0565b93505050509250929050565b5f805f60608486031215614e98575f80fd5b8335614ea381614dbc565b92506020840135614eb381614dbc565b929592945050506040919091013590565b5f5b83811015614ede578181015183820152602001614ec6565b50505f910152565b5f8151808452614efd816020860160208601614ec4565b601f01601f19169290920160200192915050565b831515815282151560208201526060604082015260018060a01b0382511660608201525f6020830151604060808401526120e060a0840182614ee6565b5f805f8060608587031215614f61575f80fd5b843593506020850135925060408501356001600160401b0380821115614f85575f80fd5b818701915087601f830112614f98575f80fd5b813581811115614fa6575f80fd5b886020828501011115614fb7575f80fd5b95989497505060200194505050565b5f8060408385031215614fd7575f80fd5b82356001600160401b0380821115614fed575f80fd5b908401906101208287031215615001575f80fd5b90925060208401359080821115615016575f80fd5b50830160408186031215615028575f80fd5b809150509250929050565b5f6101608284031215615044575f80fd5b50919050565b5f6020828403121561505a575f80fd5b81356001600160401b0381111561506f575f80fd5b61507b84828501615033565b949350505050565b5f60208284031215615093575f80fd5b81356004811061069f575f80fd5b8015158114611102575f80fd5b5f82601f8301126150bd575f80fd5b813560206150cd614d1c83614d9a565b82815260059290921b840181019181810190868411156150eb575f80fd5b8286015b8481101561510657803583529183019183016150ef565b509695505050505050565b5f8060408385031215615122575f80fd5b82356001600160401b0380821115615138575f80fd5b818501915085601f83011261514b575f80fd5b8135602061515b614d1c83614d9a565b82815260059290921b84018101918181019089841115615179575f80fd5b948201945b838610156151a0578535615191816150a1565b8252948201949082019061517e565b965050860135925050808211156151b5575f80fd5b50610988858286016150ae565b5f8083601f8401126151d2575f80fd5b5081356001600160401b038111156151e8575f80fd5b6020830191508360208260051b8501011115615202575f80fd5b9250929050565b5f805f805f806060878903121561521e575f80fd5b86356001600160401b0380821115615234575f80fd5b6152408a838b016151c2565b90985096506020890135915080821115615258575f80fd5b6152648a838b016151c2565b9096509450604089013591508082111561527c575f80fd5b5061528989828a016151c2565b979a9699509497509295939492505050565b5f602082840312156152ab575f80fd5b813561069f81614dbc565b5f805f80604085870312156152c9575f80fd5b84356001600160401b03808211156152df575f80fd5b6152eb888389016151c2565b90965094506020870135915080821115615303575f80fd5b50615310878288016151c2565b95989497509550505050565b5f805f6060848603121561532e575f80fd5b833561533981614dbc565b9250602084013561534981614dbc565b9150604084013561535981614dbc565b809150509250925092565b5f805f60408486031215615376575f80fd5b8335615381816150a1565b925060208401356001600160401b0381111561539b575f80fd5b6153a7868287016151c2565b9497909650939450505050565b5f80604083850312156153c5575f80fd5b8251915060208301516001600160401b038111156153e1575f80fd5b8301601f810185136153f1575f80fd5b80516153ff614d1c82614ca3565b818152866020838501011115615413575f80fd5b615424826020830160208601614ec4565b8093505050509250929050565b5f8060408385031215615442575f80fd5b825161544d81614dbc565b6020939093015192949293505050565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215615481575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b5f600182016154ad576154ad615488565b5060010190565b600181811c908216806154c857607f821691505b60208210810361504457634e487b7160e01b5f52602260045260245ffd5b8181038181111561157d5761157d615488565b634e487b7160e01b5f52602160045260245ffd5b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b5f808335601e19843603018112615559575f80fd5b8301803591506001600160401b03821115615572575f80fd5b602001915036819003821315615202575f80fd5b818382375f9101908152919050565b602081525f61069f6020830184614ee6565b601f821115610821575f81815260208120601f850160051c810160208610156155cd5750805b601f850160051c820191505b818110156117de578281556001016155d9565b81516001600160401b0381111561560557615605614c5f565b6156198161561384546154b4565b846155a7565b602080601f83116001811461564c575f84156156355750858301515b5f19600386901b1c1916600185901b1785556117de565b5f85815260208120601f198616915b8281101561567a5788860151825594840194600190910190840161565b565b508582101561569757878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b8183525f60208085019450825f5b858110156156e35781356156c881614dbc565b6001600160a01b0316875295820195908201906001016156b5565b509495945050505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e1984360301811261572b575f80fd5b83016020810192503590506001600160401b03811115615749575f80fd5b803603821315615202575f80fd5b606080825281018690525f6001600160fb1b03871115615775575f80fd5b8660051b80896080850137808301905060206080848303018185015261579f60808301888a6156a7565b84810360408601528581529150808201600586901b83018201875f5b888110156157f557858303601f190184526157d6828b615716565b6157e18582846156ee565b9587019594505050908401906001016157bb565b50909c9b505050505050505050505050565b602081525f61507b6020830184866156a7565b604081525f61582d6040830185876156a7565b8281036020848101919091528451808352858201928201905f5b81811015615865578451151583529383019391830191600101615847565b509098975050505050505050565b60ff60f81b81526bffffffffffffffffffffffff198460601b1660018201528260158201525f82516158ac816035850160208701614ec4565b91909101603501949350505050565b5f82516158cc818460208701614ec4565b9190910192915050565b5f602082840312156158e6575f80fd5b815161069f816150a1565b5f808335601e19843603018112615906575f80fd5b8301803591506001600160401b0382111561591f575f80fd5b6020019150600581901b3603821315615202575f80fd5b5f60408201848352602060408185015281855180845260608601915082870193505f5b8181101561597e5784516001600160a01b031683529383019391830191600101615959565b5090979650505050505050565b5f602080838503121561599c575f80fd5b82516001600160401b038111156159b1575f80fd5b8301601f810185136159c1575f80fd5b80516159cf614d1c82614d9a565b81815260059190911b820183019083810190878311156159ed575f80fd5b928401925b82841015614470578351825292840192908401906159f2565b602080825260139082015272151bdbc81b1a5d1d1b19481c9958d95a5d9959606a1b604082015260600190565b602081525f8235615a4881614dbc565b6001600160a01b0316602083810191909152615a6690840184615716565b604080850152615a7a6060850182846156ee565b95945050505050565b60208082526017908201527f496e76616c696420777261707065642061646472657373000000000000000000604082015260600190565b8082018082111561157d5761157d615488565b5f8351615ade818460208801614ec4565b6508ae4e4dee4560d31b9083019081528351615b01816006840160208801614ec4565b602960f81b60069290910191820152600701949350505050565b5f8351615b2c818460208801614ec4565b650a0c2dcd2c6560d31b9083019081528351615b01816006840160208801614ec4565b5f8351615b60818460208801614ec4565b670aadcd6dcdeeedc560c31b9083019081528351615b85816008840160208801614ec4565b602960f81b60089290910191820152600901949350505050565b848152836020820152826040820152608060608201525f6120e06080830184614ee6565b6001600160a01b03831681526040810160048310615bef57634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b80516001600160701b0381168114614ddb575f80fd5b5f805f60608486031215615c24575f80fd5b615c2d84615bfc565b9250615c3b60208501615bfc565b9150604084015163ffffffff81168114615359575f80fd5b84815283602082015260018060a01b0383166040820152608060608201525f6120e06080830184614ee6565b5f60208284031215615c8f575f80fd5b815161069f81614dbc565b5f60208284031215615caa575f80fd5b815162ffffff8116811461069f575f80fd5b602080825260089082015267109859081c1bdbdb60c21b604082015260600190565b6001600160a01b03818116838216019080821115615cfe57615cfe615488565b5092915050565b828152604060208201525f61507b6040830184614ee6565b6001600160a01b0386811682528515156020830152604082018590528316606082015260a0608082018190525f9061447090830184614ee6565b5f8060408385031215615d68575f80fd5b505080516020909101519092909150565b5f600160ff1b8201615d8d57615d8d615488565b505f0390565b6001600160a01b03828116828216039080821115615cfe57615cfe615488565b634e487b7160e01b5f52601260045260245ffd5b5f82615dd557615dd5615db3565b500690565b808202811582820484141761157d5761157d615488565b5f82615dff57615dff615db3565b50049056fea26469706673582212204f637f4c295074f72cbc3c36d09625f5fdf3a44c7aff79ff9b262a8ea106cf0864736f6c63430008140033
Deployed Bytecode
0x608060405260043610610184575f3560e01c80637ec753fe116100d0578063b9b5149b11610089578063d63234e011610063578063d63234e0146105a8578063d808d889146105c5578063fa461e33146102a4578063fa9ec7af146105d8576101c3565b8063b9b5149b14610546578063bf5c55a214610559578063c34c08e514610578576101c3565b80637ec753fe1461049757806392bcc8be146104b657806394d3d793146104d5578063afed2d0e146104e9578063b93c0beb14610508578063b946fd3b14610527576101c3565b80633644e5151161013d5780635ac86ab7116101175780635ac86ab7146103e95780636b3ec416146104185780636fbf72f91461042b5780637e467ecf14610464576101c3565b80633644e515146102eb5780633c481d57146103005780634c42342f146103d6576101c3565b80630ced9fb9146101ff5780630dc4bdae146102365780630e8cc705146102575780631975b0961461027657806323a69e75146102a45780632adb806f146102c3576101c3565b366101c357604080513381523460208201527f7784f8d436dc514f0690e472c7e2d7f660a73e504c69b2350f6be5a5f02432ef910160405180910390a1005b3480156101ce575f80fd5b505f80806101df3660048184614c38565b8101906101ec9190614cc9565b9250925092506101fd8383836105eb565b005b34801561020a575f80fd5b50600654600754604080516001600160a01b039384168152929091166020830152015b60405180910390f35b610249610244366004614d54565b610694565b60405190815260200161022d565b348015610262575f80fd5b506101fd610271366004614de0565b6106a6565b348015610281575f80fd5b50610295610290366004614e86565b610826565b60405161022d93929190614f11565b3480156102af575f80fd5b506101fd6102be366004614f4e565b610925565b6102d66102d1366004614fc6565b61096b565b6040805192835260208301919091520161022d565b3480156102f6575f80fd5b5061024960095481565b34801561030b575f80fd5b5060026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b547fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0547f679795a0195a1b76cdebb7c51d74e058aee92919b8c3389af86ef24535e8a28c5460035f527f88601476d11616a71c5be67555bd1dff4b1cbf21533d2669b768b61518cfe1c35460ff938416939283169291821691166040805194151585529215156020850152901515918301919091521515606082015260800161022d565b6102d66103e436600461504a565b610992565b3480156103f4575f80fd5b50610408610403366004615083565b6109b6565b604051901515815260200161022d565b6101fd61042636600461504a565b6109f6565b348015610436575f80fd5b506004546005546008546040805193845260208401929092526001600160a01b03169082015260600161022d565b34801561046f575f80fd5b506102497f048f880a603b1aab0e626a287e33d603417b3d53a36f7527b7c86365bf7def4f81565b3480156104a2575f80fd5b506101fd6104b1366004615111565b610d11565b3480156104c1575f80fd5b506101fd6104d0366004615209565b610e96565b3480156104e0575f80fd5b506101fd61107f565b3480156104f4575f80fd5b506101fd61050336600461529b565b611105565b348015610513575f80fd5b506101fd6105223660046152b6565b611175565b348015610532575f80fd5b506101fd61054136600461531c565b61142a565b61024961055436600461504a565b611573565b348015610564575f80fd5b506101fd610573366004615364565b611583565b348015610583575f80fd5b505f546001600160a01b03165b6040516001600160a01b03909116815260200161022d565b3480156105b3575f80fd5b506001546001600160a01b0316610590565b6102496105d3366004614fc6565b611618565b6102d66105e6366004614d54565b611623565b5f8313806105f857505f82135b6106345760405162461bcd60e51b81526020600482015260086024820152674d30206f72204d3160c01b60448201526064015b60405180910390fd5b5f808280602001905181019061064a91906153b4565b915091505f80828060200190518101906106649190615431565b91509150610673848233611633565b855f88131561067f5750865b61068a8333836117e6565b5050505050505050565b5f61069f8383611903565b9392505050565b6106ae611e9f565b5f5b8251811015610821575f6106dc8483815181106106cf576106cf61545d565b6020026020010151611f15565b156106f25750476106ed8382611f4d565b61079e565b8382815181106107045761070461545d565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610752573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107769190615471565b905061079c84838151811061078d5761078d61545d565b60200260200101518483612006565b505b826001600160a01b0316336001600160a01b03168584815181106107c4576107c461545d565b60200260200101516001600160a01b03167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f78460405161080691815260200190565b60405180910390a450806108198161549c565b9150506106b0565b505050565b6040805180820182525f80825260606020808401919091526001600160a01b038781168352600a8252848320548782168452600b835285842054878552600c84529386902086518088019097528054909216865260018201805460ff92831697929095169594919384019161089a906154b4565b80601f01602080910402602001604051908101604052809291908181526020018280546108c6906154b4565b80156109115780601f106108e857610100808354040283529160200191610911565b820191905f5260205f20905b8154815290600101906020018083116108f457829003601f168201915b505050505081525050905093509350939050565b610965848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506105eb92505050565b50505050565b5f805f5a905061097b85856120ea565b92505a61098890826154e6565b9150509250929050565b5f805f5a90506109a1846125fb565b92505a6109ae90826154e6565b915050915091565b5f60025f8360038111156109cc576109cc6154f9565b60038111156109dd576109dd6154f9565b815260208101919091526040015f205460ff1692915050565b600260035403610a185760405162461bcd60e51b815260040161062b9061550d565b60026003556003610a2881612b44565b5f610a37610120840184615544565b905011610a805760405162461bcd60e51b8152602060048201526017602482015276646174612073686f756c64206265206e6f74207a65726f60481b604482015260640161062b565b5f8260a0013511610ad35760405162461bcd60e51b815260206004820152601f60248201527f616d6f756e742073686f756c642062652067726561746572207468616e203000604482015260640161062b565b600a5f610ae6606085016040860161529b565b6001600160a01b0316815260208101919091526040015f205460ff16610b3f5760405162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21031b0b63632b960911b604482015260640161062b565b5f610b8f6003610b52602086018661529b565b610b6260a087016080880161529b565b610b72606088016040890161529b565b60a088013560c0890135610b8a6101408b018b615544565b612b8d565b90505f80610ba3606086016040870161529b565b6001600160a01b031683610bbb610120880188615544565b604051610bc9929190615586565b5f6040518083038185875af1925050503d805f8114610c03576040519150601f19603f3d011682016040523d82523d5f602084013e610c08565b606091505b509150915081610c5c57610c43816040518060400160405280600f81526020016e2a3930b739b4ba21b937b9b9ab1a9d60891b815250612e03565b60405162461bcd60e51b815260040161062b9190615595565b610c82610c6c602087018761529b565b610c7c606088016040890161529b565b5f613077565b50610d079050610c95602085018561529b565b610ca5604086016020870161529b565b610cb5608087016060880161529b565b60a08701355f60e0890135610cce6101008b018b615544565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061318692505050565b5050600160035550565b610d19611e9f565b5f5b8251811015610821575f828281518110610d3757610d3761545d565b602002602001015110158015610d6857506103e8828281518110610d5d57610d5d61545d565b602002602001015111155b610da95760405162461bcd60e51b8152602060048201526012602482015271066656520726174652069733a302d313030360741b604482015260640161062b565b828181518110610dbb57610dbb61545d565b602002602001015115610ded57818181518110610dda57610dda61545d565b6020026020010151600481905550610e0e565b818181518110610dff57610dff61545d565b60200260200101516005819055505b7f5fa95345cbe35dad70f67a9ca1430c22453a695590cb4fca05d58f637e85af4f838281518110610e4157610e4161545d565b6020026020010151838381518110610e5b57610e5b61545d565b6020026020010151604051610e7c9291909115158252602082015260400190565b60405180910390a180610e8e8161549c565b915050610d1b565b610e9e611e9f565b848114610edc5760405162461bcd60e51b815260206004820152600c60248201526b696e76616c6964206461746160a01b604482015260640161062b565b828114610f1a5760405162461bcd60e51b815260206004820152600c60248201526b696e76616c6964206461746160a01b604482015260640161062b565b825f5b81811015611034576040518060400160405280878784818110610f4257610f4261545d565b9050602002016020810190610f57919061529b565b6001600160a01b03168152602001858584818110610f7757610f7761545d565b9050602002810190610f899190615544565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509390945250600c92508b90508a85818110610fd557610fd561545d565b60209081029290920135835250818101929092526040015f20825181546001600160a01b0319166001600160a01b0390911617815590820151600182019061101d90826155ec565b50905050808061102c9061549c565b915050610f1d565b507f652c1af850dcc0b28fcb71cd9473023f56a89edd81bbe7b51056a04caa94002487878787878760405161106e96959493929190615757565b60405180910390a150505050505050565b33806110936001546001600160a01b031690565b6001600160a01b0316146110f95760405162461bcd60e51b815260206004820152602760248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206e657720656044820152663c32b1baba37b960c91b606482015260840161062b565b611102816131ea565b50565b61110d611e9f565b600180546001600160a01b0383166001600160a01b0319909116811790915561113d5f546001600160a01b031690565b6001600160a01b03167fdd01547fc40682edc3cd8d164d53f5a1ae6b46138a83f045658ed760823ddba860405160405180910390a350565b61117d611e9f565b8215611275575f5b8381101561123a57600a5f8686848181106111a2576111a261545d565b90506020020160208101906111b7919061529b565b6001600160a01b0316815260208101919091526040015f9081205460ff161590600a908787858181106111ec576111ec61545d565b9050602002016020810190611201919061529b565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055806112328161549c565b915050611185565b507fb05655746bd43b7fe3ccd9d28b7685b4c67ddc51e70890062b0f7f85dd692695848460405161126c929190615807565b60405180910390a15b8015610965575f816001600160401b0381111561129457611294614c5f565b6040519080825280602002602001820160405280156112bd578160200160208202803683370190505b5090505f5b828110156113e757600b5f8585848181106112df576112df61545d565b90506020020160208101906112f4919061529b565b6001600160a01b0316815260208101919091526040015f9081205460ff161590600b908686858181106113295761132961545d565b905060200201602081019061133e919061529b565b6001600160a01b0316815260208101919091526040015f908120805460ff191692151592909217909155600b9085858481811061137d5761137d61545d565b9050602002016020810190611392919061529b565b6001600160a01b0316815260208101919091526040015f2054825160ff909116908390839081106113c5576113c561545d565b91151560209283029190910190910152806113df8161549c565b9150506112c2565b507f4a28b173d9bc739be3886d172e07fef80392184787fc6b92406ce0f0c05b7e6383838360405161141b9392919061581a565b60405180910390a15050505050565b611432611e9f565b6001600160a01b0383161561149357600680546001600160a01b0319166001600160a01b0385169081179091556040519081527f347fade115440908839b750620f0add8f417b77a392657edd70b950373eda9c39060200160405180910390a15b6001600160a01b0382161561150157600780546001600160a01b038481166001600160a01b031983168117909355604080519190921680825260208201939093527ff9c6fa562c9d8326f8518a29a53ef18ab03cd6b9eead73ac667c5e289354c73e910160405180910390a1505b6001600160a01b0381161561082157600880546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3911b5760f95a64aaa8d7f1775f57a7b6ed0bcf1ebb3fbfcc045e2f04eaad11910160405180910390a150505050565b5f61157d826125fb565b92915050565b61158b611e9f565b805f5b818110156116115784156115d0576115cb8484838181106115b1576115b161545d565b90506020020160208101906115c69190615083565b613243565b6115ff565b6115ff8484838181106115e5576115e561545d565b90506020020160208101906115fa9190615083565b6132d5565b806116098161549c565b91505061158e565b5050505050565b5f61069f83836120ea565b5f805f5a905061097b8585611903565b600f60f884901c165f818152600c60209081526040808320815180830190925280546001600160a01b031682526001810180549293919291840191611677906154b4565b80601f01602080910402602001604051908101604052809291908181526020018280546116a3906154b4565b80156116ee5780601f106116c5576101008083540402835291602001916116ee565b820191905f5260205f20905b8154815290600101906020018083116116d157829003601f168201915b5050509190925250508151919250506001600160a01b03166117525760405162461bcd60e51b815260206004820152601960248201527f43616c6c6261636b2062616420706f6f6c20696e646578656400000000000000604482015260640161062b565b5f815f015185836020015160405160200161176f93929190615873565b604051602081830303815290604052805190602001205f1c9050836001600160a01b0316816001600160a01b0316146117de5760405162461bcd60e51b815260206004820152601160248201527010d85b1b189858dac8189859081c1bdbdb607a1b604482015260640161062b565b505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291515f9283929087169161184191906158bb565b5f604051808303815f865af19150503d805f811461187a576040519150601f19603f3d011682016040523d82523d5f602084013e61187f565b606091505b50915091508180156118a95750805115806118a95750808060200190518101906118a991906158d6565b6116115760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657248656c7065723a205452414e534645525f544f4b454e5f46604482015264105253115160da1b606482015260840161062b565b5f6002600354036119265760405162461bcd60e51b815260040161062b9061550d565b6002600355600161193681612b44565b428310156119705760405162461bcd60e51b8152602060048201526007602482015266115e1c1a5c995960ca1b604482015260640161062b565b6001600f604086013560f81c16145f8080808061198d8a8761335a565b945094509450945094506119ef835f815181106119ac576119ac61545d565b60200260200101518b8060e001906119c491906158f1565b5f8181106119d4576119d461545d565b90506020020160208101906119e9919061529b565b866117e6565b8515611bb6578415611ad357611a4960408b013584611a1160e08e018e6158f1565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250309250613887915050565b611acc82611a5d60408d0160208e0161529b565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a08231906024015b602060405180830381865afa158015611aa2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ac69190615471565b90613b7e565b9750611d4f565b611b3f60408b013584611ae960e08e018e6158f1565b808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f820116905080830192505050505050508d5f016020810190611b3a919061529b565b613887565b611acc818460018651611b5291906154e6565b81518110611b6257611b6261545d565b60200260200101516001600160a01b03166370a082318d5f016020810190611b8a919061529b565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401611a87565b5f8a604001356001600160a01b031663d06ca61f86866040518363ffffffff1660e01b8152600401611be9929190615936565b5f60405180830381865afa158015611c03573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c2a919081019061598b565b90508515611c9757611c7c8185611c4460e08f018f6158f1565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250309250613bd3915050565b611c9083611a5d60408e0160208f0161529b565b9850611d4d565b611cff8185611ca960e08f018f6158f1565b808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f820116905080830192505050505050508e5f016020810190611cfa919061529b565b613bd3565b611d4a828560018751611d1291906154e6565b81518110611d2257611d2261545d565b60200260200101516001600160a01b03166370a082318e5f016020810190611b8a919061529b565b98505b505b8960800135881015611d735760405162461bcd60e51b815260040161062b90615a0b565b8415611da857611d92611d8c60408c0160208d0161529b565b89613dbd565b611da8611da260208c018c61529b565b89611f4d565b50505050505f85806101200190611dbf9190615544565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929350611e919250611e0791505060c08801886158f1565b5f818110611e1757611e1761545d565b9050602002016020810190611e2c919061529b565b611e3960c08901896158f1565b6001611e4860c08c018c6158f1565b611e539291506154e6565b818110611e6257611e6261545d565b9050602002016020810190611e77919061529b565b611e8460208a018a61529b565b8960600135885f87613186565b505050600160035592915050565b33611eb15f546001600160a01b031690565b6001600160a01b031614611f135760405162461bcd60e51b815260206004820152602360248201527f4f776e61626c653a2063616c6c6572206973206e6f74207468652065786563756044820152623a37b960e91b606482015260840161062b565b565b5f6001600160a01b038216158061157d57506001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1492915050565b604080515f808252602082019092526001600160a01b038416908390604051611f7691906158bb565b5f6040518083038185875af1925050503d805f8114611fb0576040519150601f19603f3d011682016040523d82523d5f602084013e611fb5565b606091505b50509050806108215760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015260640161062b565b5f805f856001600160a01b031663a9059cbb868660405160240161203f9291906001600160a01b03929092168252602082015260400190565b6040516020818303038152906040529060e01b6020820180516001600160e01b03838183161783525050505060405161207891906158bb565b5f604051808303815f865af19150503d805f81146120b1576040519150601f19603f3d011682016040523d82523d5f602084013e6120b6565b606091505b50915091508180156120e05750805115806120e05750808060200190518101906120e091906158d6565b9695505050505050565b5f60026003540361210d5760405162461bcd60e51b815260040161062b9061550d565b60026003555f61211c81612b44565b5f61212a6020850185615544565b9050116121735760405162461bcd60e51b8152602060048201526017602482015276646174612073686f756c64206265206e6f74207a65726f60481b604482015260640161062b565b5f8460800135116121c65760405162461bcd60e51b815260206004820152601f60248201527f616d6f756e742073686f756c642062652067726561746572207468616e203000604482015260640161062b565b5f6121d7606086016040870161529b565b6001600160a01b0316036122375760405162461bcd60e51b815260206004820152602160248201527f72656365697665722073686f756c64206265206e6f74206164647265737328306044820152602960f81b606482015260840161062b565b5f8460a001351161229b5760405162461bcd60e51b815260206004820152602860248201527f6d696e52657475726e416d6f756e742073686f756c6420626520677265617465604482015267072207468616e20360c41b606482015260840161062b565b600b5f6122ae608087016060880161529b565b6001600160a01b0316815260208101919091526040015f205460ff166123165760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420777261707065642061646472657373000000000000000000604482015260640161062b565b6006545f906001600160a01b03168161235f8161233660208a018a61529b565b61234660808b0160608c0161529b565b8560808c013560c08d0135610b8a6101008f018f615544565b90506123796123746040890160208a0161529b565b611f15565b1561239f5761238e606088016040890161529b565b6001600160a01b0316319250612436565b6123af604088016020890161529b565b6001600160a01b03166370a082316123cd60608a0160408b0161529b565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561240f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124339190615471565b92505b5f80836001600160a01b031683633f3204d28a6040516024016124599190615a38565b6040516020818303038152906040529060e01b6020820180516001600160e01b03838183161783525050505060405161249291906158bb565b5f6040518083038185875af1925050503d805f81146124cc576040519150601f19603f3d011682016040523d82523d5f602084013e6124d1565b606091505b50915091508161250957610c43816040518060400160405280600c81526020016b2a3930b739b4ba29bbb0b81d60a11b815250612e03565b5061251f90506123746040890160208a0161529b565b1561254f576125488361253860608a0160408b0161529b565b6001600160a01b03163190613b7e565b9450612584565b6125818361256360408a0160208b0161529b565b6001600160a01b03166370a08231611b8a60608c0160408d0161529b565b94505b8660a001358510156125a85760405162461bcd60e51b815260040161062b90615a0b565b6125ec6125b8602089018961529b565b6125c860408a0160208b0161529b565b6125d860608b0160408c0161529b565b60808b0135895f610cce60e08f018f615544565b50505050600160035592915050565b5f60026003540361261e5760405162461bcd60e51b815260040161062b9061550d565b6002600355600261262e81612b44565b5f61263d6101008501856158f1565b90501161267a5760405162461bcd60e51b815260206004820152600b60248201526a456d70747920706f6f6c7360a81b604482015260640161062b565b428360e0013510156126b85760405162461bcd60e51b8152602060048201526007602482015266115e1c1a5c995960ca1b604482015260640161062b565b600b5f6126cb608086016060870161529b565b6001600160a01b0316815260208101919091526040015f205460ff166127035760405162461bcd60e51b815260040161062b90615a83565b5f612711602085018561529b565b90505f612724604086016020870161529b565b90505f80612738612374602089018961529b565b156127505761274d608088016060890161529b565b93505b5f61278f600261276360208b018b61529b565b61277360808c0160608d0161529b565b5f8c608001358d60c001358e806101200190610b8a9190615544565b90506127a461237460408a0160208b0161529b565b1561283e576127b96080890160608a0161529b565b93506127cb6080890160608a0161529b565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561280f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128339190615471565b9250600191506128d5565b61284e6040890160208a0161529b565b6001600160a01b03166370a0823161286c60608b0160408c0161529b565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156128ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128d29190615471565b92505b5f6128e46101008a018a6158f1565b91503090506060600183111561299c57875f805b85811015612991575f8e80610100019061291291906158f1565b838181106129225761292261545d565b905060200201359050612936848483613ed0565b955093506129456001886154e6565b82148015612951575088155b1561296f578e6040016020810190612969919061529b565b95508a92505b61297b8682878b6141bb565b97505080806129899061549c565b9150506128f8565b50859b505050612a1a565b6129cb88886129af6101008f018f6158f1565b5f8181106129bf576129bf61545d565b90506020020135613ed0565b91508590506129e7576129e460608c0160408d0161529b565b91505b612a17826129f96101008e018e6158f1565b5f818110612a0957612a0961545d565b9050602002013583876141bb565b99505b5050508115612a9457612a3783611a5d60808b0160608c0161529b565b96508760a00135871015612a5d5760405162461bcd60e51b815260040161062b90615a0b565b612a76612a7060808a0160608b0161529b565b88613dbd565b612a8f612a8960608a0160408b0161529b565b88611f4d565b612aec565b612ac683612aa860408b0160208c0161529b565b6001600160a01b03166370a08231611b8a60608d0160408e0161529b565b96508760a00135871015612aec5760405162461bcd60e51b815260040161062b90615a0b565b612b34612afc60208a018a61529b565b612b0c60408b0160208c0161529b565b612b1c60608c0160408d0161529b565b8b608001358b5f8e806101400190610cce9190615544565b5050505050506001600355919050565b612b4d816109b6565b156111025760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161062b565b5f805f612b998661436a565b90925090505f60038c6003811115612bb357612bb36154f9565b14612bbf576001612bc1565b5f5b90505f612bd1828a858a8a6143c6565b9050612bdc8c611f15565b15612d565760038d6003811115612bf557612bf56154f9565b03612c4f5788341015612c3e5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964206d73672e76616c756560781b604482015260640161062b565b612c483484613b7e565b9450612c96565b883414612c925760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964206d73672e76616c756560781b604482015260640161062b565b8094505b6001600160a01b038b1615612d35576001600160a01b038b165f908152600b602052604090205460ff16612cdc5760405162461bcd60e51b815260040161062b90615a83565b60038d6003811115612cf057612cf06154f9565b03612d1257612cff8b8661447b565b612d0a8b8b87613077565b5f9450612d35565b60028d6003811115612d2657612d266154f9565b03612d3557612d358b8261447b565b8315612d5157600854612d51906001600160a01b031684611f4d565b612df3565b612d628c33308c614575565b60038d6003811115612d7657612d766154f9565b03612d8e57612d868c8b83613077565b349450612dd3565b5f8d6003811115612da157612da16154f9565b03612db657612db18c8b836117e6565b612dd3565b60028d6003811115612dca57612dca6154f9565b03612dd3578094505b8315612df357600854612df1908d906001600160a01b031685612006565b505b5050505098975050505050505050565b60606044835110158015612e3b5750825f81518110612e2457612e2461545d565b6020910101516001600160f81b031916600160fb1b145b8015612e6c575082600181518110612e5557612e5561545d565b6020910101516001600160f81b03191660c360f81b145b8015612e9d575082600281518110612e8657612e8661545d565b6020910101516001600160f81b031916607960f81b145b8015612ece575082600381518110612eb757612eb761545d565b6020910101516001600160f81b031916600560fd1b145b15612f5857604483810180519091612ee69190615aba565b84511015612f2e5760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103932bb32b93a103932b0b9b7b760591b604482015260640161062b565b8281604051602001612f41929190615acd565b60405160208183030381529060405291505061157d565b82516024148015612f8d5750825f81518110612f7657612f7661545d565b6020910101516001600160f81b031916602760f91b145b8015612fbe575082600181518110612fa757612fa761545d565b6020910101516001600160f81b031916600960fb1b145b8015612fef575082600281518110612fd857612fd861545d565b6020910101516001600160f81b031916607b60f81b145b80156130205750826003815181106130095761300961545d565b6020910101516001600160f81b031916607160f81b145b156130455760248301518261303482614698565b604051602001612f41929190615b1b565b8161304f846146c0565b604051602001613060929190615b4f565b604051602081830303815290604052905092915050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b17905291515f928392908716916130d291906158bb565b5f604051808303815f865af19150503d805f811461310b576040519150601f19603f3d011682016040523d82523d5f602084013e613110565b606091505b509150915081801561313a57508051158061313a57508080602001905181019061313a91906158d6565b6116115760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a20415050524f56455f4641494c45440000604482015260640161062b565b846001600160a01b0316866001600160a01b0316886001600160a01b03167f2251435bd151cd72851a82be055bf6d1c3d7f34d08d56493dddf874229b8e897878787876040516131d99493929190615b9f565b60405180910390a450505050505050565b600180546001600160a01b03199081169091555f80546001600160a01b03848116938216841783556040519116929183917f88436636ea40d5bb1bcc55ff9cd54788af71da886f4147a87f199adcca733d4d9190a35050565b8061324d81612b44565b600160025f846003811115613264576132646154f9565b6003811115613275576132756154f9565b81526020019081526020015f205f6101000a81548160ff0219169083151502179055507f534f879afd40abb4e39f8e1b77a316be4c8e3521d9cf5a3a3db8959d574d455933836040516132c9929190615bc3565b60405180910390a15050565b806132df816148a0565b5f60025f8460038111156132f5576132f56154f9565b6003811115613306576133066154f9565b81526020019081526020015f205f6101000a81548160ff0219169083151502179055507f4cd3e1443d03aba343c5d882744f8f172c07b495e955ac3defb325cbd73c855033836040516132c9929190615bc3565b5f806060818061336d60e08801886158f1565b61337991506001615aba565b61338660c08901896158f1565b9050146133c45760405162461bcd60e51b815260206004820152600c60248201526b092dcecc2d8d2c840e0c2e8d60a31b604482015260640161062b565b600b5f6133d760408a0160208b0161529b565b6001600160a01b0316815260208101919091526040015f205460ff1661340f5760405162461bcd60e51b815260040161062b90615a83565b5f8061341e8960a0013561436a565b9092509050613441600160608b01358361343c6101008e018e615544565b6143c6565b95505f61345160c08b018b6158f1565b808060200260200160405190810160405280939291908181526020018383602002808284375f92018290525093945084925060019150613496905060c08e018e6158f1565b6134a19291506154e6565b815181106134b1576134b161545d565b602002602001015190506134f38b8060c001906134ce91906158f1565b5f8181106134de576134de61545d565b9050602002016020810190612374919061529b565b156135b3578a60600135341461353f5760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964206d73672e76616c756560781b604482015260640161062b565b831561355b5760085461355b906001600160a01b031684611f4d565b61356b60408c0160208d0161529b565b825f8151811061357d5761357d61545d565b6001600160a01b039092166020928302919091018201526135ae906135a89060408e01908e0161529b565b8961447b565b613714565b89156136c557815f815181106135cb576135cb61545d565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015613619573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061363d9190615471565b9750613668825f815181106136545761365461545d565b602002602001015133308e60600135614575565b6136be8b60a00135611ac68a855f815181106136865761368661545d565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401611a87565b97506136da565b6136da825f815181106136545761365461545d565b831561371457613712825f815181106136f5576136f561545d565b60209081029190910101516008546001600160a01b031685612006565b505b61371d81611f15565b156137eb5761373260408c0160208d0161529b565b826001845161374191906154e6565b815181106137515761375161545d565b6001600160a01b039092166020928302919091018201526001995061377c9060408d01908d0161529b565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156137c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137e49190615471565b9550613876565b8915613876576001600160a01b0381166370a0823161380d60208e018e61529b565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561384f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138739190615471565b94505b819650505050509295509295909350565b5f5b6001845161389791906154e6565b811015611611575f808583815181106138b2576138b261545d565b6020026020010151868460016138c89190615aba565b815181106138d8576138d861545d565b6020026020010151915091505f816001600160a01b0316836001600160a01b031610613905578183613908565b82825b5090505f86858151811061391e5761391e61545d565b602002602001015190505f805f80846001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015613968573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061398c9190615c12565b506001600160701b031691506001600160701b031691505f80876001600160a01b03168a6001600160a01b0316146139c55782846139c8565b83835b6040516370a0823160e01b81526001600160a01b038a81166004830152929450909250613a03918491908d16906370a0823190602401611a87565b95508e6001600160a01b031663054d50d48784846040518463ffffffff1660e01b8152600401613a46939291909283526020830191909152604082015260600190565b602060405180830381865afa158015613a61573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a859190615471565b9450505050505f80856001600160a01b0316886001600160a01b031614613aad57825f613ab0565b5f835b915091505f60028d51613ac391906154e6565b8a10613acf578a613af4565b8b613adb8b6001615aba565b81518110613aeb57613aeb61545d565b60200260200101515b604080515f8152602081019182905263022c0d9f60e01b9091529091506001600160a01b0387169063022c0d9f90613b359086908690869060248101615c53565b5f604051808303815f87803b158015613b4c575f80fd5b505af1158015613b5e573d5f803e3d5ffd5b505050505050505050505050508080613b769061549c565b915050613889565b5f82613b8a83826154e6565b915081111561157d5760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015260640161062b565b5f5b60018451613be391906154e6565b811015611611575f80858381518110613bfe57613bfe61545d565b602002602001015186846001613c149190615aba565b81518110613c2457613c2461545d565b6020026020010151915091505f816001600160a01b0316836001600160a01b031610613c51578183613c54565b82825b5090505f88613c64866001615aba565b81518110613c7457613c7461545d565b602002602001015190505f80836001600160a01b0316866001600160a01b031614613ca057825f613ca3565b5f835b915091505f60028b51613cb691906154e6565b8810613cc25788613ce7565b89613cce896001615aba565b81518110613cde57613cde61545d565b60200260200101515b9050898881518110613cfb57613cfb61545d565b60200260200101516001600160a01b031663022c0d9f8484845f6001600160401b03811115613d2c57613d2c614c5f565b6040519080825280601f01601f191660200182016040528015613d56576020820181803683370190505b506040518563ffffffff1660e01b8152600401613d769493929190615c53565b5f604051808303815f87803b158015613d8d575f80fd5b505af1158015613d9f573d5f803e3d5ffd5b50505050505050505050508080613db59061549c565b915050613bd5565b5f80836001600160a01b03165f632e1a7d4d85604051602401613de291815260200190565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051613e1b91906158bb565b5f6040518083038185875af1925050503d805f8114613e55576040519150601f19603f3d011682016040523d82523d5f602084013e613e5a565b606091505b5091509150818015613e84575080511580613e84575080806020019051810190613e8491906158d6565b6109655760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a2057495448445241575f4641494c454400604482015260640161062b565b5f60605f8390505f816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f14573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f389190615c7f565b90505f826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f9b9190615c7f565b90505f836001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015613fda573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ffe9190615c9a565b604080516001600160a01b03808716602083015285169181019190915262ffffff821660608201529091505f9060800160408051601f1981840301815291905280516020909101209050600160ff1b88161580156140fe57846001600160a01b03168b6001600160a01b0316146140875760405162461bcd60e51b815260040161062b90615cbc565b6001600160a01b038a16156140c757836001600160a01b03168a6001600160a01b0316146140c75760405162461bcd60e51b815260040161062b90615cbc565b604080516001600160a01b0387166020820152908101839052939750879360600160405160208183030381529060405296506141a2565b836001600160a01b03168b6001600160a01b03161461412f5760405162461bcd60e51b815260040161062b90615cbc565b6001600160a01b038a161561416f57846001600160a01b03168a6001600160a01b03161461416f5760405162461bcd60e51b815260040161062b90615cbc565b604080516001600160a01b0386166020820152908101839052949750879460600160405160208183030381529060405296505b6141ad89838b611633565b505050505050935093915050565b5f600160ff1b8416158015614293575f856001600160a01b031663128acb0888846141e5886148ec565b6141f56401000276a36001615cde565b8b8b604051602001614208929190615d05565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401614237959493929190615d1d565b60408051808303815f875af1158015614252573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142769190615d57565b91505061428b8161428690615d79565b614959565b925050614361565b5f856001600160a01b031663128acb0888846142ae886148ec565b6142cd600173fffd8963efd1fc6a506488495d951d5263988d26615d93565b8b8b6040516020016142e0929190615d05565b6040516020818303038152906040526040518663ffffffff1660e01b815260040161430f959493929190615d1d565b60408051808303815f875af115801561432a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061434e9190615d57565b50905061435d61428682615d79565b9250505b50949350505050565b5f8080614378600a85615dc7565b905061438f600a6143898684613b7e565b906149aa565b91508060011480156143a057505f82115b80156143b657506008546001600160a01b031615155b156143c057600192505b50915091565b5f8086156143f0576143e9612710614389600454896149f790919063ffffffff16565b905061440e565b61440b612710614389600554896149f790919063ffffffff16565b90505b808510156144665761442286868686614a5d565b6144665760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207369676e61747572652066656560581b604482015260640161062b565b6144708686613b7e565b979650505050505050565b60408051600481526024810182526020810180516001600160e01b0316630d0e30db60e41b17905290515f9182916001600160a01b0386169185916144c091906158bb565b5f6040518083038185875af1925050503d805f81146144fa576040519150601f19603f3d011682016040523d82523d5f602084013e6144ff565b606091505b509150915081801561452957508051158061452957508080602001905181019061452991906158d6565b6109655760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a204445504f5349545f4641494c45440000604482015260640161062b565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291515f928392908816916145d891906158bb565b5f604051808303815f865af19150503d805f8114614611576040519150601f19603f3d011682016040523d82523d5f602084013e614616565b606091505b509150915081801561464057508051158061464057508080602001905181019061464091906158d6565b6117de5760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f46416044820152631253115160e21b606482015260840161062b565b606061157d826040516020016146b091815260200190565b6040516020818303038152906040525b80516060906f181899199a1a9b1b9c1cb0b131b232b360811b905f906146e7906002615dda565b6146f2906002615aba565b6001600160401b0381111561470957614709614c5f565b6040519080825280601f01601f191660200182016040528015614733576020820181803683370190505b509050600360fc1b815f8151811061474d5761474d61545d565b60200101906001600160f81b03191690815f1a905350600f60fb1b8160018151811061477b5761477b61545d565b60200101906001600160f81b03191690815f1a9053505f5b8451811015614898578260048683815181106147b1576147b161545d565b01602001516001600160f81b031916901c60f81c601081106147d5576147d561545d565b1a60f81b826147e5836002615dda565b6147f0906002615aba565b815181106148005761480061545d565b60200101906001600160f81b03191690815f1a905350828582815181106148295761482961545d565b60209101015160f81c600f16601081106148455761484561545d565b1a60f81b82614855836002615dda565b614860906003615aba565b815181106148705761487061545d565b60200101906001600160f81b03191690815f1a905350806148908161549c565b915050614793565b509392505050565b6148a9816109b6565b6111025760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161062b565b5f6001600160ff1b038211156149555760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b606482015260840161062b565b5090565b5f808212156149555760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015260640161062b565b5f815f036149ed5760405162461bcd60e51b815260206004820152601060248201526f64732d6d6174682d6469762d7a65726f60801b604482015260640161062b565b61069f8284615df1565b5f811580614a1a57508282614a0c8183615dda565b9250614a189083615df1565b145b61157d5760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015260640161062b565b600954604080517f048f880a603b1aab0e626a287e33d603417b3d53a36f7527b7c86365bf7def4f6020820152339181019190915260608101869052608081018590525f91829160a00160405160208183030381529060405280519060200120604051602001614ae492919061190160f01b81526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090505f805f614b3d87878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250614bc992505050565b9250925092505f6001858585856040515f8152602001604052604051614b7f949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015614b9f573d5f803e3d5ffd5b5050604051601f1901516007546001600160a01b039081169116149b9a5050505050505050505050565b5f805f8351604114614c1d5760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964207369676e6174757265206c656e6774680000000000000000604482015260640161062b565b505050602081015160408201516060909201515f1a92909190565b5f8085851115614c46575f80fd5b83861115614c52575f80fd5b5050820193919092039150565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715614c9b57614c9b614c5f565b604052919050565b5f6001600160401b03821115614cbb57614cbb614c5f565b50601f01601f191660200190565b5f805f60608486031215614cdb575f80fd5b833592506020840135915060408401356001600160401b03811115614cfe575f80fd5b8401601f81018613614d0e575f80fd5b8035614d21614d1c82614ca3565b614c73565b818152876020838501011115614d35575f80fd5b816020840160208301375f602083830101528093505050509250925092565b5f8060408385031215614d65575f80fd5b82356001600160401b03811115614d7a575f80fd5b83016101408186031215614d8c575f80fd5b946020939093013593505050565b5f6001600160401b03821115614db257614db2614c5f565b5060051b60200190565b6001600160a01b0381168114611102575f80fd5b8035614ddb81614dbc565b919050565b5f8060408385031215614df1575f80fd5b82356001600160401b03811115614e06575f80fd5b8301601f81018513614e16575f80fd5b80356020614e26614d1c83614d9a565b82815260059290921b83018101918181019088841115614e44575f80fd5b938201935b83851015614e6b578435614e5c81614dbc565b82529382019390820190614e49565b9550614e7a9050868201614dd0565b93505050509250929050565b5f805f60608486031215614e98575f80fd5b8335614ea381614dbc565b92506020840135614eb381614dbc565b929592945050506040919091013590565b5f5b83811015614ede578181015183820152602001614ec6565b50505f910152565b5f8151808452614efd816020860160208601614ec4565b601f01601f19169290920160200192915050565b831515815282151560208201526060604082015260018060a01b0382511660608201525f6020830151604060808401526120e060a0840182614ee6565b5f805f8060608587031215614f61575f80fd5b843593506020850135925060408501356001600160401b0380821115614f85575f80fd5b818701915087601f830112614f98575f80fd5b813581811115614fa6575f80fd5b886020828501011115614fb7575f80fd5b95989497505060200194505050565b5f8060408385031215614fd7575f80fd5b82356001600160401b0380821115614fed575f80fd5b908401906101208287031215615001575f80fd5b90925060208401359080821115615016575f80fd5b50830160408186031215615028575f80fd5b809150509250929050565b5f6101608284031215615044575f80fd5b50919050565b5f6020828403121561505a575f80fd5b81356001600160401b0381111561506f575f80fd5b61507b84828501615033565b949350505050565b5f60208284031215615093575f80fd5b81356004811061069f575f80fd5b8015158114611102575f80fd5b5f82601f8301126150bd575f80fd5b813560206150cd614d1c83614d9a565b82815260059290921b840181019181810190868411156150eb575f80fd5b8286015b8481101561510657803583529183019183016150ef565b509695505050505050565b5f8060408385031215615122575f80fd5b82356001600160401b0380821115615138575f80fd5b818501915085601f83011261514b575f80fd5b8135602061515b614d1c83614d9a565b82815260059290921b84018101918181019089841115615179575f80fd5b948201945b838610156151a0578535615191816150a1565b8252948201949082019061517e565b965050860135925050808211156151b5575f80fd5b50610988858286016150ae565b5f8083601f8401126151d2575f80fd5b5081356001600160401b038111156151e8575f80fd5b6020830191508360208260051b8501011115615202575f80fd5b9250929050565b5f805f805f806060878903121561521e575f80fd5b86356001600160401b0380821115615234575f80fd5b6152408a838b016151c2565b90985096506020890135915080821115615258575f80fd5b6152648a838b016151c2565b9096509450604089013591508082111561527c575f80fd5b5061528989828a016151c2565b979a9699509497509295939492505050565b5f602082840312156152ab575f80fd5b813561069f81614dbc565b5f805f80604085870312156152c9575f80fd5b84356001600160401b03808211156152df575f80fd5b6152eb888389016151c2565b90965094506020870135915080821115615303575f80fd5b50615310878288016151c2565b95989497509550505050565b5f805f6060848603121561532e575f80fd5b833561533981614dbc565b9250602084013561534981614dbc565b9150604084013561535981614dbc565b809150509250925092565b5f805f60408486031215615376575f80fd5b8335615381816150a1565b925060208401356001600160401b0381111561539b575f80fd5b6153a7868287016151c2565b9497909650939450505050565b5f80604083850312156153c5575f80fd5b8251915060208301516001600160401b038111156153e1575f80fd5b8301601f810185136153f1575f80fd5b80516153ff614d1c82614ca3565b818152866020838501011115615413575f80fd5b615424826020830160208601614ec4565b8093505050509250929050565b5f8060408385031215615442575f80fd5b825161544d81614dbc565b6020939093015192949293505050565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215615481575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b5f600182016154ad576154ad615488565b5060010190565b600181811c908216806154c857607f821691505b60208210810361504457634e487b7160e01b5f52602260045260245ffd5b8181038181111561157d5761157d615488565b634e487b7160e01b5f52602160045260245ffd5b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b5f808335601e19843603018112615559575f80fd5b8301803591506001600160401b03821115615572575f80fd5b602001915036819003821315615202575f80fd5b818382375f9101908152919050565b602081525f61069f6020830184614ee6565b601f821115610821575f81815260208120601f850160051c810160208610156155cd5750805b601f850160051c820191505b818110156117de578281556001016155d9565b81516001600160401b0381111561560557615605614c5f565b6156198161561384546154b4565b846155a7565b602080601f83116001811461564c575f84156156355750858301515b5f19600386901b1c1916600185901b1785556117de565b5f85815260208120601f198616915b8281101561567a5788860151825594840194600190910190840161565b565b508582101561569757878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b8183525f60208085019450825f5b858110156156e35781356156c881614dbc565b6001600160a01b0316875295820195908201906001016156b5565b509495945050505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f808335601e1984360301811261572b575f80fd5b83016020810192503590506001600160401b03811115615749575f80fd5b803603821315615202575f80fd5b606080825281018690525f6001600160fb1b03871115615775575f80fd5b8660051b80896080850137808301905060206080848303018185015261579f60808301888a6156a7565b84810360408601528581529150808201600586901b83018201875f5b888110156157f557858303601f190184526157d6828b615716565b6157e18582846156ee565b9587019594505050908401906001016157bb565b50909c9b505050505050505050505050565b602081525f61507b6020830184866156a7565b604081525f61582d6040830185876156a7565b8281036020848101919091528451808352858201928201905f5b81811015615865578451151583529383019391830191600101615847565b509098975050505050505050565b60ff60f81b81526bffffffffffffffffffffffff198460601b1660018201528260158201525f82516158ac816035850160208701614ec4565b91909101603501949350505050565b5f82516158cc818460208701614ec4565b9190910192915050565b5f602082840312156158e6575f80fd5b815161069f816150a1565b5f808335601e19843603018112615906575f80fd5b8301803591506001600160401b0382111561591f575f80fd5b6020019150600581901b3603821315615202575f80fd5b5f60408201848352602060408185015281855180845260608601915082870193505f5b8181101561597e5784516001600160a01b031683529383019391830191600101615959565b5090979650505050505050565b5f602080838503121561599c575f80fd5b82516001600160401b038111156159b1575f80fd5b8301601f810185136159c1575f80fd5b80516159cf614d1c82614d9a565b81815260059190911b820183019083810190878311156159ed575f80fd5b928401925b82841015614470578351825292840192908401906159f2565b602080825260139082015272151bdbc81b1a5d1d1b19481c9958d95a5d9959606a1b604082015260600190565b602081525f8235615a4881614dbc565b6001600160a01b0316602083810191909152615a6690840184615716565b604080850152615a7a6060850182846156ee565b95945050505050565b60208082526017908201527f496e76616c696420777261707065642061646472657373000000000000000000604082015260600190565b8082018082111561157d5761157d615488565b5f8351615ade818460208801614ec4565b6508ae4e4dee4560d31b9083019081528351615b01816006840160208801614ec4565b602960f81b60069290910191820152600701949350505050565b5f8351615b2c818460208801614ec4565b650a0c2dcd2c6560d31b9083019081528351615b01816006840160208801614ec4565b5f8351615b60818460208801614ec4565b670aadcd6dcdeeedc560c31b9083019081528351615b85816008840160208801614ec4565b602960f81b60089290910191820152600901949350505050565b848152836020820152826040820152608060608201525f6120e06080830184614ee6565b6001600160a01b03831681526040810160048310615bef57634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b80516001600160701b0381168114614ddb575f80fd5b5f805f60608486031215615c24575f80fd5b615c2d84615bfc565b9250615c3b60208501615bfc565b9150604084015163ffffffff81168114615359575f80fd5b84815283602082015260018060a01b0383166040820152608060608201525f6120e06080830184614ee6565b5f60208284031215615c8f575f80fd5b815161069f81614dbc565b5f60208284031215615caa575f80fd5b815162ffffff8116811461069f575f80fd5b602080825260089082015267109859081c1bdbdb60c21b604082015260600190565b6001600160a01b03818116838216019080821115615cfe57615cfe615488565b5092915050565b828152604060208201525f61507b6040830184614ee6565b6001600160a01b0386811682528515156020830152604082018590528316606082015260a0608082018190525f9061447090830184614ee6565b5f8060408385031215615d68575f80fd5b505080516020909101519092909150565b5f600160ff1b8201615d8d57615d8d615488565b505f0390565b6001600160a01b03828116828216039080821115615cfe57615cfe615488565b634e487b7160e01b5f52601260045260245ffd5b5f82615dd557615dd5615db3565b500690565b808202811582820484141761157d5761157d615488565b5f82615dff57615dff615db3565b50049056fea26469706673582212204f637f4c295074f72cbc3c36d09625f5fdf3a44c7aff79ff9b262a8ea106cf0864736f6c63430008140033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
BASE | 20.39% | $3,443.84 | 3.3751 | $11,623.15 | |
BASE | 7.41% | $0.000162 | 26,052,413.2098 | $4,221.01 | |
BASE | 3.76% | $0.999347 | 2,143.6812 | $2,142.28 | |
BASE | 3.12% | $2.98 | 596.5512 | $1,777.72 | |
BASE | 1.73% | $0.006214 | 158,499.5207 | $984.85 | |
BASE | 1.66% | $0.019047 | 49,816.2528 | $948.87 | |
BASE | 0.99% | $0.028279 | 19,857.0313 | $561.53 | |
BASE | 0.61% | $0.510507 | 686.2689 | $350.35 | |
BASE | 0.42% | $0.031302 | 7,719.7477 | $241.64 | |
BASE | 0.26% | $2.96 | 50.9581 | $150.84 | |
BASE | 0.26% | $1.71 | 88.1592 | $150.75 | |
BASE | 0.25% | $0.011283 | 12,535.5971 | $141.44 | |
BASE | 0.24% | $0.111899 | 1,244.9459 | $139.31 | |
BASE | 0.23% | <$0.000001 | 462,713,182.6465 | $129.33 | |
BASE | 0.22% | $0.003405 | 36,227.4313 | $123.36 | |
BASE | 0.20% | $0.018936 | 6,111.3578 | $115.72 | |
BASE | 0.20% | $1.55 | 71.8433 | $111.36 | |
BASE | 0.19% | $0.027741 | 3,915.7149 | $108.62 | |
BASE | 0.19% | $0.011327 | 9,407.4376 | $106.56 | |
BASE | 0.16% | $0.003019 | 29,713.0689 | $89.71 | |
BASE | 0.15% | $0.015082 | 5,685.3425 | $85.75 | |
BASE | 0.14% | $0.068156 | 1,186.6947 | $80.88 | |
BASE | 0.12% | $0.004612 | 14,498.8304 | $66.87 | |
BASE | 0.11% | $0.000513 | 121,870.8945 | $62.49 | |
BASE | 0.09% | $0.000178 | 302,642.6371 | $53.88 | |
BASE | 0.08% | $0.025166 | 1,910.3423 | $48.08 | |
BASE | 0.08% | $0.030848 | 1,547.5411 | $47.74 | |
BASE | 0.08% | $0.210467 | 213.7003 | $44.98 | |
BASE | 0.08% | $3.06 | 14.3655 | $43.96 | |
BASE | 0.06% | <$0.000001 | 914,578,261.7135 | $34.94 | |
BASE | 0.06% | $0.001496 | 22,655.8959 | $33.9 | |
BASE | 0.05% | $0.000077 | 404,978.1508 | $31.1 | |
BASE | 0.05% | $0.00053 | 55,600.699 | $29.47 | |
BASE | 0.05% | $0.000641 | 45,577.7171 | $29.23 | |
BASE | 0.05% | $0.006675 | 4,332.0488 | $28.92 | |
BASE | 0.05% | $0.021713 | 1,281.9401 | $27.83 | |
BASE | 0.05% | $0.269117 | 100.6457 | $27.09 | |
BASE | 0.05% | $0.000458 | 58,971.6485 | $27.03 | |
BASE | 0.05% | $3,437.53 | 0.00775629 | $26.66 | |
BASE | 0.05% | $0.000005 | 5,146,419.2574 | $26.25 | |
BASE | 0.04% | $0.000132 | 194,370.4645 | $25.62 | |
BASE | 0.04% | $0.034741 | 735.2686 | $25.54 | |
BASE | 0.04% | $0.934067 | 25.9449 | $24.23 | |
BASE | 0.04% | $0.000163 | 147,002.0179 | $23.89 | |
BASE | 0.04% | $0.000073 | 325,454.2772 | $23.88 | |
BASE | 0.04% | $0.000375 | 63,521.4192 | $23.8 | |
BASE | 0.04% | $0.000028 | 820,398.3472 | $23.28 | |
BASE | 0.04% | $0.001364 | 16,307.116 | $22.24 | |
BASE | 0.04% | $0.000494 | 43,530.6855 | $21.49 | |
BASE | 0.04% | <$0.000001 | 3,943,514,203.8204 | $20.51 | |
BASE | 0.04% | $0.061781 | 328.7456 | $20.31 | |
BASE | 0.03% | $0.99902 | 19.8878 | $19.87 | |
BASE | 0.03% | $0.000017 | 1,137,622.8165 | $19.59 | |
BASE | 0.03% | $0.00001 | 1,903,883.699 | $18.68 | |
BASE | 0.03% | $0.000521 | 35,552.6341 | $18.54 | |
BASE | 0.03% | $0.000252 | 73,030.5727 | $18.43 | |
BASE | 0.03% | $0.000185 | 93,250.0529 | $17.22 | |
BASE | 0.03% | $0.01863 | 918.9813 | $17.12 | |
BASE | 0.03% | $0.000027 | 625,107.3823 | $16.94 | |
BASE | 0.03% | $0.003656 | 4,623.0128 | $16.9 | |
BASE | 0.03% | $0.017477 | 958.3644 | $16.75 | |
BASE | 0.03% | $0.003791 | 4,404.5027 | $16.7 | |
BASE | 0.03% | $94,593 | 0.00017541 | $16.59 | |
BASE | 0.03% | $0.007131 | 2,321.6209 | $16.56 | |
BASE | 0.03% | <$0.000001 | 48,365,943.3391 | $15.7 | |
BASE | 0.03% | $0.000002 | 6,567,382.282 | $15.3 | |
BASE | 0.03% | $0.00696 | 2,151.3333 | $14.97 | |
BASE | 0.03% | $0.027224 | 547.3782 | $14.9 | |
BASE | 0.03% | $0.003766 | 3,846.2419 | $14.48 | |
BASE | 0.03% | $0.00001 | 1,379,810.7778 | $14.34 | |
BASE | 0.02% | $20.03 | 0.7055 | $14.13 | |
BASE | 0.02% | $0.001273 | 10,628.4456 | $13.53 | |
BASE | 0.02% | $0.000647 | 20,716.096 | $13.4 | |
BASE | 0.02% | $0.00294 | 4,440.3344 | $13.05 | |
BASE | 0.02% | $0.242263 | 53.4426 | $12.95 | |
BASE | 0.02% | $0.171095 | 74.8284 | $12.8 | |
BASE | 0.02% | $0.000721 | 16,872.1474 | $12.16 | |
BASE | 0.02% | $0.006419 | 1,831.6856 | $11.76 | |
BASE | 0.02% | $0.00586 | 1,875.591 | $10.99 | |
BASE | 0.02% | $0.14216 | 77.0736 | $10.96 | |
BASE | 0.02% | $0.00023 | 47,553.374 | $10.96 | |
BASE | 0.02% | $0.098237 | 105.6418 | $10.38 | |
BASE | 0.02% | $0.000946 | 10,701.1646 | $10.13 | |
BASE | 0.02% | $0.000034 | 279,652.714 | $9.65 | |
BASE | 0.02% | $0.000953 | 9,539.0312 | $9.09 | |
BASE | 0.02% | $0.065569 | 135.1474 | $8.86 | |
BASE | 0.01% | <$0.000001 | 3,276,461,587.3203 | $8.52 | |
BASE | 0.01% | $0.183015 | 43.9146 | $8.04 | |
BASE | 0.01% | $0.01288 | 593.9087 | $7.65 | |
BASE | 0.01% | $0.505344 | 15.1257 | $7.64 | |
BASE | 0.01% | $0.000268 | 28,196.2967 | $7.56 | |
BASE | 0.01% | $0.065314 | 114.0967 | $7.45 | |
BASE | 0.01% | $0.001486 | 4,927.2233 | $7.32 | |
BASE | 0.01% | $0.76283 | 9.484 | $7.23 | |
BASE | 0.01% | $0.00039 | 17,665.21 | $6.9 | |
BASE | 0.01% | $0.005879 | 1,167.354 | $6.86 | |
BASE | 0.01% | $0.004389 | 1,457.6515 | $6.4 | |
BASE | 0.01% | $0.000094 | 66,798.3958 | $6.27 | |
BASE | 0.01% | $0.000255 | 24,279.2396 | $6.2 | |
BASE | 0.01% | $0.001229 | 4,958.9453 | $6.1 | |
BASE | 0.01% | <$0.000001 | 733,053,526.8293 | $6.08 | |
BASE | 0.01% | $0.001569 | 3,744.0177 | $5.88 | |
BASE | <0.01% | $0.000766 | 7,152.9199 | $5.48 | |
BASE | <0.01% | $11.36 | 0.4646 | $5.28 | |
BASE | <0.01% | $0.001562 | 3,266.7502 | $5.1 | |
BASE | <0.01% | $0.092744 | 54.4861 | $5.05 | |
BASE | <0.01% | $0.000009 | 545,469.5294 | $5 | |
BASE | <0.01% | $0.007133 | 683.2262 | $4.87 | |
BASE | <0.01% | $0.999245 | 4.8227 | $4.82 | |
BASE | <0.01% | $0.06909 | 65.8405 | $4.55 | |
BASE | <0.01% | $0.000027 | 160,875.2699 | $4.37 | |
BASE | <0.01% | $1.07 | 4.047 | $4.33 | |
BASE | <0.01% | $0.00271 | 1,542.1553 | $4.18 | |
BASE | <0.01% | $0.000049 | 84,468.8124 | $4.13 | |
BASE | <0.01% | $0.386394 | 10.4223 | $4.03 | |
BASE | <0.01% | $0.000011 | 368,383.2525 | $3.87 | |
BASE | <0.01% | $0.003722 | 1,008.479 | $3.75 | |
BASE | <0.01% | $0.001481 | 2,528.6613 | $3.75 | |
BASE | <0.01% | <$0.000001 | 21,395,498.7099 | $3.67 | |
BASE | <0.01% | $0.003613 | 1,008.1564 | $3.64 | |
BASE | <0.01% | $0.00003 | 118,983.896 | $3.61 | |
BASE | <0.01% | $0.000154 | 23,437 | $3.6 | |
BASE | <0.01% | $0.003661 | 970.6541 | $3.55 | |
BASE | <0.01% | $0.000054 | 64,988.3189 | $3.52 | |
BASE | <0.01% | $0.137033 | 23.522 | $3.22 | |
BASE | <0.01% | $0.000054 | 59,936.374 | $3.21 | |
BASE | <0.01% | $0.000006 | 546,893.316 | $3.14 | |
BASE | <0.01% | $0.000375 | 8,343.5661 | $3.13 | |
BASE | <0.01% | <$0.000001 | 4,323,006,764.2335 | $3.03 | |
BASE | <0.01% | $0.28604 | 10.4426 | $2.99 | |
BASE | <0.01% | $0.000024 | 124,059.3699 | $2.94 | |
BASE | <0.01% | $1.5 | 1.9076 | $2.86 | |
BASE | <0.01% | $0.000054 | 51,815.4505 | $2.78 | |
BASE | <0.01% | $0.007253 | 380.5413 | $2.76 | |
BASE | <0.01% | $0.008073 | 331.6497 | $2.68 | |
BASE | <0.01% | <$0.000001 | 1,180,082,999.0007 | $2.6 | |
BASE | <0.01% | $0.001989 | 1,277.3688 | $2.54 | |
BASE | <0.01% | $0.024063 | 104.6621 | $2.52 | |
BASE | <0.01% | $0.000325 | 7,715.6189 | $2.51 | |
BASE | <0.01% | $0.002911 | 839.4522 | $2.44 | |
BASE | <0.01% | $0.048652 | 50.1055 | $2.44 | |
BASE | <0.01% | $0.000517 | 4,692.3864 | $2.43 | |
BASE | <0.01% | $0.000429 | 5,638.3865 | $2.42 | |
BASE | <0.01% | $0.0007 | 3,412.0206 | $2.39 | |
BASE | <0.01% | $0.000687 | 3,469.6489 | $2.38 | |
BASE | <0.01% | $0.000022 | 103,826.8203 | $2.33 | |
BASE | <0.01% | $1.34 | 1.6756 | $2.25 | |
BASE | <0.01% | $2.84 | 0.7681 | $2.18 | |
BASE | <0.01% | $0.000176 | 11,668.1525 | $2.06 | |
BASE | <0.01% | $0.004748 | 413.4982 | $1.96 | |
BASE | <0.01% | $0.000048 | 38,232.4893 | $1.82 | |
BASE | <0.01% | $0.093547 | 18.3748 | $1.72 | |
BASE | <0.01% | $0.000311 | 5,007.8264 | $1.56 | |
BASE | <0.01% | $5.7 | 0.2561 | $1.46 | |
BASE | <0.01% | $0.000403 | 3,613.5259 | $1.46 | |
BASE | <0.01% | $0.000092 | 15,428.5252 | $1.42 | |
BASE | <0.01% | $0.00002 | 69,943.5002 | $1.37 | |
BASE | <0.01% | $0.002577 | 490.148 | $1.26 | |
BASE | <0.01% | $0.000214 | 5,447.264 | $1.17 | |
BASE | <0.01% | $0.013508 | 82.0978 | $1.11 | |
BASE | <0.01% | $0.004079 | 270.348 | $1.1 | |
BASE | <0.01% | $0.000075 | 14,307.1862 | $1.07 | |
BASE | <0.01% | $0.000601 | 1,560.8577 | $0.9378 | |
BASE | <0.01% | $0.027156 | 34.4018 | $0.9342 | |
BASE | <0.01% | $0.000001 | 1,650,636.7758 | $0.8355 | |
BASE | <0.01% | $0.000024 | 33,786.2071 | $0.8169 | |
BASE | <0.01% | $0.009437 | 84.5035 | $0.7974 | |
BASE | <0.01% | $0.062344 | 12.4725 | $0.7775 | |
BASE | <0.01% | $0.44727 | 1.6139 | $0.7218 | |
BASE | <0.01% | $0.00038 | 1,894.0428 | $0.7195 | |
BASE | <0.01% | $172.03 | 0.00411678 | $0.7082 | |
BASE | <0.01% | $0.01595 | 40.427 | $0.6448 | |
BASE | <0.01% | $0.000109 | 5,917.9209 | $0.6446 | |
BASE | <0.01% | $0.000042 | 15,196.0146 | $0.6431 | |
BASE | <0.01% | $0.999708 | 0.6249 | $0.6247 | |
BASE | <0.01% | $0.000667 | 900 | $0.6004 | |
BASE | <0.01% | <$0.000001 | 2,101,091.4396 | $0.5769 | |
BASE | <0.01% | <$0.000001 | 2,334,249.601 | $0.5681 | |
BASE | <0.01% | $0.005397 | 98.8026 | $0.5332 | |
BASE | <0.01% | $0.000084 | 6,258.1826 | $0.5279 | |
BASE | <0.01% | $0.000022 | 23,236.8423 | $0.5181 | |
BASE | <0.01% | $0.004806 | 103.8184 | $0.4989 | |
BASE | <0.01% | $0.011508 | 42.282 | $0.4865 | |
BASE | <0.01% | $0.000028 | 16,670.7873 | $0.4697 | |
BASE | <0.01% | $0.009652 | 46.988 | $0.4535 | |
BASE | <0.01% | $0.000102 | 4,171.1228 | $0.424 | |
BASE | <0.01% | $0.000196 | 2,145.8357 | $0.4198 | |
BASE | <0.01% | $0.01253 | 33.5051 | $0.4198 | |
BASE | <0.01% | $1 | 0.4134 | $0.4142 | |
BASE | <0.01% | $0.000001 | 435,575.7614 | $0.4106 | |
BASE | <0.01% | $0.000928 | 433.0407 | $0.4019 | |
BASE | <0.01% | $0.000093 | 4,182.1318 | $0.3888 | |
BASE | <0.01% | $3,537.23 | 0.00010625 | $0.3758 | |
BASE | <0.01% | $0.000001 | 371,633.1589 | $0.3431 | |
BASE | <0.01% | $0.269624 | 1.1864 | $0.3198 | |
BASE | <0.01% | $0.000375 | 843.5299 | $0.3159 | |
BASE | <0.01% | $0.01201 | 24.773 | $0.2975 | |
BASE | <0.01% | $0.00042 | 681.9108 | $0.2861 | |
BASE | <0.01% | $0.000031 | 9,041.6964 | $0.2815 | |
BASE | <0.01% | $3,729.09 | 0.00007292 | $0.2719 | |
BASE | <0.01% | $0.073516 | 3.2968 | $0.2423 | |
BASE | <0.01% | $2.11 | 0.1136 | $0.2397 | |
BASE | <0.01% | <$0.000001 | 2,928,991.2482 | $0.2217 | |
BASE | <0.01% | $0.000159 | 1,234.0888 | $0.1961 | |
BASE | <0.01% | $4.23 | 0.0432 | $0.1827 | |
BASE | <0.01% | $0.000303 | 557.7464 | $0.1692 | |
BASE | <0.01% | $0.0003 | 503.7026 | $0.151 | |
BASE | <0.01% | $0.000787 | 190.08 | $0.1495 | |
BASE | <0.01% | $0.013361 | 10.4041 | $0.139 | |
BASE | <0.01% | $0.000797 | 172.7913 | $0.1376 | |
BASE | <0.01% | $2.16 | 0.0599 | $0.1294 | |
BASE | <0.01% | $0.328627 | 0.3195 | $0.1049 | |
BASE | <0.01% | $0.00041 | 251.0851 | $0.1029 | |
POL | 5.39% | $0.999101 | 3,077.3228 | $3,074.56 | |
POL | 2.54% | $0.501095 | 2,888.1989 | $1,447.26 | |
POL | 2.19% | $15.21 | 82.2097 | $1,250.41 | |
POL | 1.87% | $0.998587 | 1,070.1358 | $1,068.62 | |
POL | 1.59% | $0.000005 | 192,103,105.0405 | $908.55 | |
POL | 0.19% | $0.022951 | 4,673.8364 | $107.27 | |
POL | 0.18% | $3,444.36 | 0.0295 | $101.66 | |
POL | 0.15% | $1 | 86.1455 | $86.15 | |
POL | 0.13% | $2.18 | 34.9727 | $76.41 | |
POL | 0.13% | $0.205794 | 365.0346 | $75.12 | |
POL | 0.13% | $0.639482 | 116.8798 | $74.74 | |
POL | 0.09% | $0.19953 | 267.128 | $53.3 | |
POL | 0.06% | $0.004857 | 7,564.0991 | $36.74 | |
POL | 0.04% | $0.114475 | 222.8977 | $25.52 | |
POL | 0.03% | $0.097724 | 184.2625 | $18.01 | |
POL | 0.03% | $1 | 17.9318 | $17.93 | |
POL | 0.03% | <$0.000001 | 978,214,710.0742 | $14.87 | |
POL | 0.02% | $0.500901 | 27.9136 | $13.98 | |
POL | 0.02% | <$0.000001 | 995,373,435.7491 | $13.04 | |
POL | 0.02% | $24.57 | 0.4778 | $11.74 | |
POL | 0.02% | $0.004571 | 2,381.8557 | $10.89 | |
POL | 0.02% | $0.012716 | 853.4512 | $10.85 | |
POL | 0.02% | $0.001007 | 10,073.9144 | $10.15 | |
POL | 0.02% | $0.000004 | 2,280,716.8806 | $9.37 | |
POL | 0.02% | $0.000023 | 381,419.2838 | $8.6 | |
POL | 0.01% | $0.012577 | 662.9543 | $8.34 | |
POL | 0.01% | $94,425 | 0.00008466 | $7.99 | |
POL | 0.01% | $6.68 | 1.1679 | $7.8 | |
POL | 0.01% | $0.976324 | 7.827 | $7.64 | |
POL | 0.01% | $358.36 | 0.0207 | $7.43 | |
POL | 0.01% | $0.014109 | 523.7417 | $7.39 | |
POL | 0.01% | $0.000303 | 23,671.3983 | $7.18 | |
POL | 0.01% | $0.594044 | 10.8566 | $6.45 | |
POL | 0.01% | $0.000681 | 9,365.5432 | $6.38 | |
POL | 0.01% | $0.037984 | 158.744 | $6.03 | |
POL | 0.01% | $0.140327 | 41.444 | $5.82 | |
POL | 0.01% | $0.003747 | 1,529.4772 | $5.73 | |
POL | <0.01% | $0.076048 | 71.4734 | $5.44 | |
POL | <0.01% | $0.004167 | 1,298.207 | $5.41 | |
POL | <0.01% | $0.016083 | 330.3825 | $5.31 | |
POL | <0.01% | <$0.000001 | 557,849,877.5545 | $5.13 | |
POL | <0.01% | $0.000753 | 6,091.4554 | $4.59 | |
POL | <0.01% | $1.55 | 2.9002 | $4.5 | |
POL | <0.01% | $0.000032 | 135,105.9711 | $4.37 | |
POL | <0.01% | $0.561946 | 7.5138 | $4.22 | |
POL | <0.01% | $0.006203 | 679.1563 | $4.21 | |
POL | <0.01% | $0.003007 | 1,400.3208 | $4.21 | |
POL | <0.01% | $0.014811 | 282.9573 | $4.19 | |
POL | <0.01% | <$0.000001 | 18,644,125.8484 | $4.13 | |
POL | <0.01% | $1,634.33 | 0.00245521 | $4.01 | |
POL | <0.01% | $0.005064 | 783.4232 | $3.97 | |
POL | <0.01% | $0.210702 | 18.5987 | $3.92 | |
POL | <0.01% | $0.004018 | 873.1404 | $3.51 | |
POL | <0.01% | $2,622.79 | 0.00133231 | $3.49 | |
POL | <0.01% | $0.570579 | 5.746 | $3.28 | |
POL | <0.01% | $0.000728 | 4,488.3148 | $3.27 | |
POL | <0.01% | $5.7 | 0.5672 | $3.23 | |
POL | <0.01% | $0.956203 | 3.3523 | $3.21 | |
POL | <0.01% | $1.05 | 3.0276 | $3.19 | |
POL | <0.01% | $0.000199 | 15,403.9373 | $3.07 | |
POL | <0.01% | $0.047309 | 57.5357 | $2.72 | |
POL | <0.01% | $0.004196 | 623.3706 | $2.62 | |
POL | <0.01% | $0.026107 | 99.0253 | $2.59 | |
POL | <0.01% | $0.010571 | 242.9299 | $2.57 | |
POL | <0.01% | $0.312043 | 8.1289 | $2.54 | |
POL | <0.01% | $0.001366 | 1,824.8485 | $2.49 | |
POL | <0.01% | $0.001106 | 2,246.1796 | $2.48 | |
POL | <0.01% | $0.00225 | 1,024.9575 | $2.31 | |
POL | <0.01% | $0.010443 | 211.8626 | $2.21 | |
POL | <0.01% | $0.007836 | 276.7176 | $2.17 | |
POL | <0.01% | $0.001359 | 1,550.2591 | $2.11 | |
POL | <0.01% | $0.175573 | 11.8207 | $2.08 | |
POL | <0.01% | $0.455498 | 4.5326 | $2.06 | |
POL | <0.01% | $0.001499 | 1,364.423 | $2.04 | |
POL | <0.01% | $0.138419 | 14.2592 | $1.97 | |
POL | <0.01% | $1.07 | 1.8381 | $1.97 | |
POL | <0.01% | $0.596497 | 3.2697 | $1.95 | |
POL | <0.01% | $0.183 | 9.81 | $1.8 | |
POL | <0.01% | <$0.000001 | 3,590,701.637 | $1.77 | |
POL | <0.01% | $0.005142 | 333.0016 | $1.71 | |
POL | <0.01% | $0.008691 | 196.7091 | $1.71 | |
POL | <0.01% | $0.050867 | 32.7989 | $1.67 | |
POL | <0.01% | $0.753227 | 2.1684 | $1.63 | |
POL | <0.01% | $0.328706 | 4.9017 | $1.61 | |
POL | <0.01% | $0.224165 | 7.042 | $1.58 | |
POL | <0.01% | $84.79 | 0.0181 | $1.53 | |
POL | <0.01% | $0.000662 | 2,269.2599 | $1.5 | |
POL | <0.01% | $1.83 | 0.8071 | $1.48 | |
POL | <0.01% | $0.003753 | 380.8009 | $1.43 | |
POL | <0.01% | $3.17 | 0.4443 | $1.41 | |
POL | <0.01% | $191.03 | 0.0073561 | $1.41 | |
POL | <0.01% | $22.33 | 0.06 | $1.34 | |
POL | <0.01% | $9,085.07 | 0.00014616 | $1.33 | |
POL | <0.01% | $0.001785 | 722.8484 | $1.29 | |
POL | <0.01% | $94,045.93 | 0.00001297 | $1.22 | |
POL | <0.01% | $0.010739 | 108.146 | $1.16 | |
POL | <0.01% | $279.27 | 0.00413211 | $1.15 | |
POL | <0.01% | $1.15 | 1.0021 | $1.15 | |
POL | <0.01% | <$0.000001 | 2,294,424,803.3778 | $1.15 | |
POL | <0.01% | $383.28 | 0.00288569 | $1.11 | |
POL | <0.01% | $93,607.33 | 0.00001174 | $1.1 | |
POL | <0.01% | $0.010099 | 105.3221 | $1.06 | |
POL | <0.01% | $0.010442 | 95.1422 | $0.9934 | |
POL | <0.01% | $0.023714 | 41.8825 | $0.9931 | |
POL | <0.01% | $0.000241 | 3,944.023 | $0.9516 | |
POL | <0.01% | $0.997406 | 0.9241 | $0.9217 | |
POL | <0.01% | $0.144326 | 6.2631 | $0.9039 | |
POL | <0.01% | $14.39 | 0.0624 | $0.8976 | |
POL | <0.01% | <$0.000001 | 75,364,553.4469 | $0.8893 | |
POL | <0.01% | $54.87 | 0.0158 | $0.8679 | |
POL | <0.01% | $0.045141 | 17.061 | $0.7701 | |
POL | <0.01% | $0.178214 | 3.9011 | $0.6952 | |
POL | <0.01% | $0.002205 | 304.5432 | $0.6715 | |
POL | <0.01% | $0.011709 | 56.9009 | $0.6662 | |
POL | <0.01% | $0.001096 | 603.766 | $0.6615 | |
POL | <0.01% | $0.019014 | 33.8403 | $0.6434 | |
POL | <0.01% | $0.021044 | 30.2584 | $0.6367 | |
POL | <0.01% | $0.046681 | 13.4818 | $0.6293 | |
POL | <0.01% | $0.592105 | 1.0616 | $0.6286 | |
POL | <0.01% | $0.000719 | 849.135 | $0.6105 | |
POL | <0.01% | $0.000194 | 3,060 | $0.5927 | |
POL | <0.01% | $0.257732 | 2.2709 | $0.5852 | |
POL | <0.01% | $0.000161 | 3,330.8346 | $0.5374 | |
POL | <0.01% | $67.29 | 0.00757738 | $0.5098 | |
POL | <0.01% | $0.006342 | 77.7197 | $0.4928 | |
POL | <0.01% | $0.047842 | 10.0731 | $0.4819 | |
POL | <0.01% | $0.006338 | 74.4426 | $0.4718 | |
POL | <0.01% | $0.002538 | 176.8765 | $0.4489 | |
POL | <0.01% | $3.17 | 0.1383 | $0.4384 | |
POL | <0.01% | $0.992924 | 0.4287 | $0.4256 | |
POL | <0.01% | $0.001288 | 323.0774 | $0.4162 | |
POL | <0.01% | $2.13 | 0.1912 | $0.4072 | |
POL | <0.01% | $0.005763 | 70.5009 | $0.4062 | |
POL | <0.01% | $39.19 | 0.00993778 | $0.3894 | |
POL | <0.01% | $0.18912 | 2.0563 | $0.3888 | |
POL | <0.01% | $0.028971 | 12.305 | $0.3564 | |
POL | <0.01% | $1.91 | 0.1864 | $0.356 | |
POL | <0.01% | $0.000027 | 12,818.0602 | $0.3464 | |
POL | <0.01% | $0.163054 | 2.1009 | $0.3425 | |
POL | <0.01% | $0.319218 | 1.0014 | $0.3196 | |
POL | <0.01% | $0.011132 | 27.606 | $0.3073 | |
POL | <0.01% | $4.67 | 0.0651 | $0.3039 | |
POL | <0.01% | $0.009446 | 31.671 | $0.2991 | |
POL | <0.01% | $0.305359 | 0.8941 | $0.273 | |
POL | <0.01% | $0.044142 | 6.14 | $0.271 | |
POL | <0.01% | $3.81 | 0.0704 | $0.268 | |
POL | <0.01% | $0.003746 | 70.4865 | $0.264 | |
POL | <0.01% | $0.388231 | 0.6767 | $0.2627 | |
POL | <0.01% | $0.000001 | 187,440.9439 | $0.2617 | |
POL | <0.01% | $0.000462 | 551.2581 | $0.2548 | |
POL | <0.01% | $0.505691 | 0.4863 | $0.2459 | |
POL | <0.01% | $0.405344 | 0.6004 | $0.2433 | |
POL | <0.01% | $0.000728 | 319.6318 | $0.2326 | |
POL | <0.01% | $0.005389 | 43.1355 | $0.2324 | |
POL | <0.01% | $0.005747 | 39.8386 | $0.2289 | |
POL | <0.01% | $0.003527 | 61.8109 | $0.2179 | |
POL | <0.01% | $0.069055 | 3.06 | $0.2113 | |
POL | <0.01% | $0.002593 | 74.8589 | $0.1941 | |
POL | <0.01% | $0.038932 | 4.7761 | $0.1859 | |
POL | <0.01% | $0.631113 | 0.2873 | $0.1812 | |
POL | <0.01% | $0.000354 | 510.2289 | $0.1808 | |
POL | <0.01% | $0.202791 | 0.8354 | $0.1694 | |
POL | <0.01% | $0.004441 | 37.8156 | $0.1679 | |
POL | <0.01% | $7.69 | 0.0212 | $0.1629 | |
POL | <0.01% | $0.009591 | 16.6918 | $0.16 | |
POL | <0.01% | $0.001828 | 85.4094 | $0.1561 | |
POL | <0.01% | $0.040317 | 3.8638 | $0.1557 | |
POL | <0.01% | $0.000023 | 6,562.4755 | $0.1531 | |
POL | <0.01% | $0.000027 | 5,460 | $0.1497 | |
POL | <0.01% | $0.001814 | 81 | $0.1469 | |
POL | <0.01% | $0.003091 | 46.8625 | $0.1448 | |
POL | <0.01% | $0.000836 | 168.6045 | $0.1409 | |
POL | <0.01% | $0.000009 | 15,574.2636 | $0.1395 | |
POL | <0.01% | $0.000283 | 492.3 | $0.1394 | |
POL | <0.01% | $15.69 | 0.00879491 | $0.1379 | |
POL | <0.01% | $0.000386 | 352.7281 | $0.136 | |
POL | <0.01% | $0.198835 | 0.6549 | $0.1302 | |
POL | <0.01% | $0.005719 | 22.03 | $0.1259 | |
POL | <0.01% | $0.999293 | 0.1244 | $0.1243 | |
POL | <0.01% | $0.001785 | 69.4373 | $0.1239 | |
POL | <0.01% | $1.27 | 0.0944 | $0.1198 | |
POL | <0.01% | $0.110444 | 1.0684 | $0.1179 | |
POL | <0.01% | $0.000001 | 106,869.2317 | $0.117 | |
POL | <0.01% | $0.000859 | 131.781 | $0.1131 | |
POL | <0.01% | $0.327918 | 0.3445 | $0.1129 | |
POL | <0.01% | $0.757461 | 0.1407 | $0.1065 | |
POL | <0.01% | $0.000097 | 1,074.4882 | $0.1038 | |
BLAST | 7.07% | $0.009401 | 428,405.6325 | $4,027.45 | |
BLAST | 5.59% | $3,444.22 | 0.9258 | $3,188.57 | |
BLAST | 1.40% | $0.995717 | 799.5444 | $796.12 | |
BLAST | 0.02% | $0.000786 | 12,008.4736 | $9.43 | |
BLAST | 0.01% | $0.009441 | 614.34 | $5.8 | |
BLAST | <0.01% | <$0.000001 | 1,450,578,659.1048 | $5.66 | |
BLAST | <0.01% | $0.003444 | 1,419.4119 | $4.89 | |
BLAST | <0.01% | $0.005179 | 729.1285 | $3.78 | |
BLAST | <0.01% | $0.000026 | 144,204.513 | $3.69 | |
BLAST | <0.01% | <$0.000001 | 10,893,779,514.4255 | $2.18 | |
BLAST | <0.01% | $0.000085 | 21,231.4592 | $1.8 | |
BLAST | <0.01% | $0.023261 | 67.7377 | $1.58 | |
BLAST | <0.01% | $0.000882 | 1,490.4663 | $1.31 | |
BLAST | <0.01% | $0.004345 | 135.7399 | $0.5898 | |
BLAST | <0.01% | $3,439.11 | 0.00012511 | $0.4302 | |
BLAST | <0.01% | <$0.000001 | 5,962,555.8153 | $0.3726 | |
BLAST | <0.01% | $0.001461 | 117.1757 | $0.1711 | |
ARB | 7.64% | $0.998676 | 4,359.1342 | $4,353.36 | |
ARB | 1.36% | $3,443.82 | 0.2246 | $773.61 | |
ARB | 0.54% | $1 | 306.1741 | $306.17 | |
ARB | 0.41% | $0.804456 | 290.5844 | $233.76 | |
ARB | 0.19% | $94,413 | 0.00112664 | $106.37 | |
ARB | 0.11% | $3,439.11 | 0.0188 | $64.76 | |
ARB | 0.04% | $0.073717 | 289.4568 | $21.34 | |
ARB | 0.04% | $0.066921 | 300 | $20.08 | |
ARB | 0.02% | $1 | 12.5466 | $12.55 | |
ARB | 0.02% | $0.446174 | 28.0386 | $12.51 | |
ARB | 0.02% | <$0.000001 | 33,244,793,959.6623 | $9.97 | |
ARB | 0.02% | $0.000085 | 116,821.6663 | $9.89 | |
ARB | 0.02% | $0.000426 | 20,149.2108 | $8.58 | |
ARB | 0.01% | $0.042745 | 164.2409 | $7.02 | |
ARB | 0.01% | $2.11 | 3.1623 | $6.67 | |
ARB | 0.01% | $2.27 | 2.7092 | $6.15 | |
ARB | 0.01% | $5.71 | 1.0629 | $6.07 | |
ARB | <0.01% | $0.97043 | 5.4 | $5.24 | |
ARB | <0.01% | $0.016062 | 323.6846 | $5.2 | |
ARB | <0.01% | $14.43 | 0.3461 | $4.99 | |
ARB | <0.01% | $0.056018 | 79.5027 | $4.45 | |
ARB | <0.01% | $0.032507 | 122.9074 | $4 | |
ARB | <0.01% | $3,540.43 | 0.00109814 | $3.89 | |
ARB | <0.01% | $0.007552 | 513.0315 | $3.87 | |
ARB | <0.01% | $0.073386 | 50.9201 | $3.74 | |
ARB | <0.01% | $0.013412 | 277.85 | $3.73 | |
ARB | <0.01% | $0.272708 | 13.3946 | $3.65 | |
ARB | <0.01% | $15.64 | 0.231 | $3.61 | |
ARB | <0.01% | <$0.000001 | 25,229,161.9743 | $3.56 | |
ARB | <0.01% | $1.55 | 2.2063 | $3.42 | |
ARB | <0.01% | $94,256 | 0.00002665 | $2.51 | |
ARB | <0.01% | $0.000017 | 139,889.5729 | $2.44 | |
ARB | <0.01% | $1.91 | 1.1984 | $2.29 | |
ARB | <0.01% | $0.065897 | 31.7833 | $2.09 | |
ARB | <0.01% | $2.38 | 0.8554 | $2.04 | |
ARB | <0.01% | $0.053569 | 36.5838 | $1.96 | |
ARB | <0.01% | $0.105301 | 15.4706 | $1.63 | |
ARB | <0.01% | $24.6 | 0.0646 | $1.59 | |
ARB | <0.01% | $2.85 | 0.5436 | $1.55 | |
ARB | <0.01% | $94,511 | 0.00001612 | $1.52 | |
ARB | <0.01% | <$0.000001 | 7,383,535,208.2711 | $1.48 | |
ARB | <0.01% | $0.06145 | 21.4419 | $1.32 | |
ARB | <0.01% | $0.000019 | 67,309.0989 | $1.25 | |
ARB | <0.01% | $0.000099 | 12,418.7969 | $1.22 | |
ARB | <0.01% | $0.001049 | 1,127.7062 | $1.18 | |
ARB | <0.01% | $0.249036 | 4.6775 | $1.16 | |
ARB | <0.01% | $3.53 | 0.3104 | $1.1 | |
ARB | <0.01% | $0.04292 | 25.1883 | $1.08 | |
ARB | <0.01% | $3,434.72 | 0.00031063 | $1.07 | |
ARB | <0.01% | $0.15842 | 6.3051 | $0.9988 | |
ARB | <0.01% | $0.000016 | 60,913.7905 | $0.9587 | |
ARB | <0.01% | $0.007393 | 117.3198 | $0.8673 | |
ARB | <0.01% | $5.32 | 0.1598 | $0.8501 | |
ARB | <0.01% | $0.01816 | 44.2536 | $0.8036 | |
ARB | <0.01% | $0.187298 | 4.048 | $0.7581 | |
ARB | <0.01% | $0.000001 | 851,848.4097 | $0.7099 | |
ARB | <0.01% | $1 | 0.6618 | $0.6617 | |
ARB | <0.01% | <$0.000001 | 195,174,014.308 | $0.644 | |
ARB | <0.01% | $0.975518 | 0.6387 | $0.623 | |
ARB | <0.01% | $0.311915 | 1.8763 | $0.5852 | |
ARB | <0.01% | $0.038862 | 14.9291 | $0.5801 | |
ARB | <0.01% | $2.53 | 0.204 | $0.5161 | |
ARB | <0.01% | $0.000009 | 56,838.3259 | $0.4893 | |
ARB | <0.01% | $46.94 | 0.0104 | $0.489 | |
ARB | <0.01% | $0.061111 | 7.4108 | $0.4528 | |
ARB | <0.01% | <$0.000001 | 644,231,831.2765 | $0.4509 | |
ARB | <0.01% | $3.23 | 0.1345 | $0.4343 | |
ARB | <0.01% | $37.54 | 0.00984186 | $0.3694 | |
ARB | <0.01% | $0.557057 | 0.6281 | $0.3498 | |
ARB | <0.01% | $0.286555 | 1.1568 | $0.3314 | |
ARB | <0.01% | $1,104.02 | 0.00029362 | $0.3241 | |
ARB | <0.01% | $0.224174 | 1.4406 | $0.3229 | |
ARB | <0.01% | $0.412595 | 0.6218 | $0.2565 | |
ARB | <0.01% | $0.775768 | 0.315 | $0.2443 | |
ARB | <0.01% | $0.022993 | 9.9376 | $0.2284 | |
ARB | <0.01% | $0.000417 | 466.8607 | $0.1947 | |
ARB | <0.01% | $0.000782 | 215.9687 | $0.1689 | |
ARB | <0.01% | $0.009574 | 16.7821 | $0.1606 | |
ARB | <0.01% | $0.003367 | 46.8487 | $0.1577 | |
ARB | <0.01% | $1.24 | 0.1008 | $0.1249 | |
ARB | <0.01% | $0.05205 | 2.3908 | $0.1244 | |
ARB | <0.01% | $0.024354 | 4.809 | $0.1171 | |
ARB | <0.01% | $0.040083 | 2.7453 | $0.11 | |
FTM | 6.78% | $94,268 | 0.041 | $3,863.12 | |
FTM | 1.28% | $1.04 | 701.7613 | $729.12 | |
FTM | 0.22% | $3,437.44 | 0.0361 | $124.26 | |
FTM | 0.16% | <$0.000001 | 539,938,224.339 | $93.14 | |
FTM | 0.09% | $0.33476 | 152.4104 | $51.02 | |
FTM | 0.05% | $9,081.97 | 0.00313831 | $28.5 | |
FTM | 0.03% | $1.21 | 14.844 | $17.96 | |
FTM | 0.01% | $0.003455 | 2,091.1685 | $7.23 | |
FTM | 0.01% | $0.501052 | 13.4735 | $6.75 | |
FTM | <0.01% | $383.04 | 0.0136 | $5.23 | |
FTM | <0.01% | $24.52 | 0.1271 | $3.12 | |
FTM | <0.01% | $0.036276 | 56.7798 | $2.06 | |
FTM | <0.01% | $358.6 | 0.00569666 | $2.04 | |
FTM | <0.01% | $0.992814 | 1.7226 | $1.71 | |
FTM | <0.01% | $1.08 | 1.2318 | $1.33 | |
FTM | <0.01% | $6.99 | 0.1129 | $0.7889 | |
FTM | <0.01% | $0.000783 | 765.7002 | $0.5998 | |
FTM | <0.01% | $0.169883 | 2.6532 | $0.4507 | |
FTM | <0.01% | $0.069777 | 5.8301 | $0.4068 | |
FTM | <0.01% | <$0.000001 | 2,194,824.3926 | $0.3858 | |
FTM | <0.01% | $0.001318 | 96.1584 | $0.1267 | |
AVAX | 0.95% | $39.21 | 13.8639 | $543.57 | |
AVAX | 0.61% | $0.998907 | 346.8392 | $346.46 | |
AVAX | 0.23% | $1 | 129.6284 | $129.63 | |
AVAX | 0.22% | $0.998907 | 126.3887 | $126.25 | |
AVAX | 0.04% | $0.596537 | 40.2116 | $23.99 | |
AVAX | 0.04% | $0.150751 | 146.8152 | $22.13 | |
AVAX | 0.03% | $0.002483 | 7,716.3533 | $19.16 | |
AVAX | 0.03% | <$0.000001 | 634,728,656.7938 | $14.98 | |
AVAX | 0.01% | $0.000002 | 3,725,415.8668 | $6.26 | |
AVAX | <0.01% | $0.352429 | 15.634 | $5.51 | |
AVAX | <0.01% | $0.000158 | 28,530.7794 | $4.51 | |
AVAX | <0.01% | $0.011334 | 382.4024 | $4.33 | |
AVAX | <0.01% | $24.54 | 0.1423 | $3.49 | |
AVAX | <0.01% | $0.412444 | 6.2316 | $2.57 | |
AVAX | <0.01% | $358.18 | 0.00672696 | $2.41 | |
AVAX | <0.01% | $46.18 | 0.0406 | $1.87 | |
AVAX | <0.01% | $0.009434 | 174.6522 | $1.65 | |
AVAX | <0.01% | <$0.000001 | 86,037,938.6272 | $1.6 | |
AVAX | <0.01% | $0.000737 | 994.4961 | $0.7326 | |
AVAX | <0.01% | $0.024218 | 30 | $0.7265 | |
AVAX | <0.01% | $0.004887 | 137.1119 | $0.67 | |
AVAX | <0.01% | $29.5 | 0.0197 | $0.58 | |
AVAX | <0.01% | $0.017593 | 16.0118 | $0.2817 | |
AVAX | <0.01% | $0.007942 | 18.4674 | $0.1466 | |
AVAX | <0.01% | $0.000438 | 319.6418 | $0.14 | |
SCROLL | 0.84% | $3,440.98 | 0.1391 | $478.55 | |
SCROLL | 0.28% | $0.999577 | 157.3646 | $157.3 | |
SCROLL | 0.07% | $0.998907 | 40.412 | $40.37 | |
SCROLL | 0.01% | $1.2 | 6.9084 | $8.29 | |
SCROLL | 0.01% | $4,032.21 | 0.00176922 | $7.13 | |
SCROLL | <0.01% | $94,208.01 | 0.00002657 | $2.5 | |
SCROLL | <0.01% | $0.000001 | 360,650.8428 | $0.2645 | |
SCROLL | <0.01% | $0.998808 | 0.1825 | $0.1823 | |
SCROLL | <0.01% | $3,627.38 | 0.00004527 | $0.1641 | |
LINEA | 0.88% | $3,440.98 | 0.1461 | $502.68 | |
LINEA | 0.05% | $0.998587 | 26.6852 | $26.65 | |
LINEA | 0.04% | $1 | 22.2307 | $22.23 | |
LINEA | 0.01% | $1 | 8.5129 | $8.54 | |
LINEA | 0.01% | $3,542.16 | 0.0018069 | $6.4 | |
LINEA | 0.01% | $0.08176 | 70.6108 | $5.77 | |
LINEA | <0.01% | $3,438.15 | 0.00091158 | $3.13 | |
LINEA | <0.01% | $0.001461 | 1,815.99 | $2.65 | |
LINEA | <0.01% | $0.000263 | 4,604.5255 | $1.21 | |
LINEA | <0.01% | $0.074284 | 13.8594 | $1.03 | |
LINEA | <0.01% | $0.011238 | 61.4385 | $0.6904 | |
LINEA | <0.01% | $0.010362 | 47.3847 | $0.4909 | |
LINEA | <0.01% | $4,078.34 | 0.00007351 | $0.2998 | |
OPBNB | 0.26% | $695.64 | 0.2099 | $146.02 | |
OPBNB | 0.14% | $0.999866 | 82.3882 | $82.38 | |
WORLD | 0.18% | $3,443.77 | 0.0301 | $103.67 | |
WORLD | 0.05% | $2.34 | 11.485 | $26.87 | |
WORLD | 0.01% | $1 | 5.7929 | $5.79 | |
BSC | 0.09% | $0.998587 | 49.9 | $49.83 | |
BSC | 0.03% | $696.52 | 0.0205 | $14.27 | |
MANTLE | 0.01% | $1.21 | 5.4778 | $6.64 | |
MANTLE | 0.01% | $0.998177 | 6.1817 | $6.17 | |
MANTLE | <0.01% | $3,437.38 | 0.00089829 | $3.09 | |
MANTLE | <0.01% | $0.99938 | 2.7822 | $2.78 | |
MANTLE | <0.01% | $3,618.09 | 0.0004112 | $1.49 | |
MANTLE | <0.01% | $0.109018 | 1 | $0.109 |
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.