Token IceToken

 

Overview ERC-20

Price
$0.00 @ 0.000000 FTM
Fully Diluted Market Cap
Total Supply:
3,813,812.856706 ICE

Holders:
10,733 addresses

Transfers:
-

Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

OVERVIEW

Popsicle finance is a next-gen cross-chain liquidity provider (LP) yield optimization platform


Update? Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
IceToken

Compiler Version
v0.8.3+commit.8d00100c

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-03-27
*/

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

pragma solidity ^0.8.0;

/**
 * @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 IceToken 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;

    // Maximum total supply of the token (69M)
    uint256 public maxTotalSupply = 69000000000000000000000000;

    // 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;
        // dev
        isMinter[_vault] = true;
        minters.push(_vault);
        //
        delayVault = block.timestamp;
        
        // dev
        _init = false;
        //

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

        isMinter[msg.sender] = true;
    }

    /// @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");
        require(_totalSupply + amount <= maxTotalSupply, "ERC20: minting more then MaxTotalSupply");

        _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 pure 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 pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", 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 Security Audit

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":[],"name":"maxTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"}]

60e06040526a3913517ebd3c0c650000006004556202a3006006553480156200002757600080fd5b506040516200308e3803806200308e8339810160408190526200004a9162000441565b84516200005f906000906020880190620002b9565b50835162000075906001906020870190620002b9565b507fff0000000000000000000000000000000000000000000000000000000000000060f884901b166080526001600160601b0319606083901b1660a0526001600160a01b038216156200014957816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015620000fc57600080fd5b505afa15801562000111573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001379190620004e0565b60ff168360ff16146200014957600080fd5b6005805461ffff191660019081178255600980546001600160a01b0385166001600160a01b03199182168117909255600c8054821683179055600082815260076020526040808220805460ff19908116871790915560088054968701815583527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3909501805490931690931790915542600d558354909216909255905146917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9162000216919062000504565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018290523060a082015260c00160408051601f19818403018152918152815160209283012060c05233600090815260079092529020805460ff1916600117905550620005fa945050505050565b828054620002c790620005a7565b90600052602060002090601f016020900481019282620002eb576000855562000336565b82601f106200030657805160ff191683800117855562000336565b8280016001018555821562000336579182015b828111156200033657825182559160200191906001019062000319565b506200034492915062000348565b5090565b5b8082111562000344576000815560010162000349565b80516001600160a01b03811681146200037757600080fd5b919050565b600082601f8301126200038d578081fd5b81516001600160401b0380821115620003aa57620003aa620005e4565b604051601f8301601f19908116603f01168101908282118183101715620003d557620003d5620005e4565b81604052838152602092508683858801011115620003f1578485fd5b8491505b83821015620004145785820183015181830184015290820190620003f5565b838211156200042557848385830101525b9695505050505050565b805160ff811681146200037757600080fd5b600080600080600060a0868803121562000459578081fd5b85516001600160401b038082111562000470578283fd5b6200047e89838a016200037c565b9650602088015191508082111562000494578283fd5b50620004a3888289016200037c565b945050620004b4604087016200042f565b9250620004c4606087016200035f565b9150620004d4608087016200035f565b90509295509295909350565b600060208284031215620004f2578081fd5b620004fd826200042f565b9392505050565b600080835482600182811c9150808316806200052157607f831692505b60208084108214156200054257634e487b7160e01b87526022600452602487fd5b8180156200055957600181146200056b5762000599565b60ff1986168952848901965062000599565b60008a815260209020885b86811015620005915781548b82015290850190830162000576565b505084890196505b509498975050505050505050565b600181811c90821680620005bc57607f821691505b60208210811415620005de57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b60805160f81c60a05160601c60c051612a116200067d600039600081816104b00152611e6d0152600081816105b401528181611376015281816113c201528181611442015281816116690152818161187e0152818161190701528181611bd401528181611cf101528181612129015261215c015260006104770152612a116000f3fe608060405234801561001057600080fd5b506004361061035a5760003560e01c806370a08231116101d3578063bebbf4d011610104578063d93f2445116100a2578063f75c26641161007c578063f75c266414610798578063f954734e146107a0578063fbfa77cf146107b3578063fca3b5aa146107c65761035a565b8063d93f244514610752578063dd62ed3e1461075a578063ec126c77146107855761035a565b8063cae9ca51116100de578063cae9ca5114610711578063cfbd488514610724578063d0e30db014610737578063d505accf1461073f5761035a565b8063bebbf4d0146106e2578063c3081240146106f5578063c4b740f5146106fe5761035a565b806395d89b4111610171578063a29dff721161014b578063a29dff7214610690578063a9059cbb14610699578063aa271e1a146106ac578063b6b55f25146106cf5761035a565b806395d89b41146106605780639dc29fac14610668578063a045442c1461067b5761035a565b80638623ec7b116101ad5780638623ec7b1461062957806387689e281461063c5780638da5cb5b1461064557806391c5df491461064d5761035a565b806370a08231146105d65780637ecebe00146105f657806381a37c18146106165761035a565b80633644e515116102ad578063605629d61161024b5780636817031b116102255780636817031b146105805780636a42b8f8146105935780636e553f651461059c5780636f307dc3146105af5761035a565b8063605629d61461054757806360e232a91461055a578063628d6cba1461056d5761035a565b806340c10f191161028757806340c10f19146104ed5780634ca8f0ed1461050057806352113ba7146105095780635f9b105d146105345761035a565b80633644e515146104ab5780633ccfd60b146104d25780634000aea0146104da5761035a565b806318160ddd1161031a5780632e1a7d4d116102f45780632e1a7d4d146104255780632ebe3fbb1461043857806330adf81f1461044b578063313ce567146104725761035a565b806318160ddd1461040157806323b872dd146104095780632ab4d0521461041c5761035a565b806239d6ec1461035f578062bf26f414610385578062f714ce146103ac57806306fdde03146103bf578063095ea7b3146103d45780630d707df8146103f7575b600080fd5b61037261036d3660046124d6565b6107d9565b6040519081526020015b60405180910390f35b6103727f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd5981565b6103726103ba366004612688565b61082f565b6103c7610843565b60405161037c919061279c565b6103e76103e23660046124ad565b6108d1565b604051901515815260200161037c565b6103ff61092b565b005b6103726109e7565b6103e7610417366004612409565b6109ee565b61037260045481565b610372610433366004612658565b610bd9565b6103ff6104463660046123bd565b610bee565b6103727f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6104997f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff909116815260200161037c565b6103727f000000000000000000000000000000000000000000000000000000000000000081565b610372610cc5565b6103e76104e8366004612511565b610ce6565b6103e76104fb3660046124ad565b610e3f565b610372600e5481565b600c5461051c906001600160a01b031681565b6040516001600160a01b03909116815260200161037c565b6103e76105423660046123bd565b610e81565b6103e7610555366004612444565b610f55565b6103e76105683660046123bd565b611165565b6103e761057b366004612688565b611239565b6103ff61058e3660046123bd565b611301565b61037260065481565b6103726105aa366004612688565b611367565b61051c7f000000000000000000000000000000000000000000000000000000000000000081565b6103726105e43660046123bd565b60026020526000908152604090205481565b6103726106043660046123bd565b60106020526000908152604090205481565b610372610624366004612593565b6113a8565b61051c610637366004612658565b611482565b610372600d5481565b61051c6114ac565b600a5461051c906001600160a01b031681565b6103c76114b6565b6103e76106763660046124ad565b6114c3565b610683611522565b60405161037c919061274f565b610372600f5481565b6103e76106a73660046124ad565b611584565b6103e76106ba3660046123bd565b60076020526000908152604090205460ff1681565b6103726106dd366004612658565b61165a565b6103726106f0366004612688565b61169b565b610372600b5481565b6103ff61070c3660046125fc565b6116d5565b6103e761071f366004612511565b611727565b6103ff6107323660046123bd565b611803565b61037261185c565b6103ff61074d366004612444565b61193f565b6103ff611aad565b6103726107683660046123d7565b601160209081526000928352604080842090915290825290205481565b6103e7610793366004612634565b611b18565b61051c611b8d565b6103726107ae366004612593565b611bba565b60095461051c906001600160a01b031681565b6103ff6107d43660046123bd565b611c72565b60006107e3611b8d565b6001600160a01b0316336001600160a01b03161461081c5760405162461bcd60e51b8152600401610813906127cf565b60405180910390fd5b610827848484611cd8565b949350505050565b600061083c338484611cd8565b9392505050565b600080546108509061291e565b80601f016020809104026020016040519081016040528092919081815260200182805461087c9061291e565b80156108c95780601f1061089e576101008083540402835291602001916108c9565b820191906000526020600020905b8154815290600101906020018083116108ac57829003601f168201915b505050505081565b3360008181526011602090815260408083206001600160a01b038716808552925280832085905551919290916000805160206129bc8339815191529061091a9086815260200190565b60405180910390a350600192915050565b610933611b8d565b6001600160a01b0316336001600160a01b0316146109635760405162461bcd60e51b8152600401610813906127cf565b600b5442101561097257600080fd5b600a80546001600160a01b039081166000908152600760205260408120805460ff1916600190811790915592546008805494850181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee390920180546001600160a01b03191692909116919091179055565b6003545b90565b60006001600160a01b038316151580610a1057506001600160a01b0383163014155b610a1957600080fd5b6001600160a01b0384163314610b13576001600160a01b03841660009081526011602090815260408083203384529091529020546000198114610b115782811015610ab85760405162461bcd60e51b815260206004820152602960248201527f416e7973776170563345524332303a2072657175657374206578636565647320604482015268616c6c6f77616e636560b81b6064820152608401610813565b6000610ac484836128db565b6001600160a01b038716600081815260116020908152604080832033808552908352928190208590555184815293945090926000805160206129bc833981519152910160405180910390a3505b505b6001600160a01b03841660009081526002602052604090205482811015610b4c5760405162461bcd60e51b81526004016108139061283d565b610b5683826128db565b6001600160a01b038087166000908152600260205260408082209390935590861681529081208054859290610b8c9084906128c3565b92505081905550836001600160a01b0316856001600160a01b031660008051602061299c83398151915285604051610bc691815260200190565b60405180910390a3506001949350505050565b6000610be6338333611cd8565b90505b919050565b610bf6611b8d565b6001600160a01b0316336001600160a01b031614610c265760405162461bcd60e51b8152600401610813906127cf565b60055460ff16610c3557600080fd5b600980546001600160a01b039092166001600160a01b03199283168117909155600c80548316821790556000818152600760205260408120805460ff1990811660019081179092556008805492830181559092527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee301805490931690911790915542600d55600580549091169055565b336000818152600260205260408120549091610ce19181611cd8565b905090565b60006001600160a01b038516151580610d0857506001600160a01b0385163014155b610d1157600080fd5b3360009081526002602052604090205484811015610d415760405162461bcd60e51b81526004016108139061283d565b610d4b85826128db565b33600090815260026020526040808220929092556001600160a01b03881681529081208054879290610d7e9084906128c3565b90915550506040518581526001600160a01b03871690339060008051602061299c8339815191529060200160405180910390a3604051635260769b60e11b81526001600160a01b0387169063a4c0ed3690610de3903390899089908990600401612707565b602060405180830381600087803b158015610dfd57600080fd5b505af1158015610e11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e359190612618565b9695505050505050565b3360009081526007602052604081205460ff16610e6e5760405162461bcd60e51b81526004016108139061288c565b610e788383611d20565b50600192915050565b6000610e8b611b8d565b6001600160a01b0316336001600160a01b031614610ebb5760405162461bcd60e51b8152600401610813906127cf565b6001600160a01b038216610ee15760405162461bcd60e51b815260040161081390612806565b600c80546001600160a01b0319166001600160a01b038416179055600654610f0990426128c3565b600d819055600c546009546040516001600160a01b0392831692909116907f1d065115f314fb9bad9557bd5460b9e3c66f7223b1dd04e73e828f0bb5afe89f90600090a4506001919050565b600084421115610fa75760405162461bcd60e51b815260206004820152601e60248201527f416e7973776170563345524332303a2045787069726564207065726d697400006044820152606401610813565b6001600160a01b038816600090815260106020526040812080547f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd59918b918b918b919086610ff483612959565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012090506110558982878787611e5d565b8061106857506110688982878787611f4d565b61107157600080fd5b6001600160a01b03881615158061109157506001600160a01b0388163014155b61109a57600080fd5b6001600160a01b038916600090815260026020526040902054878110156110d35760405162461bcd60e51b81526004016108139061283d565b6110dd88826128db565b6001600160a01b03808c1660009081526002602052604080822093909355908b16815290812080548a92906111139084906128c3565b92505081905550886001600160a01b03168a6001600160a01b031660008051602061299c8339815191528a60405161114d91815260200190565b60405180910390a35060019998505050505050505050565b600061116f611b8d565b6001600160a01b0316336001600160a01b03161461119f5760405162461bcd60e51b8152600401610813906127cf565b6001600160a01b0382166111c55760405162461bcd60e51b815260040161081390612806565b600c80546001600160a01b0319166001600160a01b0384161790556006546111ed90426128c3565b600d819055600c546009546040516001600160a01b0392831692909116907f5c364079e7102c27c608f9b237c735a1b7bfa0b67f27c2ad26bad447bf965cac90600090a4506001919050565b600554600090610100900460ff16156112945760405162461bcd60e51b815260206004820152601860248201527f416e7973776170563445524332303a206f6e6c794175746800000000000000006044820152606401610813565b6001600160a01b0382166112ba5760405162461bcd60e51b815260040161081390612806565b6112c43384611fe2565b6040518381526001600160a01b0383169033907f6b616089d04950dc06c45c6dd787d657980543f89651aec47924752c7d16c8889060200161091a565b611309611b8d565b6001600160a01b0316336001600160a01b0316146113395760405162461bcd60e51b8152600401610813906127cf565b600c80546001600160a01b0319166001600160a01b03831617905560065461136190426128c3565b600d5550565b600061139e6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163330866120b4565b61083c8383612125565b60405163d505accf60e01b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d505accf90611403908b9030908c908c908c908c908c906004016126c6565b600060405180830381600087803b15801561141d57600080fd5b505af1158015611431573d6000803e3d6000fd5b5061146c9250506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016905089308a6120b4565b6114768783612125565b98975050505050505050565b6008818154811061149257600080fd5b6000918252602090912001546001600160a01b0316905081565b6000610ce1611b8d565b600180546108509061291e565b3360009081526007602052604081205460ff166114f25760405162461bcd60e51b81526004016108139061288c565b6001600160a01b0383166115185760405162461bcd60e51b815260040161081390612806565b610e788383611fe2565b6060600880548060200260200160405190810160405280929190818152602001828054801561157a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161155c575b5050505050905090565b60006001600160a01b0383161515806115a657506001600160a01b0383163014155b6115af57600080fd5b33600090815260026020526040902054828110156115df5760405162461bcd60e51b81526004016108139061283d565b6115e983826128db565b33600090815260026020526040808220929092556001600160a01b0386168152908120805485929061161c9084906128c3565b90915550506040518381526001600160a01b03851690339060008051602061299c833981519152906020015b60405180910390a35060019392505050565b60006116916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163330856120b4565b610be68233612125565b60006116a5611b8d565b6001600160a01b0316336001600160a01b03161461139e5760405162461bcd60e51b8152600401610813906127cf565b6116dd611b8d565b6001600160a01b0316336001600160a01b03161461170d5760405162461bcd60e51b8152600401610813906127cf565b600580549115156101000261ff0019909216919091179055565b3360008181526011602090815260408083206001600160a01b038916808552925280832087905551919290916000805160206129bc833981519152906117709088815260200190565b60405180910390a360405162ba451f60e01b81526001600160a01b0386169062ba451f906117a8903390889088908890600401612707565b602060405180830381600087803b1580156117c257600080fd5b505af11580156117d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fa9190612618565b95945050505050565b61180b611b8d565b6001600160a01b0316336001600160a01b03161461183b5760405162461bcd60e51b8152600401610813906127cf565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6040516370a0823160e01b815233600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b1580156118c057600080fd5b505afa1580156118d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f89190612670565b905061192f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163330846120b4565b6119398133612125565b91505090565b8342111561198f5760405162461bcd60e51b815260206004820152601e60248201527f416e7973776170563345524332303a2045787069726564207065726d697400006044820152606401610813565b6001600160a01b038716600090815260106020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866119dc83612959565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050611a3d8882868686611e5d565b80611a505750611a508882868686611f4d565b611a5957600080fd5b6001600160a01b038881166000818152601160209081526040808320948c16808452948252918290208a905590518981526000805160206129bc833981519152910160405180910390a35050505050505050565b611ab5611b8d565b6001600160a01b0316336001600160a01b031614611ae55760405162461bcd60e51b8152600401610813906127cf565b600d54421015611af457600080fd5b600c54600980546001600160a01b0319166001600160a01b03909216919091179055565b3360009081526007602052604081205460ff16611b475760405162461bcd60e51b81526004016108139061288c565b611b518383611d20565b826001600160a01b0316847f05d0634fe981be85c22e2942a880821b70095d84e152c3ea3c17a4e4250d9d618460405161164891815260200190565b6000600d544210611baa5750600c546001600160a01b03166109eb565b506009546001600160a01b031690565b60405163302b14eb60e11b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063605629d690611c15908b9030908c908c908c908c908c906004016126c6565b602060405180830381600087803b158015611c2f57600080fd5b505af1158015611c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c679190612618565b506114768783612125565b611c7a611b8d565b6001600160a01b0316336001600160a01b031614611caa5760405162461bcd60e51b8152600401610813906127cf565b600a80546001600160a01b0319166001600160a01b038316179055600654611cd290426128c3565b600b5550565b6000611ce48484611fe2565b611d186001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001683856121a2565b509092915050565b6001600160a01b038216611d765760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610813565b60045481600354611d8791906128c3565b1115611de55760405162461bcd60e51b815260206004820152602760248201527f45524332303a206d696e74696e67206d6f7265207468656e204d6178546f74616044820152666c537570706c7960c81b6064820152608401610813565b8060036000828254611df791906128c3565b90915550506001600160a01b03821660009081526002602052604081208054839290611e249084906128c3565b90915550506040518181526001600160a01b0383169060009060008051602061299c833981519152906020015b60405180910390a35050565b60405161190160f01b60208201527f0000000000000000000000000000000000000000000000000000000000000000602282015260428101859052600090819060620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0015b6020604051602081039080840390855afa158015611f0c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906114765750876001600160a01b0316816001600160a01b03161498975050505050505050565b600080611fa7866040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b6040805160008082526020820180845284905260ff89169282019290925260608101879052608081018690529192509060019060a001611eea565b6001600160a01b0382166120425760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610813565b6001600160a01b0382166000908152600260205260408120805483929061206a9084906128db565b92505081905550806003600082825461208391906128db565b90915550506040518181526000906001600160a01b0384169060008051602061299c83398151915290602001611e51565b6040516001600160a01b038085166024830152831660448201526064810182905261211f9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526121d7565b50505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161580159061218857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163014155b61219157600080fd5b61219b8284611d20565b5090919050565b6040516001600160a01b0383166024820152604481018290526121d290849063a9059cbb60e01b906064016120e8565b505050565b6121e9826001600160a01b031661235e565b6122355760405162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e7472616374006044820152606401610813565b600080836001600160a01b03168360405161225091906126aa565b6000604051808303816000865af19150503d806000811461228d576040519150601f19603f3d011682016040523d82523d6000602084013e612292565b606091505b5091509150816122e45760405162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646044820152606401610813565b80511561211f57808060200190518101906122ff9190612618565b61211f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610813565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906108275750141592915050565b80356001600160a01b0381168114610be957600080fd5b803560ff81168114610be957600080fd5b6000602082840312156123ce578081fd5b61083c82612395565b600080604083850312156123e9578081fd5b6123f283612395565b915061240060208401612395565b90509250929050565b60008060006060848603121561241d578081fd5b61242684612395565b925061243460208501612395565b9150604084013590509250925092565b600080600080600080600060e0888a03121561245e578283fd5b61246788612395565b965061247560208901612395565b95506040880135945060608801359350612491608089016123ac565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156124bf578182fd5b6124c883612395565b946020939093013593505050565b6000806000606084860312156124ea578283fd5b6124f384612395565b92506020840135915061250860408501612395565b90509250925092565b60008060008060608587031215612526578384fd5b61252f85612395565b935060208501359250604085013567ffffffffffffffff80821115612552578384fd5b818701915087601f830112612565578384fd5b813581811115612573578485fd5b886020828501011115612584578485fd5b95989497505060200194505050565b600080600080600080600060e0888a0312156125ad578283fd5b6125b688612395565b965060208801359550604088013594506125d2606089016123ac565b93506080880135925060a088013591506125ee60c08901612395565b905092959891949750929550565b60006020828403121561260d578081fd5b813561083c8161298a565b600060208284031215612629578081fd5b815161083c8161298a565b600080600060608486031215612648578283fd5b8335925061243460208501612395565b600060208284031215612669578081fd5b5035919050565b600060208284031215612681578081fd5b5051919050565b6000806040838503121561269a578182fd5b8235915061240060208401612395565b600082516126bc8184602087016128f2565b9190910192915050565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b0385168152602081018490526060604082018190528101829052600082846080840137818301608090810191909152601f909201601f191601019392505050565b6020808252825182820181905260009190848201906040850190845b818110156127905783516001600160a01b03168352928401929184019160010161276b565b50909695505050505050565b60006020825282518060208401526127bb8160408501602087016128f2565b601f01601f19169190910160400192915050565b60208082526019908201527f416e7973776170563345524332303a20464f5242494444454e00000000000000604082015260600190565b6020808252601c908201527f416e7973776170563345524332303a2061646472657373283078302900000000604082015260600190565b6020808252602f908201527f416e7973776170563345524332303a207472616e7366657220616d6f756e742060408201526e657863656564732062616c616e636560881b606082015260800190565b60208082526019908201527f416e7973776170563445524332303a20464f5242494444454e00000000000000604082015260600190565b600082198211156128d6576128d6612974565b500190565b6000828210156128ed576128ed612974565b500390565b60005b8381101561290d5781810151838201526020016128f5565b8381111561211f5750506000910152565b600181811c9082168061293257607f821691505b6020821081141561295357634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561296d5761296d612974565b5060010190565b634e487b7160e01b600052601160045260246000fd5b801515811461299857600080fd5b5056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a2646970667358221220b7afb6e8cc911c037d54dea04a511ae33101e175dfd22873c5b96f8249347ef264736f6c6343000803003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c564ee9f21ed8a2d8e7e76c085740d5e4c5fafbe0000000000000000000000000000000000000000000000000000000000000008496365546f6b656e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034943450000000000000000000000000000000000000000000000000000000000

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

00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c564ee9f21ed8a2d8e7e76c085740d5e4c5fafbe0000000000000000000000000000000000000000000000000000000000000008496365546f6b656e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034943450000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): IceToken
Arg [1] : _symbol (string): ICE
Arg [2] : _decimals (uint8): 18
Arg [3] : _underlying (address): 0x0000000000000000000000000000000000000000
Arg [4] : _vault (address): 0xc564ee9f21ed8a2d8e7e76c085740d5e4c5fafbe

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 000000000000000000000000c564ee9f21ed8a2d8e7e76c085740d5e4c5fafbe
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [6] : 496365546f6b656e000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [8] : 4943450000000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

5729:19556:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15157:149;;;;;;:::i;:::-;;:::i;:::-;;;9504:25:1;;;9492:2;9477:18;15157:149:0;;;;;;;;6096:136;;6140:92;6096:136;;15023:126;;;;;;:::i;:::-;;:::i;5806:18::-;;;:::i;:::-;;;;;;;:::i;16982:265::-;;;;;;:::i;:::-;;:::i;:::-;;;9331:14:1;;9324:22;9306:41;;9294:2;9279:18;16982:265:0;9261:92:1;8607:179:0;;;:::i;:::-;;12992:102;;;:::i;23205:927::-;;;;;;:::i;:::-;;:::i;6506:58::-;;;;;;14893:122;;;;;;:::i;:::-;;:::i;7893:272::-;;;;;;:::i;:::-;;:::i;5952:137::-;;5994:95;5952:137;;5858:41;;;;;;;;16186:4:1;16174:17;;;16156:36;;16144:2;16129:18;5858:41:0;16111:87:1;6239:41:0;;;;;14759:126;;;:::i;24759:523::-;;;;;;:::i;:::-;;:::i;9726:133::-;;;;;;:::i;:::-;;:::i;7232:24::-;;;;;;7167:27;;;;;-1:-1:-1;;;;;7167:27:0;;;;;;-1:-1:-1;;;;;6555:32:1;;;6537:51;;6525:2;6510:18;7167:27:0;6492:102:1;9393:325:0;;;;;;:::i;:::-;;:::i;19580:938::-;;;;;;:::i;:::-;;:::i;9064:321::-;;;;;;:::i;:::-;;:::i;10299:328::-;;;;;;:::i;:::-;;:::i;8322:140::-;;;;;;:::i;:::-;;:::i;6842:29::-;;;;;;14211:193;;;;;;:::i;:::-;;:::i;5908:35::-;;;;;6360:54;;;;;;:::i;:::-;;;;;;;;;;;;;;10899:51;;;;;;:::i;:::-;;;;;;;;;;;;;;13102:349;;;;;;:::i;:::-;;:::i;6989:24::-;;;;;;:::i;:::-;;:::i;7201:22::-;;;;;;7530:78;;;:::i;7100:28::-;;;;;-1:-1:-1;;;;;7100:28:0;;;5831:20;;;:::i;9867:207::-;;;;;;:::i;:::-;;:::i;8955:99::-;;;:::i;:::-;;;;;;;:::i;7263:22::-;;;;;;21878:438;;;;;;:::i;:::-;;:::i;6942:40::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;14014:189;;;;;;:::i;:::-;;:::i;14412:127::-;;;;;;:::i;:::-;;:::i;7135:23::-;;;;;;7791:94;;;;;;:::i;:::-;;:::i;17668:356::-;;;;;;:::i;:::-;;:::i;8849:98::-;;;;;;:::i;:::-;;:::i;13760:246::-;;;:::i;18857:715::-;;;;;;:::i;:::-;;:::i;8470:129::-;;;:::i;11120:75::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;10082:209;;;;;;:::i;:::-;;:::i;7616:167::-;;;:::i;13459:293::-;;;;;;:::i;:::-;;:::i;7071:20::-;;;;;-1:-1:-1;;;;;7071:20:0;;;8173:141;;;;;;:::i;:::-;;:::i;15157:149::-;15247:4;7467:5;:3;:5::i;:::-;-1:-1:-1;;;;;7453:19:0;:10;-1:-1:-1;;;;;7453:19:0;;7445:57;;;;-1:-1:-1;;;7445:57:0;;;;;;;:::i;:::-;;;;;;;;;15271:27:::1;15281:4;15287:6;15295:2;15271:9;:27::i;:::-;15264:34:::0;15157:149;-1:-1:-1;;;;15157:149:0:o;15023:126::-;15084:4;15108:33;15118:10;15130:6;15138:2;15108:9;:33::i;:::-;15101:40;15023:126;-1:-1:-1;;;15023:126:0:o;5806:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16982:265::-;17135:10;17058:4;17125:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;17125:30:0;;;;;;;;;;:38;;;17179:36;17058:4;;17125:30;;-1:-1:-1;;;;;;;;;;;17179:36:0;;;17158:5;9504:25:1;;9492:2;9477:18;;9459:76;17179:36:0;;;;;;;;-1:-1:-1;17235:4:0;16982:265;;;;:::o;8607:179::-;7467:5;:3;:5::i;:::-;-1:-1:-1;;;;;7453:19:0;:10;-1:-1:-1;;;;;7453:19:0;;7445:57;;;;-1:-1:-1;;;7445:57:0;;;;;;;:::i;:::-;8687:11:::1;;8668:15;:30;;8660:39;;;::::0;::::1;;8719:13;::::0;;-1:-1:-1;;;;;8719:13:0;;::::1;8710:23;::::0;;;:8:::1;:23;::::0;;;;:30;;-1:-1:-1;;8710:30:0::1;8736:4;8710:30:::0;;::::1;::::0;;;8764:13;;8751:7:::1;:27:::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;8751:27:0::1;8764:13:::0;;;::::1;8751:27:::0;;;::::1;::::0;;8607:179::o;12992:102::-;13074:12;;12992:102;;:::o;23205:927::-;23295:4;-1:-1:-1;;;;;23320:16:0;;;;;:39;;-1:-1:-1;;;;;;23340:19:0;;23354:4;23340:19;;23320:39;23312:48;;;;;;-1:-1:-1;;;;;23375:18:0;;23383:10;23375:18;23371:477;;-1:-1:-1;;;;;23489:15:0;;23471;23489;;;:9;:15;;;;;;;;23505:10;23489:27;;;;;;;;-1:-1:-1;;23535:28:0;;23531:306;;23603:5;23592:7;:16;;23584:70;;;;-1:-1:-1;;;23584:70:0;;14493:2:1;23584:70:0;;;14475:21:1;14532:2;14512:18;;;14505:30;14571:34;14551:18;;;14544:62;-1:-1:-1;;;14622:18:1;;;14615:39;14671:19;;23584:70:0;14465:231:1;23584:70:0;23673:15;23691;23701:5;23691:7;:15;:::i;:::-;-1:-1:-1;;;;;23725:15:0;;;;;;:9;:15;;;;;;;;23741:10;23725:27;;;;;;;;;;:37;;;23786:35;9504:25:1;;;23725:37:0;;-1:-1:-1;23741:10:0;;-1:-1:-1;;;;;;;;;;;23786:35:0;9477:18:1;23786:35:0;;;;;;;23531:306;;23371:477;;-1:-1:-1;;;;;23878:15:0;;23860;23878;;;:9;:15;;;;;;23912:16;;;;23904:76;;;;-1:-1:-1;;;23904:76:0;;;;;;;:::i;:::-;24011:15;24021:5;24011:7;:15;:::i;:::-;-1:-1:-1;;;;;23993:15:0;;;;;;;:9;:15;;;;;;:33;;;;24037:13;;;;;;;;:22;;24054:5;;23993:15;24037:22;;24054:5;;24037:22;:::i;:::-;;;;;;;;24090:2;-1:-1:-1;;;;;24075:25:0;24084:4;-1:-1:-1;;;;;24075:25:0;-1:-1:-1;;;;;;;;;;;24094:5:0;24075:25;;;;9504::1;;9492:2;9477:18;;9459:76;24075:25:0;;;;;;;;-1:-1:-1;24120:4:0;;23205:927;-1:-1:-1;;;;23205:927:0:o;14893:122::-;14942:4;14966:41;14976:10;14988:6;14996:10;14966:9;:41::i;:::-;14959:48;;14893:122;;;;:::o;7893:272::-;7467:5;:3;:5::i;:::-;-1:-1:-1;;;;;7453:19:0;:10;-1:-1:-1;;;;;7453:19:0;;7445:57;;;;-1:-1:-1;;;7445:57:0;;;;;;;:::i;:::-;7966:5:::1;::::0;::::1;;7958:14;;;::::0;::::1;;7983:5;:14:::0;;-1:-1:-1;;;;;7983:14:0;;::::1;-1:-1:-1::0;;;;;;7983:14:0;;::::1;::::0;::::1;::::0;;;8008:12:::1;:21:::0;;;::::1;::::0;::::1;::::0;;7983:5:::1;8040:16:::0;;;:8:::1;:16;::::0;;;;:23;;-1:-1:-1;;8040:23:0;;::::1;7983:14:::0;8040:23;;::::1;::::0;;;8074:7:::1;:20:::0;;;;::::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;;8118:15:::1;8105:10;:28:::0;8144:5:::1;:13:::0;;;;::::1;::::0;;7893:272::o;14759:126::-;14831:10;14797:4;14843:21;;;:9;:21;;;;;;14797:4;;14821:56;;14831:10;14821:9;:56::i;:::-;14814:63;;14759:126;:::o;24759:523::-;24856:4;-1:-1:-1;;;;;24881:16:0;;;;;:39;;-1:-1:-1;;;;;;24901:19:0;;24915:4;24901:19;;24881:39;24873:48;;;;;;24962:10;24934:15;24952:21;;;:9;:21;;;;;;24992:16;;;;24984:76;;;;-1:-1:-1;;;24984:76:0;;;;;;;:::i;:::-;25097:15;25107:5;25097:7;:15;:::i;:::-;25083:10;25073:21;;;;:9;:21;;;;;;:39;;;;-1:-1:-1;;;;;25123:13:0;;;;;;;:22;;25140:5;;25073:21;25123:22;;25140:5;;25123:22;:::i;:::-;;;;-1:-1:-1;;25161:31:0;;9504:25:1;;;-1:-1:-1;;;;;25161:31:0;;;25170:10;;-1:-1:-1;;;;;;;;;;;25161:31:0;9492:2:1;9477:18;25161:31:0;;;;;;;25212:62;;-1:-1:-1;;;25212:62:0;;-1:-1:-1;;;;;25212:37:0;;;;;:62;;25250:10;;25262:5;;25269:4;;;;25212:62;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25205:69;24759:523;-1:-1:-1;;;;;;24759:523:0:o;9726:133::-;7344:10;9795:4;7335:20;;;:8;:20;;;;;;;;7327:58;;;;-1:-1:-1;;;7327:58:0;;;;;;;:::i;:::-;9812:17:::1;9818:2;9822:6;9812:5;:17::i;:::-;-1:-1:-1::0;9847:4:0::1;9726:133:::0;;;;:::o;9393:325::-;9461:4;7467:5;:3;:5::i;:::-;-1:-1:-1;;;;;7453:19:0;:10;-1:-1:-1;;;;;7453:19:0;;7445:57;;;;-1:-1:-1;;;7445:57:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9486:22:0;::::1;9478:63;;;;-1:-1:-1::0;;;9478:63:0::1;;;;;;;:::i;:::-;9552:12;:23:::0;;-1:-1:-1;;;;;;9552:23:0::1;-1:-1:-1::0;;;;;9552:23:0;::::1;;::::0;;9617:5:::1;::::0;9599:23:::1;::::0;:15:::1;:23;:::i;:::-;9586:10;:36:::0;;;9663:12:::1;::::0;9656:5:::1;::::0;9638:50:::1;::::0;-1:-1:-1;;;;;9663:12:0;;::::1;::::0;9656:5;;::::1;::::0;9638:50:::1;::::0;9663:12:::1;::::0;9638:50:::1;-1:-1:-1::0;9706:4:0::1;9393:325:::0;;;:::o;19580:938::-;19727:4;19771:8;19752:15;:27;;19744:70;;;;-1:-1:-1;;;19744:70:0;;12617:2:1;19744:70:0;;;12599:21:1;12656:2;12636:18;;;12629:30;12695:32;12675:18;;;12668:60;12745:18;;19744:70:0;12589:180:1;19744:70:0;-1:-1:-1;;;;;20007:14:0;;19827:18;20007:14;;;:6;:14;;;;;:16;;6140:92;;19937:6;;19962:2;;19983:5;;20007:16;19827:18;20007:16;;;:::i;:::-;;;;-1:-1:-1;19872:179:0;;;;;;9827:25:1;;;;-1:-1:-1;;;;;9926:15:1;;;9906:18;;;9899:43;9978:15;;;;9958:18;;;9951:43;10010:18;;;10003:34;10053:19;;;10046:35;10097:19;;;10090:35;;;9799:19;;19872:179:0;;;;;;;;;;;;19848:204;;;;;;19827:225;;20073:41;20086:6;20094:10;20106:1;20109;20112;20073:12;:41::i;:::-;:92;;;;20118:47;20137:6;20145:10;20157:1;20160;20163;20118:18;:47::i;:::-;20065:101;;;;;;-1:-1:-1;;;;;20187:16:0;;;;;:39;;-1:-1:-1;;;;;;20207:19:0;;20221:4;20207:19;;20187:39;20179:48;;;;;;-1:-1:-1;;;;;20258:17:0;;20240:15;20258:17;;;:9;:17;;;;;;20294:16;;;;20286:76;;;;-1:-1:-1;;;20286:76:0;;;;;;;:::i;:::-;20395:15;20405:5;20395:7;:15;:::i;:::-;-1:-1:-1;;;;;20375:17:0;;;;;;;:9;:17;;;;;;:35;;;;20421:13;;;;;;;;:22;;20438:5;;20375:17;20421:22;;20438:5;;20421:22;:::i;:::-;;;;;;;;20476:2;-1:-1:-1;;;;;20459:27:0;20468:6;-1:-1:-1;;;;;20459:27:0;-1:-1:-1;;;;;;;;;;;20480:5:0;20459:27;;;;9504:25:1;;9492:2;9477:18;;9459:76;20459:27:0;;;;;;;;-1:-1:-1;20506:4:0;;19580:938;-1:-1:-1;;;;;;;;;19580:938:0:o;9064:321::-;9131:4;7467:5;:3;:5::i;:::-;-1:-1:-1;;;;;7453:19:0;:10;-1:-1:-1;;;;;7453:19:0;;7445:57;;;;-1:-1:-1;;;7445:57:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9156:22:0;::::1;9148:63;;;;-1:-1:-1::0;;;9148:63:0::1;;;;;;;:::i;:::-;9222:12;:23:::0;;-1:-1:-1;;;;;;9222:23:0::1;-1:-1:-1::0;;;;;9222:23:0;::::1;;::::0;;9287:5:::1;::::0;9269:23:::1;::::0;:15:::1;:23;:::i;:::-;9256:10;:36:::0;;;9330:12:::1;::::0;9323:5:::1;::::0;9308:47:::1;::::0;-1:-1:-1;;;;;9330:12:0;;::::1;::::0;9323:5;;::::1;::::0;9308:47:::1;::::0;9330:12:::1;::::0;9308:47:::1;-1:-1:-1::0;9373:4:0::1;9064:321:::0;;;:::o;10299:328::-;10392:10;;10366:4;;10392:10;;;;;10391:11;10383:48;;;;-1:-1:-1;;;10383:48:0;;13384:2:1;10383:48:0;;;13366:21:1;13423:2;13403:18;;;13396:30;13462:26;13442:18;;;13435:54;13506:18;;10383:48:0;13356:174:1;10383:48:0;-1:-1:-1;;;;;10450:22:0;;10442:63;;;;-1:-1:-1;;;10442:63:0;;;;;;;:::i;:::-;10516:25;10522:10;10534:6;10516:5;:25::i;:::-;10557:40;;9504:25:1;;;-1:-1:-1;;;;;10557:40:0;;;10568:10;;10557:40;;9492:2:1;9477:18;10557:40:0;9459:76:1;8322:140:0;7467:5;:3;:5::i;:::-;-1:-1:-1;;;;;7453:19:0;:10;-1:-1:-1;;;;;7453:19:0;;7445:57;;;;-1:-1:-1;;;7445:57:0;;;;;;;:::i;:::-;8386:12:::1;:21:::0;;-1:-1:-1;;;;;;8386:21:0::1;-1:-1:-1::0;;;;;8386:21:0;::::1;;::::0;;8449:5:::1;::::0;8431:23:::1;::::0;:15:::1;:23;:::i;:::-;8418:10;:36:::0;-1:-1:-1;8322:140:0:o;14211:193::-;14271:4;14288:70;-1:-1:-1;;;;;14295:10:0;14288:35;14324:10;14344:4;14351:6;14288:35;:70::i;:::-;14376:20;14385:6;14393:2;14376:8;:20::i;13102:349::-;13256:74;;-1:-1:-1;;;13256:74:0;;13239:4;;-1:-1:-1;;;;;13263:10:0;13256:25;;;;:74;;13282:6;;13298:4;;13305:5;;13312:8;;13322:1;;13325;;13328;;13256:74;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13341:65:0;;-1:-1:-1;;;;;;;13348:10:0;13341:35;;-1:-1:-1;13377:6:0;13393:4;13400:5;13341:35;:65::i;:::-;13424:19;13433:5;13440:2;13424:8;:19::i;:::-;13417:26;13102:349;-1:-1:-1;;;;;;;;13102:349:0:o;6989:24::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6989:24:0;;-1:-1:-1;6989:24:0;:::o;7530:78::-;7568:7;7595:5;:3;:5::i;5831:20::-;;;;;;;:::i;9867:207::-;7344:10;9938:4;7335:20;;;:8;:20;;;;;;;;7327:58;;;;-1:-1:-1;;;7327:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9963:18:0;::::1;9955:59;;;;-1:-1:-1::0;;;9955:59:0::1;;;;;;;:::i;:::-;10025:19;10031:4;10037:6;10025:5;:19::i;8955:99::-:0;9003:16;9039:7;9032:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9032:14:0;;;;;;;;;;;;;;;;;;;;;;;8955:99;:::o;21878:438::-;21950:4;-1:-1:-1;;;;;21975:16:0;;;;;:39;;-1:-1:-1;;;;;;21995:19:0;;22009:4;21995:19;;21975:39;21967:48;;;;;;22054:10;22026:15;22044:21;;;:9;:21;;;;;;22084:16;;;;22076:76;;;;-1:-1:-1;;;22076:76:0;;;;;;;:::i;:::-;22189:15;22199:5;22189:7;:15;:::i;:::-;22175:10;22165:21;;;;:9;:21;;;;;;:39;;;;-1:-1:-1;;;;;22215:13:0;;;;;;;:22;;22232:5;;22165:21;22215:22;;22232:5;;22215:22;:::i;:::-;;;;-1:-1:-1;;22253:31:0;;9504:25:1;;;-1:-1:-1;;;;;22253:31:0;;;22262:10;;-1:-1:-1;;;;;;;;;;;22253:31:0;9492:2:1;9477:18;22253:31:0;;;;;;;;-1:-1:-1;22304:4:0;;21878:438;-1:-1:-1;;;21878:438:0:o;14014:189::-;14062:4;14079:70;-1:-1:-1;;;;;14086:10:0;14079:35;14115:10;14135:4;14142:6;14079:35;:70::i;:::-;14167:28;14176:6;14184:10;14167:8;:28::i;14412:127::-;14487:4;7467:5;:3;:5::i;:::-;-1:-1:-1;;;;;7453:19:0;:10;-1:-1:-1;;;;;7453:19:0;;7445:57;;;;-1:-1:-1;;;7445:57:0;;;;;;;:::i;7791:94::-;7467:5;:3;:5::i;:::-;-1:-1:-1;;;;;7453:19:0;:10;-1:-1:-1;;;;;7453:19:0;;7445:57;;;;-1:-1:-1;;;7445:57:0;;;;;;;:::i;:::-;7857:10:::1;:20:::0;;;::::1;;;;-1:-1:-1::0;;7857:20:0;;::::1;::::0;;;::::1;::::0;;7791:94::o;17668:356::-;17849:10;17772:4;17839:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;17839:30:0;;;;;;;;;;:38;;;17893:36;17772:4;;17839:30;;-1:-1:-1;;;;;;;;;;;17893:36:0;;;17872:5;9504:25:1;;9492:2;9477:18;;9459:76;17893:36:0;;;;;;;;17949:67;;-1:-1:-1;;;17949:67:0;;-1:-1:-1;;;;;17949:42:0;;;;;:67;;17992:10;;18004:5;;18011:4;;;;17949:67;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17942:74;17668:356;-1:-1:-1;;;;;17668:356:0:o;8849:98::-;7467:5;:3;:5::i;:::-;-1:-1:-1;;;;;7453:19:0;:10;-1:-1:-1;;;;;7453:19:0;;7445:57;;;;-1:-1:-1;;;7445:57:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8916:15:0::1;8934:5;8916:15:::0;;;:8:::1;:15;::::0;;;;:23;;-1:-1:-1;;8916:23:0::1;::::0;;8849:98::o;13760:246::-;13829:40;;-1:-1:-1;;;13829:40:0;;13858:10;13829:40;;;6537:51:1;13797:4:0;;;;-1:-1:-1;;;;;13836:10:0;13829:28;;;;6510:18:1;;13829:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13814:55;-1:-1:-1;13880:71:0;-1:-1:-1;;;;;13887:10:0;13880:35;13916:10;13936:4;13814:55;13880:35;:71::i;:::-;13969:29;13978:7;13987:10;13969:8;:29::i;:::-;13962:36;;;13760:246;:::o;18857:715::-;19026:8;19007:15;:27;;18999:70;;;;-1:-1:-1;;;18999:70:0;;12617:2:1;18999:70:0;;;12599:21:1;12656:2;12636:18;;;12629:30;12695:32;12675:18;;;12668:60;12745:18;;18999:70:0;12589:180:1;18999:70:0;-1:-1:-1;;;;;19265:14:0;;19082:18;19265:14;;;:6;:14;;;;;:16;;5994:95;;19190:6;;19215:7;;19241:5;;19265:16;19082:18;19265:16;;;:::i;:::-;;;;-1:-1:-1;19127:182:0;;;;;;9827:25:1;;;;-1:-1:-1;;;;;9926:15:1;;;9906:18;;;9899:43;9978:15;;;;9958:18;;;9951:43;10010:18;;;10003:34;10053:19;;;10046:35;10097:19;;;10090:35;;;9799:19;;19127:182:0;;;;;;;;;;;;19103:207;;;;;;19082:228;;19331:41;19344:6;19352:10;19364:1;19367;19370;19331:12;:41::i;:::-;:92;;;;19376:47;19395:6;19403:10;19415:1;19418;19421;19376:18;:47::i;:::-;19323:101;;;;;;-1:-1:-1;;;;;19482:17:0;;;;;;;:9;:17;;;;;;;;:26;;;;;;;;;;;;;:34;;;19532:32;;9504:25:1;;;-1:-1:-1;;;;;;;;;;;19532:32:0;9477:18:1;19532:32:0;;;;;;;18857:715;;;;;;;;:::o;8470:129::-;7467:5;:3;:5::i;:::-;-1:-1:-1;;;;;7453:19:0;:10;-1:-1:-1;;;;;7453:19:0;;7445:57;;;;-1:-1:-1;;;7445:57:0;;;;;;;:::i;:::-;8549:10:::1;;8530:15;:29;;8522:38;;;::::0;::::1;;8579:12;::::0;8571:5:::1;:20:::0;;-1:-1:-1;;;;;;8571:20:0::1;-1:-1:-1::0;;;;;8579:12:0;;::::1;8571:20:::0;;;::::1;::::0;;8470:129::o;10082:209::-;7344:10;10172:4;7335:20;;;:8;:20;;;;;;;;7327:58;;;;-1:-1:-1;;;7327:58:0;;;;;;;:::i;:::-;10189:22:::1;10195:7;10204:6;10189:5;:22::i;:::-;10245:7;-1:-1:-1::0;;;;;10227:34:0::1;10237:6;10227:34;10254:6;10227:34;;;;9504:25:1::0;;9492:2;9477:18;;9459:76;7616:167:0;7652:7;7695:10;;7676:15;:29;7672:81;;-1:-1:-1;7729:12:0;;-1:-1:-1;;;;;7729:12:0;7722:19;;7672:81;-1:-1:-1;7770:5:0;;-1:-1:-1;;;;;7770:5:0;7616:167;:::o;13459:293::-;13621:86;;-1:-1:-1;;;13621:86:0;;13604:4;;-1:-1:-1;;;;;13628:10:0;13621:37;;;;:86;;13659:6;;13675:4;;13682:5;;13689:8;;13699:1;;13702;;13705;;13621:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13725:19;13734:5;13741:2;13725:8;:19::i;8173:141::-;7467:5;:3;:5::i;:::-;-1:-1:-1;;;;;7453:19:0;:10;-1:-1:-1;;;;;7453:19:0;;7445:57;;;;-1:-1:-1;;;7445:57:0;;;;;;;:::i;:::-;8237:13:::1;:21:::0;;-1:-1:-1;;;;;;8237:21:0::1;-1:-1:-1::0;;;;;8237:21:0;::::1;;::::0;;8301:5:::1;::::0;8283:23:::1;::::0;:15:::1;:23;:::i;:::-;8269:11;:37:::0;-1:-1:-1;8173:141:0:o;15314:198::-;15390:4;15407:19;15413:4;15419:6;15407:5;:19::i;:::-;15437:43;-1:-1:-1;;;;;15444:10:0;15437:31;15469:2;15473:6;15437:31;:43::i;:::-;-1:-1:-1;15498:6:0;;15314:198;-1:-1:-1;;15314:198:0:o;15793:370::-;-1:-1:-1;;;;;15869:21:0;;15861:65;;;;-1:-1:-1;;;15861:65:0;;15674:2:1;15861:65:0;;;15656:21:1;15713:2;15693:18;;;15686:30;15752:33;15732:18;;;15725:61;15803:18;;15861:65:0;15646:181:1;15861:65:0;15970:14;;15960:6;15945:12;;:21;;;;:::i;:::-;:39;;15937:91;;;;-1:-1:-1;;;15937:91:0;;12976:2:1;15937:91:0;;;12958:21:1;13015:2;12995:18;;;12988:30;13054:34;13034:18;;;13027:62;-1:-1:-1;;;13105:18:1;;;13098:37;13152:19;;15937:91:0;12948:229:1;15937:91:0;16057:6;16041:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;16074:18:0;;;;;;:9;:18;;;;;:28;;16096:6;;16074:18;:28;;16096:6;;16074:28;:::i;:::-;;;;-1:-1:-1;;16118:37:0;;9504:25:1;;;-1:-1:-1;;;;;16118:37:0;;;16135:1;;-1:-1:-1;;;;;;;;;;;16118:37:0;9492:2:1;9477:18;16118:37:0;;;;;;;;15793:370;;:::o;20526:399::-;20694:110;;-1:-1:-1;;;20694:110:0;;;6252:27:1;20758:16:0;6295:11:1;;;6288:27;6331:12;;;6324:28;;;20638:4:0;;;;6368:12:1;;20694:110:0;;;-1:-1:-1;;20694:110:0;;;;;;;;;20670:135;;20694:110;20670:135;;;;20816:14;20833:24;;;;;;;;;10363:25:1;;;10436:4;10424:17;;10404:18;;;10397:45;;;;10458:18;;;10451:34;;;10501:18;;;10494:34;;;20670:135:0;;-1:-1:-1;20816:14:0;20833:24;;10335:19:1;;20833:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20833:24:0;;-1:-1:-1;;20833:24:0;;;-1:-1:-1;;;;;;;20876:20:0;;;;;;:40;;;20910:6;-1:-1:-1;;;;;20900:16:0;:6;-1:-1:-1;;;;;20900:16:0;;20868:49;20526:399;-1:-1:-1;;;;;;;;20526:399:0:o;20933:290::-;21051:4;21068:12;21083:20;21092:10;21389:58;;5851:66:1;21389:58:0;;;5839:79:1;5934:12;;;5927:28;;;21352:7:0;;5971:12:1;;21389:58:0;;;;;;;;;;;;21379:69;;;;;;21372:76;;21297:159;;;;21083:20;21131:24;;;21114:14;21131:24;;;;;;;;;10363:25:1;;;10436:4;10424:17;;10404:18;;;10397:45;;;;10458:18;;;10451:34;;;10501:18;;;10494:34;;;21068:35:0;;-1:-1:-1;21114:14:0;21131:24;;10335:19:1;;21131:24:0;10317:217:1;16495:270:0;-1:-1:-1;;;;;16571:21:0;;16563:67;;;;-1:-1:-1;;;16563:67:0;;14091:2:1;16563:67:0;;;14073:21:1;14130:2;14110:18;;;14103:30;14169:34;14149:18;;;14142:62;-1:-1:-1;;;14220:18:1;;;14213:31;14261:19;;16563:67:0;14063:223:1;16563:67:0;-1:-1:-1;;;;;16643:18:0;;;;;;:9;:18;;;;;:28;;16665:6;;16643:18;:28;;16665:6;;16643:28;:::i;:::-;;;;;;;;16698:6;16682:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;16720:37:0;;9504:25:1;;;16746:1:0;;-1:-1:-1;;;;;16720:37:0;;;-1:-1:-1;;;;;;;;;;;16720:37:0;9492:2:1;9477:18;16720:37:0;9459:76:1;4565:201:0;4689:68;;-1:-1:-1;;;;;6857:15:1;;;4689:68:0;;;6839:34:1;6909:15;;6889:18;;;6882:43;6941:18;;;6934:34;;;4663:95:0;;4682:5;;-1:-1:-1;;;4712:27:0;6774:18:1;;4689:68:0;;;;-1:-1:-1;;4689:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;4689:68:0;-1:-1:-1;;;;;;4689:68:0;;;;;;;;;;4663:18;:95::i;:::-;4565:201;;;;:::o;14547:204::-;14608:4;14633:10;-1:-1:-1;;;;;14633:26:0;;;;;:57;;-1:-1:-1;14663:10:0;-1:-1:-1;;;;;14663:27:0;14685:4;14663:27;;14633:57;14625:66;;;;;;14702:17;14708:2;14712:6;14702:5;:17::i;:::-;-1:-1:-1;14737:6:0;;14547:204;-1:-1:-1;14547:204:0:o;4384:173::-;4490:58;;-1:-1:-1;;;;;7846:32:1;;4490:58:0;;;7828:51:1;7895:18;;;7888:34;;;4464:85:0;;4483:5;;-1:-1:-1;;;4513:23:0;7801:18:1;;4490:58:0;7783:145:1;4464:85:0;4384:173;;;:::o;5124:598::-;5212:27;5220:5;-1:-1:-1;;;;;5212:25:0;;:27::i;:::-;5204:71;;;;-1:-1:-1;;;5204:71:0;;15314:2:1;5204:71:0;;;15296:21:1;15353:2;15333:18;;;15326:30;15392:33;15372:18;;;15365:61;15443:18;;5204:71:0;15286:181:1;5204:71:0;5349:12;5363:23;5398:5;-1:-1:-1;;;;;5390:19:0;5410:4;5390:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5348:67;;;;5434:7;5426:52;;;;-1:-1:-1;;;5426:52:0;;11840:2:1;5426:52:0;;;11822:21:1;;;11859:18;;;11852:30;11918:34;11898:18;;;11891:62;11970:18;;5426:52:0;11812:182:1;5426:52:0;5495:17;;:21;5491:224;;5637:10;5626:30;;;;;;;;;;;;:::i;:::-;5618:85;;;;-1:-1:-1;;;5618:85:0;;14903:2:1;5618:85:0;;;14885:21:1;14942:2;14922:18;;;14915:30;14981:34;14961:18;;;14954:62;-1:-1:-1;;;15032:18:1;;;15025:40;15082:19;;5618:85:0;14875:232:1;3944:374:0;4004:4;4227:20;;4070:66;4267:15;;;;;:42;;-1:-1:-1;4286:23:0;;;4259:51;-1:-1:-1;;3944: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;6979:670::-;-1:-1:-1;;;;;7346:15:1;;;7328:34;;7398:15;;;;7393:2;7378:18;;7371:43;7445:2;7430:18;;7423:34;;;;7488:2;7473:18;;7466:34;;;;7549:4;7537:17;7531:3;7516:19;;7509:46;7308:3;7571:19;;7564:35;7630:3;7615:19;;7608:35;;;;7277:3;7262:19;;7244:405::o;7933:562::-;-1:-1:-1;;;;;8146:32:1;;8128:51;;8210:2;8195:18;;8188:34;;;8258:2;8253;8238:18;;8231:30;;;8277:18;;8270:34;;;7933:562;8297:6;8347;8341:3;8326:19;;8313:49;8382:22;;;8406:3;8378:32;;;8371:46;;;;8478:2;8457:15;;;-1:-1:-1;;8453:29:1;8438:45;8434:55;;8118:377;-1:-1:-1;;;8118:377:1:o;8500:661::-;8671:2;8723:21;;;8793:13;;8696:18;;;8815:22;;;8500:661;;8671:2;8894:15;;;;8868:2;8853:18;;;8500:661;8940:195;8954:6;8951:1;8948:13;8940:195;;;9019:13;;-1:-1:-1;;;;;9015:39:1;9003:52;;9110:15;;;;9075:12;;;;9051:1;8969:9;8940:195;;;-1:-1:-1;9152:3:1;;8651:510;-1:-1:-1;;;;;;8651:510:1:o;10539:383::-;;10688:2;10677:9;10670:21;10720:6;10714:13;10763:6;10758:2;10747:9;10743:18;10736:34;10779:66;10838:6;10833:2;10822:9;10818:18;10813:2;10805:6;10801:15;10779:66;:::i;:::-;10906:2;10885:15;-1:-1:-1;;10881:29:1;10866:45;;;;10913:2;10862:54;;10660:262;-1:-1:-1;;10660:262:1:o;10927:349::-;11129:2;11111:21;;;11168:2;11148:18;;;11141:30;11207:27;11202:2;11187:18;;11180:55;11267:2;11252:18;;11101:175::o;11281:352::-;11483:2;11465:21;;;11522:2;11502:18;;;11495:30;11561;11556:2;11541:18;;11534:58;11624:2;11609:18;;11455:178::o;11999:411::-;12201:2;12183:21;;;12240:2;12220:18;;;12213:30;12279:34;12274:2;12259:18;;12252:62;-1:-1:-1;;;12345:2:1;12330:18;;12323:45;12400:3;12385:19;;12173:237::o;13535:349::-;13737:2;13719:21;;;13776:2;13756:18;;;13749:30;13815:27;13810:2;13795:18;;13788:55;13875:2;13860:18;;13709:175::o;16203:128::-;;16274:1;16270:6;16267:1;16264:13;16261:2;;;16280:18;;:::i;:::-;-1:-1:-1;16316:9:1;;16251:80::o;16336:125::-;;16404:1;16401;16398:8;16395:2;;;16409:18;;:::i;:::-;-1:-1:-1;16446:9:1;;16385:76::o;16466:258::-;16538:1;16548:113;16562:6;16559:1;16556:13;16548:113;;;16638:11;;;16632:18;16619:11;;;16612:39;16584:2;16577:10;16548:113;;;16679:6;16676:1;16673:13;16670:2;;;-1:-1:-1;;16714:1:1;16696:16;;16689:27;16519:205::o;16729:380::-;16808:1;16804:12;;;;16851;;;16872:2;;16926:4;16918:6;16914:17;16904:27;;16872:2;16979;16971:6;16968:14;16948:18;16945:38;16942:2;;;17025:10;17020:3;17016:20;17013:1;17006:31;17060:4;17057:1;17050:15;17088:4;17085:1;17078:15;16942:2;;16784:325;;;:::o;17114:135::-;;-1:-1:-1;;17174:17:1;;17171:2;;;17194:18;;:::i;:::-;-1:-1:-1;17241:1:1;17230:13;;17161:88::o;17254:127::-;17315:10;17310:3;17306:20;17303:1;17296:31;17346:4;17343:1;17336:15;17370:4;17367:1;17360:15;17386:118;17472:5;17465:13;17458:21;17451:5;17448:32;17438:2;;17494:1;17491;17484:12;17438:2;17428:76;:::o

Swarm Source

ipfs://b7afb6e8cc911c037d54dea04a511ae33101e175dfd22873c5b96f8249347ef2
Loading