BNB Price: $696.36 (-2.24%)
Gas: 1 GWei
 

Overview

BNB Balance

BNB Smart Chain LogoBNB Smart Chain LogoBNB Smart Chain Logo55.591212311785751638 BNB

BNB Value

$38,711.72 (@ $696.36/BNB)

Token Holdings

Transaction Hash
Method
Block
From
To
Exact Input V2Sw...453250782024-12-30 10:59:3711 secs ago1735556377IN
Transit Finance: Router v5
0 BNB0.000670792.02
Exact Input V2Sw...453250772024-12-30 10:59:3414 secs ago1735556374IN
Transit Finance: Router v5
0 BNB0.000396662.02
Exact Input V2Sw...453250762024-12-30 10:59:3117 secs ago1735556371IN
Transit Finance: Router v5
0 BNB0.0006032.02
Exact Input V2Sw...453250752024-12-30 10:59:2820 secs ago1735556368IN
Transit Finance: Router v5
0 BNB0.000955862.02
Cross453250692024-12-30 10:59:1038 secs ago1735556350IN
Transit Finance: Router v5
0 BNB0.00141792.02
Aggregate453250662024-12-30 10:59:0147 secs ago1735556341IN
Transit Finance: Router v5
0.069 BNB0.000436172
Exact Input V2Sw...453250662024-12-30 10:59:0147 secs ago1735556341IN
Transit Finance: Router v5
0 BNB0.000288812.02
Exact Input V2Sw...453250662024-12-30 10:59:0147 secs ago1735556341IN
Transit Finance: Router v5
0 BNB0.000689922.02
Exact Input V2Sw...453250642024-12-30 10:58:5553 secs ago1735556335IN
Transit Finance: Router v5
0.101 BNB0.00035412.02
Exact Input V2Sw...453250642024-12-30 10:58:5553 secs ago1735556335IN
Transit Finance: Router v5
0 BNB0.000569221
Exact Input V2Sw...453250632024-12-30 10:58:5256 secs ago1735556332IN
Transit Finance: Router v5
0 BNB0.00056512.02
Aggregate453250622024-12-30 10:58:491 mins ago1735556329IN
Transit Finance: Router v5
0 BNB0.000700322.02
Exact Input V2Sw...453250612024-12-30 10:58:461 min ago1735556326IN
Transit Finance: Router v5
0.0455933 BNB0.000469172
Exact Input V2Sw...453250572024-12-30 10:58:341 min ago1735556314IN
Transit Finance: Router v5
0 BNB0.000416342.02
Exact Input V2Sw...453250572024-12-30 10:58:341 min ago1735556314IN
Transit Finance: Router v5
0 BNB0.000514862
Cross453250572024-12-30 10:58:341 min ago1735556314IN
Transit Finance: Router v5
0 BNB0.001178362
Exact Input V2Sw...453250552024-12-30 10:58:281 min ago1735556308IN
Transit Finance: Router v5
0 BNB0.000357232.02
Exact Input V2Sw...453250492024-12-30 10:58:101 min ago1735556290IN
Transit Finance: Router v5
0 BNB0.00044522.02
Exact Input V2Sw...453250482024-12-30 10:58:071 min ago1735556287IN
Transit Finance: Router v5
0 BNB0.000412432
Aggregate453250472024-12-30 10:58:041 min ago1735556284IN
Transit Finance: Router v5
0 BNB0.000723782.02
Exact Input V2Sw...453250472024-12-30 10:58:041 min ago1735556284IN
Transit Finance: Router v5
0 BNB0.000357232.02
Exact Input V2Sw...453250472024-12-30 10:58:041 min ago1735556284IN
Transit Finance: Router v5
0 BNB0.000381882.02
Aggregate453250452024-12-30 10:57:581 min ago1735556278IN
Transit Finance: Router v5
0 BNB0.000218881
Exact Input V2Sw...453250422024-12-30 10:57:491 min ago1735556269IN
Transit Finance: Router v5
0 BNB0.001741392.02
Exact Input V2Sw...453250412024-12-30 10:57:462 mins ago1735556266IN
Transit Finance: Router v5
0 BNB0.000493732.02
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
453250662024-12-30 10:59:0147 secs ago1735556341
Transit Finance: Router v5
0.068793 BNB
453250642024-12-30 10:58:5553 secs ago1735556335
Transit Finance: Router v5
0.100697 BNB
453250612024-12-30 10:58:461 min ago1735556326
Transit Finance: Router v5
0.04545652 BNB
453250572024-12-30 10:58:341 min ago1735556314
Transit Finance: Router v5
0.05805948 BNB
453250572024-12-30 10:58:341 min ago1735556314
Transit Finance: Router v5
0.05805948 BNB
453250572024-12-30 10:58:341 min ago1735556314
Transit Finance: Router v5
0.04232296 BNB
453250572024-12-30 10:58:341 min ago1735556314
Transit Finance: Router v5
0.04232296 BNB
453250482024-12-30 10:58:071 min ago1735556287
Transit Finance: Router v5
0.00158495 BNB
453250482024-12-30 10:58:071 min ago1735556287
Transit Finance: Router v5
0.00158495 BNB
453250472024-12-30 10:58:041 min ago1735556284
Transit Finance: Router v5
0.01769001 BNB
453250472024-12-30 10:58:041 min ago1735556284
Transit Finance: Router v5
0.01769001 BNB
453250282024-12-30 10:57:072 mins ago1735556227
Transit Finance: Router v5
0.00301923 BNB
453250282024-12-30 10:57:072 mins ago1735556227
Transit Finance: Router v5
0.00301923 BNB
453250252024-12-30 10:56:582 mins ago1735556218
Transit Finance: Router v5
0.000997 BNB
453250232024-12-30 10:56:522 mins ago1735556212
Transit Finance: Router v5
0.00286119 BNB
453250232024-12-30 10:56:522 mins ago1735556212
Transit Finance: Router v5
0.00286119 BNB
453250182024-12-30 10:56:373 mins ago1735556197
Transit Finance: Router v5
0.00272066 BNB
453250182024-12-30 10:56:373 mins ago1735556197
Transit Finance: Router v5
0.00272066 BNB
453250082024-12-30 10:56:073 mins ago1735556167
Transit Finance: Router v5
0.08293289 BNB
453250082024-12-30 10:56:073 mins ago1735556167
Transit Finance: Router v5
0.08293289 BNB
453250022024-12-30 10:55:493 mins ago1735556149
Transit Finance: Router v5
0.18943 BNB
453249722024-12-30 10:54:195 mins ago1735556059
Transit Finance: Router v5
0.02991 BNB
453249652024-12-30 10:53:585 mins ago1735556038
Transit Finance: Router v5
0.01336684 BNB
453249652024-12-30 10:53:585 mins ago1735556038
Transit Finance: Router v5
0.01336684 BNB
453249602024-12-30 10:53:436 mins ago1735556023
Transit Finance: Router v5
0.16107708 BNB
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TransitSwapRouterV5

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 15 : TransitSwapRouterV5.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

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);
        }
    }
}

File 2 of 15 : CrossRouter.sol
// 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 {
        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;
        uint256 actualAmountIn = calculateTradeFee(false, desc.amount, desc.fee, desc.signature);
        if (TransferHelper.isETH(desc.srcToken)) {
            require(msg.value == desc.amount, "invalid msg.value");
            swapAmount = actualAmountIn;
            if (desc.wrappedToken != address(0)) {
                require(_wrapped_allowed[desc.wrappedToken], "Invalid wrapped address");
                TransferHelper.safeDeposit(desc.wrappedToken, swapAmount);
                TransferHelper.safeApprove(desc.wrappedToken, desc.caller, swapAmount);
                swapAmount = 0;
            }
        } else {
            TransferHelper.safeTransferFrom(desc.srcToken, msg.sender, address(this), desc.amount);
            TransferHelper.safeApprove(desc.srcToken, desc.caller, actualAmountIn);
        }

        {
            (bool success, bytes memory result) = desc.caller.call{value:swapAmount}(desc.calls);
            if (!success) {
                revert(RevertReasonParser.parse(result, "TransitCrossV5:"));
            }
        }

        _emitTransit(desc.srcToken, desc.dstToken, desc.dstReceiver, desc.amount, 0, desc.toChain, desc.channel);
    } 
}

File 3 of 15 : AggregateRouter.sol
// 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 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 actualAmountIn = calculateTradeFee(true, desc.amount, desc.fee, desc.signature);
        uint256 swapAmount;
        uint256 toBeforeBalance;
        address bridgeAddress = _aggregate_bridge;
        if (TransferHelper.isETH(desc.srcToken)) {
            require(msg.value == desc.amount, "invalid msg.value");
            swapAmount = actualAmountIn;
        } else {
            TransferHelper.safeTransferFrom(desc.srcToken, msg.sender, address(this), desc.amount);
            TransferHelper.safeTransfer(desc.srcToken, bridgeAddress, actualAmountIn);
        }

        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);

    }
}

File 4 of 15 : UniswapV3Router.sol
// 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 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 actualAmountIn = calculateTradeFee(true, params.amount, params.fee, params.signature);
        uint256 toBeforeBalance;
        bool isToETH;
        if (TransferHelper.isETH(params.srcToken)) {
            tokenIn = params.wrappedToken;
            require(msg.value == params.amount, "Invalid msg.value");
            TransferHelper.safeDeposit(params.wrappedToken, actualAmountIn);
        } else {
            TransferHelper.safeTransferFrom(params.srcToken, msg.sender, address(this), params.amount);
        }

        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);
        }
    }

    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");
    }

}

File 5 of 15 : UniswapV2Router.sol
// 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");
        actualAmountIn = calculateTradeFee(true, exactInput.amount, exactInput.fee, exactInput.signature);
        //检查第一个或最后一个是否为ETH
        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");
            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 (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 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 = amounts[amounts.length - 1];
                }
            }

            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));
        }
    }

}

File 6 of 15 : BaseCore.sol
// 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;
    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 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) 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);
        }
    }

    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) external onlyExecutor {
        if (paused) {
            _pause();
        } else {
            _unpause();
        }
    }

    function transitProxyAddress() external view returns (address bridgeProxy, address feeSigner) {
        bridgeProxy = _aggregate_bridge;
        feeSigner = _fee_signer;
    }

    function transitFee() external view returns (uint256, uint256) {
        return (_aggregate_fee, _cross_fee);
    }

    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);
    }

}

File 7 of 15 : IUniswapV3Pool.sol
// 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);
}

File 8 of 15 : IUniswapV2.sol
// 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;
}

File 9 of 15 : IERC20.sol
// 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);
 
}

File 10 of 15 : Ownable.sol
// 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);
    }
}

File 11 of 15 : SafeMath.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0;

library SafeMath {
    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x, 'ds-math-add-overflow');
    }

    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);
    }
}

File 12 of 15 : RevertReasonParser.sol
// 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);
    }
}

File 13 of 15 : TransferHelper.sol
// 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');
    }
}

File 14 of 15 : ReentrancyGuard.sol
// 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;
    }
}

File 15 of 15 : Pausable.sol
// 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);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        _requireNotPaused();
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        _requirePaused();
        _;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        require(!paused(), "Pausable: paused");
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        require(paused(), "Pausable: not paused");
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(msg.sender);
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(msg.sender);
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"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":"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"}],"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"}],"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"}],"name":"changePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"aggregator","type":"address"},{"internalType":"address","name":"signer","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":[],"name":"paused","outputs":[{"internalType":"bool","name":"","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"}],"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"}]

