ETH Price: $2,967.99 (-0.87%)
Gas: 7 Gwei

Contract

0x5D1EcF1E8a8Fdf7b1A8Bc0E7073139a1f2013586
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
0x60806040178204902023-08-01 13:36:11342 days ago1690896971IN
 Create: WrappedERC20Bridge
0 ETH0.0868696324.54244638

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
WrappedERC20Bridge

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion
File 1 of 9 : WrappedERC20Bridge.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

import "./AbstractBridge.sol";
import "./release/IRelease.sol";
import "../ERC20/ERC20Wrapped.sol";
import "../Mutex.sol";

contract WrappedERC20Bridge is AbstractBridge, Mutex {
    uint8 constant DECIMALS = 6;

    mapping(uint128 => mapping(address => BindingInfo)) public bindings;
    mapping(address => uint256) public fees;
    mapping(address => uint256) public balances;

    event BurnTokens(
        uint16 feeChainId,
        address token,
        uint256 amount,
        string recipient,
        uint256 gaslessReward,
        string referrer,
        uint256 referrerFee,
        uint256 fee
    );

    event MintTokens(
        address token,
        uint256 amount,
        address recipient,
        uint256 gaslessReward,
        address caller
    );

    event Fee(
        uint16 feeChainId,
        address token,
        uint256 amount,
        string recipient
    );

    function burnTokens(
        address token_,
        uint256 amount_,
        uint16 executionChainId_,
        string calldata recipient_,
        string calldata referrer_,
        uint256 gaslessReward_
    ) external mutex whenNotPaused whenInitialized {
        require(token_ != address(0), "unavaliable token");
        require(chains[executionChainId_], "execution chain is disable");

        require(
            bindings[executionChainId_][token_].enabled,
            "token is disabled"
        );
        require(
            amount_ >= bindings[executionChainId_][token_].minAmount,
            "less than min amount"
        );
        uint256 fee = calculateFee_(executionChainId_, token_, amount_);
        require(amount_ > fee, "fee more than amount");
        unchecked {
            amount_ = amount_ - fee;
        }
        require(amount_ > gaslessReward_, "gassless reward more than amount");
        uint256 referrerFee = (fee *
            referrersFeeInPercent[executionChainId_][referrer_]) /
            PERCENT_FACTOR;
        fees[token_] += fee - referrerFee;
        balances[token_] -= amount_ + referrerFee;

        uint256 divider = 10**(IERC20(token_).decimals() - DECIMALS);
        emit BurnTokens(
            executionChainId_,
            token_,
            amount_,
            recipient_,
            gaslessReward_,
            referrer_,
            referrerFee,
            fee - referrerFee
        );

        IRelease(adapter).releaseTokens(
            executionChainId_,
            bindings[executionChainId_][token_].executionAsset,
            amount_ / divider,
            recipient_,
            gaslessReward_ / divider,
            referrer_,
            referrerFee / divider
        );

        ERC20Wrapped(token_).burnFrom(msg.sender, amount_ + fee);
    }

    function calculateFee_(
        uint16 executionChainId_,
        address token_,
        uint256 amount_
    ) internal view returns (uint256) {
        uint128 percent = amount_ >
            bindings[executionChainId_][token_].thresholdFee
            ? bindings[executionChainId_][token_].afterPercentFee
            : bindings[executionChainId_][token_].beforePercentFee;

        return
            bindings[executionChainId_][token_].minFee +
            (amount_ * percent) /
            PERCENT_FACTOR;
    }

    function mintTokens(
        bytes32 callerContract_,
        address token_,
        address payable recipient_,
        uint256 amount_,
        uint256 gaslessReward_
    ) external mutex whenNotPaused whenInitialized onlyExecutor {
        require(token_ != address(0), "zero address");
        require(callerContract == callerContract_, "only caller contract");

        uint256 divider = 10**(IERC20(token_).decimals() - DECIMALS);
        amount_ *= divider;
        gaslessReward_ *= divider;
        balances[token_] += amount_;

        // slither-disable-start tx-origin
        emit MintTokens(token_, amount_, recipient_, gaslessReward_, tx.origin);
        if (gaslessReward_ > 0 && recipient_ != tx.origin) {
            ERC20Wrapped(token_).mint(recipient_, amount_ - gaslessReward_);
            ERC20Wrapped(token_).mint(tx.origin, gaslessReward_);
        } else {
            ERC20Wrapped(token_).mint(recipient_, amount_);
        }
        // slither-disable-end tx-origin
    }

    function transferFee(address token_)
        external
        mutex
        whenNotPaused
        whenInitialized
    {
        uint16 feeChainId_ = feeChainId;
        require(chains[feeChainId_], "chain is disable");
        BindingInfo memory binding = bindings[feeChainId_][token_];
        require(binding.enabled, "token is disabled");
        uint256 fee_ = fees[token_];
        require(fee_ >= binding.minAmount, "less than min amount");
        balances[token_] += fee_;
        fees[token_] = 0;
        fee_ /= 10**(ERC20Wrapped(token_).decimals() - DECIMALS);
        string memory feeRecipient_ = feeRecipient;

        emit Fee(feeChainId_, token_, fee_, feeRecipient_);
        IRelease(adapter).releaseTokens(
            feeChainId_,
            binding.executionAsset,
            fee_,
            feeRecipient_,
            0,
            "",
            0
        );
    }

    function updateBindingInfo(
        uint16 executionChainId_,
        address token_,
        string calldata executionAsset_,
        uint256 minAmount_,
        uint256 minFee_,
        uint256 thresholdFee_,
        uint128 beforePercentFee_,
        uint128 afterPercentFee_,
        bool enabled_
    ) external onlyAdmin {
        require(token_ != address(0), "zero address");
        require(
            !enabled_ || IERC20(token_).decimals() >= DECIMALS,
            "invalid token decimals"
        );
        bindings[executionChainId_][token_] = BindingInfo(
            executionAsset_,
            minAmount_,
            minFee_,
            thresholdFee_,
            beforePercentFee_,
            afterPercentFee_,
            enabled_
        );
    }

    receive() external payable {}
}

File 2 of 9 : AbstractBridge.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

import "../Pausable.sol";
import "../Initializable.sol";

abstract contract AbstractBridge is Initializable, Pausable {
    struct BindingInfo {
        string executionAsset;
        uint256 minAmount;
        uint256 minFee;
        uint256 thresholdFee;
        uint128 beforePercentFee;
        uint128 afterPercentFee;
        bool enabled;
    }

    event ExecutionChainUpdated(uint128 feeChainId, address caller);
    event FeeChainUpdated(uint128 feeChainId, address caller);
    event CallerContractUpdated(bytes32 executorContract, address caller);
    event FeeRecipientUpdated(string feeRecipient, address caller);
    event SignerUpdated(address caller, address oldSigner, address signer);
    event ReferrerFeeUpdated(
        uint128 chainId,
        string referrer,
        uint128 feeInPercent
    );

    uint128 constant PERCENT_FACTOR = 10 ** 6;

    uint16 public feeChainId;
    string public feeRecipient;
    address public adapter;
    address public executor;
    bytes32 callerContract;
    mapping(uint128 => bool) public chains;
    mapping(uint128 => mapping(string => uint128)) public referrersFeeInPercent;

    modifier onlyExecutor() {
        require(msg.sender == executor, "only executor");
        _;
    }

    function init(
        address admin_,
        address adapter_,
        uint16 feeChainId_,
        string calldata feeRecipient_,
        address executor_,
        bytes32 callerContract_
    ) external whenNotInitialized {
        require(admin_ != address(0), "zero address");
        require(adapter_ != address(0), "zero address");
        require(executor_ != address(0), "zero address");
        feeChainId = feeChainId_;
        pauser = admin_;
        admin = admin_;
        feeRecipient = feeRecipient_;
        adapter = adapter_;
        executor = executor_;
        callerContract = callerContract_;
        isInited = true;
    }

    function updateExecutionChain(
        uint128 executionChainId_,
        bool enabled
    ) external onlyAdmin {
        emit ExecutionChainUpdated(executionChainId_, msg.sender);
        chains[executionChainId_] = enabled;
    }

    function updateFeeChain(uint16 feeChainId_) external onlyAdmin {
        emit FeeChainUpdated(feeChainId_, msg.sender);
        feeChainId = feeChainId_;
    }

    function updateCallerContract(bytes32 callerContract_) external onlyAdmin {
        emit CallerContractUpdated(callerContract_, msg.sender);
        callerContract_ = callerContract_;
    }

    function updateFeeRecipient(
        string calldata feeRecipient_
    ) external onlyAdmin {
        emit FeeRecipientUpdated(feeRecipient_, msg.sender);
        feeRecipient = feeRecipient_;
    }

    function updateReferrer(
        uint128 executionChainId_,
        string calldata referrer_,
        uint128 percentFee_
    ) external onlyAdmin {
        require(percentFee_ <= 2e5); // up 20% max
        require(chains[executionChainId_], "execution chain is disable");
        emit ReferrerFeeUpdated(executionChainId_, referrer_, percentFee_);
        referrersFeeInPercent[executionChainId_][referrer_] = percentFee_;
    }
}

