Contract 0x130966628846BFd36ff31a822705796e8cb8C18D 9

This is the official MIM token deployed by Abracadabra.Money.
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xa11ca3ee76aa20bd20a0fcc15661494833d93cbe08138943b255cc53fd6e16d7Transfer79749512021-12-08 15:56:0855 secs ago0x13c9b48b27872c8064f757137d4c08592ea5c450 IN  Abracadabra.money: MIM Token0 AVAX0.00194468906437.703847843
0x893957cb2a0fd7450328581c7c3b8b86d955b4e9b2cb367dba2bb01e3fbd90e3Approve79749502021-12-08 15:56:0756 secs ago0x0edfcf9bb8b59b07e53b9b1c4d92351e8d922ab8 IN  Abracadabra.money: MIM Token0 AVAX0.001777236374 38.129119196
0x6f2eee0c4bf6956b072ad014c138e880c4f04f4e7c72f9bde6027e8d019d6ab1Transfer79749442021-12-08 15:55:551 min ago0x78e752fab271bc6dab4a92f0bc2fdea3d01fa903 IN  Abracadabra.money: MIM Token0 AVAX0.001642266537.703847843
0xd8bb5d2d078e24ecfd8dc2bd1f8b998f4462ab85c761de932322f2cc3cc75662Approve79749442021-12-08 15:55:551 min ago0x5efa579f08775d1a702e9e31ea570995e8a7c302 IN  Abracadabra.money: MIM Token0 AVAX0.001746756221 37.717955165
0xaff00f4f738986d8ab43f7dc5f3b194996a75b9f3439ecd0a4c305678f63bd5eTransfer79749432021-12-08 15:55:541 min ago0xfd3afef97ea664918d78bc761997bec27fce010e IN  Abracadabra.money: MIM Token0 AVAX0.00195271748437.8506975
0x0e09211b6a7e880e44a2ed4412238660a3b9ba96d0834880232a1d002e4020ecTransfer79749432021-12-08 15:55:541 min ago0x7a4d26cd71f4b3f92d34318a015a472701673be8 IN  Abracadabra.money: MIM Token0 AVAX0.001952263275 37.8506975
0x654cee03c3001bd9588c1d97e80c2c5153ac74d5559c1e4d6ae508e0cabb144fApprove79749432021-12-08 15:55:541 min ago0x5868db3229de022ac14c72c79f71de6722d8d308 IN  Abracadabra.money: MIM Token0 AVAX0.00180823779838.794228803
0x8b7fb9e36ce5f6ad0cfe88d2f5c52c8dd990f483a51b5d5d8e0d96de36c309f1Approve79749422021-12-08 15:55:521 min ago0xd8bc3614df9f3edda62014b9dcc4a4aaa618946e IN  Abracadabra.money: MIM Token0 AVAX0.00179992946638.615980484
0xece3a13db87e7f23f04074a4bc7b634b960ce1fe9890d79341d3a8da5933a9d9Transfer79749102021-12-08 15:54:482 mins ago0x6fd150a024e8846b5cccf8ede9fc39adf3fa7f5d IN  Abracadabra.money: MIM Token0 AVAX0.001937343015 37.543952088
0x4ecc505a7e9559b6f4466b2b68f409bc70d4b31b2bec4936f8e4c193b68852d1Approve79749102021-12-08 15:54:482 mins ago0xc74c7a65efc57dfd0cc2472c230ce429fb225ee3 IN  Abracadabra.money: MIM Token0 AVAX0.001750941024 37.564974457
0x1a16028ddd8f48c3dab7479ffdba6b667e81768aa8f8353139dc651b13b28e3dTransfer79748832021-12-08 15:54:003 mins ago0x6c93297c3c099842fa517d467bb820cc4ac7ef34 IN  Abracadabra.money: MIM Token0 AVAX0.001283005439 37.186407718
0x4d51e813761caedaa9436913e14c59e2cfe1960b7ee103697829484961b0696cApprove79748662021-12-08 15:53:223 mins ago0x2b0982b0220c55f8ec03762efda35098f8563523 IN  Abracadabra.money: MIM Token0 AVAX0.001733927988 37.199973998
0xe398d275ffb26230322eeb111bdaf6ee25e4c80226394803e1f494e1cb433d9eTransfer79748662021-12-08 15:53:223 mins ago0x2d2f29167bbada4e4425a2aa1b0906b9de34985c IN  Abracadabra.money: MIM Token0 AVAX0.001315026673 38.114505636
0x4d5f0b12811494dd64fe842a236bd87479076281511d87db62558760cba1ad6bApprove79748492021-12-08 15:52:484 mins ago0x3b1a8457397ae5bee1dcad39ddfdf07f460a626a IN  Abracadabra.money: MIM Token0 AVAX0.00174193435337.38136771
0x3afbfc2b05bc790375cd6108dfd7aa5c449291df06fe1cc2e0a7207224ce8601Transfer79748492021-12-08 15:52:484 mins ago0xe10985548e2b45724f2304428fb0b8f644c45206 IN  Abracadabra.money: MIM Token0 AVAX0.001940121904 37.615299247
0xfd23325eba9d8423b2ebdda51bd07ad81cfdd5659fea59632d77b4715a386804Approve79748372021-12-08 15:52:234 mins ago0x7c550707807cc295e5567c0199b4140e9d1226ad IN  Abracadabra.money: MIM Token0 AVAX0.001750103353 37.547002918
0x9a6dfc9c4f5fb7559bf221cbb479d19007734d8ee61d23780c1668bd3d380fbdApprove79747992021-12-08 15:51:065 mins ago0x7c267a32750a75bc3a4689103e263cbcf06340e8 IN  Abracadabra.money: MIM Token0 AVAX0.00176053747537.770858282
0x52e77cc9331d6d0153e29a75a931bbffd84de2255e5082d9be2e6db6800d0e16Approve79747982021-12-08 15:51:055 mins ago0x630420f4855576668a63a1f03170a49bcbd1d5a6 IN  Abracadabra.money: MIM Token0 AVAX0.0017738214538.055854845
0x8c10fe36b73afb7abec6bb86b9eca6b21a253b5184f429cd258a2f3901a8ebd7Approve79747802021-12-08 15:50:296 mins ago0x5087ca13a10ea8275d80e35f757cee35a69c145a IN  Abracadabra.money: MIM Token0 AVAX0.0017718788438.01417779
0x7ee282bd7eafe7aebe69edc6a017f43a02466c0e6261ed348849a5b9e6410116Transfer79747712021-12-08 15:50:106 mins ago0xc2b11a0cd1f295ccc27b3b57030f1a6f7bdc47b3 IN  Abracadabra.money: MIM Token0 AVAX0.00131617565 38.174361933
0x05c4afcbe4279fd06d098dda45dd9cd5ec9f94f9540a2b146bee4bcef77299e6Approve79747702021-12-08 15:50:076 mins ago0x54201c282b5cd04373d3f3422ac58c239bfb87bf IN  Abracadabra.money: MIM Token0 AVAX0.001792999765 38.467309548
0x6c1b62167b612ee02dfcba6435813c0c0e3f5e3e481ddfc30fa9ae283d792a6eApprove79747542021-12-08 15:49:377 mins ago0x08183033841b25f12b5339b321967616fd36c056 IN  Abracadabra.money: MIM Token0 AVAX0.001774757474 38.075936471
0x418987dcdf2c60ae919fe9e2326be1cb271e69d09a6b7a0ffc1bf286b7b24bf5Transfer79747402021-12-08 15:49:107 mins ago0x6241c798214d914472590df629255737b14fe07a IN  Abracadabra.money: MIM Token0 AVAX0.001975744313 38.305950481
0xae567917e0f17f722b5754a7a91eb0107a6b295f653e7105672d62ef1b93025dTransfer79747332021-12-08 15:48:558 mins ago0x2855e2436257fe77eaee688a05ca6d6731c49945 IN  Abracadabra.money: MIM Token0 AVAX0.001970564314 38.205520076
0x85fe804c76199b973e76d0deb723d79b75dbb4febaca14bf4c18f990cdb4b791Approve79747282021-12-08 15:48:438 mins ago0xa892b6ba0d0e5f16e6279a179ac057be77e8ea85 IN  Abracadabra.money: MIM Token0 AVAX0.001785221315 38.300429417
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AnyswapV5ERC20

Compiler Version
v0.8.2+commit.661d1103

Optimization Enabled:
Yes with 200 runs

Other Settings:
istanbul EvmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at snowtrace.io on 2021-11-05
*/

// SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity 0.8.2;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    function permit(address target, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;
    function transferWithPermit(address target, address to, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * @dev Interface of the ERC2612 standard as defined in the EIP.
 *
 * Adds the {permit} method, which can be used to change one's
 * {IERC20-allowance} without having to send a transaction, by signing a
 * message. This allows users to spend tokens without having to hold Ether.
 *
 * See https://eips.ethereum.org/EIPS/eip-2612.
 */
interface IERC2612 {

    /**
     * @dev Returns the current ERC2612 nonce for `owner`. This value must be
     * included whenever a signature is generated for {permit}.
     *
     * Every successful call to {permit} increases ``owner``'s nonce by one. This
     * prevents a signature from being used multiple times.
     */
    function nonces(address owner) external view returns (uint256);
}

/// @dev Wrapped ERC-20 v10 (AnyswapV3ERC20) is an ERC-20 ERC-20 wrapper. You can `deposit` ERC-20 and obtain an AnyswapV3ERC20 balance which can then be operated as an ERC-20 token. You can
/// `withdraw` ERC-20 from AnyswapV3ERC20, which will then burn AnyswapV3ERC20 token in your wallet. The amount of AnyswapV3ERC20 token in any wallet is always identical to the
/// balance of ERC-20 deposited minus the ERC-20 withdrawn with that specific wallet.
interface IAnyswapV3ERC20 is IERC20, IERC2612 {

    /// @dev Sets `value` as allowance of `spender` account over caller account's AnyswapV3ERC20 token,
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// Emits {Approval} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// For more information on approveAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);

    /// @dev Moves `value` AnyswapV3ERC20 token from caller's account to account (`to`),
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// A transfer to `address(0)` triggers an ERC-20 withdraw matching the sent AnyswapV3ERC20 token in favor of caller.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - caller account must have at least `value` AnyswapV3ERC20 token.
    /// For more information on transferAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function transferAndCall(address to, uint value, bytes calldata data) external returns (bool);
}

interface ITransferReceiver {
    function onTokenTransfer(address, uint, bytes calldata) external returns (bool);
}

interface IApprovalReceiver {
    function onTokenApproval(address, uint, bytes calldata) external returns (bool);
}

library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != 0x0 && codehash != accountHash);
    }
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint value) internal {
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
    function callOptionalReturn(IERC20 token, bytes memory data) private {
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

contract AnyswapV5ERC20 is IAnyswapV3ERC20 {
    using SafeERC20 for IERC20;
    string public name;
    string public symbol;
    uint8  public immutable override decimals;

    address public immutable underlying;

    bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 public constant TRANSFER_TYPEHASH = keccak256("Transfer(address owner,address to,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 public immutable DOMAIN_SEPARATOR;

    /// @dev Records amount of AnyswapV3ERC20 token owned by account.
    mapping (address => uint256) public override balanceOf;
    uint256 private _totalSupply;

    // init flag for setting immediate vault, needed for CREATE2 support
    bool private _init;

    // flag to enable/disable swapout vs vault.burn so multiple events are triggered
    bool private _vaultOnly;

    // configurable delay for timelock functions
    uint public delay = 2*24*3600;


    // set of minters, can be this bridge or other bridges
    mapping(address => bool) public isMinter;
    address[] public minters;

    // primary controller of the token contract
    address public vault;

    address public pendingMinter;
    uint public delayMinter;

    address public pendingVault;
    uint public delayVault;

    uint public pendingDelay;
    uint public delayDelay;


    modifier onlyAuth() {
        require(isMinter[msg.sender], "AnyswapV4ERC20: FORBIDDEN");
        _;
    }

    modifier onlyVault() {
        require(msg.sender == mpc(), "AnyswapV3ERC20: FORBIDDEN");
        _;
    }

    function owner() public view returns (address) {
        return mpc();
    }

    function mpc() public view returns (address) {
        if (block.timestamp >= delayVault) {
            return pendingVault;
        }
        return vault;
    }

    function setVaultOnly(bool enabled) external onlyVault {
        _vaultOnly = enabled;
    }

    function initVault(address _vault) external onlyVault {
        require(_init);
        vault = _vault;
        pendingVault = _vault;
        isMinter[_vault] = true;
        minters.push(_vault);
        delayVault = block.timestamp;
        _init = false;
    }

    function setMinter(address _auth) external onlyVault {
        pendingMinter = _auth;
        delayMinter = block.timestamp + delay;
    }

    function setVault(address _vault) external onlyVault {
        pendingVault = _vault;
        delayVault = block.timestamp + delay;
    }

    function applyVault() external onlyVault {
        require(block.timestamp >= delayVault);
        vault = pendingVault;
    }

    function applyMinter() external onlyVault {
        require(block.timestamp >= delayMinter);
        isMinter[pendingMinter] = true;
        minters.push(pendingMinter);
    }

    // No time delay revoke minter emergency function
    function revokeMinter(address _auth) external onlyVault {
        isMinter[_auth] = false;
    }

    function getAllMinters() external view returns (address[] memory) {
        return minters;
    }


    function changeVault(address newVault) external onlyVault returns (bool) {
        require(newVault != address(0), "AnyswapV3ERC20: address(0x0)");
        pendingVault = newVault;
        delayVault = block.timestamp + delay;
        emit LogChangeVault(vault, pendingVault, delayVault);
        return true;
    }

    function changeMPCOwner(address newVault) public onlyVault returns (bool) {
        require(newVault != address(0), "AnyswapV3ERC20: address(0x0)");
        pendingVault = newVault;
        delayVault = block.timestamp + delay;
        emit LogChangeMPCOwner(vault, pendingVault, delayVault);
        return true;
    }

    function mint(address to, uint256 amount) external onlyAuth returns (bool) {
        _mint(to, amount);
        return true;
    }

    function burn(address from, uint256 amount) external onlyAuth returns (bool) {
        require(from != address(0), "AnyswapV3ERC20: address(0x0)");
        _burn(from, amount);
        return true;
    }

    function Swapin(bytes32 txhash, address account, uint256 amount) public onlyAuth returns (bool) {
        _mint(account, amount);
        emit LogSwapin(txhash, account, amount);
        return true;
    }

    function Swapout(uint256 amount, address bindaddr) public returns (bool) {
        require(!_vaultOnly, "AnyswapV4ERC20: onlyAuth");
        require(bindaddr != address(0), "AnyswapV3ERC20: address(0x0)");
        _burn(msg.sender, amount);
        emit LogSwapout(msg.sender, bindaddr, amount);
        return true;
    }

    /// @dev Records current ERC2612 nonce for account. This value must be included whenever signature is generated for {permit}.
    /// Every successful call to {permit} increases account's nonce by one. This prevents signature from being used multiple times.
    mapping (address => uint256) public override nonces;

    /// @dev Records number of AnyswapV3ERC20 token that account (second) will be allowed to spend on behalf of another account (first) through {transferFrom}.
    mapping (address => mapping (address => uint256)) public override allowance;

    event LogChangeVault(address indexed oldVault, address indexed newVault, uint indexed effectiveTime);
    event LogChangeMPCOwner(address indexed oldOwner, address indexed newOwner, uint indexed effectiveHeight);
    event LogSwapin(bytes32 indexed txhash, address indexed account, uint amount);
    event LogSwapout(address indexed account, address indexed bindaddr, uint amount);
    event LogAddAuth(address indexed auth, uint timestamp);

    constructor(string memory _name, string memory _symbol, uint8 _decimals, address _underlying, address _vault) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;
        underlying = _underlying;
        if (_underlying != address(0x0)) {
            require(_decimals == IERC20(_underlying).decimals());
        }

        // Use init to allow for CREATE2 accross all chains
        _init = true;

        // Disable/Enable swapout for v1 tokens vs mint/burn for v3 tokens
        _vaultOnly = false;

        vault = _vault;
        pendingVault = _vault;
        delayVault = block.timestamp;

        uint256 chainId;
        assembly {chainId := chainid()}
        DOMAIN_SEPARATOR = keccak256(
            abi.encode(
                keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                keccak256(bytes(name)),
                keccak256(bytes("1")),
                chainId,
                address(this)));
    }

    /// @dev Returns the total supply of AnyswapV3ERC20 token as the ETH held in this contract.
    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }

    function depositWithPermit(address target, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) external returns (uint) {
        IERC20(underlying).permit(target, address(this), value, deadline, v, r, s);
        IERC20(underlying).safeTransferFrom(target, address(this), value);
        return _deposit(value, to);
    }

    function depositWithTransferPermit(address target, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) external returns (uint) {
        IERC20(underlying).transferWithPermit(target, address(this), value, deadline, v, r, s);
        return _deposit(value, to);
    }

    function deposit() external returns (uint) {
        uint _amount = IERC20(underlying).balanceOf(msg.sender);
        IERC20(underlying).safeTransferFrom(msg.sender, address(this), _amount);
        return _deposit(_amount, msg.sender);
    }

    function deposit(uint amount) external returns (uint) {
        IERC20(underlying).safeTransferFrom(msg.sender, address(this), amount);
        return _deposit(amount, msg.sender);
    }

    function deposit(uint amount, address to) external returns (uint) {
        IERC20(underlying).safeTransferFrom(msg.sender, address(this), amount);
        return _deposit(amount, to);
    }

    function depositVault(uint amount, address to) external onlyVault returns (uint) {
        return _deposit(amount, to);
    }

    function _deposit(uint amount, address to) internal returns (uint) {
        require(underlying != address(0x0) && underlying != address(this));
        _mint(to, amount);
        return amount;
    }

    function withdraw() external returns (uint) {
        return _withdraw(msg.sender, balanceOf[msg.sender], msg.sender);
    }

    function withdraw(uint amount) external returns (uint) {
        return _withdraw(msg.sender, amount, msg.sender);
    }

    function withdraw(uint amount, address to) external returns (uint) {
        return _withdraw(msg.sender, amount, to);
    }

    function withdrawVault(address from, uint amount, address to) external onlyVault returns (uint) {
        return _withdraw(from, amount, to);
    }

    function _withdraw(address from, uint amount, address to) internal returns (uint) {
        _burn(from, amount);
        IERC20(underlying).safeTransfer(to, amount);
        return amount;
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        balanceOf[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: burn from the zero address");

        balanceOf[account] -= amount;
        _totalSupply -= amount;
        emit Transfer(account, address(0), amount);
    }

    /// @dev Sets `value` as allowance of `spender` account over caller account's AnyswapV3ERC20 token.
    /// Emits {Approval} event.
    /// Returns boolean value indicating whether operation succeeded.
    function approve(address spender, uint256 value) external override returns (bool) {
        // _approve(msg.sender, spender, value);
        allowance[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);

        return true;
    }

    /// @dev Sets `value` as allowance of `spender` account over caller account's AnyswapV3ERC20 token,
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// Emits {Approval} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// For more information on approveAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function approveAndCall(address spender, uint256 value, bytes calldata data) external override returns (bool) {
        // _approve(msg.sender, spender, value);
        allowance[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);

        return IApprovalReceiver(spender).onTokenApproval(msg.sender, value, data);
    }

    /// @dev Sets `value` as allowance of `spender` account over `owner` account's AnyswapV3ERC20 token, given `owner` account's signed approval.
    /// Emits {Approval} event.
    /// Requirements:
    ///   - `deadline` must be timestamp in future.
    ///   - `v`, `r` and `s` must be valid `secp256k1` signature from `owner` account over EIP712-formatted function arguments.
    ///   - the signature must use `owner` account's current nonce (see {nonces}).
    ///   - the signer cannot be zero address and must be `owner` account.
    /// For more information on signature format, see https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section].
    /// AnyswapV3ERC20 token implementation adapted from https://github.com/albertocuestacanada/ERC20Permit/blob/master/contracts/ERC20Permit.sol.
    function permit(address target, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external override {
        require(block.timestamp <= deadline, "AnyswapV3ERC20: Expired permit");

        bytes32 hashStruct = keccak256(
            abi.encode(
                PERMIT_TYPEHASH,
                target,
                spender,
                value,
                nonces[target]++,
                deadline));

        require(verifyEIP712(target, hashStruct, v, r, s) || verifyPersonalSign(target, hashStruct, v, r, s));

        // _approve(owner, spender, value);
        allowance[target][spender] = value;
        emit Approval(target, spender, value);
    }

    function transferWithPermit(address target, address to, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external override returns (bool) {
        require(block.timestamp <= deadline, "AnyswapV3ERC20: Expired permit");

        bytes32 hashStruct = keccak256(
            abi.encode(
                TRANSFER_TYPEHASH,
                target,
                to,
                value,
                nonces[target]++,
                deadline));

        require(verifyEIP712(target, hashStruct, v, r, s) || verifyPersonalSign(target, hashStruct, v, r, s));

        require(to != address(0) || to != address(this));

        uint256 balance = balanceOf[target];
        require(balance >= value, "AnyswapV3ERC20: transfer amount exceeds balance");

        balanceOf[target] = balance - value;
        balanceOf[to] += value;
        emit Transfer(target, to, value);

        return true;
    }

    function verifyEIP712(address target, bytes32 hashStruct, uint8 v, bytes32 r, bytes32 s) internal view returns (bool) {
        bytes32 hash = keccak256(
            abi.encodePacked(
                "\x19\x01",
                DOMAIN_SEPARATOR,
                hashStruct));
        address signer = ecrecover(hash, v, r, s);
        return (signer != address(0) && signer == target);
    }

    function verifyPersonalSign(address target, bytes32 hashStruct, uint8 v, bytes32 r, bytes32 s) internal view returns (bool) {
        bytes32 hash = prefixed(hashStruct);
        address signer = ecrecover(hash, v, r, s);
        return (signer != address(0) && signer == target);
    }

    // Builds a prefixed hash to mimic the behavior of eth_sign.
    function prefixed(bytes32 hash) internal view returns (bytes32) {
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", DOMAIN_SEPARATOR, hash));
    }

    /// @dev Moves `value` AnyswapV3ERC20 token from caller's account to account (`to`).
    /// A transfer to `address(0)` triggers an ETH withdraw matching the sent AnyswapV3ERC20 token in favor of caller.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - caller account must have at least `value` AnyswapV3ERC20 token.
    function transfer(address to, uint256 value) external override returns (bool) {
        require(to != address(0) || to != address(this));
        uint256 balance = balanceOf[msg.sender];
        require(balance >= value, "AnyswapV3ERC20: transfer amount exceeds balance");

        balanceOf[msg.sender] = balance - value;
        balanceOf[to] += value;
        emit Transfer(msg.sender, to, value);

        return true;
    }

    /// @dev Moves `value` AnyswapV3ERC20 token from account (`from`) to account (`to`) using allowance mechanism.
    /// `value` is then deducted from caller account's allowance, unless set to `type(uint256).max`.
    /// A transfer to `address(0)` triggers an ETH withdraw matching the sent AnyswapV3ERC20 token in favor of caller.
    /// Emits {Approval} event to reflect reduced allowance `value` for caller account to spend from account (`from`),
    /// unless allowance is set to `type(uint256).max`
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - `from` account must have at least `value` balance of AnyswapV3ERC20 token.
    ///   - `from` account must have approved caller to spend at least `value` of AnyswapV3ERC20 token, unless `from` and caller are the same account.
    function transferFrom(address from, address to, uint256 value) external override returns (bool) {
        require(to != address(0) || to != address(this));
        if (from != msg.sender) {
            // _decreaseAllowance(from, msg.sender, value);
            uint256 allowed = allowance[from][msg.sender];
            if (allowed != type(uint256).max) {
                require(allowed >= value, "AnyswapV3ERC20: request exceeds allowance");
                uint256 reduced = allowed - value;
                allowance[from][msg.sender] = reduced;
                emit Approval(from, msg.sender, reduced);
            }
        }

        uint256 balance = balanceOf[from];
        require(balance >= value, "AnyswapV3ERC20: transfer amount exceeds balance");

        balanceOf[from] = balance - value;
        balanceOf[to] += value;
        emit Transfer(from, to, value);

        return true;
    }

    /// @dev Moves `value` AnyswapV3ERC20 token from caller's account to account (`to`),
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// A transfer to `address(0)` triggers an ETH withdraw matching the sent AnyswapV3ERC20 token in favor of caller.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - caller account must have at least `value` AnyswapV3ERC20 token.
    /// For more information on transferAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function transferAndCall(address to, uint value, bytes calldata data) external override returns (bool) {
        require(to != address(0) || to != address(this));

        uint256 balance = balanceOf[msg.sender];
        require(balance >= value, "AnyswapV3ERC20: transfer amount exceeds balance");

        balanceOf[msg.sender] = balance - value;
        balanceOf[to] += value;
        emit Transfer(msg.sender, to, value);

        return ITransferReceiver(to).onTokenTransfer(msg.sender, value, data);
    }
}

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"address","name":"_underlying","type":"address"},{"internalType":"address","name":"_vault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"auth","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LogAddAuth","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"},{"indexed":true,"internalType":"uint256","name":"effectiveHeight","type":"uint256"}],"name":"LogChangeMPCOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldVault","type":"address"},{"indexed":true,"internalType":"address","name":"newVault","type":"address"},{"indexed":true,"internalType":"uint256","name":"effectiveTime","type":"uint256"}],"name":"LogChangeVault","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txhash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogSwapin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"bindaddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogSwapout","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txhash","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Swapin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"bindaddr","type":"address"}],"name":"Swapout","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TRANSFER_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"applyMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"applyVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newVault","type":"address"}],"name":"changeMPCOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newVault","type":"address"}],"name":"changeVault","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayMinter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayVault","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"depositVault","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"address","name":"to","type":"address"}],"name":"depositWithPermit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"address","name":"to","type":"address"}],"name":"depositWithTransferPermit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllMinters","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"initVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"minters","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mpc","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingMinter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_auth","type":"address"}],"name":"revokeMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_auth","type":"address"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"setVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setVaultOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"transferWithPermit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"underlying","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawVault","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]