60806040523480156200001157600080fd5b506001543390600160a01b900460ff1615620000735760405162461bcd60e51b815260206004820152601460248201527f4f776e61626c653a20696e697469616c697a6564000000000000000000000000604482015260640160405180910390fd5b6200007e8162000177565b506001805461ffff60a01b1916600160a01b1781556002819055604080518082018252600d81526c5472616e73697453776170563560981b60209182015281518083018352928352603560f81b9281019290925280517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f928101929092527f20b7d1a4a088b240a0e093c572f43e31015ce187a55e6f343e049dcb744e5341908201527fceebf77a833b30520287ddd9478ff51abbdffa30aa90a8d655dba0e8a79ce0c160608201524660808201523060a082015260c00160408051601f198184030181529190528051602090910120600755620001d1565b600180546001600160a01b0319908116909155600080546001600160a01b03848116938216841783556040519116929183917f88436636ea40d5bb1bcc55ff9cd54788af71da886f4147a87f199adcca733d4d9190a35050565b615a8e80620001e16000396000f3fe60806040526004361061016a5760003560e01c80636fbf72f9116100d1578063b93c0beb1161008a578063d63234e011610064578063d63234e0146104a3578063d808d889146104c1578063fa461e331461028f578063fa9ec7af146104d4576101a9565b8063b93c0beb1461043e578063b9b5149b1461045e578063c34c08e514610471576101a9565b80636fbf72f91461037d5780637e467ecf146103955780637ec753fe146103c957806392bcc8be146103e957806394d3d79314610409578063afed2d0e1461041e576101a9565b80633644e515116101235780633644e515146102d75780634c42342f146102ed578063524d3685146103005780635c975abb146103205780635d4fead31461034a5780636b3ec4161461036a576101a9565b80630ced9fb9146101e75780630dc4bdae1461021f5780630e8cc705146102405780631975b0961461026057806323a69e751461028f5780632adb806f146102af576101a9565b366101a957604080513381523460208201527f7784f8d436dc514f0690e472c7e2d7f660a73e504c69b2350f6be5a5f02432ef910160405180910390a1005b3480156101b557600080fd5b50600080806101c736600481846148b7565b8101906101d4919061494e565b9250925092506101e58383836104e7565b005b3480156101f357600080fd5b50600554600654604080516001600160a01b039384168152929091166020830152015b60405180910390f35b61023261022d3660046149e0565b610595565b604051908152602001610216565b34801561024c57600080fd5b506101e561025b366004614a72565b6105a8565b34801561026c57600080fd5b5061028061027b366004614b1d565b61072c565b60405161021693929190614bae565b34801561029b57600080fd5b506101e56102aa366004614bec565b61082e565b6102c26102bd366004614c6b565b610875565b60408051928352602083019190915201610216565b3480156102e357600080fd5b5061023260075481565b6102c26102fb366004614cf7565b61089e565b34801561030c57600080fd5b506101e561031b366004614d33565b6108c4565b34801561032c57600080fd5b50600154600160a81b900460ff166040519015158152602001610216565b34801561035657600080fd5b506101e5610365366004614d6f565b61099f565b6101e5610378366004614cf7565b6109c0565b34801561038957600080fd5b506003546004546102c2565b3480156103a157600080fd5b506102327f048f880a603b1aab0e626a287e33d603417b3d53a36f7527b7c86365bf7def4f81565b3480156103d557600080fd5b506101e56103e4366004614df2565b610ded565b3480156103f557600080fd5b506101e5610404366004614ef4565b610f74565b34801561041557600080fd5b506101e5611160565b34801561042a57600080fd5b506101e5610439366004614f8d565b6111e3565b34801561044a57600080fd5b506101e5610459366004614faa565b611254565b61023261046c366004614cf7565b611513565b34801561047d57600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610216565b3480156104af57600080fd5b506001546001600160a01b031661048b565b6102326104cf366004614c6b565b611524565b6102c26104e23660046149e0565b611530565b60008313806104f65750600082135b6105325760405162461bcd60e51b81526020600482015260086024820152674d30206f72204d3160c01b60448201526064015b60405180910390fd5b600080828060200190518101906105499190615015565b91509150600080828060200190518101906105649190615097565b91509150610573848233611542565b8560008813156105805750865b61058b8333836116fb565b5050505050505050565b60006105a18383611824565b9392505050565b6105b0611d98565b60005b82518110156107275760006105e08483815181106105d3576105d36150c5565b6020026020010151611e0f565b156105f65750476105f18382611e48565b6106a4565b838281518110610608576106086150c5565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610658573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067c91906150db565b90506106a2848381518110610693576106936150c5565b60200260200101518483611f05565b505b826001600160a01b0316336001600160a01b03168584815181106106ca576106ca6150c5565b60200260200101516001600160a01b03167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f78460405161070c91815260200190565b60405180910390a4508061071f8161510a565b9150506105b3565b505050565b604080518082018252600080825260606020808401919091526001600160a01b038781168352600882528483205487821684526009835285842054878552600a84529386902086518088019097528054909216865260018201805460ff9283169792909516959491938401916107a190615123565b80601f01602080910402602001604051908101604052809291908181526020018280546107cd90615123565b801561081a5780601f106107ef5761010080835404028352916020019161081a565b820191906000526020600020905b8154815290600101906020018083116107fd57829003601f168201915b505050505081525050905093509350939050565b61086f848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506104e792505050565b50505050565b60008060005a90506108878585611fef565b92505a6108949082615157565b9150509250929050565b60008060005a90506108af84612584565b92505a6108bc9082615157565b915050915091565b6108cc611d98565b6001600160a01b0382161561092d57600580546001600160a01b0319166001600160a01b0384169081179091556040519081527f347fade115440908839b750620f0add8f417b77a392657edd70b950373eda9c39060200160405180910390a15b6001600160a01b0381161561099b57600680546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527ff9c6fa562c9d8326f8518a29a53ef18ab03cd6b9eead73ac667c5e289354c73e910160405180910390a1505b5050565b6109a7611d98565b80156109b8576109b5612b08565b50565b6109b5612b59565b60028054036109e15760405162461bcd60e51b81526004016105299061516a565b600280556109ed612b9e565b60006109fd6101208301836151a1565b905011610a465760405162461bcd60e51b8152602060048201526017602482015276646174612073686f756c64206265206e6f74207a65726f60481b6044820152606401610529565b60008160a0013511610a9a5760405162461bcd60e51b815260206004820152601f60248201527f616d6f756e742073686f756c642062652067726561746572207468616e2030006044820152606401610529565b60086000610aae6060840160408501614f8d565b6001600160a01b0316815260208101919091526040016000205460ff16610b085760405162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21031b0b63632b960911b6044820152606401610529565b600080610b2c8160a085013560c0860135610b276101408801886151a1565b612beb565b9050610b43610b3e6020850185614f8d565b611e0f565b15610c4b578260a001353414610b8f5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964206d73672e76616c756560781b6044820152606401610529565b9050806000610ba460a0850160808601614f8d565b6001600160a01b031614610c465760096000610bc660a0860160808701614f8d565b6001600160a01b0316815260208101919091526040016000205460ff16610bff5760405162461bcd60e51b8152600401610529906151e7565b610c18610c1260a0850160808601614f8d565b83612ca7565b610c41610c2b60a0850160808601614f8d565b610c3b6060860160408701614f8d565b84612da5565b600091505b610c8d565b610c67610c5b6020850185614f8d565b33308660a00135612eb9565b610c8d610c776020850185614f8d565b610c876060860160408701614f8d565b83612da5565b600080610ca06060860160408701614f8d565b6001600160a01b031684610cb86101208801886151a1565b604051610cc692919061521e565b60006040518083038185875af1925050503d8060008114610d03576040519150601f19603f3d011682016040523d82523d6000602084013e610d08565b606091505b509150915081610d5c57610d43816040518060400160405280600f81526020016e2a3930b739b4ba21b937b9b9ab1a9d60891b815250612fe1565b60405162461bcd60e51b8152600401610529919061522e565b50610de39050610d6f6020850185614f8d565b610d7f6040860160208701614f8d565b610d8f6080870160608801614f8d565b60a0870135600060e0890135610da96101008b018b6151a1565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061325792505050565b5050600160025550565b610df5611d98565b60005b8251811015610727576000828281518110610e1557610e156150c5565b602002602001015110158015610e4657506103e8828281518110610e3b57610e3b6150c5565b602002602001015111155b610e875760405162461bcd60e51b8152602060048201526012602482015271066656520726174652069733a302d313030360741b6044820152606401610529565b828181518110610e9957610e996150c5565b602002602001015115610ecb57818181518110610eb857610eb86150c5565b6020026020010151600381905550610eec565b818181518110610edd57610edd6150c5565b60200260200101516004819055505b7f5fa95345cbe35dad70f67a9ca1430c22453a695590cb4fca05d58f637e85af4f838281518110610f1f57610f1f6150c5565b6020026020010151838381518110610f3957610f396150c5565b6020026020010151604051610f5a9291909115158252602082015260400190565b60405180910390a180610f6c8161510a565b915050610df8565b610f7c611d98565b848114610fba5760405162461bcd60e51b815260206004820152600c60248201526b696e76616c6964206461746160a01b6044820152606401610529565b828114610ff85760405162461bcd60e51b815260206004820152600c60248201526b696e76616c6964206461746160a01b6044820152606401610529565b8260005b81811015611115576040518060400160405280878784818110611021576110216150c5565b90506020020160208101906110369190614f8d565b6001600160a01b03168152602001858584818110611056576110566150c5565b905060200281019061106891906151a1565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250600a92508b90508a858181106110b5576110b56150c5565b6020908102929092013583525081810192909252604001600020825181546001600160a01b0319166001600160a01b039091161781559082015160018201906110fe9082615287565b50905050808061110d9061510a565b915050610ffc565b507f652c1af850dcc0b28fcb71cd9473023f56a89edd81bbe7b51056a04caa94002487878787878760405161114f969594939291906153fd565b60405180910390a150505050505050565b33806111746001546001600160a01b031690565b6001600160a01b0316146111da5760405162461bcd60e51b815260206004820152602760248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206e657720656044820152663c32b1baba37b960c91b6064820152608401610529565b6109b5816132bb565b6111eb611d98565b600180546001600160a01b0383166001600160a01b0319909116811790915561121c6000546001600160a01b031690565b6001600160a01b03167fdd01547fc40682edc3cd8d164d53f5a1ae6b46138a83f045658ed760823ddba860405160405180910390a350565b61125c611d98565b82156113585760005b8381101561131d5760086000868684818110611283576112836150c5565b90506020020160208101906112989190614f8d565b6001600160a01b03168152602081019190915260400160009081205460ff1615906008908787858181106112ce576112ce6150c5565b90506020020160208101906112e39190614f8d565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806113158161510a565b915050611265565b507fb05655746bd43b7fe3ccd9d28b7685b4c67ddc51e70890062b0f7f85dd692695848460405161134f9291906154b0565b60405180910390a15b801561086f576000816001600160401b03811115611378576113786148e1565b6040519080825280602002602001820160405280156113a1578160200160208202803683370190505b50905060005b828110156114d057600960008585848181106113c5576113c56150c5565b90506020020160208101906113da9190614f8d565b6001600160a01b03168152602081019190915260400160009081205460ff161590600990868685818110611410576114106150c5565b90506020020160208101906114259190614f8d565b6001600160a01b0316815260208101919091526040016000908120805460ff191692151592909217909155600990858584818110611465576114656150c5565b905060200201602081019061147a9190614f8d565b6001600160a01b03168152602081019190915260400160002054825160ff909116908390839081106114ae576114ae6150c5565b91151560209283029190910190910152806114c88161510a565b9150506113a7565b507f4a28b173d9bc739be3886d172e07fef80392184787fc6b92406ce0f0c05b7e63838383604051611504939291906154c4565b60405180910390a15050505050565b600061151e82612584565b92915050565b60006105a18383611fef565b60008060005a90506108878585611824565b600f60f884901c166000818152600a60209081526040808320815180830190925280546001600160a01b03168252600181018054929391929184019161158790615123565b80601f01602080910402602001604051908101604052809291908181526020018280546115b390615123565b80156116005780601f106115d557610100808354040283529160200191611600565b820191906000526020600020905b8154815290600101906020018083116115e357829003601f168201915b5050509190925250508151919250506001600160a01b03166116645760405162461bcd60e51b815260206004820152601960248201527f43616c6c6261636b2062616420706f6f6c20696e6465786564000000000000006044820152606401610529565b600081600001518583602001516040516020016116839392919061551f565b6040516020818303038152906040528051906020012060001c9050836001600160a01b0316816001600160a01b0316146116f35760405162461bcd60e51b815260206004820152601160248201527010d85b1b189858dac8189859081c1bdbdb607a1b6044820152606401610529565b505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916117579190615568565b6000604051808303816000865af19150503d8060008114611794576040519150601f19603f3d011682016040523d82523d6000602084013e611799565b606091505b50915091508180156117c35750805115806117c35750808060200190518101906117c39190615584565b61181d5760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657248656c7065723a205452414e534645525f544f4b454e5f46604482015264105253115160da1b6064820152608401610529565b5050505050565b600060028054036118475760405162461bcd60e51b81526004016105299061516a565b60028055611853612b9e565b4282101561188d5760405162461bcd60e51b8152602060048201526007602482015266115e1c1a5c995960ca1b6044820152606401610529565b6001600f604085013560f81c16146000808080806118ab8987613315565b9450945094509450945061190f836000815181106118cb576118cb6150c5565b60200260200101518a8060e001906118e391906155a1565b60008181106118f4576118f46150c5565b90506020020160208101906119099190614f8d565b866116fb565b8515611ac85784156119f65761196a60408a01358461193160e08d018d6155a1565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506137e6915050565b6119ef8261197e60408c0160208d01614f8d565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a08231906024015b602060405180830381865afa1580156119c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e991906150db565b90613af2565b9650611c45565b611a5060408a013584611a0c60e08d018d6155a1565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611a4b9250505060208e018e614f8d565b6137e6565b6119ef818460018651611a639190615157565b81518110611a7357611a736150c5565b60200260200101516001600160a01b03166370a082318c6000016020810190611a9c9190614f8d565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024016119a8565b600089604001356001600160a01b031663d06ca61f86866040518363ffffffff1660e01b8152600401611afc9291906155ea565b600060405180830381865afa158015611b19573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b419190810190615641565b90508515611baf57611b948185611b5b60e08e018e6155a1565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613b48915050565b611ba88361197e60408d0160208e01614f8d565b9750611c43565b611c198185611bc160e08e018e6155a1565b80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508d6000016020810190611c149190614f8d565b613b48565b8060018251611c289190615157565b81518110611c3857611c386150c5565b602002602001015197505b505b8860800135871015611c695760405162461bcd60e51b8152600401610529906156c6565b8415611c9e57611c88611c8260408b0160208c01614f8d565b88613d40565b611c9e611c9860208b018b614f8d565b88611e48565b5050505050600084806101200190611cb691906151a1565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929350611d8b9250611cff91505060c08701876155a1565b6000818110611d1057611d106150c5565b9050602002016020810190611d259190614f8d565b611d3260c08801886155a1565b6001611d4160c08b018b6155a1565b611d4c929150615157565b818110611d5b57611d5b6150c5565b9050602002016020810190611d709190614f8d565b611d7d6020890189614f8d565b886060013587600087613257565b5050600160025592915050565b33611dab6000546001600160a01b031690565b6001600160a01b031614611e0d5760405162461bcd60e51b815260206004820152602360248201527f4f776e61626c653a2063616c6c6572206973206e6f74207468652065786563756044820152623a37b960e91b6064820152608401610529565b565b60006001600160a01b038216158061151e57506001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1492915050565b604080516000808252602082019092526001600160a01b038416908390604051611e729190615568565b60006040518083038185875af1925050503d8060008114611eaf576040519150601f19603f3d011682016040523d82523d6000602084013e611eb4565b606091505b50509050806107275760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c4544006044820152606401610529565b6000806000856001600160a01b031663a9059cbb8686604051602401611f409291906001600160a01b03929092168252602082015260400190565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051611f799190615568565b6000604051808303816000865af19150503d8060008114611fb6576040519150601f19603f3d011682016040523d82523d6000602084013e611fbb565b606091505b5091509150818015611fe5575080511580611fe5575080806020019051810190611fe59190615584565b9695505050505050565b600060028054036120125760405162461bcd60e51b81526004016105299061516a565b6002805561201e612b9e565b600061202d60208401846151a1565b9050116120765760405162461bcd60e51b8152602060048201526017602482015276646174612073686f756c64206265206e6f74207a65726f60481b6044820152606401610529565b60008360800135116120ca5760405162461bcd60e51b815260206004820152601f60248201527f616d6f756e742073686f756c642062652067726561746572207468616e2030006044820152606401610529565b60006120dc6060850160408601614f8d565b6001600160a01b03160361213c5760405162461bcd60e51b815260206004820152602160248201527f72656365697665722073686f756c64206265206e6f74206164647265737328306044820152602960f81b6064820152608401610529565b60008360a00135116121a15760405162461bcd60e51b815260206004820152602860248201527f6d696e52657475726e416d6f756e742073686f756c6420626520677265617465604482015267072207468616e20360c41b6064820152608401610529565b600960006121b56080860160608701614f8d565b6001600160a01b0316815260208101919091526040016000205460ff1661221e5760405162461bcd60e51b815260206004820152601760248201527f696e76616c6964207772617070656420616464726573730000000000000000006044820152606401610529565b600061223d6001608086013560c0870135610b276101008901896151a1565b60055490915060009081906001600160a01b0316612261610b3e6020890189614f8d565b156122b557866080013534146122ad5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964206d73672e76616c756560781b6044820152606401610529565b8392506122e8565b6122d16122c56020890189614f8d565b33308a60800135612eb9565b6122e86122e16020890189614f8d565b82866116fb565b6122fb610b3e6040890160208a01614f8d565b15612321576123106060880160408901614f8d565b6001600160a01b03163191506123ba565b6123316040880160208901614f8d565b6001600160a01b03166370a0823161234f60608a0160408b01614f8d565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b791906150db565b91505b600080826001600160a01b031685633f3204d28a6040516024016123de91906156f3565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516124179190615568565b60006040518083038185875af1925050503d8060008114612454576040519150601f19603f3d011682016040523d82523d6000602084013e612459565b606091505b50915091508161249157610d43816040518060400160405280600c81526020016b2a3930b739b4ba29bbb0b81d60a11b815250612fe1565b506124a79050610b3e6040890160208a01614f8d565b156124d7576124d0826124c060608a0160408b01614f8d565b6001600160a01b03163190613af2565b945061250c565b612509826124eb60408a0160208b01614f8d565b6001600160a01b03166370a08231611a9c60608c0160408d01614f8d565b94505b8660a001358510156125305760405162461bcd60e51b8152600401610529906156c6565b6125756125406020890189614f8d565b61255060408a0160208b01614f8d565b61256060608b0160408c01614f8d565b60808b0135896000610da960e08f018f6151a1565b50505050600160025592915050565b600060028054036125a75760405162461bcd60e51b81526004016105299061516a565b600280556125b3612b9e565b60006125c36101008401846155a1565b9050116126005760405162461bcd60e51b815260206004820152600b60248201526a456d70747920706f6f6c7360a81b6044820152606401610529565b428260e00135101561263e5760405162461bcd60e51b8152602060048201526007602482015266115e1c1a5c995960ca1b6044820152606401610529565b600960006126526080850160608601614f8d565b6001600160a01b0316815260208101919091526040016000205460ff1661268b5760405162461bcd60e51b8152600401610529906151e7565b600061269a6020840184614f8d565b905060006126ae6040850160208601614f8d565b905060006126cf6001608087013560c0880135610b276101208a018a6151a1565b90506000806126e4610b3e6020890189614f8d565b15612760576126f96080880160608901614f8d565b9450866080013534146127425760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964206d73672e76616c756560781b6044820152606401610529565b61275b6127556080890160608a01614f8d565b84612ca7565b612770565b6127706122c56020890189614f8d565b612783610b3e6040890160208a01614f8d565b1561281f576127986080880160608901614f8d565b93506127aa6080880160608901614f8d565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156127f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281491906150db565b9150600190506128b8565b61282f6040880160208901614f8d565b6001600160a01b03166370a0823161284d60608a0160408b01614f8d565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612891573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b591906150db565b91505b60006128c86101008901896155a1565b91503090506060600183111561297f57876000805b858110156129745760006128f56101008f018f6155a1565b83818110612905576129056150c5565b905060200201359050612919848483613e58565b95509350612928600188615157565b82148015612934575087155b15612952578d604001602081019061294c9190614f8d565b95508a92505b61295e8682878d614144565b995050808061296c9061510a565b9150506128dd565b50879a5050506129ff565b6129af88886129926101008e018e6155a1565b60008181106129a3576129a36150c5565b90506020020135613e58565b91508490506129cb576129c860608b0160408c01614f8d565b91505b6129fc826129dd6101008d018d6155a1565b60008181106129ee576129ee6150c5565b905060200201358389614144565b98505b5050508015612a7957612a1c8261197e60808a0160608b01614f8d565b95508660a00135861015612a425760405162461bcd60e51b8152600401610529906156c6565b612a5b612a556080890160608a01614f8d565b87613d40565b612a74612a6e6060890160408a01614f8d565b87611e48565b612ab3565b612a8d826124eb60408a0160208b01614f8d565b95508660a00135861015612ab35760405162461bcd60e51b8152600401610529906156c6565b612af9612ac36020890189614f8d565b612ad360408a0160208b01614f8d565b612ae360608b0160408c01614f8d565b60808b01358a6000610da96101408f018f6151a1565b50505050506001600255919050565b612b10612b9e565b6001805460ff60a81b1916600160a81b1790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020015b60405180910390a1565b612b616142fc565b6001805460ff60a81b191690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90602001612b4f565b600154600160a81b900460ff1615611e0d5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610529565b6000808615612c1c57612c15612710612c0f6003548961434c90919063ffffffff16565b906143b3565b9050612c3a565b612c37612710612c0f6004548961434c90919063ffffffff16565b90505b80851015612c9257612c4e86868686614402565b612c925760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207369676e61747572652066656560581b6044820152606401610529565b612c9c8686613af2565b979650505050505050565b60408051600481526024810182526020810180516001600160e01b0316630d0e30db60e41b179052905160009182916001600160a01b038616918591612ced9190615568565b60006040518083038185875af1925050503d8060008114612d2a576040519150601f19603f3d011682016040523d82523d6000602084013e612d2f565b606091505b5091509150818015612d59575080511580612d59575080806020019051810190612d599190615584565b61086f5760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a204445504f5349545f4641494c454400006044820152606401610529565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b1790529151600092839290871691612e019190615568565b6000604051808303816000865af19150503d8060008114612e3e576040519150601f19603f3d011682016040523d82523d6000602084013e612e43565b606091505b5091509150818015612e6d575080511580612e6d575080806020019051810190612e6d9190615584565b61181d5760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a20415050524f56455f4641494c454400006044820152606401610529565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691612f1d9190615568565b6000604051808303816000865af19150503d8060008114612f5a576040519150601f19603f3d011682016040523d82523d6000602084013e612f5f565b606091505b5091509150818015612f89575080511580612f89575080806020019051810190612f899190615584565b6116f35760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f46416044820152631253115160e21b6064820152608401610529565b6060604483511015801561301a575082600081518110613003576130036150c5565b6020910101516001600160f81b031916600160fb1b145b801561304b575082600181518110613034576130346150c5565b6020910101516001600160f81b03191660c360f81b145b801561307c575082600281518110613065576130656150c5565b6020910101516001600160f81b031916607960f81b145b80156130ad575082600381518110613096576130966150c5565b6020910101516001600160f81b031916600560fd1b145b15613137576044838101805190916130c5919061573f565b8451101561310d5760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103932bb32b93a103932b0b9b7b760591b6044820152606401610529565b8281604051602001613120929190615752565b60405160208183030381529060405291505061151e565b8251602414801561316d575082600081518110613156576131566150c5565b6020910101516001600160f81b031916602760f91b145b801561319e575082600181518110613187576131876150c5565b6020910101516001600160f81b031916600960fb1b145b80156131cf5750826002815181106131b8576131b86150c5565b6020910101516001600160f81b031916607b60f81b145b80156132005750826003815181106131e9576131e96150c5565b6020910101516001600160f81b031916607160f81b145b156132255760248301518261321482614576565b6040516020016131209291906157a1565b8161322f8461459e565b6040516020016132409291906157d6565b604051602081830303815290604052905092915050565b846001600160a01b0316866001600160a01b0316886001600160a01b03167f2251435bd151cd72851a82be055bf6d1c3d7f34d08d56493dddf874229b8e897878787876040516132aa9493929190615827565b60405180910390a450505050505050565b600180546001600160a01b0319908116909155600080546001600160a01b03848116938216841783556040519116929183917f88436636ea40d5bb1bcc55ff9cd54788af71da886f4147a87f199adcca733d4d9190a35050565b6000806060818061332960e08801886155a1565b6133359150600161573f565b61334260c08901896155a1565b9050146133805760405162461bcd60e51b815260206004820152600c60248201526b092dcecc2d8d2c840e0c2e8d60a31b6044820152606401610529565b6009600061339460408a0160208b01614f8d565b6001600160a01b0316815260208101919091526040016000205460ff166133cd5760405162461bcd60e51b8152600401610529906151e7565b6133ea6001606089013560a08a0135610b276101008c018c6151a1565b935060006133fb60c08901896155a1565b80806020026020016040519081016040528093929190818152602001838360200280828437600092018290525093945084925060019150613441905060c08c018c6155a1565b61344c929150615157565b8151811061345c5761345c6150c5565b6020026020010151905061349f898060c0019061347991906155a1565b600081811061348a5761348a6150c5565b9050602002016020810190610b3e9190614f8d565b1561354457886060013534146134eb5760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964206d73672e76616c756560781b6044820152606401610529565b6134fb60408a0160208b01614f8d565b8260008151811061350e5761350e6150c5565b6001600160a01b0390921660209283029190910182015261353f906135399060408c01908c01614f8d565b87612ca7565b613671565b871561365b578160008151811061355d5761355d6150c5565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156135ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d191906150db565b95506135fd826000815181106135e9576135e96150c5565b602002602001015133308c60600135612eb9565b6136548960a001356119e9888560008151811061361c5761361c6150c5565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a08231906024016119a8565b9550613671565b613671826000815181106135e9576135e96150c5565b61367a81611e0f565b1561374a5761368f60408a0160208b01614f8d565b826001845161369e9190615157565b815181106136ae576136ae6150c5565b6001600160a01b03909216602092830291909101820152600197506136d99060408b01908b01614f8d565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561371f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061374391906150db565b93506137d7565b87156137d7576001600160a01b0381166370a0823161376c60208c018c614f8d565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156137b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137d491906150db565b92505b81945050509295509295909350565b60005b600184516137f79190615157565b81101561181d57600080858381518110613813576138136150c5565b602002602001015186846001613829919061573f565b81518110613839576138396150c5565b6020026020010151915091506000816001600160a01b0316836001600160a01b03161061386757818361386a565b82825b5090506000868581518110613881576138816150c5565b60200260200101519050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156138cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138f39190615863565b506001600160701b031691506001600160701b03169150600080876001600160a01b03168a6001600160a01b03161461392d578284613930565b83835b6040516370a0823160e01b81526001600160a01b038a8116600483015292945090925061396b918491908d16906370a08231906024016119a8565b95508e6001600160a01b031663054d50d48784846040518463ffffffff1660e01b81526004016139ae939291909283526020830191909152604082015260600190565b602060405180830381865afa1580156139cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139ef91906150db565b945050505050600080856001600160a01b0316886001600160a01b031614613a1957826000613a1d565b6000835b91509150600060028d51613a319190615157565b8a10613a3d578a613a62565b8b613a498b600161573f565b81518110613a5957613a596150c5565b60200260200101515b6040805160008152602081019182905263022c0d9f60e01b9091529091506001600160a01b0387169063022c0d9f90613aa490869086908690602481016158b3565b600060405180830381600087803b158015613abe57600080fd5b505af1158015613ad2573d6000803e3d6000fd5b505050505050505050505050508080613aea9061510a565b9150506137e9565b600082613aff8382615157565b915081111561151e5760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b6044820152606401610529565b60005b60018451613b599190615157565b81101561181d57600080858381518110613b7557613b756150c5565b602002602001015186846001613b8b919061573f565b81518110613b9b57613b9b6150c5565b6020026020010151915091506000816001600160a01b0316836001600160a01b031610613bc9578183613bcc565b82825b509050600088613bdd86600161573f565b81518110613bed57613bed6150c5565b60200260200101519050600080836001600160a01b0316866001600160a01b031614613c1b57826000613c1f565b6000835b91509150600060028b51613c339190615157565b8810613c3f5788613c64565b89613c4b89600161573f565b81518110613c5b57613c5b6150c5565b60200260200101515b9050898881518110613c7857613c786150c5565b60200260200101516001600160a01b031663022c0d9f84848460006001600160401b03811115613caa57613caa6148e1565b6040519080825280601f01601f191660200182016040528015613cd4576020820181803683370190505b506040518563ffffffff1660e01b8152600401613cf494939291906158b3565b600060405180830381600087803b158015613d0e57600080fd5b505af1158015613d22573d6000803e3d6000fd5b50505050505050505050508080613d389061510a565b915050613b4b565b600080836001600160a01b03166000632e1a7d4d85604051602401613d6791815260200190565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051613da09190615568565b60006040518083038185875af1925050503d8060008114613ddd576040519150601f19603f3d011682016040523d82523d6000602084013e613de2565b606091505b5091509150818015613e0c575080511580613e0c575080806020019051810190613e0c9190615584565b61086f5760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a2057495448445241575f4641494c4544006044820152606401610529565b6000606060008390506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ea1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ec591906158e0565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f2b91906158e0565b90506000836001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f9191906158fd565b604080516001600160a01b03808716602083015285169181019190915262ffffff8216606082015290915060009060800160408051601f1981840301815291905280516020909101209050600160ff1b881615801561409257846001600160a01b03168b6001600160a01b03161461401b5760405162461bcd60e51b815260040161052990615922565b6001600160a01b038a161561405b57836001600160a01b03168a6001600160a01b03161461405b5760405162461bcd60e51b815260040161052990615922565b604080516001600160a01b038716602082015290810183905293975087936060016040516020818303038152906040529650614136565b836001600160a01b03168b6001600160a01b0316146140c35760405162461bcd60e51b815260040161052990615922565b6001600160a01b038a161561410357846001600160a01b03168a6001600160a01b0316146141035760405162461bcd60e51b815260040161052990615922565b604080516001600160a01b0386166020820152908101839052949750879460600160405160208183030381529060405296505b505050505050935093915050565b6000600160ff1b8416158015614221576000856001600160a01b031663128acb08888461417088614785565b6141806401000276a36001615944565b8b8b60405160200161419392919061596b565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016141c2959493929190615984565b60408051808303816000875af11580156141e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061420491906159bf565b91505061421981614214906159e3565b6147f3565b9250506142f3565b6000856001600160a01b031663128acb08888461423d88614785565b61425c600173fffd8963efd1fc6a506488495d951d5263988d266159ff565b8b8b60405160200161426f92919061596b565b6040516020818303038152906040526040518663ffffffff1660e01b815260040161429e959493929190615984565b60408051808303816000875af11580156142bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142e091906159bf565b5090506142ef614214826159e3565b9250505b50949350505050565b600154600160a81b900460ff16611e0d5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610529565b6000811580614370575082826143628183615a1f565b925061436e9083615a36565b145b61151e5760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b6044820152606401610529565b6000816000036143f85760405162461bcd60e51b815260206004820152601060248201526f64732d6d6174682d6469762d7a65726f60801b6044820152606401610529565b6105a18284615a36565b600754604080517f048f880a603b1aab0e626a287e33d603417b3d53a36f7527b7c86365bf7def4f602082015233918101919091526060810186905260808101859052600091829160a0016040516020818303038152906040528051906020012060405160200161448a92919061190160f01b81526002810192909252602282015260420190565b60405160208183030381529060405280519060200120905060008060006144e687878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061484592505050565b92509250925060006001858585856040516000815260200160405260405161452a949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa15801561454c573d6000803e3d6000fd5b5050604051601f1901516006546001600160a01b039081169116149b9a5050505050505050505050565b606061151e8260405160200161458e91815260200190565b6040516020818303038152906040525b80516060906f181899199a1a9b1b9c1cb0b131b232b360811b906000906145c6906002615a1f565b6145d190600261573f565b6001600160401b038111156145e8576145e86148e1565b6040519080825280601f01601f191660200182016040528015614612576020820181803683370190505b509050600360fc1b8160008151811061462d5761462d6150c5565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061465c5761465c6150c5565b60200101906001600160f81b031916908160001a90535060005b845181101561477d57826004868381518110614694576146946150c5565b01602001516001600160f81b031916901c60f81c601081106146b8576146b86150c5565b1a60f81b826146c8836002615a1f565b6146d390600261573f565b815181106146e3576146e36150c5565b60200101906001600160f81b031916908160001a9053508285828151811061470d5761470d6150c5565b60209101015160f81c600f1660108110614729576147296150c5565b1a60f81b82614739836002615a1f565b61474490600361573f565b81518110614754576147546150c5565b60200101906001600160f81b031916908160001a905350806147758161510a565b915050614676565b509392505050565b60006001600160ff1b038211156147ef5760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b6064820152608401610529565b5090565b6000808212156147ef5760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f7369746976656044820152606401610529565b6000806000835160411461489b5760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964207369676e6174757265206c656e67746800000000000000006044820152606401610529565b5050506020810151604082015160609092015160001a92909190565b600080858511156148c757600080fd5b838611156148d457600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561491f5761491f6148e1565b604052919050565b60006001600160401b03821115614940576149406148e1565b50601f01601f191660200190565b60008060006060848603121561496357600080fd5b833592506020840135915060408401356001600160401b0381111561498757600080fd5b8401601f8101861361499857600080fd5b80356149ab6149a682614927565b6148f7565b8181528760208385010111156149c057600080fd5b816020840160208301376000602083830101528093505050509250925092565b600080604083850312156149f357600080fd5b82356001600160401b03811115614a0957600080fd5b83016101408186031215614a1c57600080fd5b946020939093013593505050565b60006001600160401b03821115614a4357614a436148e1565b5060051b60200190565b6001600160a01b03811681146109b557600080fd5b8035614a6d81614a4d565b919050565b60008060408385031215614a8557600080fd5b82356001600160401b03811115614a9b57600080fd5b8301601f81018513614aac57600080fd5b80356020614abc6149a683614a2a565b82815260059290921b83018101918181019088841115614adb57600080fd5b938201935b83851015614b02578435614af381614a4d565b82529382019390820190614ae0565b9550614b119050868201614a62565b93505050509250929050565b600080600060608486031215614b3257600080fd5b8335614b3d81614a4d565b92506020840135614b4d81614a4d565b929592945050506040919091013590565b60005b83811015614b79578181015183820152602001614b61565b50506000910152565b60008151808452614b9a816020860160208601614b5e565b601f01601f19169290920160200192915050565b831515815282151560208201526060604082015260018060a01b0382511660608201526000602083015160406080840152611fe560a0840182614b82565b60008060008060608587031215614c0257600080fd5b843593506020850135925060408501356001600160401b0380821115614c2757600080fd5b818701915087601f830112614c3b57600080fd5b813581811115614c4a57600080fd5b886020828501011115614c5c57600080fd5b95989497505060200194505050565b60008060408385031215614c7e57600080fd5b82356001600160401b0380821115614c9557600080fd5b908401906101208287031215614caa57600080fd5b90925060208401359080821115614cc057600080fd5b50830160408186031215614cd357600080fd5b809150509250929050565b60006101608284031215614cf157600080fd5b50919050565b600060208284031215614d0957600080fd5b81356001600160401b03811115614d1f57600080fd5b614d2b84828501614cde565b949350505050565b60008060408385031215614d4657600080fd5b8235614d5181614a4d565b91506020830135614cd381614a4d565b80151581146109b557600080fd5b600060208284031215614d8157600080fd5b81356105a181614d61565b600082601f830112614d9d57600080fd5b81356020614dad6149a683614a2a565b82815260059290921b84018101918181019086841115614dcc57600080fd5b8286015b84811015614de75780358352918301918301614dd0565b509695505050505050565b60008060408385031215614e0557600080fd5b82356001600160401b0380821115614e1c57600080fd5b818501915085601f830112614e3057600080fd5b81356020614e406149a683614a2a565b82815260059290921b84018101918181019089841115614e5f57600080fd5b948201945b83861015614e86578535614e7781614d61565b82529482019490820190614e64565b96505086013592505080821115614e9c57600080fd5b5061089485828601614d8c565b60008083601f840112614ebb57600080fd5b5081356001600160401b03811115614ed257600080fd5b6020830191508360208260051b8501011115614eed57600080fd5b9250929050565b60008060008060008060608789031215614f0d57600080fd5b86356001600160401b0380821115614f2457600080fd5b614f308a838b01614ea9565b90985096506020890135915080821115614f4957600080fd5b614f558a838b01614ea9565b90965094506040890135915080821115614f6e57600080fd5b50614f7b89828a01614ea9565b979a9699509497509295939492505050565b600060208284031215614f9f57600080fd5b81356105a181614a4d565b60008060008060408587031215614fc057600080fd5b84356001600160401b0380821115614fd757600080fd5b614fe388838901614ea9565b90965094506020870135915080821115614ffc57600080fd5b5061500987828801614ea9565b95989497509550505050565b6000806040838503121561502857600080fd5b8251915060208301516001600160401b0381111561504557600080fd5b8301601f8101851361505657600080fd5b80516150646149a682614927565b81815286602083850101111561507957600080fd5b61508a826020830160208601614b5e565b8093505050509250929050565b600080604083850312156150aa57600080fd5b82516150b581614a4d565b6020939093015192949293505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156150ed57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60006001820161511c5761511c6150f4565b5060010190565b600181811c9082168061513757607f821691505b602082108103614cf157634e487b7160e01b600052602260045260246000fd5b8181038181111561151e5761151e6150f4565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6000808335601e198436030181126151b857600080fd5b8301803591506001600160401b038211156151d257600080fd5b602001915036819003821315614eed57600080fd5b60208082526017908201527f496e76616c696420777261707065642061646472657373000000000000000000604082015260600190565b8183823760009101908152919050565b6020815260006105a16020830184614b82565b601f82111561072757600081815260208120601f850160051c810160208610156152685750805b601f850160051c820191505b818110156116f357828155600101615274565b81516001600160401b038111156152a0576152a06148e1565b6152b4816152ae8454615123565b84615241565b602080601f8311600181146152e957600084156152d15750858301515b600019600386901b1c1916600185901b1785556116f3565b600085815260208120601f198616915b82811015615318578886015182559484019460019091019084016152f9565b50858210156153365787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8183526000602080850194508260005b8581101561538457813561536981614a4d565b6001600160a01b031687529582019590820190600101615356565b509495945050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e198436030181126153cf57600080fd5b83016020810192503590506001600160401b038111156153ee57600080fd5b803603821315614eed57600080fd5b6060808252810186905260006001600160fb1b0387111561541d57600080fd5b8660051b80896080850137808301905060206080848303018185015261544760808301888a615346565b84810360408601528581529150808201600586901b830182018760005b8881101561549e57858303601f1901845261547f828b6153b8565b61548a85828461538f565b958701959450505090840190600101615464565b50909c9b505050505050505050505050565b602081526000614d2b602083018486615346565b6040815260006154d8604083018587615346565b82810360208481019190915284518083528582019282019060005b818110156155115784511515835293830193918301916001016154f3565b509098975050505050505050565b60ff60f81b81526bffffffffffffffffffffffff198460601b16600182015282601582015260008251615559816035850160208701614b5e565b91909101603501949350505050565b6000825161557a818460208701614b5e565b9190910192915050565b60006020828403121561559657600080fd5b81516105a181614d61565b6000808335601e198436030181126155b857600080fd5b8301803591506001600160401b038211156155d257600080fd5b6020019150600581901b3603821315614eed57600080fd5b6000604082018483526020604081850152818551808452606086019150828701935060005b818110156156345784516001600160a01b03168352938301939183019160010161560f565b5090979650505050505050565b6000602080838503121561565457600080fd5b82516001600160401b0381111561566a57600080fd5b8301601f8101851361567b57600080fd5b80516156896149a682614a2a565b81815260059190911b820183019083810190878311156156a857600080fd5b928401925b82841015612c9c578351825292840192908401906156ad565b602080825260139082015272151bdbc81b1a5d1d1b19481c9958d95a5d9959606a1b604082015260600190565b602081526000823561570481614a4d565b6001600160a01b0316602083810191909152615722908401846153b8565b60408085015261573660608501828461538f565b95945050505050565b8082018082111561151e5761151e6150f4565b60008351615764818460208801614b5e565b6508ae4e4dee4560d31b9083019081528351615787816006840160208801614b5e565b602960f81b60069290910191820152600701949350505050565b600083516157b3818460208801614b5e565b650a0c2dcd2c6560d31b9083019081528351615787816006840160208801614b5e565b600083516157e8818460208801614b5e565b670aadcd6dcdeeedc560c31b908301908152835161580d816008840160208801614b5e565b602960f81b60089290910191820152600901949350505050565b848152836020820152826040820152608060608201526000611fe56080830184614b82565b80516001600160701b0381168114614a6d57600080fd5b60008060006060848603121561587857600080fd5b6158818461584c565b925061588f6020850161584c565b9150604084015163ffffffff811681146158a857600080fd5b809150509250925092565b84815283602082015260018060a01b0383166040820152608060608201526000611fe56080830184614b82565b6000602082840312156158f257600080fd5b81516105a181614a4d565b60006020828403121561590f57600080fd5b815162ffffff811681146105a157600080fd5b602080825260089082015267109859081c1bdbdb60c21b604082015260600190565b6001600160a01b03818116838216019080821115615964576159646150f4565b5092915050565b828152604060208201526000614d2b6040830184614b82565b6001600160a01b0386811682528515156020830152604082018590528316606082015260a060808201819052600090612c9c90830184614b82565b600080604083850312156159d257600080fd5b505080516020909101519092909150565b6000600160ff1b82016159f8576159f86150f4565b5060000390565b6001600160a01b03828116828216039080821115615964576159646150f4565b808202811582820484141761151e5761151e6150f4565b600082615a5357634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220397b9a7e7c4527e2b680d32648a65e1c3283e7250c6c15690d931ae20fb8620964736f6c63430008120033