File 3 of 9 : IRelease.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

interface IRelease {
    function releaseTokens(
        uint16 executionChainId_,
        string calldata token_,
        uint256 amount_,
        string calldata recipient_,
        uint256 gaslessClaimReward_,
        string calldata referrer_,
        uint256 referrerFee_
    ) external;
}

File 4 of 9 : ERC20Wrapped.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

import "./IERC20.sol";
import "../Pausable.sol";
import "../Initializable.sol";

contract ERC20Wrapped is IERC20, Pausable, Initializable {
    event MinterUpdated(address sender, address oldMinter, address minter);

    address public minter;
    mapping(address => uint256) public override balanceOf;
    mapping(address => mapping(address => uint256)) public override allowance;
    uint256 public override totalSupply;
    uint8 public override decimals;
    string public override name;
    string public override symbol;

    function init(
        string memory name_,
        string memory symbol_,
        uint8 decimals_,
        address admin_
    ) external whenNotInitialized {
        require(admin_ != address(0), "zero address");

        name = name_;
        symbol = symbol_;
        decimals = decimals_;
        admin = admin_;
        minter = admin_;
        pauser = admin_;
        isInited = true;
    }

    function transfer(address to_, uint256 amount_)
        external
        override
        whenNotPaused
        returns (bool)
    {
        require(to_ != address(0), "zero address");
        uint256 fromBalance_ = balanceOf[msg.sender];
        require(fromBalance_ >= amount_, "amount exceeds balance");
        unchecked {
            balanceOf[msg.sender] = fromBalance_ - amount_;
        }
        balanceOf[to_] += amount_;
        emit Transfer(msg.sender, to_, amount_);
        return true;
    }

    function approve(address spender_, uint256 amount_)
        external
        override
        returns (bool)
    {
        require(spender_ != address(0), "zero address");
        allowance[msg.sender][spender_] = amount_;
        emit Approval(msg.sender, spender_, amount_);
        return true;
    }

    function transferFrom(
        address from_,
        address to_,
        uint256 amount_
    ) external override whenNotPaused returns (bool) {
        require(from_ != address(0), "from zero address");
        require(to_ != address(0), "to zero address");
        _transfer(from_, msg.sender, amount_);
        balanceOf[to_] += amount_;
        emit Transfer(from_, to_, amount_);
        return true;
    }

    function burn(uint256 amount_) external whenNotPaused {
        uint256 accountBalance_ = balanceOf[msg.sender];
        require(accountBalance_ >= amount_, "amount exceeds balance");
        unchecked {
            balanceOf[msg.sender] = accountBalance_ - amount_;
        }
        totalSupply -= amount_;
        emit Transfer(msg.sender, address(0), amount_);
    }

    function burnFrom(address from_, uint256 amount_) external whenNotPaused {
        require(from_ != address(0), "zero address");
        _transfer(from_, msg.sender, amount_);
        totalSupply -= amount_;
        emit Transfer(from_, address(0), amount_);
    }

    function mint(address to_, uint256 amount_) external whenNotPaused {
        require(to_ != address(0), "zero address");
        require(minter == msg.sender, "only minter");
        totalSupply += amount_;
        balanceOf[to_] += amount_;
        emit Transfer(address(0), to_, amount_);
    }

    function updateMinter(address minter_) external onlyAdmin {
        require(minter_ != address(0), "zero address");
        emit MinterUpdated(msg.sender, minter, minter_);
        minter = minter_;
    }

    function _transfer(
        address from_,
        address to_,
        uint256 amount_
    ) internal {
        uint256 currentAllowance_ = allowance[from_][to_];
        if (currentAllowance_ != type(uint256).max) {
            require(currentAllowance_ >= amount_, "insufficient allowance");
            unchecked {
                allowance[from_][to_] = currentAllowance_ - amount_;
                emit Approval(from_, to_, currentAllowance_ - amount_);
            }
        }
        uint256 fromBalance_ = balanceOf[from_];
        require(fromBalance_ >= amount_, "amount exceeds balance");
        unchecked {
            balanceOf[from_] = fromBalance_ - amount_;
        }
    }
}

File 5 of 9 : Mutex.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

abstract contract Mutex {
    bool private _lock;

    modifier mutex() {
        require(!_lock, "mutex lock");
        _lock = true;
        _;
        _lock = false;
    }
}

File 6 of 9 : Pausable.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

import "./Adminable.sol";

abstract contract Pausable is Adminable {
    event Paused(address account);
    event Unpaused(address account);
    event PauserUpdated(address sender, address oldPauser, address pauser);

    bool public isPaused;
    address public pauser;

    constructor() {
        isPaused = false;
    }

    modifier whenNotPaused() {
        require(!isPaused, "paused");
        _;
    }

    modifier whenPaused() {
        require(isPaused, "not paused");
        _;
    }

    modifier onlyPauser() {
        require(pauser == msg.sender, "only pauser");
        _;
    }

    function pause() external whenNotPaused onlyPauser {
        isPaused = true;
        emit Paused(msg.sender);
    }

    function unpause() external whenPaused onlyPauser {
        isPaused = false;
        emit Unpaused(msg.sender);
    }

    function updatePauser(address pauser_) external onlyAdmin {
        require(pauser_ != address(0), "zero address");
        emit PauserUpdated(msg.sender, pauser, pauser_);
        pauser = pauser_;
    }
}

File 7 of 9 : Initializable.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

abstract contract Initializable {
    bool internal isInited;

    modifier whenInitialized() {
        require(isInited, "not initialized");
        _;
    }

    modifier whenNotInitialized() {
        require(!isInited, "already initialized");
        _;
    }
}

File 8 of 9 : Adminable.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

abstract contract Adminable {
    event AdminUpdated(address sender, address oldAdmin, address admin);

    address public admin;

    modifier onlyAdmin() {
        require(admin == msg.sender, "only admin");
        _;
    }

    function updateAdmin(address admin_) external onlyAdmin {
        require(admin_ != address(0), "zero address");
        emit AdminUpdated(msg.sender, admin, admin_);
        admin = admin_;
    }
}