60e06040526202a3006005553480156200001857600080fd5b5060405162002fac38038062002fac8339810160408190526200003b91620003c5565b8451620000509060009060208801906200023d565b508351620000669060019060208701906200023d565b507fff0000000000000000000000000000000000000000000000000000000000000060f884901b166080526001600160601b0319606083901b1660a0526001600160a01b038216156200013a57816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015620000ed57600080fd5b505afa15801562000102573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000128919062000464565b60ff168360ff16146200013a57600080fd5b6004805461ff001960ff19909116600117169055600880546001600160a01b0383166001600160a01b03199182168117909255600b8054909116909117905542600c5560405146907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90620001b29060009062000488565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018290523060a082015260c00160408051601f19818403018152919052805160209091012060c052506200057e945050505050565b8280546200024b906200052b565b90600052602060002090601f0160209004810192826200026f5760008555620002ba565b82601f106200028a57805160ff1916838001178555620002ba565b82800160010185558215620002ba579182015b82811115620002ba5782518255916020019190600101906200029d565b50620002c8929150620002cc565b5090565b5b80821115620002c85760008155600101620002cd565b80516001600160a01b0381168114620002fb57600080fd5b919050565b600082601f83011262000311578081fd5b81516001600160401b03808211156200032e576200032e62000568565b604051601f8301601f19908116603f0116810190828211818310171562000359576200035962000568565b8160405283815260209250868385880101111562000375578485fd5b8491505b8382101562000398578582018301518183018401529082019062000379565b83821115620003a957848385830101525b9695505050505050565b805160ff81168114620002fb57600080fd5b600080600080600060a08688031215620003dd578081fd5b85516001600160401b0380821115620003f4578283fd5b6200040289838a0162000300565b9650602088015191508082111562000418578283fd5b50620004278882890162000300565b9450506200043860408701620003b3565b92506200044860608701620002e3565b91506200045860808701620002e3565b90509295509295909350565b60006020828403121562000476578081fd5b6200048182620003b3565b9392505050565b8154600090819060028104600180831680620004a557607f831692505b6020808410821415620004c657634e487b7160e01b87526022600452602487fd5b818015620004dd5760018114620004ef576200051d565b60ff198616895284890196506200051d565b60008a815260209020885b86811015620005155781548b820152908501908301620004fa565b505084890196505b509498975050505050505050565b6002810460018216806200054057607f821691505b602082108114156200056257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b60805160f81c60a05160601c60c0516129a4620006086000396000818161048c01528181611dda0152611eec015260008181610590015281816113520152818161139e0152818161141e015281816116450152818161185a015281816118e301528181611bb001528181611ccd015281816120bc01526120ef0152600061045301526129a46000f3fe608060405234801561001057600080fd5b506004361061033f5760003560e01c80637ecebe00116101b8578063bebbf4d011610104578063d93f2445116100a2578063f75c26641161007c578063f75c266414610774578063f954734e1461077c578063fbfa77cf1461078f578063fca3b5aa146107a25761033f565b8063d93f24451461072e578063dd62ed3e14610736578063ec126c77146107615761033f565b8063cae9ca51116100de578063cae9ca51146106ed578063cfbd488514610700578063d0e30db014610713578063d505accf1461071b5761033f565b8063bebbf4d0146106be578063c3081240146106d1578063c4b740f5146106da5761033f565b806395d89b4111610171578063a29dff721161014b578063a29dff721461066c578063a9059cbb14610675578063aa271e1a14610688578063b6b55f25146106ab5761033f565b806395d89b411461063c5780639dc29fac14610644578063a045442c146106575761033f565b80637ecebe00146105d257806381a37c18146105f25780638623ec7b1461060557806387689e28146106185780638da5cb5b1461062157806391c5df49146106295761033f565b80633ccfd60b1161029257806360e232a9116102305780636a42b8f81161020a5780636a42b8f81461056f5780636e553f65146105785780636f307dc31461058b57806370a08231146105b25761033f565b806360e232a914610536578063628d6cba146105495780636817031b1461055c5761033f565b80634ca8f0ed1161026c5780634ca8f0ed146104dc57806352113ba7146104e55780635f9b105d14610510578063605629d6146105235761033f565b80633ccfd60b146104ae5780634000aea0146104b657806340c10f19146104c95761033f565b806318160ddd116102ff5780632ebe3fbb116102d95780632ebe3fbb1461041457806330adf81f14610427578063313ce5671461044e5780633644e515146104875761033f565b806318160ddd146103e657806323b872dd146103ee5780632e1a7d4d146104015761033f565b806239d6ec14610344578062bf26f41461036a578062f714ce1461039157806306fdde03146103a4578063095ea7b3146103b95780630d707df8146103dc575b600080fd5b610357610352366004612469565b6107b5565b6040519081526020015b60405180910390f35b6103577f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd5981565b61035761039f36600461261b565b61080b565b6103ac61081f565b604051610361919061272f565b6103cc6103c7366004612440565b6108ad565b6040519015158152602001610361565b6103e4610907565b005b6103576109c3565b6103cc6103fc36600461239c565b6109ca565b61035761040f3660046125eb565b610bb5565b6103e4610422366004612350565b610bca565b6103577f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6104757f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610361565b6103577f000000000000000000000000000000000000000000000000000000000000000081565b610357610ca1565b6103cc6104c43660046124a4565b610cc2565b6103cc6104d7366004612440565b610e1b565b610357600d5481565b600b546104f8906001600160a01b031681565b6040516001600160a01b039091168152602001610361565b6103cc61051e366004612350565b610e5d565b6103cc6105313660046123d7565b610f31565b6103cc610544366004612350565b611141565b6103cc61055736600461261b565b611215565b6103e461056a366004612350565b6112dd565b61035760055481565b61035761058636600461261b565b611343565b6104f87f000000000000000000000000000000000000000000000000000000000000000081565b6103576105c0366004612350565b60026020526000908152604090205481565b6103576105e0366004612350565b600f6020526000908152604090205481565b610357610600366004612526565b611384565b6104f86106133660046125eb565b61145e565b610357600c5481565b6104f8611488565b6009546104f8906001600160a01b031681565b6103ac611492565b6103cc610652366004612440565b61149f565b61065f6114fe565b60405161036191906126e2565b610357600e5481565b6103cc610683366004612440565b611560565b6103cc610696366004612350565b60066020526000908152604090205460ff1681565b6103576106b93660046125eb565b611636565b6103576106cc36600461261b565b611677565b610357600a5481565b6103e46106e836600461258f565b6116b1565b6103cc6106fb3660046124a4565b611703565b6103e461070e366004612350565b6117df565b610357611838565b6103e46107293660046123d7565b61191b565b6103e4611a89565b61035761074436600461236a565b601060209081526000928352604080842090915290825290205481565b6103cc61076f3660046125c7565b611af4565b6104f8611b69565b61035761078a366004612526565b611b96565b6008546104f8906001600160a01b031681565b6103e46107b0366004612350565b611c4e565b60006107bf611b69565b6001600160a01b0316336001600160a01b0316146107f85760405162461bcd60e51b81526004016107ef90612762565b60405180910390fd5b610803848484611cb4565b949350505050565b6000610818338484611cb4565b9392505050565b6000805461082c906128b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610858906128b1565b80156108a55780601f1061087a576101008083540402835291602001916108a5565b820191906000526020600020905b81548152906001019060200180831161088857829003601f168201915b505050505081565b3360008181526010602090815260408083206001600160a01b0387168085529252808320859055519192909160008051602061294f833981519152906108f69086815260200190565b60405180910390a350600192915050565b61090f611b69565b6001600160a01b0316336001600160a01b03161461093f5760405162461bcd60e51b81526004016107ef90612762565b600a5442101561094e57600080fd5b600980546001600160a01b039081166000908152600660205260408120805460ff1916600190811790915592546007805494850181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890920180546001600160a01b03191692909116919091179055565b6003545b90565b60006001600160a01b0383161515806109ec57506001600160a01b0383163014155b6109f557600080fd5b6001600160a01b0384163314610aef576001600160a01b03841660009081526010602090815260408083203384529091529020546000198114610aed5782811015610a945760405162461bcd60e51b815260206004820152602960248201527f416e7973776170563345524332303a2072657175657374206578636565647320604482015268616c6c6f77616e636560b81b60648201526084016107ef565b6000610aa0848361286e565b6001600160a01b0387166000818152601060209081526040808320338085529083529281902085905551848152939450909260008051602061294f833981519152910160405180910390a3505b505b6001600160a01b03841660009081526002602052604090205482811015610b285760405162461bcd60e51b81526004016107ef906127d0565b610b32838261286e565b6001600160a01b038087166000908152600260205260408082209390935590861681529081208054859290610b68908490612856565b92505081905550836001600160a01b0316856001600160a01b031660008051602061292f83398151915285604051610ba291815260200190565b60405180910390a3506001949350505050565b6000610bc2338333611cb4565b90505b919050565b610bd2611b69565b6001600160a01b0316336001600160a01b031614610c025760405162461bcd60e51b81526004016107ef90612762565b60045460ff16610c1157600080fd5b600880546001600160a01b039092166001600160a01b03199283168117909155600b80548316821790556000818152600660205260408120805460ff1990811660019081179092556007805492830181559092527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68801805490931690911790915542600c55600480549091169055565b336000818152600260205260408120549091610cbd9181611cb4565b905090565b60006001600160a01b038516151580610ce457506001600160a01b0385163014155b610ced57600080fd5b3360009081526002602052604090205484811015610d1d5760405162461bcd60e51b81526004016107ef906127d0565b610d27858261286e565b33600090815260026020526040808220929092556001600160a01b03881681529081208054879290610d5a908490612856565b90915550506040518581526001600160a01b03871690339060008051602061292f8339815191529060200160405180910390a3604051635260769b60e11b81526001600160a01b0387169063a4c0ed3690610dbf90339089908990899060040161269a565b602060405180830381600087803b158015610dd957600080fd5b505af1158015610ded573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1191906125ab565b9695505050505050565b3360009081526006602052604081205460ff16610e4a5760405162461bcd60e51b81526004016107ef9061281f565b610e548383611cfc565b50600192915050565b6000610e67611b69565b6001600160a01b0316336001600160a01b031614610e975760405162461bcd60e51b81526004016107ef90612762565b6001600160a01b038216610ebd5760405162461bcd60e51b81526004016107ef90612799565b600b80546001600160a01b0319166001600160a01b038416179055600554610ee59042612856565b600c819055600b546008546040516001600160a01b0392831692909116907f1d065115f314fb9bad9557bd5460b9e3c66f7223b1dd04e73e828f0bb5afe89f90600090a4506001919050565b600084421115610f835760405162461bcd60e51b815260206004820152601e60248201527f416e7973776170563345524332303a2045787069726564207065726d6974000060448201526064016107ef565b6001600160a01b0388166000908152600f6020526040812080547f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd59918b918b918b919086610fd0836128ec565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012090506110318982878787611dca565b8061104457506110448982878787611eba565b61104d57600080fd5b6001600160a01b03881615158061106d57506001600160a01b0388163014155b61107657600080fd5b6001600160a01b038916600090815260026020526040902054878110156110af5760405162461bcd60e51b81526004016107ef906127d0565b6110b9888261286e565b6001600160a01b03808c1660009081526002602052604080822093909355908b16815290812080548a92906110ef908490612856565b92505081905550886001600160a01b03168a6001600160a01b031660008051602061292f8339815191528a60405161112991815260200190565b60405180910390a35060019998505050505050505050565b600061114b611b69565b6001600160a01b0316336001600160a01b03161461117b5760405162461bcd60e51b81526004016107ef90612762565b6001600160a01b0382166111a15760405162461bcd60e51b81526004016107ef90612799565b600b80546001600160a01b0319166001600160a01b0384161790556005546111c99042612856565b600c819055600b546008546040516001600160a01b0392831692909116907f5c364079e7102c27c608f9b237c735a1b7bfa0b67f27c2ad26bad447bf965cac90600090a4506001919050565b600454600090610100900460ff16156112705760405162461bcd60e51b815260206004820152601860248201527f416e7973776170563445524332303a206f6e6c7941757468000000000000000060448201526064016107ef565b6001600160a01b0382166112965760405162461bcd60e51b81526004016107ef90612799565b6112a03384611f75565b6040518381526001600160a01b0383169033907f6b616089d04950dc06c45c6dd787d657980543f89651aec47924752c7d16c888906020016108f6565b6112e5611b69565b6001600160a01b0316336001600160a01b0316146113155760405162461bcd60e51b81526004016107ef90612762565b600b80546001600160a01b0319166001600160a01b03831617905560055461133d9042612856565b600c5550565b600061137a6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333086612047565b61081883836120b8565b60405163d505accf60e01b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d505accf906113df908b9030908c908c908c908c908c90600401612659565b600060405180830381600087803b1580156113f957600080fd5b505af115801561140d573d6000803e3d6000fd5b506114489250506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016905089308a612047565b61145287836120b8565b98975050505050505050565b6007818154811061146e57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000610cbd611b69565b6001805461082c906128b1565b3360009081526006602052604081205460ff166114ce5760405162461bcd60e51b81526004016107ef9061281f565b6001600160a01b0383166114f45760405162461bcd60e51b81526004016107ef90612799565b610e548383611f75565b6060600780548060200260200160405190810160405280929190818152602001828054801561155657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611538575b5050505050905090565b60006001600160a01b03831615158061158257506001600160a01b0383163014155b61158b57600080fd5b33600090815260026020526040902054828110156115bb5760405162461bcd60e51b81526004016107ef906127d0565b6115c5838261286e565b33600090815260026020526040808220929092556001600160a01b038616815290812080548592906115f8908490612856565b90915550506040518381526001600160a01b03851690339060008051602061292f833981519152906020015b60405180910390a35060019392505050565b600061166d6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333085612047565b610bc282336120b8565b6000611681611b69565b6001600160a01b0316336001600160a01b03161461137a5760405162461bcd60e51b81526004016107ef90612762565b6116b9611b69565b6001600160a01b0316336001600160a01b0316146116e95760405162461bcd60e51b81526004016107ef90612762565b600480549115156101000261ff0019909216919091179055565b3360008181526010602090815260408083206001600160a01b0389168085529252808320879055519192909160008051602061294f8339815191529061174c9088815260200190565b60405180910390a360405162ba451f60e01b81526001600160a01b0386169062ba451f9061178490339088908890889060040161269a565b602060405180830381600087803b15801561179e57600080fd5b505af11580156117b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d691906125ab565b95945050505050565b6117e7611b69565b6001600160a01b0316336001600160a01b0316146118175760405162461bcd60e51b81526004016107ef90612762565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6040516370a0823160e01b815233600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b15801561189c57600080fd5b505afa1580156118b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d49190612603565b905061190b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333084612047565b61191581336120b8565b91505090565b8342111561196b5760405162461bcd60e51b815260206004820152601e60248201527f416e7973776170563345524332303a2045787069726564207065726d6974000060448201526064016107ef565b6001600160a01b0387166000908152600f6020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866119b8836128ec565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050611a198882868686611dca565b80611a2c5750611a2c8882868686611eba565b611a3557600080fd5b6001600160a01b038881166000818152601060209081526040808320948c16808452948252918290208a9055905189815260008051602061294f833981519152910160405180910390a35050505050505050565b611a91611b69565b6001600160a01b0316336001600160a01b031614611ac15760405162461bcd60e51b81526004016107ef90612762565b600c54421015611ad057600080fd5b600b54600880546001600160a01b0319166001600160a01b03909216919091179055565b3360009081526006602052604081205460ff16611b235760405162461bcd60e51b81526004016107ef9061281f565b611b2d8383611cfc565b826001600160a01b0316847f05d0634fe981be85c22e2942a880821b70095d84e152c3ea3c17a4e4250d9d618460405161162491815260200190565b6000600c544210611b865750600b546001600160a01b03166109c7565b506008546001600160a01b031690565b60405163302b14eb60e11b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063605629d690611bf1908b9030908c908c908c908c908c90600401612659565b602060405180830381600087803b158015611c0b57600080fd5b505af1158015611c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4391906125ab565b5061145287836120b8565b611c56611b69565b6001600160a01b0316336001600160a01b031614611c865760405162461bcd60e51b81526004016107ef90612762565b600980546001600160a01b0319166001600160a01b038316179055600554611cae9042612856565b600a5550565b6000611cc08484611f75565b611cf46001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168385612135565b509092915050565b6001600160a01b038216611d525760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016107ef565b8060036000828254611d649190612856565b90915550506001600160a01b03821660009081526002602052604081208054839290611d91908490612856565b90915550506040518181526001600160a01b0383169060009060008051602061292f833981519152906020015b60405180910390a35050565b60405161190160f01b60208201527f0000000000000000000000000000000000000000000000000000000000000000602282015260428101859052600090819060620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0015b6020604051602081039080840390855afa158015611e79573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906114525750876001600160a01b0316816001600160a01b03161498975050505050505050565b600080611f3a866040517f19457468657265756d205369676e6564204d6573736167653a0a33320000000060208201527f0000000000000000000000000000000000000000000000000000000000000000603c820152605c8101829052600090607c01604051602081830303815290604052805190602001209050919050565b6040805160008082526020820180845284905260ff89169282019290925260608101879052608081018690529192509060019060a001611e57565b6001600160a01b038216611fd55760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016107ef565b6001600160a01b03821660009081526002602052604081208054839290611ffd90849061286e565b925050819055508060036000828254612016919061286e565b90915550506040518181526000906001600160a01b0384169060008051602061292f83398151915290602001611dbe565b6040516001600160a01b03808516602483015283166044820152606481018290526120b29085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261216a565b50505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161580159061211b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163014155b61212457600080fd5b61212e8284611cfc565b5090919050565b6040516001600160a01b03831660248201526044810182905261216590849063a9059cbb60e01b9060640161207b565b505050565b61217c826001600160a01b03166122f1565b6121c85760405162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740060448201526064016107ef565b600080836001600160a01b0316836040516121e3919061263d565b6000604051808303816000865af19150503d8060008114612220576040519150601f19603f3d011682016040523d82523d6000602084013e612225565b606091505b5091509150816122775760405162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656460448201526064016107ef565b8051156120b2578080602001905181019061229291906125ab565b6120b25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016107ef565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906108035750141592915050565b80356001600160a01b0381168114610bc557600080fd5b803560ff81168114610bc557600080fd5b600060208284031215612361578081fd5b61081882612328565b6000806040838503121561237c578081fd5b61238583612328565b915061239360208401612328565b90509250929050565b6000806000606084860312156123b0578081fd5b6123b984612328565b92506123c760208501612328565b9150604084013590509250925092565b600080600080600080600060e0888a0312156123f1578283fd5b6123fa88612328565b965061240860208901612328565b955060408801359450606088013593506124246080890161233f565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215612452578182fd5b61245b83612328565b946020939093013593505050565b60008060006060848603121561247d578283fd5b61248684612328565b92506020840135915061249b60408501612328565b90509250925092565b600080600080606085870312156124b9578384fd5b6124c285612328565b935060208501359250604085013567ffffffffffffffff808211156124e5578384fd5b818701915087601f8301126124f8578384fd5b813581811115612506578485fd5b886020828501011115612517578485fd5b95989497505060200194505050565b600080600080600080600060e0888a031215612540578283fd5b61254988612328565b965060208801359550604088013594506125656060890161233f565b93506080880135925060a0880135915061258160c08901612328565b905092959891949750929550565b6000602082840312156125a0578081fd5b81356108188161291d565b6000602082840312156125bc578081fd5b81516108188161291d565b6000806000606084860312156125db578283fd5b833592506123c760208501612328565b6000602082840312156125fc578081fd5b5035919050565b600060208284031215612614578081fd5b5051919050565b6000806040838503121561262d578182fd5b8235915061239360208401612328565b6000825161264f818460208701612885565b9190910192915050565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b0385168152602081018490526060604082018190528101829052600082846080840137818301608090810191909152601f909201601f191601019392505050565b6020808252825182820181905260009190848201906040850190845b818110156127235783516001600160a01b0316835292840192918401916001016126fe565b50909695505050505050565b600060208252825180602084015261274e816040850160208701612885565b601f01601f19169190910160400192915050565b60208082526019908201527f416e7973776170563345524332303a20464f5242494444454e00000000000000604082015260600190565b6020808252601c908201527f416e7973776170563345524332303a2061646472657373283078302900000000604082015260600190565b6020808252602f908201527f416e7973776170563345524332303a207472616e7366657220616d6f756e742060408201526e657863656564732062616c616e636560881b606082015260800190565b60208082526019908201527f416e7973776170563445524332303a20464f5242494444454e00000000000000604082015260600190565b6000821982111561286957612869612907565b500190565b60008282101561288057612880612907565b500390565b60005b838110156128a0578181015183820152602001612888565b838111156120b25750506000910152565b6002810460018216806128c557607f821691505b602082108114156128e657634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561290057612900612907565b5060010190565b634e487b7160e01b600052601160045260246000fd5b801515811461292b57600080fd5b5056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a264697066735822122009f133a1a7b82a84f7eb4d540d9b7632a2fb97e06b30fd18edb4988cdb70ae8164736f6c6343000802003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fa9da51631268a30ec3ddd1ccbf46c65fad9925100000000000000000000000000000000000000000000000000000000000000144d6167696320496e7465726e6574204d6f6e657900000000000000000000000000000000000000000000000000000000000000000000000000000000000000034d494d0000000000000000000000000000000000000000000000000000000000

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fa9da51631268a30ec3ddd1ccbf46c65fad9925100000000000000000000000000000000000000000000000000000000000000144d6167696320496e7465726e6574204d6f6e657900000000000000000000000000000000000000000000000000000000000000000000000000000000000000034d494d0000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Magic Internet Money
Arg [1] : _symbol (string): MIM
Arg [2] : _decimals (uint8): 18
Arg [3] : _underlying (address): 0x0000000000000000000000000000000000000000
Arg [4] : _vault (address): 0xfa9da51631268a30ec3ddd1ccbf46c65fad99251

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 000000000000000000000000fa9da51631268a30ec3ddd1ccbf46c65fad99251
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [6] : 4d6167696320496e7465726e6574204d6f6e6579000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [8] : 4d494d0000000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