Deployed Bytecode

0x60806040526004361061016a5760003560e01c80636fbf72f9116100d1578063b93c0beb1161008a578063d63234e011610064578063d63234e0146104a3578063d808d889146104c1578063fa461e331461028f578063fa9ec7af146104d4576101a9565b8063b93c0beb1461043e578063b9b5149b1461045e578063c34c08e514610471576101a9565b80636fbf72f91461037d5780637e467ecf146103955780637ec753fe146103c957806392bcc8be146103e957806394d3d79314610409578063afed2d0e1461041e576101a9565b80633644e515116101235780633644e515146102d75780634c42342f146102ed578063524d3685146103005780635c975abb146103205780635d4fead31461034a5780636b3ec4161461036a576101a9565b80630ced9fb9146101e75780630dc4bdae1461021f5780630e8cc705146102405780631975b0961461026057806323a69e751461028f5780632adb806f146102af576101a9565b366101a957604080513381523460208201527f7784f8d436dc514f0690e472c7e2d7f660a73e504c69b2350f6be5a5f02432ef910160405180910390a1005b3480156101b557600080fd5b50600080806101c736600481846148b7565b8101906101d4919061494e565b9250925092506101e58383836104e7565b005b3480156101f357600080fd5b50600554600654604080516001600160a01b039384168152929091166020830152015b60405180910390f35b61023261022d3660046149e0565b610595565b604051908152602001610216565b34801561024c57600080fd5b506101e561025b366004614a72565b6105a8565b34801561026c57600080fd5b5061028061027b366004614b1d565b61072c565b60405161021693929190614bae565b34801561029b57600080fd5b506101e56102aa366004614bec565b61082e565b6102c26102bd366004614c6b565b610875565b60408051928352602083019190915201610216565b3480156102e357600080fd5b5061023260075481565b6102c26102fb366004614cf7565b61089e565b34801561030c57600080fd5b506101e561031b366004614d33565b6108c4565b34801561032c57600080fd5b50600154600160a81b900460ff166040519015158152602001610216565b34801561035657600080fd5b506101e5610365366004614d6f565b61099f565b6101e5610378366004614cf7565b6109c0565b34801561038957600080fd5b506003546004546102c2565b3480156103a157600080fd5b506102327f048f880a603b1aab0e626a287e33d603417b3d53a36f7527b7c86365bf7def4f81565b3480156103d557600080fd5b506101e56103e4366004614df2565b610ded565b3480156103f557600080fd5b506101e5610404366004614ef4565b610f74565b34801561041557600080fd5b506101e5611160565b34801561042a57600080fd5b506101e5610439366004614f8d565b6111e3565b34801561044a57600080fd5b506101e5610459366004614faa565b611254565b61023261046c366004614cf7565b611513565b34801561047d57600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610216565b3480156104af57600080fd5b506001546001600160a01b031661048b565b6102326104cf366004614c6b565b611524565b6102c26104e23660046149e0565b611530565b60008313806104f65750600082135b6105325760405162461bcd60e51b81526020600482015260086024820152674d30206f72204d3160c01b60448201526064015b60405180910390fd5b600080828060200190518101906105499190615015565b91509150600080828060200190518101906105649190615097565b91509150610573848233611542565b8560008813156105805750865b61058b8333836116fb565b5050505050505050565b60006105a18383611824565b9392505050565b6105b0611d98565b60005b82518110156107275760006105e08483815181106105d3576105d36150c5565b6020026020010151611e0f565b156105f65750476105f18382611e48565b6106a4565b838281518110610608576106086150c5565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610658573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067c91906150db565b90506106a2848381518110610693576106936150c5565b60200260200101518483611f05565b505b826001600160a01b0316336001600160a01b03168584815181106106ca576106ca6150c5565b60200260200101516001600160a01b03167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f78460405161070c91815260200190565b60405180910390a4508061071f8161510a565b9150506105b3565b505050565b604080518082018252600080825260606020808401919091526001600160a01b038781168352600882528483205487821684526009835285842054878552600a84529386902086518088019097528054909216865260018201805460ff9283169792909516959491938401916107a190615123565b80601f01602080910402602001604051908101604052809291908181526020018280546107cd90615123565b801561081a5780601f106107ef5761010080835404028352916020019161081a565b820191906000526020600020905b8154815290600101906020018083116107fd57829003601f168201915b505050505081525050905093509350939050565b61086f848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506104e792505050565b50505050565b60008060005a90506108878585611fef565b92505a6108949082615157565b9150509250929050565b60008060005a90506108af84612584565b92505a6108bc9082615157565b915050915091565b6108cc611d98565b6001600160a01b0382161561092d57600580546001600160a01b0319166001600160a01b0384169081179091556040519081527f347fade115440908839b750620f0add8f417b77a392657edd70b950373eda9c39060200160405180910390a15b6001600160a01b0381161561099b57600680546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527ff9c6fa562c9d8326f8518a29a53ef18ab03cd6b9eead73ac667c5e289354c73e910160405180910390a1505b5050565b6109a7611d98565b80156109b8576109b5612b08565b50565b6109b5612b59565b60028054036109e15760405162461bcd60e51b81526004016105299061516a565b600280556109ed612b9e565b60006109fd6101208301836151a1565b905011610a465760405162461bcd60e51b8152602060048201526017602482015276646174612073686f756c64206265206e6f74207a65726f60481b6044820152606401610529565b60008160a0013511610a9a5760405162461bcd60e51b815260206004820152601f60248201527f616d6f756e742073686f756c642062652067726561746572207468616e2030006044820152606401610529565b60086000610aae6060840160408501614f8d565b6001600160a01b0316815260208101919091526040016000205460ff16610b085760405162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21031b0b63632b960911b6044820152606401610529565b600080610b2c8160a085013560c0860135610b276101408801886151a1565b612beb565b9050610b43610b3e6020850185614f8d565b611e0f565b15610c4b578260a001353414610b8f5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964206d73672e76616c756560781b6044820152606401610529565b9050806000610ba460a0850160808601614f8d565b6001600160a01b031614610c465760096000610bc660a0860160808701614f8d565b6001600160a01b0316815260208101919091526040016000205460ff16610bff5760405162461bcd60e51b8152600401610529906151e7565b610c18610c1260a0850160808601614f8d565b83612ca7565b610c41610c2b60a0850160808601614f8d565b610c3b6060860160408701614f8d565b84612da5565b600091505b610c8d565b610c67610c5b6020850185614f8d565b33308660a00135612eb9565b610c8d610c776020850185614f8d565b610c876060860160408701614f8d565b83612da5565b600080610ca06060860160408701614f8d565b6001600160a01b031684610cb86101208801886151a1565b604051610cc692919061521e565b60006040518083038185875af1925050503d8060008114610d03576040519150601f19603f3d011682016040523d82523d6000602084013e610d08565b606091505b509150915081610d5c57610d43816040518060400160405280600f81526020016e2a3930b739b4ba21b937b9b9ab1a9d60891b815250612fe1565b60405162461bcd60e51b8152600401610529919061522e565b50610de39050610d6f6020850185614f8d565b610d7f6040860160208701614f8d565b610d8f6080870160608801614f8d565b60a0870135600060e0890135610da96101008b018b6151a1565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061325792505050565b5050600160025550565b610df5611d98565b60005b8251811015610727576000828281518110610e1557610e156150c5565b602002602001015110158015610e4657506103e8828281518110610e3b57610e3b6150c5565b602002602001015111155b610e875760405162461bcd60e51b8152602060048201526012602482015271066656520726174652069733a302d313030360741b6044820152606401610529565b828181518110610e9957610e996150c5565b602002602001015115610ecb57818181518110610eb857610eb86150c5565b6020026020010151600381905550610eec565b818181518110610edd57610edd6150c5565b60200260200101516004819055505b7f5fa95345cbe35dad70f67a9ca1430c22453a695590cb4fca05d58f637e85af4f838281518110610f1f57610f1f6150c5565b6020026020010151838381518110610f3957610f396150c5565b6020026020010151604051610f5a9291909115158252602082015260400190565b60405180910390a180610f6c8161510a565b915050610df8565b610f7c611d98565b848114610fba5760405162461bcd60e51b815260206004820152600c60248201526b696e76616c6964206461746160a01b6044820152606401610529565b828114610ff85760405162461bcd60e51b815260206004820152600c60248201526b696e76616c6964206461746160a01b6044820152606401610529565b8260005b81811015611115576040518060400160405280878784818110611021576110216150c5565b90506020020160208101906110369190614f8d565b6001600160a01b03168152602001858584818110611056576110566150c5565b905060200281019061106891906151a1565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250600a92508b90508a858181106110b5576110b56150c5565b6020908102929092013583525081810192909252604001600020825181546001600160a01b0319166001600160a01b039091161781559082015160018201906110fe9082615287565b50905050808061110d9061510a565b915050610ffc565b507f652c1af850dcc0b28fcb71cd9473023f56a89edd81bbe7b51056a04caa94002487878787878760405161114f969594939291906153fd565b60405180910390a150505050505050565b33806111746001546001600160a01b031690565b6001600160a01b0316146111da5760405162461bcd60e51b815260206004820152602760248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206e657720656044820152663c32b1baba37b960c91b6064820152608401610529565b6109b5816132bb565b6111eb611d98565b600180546001600160a01b0383166001600160a01b0319909116811790915561121c6000546001600160a01b031690565b6001600160a01b03167fdd01547fc40682edc3cd8d164d53f5a1ae6b46138a83f045658ed760823ddba860405160405180910390a350565b61125c611d98565b82156113585760005b8381101561131d5760086000868684818110611283576112836150c5565b90506020020160208101906112989190614f8d565b6001600160a01b03168152602081019190915260400160009081205460ff1615906008908787858181106112ce576112ce6150c5565b90506020020160208101906112e39190614f8d565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806113158161510a565b915050611265565b507fb05655746bd43b7fe3ccd9d28b7685b4c67ddc51e70890062b0f7f85dd692695848460405161134f9291906154b0565b60405180910390a15b801561086f576000816001600160401b03811115611378576113786148e1565b6040519080825280602002602001820160405280156113a1578160200160208202803683370190505b50905060005b828110156114d057600960008585848181106113c5576113c56150c5565b90506020020160208101906113da9190614f8d565b6001600160a01b03168152602081019190915260400160009081205460ff161590600990868685818110611410576114106150c5565b90506020020160208101906114259190614f8d565b6001600160a01b0316815260208101919091526040016000908120805460ff191692151592909217909155600990858584818110611465576114656150c5565b905060200201602081019061147a9190614f8d565b6001600160a01b03168152602081019190915260400160002054825160ff909116908390839081106114ae576114ae6150c5565b91151560209283029190910190910152806114c88161510a565b9150506113a7565b507f4a28b173d9bc739be3886d172e07fef80392184787fc6b92406ce0f0c05b7e63838383604051611504939291906154c4565b60405180910390a15050505050565b600061151e82612584565b92915050565b60006105a18383611fef565b60008060005a90506108878585611824565b600f60f884901c166000818152600a60209081526040808320815180830190925280546001600160a01b03168252600181018054929391929184019161158790615123565b80601f01602080910402602001604051908101604052809291908181526020018280546115b390615123565b80156116005780601f106115d557610100808354040283529160200191611600565b820191906000526020600020905b8154815290600101906020018083116115e357829003601f168201915b5050509190925250508151919250506001600160a01b03166116645760405162461bcd60e51b815260206004820152601960248201527f43616c6c6261636b2062616420706f6f6c20696e6465786564000000000000006044820152606401610529565b600081600001518583602001516040516020016116839392919061551f565b6040516020818303038152906040528051906020012060001c9050836001600160a01b0316816001600160a01b0316146116f35760405162461bcd60e51b815260206004820152601160248201527010d85b1b189858dac8189859081c1bdbdb607a1b6044820152606401610529565b505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916117579190615568565b6000604051808303816000865af19150503d8060008114611794576040519150601f19603f3d011682016040523d82523d6000602084013e611799565b606091505b50915091508180156117c35750805115806117c35750808060200190518101906117c39190615584565b61181d5760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657248656c7065723a205452414e534645525f544f4b454e5f46604482015264105253115160da1b6064820152608401610529565b5050505050565b600060028054036118475760405162461bcd60e51b81526004016105299061516a565b60028055611853612b9e565b4282101561188d5760405162461bcd60e51b8152602060048201526007602482015266115e1c1a5c995960ca1b6044820152606401610529565b6001600f604085013560f81c16146000808080806118ab8987613315565b9450945094509450945061190f836000815181106118cb576118cb6150c5565b60200260200101518a8060e001906118e391906155a1565b60008181106118f4576118f46150c5565b90506020020160208101906119099190614f8d565b866116fb565b8515611ac85784156119f65761196a60408a01358461193160e08d018d6155a1565b808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506137e6915050565b6119ef8261197e60408c0160208d01614f8d565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a08231906024015b602060405180830381865afa1580156119c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e991906150db565b90613af2565b9650611c45565b611a5060408a013584611a0c60e08d018d6155a1565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611a4b9250505060208e018e614f8d565b6137e6565b6119ef818460018651611a639190615157565b81518110611a7357611a736150c5565b60200260200101516001600160a01b03166370a082318c6000016020810190611a9c9190614f8d565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024016119a8565b600089604001356001600160a01b031663d06ca61f86866040518363ffffffff1660e01b8152600401611afc9291906155ea565b600060405180830381865afa158015611b19573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b419190810190615641565b90508515611baf57611b948185611b5b60e08e018e6155a1565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613b48915050565b611ba88361197e60408d0160208e01614f8d565b9750611c43565b611c198185611bc160e08e018e6155a1565b80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508d6000016020810190611c149190614f8d565b613b48565b8060018251611c289190615157565b81518110611c3857611c386150c5565b602002602001015197505b505b8860800135871015611c695760405162461bcd60e51b8152600401610529906156c6565b8415611c9e57611c88611c8260408b0160208c01614f8d565b88613d40565b611c9e611c9860208b018b614f8d565b88611e48565b5050505050600084806101200190611cb691906151a1565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929350611d8b9250611cff91505060c08701876155a1565b6000818110611d1057611d106150c5565b9050602002016020810190611d259190614f8d565b611d3260c08801886155a1565b6001611d4160c08b018b6155a1565b611d4c929150615157565b818110611d5b57611d5b6150c5565b9050602002016020810190611d709190614f8d565b611d7d6020890189614f8d565b886060013587600087613257565b5050600160025592915050565b33611dab6000546001600160a01b031690565b6001600160a01b031614611e0d5760405162461bcd60e51b815260206004820152602360248201527f4f776e61626c653a2063616c6c6572206973206e6f74207468652065786563756044820152623a37b960e91b6064820152608401610529565b565b60006001600160a01b038216158061151e57506001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1492915050565b604080516000808252602082019092526001600160a01b038416908390604051611e729190615568565b60006040518083038185875af1925050503d8060008114611eaf576040519150601f19603f3d011682016040523d82523d6000602084013e611eb4565b606091505b50509050806107275760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c4544006044820152606401610529565b6000806000856001600160a01b031663a9059cbb8686604051602401611f409291906001600160a01b03929092168252602082015260400190565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051611f799190615568565b6000604051808303816000865af19150503d8060008114611fb6576040519150601f19603f3d011682016040523d82523d6000602084013e611fbb565b606091505b5091509150818015611fe5575080511580611fe5575080806020019051810190611fe59190615584565b9695505050505050565b600060028054036120125760405162461bcd60e51b81526004016105299061516a565b6002805561201e612b9e565b600061202d60208401846151a1565b9050116120765760405162461bcd60e51b8152602060048201526017602482015276646174612073686f756c64206265206e6f74207a65726f60481b6044820152606401610529565b60008360800135116120ca5760405162461bcd60e51b815260206004820152601f60248201527f616d6f756e742073686f756c642062652067726561746572207468616e2030006044820152606401610529565b60006120dc6060850160408601614f8d565b6001600160a01b03160361213c5760405162461bcd60e51b815260206004820152602160248201527f72656365697665722073686f756c64206265206e6f74206164647265737328306044820152602960f81b6064820152608401610529565b60008360a00135116121a15760405162461bcd60e51b815260206004820152602860248201527f6d696e52657475726e416d6f756e742073686f756c6420626520677265617465604482015267072207468616e20360c41b6064820152608401610529565b600960006121b56080860160608701614f8d565b6001600160a01b0316815260208101919091526040016000205460ff1661221e5760405162461bcd60e51b815260206004820152601760248201527f696e76616c6964207772617070656420616464726573730000000000000000006044820152606401610529565b600061223d6001608086013560c0870135610b276101008901896151a1565b60055490915060009081906001600160a01b0316612261610b3e6020890189614f8d565b156122b557866080013534146122ad5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964206d73672e76616c756560781b6044820152606401610529565b8392506122e8565b6122d16122c56020890189614f8d565b33308a60800135612eb9565b6122e86122e16020890189614f8d565b82866116fb565b6122fb610b3e6040890160208a01614f8d565b15612321576123106060880160408901614f8d565b6001600160a01b03163191506123ba565b6123316040880160208901614f8d565b6001600160a01b03166370a0823161234f60608a0160408b01614f8d565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b791906150db565b91505b600080826001600160a01b031685633f3204d28a6040516024016123de91906156f3565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516124179190615568565b60006040518083038185875af1925050503d8060008114612454576040519150601f19603f3d011682016040523d82523d6000602084013e612459565b606091505b50915091508161249157610d43816040518060400160405280600c81526020016b2a3930b739b4ba29bbb0b81d60a11b815250612fe1565b506124a79050610b3e6040890160208a01614f8d565b156124d7576124d0826124c060608a0160408b01614f8d565b6001600160a01b03163190613af2565b945061250c565b612509826124eb60408a0160208b01614f8d565b6001600160a01b03166370a08231611a9c60608c0160408d01614f8d565b94505b8660a001358510156125305760405162461bcd60e51b8152600401610529906156c6565b6125756125406020890189614f8d565b61255060408a0160208b01614f8d565b61256060608b0160408c01614f8d565b60808b0135896000610da960e08f018f6151a1565b50505050600160025592915050565b600060028054036125a75760405162461bcd60e51b81526004016105299061516a565b600280556125b3612b9e565b60006125c36101008401846155a1565b9050116126005760405162461bcd60e51b815260206004820152600b60248201526a456d70747920706f6f6c7360a81b6044820152606401610529565b428260e00135101561263e5760405162461bcd60e51b8152602060048201526007602482015266115e1c1a5c995960ca1b6044820152606401610529565b600960006126526080850160608601614f8d565b6001600160a01b0316815260208101919091526040016000205460ff1661268b5760405162461bcd60e51b8152600401610529906151e7565b600061269a6020840184614f8d565b905060006126ae6040850160208601614f8d565b905060006126cf6001608087013560c0880135610b276101208a018a6151a1565b90506000806126e4610b3e6020890189614f8d565b15612760576126f96080880160608901614f8d565b9450866080013534146127425760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964206d73672e76616c756560781b6044820152606401610529565b61275b6127556080890160608a01614f8d565b84612ca7565b612770565b6127706122c56020890189614f8d565b612783610b3e6040890160208a01614f8d565b1561281f576127986080880160608901614f8d565b93506127aa6080880160608901614f8d565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156127f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281491906150db565b9150600190506128b8565b61282f6040880160208901614f8d565b6001600160a01b03166370a0823161284d60608a0160408b01614f8d565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612891573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b591906150db565b91505b60006128c86101008901896155a1565b91503090506060600183111561297f57876000805b858110156129745760006128f56101008f018f6155a1565b83818110612905576129056150c5565b905060200201359050612919848483613e58565b95509350612928600188615157565b82148015612934575087155b15612952578d604001602081019061294c9190614f8d565b95508a92505b61295e8682878d614144565b995050808061296c9061510a565b9150506128dd565b50879a5050506129ff565b6129af88886129926101008e018e6155a1565b60008181106129a3576129a36150c5565b90506020020135613e58565b91508490506129cb576129c860608b0160408c01614f8d565b91505b6129fc826129dd6101008d018d6155a1565b60008181106129ee576129ee6150c5565b905060200201358389614144565b98505b5050508015612a7957612a1c8261197e60808a0160608b01614f8d565b95508660a00135861015612a425760405162461bcd60e51b8152600401610529906156c6565b612a5b612a556080890160608a01614f8d565b87613d40565b612a74612a6e6060890160408a01614f8d565b87611e48565b612ab3565b612a8d826124eb60408a0160208b01614f8d565b95508660a00135861015612ab35760405162461bcd60e51b8152600401610529906156c6565b612af9612ac36020890189614f8d565b612ad360408a0160208b01614f8d565b612ae360608b0160408c01614f8d565b60808b01358a6000610da96101408f018f6151a1565b50505050506001600255919050565b612b10612b9e565b6001805460ff60a81b1916600160a81b1790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020015b60405180910390a1565b612b616142fc565b6001805460ff60a81b191690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90602001612b4f565b600154600160a81b900460ff1615611e0d5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610529565b6000808615612c1c57612c15612710612c0f6003548961434c90919063ffffffff16565b906143b3565b9050612c3a565b612c37612710612c0f6004548961434c90919063ffffffff16565b90505b80851015612c9257612c4e86868686614402565b612c925760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207369676e61747572652066656560581b6044820152606401610529565b612c9c8686613af2565b979650505050505050565b60408051600481526024810182526020810180516001600160e01b0316630d0e30db60e41b179052905160009182916001600160a01b038616918591612ced9190615568565b60006040518083038185875af1925050503d8060008114612d2a576040519150601f19603f3d011682016040523d82523d6000602084013e612d2f565b606091505b5091509150818015612d59575080511580612d59575080806020019051810190612d599190615584565b61086f5760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a204445504f5349545f4641494c454400006044820152606401610529565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b1790529151600092839290871691612e019190615568565b6000604051808303816000865af19150503d8060008114612e3e576040519150601f19603f3d011682016040523d82523d6000602084013e612e43565b606091505b5091509150818015612e6d575080511580612e6d575080806020019051810190612e6d9190615584565b61181d5760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a20415050524f56455f4641494c454400006044820152606401610529565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691612f1d9190615568565b6000604051808303816000865af19150503d8060008114612f5a576040519150601f19603f3d011682016040523d82523d6000602084013e612f5f565b606091505b5091509150818015612f89575080511580612f89575080806020019051810190612f899190615584565b6116f35760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f46416044820152631253115160e21b6064820152608401610529565b6060604483511015801561301a575082600081518110613003576130036150c5565b6020910101516001600160f81b031916600160fb1b145b801561304b575082600181518110613034576130346150c5565b6020910101516001600160f81b03191660c360f81b145b801561307c575082600281518110613065576130656150c5565b6020910101516001600160f81b031916607960f81b145b80156130ad575082600381518110613096576130966150c5565b6020910101516001600160f81b031916600560fd1b145b15613137576044838101805190916130c5919061573f565b8451101561310d5760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103932bb32b93a103932b0b9b7b760591b6044820152606401610529565b8281604051602001613120929190615752565b60405160208183030381529060405291505061151e565b8251602414801561316d575082600081518110613156576131566150c5565b6020910101516001600160f81b031916602760f91b145b801561319e575082600181518110613187576131876150c5565b6020910101516001600160f81b031916600960fb1b145b80156131cf5750826002815181106131b8576131b86150c5565b6020910101516001600160f81b031916607b60f81b145b80156132005750826003815181106131e9576131e96150c5565b6020910101516001600160f81b031916607160f81b145b156132255760248301518261321482614576565b6040516020016131209291906157a1565b8161322f8461459e565b6040516020016132409291906157d6565b604051602081830303815290604052905092915050565b846001600160a01b0316866001600160a01b0316886001600160a01b03167f2251435bd151cd72851a82be055bf6d1c3d7f34d08d56493dddf874229b8e897878787876040516132aa9493929190615827565b60405180910390a450505050505050565b600180546001600160a01b0319908116909155600080546001600160a01b03848116938216841783556040519116929183917f88436636ea40d5bb1bcc55ff9cd54788af71da886f4147a87f199adcca733d4d9190a35050565b6000806060818061332960e08801886155a1565b6133359150600161573f565b61334260c08901896155a1565b9050146133805760405162461bcd60e51b815260206004820152600c60248201526b092dcecc2d8d2c840e0c2e8d60a31b6044820152606401610529565b6009600061339460408a0160208b01614f8d565b6001600160a01b0316815260208101919091526040016000205460ff166133cd5760405162461bcd60e51b8152600401610529906151e7565b6133ea6001606089013560a08a0135610b276101008c018c6151a1565b935060006133fb60c08901896155a1565b80806020026020016040519081016040528093929190818152602001838360200280828437600092018290525093945084925060019150613441905060c08c018c6155a1565b61344c929150615157565b8151811061345c5761345c6150c5565b6020026020010151905061349f898060c0019061347991906155a1565b600081811061348a5761348a6150c5565b9050602002016020810190610b3e9190614f8d565b1561354457886060013534146134eb5760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964206d73672e76616c756560781b6044820152606401610529565b6134fb60408a0160208b01614f8d565b8260008151811061350e5761350e6150c5565b6001600160a01b0390921660209283029190910182015261353f906135399060408c01908c01614f8d565b87612ca7565b613671565b871561365b578160008151811061355d5761355d6150c5565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156135ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d191906150db565b95506135fd826000815181106135e9576135e96150c5565b602002602001015133308c60600135612eb9565b6136548960a001356119e9888560008151811061361c5761361c6150c5565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a08231906024016119a8565b9550613671565b613671826000815181106135e9576135e96150c5565b61367a81611e0f565b1561374a5761368f60408a0160208b01614f8d565b826001845161369e9190615157565b815181106136ae576136ae6150c5565b6001600160a01b03909216602092830291909101820152600197506136d99060408b01908b01614f8d565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561371f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061374391906150db565b93506137d7565b87156137d7576001600160a01b0381166370a0823161376c60208c018c614f8d565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156137b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137d491906150db565b92505b81945050509295509295909350565b60005b600184516137f79190615157565b81101561181d57600080858381518110613813576138136150c5565b602002602001015186846001613829919061573f565b81518110613839576138396150c5565b6020026020010151915091506000816001600160a01b0316836001600160a01b03161061386757818361386a565b82825b5090506000868581518110613881576138816150c5565b60200260200101519050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156138cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138f39190615863565b506001600160701b031691506001600160701b03169150600080876001600160a01b03168a6001600160a01b03161461392d578284613930565b83835b6040516370a0823160e01b81526001600160a01b038a8116600483015292945090925061396b918491908d16906370a08231906024016119a8565b95508e6001600160a01b031663054d50d48784846040518463ffffffff1660e01b81526004016139ae939291909283526020830191909152604082015260600190565b602060405180830381865afa1580156139cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139ef91906150db565b945050505050600080856001600160a01b0316886001600160a01b031614613a1957826000613a1d565b6000835b91509150600060028d51613a319190615157565b8a10613a3d578a613a62565b8b613a498b600161573f565b81518110613a5957613a596150c5565b60200260200101515b6040805160008152602081019182905263022c0d9f60e01b9091529091506001600160a01b0387169063022c0d9f90613aa490869086908690602481016158b3565b600060405180830381600087803b158015613abe57600080fd5b505af1158015613ad2573d6000803e3d6000fd5b505050505050505050505050508080613aea9061510a565b9150506137e9565b600082613aff8382615157565b915081111561151e5760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b6044820152606401610529565b60005b60018451613b599190615157565b81101561181d57600080858381518110613b7557613b756150c5565b602002602001015186846001613b8b919061573f565b81518110613b9b57613b9b6150c5565b6020026020010151915091506000816001600160a01b0316836001600160a01b031610613bc9578183613bcc565b82825b509050600088613bdd86600161573f565b81518110613bed57613bed6150c5565b60200260200101519050600080836001600160a01b0316866001600160a01b031614613c1b57826000613c1f565b6000835b91509150600060028b51613c339190615157565b8810613c3f5788613c64565b89613c4b89600161573f565b81518110613c5b57613c5b6150c5565b60200260200101515b9050898881518110613c7857613c786150c5565b60200260200101516001600160a01b031663022c0d9f84848460006001600160401b03811115613caa57613caa6148e1565b6040519080825280601f01601f191660200182016040528015613cd4576020820181803683370190505b506040518563ffffffff1660e01b8152600401613cf494939291906158b3565b600060405180830381600087803b158015613d0e57600080fd5b505af1158015613d22573d6000803e3d6000fd5b50505050505050505050508080613d389061510a565b915050613b4b565b600080836001600160a01b03166000632e1a7d4d85604051602401613d6791815260200190565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051613da09190615568565b60006040518083038185875af1925050503d8060008114613ddd576040519150601f19603f3d011682016040523d82523d6000602084013e613de2565b606091505b5091509150818015613e0c575080511580613e0c575080806020019051810190613e0c9190615584565b61086f5760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a2057495448445241575f4641494c4544006044820152606401610529565b6000606060008390506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ea1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ec591906158e0565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f2b91906158e0565b90506000836001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f9191906158fd565b604080516001600160a01b03808716602083015285169181019190915262ffffff8216606082015290915060009060800160408051601f1981840301815291905280516020909101209050600160ff1b881615801561409257846001600160a01b03168b6001600160a01b03161461401b5760405162461bcd60e51b815260040161052990615922565b6001600160a01b038a161561405b57836001600160a01b03168a6001600160a01b03161461405b5760405162461bcd60e51b815260040161052990615922565b604080516001600160a01b038716602082015290810183905293975087936060016040516020818303038152906040529650614136565b836001600160a01b03168b6001600160a01b0316146140c35760405162461bcd60e51b815260040161052990615922565b6001600160a01b038a161561410357846001600160a01b03168a6001600160a01b0316146141035760405162461bcd60e51b815260040161052990615922565b604080516001600160a01b0386166020820152908101839052949750879460600160405160208183030381529060405296505b505050505050935093915050565b6000600160ff1b8416158015614221576000856001600160a01b031663128acb08888461417088614785565b6141806401000276a36001615944565b8b8b60405160200161419392919061596b565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016141c2959493929190615984565b60408051808303816000875af11580156141e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061420491906159bf565b91505061421981614214906159e3565b6147f3565b9250506142f3565b6000856001600160a01b031663128acb08888461423d88614785565b61425c600173fffd8963efd1fc6a506488495d951d5263988d266159ff565b8b8b60405160200161426f92919061596b565b6040516020818303038152906040526040518663ffffffff1660e01b815260040161429e959493929190615984565b60408051808303816000875af11580156142bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142e091906159bf565b5090506142ef614214826159e3565b9250505b50949350505050565b600154600160a81b900460ff16611e0d5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610529565b6000811580614370575082826143628183615a1f565b925061436e9083615a36565b145b61151e5760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b6044820152606401610529565b6000816000036143f85760405162461bcd60e51b815260206004820152601060248201526f64732d6d6174682d6469762d7a65726f60801b6044820152606401610529565b6105a18284615a36565b600754604080517f048f880a603b1aab0e626a287e33d603417b3d53a36f7527b7c86365bf7def4f602082015233918101919091526060810186905260808101859052600091829160a0016040516020818303038152906040528051906020012060405160200161448a92919061190160f01b81526002810192909252602282015260420190565b60405160208183030381529060405280519060200120905060008060006144e687878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061484592505050565b92509250925060006001858585856040516000815260200160405260405161452a949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa15801561454c573d6000803e3d6000fd5b5050604051601f1901516006546001600160a01b039081169116149b9a5050505050505050505050565b606061151e8260405160200161458e91815260200190565b6040516020818303038152906040525b80516060906f181899199a1a9b1b9c1cb0b131b232b360811b906000906145c6906002615a1f565b6145d190600261573f565b6001600160401b038111156145e8576145e86148e1565b6040519080825280601f01601f191660200182016040528015614612576020820181803683370190505b509050600360fc1b8160008151811061462d5761462d6150c5565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061465c5761465c6150c5565b60200101906001600160f81b031916908160001a90535060005b845181101561477d57826004868381518110614694576146946150c5565b01602001516001600160f81b031916901c60f81c601081106146b8576146b86150c5565b1a60f81b826146c8836002615a1f565b6146d390600261573f565b815181106146e3576146e36150c5565b60200101906001600160f81b031916908160001a9053508285828151811061470d5761470d6150c5565b60209101015160f81c600f1660108110614729576147296150c5565b1a60f81b82614739836002615a1f565b61474490600361573f565b81518110614754576147546150c5565b60200101906001600160f81b031916908160001a905350806147758161510a565b915050614676565b509392505050565b60006001600160ff1b038211156147ef5760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b6064820152608401610529565b5090565b6000808212156147ef5760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f7369746976656044820152606401610529565b6000806000835160411461489b5760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964207369676e6174757265206c656e67746800000000000000006044820152606401610529565b5050506020810151604082015160609092015160001a92909190565b600080858511156148c757600080fd5b838611156148d457600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561491f5761491f6148e1565b604052919050565b60006001600160401b03821115614940576149406148e1565b50601f01601f191660200190565b60008060006060848603121561496357600080fd5b833592506020840135915060408401356001600160401b0381111561498757600080fd5b8401601f8101861361499857600080fd5b80356149ab6149a682614927565b6148f7565b8181528760208385010111156149c057600080fd5b816020840160208301376000602083830101528093505050509250925092565b600080604083850312156149f357600080fd5b82356001600160401b03811115614a0957600080fd5b83016101408186031215614a1c57600080fd5b946020939093013593505050565b60006001600160401b03821115614a4357614a436148e1565b5060051b60200190565b6001600160a01b03811681146109b557600080fd5b8035614a6d81614a4d565b919050565b60008060408385031215614a8557600080fd5b82356001600160401b03811115614a9b57600080fd5b8301601f81018513614aac57600080fd5b80356020614abc6149a683614a2a565b82815260059290921b83018101918181019088841115614adb57600080fd5b938201935b83851015614b02578435614af381614a4d565b82529382019390820190614ae0565b9550614b119050868201614a62565b93505050509250929050565b600080600060608486031215614b3257600080fd5b8335614b3d81614a4d565b92506020840135614b4d81614a4d565b929592945050506040919091013590565b60005b83811015614b79578181015183820152602001614b61565b50506000910152565b60008151808452614b9a816020860160208601614b5e565b601f01601f19169290920160200192915050565b831515815282151560208201526060604082015260018060a01b0382511660608201526000602083015160406080840152611fe560a0840182614b82565b60008060008060608587031215614c0257600080fd5b843593506020850135925060408501356001600160401b0380821115614c2757600080fd5b818701915087601f830112614c3b57600080fd5b813581811115614c4a57600080fd5b886020828501011115614c5c57600080fd5b95989497505060200194505050565b60008060408385031215614c7e57600080fd5b82356001600160401b0380821115614c9557600080fd5b908401906101208287031215614caa57600080fd5b90925060208401359080821115614cc057600080fd5b50830160408186031215614cd357600080fd5b809150509250929050565b60006101608284031215614cf157600080fd5b50919050565b600060208284031215614d0957600080fd5b81356001600160401b03811115614d1f57600080fd5b614d2b84828501614cde565b949350505050565b60008060408385031215614d4657600080fd5b8235614d5181614a4d565b91506020830135614cd381614a4d565b80151581146109b557600080fd5b600060208284031215614d8157600080fd5b81356105a181614d61565b600082601f830112614d9d57600080fd5b81356020614dad6149a683614a2a565b82815260059290921b84018101918181019086841115614dcc57600080fd5b8286015b84811015614de75780358352918301918301614dd0565b509695505050505050565b60008060408385031215614e0557600080fd5b82356001600160401b0380821115614e1c57600080fd5b818501915085601f830112614e3057600080fd5b81356020614e406149a683614a2a565b82815260059290921b84018101918181019089841115614e5f57600080fd5b948201945b83861015614e86578535614e7781614d61565b82529482019490820190614e64565b96505086013592505080821115614e9c57600080fd5b5061089485828601614d8c565b60008083601f840112614ebb57600080fd5b5081356001600160401b03811115614ed257600080fd5b6020830191508360208260051b8501011115614eed57600080fd5b9250929050565b60008060008060008060608789031215614f0d57600080fd5b86356001600160401b0380821115614f2457600080fd5b614f308a838b01614ea9565b90985096506020890135915080821115614f4957600080fd5b614f558a838b01614ea9565b90965094506040890135915080821115614f6e57600080fd5b50614f7b89828a01614ea9565b979a9699509497509295939492505050565b600060208284031215614f9f57600080fd5b81356105a181614a4d565b60008060008060408587031215614fc057600080fd5b84356001600160401b0380821115614fd757600080fd5b614fe388838901614ea9565b90965094506020870135915080821115614ffc57600080fd5b5061500987828801614ea9565b95989497509550505050565b6000806040838503121561502857600080fd5b8251915060208301516001600160401b0381111561504557600080fd5b8301601f8101851361505657600080fd5b80516150646149a682614927565b81815286602083850101111561507957600080fd5b61508a826020830160208601614b5e565b8093505050509250929050565b600080604083850312156150aa57600080fd5b82516150b581614a4d565b6020939093015192949293505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156150ed57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60006001820161511c5761511c6150f4565b5060010190565b600181811c9082168061513757607f821691505b602082108103614cf157634e487b7160e01b600052602260045260246000fd5b8181038181111561151e5761151e6150f4565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6000808335601e198436030181126151b857600080fd5b8301803591506001600160401b038211156151d257600080fd5b602001915036819003821315614eed57600080fd5b60208082526017908201527f496e76616c696420777261707065642061646472657373000000000000000000604082015260600190565b8183823760009101908152919050565b6020815260006105a16020830184614b82565b601f82111561072757600081815260208120601f850160051c810160208610156152685750805b601f850160051c820191505b818110156116f357828155600101615274565b81516001600160401b038111156152a0576152a06148e1565b6152b4816152ae8454615123565b84615241565b602080601f8311600181146152e957600084156152d15750858301515b600019600386901b1c1916600185901b1785556116f3565b600085815260208120601f198616915b82811015615318578886015182559484019460019091019084016152f9565b50858210156153365787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8183526000602080850194508260005b8581101561538457813561536981614a4d565b6001600160a01b031687529582019590820190600101615356565b509495945050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e198436030181126153cf57600080fd5b83016020810192503590506001600160401b038111156153ee57600080fd5b803603821315614eed57600080fd5b6060808252810186905260006001600160fb1b0387111561541d57600080fd5b8660051b80896080850137808301905060206080848303018185015261544760808301888a615346565b84810360408601528581529150808201600586901b830182018760005b8881101561549e57858303601f1901845261547f828b6153b8565b61548a85828461538f565b958701959450505090840190600101615464565b50909c9b505050505050505050505050565b602081526000614d2b602083018486615346565b6040815260006154d8604083018587615346565b82810360208481019190915284518083528582019282019060005b818110156155115784511515835293830193918301916001016154f3565b509098975050505050505050565b60ff60f81b81526bffffffffffffffffffffffff198460601b16600182015282601582015260008251615559816035850160208701614b5e565b91909101603501949350505050565b6000825161557a818460208701614b5e565b9190910192915050565b60006020828403121561559657600080fd5b81516105a181614d61565b6000808335601e198436030181126155b857600080fd5b8301803591506001600160401b038211156155d257600080fd5b6020019150600581901b3603821315614eed57600080fd5b6000604082018483526020604081850152818551808452606086019150828701935060005b818110156156345784516001600160a01b03168352938301939183019160010161560f565b5090979650505050505050565b6000602080838503121561565457600080fd5b82516001600160401b0381111561566a57600080fd5b8301601f8101851361567b57600080fd5b80516156896149a682614a2a565b81815260059190911b820183019083810190878311156156a857600080fd5b928401925b82841015612c9c578351825292840192908401906156ad565b602080825260139082015272151bdbc81b1a5d1d1b19481c9958d95a5d9959606a1b604082015260600190565b602081526000823561570481614a4d565b6001600160a01b0316602083810191909152615722908401846153b8565b60408085015261573660608501828461538f565b95945050505050565b8082018082111561151e5761151e6150f4565b60008351615764818460208801614b5e565b6508ae4e4dee4560d31b9083019081528351615787816006840160208801614b5e565b602960f81b60069290910191820152600701949350505050565b600083516157b3818460208801614b5e565b650a0c2dcd2c6560d31b9083019081528351615787816006840160208801614b5e565b600083516157e8818460208801614b5e565b670aadcd6dcdeeedc560c31b908301908152835161580d816008840160208801614b5e565b602960f81b60089290910191820152600901949350505050565b848152836020820152826040820152608060608201526000611fe56080830184614b82565b80516001600160701b0381168114614a6d57600080fd5b60008060006060848603121561587857600080fd5b6158818461584c565b925061588f6020850161584c565b9150604084015163ffffffff811681146158a857600080fd5b809150509250925092565b84815283602082015260018060a01b0383166040820152608060608201526000611fe56080830184614b82565b6000602082840312156158f257600080fd5b81516105a181614a4d565b60006020828403121561590f57600080fd5b815162ffffff811681146105a157600080fd5b602080825260089082015267109859081c1bdbdb60c21b604082015260600190565b6001600160a01b03818116838216019080821115615964576159646150f4565b5092915050565b828152604060208201526000614d2b6040830184614b82565b6001600160a01b0386811682528515156020830152604082018590528316606082015260a060808201819052600090612c9c90830184614b82565b600080604083850312156159d257600080fd5b505080516020909101519092909150565b6000600160ff1b82016159f8576159f86150f4565b5060000390565b6001600160a01b03828116828216039080821115615964576159646150f4565b808202811582820484141761151e5761151e6150f4565b600082615a5357634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220397b9a7e7c4527e2b680d32648a65e1c3283e7250c6c15690d931ae20fb8620964736f6c63430008120033