File 9 of 9 : IERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address account_) external view returns (uint256);

    function transfer(address to_, 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 from_,
        address to_,
        uint256 amount_
    ) external returns (bool);
}

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

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"admin","type":"address"}],"name":"AdminUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"feeChainId","type":"uint16"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"recipient","type":"string"},{"indexed":false,"internalType":"uint256","name":"gaslessReward","type":"uint256"},{"indexed":false,"internalType":"string","name":"referrer","type":"string"},{"indexed":false,"internalType":"uint256","name":"referrerFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"BurnTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"executorContract","type":"bytes32"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"CallerContractUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint128","name":"feeChainId","type":"uint128"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"ExecutionChainUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"feeChainId","type":"uint16"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"recipient","type":"string"}],"name":"Fee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint128","name":"feeChainId","type":"uint128"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"FeeChainUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"feeRecipient","type":"string"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"FeeRecipientUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"gaslessReward","type":"uint256"},{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"MintTokens","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":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"oldPauser","type":"address"},{"indexed":false,"internalType":"address","name":"pauser","type":"address"}],"name":"PauserUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint128","name":"chainId","type":"uint128"},{"indexed":false,"internalType":"string","name":"referrer","type":"string"},{"indexed":false,"internalType":"uint128","name":"feeInPercent","type":"uint128"}],"name":"ReferrerFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"address","name":"oldSigner","type":"address"},{"indexed":false,"internalType":"address","name":"signer","type":"address"}],"name":"SignerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"adapter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint128","name":"","type":"uint128"},{"internalType":"address","name":"","type":"address"}],"name":"bindings","outputs":[{"internalType":"string","name":"executionAsset","type":"string"},{"internalType":"uint256","name":"minAmount","type":"uint256"},{"internalType":"uint256","name":"minFee","type":"uint256"},{"internalType":"uint256","name":"thresholdFee","type":"uint256"},{"internalType":"uint128","name":"beforePercentFee","type":"uint128"},{"internalType":"uint128","name":"afterPercentFee","type":"uint128"},{"internalType":"bool","name":"enabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"},{"internalType":"uint16","name":"executionChainId_","type":"uint16"},{"internalType":"string","name":"recipient_","type":"string"},{"internalType":"string","name":"referrer_","type":"string"},{"internalType":"uint256","name":"gaslessReward_","type":"uint256"}],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"","type":"uint128"}],"name":"chains","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"executor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeChainId","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeRecipient","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"fees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin_","type":"address"},{"internalType":"address","name":"adapter_","type":"address"},{"internalType":"uint16","name":"feeChainId_","type":"uint16"},{"internalType":"string","name":"feeRecipient_","type":"string"},{"internalType":"address","name":"executor_","type":"address"},{"internalType":"bytes32","name":"callerContract_","type":"bytes32"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"callerContract_","type":"bytes32"},{"internalType":"address","name":"token_","type":"address"},{"internalType":"address payable","name":"recipient_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"},{"internalType":"uint256","name":"gaslessReward_","type":"uint256"}],"name":"mintTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauser","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint128","name":"","type":"uint128"},{"internalType":"string","name":"","type":"string"}],"name":"referrersFeeInPercent","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token_","type":"address"}],"name":"transferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin_","type":"address"}],"name":"updateAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"executionChainId_","type":"uint16"},{"internalType":"address","name":"token_","type":"address"},{"internalType":"string","name":"executionAsset_","type":"string"},{"internalType":"uint256","name":"minAmount_","type":"uint256"},{"internalType":"uint256","name":"minFee_","type":"uint256"},{"internalType":"uint256","name":"thresholdFee_","type":"uint256"},{"internalType":"uint128","name":"beforePercentFee_","type":"uint128"},{"internalType":"uint128","name":"afterPercentFee_","type":"uint128"},{"internalType":"bool","name":"enabled_","type":"bool"}],"name":"updateBindingInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"callerContract_","type":"bytes32"}],"name":"updateCallerContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"executionChainId_","type":"uint128"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateExecutionChain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"feeChainId_","type":"uint16"}],"name":"updateFeeChain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"feeRecipient_","type":"string"}],"name":"updateFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pauser_","type":"address"}],"name":"updatePauser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"executionChainId_","type":"uint128"},{"internalType":"string","name":"referrer_","type":"string"},{"internalType":"uint128","name":"percentFee_","type":"uint128"}],"name":"updateReferrer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b506000805460ff60a81b19169055613f8e8061002d6000396000f3fe6080604052600436106101a55760003560e01c8063b187bd26116100e1578063e2f273bd1161008a578063eb20dabf11610064578063eb20dabf1461056d578063f67db96b1461058d578063f851a440146105d3578063faaebd211461060557600080fd5b8063e2f273bd1461050d578063e45da5261461052d578063ea8c4bcf1461054d57600080fd5b8063c34c08e5116100bb578063c34c08e514610490578063ce4ea09f146104bd578063e22fe72f146104dd57600080fd5b8063b187bd261461040d578063b3c276e214610450578063bac9e1b71461047057600080fd5b80633f4ba83a1161014e5780635f7ebb05116101285780635f7ebb051461032f5780638456cb591461034f5780638497e666146103645780639fd0506d146103e057600080fd5b80633f4ba83a146102d857806346904840146102ed578063554bab3c1461030f57600080fd5b80632079b5a91161017f5780632079b5a91461024a5780632156d4211461026a57806327e235e31461029d57600080fd5b806303eadcfc146101b15780630bab6053146102085780631c47ae5e1461022a57600080fd5b366101ac57005b600080fd5b3480156101bd57600080fd5b506003546101de9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021457600080fd5b5061022861022336600461312c565b610632565b005b34801561023657600080fd5b5061022861024536600461317a565b6106f8565b34801561025657600080fd5b5061022861026536600461322d565b61081a565b34801561027657600080fd5b5061028a6102853660046132d1565b611091565b6040516101ff979695949392919061336c565b3480156102a957600080fd5b506102ca6102b83660046133c4565b600b6020526000908152604090205481565b6040519081526020016101ff565b3480156102e457600080fd5b50610228611187565b3480156102f957600080fd5b506103026112eb565b6040516101ff91906133e8565b34801561031b57600080fd5b5061022861032a3660046133c4565b611379565b34801561033b57600080fd5b5061022861034a3660046133fb565b61151c565b34801561035b57600080fd5b5061022861162b565b34801561037057600080fd5b506103bf61037f366004613445565b600760209081526000928352604090922081518083018401805192815290840192909301919091209152546fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020016101ff565b3480156103ec57600080fd5b506001546101de9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041957600080fd5b50600054610440907501000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016101ff565b34801561045c57600080fd5b5061022861046b366004613525565b6117a2565b34801561047c57600080fd5b5061022861048b3660046135bc565b611ad1565b34801561049c57600080fd5b506004546101de9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104c957600080fd5b506102286104d8366004613621565b611ccc565b3480156104e957600080fd5b506104406104f83660046136d7565b60066020526000908152604090205460ff1681565b34801561051957600080fd5b506102286105283660046133c4565b612013565b34801561053957600080fd5b506102286105483660046136f2565b6121c0565b34801561055957600080fd5b506102286105683660046133c4565b612293565b34801561057957600080fd5b50610228610588366004613734565b612978565b34801561059957600080fd5b506001546105c09074010000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020016101ff565b3480156105df57600080fd5b506000546101de90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561061157600080fd5b506102ca6106203660046133c4565b600a6020526000908152604090205481565b600054610100900473ffffffffffffffffffffffffffffffffffffffff1633146106bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c792061646d696e0000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b604080518281523360208201527fcff96c14f90d679c9b2edb1cd5b9990824d3083f97ade84c79539884ca33fc02910160405180910390a150565b600054610100900473ffffffffffffffffffffffffffffffffffffffff16331461077e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c792061646d696e0000000000000000000000000000000000000000000060448201526064016106b4565b604080516fffffffffffffffffffffffffffffffff841681523360208201527fcd8ca9842747d8162878825088ab13c89199cba4f7f23889db839b92328ef815910160405180910390a16fffffffffffffffffffffffffffffffff91909116600090815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60085460ff1615610887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6d75746578206c6f636b0000000000000000000000000000000000000000000060448201526064016106b4565b600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556000547501000000000000000000000000000000000000000000900460ff1615610938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f706175736564000000000000000000000000000000000000000000000000000060448201526064016106b4565b60005460ff166109a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6e6f7420696e697469616c697a6564000000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff8816610a21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f756e6176616c6961626c6520746f6b656e00000000000000000000000000000060448201526064016106b4565b61ffff861660009081526006602052604090205460ff16610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f657865637574696f6e20636861696e2069732064697361626c6500000000000060448201526064016106b4565b61ffff8616600090815260096020908152604080832073ffffffffffffffffffffffffffffffffffffffff8c16845290915290206005015460ff16610b3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f6b656e2069732064697361626c656400000000000000000000000000000060448201526064016106b4565b61ffff8616600090815260096020908152604080832073ffffffffffffffffffffffffffffffffffffffff8c168452909152902060010154871015610be0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6c657373207468616e206d696e20616d6f756e7400000000000000000000000060448201526064016106b4565b6000610bed878a8a612fc7565b9050808811610c58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f666565206d6f7265207468616e20616d6f756e7400000000000000000000000060448201526064016106b4565b8088039750818811610cc6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f676173736c65737320726577617264206d6f7265207468616e20616d6f756e7460448201526064016106b4565b61ffff87166000908152600760205260408082209051620f42409190610cef9088908890613786565b90815260405190819003602001902054610d1b906fffffffffffffffffffffffffffffffff16846137c5565b610d2591906137e2565b9050610d31818361381d565b73ffffffffffffffffffffffffffffffffffffffff8b166000908152600a602052604081208054909190610d66908490613830565b90915550610d769050818a613830565b73ffffffffffffffffffffffffffffffffffffffff8b166000908152600b602052604081208054909190610dab90849061381d565b92505081905550600060068b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e259190613843565b610e2f9190613866565b610e3a90600a61399f565b90507f846d48b5dad0cf4233578e8b84dff2bb1f49f5ef280b0a5abf783b1d06aeb4cc898c8c8b8b898c8c8a610e70818e61381d565b604051610e869a999897969594939291906139f7565b60405180910390a1600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d7b2831e8a600960008d61ffff166fffffffffffffffffffffffffffffffff16815260200190815260200160002060008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001848e610f4291906137e2565b8c8c610f4e888c6137e2565b8d8d610f5a8b8d6137e2565b6040518a63ffffffff1660e01b8152600401610f7e99989796959493929190613ac0565b600060405180830381600087803b158015610f9857600080fd5b505af1158015610fac573d6000803e3d6000fd5b505050508a73ffffffffffffffffffffffffffffffffffffffff166379cc679033858d610fd99190613830565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561104457600080fd5b505af1158015611058573d6000803e3d6000fd5b5050600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905550505050505050505050505050565b60096020908152600092835260408084209091529082529020805481906110b790613a6d565b80601f01602080910402602001604051908101604052809291908181526020018280546110e390613a6d565b80156111305780601f1061110557610100808354040283529160200191611130565b820191906000526020600020905b81548152906001019060200180831161111357829003601f168201915b50505060018401546002850154600386015460048701546005909701549596929591945092506fffffffffffffffffffffffffffffffff808316927001000000000000000000000000000000009004169060ff1687565b6000547501000000000000000000000000000000000000000000900460ff1661120c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207061757365640000000000000000000000000000000000000000000060448201526064016106b4565b60015473ffffffffffffffffffffffffffffffffffffffff16331461128d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6f6e6c792070617573657200000000000000000000000000000000000000000060448201526064016106b4565b600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b600280546112f890613a6d565b80601f016020809104026020016040519081016040528092919081815260200182805461132490613a6d565b80156113715780601f1061134657610100808354040283529160200191611371565b820191906000526020600020905b81548152906001019060200180831161135457829003601f168201915b505050505081565b600054610100900473ffffffffffffffffffffffffffffffffffffffff1633146113ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c792061646d696e0000000000000000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff811661147c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f7a65726f2061646472657373000000000000000000000000000000000000000060448201526064016106b4565b6001546040805133815273ffffffffffffffffffffffffffffffffffffffff928316602082015291831682820152517f9b3d82621a55ae56941a49b01b3111acf42e49f89b2af1a6dea8fb9886d3520c9181900360600190a1600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600054610100900473ffffffffffffffffffffffffffffffffffffffff1633146115a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c792061646d696e0000000000000000000000000000000000000000000060448201526064016106b4565b6040805161ffff831681523360208201527fa3f2d453e9999c008b07f10a428e6a33ce8dd4b9423bef99ff9cd579cedfb8b5910160405180910390a16001805461ffff90921674010000000000000000000000000000000000000000027fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6000547501000000000000000000000000000000000000000000900460ff16156116b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f706175736564000000000000000000000000000000000000000000000000000060448201526064016106b4565b60015473ffffffffffffffffffffffffffffffffffffffff163314611732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6f6e6c792070617573657200000000000000000000000000000000000000000060448201526064016106b4565b600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016112e1565b60005460ff161561180f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f616c726561647920696e697469616c697a65640000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff871661188c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f7a65726f2061646472657373000000000000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff8616611909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f7a65726f2061646472657373000000000000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff8216611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f7a65726f2061646472657373000000000000000000000000000000000000000060448201526064016106b4565b600180547fffffffffffffffffffff00000000000000000000000000000000000000000000167401000000000000000000000000000000000000000061ffff8816027fffffffffffffffffffffffff0000000000000000000000000000000000000000161773ffffffffffffffffffffffffffffffffffffffff8916908117909155600080547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101009092029190911790556002611a47848683613c05565b506003805473ffffffffffffffffffffffffffffffffffffffff9788167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155600480549390971692169190911790945550505060055550600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b600054610100900473ffffffffffffffffffffffffffffffffffffffff163314611b57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c792061646d696e0000000000000000000000000000000000000000000060448201526064016106b4565b62030d40816fffffffffffffffffffffffffffffffff161115611b7957600080fd5b6fffffffffffffffffffffffffffffffff841660009081526006602052604090205460ff16611c04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f657865637574696f6e20636861696e2069732064697361626c6500000000000060448201526064016106b4565b7f933e13f2c0174ad6202905ed6eb73212911941c4fb8daf560b05445099b52e2784848484604051611c399493929190613d20565b60405180910390a16fffffffffffffffffffffffffffffffff8416600090815260076020526040908190209051829190611c769086908690613786565b90815260405190819003602001902080546fffffffffffffffffffffffffffffffff929092167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905550505050565b600054610100900473ffffffffffffffffffffffffffffffffffffffff163314611d52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c792061646d696e0000000000000000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff8916611dcf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f7a65726f2061646472657373000000000000000000000000000000000000000060448201526064016106b4565b801580611e515750600660ff168973ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4b9190613843565b60ff1610155b611eb7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c696420746f6b656e20646563696d616c730000000000000000000060448201526064016106b4565b6040518060e0016040528089898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060208083018a905260408084018a9052606084018990526fffffffffffffffffffffffffffffffff8089166080860152871660a085015285151560c09094019390935261ffff8e1682526009815282822073ffffffffffffffffffffffffffffffffffffffff8e16835290522081518190611f759082613d61565b50602082015160018201556040820151600282015560608201516003820155608082015160a08301516fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600482015560c090910151600590910180549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090921691909117905550505050505050505050565b600054610100900473ffffffffffffffffffffffffffffffffffffffff163314612099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c792061646d696e0000000000000000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff8116612116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f7a65726f2061646472657373000000000000000000000000000000000000000060448201526064016106b4565b6000546040805133815273ffffffffffffffffffffffffffffffffffffffff6101009093048316602082015291831682820152517f9f6130d220a6021d90d78c7ed17b7cfb79f530974405b174fef75f671205513c9181900360600190a16000805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b600054610100900473ffffffffffffffffffffffffffffffffffffffff163314612246576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c792061646d696e0000000000000000000000000000000000000000000060448201526064016106b4565b7f212215b14b6f95abef8735f1a53e5383ebe2be1b7767190b1429c167e9b55a3182823360405161227993929190613e7b565b60405180910390a1600261228e828483613c05565b505050565b60085460ff1615612300576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6d75746578206c6f636b0000000000000000000000000000000000000000000060448201526064016106b4565b600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556000547501000000000000000000000000000000000000000000900460ff16156123b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f706175736564000000000000000000000000000000000000000000000000000060448201526064016106b4565b60005460ff1661241d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6e6f7420696e697469616c697a6564000000000000000000000000000000000060448201526064016106b4565b60015474010000000000000000000000000000000000000000900461ffff1660008181526006602052604090205460ff166124b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f636861696e2069732064697361626c650000000000000000000000000000000060448201526064016106b4565b61ffff8116600090815260096020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152808220815160e0810190925280548290829061250190613a6d565b80601f016020809104026020016040519081016040528092919081815260200182805461252d90613a6d565b801561257a5780601f1061254f5761010080835404028352916020019161257a565b820191906000526020600020905b81548152906001019060200180831161255d57829003601f168201915b505050918352505060018201546020820152600282015460408201526003820154606082015260048201546fffffffffffffffffffffffffffffffff80821660808401527001000000000000000000000000000000009091041660a082015260059091015460ff16151560c091820152810151909150612656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f6b656e2069732064697361626c656400000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600a6020908152604090912054908201518110156126ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6c657373207468616e206d696e20616d6f756e7400000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600b602052604081208054839290612721908490613830565b909155505073ffffffffffffffffffffffffffffffffffffffff84166000818152600a602090815260408083209290925581517f313ce56700000000000000000000000000000000000000000000000000000000815291516006939263313ce5679260048083019391928290030181865afa1580156127a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c89190613843565b6127d29190613866565b6127dd90600a61399f565b6127e790826137e2565b90506000600280546127f890613a6d565b80601f016020809104026020016040519081016040528092919081815260200182805461282490613a6d565b80156128715780601f1061284657610100808354040283529160200191612871565b820191906000526020600020905b81548152906001019060200180831161285457829003601f168201915b505050505090507fa5baec630f25dd3f696ae19213123aad0ca2dbade68c69d86cbef9501b740289848684846040516128ad9493929190613eb5565b60405180910390a160035483516040517fd7b2831e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163d7b2831e9161291791889190879087906000908190600401613efe565b600060405180830381600087803b15801561293157600080fd5b505af1158015612945573d6000803e3d6000fd5b5050600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905550505050505050565b60085460ff16156129e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6d75746578206c6f636b0000000000000000000000000000000000000000000060448201526064016106b4565b600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556000547501000000000000000000000000000000000000000000900460ff1615612a96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f706175736564000000000000000000000000000000000000000000000000000060448201526064016106b4565b60005460ff16612b02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6e6f7420696e697469616c697a6564000000000000000000000000000000000060448201526064016106b4565b60045473ffffffffffffffffffffffffffffffffffffffff163314612b83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6f6e6c79206578656375746f720000000000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff8416612c00576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f7a65726f2061646472657373000000000000000000000000000000000000000060448201526064016106b4565b8460055414612c6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6f6e6c792063616c6c657220636f6e747261637400000000000000000000000060448201526064016106b4565b600060068573ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cde9190613843565b612ce89190613866565b612cf390600a61399f565b9050612cff81846137c5565b9250612d0b81836137c5565b73ffffffffffffffffffffffffffffffffffffffff86166000908152600b6020526040812080549294508592909190612d45908490613830565b90915550506040805173ffffffffffffffffffffffffffffffffffffffff8781168252602082018690528616818301526060810184905232608082015290517f4c50a49b21c655b6eaa46cdcaeb12823f639494624bf1b241628ed46e6ea69ca9181900360a00190a1600082118015612dd4575073ffffffffffffffffffffffffffffffffffffffff84163214155b15612f0e5773ffffffffffffffffffffffffffffffffffffffff85166340c10f1985612e00858761381d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b158015612e6b57600080fd5b505af1158015612e7f573d6000803e3d6000fd5b50506040517f40c10f190000000000000000000000000000000000000000000000000000000081523260048201526024810185905273ffffffffffffffffffffffffffffffffffffffff881692506340c10f199150604401600060405180830381600087803b158015612ef157600080fd5b505af1158015612f05573d6000803e3d6000fd5b50505050612f97565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528616906340c10f1990604401600060405180830381600087803b158015612f7e57600080fd5b505af1158015612f92573d6000803e3d6000fd5b505050505b5050600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905550505050565b61ffff8316600090815260096020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812060030154819083116130565761ffff8516600090815260096020908152604080832073ffffffffffffffffffffffffffffffffffffffff881684529091529020600401546fffffffffffffffffffffffffffffffff166130b5565b61ffff8516600090815260096020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816845290915290206004015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b9050620f42406130d76fffffffffffffffffffffffffffffffff8316856137c5565b6130e191906137e2565b61ffff8616600090815260096020908152604080832073ffffffffffffffffffffffffffffffffffffffff891684529091529020600201546131239190613830565b95945050505050565b60006020828403121561313e57600080fd5b5035919050565b80356fffffffffffffffffffffffffffffffff8116811461316557600080fd5b919050565b8035801515811461316557600080fd5b6000806040838503121561318d57600080fd5b61319683613145565b91506131a46020840161316a565b90509250929050565b73ffffffffffffffffffffffffffffffffffffffff811681146131cf57600080fd5b50565b803561ffff8116811461316557600080fd5b60008083601f8401126131f657600080fd5b50813567ffffffffffffffff81111561320e57600080fd5b60208301915083602082850101111561322657600080fd5b9250929050565b60008060008060008060008060c0898b03121561324957600080fd5b8835613254816131ad565b97506020890135965061326960408a016131d2565b9550606089013567ffffffffffffffff8082111561328657600080fd5b6132928c838d016131e4565b909750955060808b01359150808211156132ab57600080fd5b506132b88b828c016131e4565b999c989b50969995989497949560a00135949350505050565b600080604083850312156132e457600080fd5b6132ed83613145565b915060208301356132fd816131ad565b809150509250929050565b6000815180845260005b8181101561332e57602081850181015186830182015201613312565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60e08152600061337f60e083018a613308565b602083019890985250604081019590955260608501939093526fffffffffffffffffffffffffffffffff91821660808501521660a0830152151560c090910152919050565b6000602082840312156133d657600080fd5b81356133e1816131ad565b9392505050565b6020815260006133e16020830184613308565b60006020828403121561340d57600080fd5b6133e1826131d2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561345857600080fd5b61346183613145565b9150602083013567ffffffffffffffff8082111561347e57600080fd5b818501915085601f83011261349257600080fd5b8135818111156134a4576134a4613416565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156134ea576134ea613416565b8160405282815288602084870101111561350357600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600080600080600080600060c0888a03121561354057600080fd5b873561354b816131ad565b9650602088013561355b816131ad565b9550613569604089016131d2565b9450606088013567ffffffffffffffff81111561358557600080fd5b6135918a828b016131e4565b90955093505060808801356135a5816131ad565b8092505060a0880135905092959891949750929550565b600080600080606085870312156135d257600080fd5b6135db85613145565b9350602085013567ffffffffffffffff8111156135f757600080fd5b613603878288016131e4565b9094509250613616905060408601613145565b905092959194509250565b6000806000806000806000806000806101208b8d03121561364157600080fd5b61364a8b6131d2565b995060208b013561365a816131ad565b985060408b013567ffffffffffffffff81111561367657600080fd5b6136828d828e016131e4565b90995097505060608b0135955060808b0135945060a08b013593506136a960c08c01613145565b92506136b760e08c01613145565b91506136c66101008c0161316a565b90509295989b9194979a5092959850565b6000602082840312156136e957600080fd5b6133e182613145565b6000806020838503121561370557600080fd5b823567ffffffffffffffff81111561371c57600080fd5b613728858286016131e4565b90969095509350505050565b600080600080600060a0868803121561374c57600080fd5b85359450602086013561375e816131ad565b9350604086013561376e816131ad565b94979396509394606081013594506080013592915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820281158282048414176137dc576137dc613796565b92915050565b600082613818577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b818103818111156137dc576137dc613796565b808201808211156137dc576137dc613796565b60006020828403121561385557600080fd5b815160ff811681146133e157600080fd5b60ff82811682821603908111156137dc576137dc613796565b600181815b808511156138d857817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156138be576138be613796565b808516156138cb57918102915b93841c9390800290613884565b509250929050565b6000826138ef575060016137dc565b816138fc575060006137dc565b8160018114613912576002811461391c57613938565b60019150506137dc565b60ff84111561392d5761392d613796565b50506001821b6137dc565b5060208310610133831016604e8410600b841016171561395b575081810a6137dc565b613965838361387f565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561399757613997613796565b029392505050565b60006133e160ff8416836138e0565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600061010061ffff8d16835273ffffffffffffffffffffffffffffffffffffffff8c1660208401528a6040840152806060840152613a388184018a8c6139ae565b905087608084015282810360a0840152613a538187896139ae565b60c0840195909552505060e0015298975050505050505050565b600181811c90821680613a8157607f821691505b602082108103613aba577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b61ffff8a16815260e060208201526000808a54613adc81613a6d565b8060e0860152610100600180841660008114613aff5760018114613b3757613b67565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008516838901528284151560051b8901019550613b67565b8f600052602060002060005b85811015613b5f5781548a820186015290830190602001613b43565b890184019650505b50505050508960408401528281036060840152613b8581898b6139ae565b905086608084015282810360a0840152613ba08186886139ae565b9150508260c08301529a9950505050505050505050565b601f82111561228e57600081815260208120601f850160051c81016020861015613bde5750805b601f850160051c820191505b81811015613bfd57828155600101613bea565b505050505050565b67ffffffffffffffff831115613c1d57613c1d613416565b613c3183613c2b8354613a6d565b83613bb7565b6000601f841160018114613c835760008515613c4d5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355613d19565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015613cd25786850135825560209485019460019092019101613cb2565b5086821015613d0d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60006fffffffffffffffffffffffffffffffff808716835260606020840152613d4d6060840186886139ae565b915080841660408401525095945050505050565b815167ffffffffffffffff811115613d7b57613d7b613416565b613d8f81613d898454613a6d565b84613bb7565b602080601f831160018114613de25760008415613dac5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613bfd565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613e2f57888601518255948401946001909101908401613e10565b5085821015613e6b57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b604081526000613e8f6040830185876139ae565b905073ffffffffffffffffffffffffffffffffffffffff83166020830152949350505050565b61ffff8516815273ffffffffffffffffffffffffffffffffffffffff84166020820152826040820152608060608201526000613ef46080830184613308565b9695505050505050565b61ffff8716815260e060208201526000613f1b60e0830188613308565b8660408401528281036060840152613f338187613308565b6080840195909552505080830360a08201526000835260c0015260200194935050505056fea2646970667358221220e8a16f1c2d4f4e5c1c82f9497069eecb36baae9afdc18cde8b38f082e9d4a62564736f6c63430008120033