5728:19168:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14852:149;;;;;;:::i;:::-;;:::i;:::-;;;9569:25:1;;;9557:2;9542:18;14852:149:0;;;;;;;;6101:136;;6145:92;6101:136;;14718:126;;;;;;:::i;:::-;;:::i;5811:18::-;;;:::i;:::-;;;;;;;:::i;16575:265::-;;;;;;:::i;:::-;;:::i;:::-;;;9396:14:1;;9389:22;9371:41;;9359:2;9344:18;16575:265:0;9326:92:1;8497:179:0;;;:::i;:::-;;12687:102;;;:::i;22816:927::-;;;;;;:::i;:::-;;:::i;14588:122::-;;;;;;:::i;:::-;;:::i;7783:272::-;;;;;;:::i;:::-;;:::i;5957:137::-;;5999:95;5957:137;;5863:41;;;;;;;;15843:4:1;15831:17;;;15813:36;;15801:2;15786:18;5863:41:0;15768:87:1;6244:41:0;;;;;14454:126;;;:::i;24370:523::-;;;;;;:::i;:::-;;:::i;9616:133::-;;;;;;:::i;:::-;;:::i;7122:24::-;;;;;;7057:27;;;;;-1:-1:-1;;;;;7057:27:0;;;;;;-1:-1:-1;;;;;6620:32:1;;;6602:51;;6590:2;6575:18;7057:27:0;6557:102:1;9283:325:0;;;;;;:::i;:::-;;:::i;19173:938::-;;;;;;:::i;:::-;;:::i;8954:321::-;;;;;;:::i;:::-;;:::i;10189:328::-;;;;;;:::i;:::-;;:::i;8212:140::-;;;;;;:::i;:::-;;:::i;6732:29::-;;;;;;13906:193;;;;;;:::i;:::-;;:::i;5913:35::-;;;;;6365:54;;;;;;:::i;:::-;;;;;;;;;;;;;;10789:51;;;;;;:::i;:::-;;;;;;;;;;;;;;12797:349;;;;;;:::i;:::-;;:::i;6879:24::-;;;;;;:::i;:::-;;:::i;7091:22::-;;;;;;7420:78;;;:::i;6990:28::-;;;;;-1:-1:-1;;;;;6990:28:0;;;5836:20;;;:::i;9757:207::-;;;;;;:::i;:::-;;:::i;8845:99::-;;;:::i;:::-;;;;;;;:::i;7153:22::-;;;;;;21489:438;;;;;;:::i;:::-;;:::i;6832:40::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;13709:189;;;;;;:::i;:::-;;:::i;14107:127::-;;;;;;:::i;:::-;;:::i;7025:23::-;;;;;;7681:94;;;;;;:::i;:::-;;:::i;17261:356::-;;;;;;:::i;:::-;;:::i;8739:98::-;;;;;;:::i;:::-;;:::i;13455:246::-;;;:::i;18450:715::-;;;;;;:::i;:::-;;:::i;8360:129::-;;;:::i;11010:75::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;9972:209;;;;;;:::i;:::-;;:::i;7506:167::-;;;:::i;13154:293::-;;;;;;:::i;:::-;;:::i;6961:20::-;;;;;-1:-1:-1;;;;;6961:20:0;;;8063:141;;;;;;:::i;:::-;;:::i;14852:149::-;14942:4;7357:5;:3;:5::i;:::-;-1:-1:-1;;;;;7343:19:0;:10;-1:-1:-1;;;;;7343:19:0;;7335:57;;;;-1:-1:-1;;;7335:57:0;;;;;;;:::i;:::-;;;;;;;;;14966:27:::1;14976:4;14982:6;14990:2;14966:9;:27::i;:::-;14959:34:::0;14852:149;-1:-1:-1;;;;14852:149:0:o;14718:126::-;14779:4;14803:33;14813:10;14825:6;14833:2;14803:9;:33::i;:::-;14796:40;14718:126;-1:-1:-1;;;14718:126:0:o;5811:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16575:265::-;16728:10;16651:4;16718:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;16718:30:0;;;;;;;;;;:38;;;16772:36;16651:4;;16718:30;;-1:-1:-1;;;;;;;;;;;16772:36:0;;;16751:5;9569:25:1;;9557:2;9542:18;;9524:76;16772:36:0;;;;;;;;-1:-1:-1;16828:4:0;16575:265;;;;:::o;8497:179::-;7357:5;:3;:5::i;:::-;-1:-1:-1;;;;;7343:19:0;:10;-1:-1:-1;;;;;7343:19:0;;7335:57;;;;-1:-1:-1;;;7335:57:0;;;;;;;:::i;:::-;8577:11:::1;;8558:15;:30;;8550:39;;;::::0;::::1;;8609:13;::::0;;-1:-1:-1;;;;;8609:13:0;;::::1;8600:23;::::0;;;:8:::1;:23;::::0;;;;:30;;-1:-1:-1;;8600:30:0::1;8626:4;8600:30:::0;;::::1;::::0;;;8654:13;;8641:7:::1;:27:::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;8641:27:0::1;8654:13:::0;;;::::1;8641:27:::0;;;::::1;::::0;;8497:179::o;12687:102::-;12769:12;;12687:102;;:::o;22816:927::-;22906:4;-1:-1:-1;;;;;22931:16:0;;;;;:39;;-1:-1:-1;;;;;;22951:19:0;;22965:4;22951:19;;22931:39;22923:48;;;;;;-1:-1:-1;;;;;22986:18:0;;22994:10;22986:18;22982:477;;-1:-1:-1;;;;;23100:15:0;;23082;23100;;;:9;:15;;;;;;;;23116:10;23100:27;;;;;;;;-1:-1:-1;;23146:28:0;;23142:306;;23214:5;23203:7;:16;;23195:70;;;;-1:-1:-1;;;23195:70:0;;14150:2:1;23195:70:0;;;14132:21:1;14189:2;14169:18;;;14162:30;14228:34;14208:18;;;14201:62;-1:-1:-1;;;14279:18:1;;;14272:39;14328:19;;23195:70:0;14122:231:1;23195:70:0;23284:15;23302;23312:5;23302:7;:15;:::i;:::-;-1:-1:-1;;;;;23336:15:0;;;;;;:9;:15;;;;;;;;23352:10;23336:27;;;;;;;;;;:37;;;23397:35;9569:25:1;;;23336:37:0;;-1:-1:-1;23352:10:0;;-1:-1:-1;;;;;;;;;;;23397:35:0;9542:18:1;23397:35:0;;;;;;;23142:306;;22982:477;;-1:-1:-1;;;;;23489:15:0;;23471;23489;;;:9;:15;;;;;;23523:16;;;;23515:76;;;;-1:-1:-1;;;23515:76:0;;;;;;;:::i;:::-;23622:15;23632:5;23622:7;:15;:::i;:::-;-1:-1:-1;;;;;23604:15:0;;;;;;;:9;:15;;;;;;:33;;;;23648:13;;;;;;;;:22;;23665:5;;23604:15;23648:22;;23665:5;;23648:22;:::i;:::-;;;;;;;;23701:2;-1:-1:-1;;;;;23686:25:0;23695:4;-1:-1:-1;;;;;23686:25:0;-1:-1:-1;;;;;;;;;;;23705:5:0;23686:25;;;;9569::1;;9557:2;9542:18;;9524:76;23686:25:0;;;;;;;;-1:-1:-1;23731:4:0;;22816:927;-1:-1:-1;;;;22816:927:0:o;14588:122::-;14637:4;14661:41;14671:10;14683:6;14691:10;14661:9;:41::i;:::-;14654:48;;14588:122;;;;:::o;7783:272::-;7357:5;:3;:5::i;:::-;-1:-1:-1;;;;;7343:19:0;:10;-1:-1:-1;;;;;7343:19:0;;7335:57;;;;-1:-1:-1;;;7335:57:0;;;;;;;:::i;:::-;7856:5:::1;::::0;::::1;;7848:14;;;::::0;::::1;;7873:5;:14:::0;;-1:-1:-1;;;;;7873:14:0;;::::1;-1:-1:-1::0;;;;;;7873:14:0;;::::1;::::0;::::1;::::0;;;7898:12:::1;:21:::0;;;::::1;::::0;::::1;::::0;;7873:5:::1;7930:16:::0;;;:8:::1;:16;::::0;;;;:23;;-1:-1:-1;;7930:23:0;;::::1;7873:14:::0;7930:23;;::::1;::::0;;;7964:7:::1;:20:::0;;;;::::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;;8008:15:::1;7995:10;:28:::0;8034:5:::1;:13:::0;;;;::::1;::::0;;7783:272::o;14454:126::-;14526:10;14492:4;14538:21;;;:9;:21;;;;;;14492:4;;14516:56;;14526:10;14516:9;:56::i;:::-;14509:63;;14454:126;:::o;24370:523::-;24467:4;-1:-1:-1;;;;;24492:16:0;;;;;:39;;-1:-1:-1;;;;;;24512:19:0;;24526:4;24512:19;;24492:39;24484:48;;;;;;24573:10;24545:15;24563:21;;;:9;:21;;;;;;24603:16;;;;24595:76;;;;-1:-1:-1;;;24595:76:0;;;;;;;:::i;:::-;24708:15;24718:5;24708:7;:15;:::i;:::-;24694:10;24684:21;;;;:9;:21;;;;;;:39;;;;-1:-1:-1;;;;;24734:13:0;;;;;;;:22;;24751:5;;24684:21;24734:22;;24751:5;;24734:22;:::i;:::-;;;;-1:-1:-1;;24772:31:0;;9569:25:1;;;-1:-1:-1;;;;;24772:31:0;;;24781:10;;-1:-1:-1;;;;;;;;;;;24772:31:0;9557:2:1;9542:18;24772:31:0;;;;;;;24823:62;;-1:-1:-1;;;24823:62:0;;-1:-1:-1;;;;;24823:37:0;;;;;:62;;24861:10;;24873:5;;24880:4;;;;24823:62;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24816:69;24370:523;-1:-1:-1;;;;;;24370:523:0:o;9616:133::-;7234:10;9685:4;7225:20;;;:8;:20;;;;;;;;7217:58;;;;-1:-1:-1;;;7217:58:0;;;;;;;:::i;:::-;9702:17:::1;9708:2;9712:6;9702:5;:17::i;:::-;-1:-1:-1::0;9737:4:0::1;9616:133:::0;;;;:::o;9283:325::-;9351:4;7357:5;:3;:5::i;:::-;-1:-1:-1;;;;;7343:19:0;:10;-1:-1:-1;;;;;7343:19:0;;7335:57;;;;-1:-1:-1;;;7335:57:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9376:22:0;::::1;9368:63;;;;-1:-1:-1::0;;;9368:63:0::1;;;;;;;:::i;:::-;9442:12;:23:::0;;-1:-1:-1;;;;;;9442:23:0::1;-1:-1:-1::0;;;;;9442:23:0;::::1;;::::0;;9507:5:::1;::::0;9489:23:::1;::::0;:15:::1;:23;:::i;:::-;9476:10;:36:::0;;;9553:12:::1;::::0;9546:5:::1;::::0;9528:50:::1;::::0;-1:-1:-1;;;;;9553:12:0;;::::1;::::0;9546:5;;::::1;::::0;9528:50:::1;::::0;9553:12:::1;::::0;9528:50:::1;-1:-1:-1::0;9596:4:0::1;9283:325:::0;;;:::o;19173:938::-;19320:4;19364:8;19345:15;:27;;19337:70;;;;-1:-1:-1;;;19337:70:0;;12682:2:1;19337:70:0;;;12664:21:1;12721:2;12701:18;;;12694:30;12760:32;12740:18;;;12733:60;12810:18;;19337:70:0;12654:180:1;19337:70:0;-1:-1:-1;;;;;19600:14:0;;19420:18;19600:14;;;:6;:14;;;;;:16;;6145:92;;19530:6;;19555:2;;19576:5;;19600:16;19420:18;19600:16;;;:::i;:::-;;;;-1:-1:-1;19465:179:0;;;;;;9892:25:1;;;;-1:-1:-1;;;;;9991:15:1;;;9971:18;;;9964:43;10043:15;;;;10023:18;;;10016:43;10075:18;;;10068:34;10118:19;;;10111:35;10162:19;;;10155:35;;;9864:19;;19465:179:0;;;;;;;;;;;;19441:204;;;;;;19420:225;;19666:41;19679:6;19687:10;19699:1;19702;19705;19666:12;:41::i;:::-;:92;;;;19711:47;19730:6;19738:10;19750:1;19753;19756;19711:18;:47::i;:::-;19658:101;;;;;;-1:-1:-1;;;;;19780:16:0;;;;;:39;;-1:-1:-1;;;;;;19800:19:0;;19814:4;19800:19;;19780:39;19772:48;;;;;;-1:-1:-1;;;;;19851:17:0;;19833:15;19851:17;;;:9;:17;;;;;;19887:16;;;;19879:76;;;;-1:-1:-1;;;19879:76:0;;;;;;;:::i;:::-;19988:15;19998:5;19988:7;:15;:::i;:::-;-1:-1:-1;;;;;19968:17:0;;;;;;;:9;:17;;;;;;:35;;;;20014:13;;;;;;;;:22;;20031:5;;19968:17;20014:22;;20031:5;;20014:22;:::i;:::-;;;;;;;;20069:2;-1:-1:-1;;;;;20052:27:0;20061:6;-1:-1:-1;;;;;20052:27:0;-1:-1:-1;;;;;;;;;;;20073:5:0;20052:27;;;;9569:25:1;;9557:2;9542:18;;9524:76;20052:27:0;;;;;;;;-1:-1:-1;20099:4:0;;19173:938;-1:-1:-1;;;;;;;;;19173:938:0:o;8954:321::-;9021:4;7357:5;:3;:5::i;:::-;-1:-1:-1;;;;;7343:19:0;:10;-1:-1:-1;;;;;7343:19:0;;7335:57;;;;-1:-1:-1;;;7335:57:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9046:22:0;::::1;9038:63;;;;-1:-1:-1::0;;;9038:63:0::1;;;;;;;:::i;:::-;9112:12;:23:::0;;-1:-1:-1;;;;;;9112:23:0::1;-1:-1:-1::0;;;;;9112:23:0;::::1;;::::0;;9177:5:::1;::::0;9159:23:::1;::::0;:15:::1;:23;:::i;:::-;9146:10;:36:::0;;;9220:12:::1;::::0;9213:5:::1;::::0;9198:47:::1;::::0;-1:-1:-1;;;;;9220:12:0;;::::1;::::0;9213:5;;::::1;::::0;9198:47:::1;::::0;9220:12:::1;::::0;9198:47:::1;-1:-1:-1::0;9263:4:0::1;8954:321:::0;;;:::o;10189:328::-;10282:10;;10256:4;;10282:10;;;;;10281:11;10273:48;;;;-1:-1:-1;;;10273:48:0;;13041:2:1;10273:48:0;;;13023:21:1;13080:2;13060:18;;;13053:30;13119:26;13099:18;;;13092:54;13163:18;;10273:48:0;13013:174:1;10273:48:0;-1:-1:-1;;;;;10340:22:0;;10332:63;;;;-1:-1:-1;;;10332:63:0;;;;;;;:::i;:::-;10406:25;10412:10;10424:6;10406:5;:25::i;:::-;10447:40;;9569:25:1;;;-1:-1:-1;;;;;10447:40:0;;;10458:10;;10447:40;;9557:2:1;9542:18;10447:40:0;9524:76:1;8212:140:0;7357:5;:3;:5::i;:::-;-1:-1:-1;;;;;7343:19:0;:10;-1:-1:-1;;;;;7343:19:0;;7335:57;;;;-1:-1:-1;;;7335:57:0;;;;;;;:::i;:::-;8276:12:::1;:21:::0;;-1:-1:-1;;;;;;8276:21:0::1;-1:-1:-1::0;;;;;8276:21:0;::::1;;::::0;;8339:5:::1;::::0;8321:23:::1;::::0;:15:::1;:23;:::i;:::-;8308:10;:36:::0;-1:-1:-1;8212:140:0:o;13906:193::-;13966:4;13983:70;-1:-1:-1;;;;;13990:10:0;13983:35;14019:10;14039:4;14046:6;13983:35;:70::i;:::-;14071:20;14080:6;14088:2;14071:8;:20::i;12797:349::-;12951:74;;-1:-1:-1;;;12951:74:0;;12934:4;;-1:-1:-1;;;;;12958:10:0;12951:25;;;;:74;;12977:6;;12993:4;;13000:5;;13007:8;;13017:1;;13020;;13023;;12951:74;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13036:65:0;;-1:-1:-1;;;;;;;13043:10:0;13036:35;;-1:-1:-1;13072:6:0;13088:4;13095:5;13036:35;:65::i;:::-;13119:19;13128:5;13135:2;13119:8;:19::i;:::-;13112:26;12797:349;-1:-1:-1;;;;;;;;12797:349:0:o;6879:24::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6879:24:0;;-1:-1:-1;6879:24:0;:::o;7420:78::-;7458:7;7485:5;:3;:5::i;5836:20::-;;;;;;;:::i;9757:207::-;7234:10;9828:4;7225:20;;;:8;:20;;;;;;;;7217:58;;;;-1:-1:-1;;;7217:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9853:18:0;::::1;9845:59;;;;-1:-1:-1::0;;;9845:59:0::1;;;;;;;:::i;:::-;9915:19;9921:4;9927:6;9915:5;:19::i;8845:99::-:0;8893:16;8929:7;8922:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8922:14:0;;;;;;;;;;;;;;;;;;;;;;;8845:99;:::o;21489:438::-;21561:4;-1:-1:-1;;;;;21586:16:0;;;;;:39;;-1:-1:-1;;;;;;21606:19:0;;21620:4;21606:19;;21586:39;21578:48;;;;;;21665:10;21637:15;21655:21;;;:9;:21;;;;;;21695:16;;;;21687:76;;;;-1:-1:-1;;;21687:76:0;;;;;;;:::i;:::-;21800:15;21810:5;21800:7;:15;:::i;:::-;21786:10;21776:21;;;;:9;:21;;;;;;:39;;;;-1:-1:-1;;;;;21826:13:0;;;;;;;:22;;21843:5;;21776:21;21826:22;;21843:5;;21826:22;:::i;:::-;;;;-1:-1:-1;;21864:31:0;;9569:25:1;;;-1:-1:-1;;;;;21864:31:0;;;21873:10;;-1:-1:-1;;;;;;;;;;;21864:31:0;9557:2:1;9542:18;21864:31:0;;;;;;;;-1:-1:-1;21915:4:0;;21489:438;-1:-1:-1;;;21489:438:0:o;13709:189::-;13757:4;13774:70;-1:-1:-1;;;;;13781:10:0;13774:35;13810:10;13830:4;13837:6;13774:35;:70::i;:::-;13862:28;13871:6;13879:10;13862:8;:28::i;14107:127::-;14182:4;7357:5;:3;:5::i;:::-;-1:-1:-1;;;;;7343:19:0;:10;-1:-1:-1;;;;;7343:19:0;;7335:57;;;;-1:-1:-1;;;7335:57:0;;;;;;;:::i;7681:94::-;7357:5;:3;:5::i;:::-;-1:-1:-1;;;;;7343:19:0;:10;-1:-1:-1;;;;;7343:19:0;;7335:57;;;;-1:-1:-1;;;7335:57:0;;;;;;;:::i;:::-;7747:10:::1;:20:::0;;;::::1;;;;-1:-1:-1::0;;7747:20:0;;::::1;::::0;;;::::1;::::0;;7681:94::o;17261:356::-;17442:10;17365:4;17432:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;17432:30:0;;;;;;;;;;:38;;;17486:36;17365:4;;17432:30;;-1:-1:-1;;;;;;;;;;;17486:36:0;;;17465:5;9569:25:1;;9557:2;9542:18;;9524:76;17486:36:0;;;;;;;;17542:67;;-1:-1:-1;;;17542:67:0;;-1:-1:-1;;;;;17542:42:0;;;;;:67;;17585:10;;17597:5;;17604:4;;;;17542:67;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17535:74;17261:356;-1:-1:-1;;;;;17261:356:0:o;8739:98::-;7357:5;:3;:5::i;:::-;-1:-1:-1;;;;;7343:19:0;:10;-1:-1:-1;;;;;7343:19:0;;7335:57;;;;-1:-1:-1;;;7335:57:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8806:15:0::1;8824:5;8806:15:::0;;;:8:::1;:15;::::0;;;;:23;;-1:-1:-1;;8806:23:0::1;::::0;;8739:98::o;13455:246::-;13524:40;;-1:-1:-1;;;13524:40:0;;13553:10;13524:40;;;6602:51:1;13492:4:0;;;;-1:-1:-1;;;;;13531:10:0;13524:28;;;;6575:18:1;;13524:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13509:55;-1:-1:-1;13575:71:0;-1:-1:-1;;;;;13582:10:0;13575:35;13611:10;13631:4;13509:55;13575:35;:71::i;:::-;13664:29;13673:7;13682:10;13664:8;:29::i;:::-;13657:36;;;13455:246;:::o;18450:715::-;18619:8;18600:15;:27;;18592:70;;;;-1:-1:-1;;;18592:70:0;;12682:2:1;18592:70:0;;;12664:21:1;12721:2;12701:18;;;12694:30;12760:32;12740:18;;;12733:60;12810:18;;18592:70:0;12654:180:1;18592:70:0;-1:-1:-1;;;;;18858:14:0;;18675:18;18858:14;;;:6;:14;;;;;:16;;5999:95;;18783:6;;18808:7;;18834:5;;18858:16;18675:18;18858:16;;;:::i;:::-;;;;-1:-1:-1;18720:182:0;;;;;;9892:25:1;;;;-1:-1:-1;;;;;9991:15:1;;;9971:18;;;9964:43;10043:15;;;;10023:18;;;10016:43;10075:18;;;10068:34;10118:19;;;10111:35;10162:19;;;10155:35;;;9864:19;;18720:182:0;;;;;;;;;;;;18696:207;;;;;;18675:228;;18924:41;18937:6;18945:10;18957:1;18960;18963;18924:12;:41::i;:::-;:92;;;;18969:47;18988:6;18996:10;19008:1;19011;19014;18969:18;:47::i;:::-;18916:101;;;;;;-1:-1:-1;;;;;19075:17:0;;;;;;;:9;:17;;;;;;;;:26;;;;;;;;;;;;;:34;;;19125:32;;9569:25:1;;;-1:-1:-1;;;;;;;;;;;19125:32:0;9542:18:1;19125:32:0;;;;;;;18450:715;;;;;;;;:::o;8360:129::-;7357:5;:3;:5::i;:::-;-1:-1:-1;;;;;7343:19:0;:10;-1:-1:-1;;;;;7343:19:0;;7335:57;;;;-1:-1:-1;;;7335:57:0;;;;;;;:::i;:::-;8439:10:::1;;8420:15;:29;;8412:38;;;::::0;::::1;;8469:12;::::0;8461:5:::1;:20:::0;;-1:-1:-1;;;;;;8461:20:0::1;-1:-1:-1::0;;;;;8469:12:0;;::::1;8461:20:::0;;;::::1;::::0;;8360:129::o;9972:209::-;7234:10;10062:4;7225:20;;;:8;:20;;;;;;;;7217:58;;;;-1:-1:-1;;;7217:58:0;;;;;;;:::i;:::-;10079:22:::1;10085:7;10094:6;10079:5;:22::i;:::-;10135:7;-1:-1:-1::0;;;;;10117:34:0::1;10127:6;10117:34;10144:6;10117:34;;;;9569:25:1::0;;9557:2;9542:18;;9524:76;7506:167:0;7542:7;7585:10;;7566:15;:29;7562:81;;-1:-1:-1;7619:12:0;;-1:-1:-1;;;;;7619:12:0;7612:19;;7562:81;-1:-1:-1;7660:5:0;;-1:-1:-1;;;;;7660:5:0;7506:167;:::o;13154:293::-;13316:86;;-1:-1:-1;;;13316:86:0;;13299:4;;-1:-1:-1;;;;;13323:10:0;13316:37;;;;:86;;13354:6;;13370:4;;13377:5;;13384:8;;13394:1;;13397;;13400;;13316:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13420:19;13429:5;13436:2;13420:8;:19::i;8063:141::-;7357:5;:3;:5::i;:::-;-1:-1:-1;;;;;7343:19:0;:10;-1:-1:-1;;;;;7343:19:0;;7335:57;;;;-1:-1:-1;;;7335:57:0;;;;;;;:::i;:::-;8127:13:::1;:21:::0;;-1:-1:-1;;;;;;8127:21:0::1;-1:-1:-1::0;;;;;8127:21:0;::::1;;::::0;;8191:5:::1;::::0;8173:23:::1;::::0;:15:::1;:23;:::i;:::-;8159:11;:37:::0;-1:-1:-1;8063:141:0:o;15009:198::-;15085:4;15102:19;15108:4;15114:6;15102:5;:19::i;:::-;15132:43;-1:-1:-1;;;;;15139:10:0;15132:31;15164:2;15168:6;15132:31;:43::i;:::-;-1:-1:-1;15193:6:0;;15009:198;-1:-1:-1;;15009:198:0:o;15488:268::-;-1:-1:-1;;;;;15564:21:0;;15556:65;;;;-1:-1:-1;;;15556:65:0;;15331:2:1;15556:65:0;;;15313:21:1;15370:2;15350:18;;;15343:30;15409:33;15389:18;;;15382:61;15460:18;;15556:65:0;15303:181:1;15556:65:0;15650:6;15634:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;15667:18:0;;;;;;:9;:18;;;;;:28;;15689:6;;15667:18;:28;;15689:6;;15667:28;:::i;:::-;;;;-1:-1:-1;;15711:37:0;;9569:25:1;;;-1:-1:-1;;;;;15711:37:0;;;15728:1;;-1:-1:-1;;;;;;;;;;;15711:37:0;9557:2:1;9542:18;15711:37:0;;;;;;;;15488:268;;:::o;20119:399::-;20287:110;;-1:-1:-1;;;20287:110:0;;;6317:27:1;20351:16:0;6360:11:1;;;6353:27;6396:12;;;6389:28;;;20231:4:0;;;;6433:12:1;;20287:110:0;;;-1:-1:-1;;20287:110:0;;;;;;;;;20263:135;;20287:110;20263:135;;;;20409:14;20426:24;;;;;;;;;10428:25:1;;;10501:4;10489:17;;10469:18;;;10462:45;;;;10523:18;;;10516:34;;;10566:18;;;10559:34;;;20263:135:0;;-1:-1:-1;20409:14:0;20426:24;;10400:19:1;;20426:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20426:24:0;;-1:-1:-1;;20426:24:0;;;-1:-1:-1;;;;;;;20469:20:0;;;;;;:40;;;20503:6;-1:-1:-1;;;;;20493:16:0;:6;-1:-1:-1;;;;;20493:16:0;;20461:49;20119:399;-1:-1:-1;;;;;;;;20119:399:0:o;20526:290::-;20644:4;20661:12;20676:20;20685:10;20982:76;;5879:66:1;20982:76:0;;;5867:79:1;21035:16:0;5962:12:1;;;5955:28;5999:12;;;5992:28;;;20945:7:0;;6036:12:1;;20982:76:0;;;;;;;;;;;;20972:87;;;;;;20965:94;;20890:177;;;;20676:20;20724:24;;;20707:14;20724:24;;;;;;;;;10428:25:1;;;10501:4;10489:17;;10469:18;;;10462:45;;;;10523:18;;;10516:34;;;10566:18;;;10559:34;;;20661:35:0;;-1:-1:-1;20707:14:0;20724:24;;10400:19:1;;20724:24:0;10382:217:1;16088:270:0;-1:-1:-1;;;;;16164:21:0;;16156:67;;;;-1:-1:-1;;;16156:67:0;;13748:2:1;16156:67:0;;;13730:21:1;13787:2;13767:18;;;13760:30;13826:34;13806:18;;;13799:62;-1:-1:-1;;;13877:18:1;;;13870:31;13918:19;;16156:67:0;13720:223:1;16156:67:0;-1:-1:-1;;;;;16236:18:0;;;;;;:9;:18;;;;;:28;;16258:6;;16236:18;:28;;16258:6;;16236:28;:::i;:::-;;;;;;;;16291:6;16275:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;16313:37:0;;9569:25:1;;;16339:1:0;;-1:-1:-1;;;;;16313:37:0;;;-1:-1:-1;;;;;;;;;;;16313:37:0;9557:2:1;9542:18;16313:37:0;9524:76:1;4564:201:0;4688:68;;-1:-1:-1;;;;;6922:15:1;;;4688:68:0;;;6904:34:1;6974:15;;6954:18;;;6947:43;7006:18;;;6999:34;;;4662:95:0;;4681:5;;-1:-1:-1;;;4711:27:0;6839:18:1;;4688:68:0;;;;-1:-1:-1;;4688:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;4688:68:0;-1:-1:-1;;;;;;4688:68:0;;;;;;;;;;4662:18;:95::i;:::-;4564:201;;;;:::o;14242:204::-;14303:4;14328:10;-1:-1:-1;;;;;14328:26:0;;;;;:57;;-1:-1:-1;14358:10:0;-1:-1:-1;;;;;14358:27:0;14380:4;14358:27;;14328:57;14320:66;;;;;;14397:17;14403:2;14407:6;14397:5;:17::i;:::-;-1:-1:-1;14432:6:0;;14242:204;-1:-1:-1;14242:204:0:o;4383:173::-;4489:58;;-1:-1:-1;;;;;7911:32:1;;4489:58:0;;;7893:51:1;7960:18;;;7953:34;;;4463:85:0;;4482:5;;-1:-1:-1;;;4512:23:0;7866:18:1;;4489:58:0;7848:145:1;4463:85:0;4383:173;;;:::o;5123:598::-;5211:27;5219:5;-1:-1:-1;;;;;5211:25:0;;:27::i;:::-;5203:71;;;;-1:-1:-1;;;5203:71:0;;14971:2:1;5203:71:0;;;14953:21:1;15010:2;14990:18;;;14983:30;15049:33;15029:18;;;15022:61;15100:18;;5203:71:0;14943:181:1;5203:71:0;5348:12;5362:23;5397:5;-1:-1:-1;;;;;5389:19:0;5409:4;5389:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5347:67;;;;5433:7;5425:52;;;;-1:-1:-1;;;5425:52:0;;11905:2:1;5425:52:0;;;11887:21:1;;;11924:18;;;11917:30;11983:34;11963:18;;;11956:62;12035:18;;5425:52:0;11877:182:1;5425:52:0;5494:17;;:21;5490:224;;5636:10;5625:30;;;;;;;;;;;;:::i;:::-;5617:85;;;;-1:-1:-1;;;5617:85:0;;14560:2:1;5617:85:0;;;14542:21:1;14599:2;14579:18;;;14572:30;14638:34;14618:18;;;14611:62;-1:-1:-1;;;14689:18:1;;;14682:40;14739:19;;5617:85:0;14532:232:1;3943:374:0;4003:4;4226:20;;4069:66;4266:15;;;;;:42;;-1:-1:-1;4285:23:0;;;4258:51;-1:-1:-1;;3943:374:0:o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;192:156;258:20;;318:4;307:16;;297:27;;287:2;;338:1;335;328:12;353:196;;465:2;453:9;444:7;440:23;436:32;433:2;;;486:6;478;471:22;433:2;514:29;533:9;514:29;:::i;554:270::-;;;683:2;671:9;662:7;658:23;654:32;651:2;;;704:6;696;689:22;651:2;732:29;751:9;732:29;:::i;:::-;722:39;;780:38;814:2;803:9;799:18;780:38;:::i;:::-;770:48;;641:183;;;;;:::o;829:338::-;;;;975:2;963:9;954:7;950:23;946:32;943:2;;;996:6;988;981:22;943:2;1024:29;1043:9;1024:29;:::i;:::-;1014:39;;1072:38;1106:2;1095:9;1091:18;1072:38;:::i;:::-;1062:48;;1157:2;1146:9;1142:18;1129:32;1119:42;;933:234;;;;;:::o;1172:616::-;;;;;;;;1384:3;1372:9;1363:7;1359:23;1355:33;1352:2;;;1406:6;1398;1391:22;1352:2;1434:29;1453:9;1434:29;:::i;:::-;1424:39;;1482:38;1516:2;1505:9;1501:18;1482:38;:::i;:::-;1472:48;;1567:2;1556:9;1552:18;1539:32;1529:42;;1618:2;1607:9;1603:18;1590:32;1580:42;;1641:37;1673:3;1662:9;1658:19;1641:37;:::i;:::-;1631:47;;1725:3;1714:9;1710:19;1697:33;1687:43;;1777:3;1766:9;1762:19;1749:33;1739:43;;1342:446;;;;;;;;;;:::o;1793:264::-;;;1922:2;1910:9;1901:7;1897:23;1893:32;1890:2;;;1943:6;1935;1928:22;1890:2;1971:29;1990:9;1971:29;:::i;:::-;1961:39;2047:2;2032:18;;;;2019:32;;-1:-1:-1;;;1880:177:1:o;2062:338::-;;;;2208:2;2196:9;2187:7;2183:23;2179:32;2176:2;;;2229:6;2221;2214:22;2176:2;2257:29;2276:9;2257:29;:::i;:::-;2247:39;;2333:2;2322:9;2318:18;2305:32;2295:42;;2356:38;2390:2;2379:9;2375:18;2356:38;:::i;:::-;2346:48;;2166:234;;;;;:::o;2405:783::-;;;;;2570:2;2558:9;2549:7;2545:23;2541:32;2538:2;;;2591:6;2583;2576:22;2538:2;2619:29;2638:9;2619:29;:::i;:::-;2609:39;;2695:2;2684:9;2680:18;2667:32;2657:42;;2750:2;2739:9;2735:18;2722:32;2773:18;2814:2;2806:6;2803:14;2800:2;;;2835:6;2827;2820:22;2800:2;2878:6;2867:9;2863:22;2853:32;;2923:7;2916:4;2912:2;2908:13;2904:27;2894:2;;2950:6;2942;2935:22;2894:2;2995;2982:16;3021:2;3013:6;3010:14;3007:2;;;3042:6;3034;3027:22;3007:2;3092:7;3087:2;3078:6;3074:2;3070:15;3066:24;3063:37;3060:2;;;3118:6;3110;3103:22;3060:2;2528:660;;;;-1:-1:-1;;3154:2:1;3146:11;;-1:-1:-1;;;2528:660:1:o;3193:616::-;;;;;;;;3405:3;3393:9;3384:7;3380:23;3376:33;3373:2;;;3427:6;3419;3412:22;3373:2;3455:29;3474:9;3455:29;:::i;:::-;3445:39;;3531:2;3520:9;3516:18;3503:32;3493:42;;3582:2;3571:9;3567:18;3554:32;3544:42;;3605:36;3637:2;3626:9;3622:18;3605:36;:::i;:::-;3595:46;;3688:3;3677:9;3673:19;3660:33;3650:43;;3740:3;3729:9;3725:19;3712:33;3702:43;;3764:39;3798:3;3787:9;3783:19;3764:39;:::i;:::-;3754:49;;3363:446;;;;;;;;;;:::o;3814:251::-;;3923:2;3911:9;3902:7;3898:23;3894:32;3891:2;;;3944:6;3936;3929:22;3891:2;3988:9;3975:23;4007:28;4029:5;4007:28;:::i;4070:255::-;;4190:2;4178:9;4169:7;4165:23;4161:32;4158:2;;;4211:6;4203;4196:22;4158:2;4248:9;4242:16;4267:28;4289:5;4267:28;:::i;4330:332::-;;;;4476:2;4464:9;4455:7;4451:23;4447:32;4444:2;;;4497:6;4489;4482:22;4444:2;4538:9;4525:23;4515:33;;4567:38;4601:2;4590:9;4586:18;4567:38;:::i;4667:190::-;;4779:2;4767:9;4758:7;4754:23;4750:32;4747:2;;;4800:6;4792;4785:22;4747:2;-1:-1:-1;4828:23:1;;4737:120;-1:-1:-1;4737:120:1:o;4862:194::-;;4985:2;4973:9;4964:7;4960:23;4956:32;4953:2;;;5006:6;4998;4991:22;4953:2;-1:-1:-1;5034:16:1;;4943:113;-1:-1:-1;4943:113:1:o;5061:264::-;;;5190:2;5178:9;5169:7;5165:23;5161:32;5158:2;;;5211:6;5203;5196:22;5158:2;5252:9;5239:23;5229:33;;5281:38;5315:2;5304:9;5300:18;5281:38;:::i;5330:274::-;;5497:6;5491:13;5513:53;5559:6;5554:3;5547:4;5539:6;5535:17;5513:53;:::i;:::-;5582:16;;;;;5467:137;-1:-1:-1;;5467:137:1:o;7044:670::-;-1:-1:-1;;;;;7411:15:1;;;7393:34;;7463:15;;;;7458:2;7443:18;;7436:43;7510:2;7495:18;;7488:34;;;;7553:2;7538:18;;7531:34;;;;7614:4;7602:17;7596:3;7581:19;;7574:46;7373:3;7636:19;;7629:35;7695:3;7680:19;;7673:35;;;;7342:3;7327:19;;7309:405::o;7998:562::-;-1:-1:-1;;;;;8211:32:1;;8193:51;;8275:2;8260:18;;8253:34;;;8323:2;8318;8303:18;;8296:30;;;8342:18;;8335:34;;;7998:562;8362:6;8412;8406:3;8391:19;;8378:49;8447:22;;;8471:3;8443:32;;;8436:46;;;;8543:2;8522:15;;;-1:-1:-1;;8518:29:1;8503:45;8499:55;;8183:377;-1:-1:-1;;;8183:377:1:o;8565:661::-;8736:2;8788:21;;;8858:13;;8761:18;;;8880:22;;;8565:661;;8736:2;8959:15;;;;8933:2;8918:18;;;8565:661;9005:195;9019:6;9016:1;9013:13;9005:195;;;9084:13;;-1:-1:-1;;;;;9080:39:1;9068:52;;9175:15;;;;9140:12;;;;9116:1;9034:9;9005:195;;;-1:-1:-1;9217:3:1;;8716:510;-1:-1:-1;;;;;;8716:510:1:o;10604:383::-;;10753:2;10742:9;10735:21;10785:6;10779:13;10828:6;10823:2;10812:9;10808:18;10801:34;10844:66;10903:6;10898:2;10887:9;10883:18;10878:2;10870:6;10866:15;10844:66;:::i;:::-;10971:2;10950:15;-1:-1:-1;;10946:29:1;10931:45;;;;10978:2;10927:54;;10725:262;-1:-1:-1;;10725:262:1:o;10992:349::-;11194:2;11176:21;;;11233:2;11213:18;;;11206:30;11272:27;11267:2;11252:18;;11245:55;11332:2;11317:18;;11166:175::o;11346:352::-;11548:2;11530:21;;;11587:2;11567:18;;;11560:30;11626;11621:2;11606:18;;11599:58;11689:2;11674:18;;11520:178::o;12064:411::-;12266:2;12248:21;;;12305:2;12285:18;;;12278:30;12344:34;12339:2;12324:18;;12317:62;-1:-1:-1;;;12410:2:1;12395:18;;12388:45;12465:3;12450:19;;12238:237::o;13192:349::-;13394:2;13376:21;;;13433:2;13413:18;;;13406:30;13472:27;13467:2;13452:18;;13445:55;13532:2;13517:18;;13366:175::o;15860:128::-;;15931:1;15927:6;15924:1;15921:13;15918:2;;;15937:18;;:::i;:::-;-1:-1:-1;15973:9:1;;15908:80::o;15993:125::-;;16061:1;16058;16055:8;16052:2;;;16066:18;;:::i;:::-;-1:-1:-1;16103:9:1;;16042:76::o;16123:258::-;16195:1;16205:113;16219:6;16216:1;16213:13;16205:113;;;16295:11;;;16289:18;16276:11;;;16269:39;16241:2;16234:10;16205:113;;;16336:6;16333:1;16330:13;16327:2;;;-1:-1:-1;;16371:1:1;16353:16;;16346:27;16176:205::o;16386:380::-;16471:1;16461:12;;16518:1;16508:12;;;16529:2;;16583:4;16575:6;16571:17;16561:27;;16529:2;16636;16628:6;16625:14;16605:18;16602:38;16599:2;;;16682:10;16677:3;16673:20;16670:1;16663:31;16717:4;16714:1;16707:15;16745:4;16742:1;16735:15;16599:2;;16441:325;;;:::o;16771:135::-;;-1:-1:-1;;16831:17:1;;16828:2;;;16851:18;;:::i;:::-;-1:-1:-1;16898:1:1;16887:13;;16818:88::o;16911:127::-;16972:10;16967:3;16963:20;16960:1;16953:31;17003:4;17000:1;16993:15;17027:4;17024:1;17017:15;17043:118;17129:5;17122:13;17115:21;17108:5;17105:32;17095:2;;17151:1;17148;17141:12;17095:2;17085:76;:::o

Swarm Source

ipfs://09f133a1a7b82a84f7eb4d540d9b7632a2fb97e06b30fd18edb4988cdb70ae81
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.