Block Transaction Gas Used Reward
view all blocks produced
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
View All Validatorset

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

Transit Swap integrates the most popular DEXs of public chains, selects and combines their advantages intelligently to provide better depth for your transactions and return more target tokens.

Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Chain Token Portfolio % Price Amount Value
ETH97.93%$0.994398,185,351,653.6841$97,625,695,149.26
ETH<0.01%$0.997956169,046.7754$168,701.24
ETH<0.01%$3,407.2214.1588$48,242.06
ETH<0.01%$0.028113204,918.8809$5,760.94
ETH<0.01%$0.014392225,435.972$3,244.55
ETH<0.01%$0.005047539,020.0913$2,720.35
ETH<0.01%$0.9997261,825.2536$1,824.75
ETH<0.01%$1.62636.6425$1,031.36
ETH<0.01%$0.0001675,644,577.134$940.73
ETH<0.01%<$0.00000167,746,861,412.9716$879.02
ETH<0.01%$0.909013820.6695$746
ETH<0.01%<$0.00000132,272,741,428.3639$711.55
ETH<0.01%$0.1216245,572.2309$677.72
ETH<0.01%$0.0827386,750.9984$558.56
ETH<0.01%<$0.00000118,686,804,838.0528$515.42
ETH<0.01%$0.0065877,750.6487$511.61
ETH<0.01%$0.2808321,472.8291$413.62
ETH<0.01%$3,510.860.1158$406.71
ETH<0.01%$0.00001820,578,890.4309$379.68
ETH<0.01%$92,9510.00373146$346.84
ETH<0.01%$0.2723651,204.8241$328.15
ETH<0.01%$3,510.120.0885$310.63
ETH<0.01%$0.585599480.4407$281.35
ETH<0.01%$13.3617.7362$236.96
ETH<0.01%$1.07219.2317$235.28
ETH<0.01%$0.000002105,253,004.3113$224.73
ETH<0.01%$3,406.850.065$221.58
ETH<0.01%<$0.0000011,312,295,249.8388$220.02
ETH<0.01%$0.52277417.0388$218.02
ETH<0.01%$0.948424228.8886$217.08
ETH<0.01%$9.123.3238$212.25
ETH<0.01%$0.0001641,232,780.85$201.57
ETH<0.01%$0.01103717,985.7109$198.51
ETH<0.01%$0.000257765,638.2667$196.49
ETH<0.01%$0.00940320,662.6159$194.29
ETH<0.01%<$0.000001425,060,678.7577$192.17
ETH<0.01%$3,766.80.0504$189.89
ETH<0.01%$0.00001710,822,289.8693$188.03
ETH<0.01%$6.0530.935$187.16
ETH<0.01%$0.80395231.5468$186.15
ETH<0.01%<$0.0000012,015,159,998.7976$178.11
ETH<0.01%$3,566.90.0492$175.36
ETH<0.01%$0.0000473,717,660.6106$174.71
ETH<0.01%$3,407.220.0493$167.83
ETH<0.01%$21.167.8059$165.17
ETH<0.01%<$0.0000018,602,623,306.8832$161.8
ETH<0.01%$0.0608532,519.8499$153.34
ETH<0.01%$0.0902871,551.9895$140.12
ETH<0.01%$0.0491372,825.1194$138.82
ETH<0.01%$335.990.3904$131.16
ETH<0.01%$0.000977133,523.8095$130.44
ETH<0.01%$33.813.812$128.88
ETH<0.01%$0.000001184,981,858.1987$126.61
ETH<0.01%$0.0328663,835.6838$126.07
ETH<0.01%$0.0221955,583.9423$123.94
ETH<0.01%$0.0000235,222,236.1523$120.89
ETH<0.01%$324.490.3724$120.85
ETH<0.01%<$0.000001899,213,708.7859$119.66
ETH<0.01%$0.132613888.3181$117.8
ETH<0.01%<$0.00000125,868,164,963.1409$113.51
ETH<0.01%$0.0000333,398,611.6379$113.23
ETH<0.01%$193.040.5799$111.94
ETH<0.01%$0.173259643.9672$111.57
ETH<0.01%$2.3646.9271$110.59
ETH<0.01%$5.5719.8108$110.35
ETH<0.01%$0.00254543,177.5994$109.87
ETH<0.01%$0.177225609.0581$107.94
ETH<0.01%$1.476.919$107.69
ETH<0.01%<$0.0000015,307,778,389.3332$106.36
ETH<0.01%$1.1890.0972$106.31
ETH<0.01%$0.0260554,057.2056$105.71
ETH<0.01%$0.0666771,544.3289$102.97
ETH<0.01%<$0.000001208,080,265,998.053$102.52
ETH<0.01%$1.1885.5596$100.96
ETH<0.01%$0.00419723,593.6318$99.03
ETH<0.01%$0.0434382,239.0841$97.26
ETH<0.01%$0.440683218.1436$96.13
ETH<0.01%$1.2576.5739$95.72
ETH<0.01%$0.00000517,248,664.4651$93.14
ETH<0.01%$0.759433121.7428$92.46
ETH<0.01%$0.404853226.7159$91.79
ETH<0.01%$3,522.690.026$91.7
ETH<0.01%$0.00000614,094,755.911$91.33
ETH<0.01%$0.634928143.096$90.86
ETH<0.01%<$0.00000128,707,394,988.0953$90.11
ETH<0.01%$0.00000240,998,830.1297$88.81
ETH<0.01%$0.000643137,524.0434$88.48
ETH<0.01%$0.0627391,400.4923$87.87
ETH<0.01%$0.0000651,344,327.3848$87.84
ETH<0.01%<$0.0000017,573,023,987.566$87.38
ETH<0.01%$0.00000199,959,793.5658$87.17
ETH<0.01%$0.0845611,021.6478$86.39
ETH<0.01%$0.0268763,210.1282$86.27
ETH<0.01%$0.000543158,529.3422$86.05
ETH<0.01%$0.00572814,989.643$85.86
ETH<0.01%$0.0330412,582.0992$85.31
ETH<0.01%$0.99910385.352$85.28
ETH<0.01%$0.00146557,500.858$84.25
ETH<0.01%$0.00223537,312.5427$83.38
ETH<0.01%$0.0083389,943.2758$82.91
ETH<0.01%$0.00000518,085,211.8501$82.83
ETH<0.01%<$0.000001264,114,427.8556$82.28
ETH<0.01%$0.012926,239.4473$80.61
ETH<0.01%$0.471176169.3432$79.79
ETH<0.01%$2.6629.7966$79.26
ETH<0.01%$3,674.960.0214$78.5
ETH<0.01%<$0.000001201,152,624,797.1755$78.21
ETH<0.01%<$0.000001523,458,166.0101$77.94
ETH<0.01%<$0.00000113,075,583,672.4578$77.45
ETH<0.01%$3.5721.6393$77.25
ETH<0.01%$3,537.180.0217$76.82
ETH<0.01%$275.560.2779$76.57
ETH<0.01%$1.6745.8132$76.51
ETH<0.01%$0.93703481.3167$76.2
ETH<0.01%$0.0008589,286.3554$75.92
ETH<0.01%$0.00015500,997.5306$75.26
ETH<0.01%<$0.000001109,337,446,453.2593$75.03
ETH<0.01%<$0.0000011,219,169,628.439$72.73
ETH<0.01%<$0.000001541,972,471.8451$72.32
ETH<0.01%$0.00151947,406.2321$72
ETH<0.01%$5.4813.0272$71.37
ETH<0.01%$0.072069987.7949$71.19
ETH<0.01%$0.000238295,095.2322$70.09
ETH<0.01%$0.0000242,895,565.0319$69
ETH<0.01%<$0.00000119,117,623,280.541$68.94
ETH<0.01%$1.352.4934$68.24
ETH<0.01%$0.000285238,416.2091$68.06
ETH<0.01%$15.614.3481$67.87
ETH<0.01%$0.0000088,595,383.4504$67.56
ETH<0.01%$0.00000512,707,112.4722$67.47
ETH<0.01%<$0.000001909,460,487.2267$67.28
ETH<0.01%<$0.000001283,738,332.0624$66.87
ETH<0.01%$0.260686255.2172$66.53
ETH<0.01%<$0.0000013,721,849,424.5829$65.74
ETH<0.01%$1.1159.0968$65.6
ETH<0.01%$6.879.4562$64.96
ETH<0.01%$0.141233459.2138$64.86
ETH<0.01%$0.0445511,446.4895$64.44
ETH<0.01%<$0.000001249,341,014,178.214$64.42
ETH<0.01%<$0.000001644,820,034.936$63.57
ETH<0.01%<$0.0000016,657,829,323.5367$63.54
ETH<0.01%$3,485.640.018$62.73
ETH<0.01%$0.62974598.9815$62.33
ETH<0.01%$0.0000134,953,905.4098$62.08
ETH<0.01%$3,522.840.0176$61.89
ETH<0.01%$0.000001113,261,241.8107$61.13
ETH<0.01%$0.000448136,290.5938$61.01
ETH<0.01%<$0.000001102,744,206,581.3877$60.98
ETH<0.01%$1.8632.7494$60.95
ETH<0.01%$0.144329421.8804$60.89
ETH<0.01%$0.129984467.8247$60.81
ETH<0.01%<$0.000001291,298,261,595.7436$60.79
ETH<0.01%<$0.000001637,684,982.481$60.54
ETH<0.01%$0.00000143,141,081.6934$60.42
ETH<0.01%$0.00126447,454.2867$60
ETH<0.01%$263,069.390.00022794$59.96
ETH<0.01%<$0.000001695,017,578,254.036$59.81
ETH<0.01%$0.550261107.7287$59.28
ETH<0.01%$0.00495211,956.2482$59.21
ETH<0.01%$6.59.0457$58.81
ETH<0.01%$0.000312187,906.239$58.68
ETH<0.01%$0.0069238,437.5964$58.42
ETH<0.01%<$0.00000179,162,292,754.6944$58.34
ETH<0.01%<$0.00000114,375,868,163.7819$56.86
ETH<0.01%$0.0000222,628,638.7211$56.62
ETH<0.01%$0.89513662.8787$56.29
ETH<0.01%<$0.00000113,243,759,329.1059$55.39
ETH<0.01%<$0.000001173,858,321.7452$55.15
ETH<0.01%$0.00000226,580,965.0824$55.02
ETH<0.01%$0.00000224,703,070.9938$54.87
ETH<0.01%$0.118645462.2934$54.85
ETH<0.01%$0.0000077,265,538.039$54.13
ETH<0.01%$3.1916.9158$53.96
ETH<0.01%<$0.00000115,039,153,382.3535$53.75
ETH<0.01%$0.261227205.6581$53.72
ETH<0.01%$0.000489109,820.6903$53.7
ETH<0.01%$0.0218352,432.0702$53.1
ETH<0.01%$0.059843886.5036$53.05
ETH<0.01%$0.00000227,434,296.4145$52.67
ETH<0.01%$0.00000320,818,533.0045$52.57
ETH<0.01%<$0.00000137,534,758,049.5921$52.44
ETH<0.01%$0.00000154,205,658.1093$52.38
ETH<0.01%$5,836.540.00894578$52.21
ETH<0.01%$0.00113146,046.3823$52.06
ETH<0.01%<$0.0000012,328,747,330.8688$51.81
ETH<0.01%<$0.0000015,538,576,586.7589$51.6
ETH<0.01%<$0.00000112,345,343,876.6353$51.04
ETH<0.01%$3.5514.3696$51.01
ETH<0.01%$0.0362931,402.515$50.9
ETH<0.01%$0.00000171,821,144.7049$50.62
ETH<0.01%<$0.000001182,986,542,975.4122$50.58
ETH<0.01%<$0.00000115,939,640,323,927.203$50.37
ETH<0.01%$696.10.0724$50.37
ETH<0.01%$0.0000068,156,429.6594$50
ETH<0.01%$0.497845100.3456$49.96
ETH<0.01%$1.2340.5191$49.84
ETH<0.01%$4.0512.2686$49.69
ETH<0.01%$0.75603165.4655$49.49
ETH<0.01%$0.0062867,868.7649$49.46
ETH<0.01%$0.056026881.7893$49.4
ETH<0.01%$1,644.860.03$49.35
ETH<0.01%$0.256453191.5195$49.12
ETH<0.01%$2.3221.1312$49.02
ETH<0.01%$2,633.690.0186$48.9
ETH<0.01%$0.00450210,816.5913$48.7
ETH<0.01%$0.0000124,140,490.3745$48.63
ETH<0.01%<$0.000001279,213,815.1904$48.58
ETH<0.01%$0.052697921.3408$48.55
ETH<0.01%$0.0000451,066,847.4099$48.27
ETH<0.01%<$0.00000122,124,749,354,124.668$48.07
ETH<0.01%$0.48572698.5527$47.87
ETH<0.01%$0.0059068,065.814$47.64
ETH<0.01%<$0.00000116,516,956,681.0838$47.62
ETH<0.01%$59.530.7997$47.61
ETH<0.01%$0.0070536,747.1741$47.59
ETH<0.01%$1.3834.4482$47.54
ETH<0.01%$0.0246381,928.3497$47.51
ETH<0.01%$0.158467299.7814$47.51
ETH<0.01%$0.181599261.213$47.44
ETH<0.01%$0.00000313,774,895.2855$46.92
ETH<0.01%$1.0743.8483$46.87
ETH<0.01%$27.411.7$46.6
ETH<0.01%$0.260619178.5107$46.52
ETH<0.01%<$0.0000013,395,248,375.3556$46.48
ETH<0.01%$0.0060567,659.4663$46.39
ETH<0.01%<$0.0000014,303,470,321.1038$46.1
ETH<0.01%<$0.00000127,027,441,503,640.336$46.03
ETH<0.01%<$0.0000011,734,900,317.7585$46.01
ETH<0.01%<$0.000001239,554,578.095$45.93
ETH<0.01%$0.000197232,197.1625$45.76
ETH<0.01%$2.0522.3237$45.76
ETH<0.01%$0.000433105,587.7422$45.76
ETH<0.01%$8.65.2988$45.57
ETH<0.01%$0.0332721,364.8929$45.41
ETH<0.01%$0.62554771.6217$44.8
ETH<0.01%$0.401599111.4638$44.76
ETH<0.01%$0.00120837,045.2006$44.75
ETH<0.01%$0.066218673.5699$44.6
ETH<0.01%$0.344323128.4627$44.23
ETH<0.01%$0.010884,058.0204$44.15
ETH<0.01%$0.58396375.5529$44.12
ETH<0.01%$0.00008553,551.355$44.12
ETH<0.01%$0.00000150,803,699.2376$43.77
ETH<0.01%$0.270204161.2376$43.57
ETH<0.01%$0.00096645,068.4301$43.53
ETH<0.01%$2.8914.9675$43.26
ETH<0.01%$0.4929287.7208$43.24
ETH<0.01%<$0.000001190,723,942.3779$43.19
ETH<0.01%$0.00303614,209.8011$43.15
ETH<0.01%$0.412973103.5825$42.78
ETH<0.01%$0.0051458,306.9222$42.74
ETH<0.01%$1.0938.9257$42.46
ETH<0.01%$1.138.2658$42.05
ETH<0.01%$1.5127.8382$42.04
ETH<0.01%$0.0258091,627.0412$41.99
ETH<0.01%<$0.000001204,551,748.069$41.34
ETH<0.01%$0.044477929.3176$41.33
ETH<0.01%$3.5811.5409$41.32
ETH<0.01%$16.372.5234$41.31
ETH<0.01%$0.0366611,126.395$41.3
ETH<0.01%$1.4827.8063$41.23
ETH<0.01%$0.000176233,530.0307$41.16
ETH<0.01%$0.00393210,446.8076$41.08
ETH<0.01%<$0.00000113,682,461,095.547$40.95
ETH<0.01%$1.4527.9353$40.6
ETH<0.01%$1.4927.1927$40.52
ETH<0.01%<$0.000001220,973,045.3055$40.35
ETH<0.01%$1.233.5403$40.25
ETH<0.01%$0.46689685.5936$39.96
ETH<0.01%$0.049178811.5304$39.91
ETH<0.01%$0.46985384.6725$39.78
ETH<0.01%$0.99647139.723$39.58
ETH<0.01%$0.000053743,413.3606$39.42
ETH<0.01%$0.166124236.2747$39.25
ETH<0.01%$0.000138282,592.1597$39.11
ETH<0.01%$0.00106836,626.1478$39.1
ETH<0.01%$0.051106764.2412$39.06
ETH<0.01%$0.00000221,089,582.0923$38.94
ETH<0.01%<$0.0000018,762,051,989.3238$38.82
ETH<0.01%$0.0048687,947.4318$38.69
ETH<0.01%<$0.00000162,383,121,381,001.859$38.35
ETH<0.01%<$0.000001110,517,993.9775$38.32
ETH<0.01%$0.00171122,377.3025$38.29
ETH<0.01%$0.00111834,210.3641$38.24
ETH<0.01%$1.6423.1332$37.94
ETH<0.01%$0.0045868,259.0926$37.87
ETH<0.01%$0.000066568,641.6039$37.57
ETH<0.01%$0.0021517,380.9044$37.37
ETH<0.01%$0.057643641.7292$36.99
ETH<0.01%$44.110.8329$36.74
ETH<0.01%$0.0170532,154.4121$36.74
ETH<0.01%$0.00000148,942,875.5149$36.71
ETH<0.01%<$0.000001214,077,878.6545$36.6
ETH<0.01%$0.51812770.6028$36.58
ETH<0.01%$0.00295512,313.5084$36.39
ETH<0.01%<$0.000001354,633,502.6213$36.12
ETH<0.01%$0.000319113,033.9607$36.08
ETH<0.01%$0.0073214,921.3025$36.03
ETH<0.01%$0.0125772,859.7867$35.97
ETH<0.01%$0.61285258.6676$35.95
ETH<0.01%<$0.000001175,648,114.8141$35.72
ETH<0.01%$0.126096283.1788$35.71
ETH<0.01%$1.3825.7105$35.48
ETH<0.01%<$0.0000013,835,559,303.922$35.47
ETH<0.01%$0.00087940,345.3996$35.47
ETH<0.01%$1.8718.9308$35.4
ETH<0.01%<$0.000001440,507,722.8997$35.37
ETH<0.01%$110.010.3214$35.35
ETH<0.01%$2.0317.3528$35.23
ETH<0.01%$0.000082425,669.6622$35.1
ETH<0.01%$0.0278071,259.7454$35.03
ETH<0.01%<$0.000001323,249,267,443.7305$34.77
ETH<0.01%$1.4623.6728$34.56
ETH<0.01%$0.214804160.6341$34.5
ETH<0.01%<$0.00000144,323,034,788.2047$34.46
ETH<0.01%$0.000259132,445.8969$34.27
ETH<0.01%$0.103994327.3928$34.05
ETH<0.01%$0.0146312,325.3822$34.02
ETH<0.01%$0.0054066,266.2643$33.87
ETH<0.01%$0.6545851.3779$33.63
ETH<0.01%<$0.000001286,632,777.6051$33.58
ETH<0.01%$0.0050996,544.8582$33.37
ETH<0.01%$0.000042796,396.7394$33.37
ETH<0.01%$0.0048456,886.3872$33.37
ETH<0.01%$0.9348735.5662$33.25
ETH<0.01%$5.36.2685$33.22
ETH<0.01%$1.2127.4042$33.14
ETH<0.01%$0.00000149,274,128.5923$33.1
ETH<0.01%$0.000162203,434.9046$32.93
ETH<0.01%$0.00105330,883.4718$32.52
ETH<0.01%$0.44673172.663$32.46
ETH<0.01%$0.073578439.8933$32.37
ETH<0.01%<$0.0000011,514,478,580.0411$32.21
ETH<0.01%$0.54300959.0095$32.04
ETH<0.01%$8.053.9752$32
ETH<0.01%$0.00009354,213.4436$31.99
ETH<0.01%$0.00128224,884.3313$31.9
ETH<0.01%<$0.000001306,125,998.8641$31.9
ETH<0.01%$0.85136837.4459$31.88
ETH<0.01%$0.0388820.0404$31.82
ETH<0.01%$0.000294108,153.1508$31.8
ETH<0.01%<$0.00000188,651,031.3141$31.77
ETH<0.01%$0.0000047,417,935.4377$31.45
ETH<0.01%$12.132.5898$31.42
ETH<0.01%<$0.00000161,773,554,927.5645$31.36
ETH<0.01%<$0.000001946,643,836,996.6482$31.36
ETH<0.01%$0.000151207,675.7944$31.34
ETH<0.01%$0.000255122,957.9569$31.3
ETH<0.01%$0.00000126,497,593.9525$31.27
ETH<0.01%$0.04055766.2297$31.07
ETH<0.01%$0.297364104.4504$31.06
ETH<0.01%<$0.00000168,112,038.9528$30.9
ETH<0.01%<$0.000001185,868,971.4102$30.81
ETH<0.01%$0.98374431.2586$30.75
ETH<0.01%<$0.00000177,405,652,446.4525$30.72
ETH<0.01%$0.00092832,983.7141$30.6
ETH<0.01%$0.084274362.157$30.52
ETH<0.01%$78.060.3909$30.52
ETH<0.01%$0.0252321,206.6302$30.45
ETH<0.01%$0.00054755,595.1471$30.4
ETH<0.01%$0.0000074,107,102.6877$30.35
ETH<0.01%<$0.00000136,456,600,724.306$30.3
ETH<0.01%$0.000139217,533.7347$30.26
ETH<0.01%$0.00104828,797.0633$30.17
ETH<0.01%<$0.0000011,210,801,390.1357$30.16
ETH<0.01%<$0.0000015,286,097,907.5019$30.16
ETH<0.01%$1.6418.3844$30.15
ETH<0.01%<$0.00000115,658,981,665.7049$30.14
ETH<0.01%$0.000107281,041.5397$30.11
ETH<0.01%$0.00000217,602,695.0786$30.1
ETH<0.01%<$0.00000179,955,217.6179$29.95
ETH<0.01%$0.044546671.1068$29.9
ETH<0.01%$0.25535116.9387$29.86
ETH<0.01%$0.000284104,533.2939$29.68
ETH<0.01%$0.000188157,986.903$29.67
ETH<0.01%$0.0003779,779.2299$29.48
ETH<0.01%$0.00000145,029,583.884$29.32
ETH<0.01%$3,697.420.00779674$28.83
ETH<0.01%$0.0000181,571,806.0293$28.77
ETH<0.01%$0.000075379,952.1971$28.63
ETH<0.01%$0.000117243,736.6775$28.54
ETH<0.01%$0.139405204.2548$28.47
ETH<0.01%$0.062658454.0216$28.45
ETH<0.01%<$0.00000183,968,024.45$28.3
ETH<0.01%$0.00133621,088.2437$28.18
ETH<0.01%$0.00000218,401,376.3726$28.15
ETH<0.01%$64.660.4344$28.09
ETH<0.01%$12.752.186$27.87
ETH<0.01%$0.00000212,282,010.3174$27.85
ETH<0.01%$0.090654305.3606$27.68
ETH<0.01%$1.5218.125$27.55
ETH<0.01%$1.4319.236$27.51
ETH<0.01%<$0.000001337,909,843.1296$27.46
ETH<0.01%$0.00183314,946.1757$27.4
ETH<0.01%<$0.0000012,378,028,048.4159$27.14
ETH<0.01%$3.078.7612$26.9
ETH<0.01%$0.00000216,281,405.6439$26.86
ETH<0.01%<$0.000001142,654,127,421.0283$26.83
ETH<0.01%$6.64.0533$26.75
ETH<0.01%$0.79473733.6006$26.7
ETH<0.01%$0.0000047,322,340.6543$26.67
ETH<0.01%$0.0000161,690,770.7089$26.63
ETH<0.01%$0.31152685.0103$26.48
ETH<0.01%<$0.00000124,139,839,990.5655$26.41
ETH<0.01%$2.819.3656$26.35
ETH<0.01%$0.027203963.5716$26.21
ETH<0.01%$0.99956726.1936$26.18
ETH<0.01%$0.00046656,162.0629$26.18
ETH<0.01%$0.0043426,018.3574$26.13
ETH<0.01%$0.00000212,456,412.9768$26.08
ETH<0.01%<$0.00000113,246,555,560.1592$26.06
ETH<0.01%$0.0170411,527.6151$26.03
ETH<0.01%$0.051668501.5773$25.92
ETH<0.01%$0.79049432.7517$25.89
ETH<0.01%<$0.000001162,041,704.6651$25.88
ETH<0.01%$2.879.009$25.86
ETH<0.01%$6.314.0869$25.79
ETH<0.01%$0.35702472.1516$25.76
ETH<0.01%$0.57862744.3325$25.65
ETH<0.01%$0.00219511,671.592$25.62
ETH<0.01%<$0.00000165,387,519.3688$25.51
ETH<0.01%$0.46423654.4912$25.3
ETH<0.01%$0.0063943,939.4497$25.19
ETH<0.01%$0.0000112,389,920.366$25.14
ETH<0.01%$0.00000124,911,185.3398$25.11
ETH<0.01%$0.73583634.1135$25.1
ETH<0.01%$0.00025696,894.7304$24.84
ETH<0.01%$0.070808350.7803$24.84
ETH<0.01%$0.103446239.1872$24.74
ETH<0.01%$0.170177145.2398$24.72
ETH<0.01%$0.31916477.3592$24.69
ETH<0.01%$8,442.860.00292279$24.68
ETH<0.01%$1.9912.3156$24.51
ETH<0.01%$0.000117208,585.1212$24.5
ETH<0.01%<$0.00000114,325,932,671.7796$24.5
ETH<0.01%$124.4585$24.48
ETH<0.01%$0.000173141,361.0002$24.45
ETH<0.01%$6.064.0285$24.42
ETH<0.01%$0.0000122,118,787.008$24.42
ETH<0.01%<$0.000001792,688,864.155$24.39
ETH<0.01%$0.02915832.9948$24.28
ETH<0.01%$0.00000144,950,582.4135$24.24
ETH<0.01%$0.00197112,287.783$24.22
ETH<0.01%$1.3118.264$24
ETH<0.01%<$0.000001617,372,751.3052$23.96
ETH<0.01%$0.9069326.2957$23.85
ETH<0.01%$0.82969628.6767$23.79
ETH<0.01%$0.0001237,840.9296$23.68
ETH<0.01%<$0.00000130,867,721,752.8677$23.6
ETH<0.01%$4.055.8222$23.56
ETH<0.01%$3,414.130.00689982$23.56
ETH<0.01%$0.98324423.9326$23.53
ETH<0.01%$0.0115492,026.794$23.41
ETH<0.01%$0.00023898,125.3933$23.33
ETH<0.01%$0.00211210,998.6714$23.23
ETH<0.01%$0.313174.1814$23.23
ETH<0.01%<$0.000001141,018,204.401$23.19
ETH<0.01%$0.0124221,850.7068$22.99
ETH<0.01%$0.0163021,410.0513$22.99
ETH<0.01%<$0.00000147,540,983,798.9829$22.98
ETH<0.01%$11.12.0584$22.86
ETH<0.01%$0.00000141,599,752.9182$22.8
ETH<0.01%$0.0000141,569,815.1632$22.75
ETH<0.01%$0.0131241,714.9037$22.51
ETH<0.01%$0.57916138.7285$22.43
ETH<0.01%$0.0057623,890.0201$22.42
ETH<0.01%$0.120754185.2851$22.37
ETH<0.01%<$0.000001135,591,041.0364$22.33
ETH<0.01%<$0.00000112,526,149,480.0358$22.3
ETH<0.01%$0.086683256.3732$22.22
ETH<0.01%$0.027717800.8504$22.2
ETH<0.01%$0.0050384,394.6379$22.14
ETH<0.01%$1.0321.4688$22.11
ETH<0.01%$0.0174151,268.5445$22.09
ETH<0.01%<$0.00000152,068,850.3743$21.87
ETH<0.01%$0.00037957,553.4543$21.83
ETH<0.01%$20.581.06$21.82
ETH<0.01%$0.060692358.8082$21.78
ETH<0.01%<$0.00000113,840,527,451.6326$21.77
ETH<0.01%$0.72464530.0027$21.74
ETH<0.01%$0.0190791,137.6114$21.7
ETH<0.01%$0.186294116.3473$21.67
ETH<0.01%$0.00000128,036,038.6707$21.66
ETH<0.01%$4,000.430.00539787$21.59
ETH<0.01%<$0.00000120,222,686,009.5751$21.54
ETH<0.01%$0.03506610.3242$21.4
ETH<0.01%$0.0000063,574,316.5318$21.37
ETH<0.01%$0.001316,352.0935$21.25
ETH<0.01%$1.1718.1179$21.2
ETH<0.01%$0.025986814.4562$21.16
ETH<0.01%$0.044628473.6751$21.14
ETH<0.01%$0.0004349,099.9601$21.13
ETH<0.01%$0.0053123,956.4815$21.02
ETH<0.01%$0.0034126,159.0346$21.01
ETH<0.01%$0.00054938,212.4151$20.96
ETH<0.01%$0.208694100.3925$20.95
ETH<0.01%$0.78770526.5818$20.94
ETH<0.01%<$0.00000192,899,813.7006$20.91
ETH<0.01%$0.00000133,132,300.186$20.87
ETH<0.01%$0.00041250,521.1583$20.8
ETH<0.01%$0.000153135,626.6423$20.72
ETH<0.01%$0.0038795,335.6976$20.7
ETH<0.01%$2.448.4679$20.65
ETH<0.01%$0.076057271.2953$20.63
ETH<0.01%$0.00186711,043.4389$20.62
ETH<0.01%$0.0007527,492.9288$20.62
ETH<0.01%$0.0000053,870,537.135$20.48
ETH<0.01%$0.0019110,656.522$20.36
ETH<0.01%$0.45844244.3964$20.35
ETH<0.01%$0.000041491,509.0731$20.35
ETH<0.01%$0.000199101,497.5571$20.23
ETH<0.01%$0.99961620.1557$20.15
ETH<0.01%$0.0021619,287.0686$20.07
ETH<0.01%$0.0089762,228.8847$20.01
ETH<0.01%$0.00158812,565.1752$19.95
ETH<0.01%<$0.00000115,355,863,527.7162$19.73
ETH<0.01%<$0.00000117,867,912,235.2225$19.51
ETH<0.01%$0.000193101,019.0209$19.5
ETH<0.01%<$0.000001177,260,188,783.6581$19.46
ETH<0.01%$0.045771425.2342$19.46
ETH<0.01%$0.134854143.738$19.38
ETH<0.01%$0.0024128,000.7727$19.3
ETH<0.01%$110.390.1746$19.28
ETH<0.01%<$0.0000017,143,839,481.8462$19.22
ETH<0.01%$2.597.4203$19.22
ETH<0.01%$0.110791172.8362$19.15
ETH<0.01%$0.79762923.9367$19.09
ETH<0.01%$0.085843221.7321$19.03
ETH<0.01%$0.000127149,300.5991$19.01
ETH<0.01%$0.40239247.2456$19.01
ETH<0.01%$3.265.8205$18.97
ETH<0.01%<$0.000001945,678,318.9864$18.95
ETH<0.01%$0.0153981,227.9287$18.91
ETH<0.01%<$0.00000139,031,227,866.0824$18.85
ETH<0.01%$0.030227623.2947$18.84
ETH<0.01%$0.022552833.8684$18.81
ETH<0.01%$0.0097081,930.9128$18.75
ETH<0.01%$0.0061143,064.6772$18.74
ETH<0.01%$0.00000132,315,314.4685$18.71
ETH<0.01%<$0.000001159,429,038.5122$18.7
ETH<0.01%$10.791.7329$18.7
ETH<0.01%$274.80.0679$18.67
ETH<0.01%<$0.00000120,353,616,842.999$18.65
ETH<0.01%$0.19168896.9764$18.59
ETH<0.01%$0.00138813,337.5866$18.51
ETH<0.01%$0.066904274.8002$18.39
ETH<0.01%$0.000011,864,496.1007$18.12
ETH<0.01%$0.0118461,525.6656$18.07
ETH<0.01%$0.0069062,601.2591$17.96
ETH<0.01%$0.051733346.6294$17.93
ETH<0.01%$0.00049536,173.4154$17.91
ETH