Deployed Bytecode

0x6080604052600436106101a55760003560e01c8063b187bd26116100e1578063e2f273bd1161008a578063eb20dabf11610064578063eb20dabf1461056d578063f67db96b1461058d578063f851a440146105d3578063faaebd211461060557600080fd5b8063e2f273bd1461050d578063e45da5261461052d578063ea8c4bcf1461054d57600080fd5b8063c34c08e5116100bb578063c34c08e514610490578063ce4ea09f146104bd578063e22fe72f146104dd57600080fd5b8063b187bd261461040d578063b3c276e214610450578063bac9e1b71461047057600080fd5b80633f4ba83a1161014e5780635f7ebb05116101285780635f7ebb051461032f5780638456cb591461034f5780638497e666146103645780639fd0506d146103e057600080fd5b80633f4ba83a146102d857806346904840146102ed578063554bab3c1461030f57600080fd5b80632079b5a91161017f5780632079b5a91461024a5780632156d4211461026a57806327e235e31461029d57600080fd5b806303eadcfc146101b15780630bab6053146102085780631c47ae5e1461022a57600080fd5b366101ac57005b600080fd5b3480156101bd57600080fd5b506003546101de9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021457600080fd5b5061022861022336600461312c565b610632565b005b34801561023657600080fd5b5061022861024536600461317a565b6106f8565b34801561025657600080fd5b5061022861026536600461322d565b61081a565b34801561027657600080fd5b5061028a6102853660046132d1565b611091565b6040516101ff979695949392919061336c565b3480156102a957600080fd5b506102ca6102b83660046133c4565b600b6020526000908152604090205481565b6040519081526020016101ff565b3480156102e457600080fd5b50610228611187565b3480156102f957600080fd5b506103026112eb565b6040516101ff91906133e8565b34801561031b57600080fd5b5061022861032a3660046133c4565b611379565b34801561033b57600080fd5b5061022861034a3660046133fb565b61151c565b34801561035b57600080fd5b5061022861162b565b34801561037057600080fd5b506103bf61037f366004613445565b600760209081526000928352604090922081518083018401805192815290840192909301919091209152546fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020016101ff565b3480156103ec57600080fd5b506001546101de9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041957600080fd5b50600054610440907501000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016101ff565b34801561045c57600080fd5b5061022861046b366004613525565b6117a2565b34801561047c57600080fd5b5061022861048b3660046135bc565b611ad1565b34801561049c57600080fd5b506004546101de9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104c957600080fd5b506102286104d8366004613621565b611ccc565b3480156104e957600080fd5b506104406104f83660046136d7565b60066020526000908152604090205460ff1681565b34801561051957600080fd5b506102286105283660046133c4565b612013565b34801561053957600080fd5b506102286105483660046136f2565b6121c0565b34801561055957600080fd5b506102286105683660046133c4565b612293565b34801561057957600080fd5b50610228610588366004613734565b612978565b34801561059957600080fd5b506001546105c09074010000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020016101ff565b3480156105df57600080fd5b506000546101de90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561061157600080fd5b506102ca6106203660046133c4565b600a6020526000908152604090205481565b600054610100900473ffffffffffffffffffffffffffffffffffffffff1633146106bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c792061646d696e0000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b604080518281523360208201527fcff96c14f90d679c9b2edb1cd5b9990824d3083f97ade84c79539884ca33fc02910160405180910390a150565b600054610100900473ffffffffffffffffffffffffffffffffffffffff16331461077e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c792061646d696e0000000000000000000000000000000000000000000060448201526064016106b4565b604080516fffffffffffffffffffffffffffffffff841681523360208201527fcd8ca9842747d8162878825088ab13c89199cba4f7f23889db839b92328ef815910160405180910390a16fffffffffffffffffffffffffffffffff91909116600090815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60085460ff1615610887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6d75746578206c6f636b0000000000000000000000000000000000000000000060448201526064016106b4565b600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556000547501000000000000000000000000000000000000000000900460ff1615610938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f706175736564000000000000000000000000000000000000000000000000000060448201526064016106b4565b60005460ff166109a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6e6f7420696e697469616c697a6564000000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff8816610a21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f756e6176616c6961626c6520746f6b656e00000000000000000000000000000060448201526064016106b4565b61ffff861660009081526006602052604090205460ff16610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f657865637574696f6e20636861696e2069732064697361626c6500000000000060448201526064016106b4565b61ffff8616600090815260096020908152604080832073ffffffffffffffffffffffffffffffffffffffff8c16845290915290206005015460ff16610b3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f6b656e2069732064697361626c656400000000000000000000000000000060448201526064016106b4565b61ffff8616600090815260096020908152604080832073ffffffffffffffffffffffffffffffffffffffff8c168452909152902060010154871015610be0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6c657373207468616e206d696e20616d6f756e7400000000000000000000000060448201526064016106b4565b6000610bed878a8a612fc7565b9050808811610c58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f666565206d6f7265207468616e20616d6f756e7400000000000000000000000060448201526064016106b4565b8088039750818811610cc6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f676173736c65737320726577617264206d6f7265207468616e20616d6f756e7460448201526064016106b4565b61ffff87166000908152600760205260408082209051620f42409190610cef9088908890613786565b90815260405190819003602001902054610d1b906fffffffffffffffffffffffffffffffff16846137c5565b610d2591906137e2565b9050610d31818361381d565b73ffffffffffffffffffffffffffffffffffffffff8b166000908152600a602052604081208054909190610d66908490613830565b90915550610d769050818a613830565b73ffffffffffffffffffffffffffffffffffffffff8b166000908152600b602052604081208054909190610dab90849061381d565b92505081905550600060068b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e259190613843565b610e2f9190613866565b610e3a90600a61399f565b90507f846d48b5dad0cf4233578e8b84dff2bb1f49f5ef280b0a5abf783b1d06aeb4cc898c8c8b8b898c8c8a610e70818e61381d565b604051610e869a999897969594939291906139f7565b60405180910390a1600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d7b2831e8a600960008d61ffff166fffffffffffffffffffffffffffffffff16815260200190815260200160002060008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001848e610f4291906137e2565b8c8c610f4e888c6137e2565b8d8d610f5a8b8d6137e2565b6040518a63ffffffff1660e01b8152600401610f7e99989796959493929190613ac0565b600060405180830381600087803b158015610f9857600080fd5b505af1158015610fac573d6000803e3d6000fd5b505050508a73ffffffffffffffffffffffffffffffffffffffff166379cc679033858d610fd99190613830565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b15801561104457600080fd5b505af1158015611058573d6000803e3d6000fd5b5050600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905550505050505050505050505050565b60096020908152600092835260408084209091529082529020805481906110b790613a6d565b80601f01602080910402602001604051908101604052809291908181526020018280546110e390613a6d565b80156111305780601f1061110557610100808354040283529160200191611130565b820191906000526020600020905b81548152906001019060200180831161111357829003601f168201915b50505060018401546002850154600386015460048701546005909701549596929591945092506fffffffffffffffffffffffffffffffff808316927001000000000000000000000000000000009004169060ff1687565b6000547501000000000000000000000000000000000000000000900460ff1661120c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207061757365640000000000000000000000000000000000000000000060448201526064016106b4565b60015473ffffffffffffffffffffffffffffffffffffffff16331461128d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6f6e6c792070617573657200000000000000000000000000000000000000000060448201526064016106b4565b600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b600280546112f890613a6d565b80601f016020809104026020016040519081016040528092919081815260200182805461132490613a6d565b80156113715780601f1061134657610100808354040283529160200191611371565b820191906000526020600020905b81548152906001019060200180831161135457829003601f168201915b505050505081565b600054610100900473ffffffffffffffffffffffffffffffffffffffff1633146113ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c792061646d696e0000000000000000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff811661147c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f7a65726f2061646472657373000000000000000000000000000000000000000060448201526064016106b4565b6001546040805133815273ffffffffffffffffffffffffffffffffffffffff928316602082015291831682820152517f9b3d82621a55ae56941a49b01b3111acf42e49f89b2af1a6dea8fb9886d3520c9181900360600190a1600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600054610100900473ffffffffffffffffffffffffffffffffffffffff1633146115a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c792061646d696e0000000000000000000000000000000000000000000060448201526064016106b4565b6040805161ffff831681523360208201527fa3f2d453e9999c008b07f10a428e6a33ce8dd4b9423bef99ff9cd579cedfb8b5910160405180910390a16001805461ffff90921674010000000000000000000000000000000000000000027fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6000547501000000000000000000000000000000000000000000900460ff16156116b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f706175736564000000000000000000000000000000000000000000000000000060448201526064016106b4565b60015473ffffffffffffffffffffffffffffffffffffffff163314611732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6f6e6c792070617573657200000000000000000000000000000000000000000060448201526064016106b4565b600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016112e1565b60005460ff161561180f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f616c726561647920696e697469616c697a65640000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff871661188c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f7a65726f2061646472657373000000000000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff8616611909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f7a65726f2061646472657373000000000000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff8216611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f7a65726f2061646472657373000000000000000000000000000000000000000060448201526064016106b4565b600180547fffffffffffffffffffff00000000000000000000000000000000000000000000167401000000000000000000000000000000000000000061ffff8816027fffffffffffffffffffffffff0000000000000000000000000000000000000000161773ffffffffffffffffffffffffffffffffffffffff8916908117909155600080547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101009092029190911790556002611a47848683613c05565b506003805473ffffffffffffffffffffffffffffffffffffffff9788167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155600480549390971692169190911790945550505060055550600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b600054610100900473ffffffffffffffffffffffffffffffffffffffff163314611b57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c792061646d696e0000000000000000000000000000000000000000000060448201526064016106b4565b62030d40816fffffffffffffffffffffffffffffffff161115611b7957600080fd5b6fffffffffffffffffffffffffffffffff841660009081526006602052604090205460ff16611c04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f657865637574696f6e20636861696e2069732064697361626c6500000000000060448201526064016106b4565b7f933e13f2c0174ad6202905ed6eb73212911941c4fb8daf560b05445099b52e2784848484604051611c399493929190613d20565b60405180910390a16fffffffffffffffffffffffffffffffff8416600090815260076020526040908190209051829190611c769086908690613786565b90815260405190819003602001902080546fffffffffffffffffffffffffffffffff929092167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905550505050565b600054610100900473ffffffffffffffffffffffffffffffffffffffff163314611d52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c792061646d696e0000000000000000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff8916611dcf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f7a65726f2061646472657373000000000000000000000000000000000000000060448201526064016106b4565b801580611e515750600660ff168973ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4b9190613843565b60ff1610155b611eb7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c696420746f6b656e20646563696d616c730000000000000000000060448201526064016106b4565b6040518060e0016040528089898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505060208083018a905260408084018a9052606084018990526fffffffffffffffffffffffffffffffff8089166080860152871660a085015285151560c09094019390935261ffff8e1682526009815282822073ffffffffffffffffffffffffffffffffffffffff8e16835290522081518190611f759082613d61565b50602082015160018201556040820151600282015560608201516003820155608082015160a08301516fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600482015560c090910151600590910180549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090921691909117905550505050505050505050565b600054610100900473ffffffffffffffffffffffffffffffffffffffff163314612099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c792061646d696e0000000000000000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff8116612116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f7a65726f2061646472657373000000000000000000000000000000000000000060448201526064016106b4565b6000546040805133815273ffffffffffffffffffffffffffffffffffffffff6101009093048316602082015291831682820152517f9f6130d220a6021d90d78c7ed17b7cfb79f530974405b174fef75f671205513c9181900360600190a16000805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b600054610100900473ffffffffffffffffffffffffffffffffffffffff163314612246576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c792061646d696e0000000000000000000000000000000000000000000060448201526064016106b4565b7f212215b14b6f95abef8735f1a53e5383ebe2be1b7767190b1429c167e9b55a3182823360405161227993929190613e7b565b60405180910390a1600261228e828483613c05565b505050565b60085460ff1615612300576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6d75746578206c6f636b0000000000000000000000000000000000000000000060448201526064016106b4565b600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556000547501000000000000000000000000000000000000000000900460ff16156123b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f706175736564000000000000000000000000000000000000000000000000000060448201526064016106b4565b60005460ff1661241d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6e6f7420696e697469616c697a6564000000000000000000000000000000000060448201526064016106b4565b60015474010000000000000000000000000000000000000000900461ffff1660008181526006602052604090205460ff166124b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f636861696e2069732064697361626c650000000000000000000000000000000060448201526064016106b4565b61ffff8116600090815260096020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152808220815160e0810190925280548290829061250190613a6d565b80601f016020809104026020016040519081016040528092919081815260200182805461252d90613a6d565b801561257a5780601f1061254f5761010080835404028352916020019161257a565b820191906000526020600020905b81548152906001019060200180831161255d57829003601f168201915b505050918352505060018201546020820152600282015460408201526003820154606082015260048201546fffffffffffffffffffffffffffffffff80821660808401527001000000000000000000000000000000009091041660a082015260059091015460ff16151560c091820152810151909150612656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f6b656e2069732064697361626c656400000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600a6020908152604090912054908201518110156126ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6c657373207468616e206d696e20616d6f756e7400000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600b602052604081208054839290612721908490613830565b909155505073ffffffffffffffffffffffffffffffffffffffff84166000818152600a602090815260408083209290925581517f313ce56700000000000000000000000000000000000000000000000000000000815291516006939263313ce5679260048083019391928290030181865afa1580156127a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c89190613843565b6127d29190613866565b6127dd90600a61399f565b6127e790826137e2565b90506000600280546127f890613a6d565b80601f016020809104026020016040519081016040528092919081815260200182805461282490613a6d565b80156128715780601f1061284657610100808354040283529160200191612871565b820191906000526020600020905b81548152906001019060200180831161285457829003601f168201915b505050505090507fa5baec630f25dd3f696ae19213123aad0ca2dbade68c69d86cbef9501b740289848684846040516128ad9493929190613eb5565b60405180910390a160035483516040517fd7b2831e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163d7b2831e9161291791889190879087906000908190600401613efe565b600060405180830381600087803b15801561293157600080fd5b505af1158015612945573d6000803e3d6000fd5b5050600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905550505050505050565b60085460ff16156129e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6d75746578206c6f636b0000000000000000000000000000000000000000000060448201526064016106b4565b600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556000547501000000000000000000000000000000000000000000900460ff1615612a96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f706175736564000000000000000000000000000000000000000000000000000060448201526064016106b4565b60005460ff16612b02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6e6f7420696e697469616c697a6564000000000000000000000000000000000060448201526064016106b4565b60045473ffffffffffffffffffffffffffffffffffffffff163314612b83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6f6e6c79206578656375746f720000000000000000000000000000000000000060448201526064016106b4565b73ffffffffffffffffffffffffffffffffffffffff8416612c00576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f7a65726f2061646472657373000000000000000000000000000000000000000060448201526064016106b4565b8460055414612c6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6f6e6c792063616c6c657220636f6e747261637400000000000000000000000060448201526064016106b4565b600060068573ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cde9190613843565b612ce89190613866565b612cf390600a61399f565b9050612cff81846137c5565b9250612d0b81836137c5565b73ffffffffffffffffffffffffffffffffffffffff86166000908152600b6020526040812080549294508592909190612d45908490613830565b90915550506040805173ffffffffffffffffffffffffffffffffffffffff8781168252602082018690528616818301526060810184905232608082015290517f4c50a49b21c655b6eaa46cdcaeb12823f639494624bf1b241628ed46e6ea69ca9181900360a00190a1600082118015612dd4575073ffffffffffffffffffffffffffffffffffffffff84163214155b15612f0e5773ffffffffffffffffffffffffffffffffffffffff85166340c10f1985612e00858761381d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401600060405180830381600087803b158015612e6b57600080fd5b505af1158015612e7f573d6000803e3d6000fd5b50506040517f40c10f190000000000000000000000000000000000000000000000000000000081523260048201526024810185905273ffffffffffffffffffffffffffffffffffffffff881692506340c10f199150604401600060405180830381600087803b158015612ef157600080fd5b505af1158015612f05573d6000803e3d6000fd5b50505050612f97565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528616906340c10f1990604401600060405180830381600087803b158015612f7e57600080fd5b505af1158015612f92573d6000803e3d6000fd5b505050505b5050600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905550505050565b61ffff8316600090815260096020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812060030154819083116130565761ffff8516600090815260096020908152604080832073ffffffffffffffffffffffffffffffffffffffff881684529091529020600401546fffffffffffffffffffffffffffffffff166130b5565b61ffff8516600090815260096020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816845290915290206004015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b9050620f42406130d76fffffffffffffffffffffffffffffffff8316856137c5565b6130e191906137e2565b61ffff8616600090815260096020908152604080832073ffffffffffffffffffffffffffffffffffffffff891684529091529020600201546131239190613830565b95945050505050565b60006020828403121561313e57600080fd5b5035919050565b80356fffffffffffffffffffffffffffffffff8116811461316557600080fd5b919050565b8035801515811461316557600080fd5b6000806040838503121561318d57600080fd5b61319683613145565b91506131a46020840161316a565b90509250929050565b73ffffffffffffffffffffffffffffffffffffffff811681146131cf57600080fd5b50565b803561ffff8116811461316557600080fd5b60008083601f8401126131f657600080fd5b50813567ffffffffffffffff81111561320e57600080fd5b60208301915083602082850101111561322657600080fd5b9250929050565b60008060008060008060008060c0898b03121561324957600080fd5b8835613254816131ad565b97506020890135965061326960408a016131d2565b9550606089013567ffffffffffffffff8082111561328657600080fd5b6132928c838d016131e4565b909750955060808b01359150808211156132ab57600080fd5b506132b88b828c016131e4565b999c989b50969995989497949560a00135949350505050565b600080604083850312156132e457600080fd5b6132ed83613145565b915060208301356132fd816131ad565b809150509250929050565b6000815180845260005b8181101561332e57602081850181015186830182015201613312565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60e08152600061337f60e083018a613308565b602083019890985250604081019590955260608501939093526fffffffffffffffffffffffffffffffff91821660808501521660a0830152151560c090910152919050565b6000602082840312156133d657600080fd5b81356133e1816131ad565b9392505050565b6020815260006133e16020830184613308565b60006020828403121561340d57600080fd5b6133e1826131d2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561345857600080fd5b61346183613145565b9150602083013567ffffffffffffffff8082111561347e57600080fd5b818501915085601f83011261349257600080fd5b8135818111156134a4576134a4613416565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156134ea576134ea613416565b8160405282815288602084870101111561350357600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600080600080600080600060c0888a03121561354057600080fd5b873561354b816131ad565b9650602088013561355b816131ad565b9550613569604089016131d2565b9450606088013567ffffffffffffffff81111561358557600080fd5b6135918a828b016131e4565b90955093505060808801356135a5816131ad565b8092505060a0880135905092959891949750929550565b600080600080606085870312156135d257600080fd5b6135db85613145565b9350602085013567ffffffffffffffff8111156135f757600080fd5b613603878288016131e4565b9094509250613616905060408601613145565b905092959194509250565b6000806000806000806000806000806101208b8d03121561364157600080fd5b61364a8b6131d2565b995060208b013561365a816131ad565b985060408b013567ffffffffffffffff81111561367657600080fd5b6136828d828e016131e4565b90995097505060608b0135955060808b0135945060a08b013593506136a960c08c01613145565b92506136b760e08c01613145565b91506136c66101008c0161316a565b90509295989b9194979a5092959850565b6000602082840312156136e957600080fd5b6133e182613145565b6000806020838503121561370557600080fd5b823567ffffffffffffffff81111561371c57600080fd5b613728858286016131e4565b90969095509350505050565b600080600080600060a0868803121561374c57600080fd5b85359450602086013561375e816131ad565b9350604086013561376e816131ad565b94979396509394606081013594506080013592915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820281158282048414176137dc576137dc613796565b92915050565b600082613818577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b818103818111156137dc576137dc613796565b808201808211156137dc576137dc613796565b60006020828403121561385557600080fd5b815160ff811681146133e157600080fd5b60ff82811682821603908111156137dc576137dc613796565b600181815b808511156138d857817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156138be576138be613796565b808516156138cb57918102915b93841c9390800290613884565b509250929050565b6000826138ef575060016137dc565b816138fc575060006137dc565b8160018114613912576002811461391c57613938565b60019150506137dc565b60ff84111561392d5761392d613796565b50506001821b6137dc565b5060208310610133831016604e8410600b841016171561395b575081810a6137dc565b613965838361387f565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561399757613997613796565b029392505050565b60006133e160ff8416836138e0565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600061010061ffff8d16835273ffffffffffffffffffffffffffffffffffffffff8c1660208401528a6040840152806060840152613a388184018a8c6139ae565b905087608084015282810360a0840152613a538187896139ae565b60c0840195909552505060e0015298975050505050505050565b600181811c90821680613a8157607f821691505b602082108103613aba577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b61ffff8a16815260e060208201526000808a54613adc81613a6d565b8060e0860152610100600180841660008114613aff5760018114613b3757613b67565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008516838901528284151560051b8901019550613b67565b8f600052602060002060005b85811015613b5f5781548a820186015290830190602001613b43565b890184019650505b50505050508960408401528281036060840152613b8581898b6139ae565b905086608084015282810360a0840152613ba08186886139ae565b9150508260c08301529a9950505050505050505050565b601f82111561228e57600081815260208120601f850160051c81016020861015613bde5750805b601f850160051c820191505b81811015613bfd57828155600101613bea565b505050505050565b67ffffffffffffffff831115613c1d57613c1d613416565b613c3183613c2b8354613a6d565b83613bb7565b6000601f841160018114613c835760008515613c4d5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355613d19565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015613cd25786850135825560209485019460019092019101613cb2565b5086821015613d0d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60006fffffffffffffffffffffffffffffffff808716835260606020840152613d4d6060840186886139ae565b915080841660408401525095945050505050565b815167ffffffffffffffff811115613d7b57613d7b613416565b613d8f81613d898454613a6d565b84613bb7565b602080601f831160018114613de25760008415613dac5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613bfd565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613e2f57888601518255948401946001909101908401613e10565b5085821015613e6b57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b604081526000613e8f6040830185876139ae565b905073ffffffffffffffffffffffffffffffffffffffff83166020830152949350505050565b61ffff8516815273ffffffffffffffffffffffffffffffffffffffff84166020820152826040820152608060608201526000613ef46080830184613308565b9695505050505050565b61ffff8716815260e060208201526000613f1b60e0830188613308565b8660408401528281036060840152613f338187613308565b6080840195909552505080830360a08201526000835260c0015260200194935050505056fea2646970667358221220e8a16f1c2d4f4e5c1c82f9497069eecb36baae9afdc18cde8b38f082e9d4a62564736f6c63430008120033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.