Goerli Testnet

Token

USD Coin (USDC)
ERC-20

Overview

Max Total Supply

0 USDC

Holders

5,845

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 6 Decimals)

Balance
10 USDC
0x07865c6e87b9f70255377e024ace6630c1eaa37f
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
USDC

Compiler Version
v0.8.1+commit.df193b15

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2021-05-08
*/

pragma solidity ^0.8.0;

interface IERC20 {
    function symbol() external view returns (string memory);

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

    // Note this is non standard but nearly all ERC20 have exposed decimal functions
    function decimals() external view returns (uint8);

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

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

/**
 * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
 * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
 *
 * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
 * presenting a message signaed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't
 * need to send a transaction, and thus is not required to hold Ether at all.
 */
interface IERC20Permit is IERC20 {
    /**
     * @dev Sets `value` as the allowance of `spender` over `owner`'s tokens,
     * given `owner`'s signed approval.
     *
     * IMPORTANT: The same issues {IERC20-approve} has related to transaction
     * ordering also apply here.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `deadline` must be a timestamp in the future.
     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
     * over the EIP712-formatted function arguments.
     * - the signature must use ``owner``'s current nonce (see {nonces}).
     *
     * For more information on the signature format, see the
     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
     * section].
     */
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    /**
     * @dev Returns the current 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 Returns the domain separator used in the encoding of the signature for `permit`, as defined by {EIP712}.
     */
    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

abstract contract ERC20Permit is IERC20Permit {
    // --- ERC20 Data ---
    // The name of the erc20 token
    string public name;
    // The symbol of the erc20 token
    string public override symbol;
    // The decimals of the erc20 token, should default to 18 for new tokens
    uint8 public override decimals;

    // A mapping which tracks user token balances
    mapping(address => uint256) public override balanceOf;
    // A mapping which tracks which addresses a user allows to move their tokens
    mapping(address => mapping(address => uint256)) public override allowance;
    // A mapping which tracks the permit signature nonces for users
    mapping(address => uint256) public override nonces;

    // --- EIP712 niceties ---
    // solhint-disable-next-line var-name-mixedcase
    bytes32 public override DOMAIN_SEPARATOR;
    // bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32
        public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;

    /// @notice Initializes the erc20 contract
    /// @param name_ the value 'name' will be set to
    /// @param symbol_ the value 'symbol' will be set to
    /// @dev decimals default to 18 and must be reset by an inheriting contract for
    ///      non standard decimal values
    constructor(string memory name_, string memory symbol_) {
        // Set the state variables
        name = name_;
        symbol = symbol_;
        decimals = 18;

        // By setting these addresses to 0 attempting to execute a transfer to
        // either of them will revert. This is a gas efficient way to prevent
        // a common user mistake where they transfer to the token address.
        // These values are not considered 'real' tokens and so are not included
        // in 'total supply' which only contains minted tokens.
        balanceOf[address(0)] = type(uint256).max;
        balanceOf[address(this)] = type(uint256).max;

        // Computes the EIP 712 domain separator which prevents user signed messages for
        // this contract to be replayed in other contracts.
        // https://eips.ethereum.org/EIPS/eip-712
        DOMAIN_SEPARATOR = keccak256(
            abi.encode(
                keccak256(
                    "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
                ),
                keccak256(bytes(name)),
                keccak256(bytes("1")),
                block.chainid,
                address(this)
            )
        );
    }

    // --- Token ---
    /// @notice Allows a token owner to send tokens to another address
    /// @param recipient The address which will be credited with the tokens
    /// @param amount The amount user token to send
    /// @return returns true on success, reverts on failure so cannot return false.
    /// @dev transfers to this contract address or 0 will fail
    function transfer(address recipient, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        // We forward this call to 'transferFrom'
        return transferFrom(msg.sender, recipient, amount);
    }

    /// @notice Transfers an amount of erc20 from a spender to a receipt
    /// @param spender The source of the ERC20 tokens
    /// @param recipient The destination of the ERC20 tokens
    /// @param amount the number of tokens to send
    /// @return returns true on success and reverts on failure
    /// @dev will fail transfers which send funds to this contract or 0
    function transferFrom(
        address spender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        // Load balance and allowance
        uint256 balance = balanceOf[spender];
        require(balance >= amount, "ERC20: insufficient-balance");
        // We potentially have to change allowances
        if (spender != msg.sender) {
            // Loading the allowance in the if block prevents vanilla transfers
            // from paying for the sload.
            uint256 allowed = allowance[spender][msg.sender];
            // If the allowance is max we do not reduce it
            // Note - This means that max allowances will be more gas efficient
            // by not requiring a sstore on 'transferFrom'
            if (allowed != type(uint256).max) {
                require(allowed >= amount, "ERC20: insufficient-allowance");
                allowance[spender][msg.sender] = allowed - amount;
            }
        }
        // Update the balances
        balanceOf[spender] = balance - amount;
        // Note - In the constructor we initialize the 'balanceOf' of address 0 and
        //        the token address to uint256.max and so in 8.0 transfers to those
        //        addresses revert on this step.
        balanceOf[recipient] = balanceOf[recipient] + amount;
        // Emit the needed event
        emit Transfer(spender, recipient, amount);
        // Return that this call succeeded
        return true;
    }

    /// @notice This internal minting function allows inheriting contracts
    ///         to mint tokens in the way they wish.
    /// @param account the address which will receive the token.
    /// @param amount the amount of token which they will receive
    /// @dev This function is virtual so that it can be overridden, if you
    ///      are reviewing this contract for security you should ensure to
    ///      check for overrides
    function _mint(address account, uint256 amount) internal virtual {
        // Add tokens to the account
        balanceOf[account] = balanceOf[account] + amount;
        // Emit an event to track the minting
        emit Transfer(address(0), account, amount);
    }

    /// @notice This internal burning function allows inheriting contracts to
    ///         burn tokens in the way they see fit.
    /// @param account the account to remove tokens from
    /// @param amount  the amount of tokens to remove
    /// @dev This function is virtual so that it can be overridden, if you
    ///      are reviewing this contract for security you should ensure to
    ///      check for overrides
    function _burn(address account, uint256 amount) internal virtual {
        // Reduce the balance of the account
        balanceOf[account] = balanceOf[account] - amount;
        // Emit an event tracking transfers
        emit Transfer(account, address(0), amount);
    }

    /// @notice This function allows a user to approve an account which can transfer
    ///         tokens on their behalf.
    /// @param account The account which will be approve to transfer tokens
    /// @param amount The approval amount, if set to uint256.max the allowance does not go down on transfers.
    /// @return returns true for compatibility with the ERC20 standard
    function approve(address account, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        // Set the senders allowance for account to amount
        allowance[msg.sender][account] = amount;
        // Emit an event to track approvals
        emit Approval(msg.sender, account, amount);
        return true;
    }

    /// @notice This function allows a caller who is not the owner of an account to execute the functionality of 'approve' with the owners signature.
    /// @param owner the owner of the account which is having the new approval set
    /// @param spender the address which will be allowed to spend owner's tokens
    /// @param value the new allowance value
    /// @param deadline the timestamp which the signature must be submitted by to be valid
    /// @param v Extra ECDSA data which allows public key recovery from signature assumed to be 27 or 28
    /// @param r The r component of the ECDSA signature
    /// @param s The s component of the ECDSA signature
    /// @dev The signature for this function follows EIP 712 standard and should be generated with the
    ///      eth_signTypedData JSON RPC call instead of the eth_sign JSON RPC call. If using out of date
    ///      parity signing libraries the v component may need to be adjusted. Also it is very rare but possible
    ///      for v to be other values, those values are not supported.
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external override {
        // The EIP 712 digest for this function
        bytes32 digest = keccak256(
            abi.encodePacked(
                "\x19\x01",
                DOMAIN_SEPARATOR,
                keccak256(
                    abi.encode(
                        PERMIT_TYPEHASH,
                        owner,
                        spender,
                        value,
                        nonces[owner],
                        deadline
                    )
                )
            )
        );
        // Require that the owner is not zero
        require(owner != address(0), "ERC20: invalid-address-0");
        // Require that we have a valid signature from the owner
        require(owner == ecrecover(digest, v, r, s), "ERC20: invalid-permit");
        // Require that the signature is not expired
        require(
            deadline == 0 || block.timestamp <= deadline,
            "ERC20: permit-expired"
        );
        // Increment the signature nonce to prevent replay
        nonces[owner]++;
        // Set the allowance to the new value
        allowance[owner][spender] = value;
        // Emit an approval event to be able to track this happening
        emit Approval(owner, spender, value);
    }

    /// @notice Internal function which allows inheriting contract to set custom decimals
    /// @param decimals_ the new decimal value
    function _setupDecimals(uint8 decimals_) internal {
        // Set the decimals
        decimals = decimals_;
    }
}
contract Authorizable {
    // This contract allows a flexible authorization scheme

    // The owner who can change authorization status
    address public owner;
    // A mapping from an address to its authorization status
    mapping(address => bool) public authorized;

    /// @dev We set the deployer to the owner
    constructor() {
        owner = msg.sender;
    }

    /// @dev This modifier checks if the msg.sender is the owner
    modifier onlyOwner() {
        require(msg.sender == owner, "Sender not owner");
        _;
    }

    /// @dev This modifier checks if an address is authorized
    modifier onlyAuthorized() {
        require(isAuthorized(msg.sender), "Sender not Authorized");
        _;
    }

    /// @dev Returns true if an address is authorized
    /// @param who the address to check
    /// @return true if authorized false if not
    function isAuthorized(address who) public view returns (bool) {
        return authorized[who];
    }

    /// @dev Privileged function authorize an address
    /// @param who the address to authorize
    function authorize(address who) external onlyOwner() {
        _authorize(who);
    }

    /// @dev Privileged function to de authorize an address
    /// @param who The address to remove authorization from
    function deauthorize(address who) external onlyOwner() {
        authorized[who] = false;
    }

    /// @dev Function to change owner
    /// @param who The new owner address
    function setOwner(address who) public onlyOwner() {
        owner = who;
    }

    /// @dev Inheritable function which authorizes someone
    /// @param who the address to authorize
    function _authorize(address who) internal {
        authorized[who] = true;
    }
}

contract USDC is ERC20Permit, Authorizable {
     constructor()
        Authorizable()
        ERC20Permit("USD Coin", "USDC")
    {
        _setupDecimals(6);
    }
    function mint(address _account, uint256 _amount) external onlyAuthorized() {
        _mint(_account, _amount);
    }
    function burn(address _account, uint256 _amount) external onlyAuthorized() {
        _burn(_account, _amount);
    }
}

Contract ABI

[{"inputs":[],"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":"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":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"deauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"owner","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":"who","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040518060400160405280600881526020017f55534420436f696e0000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f5553444300000000000000000000000000000000000000000000000000000000815250816000908051906020019062000096929190620002b8565b508060019080519060200190620000af929190620002b8565b506012600260006101000a81548160ff021916908360ff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600360008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6000604051620001c6919062000426565b60405180910390206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001204630604051602001620002239594939291906200043f565b60405160208183030381529060405280519060200120600681905550505033600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200029460066200029a60201b60201c565b62000569565b80600260006101000a81548160ff021916908360ff16021790555050565b828054620002c69062000504565b90600052602060002090601f016020900481019282620002ea576000855562000336565b82601f106200030557805160ff191683800117855562000336565b8280016001018555821562000336579182015b828111156200033557825182559160200191906001019062000318565b5b50905062000345919062000349565b5090565b5b80821115620003645760008160009055506001016200034a565b5090565b6200037381620004bc565b82525050565b6200038481620004d0565b82525050565b60008154620003998162000504565b620003a58186620004b1565b94506001821660008114620003c35760018114620003d5576200040c565b60ff198316865281860193506200040c565b620003e0856200049c565b60005b838110156200040457815481890152600182019150602081019050620003e3565b838801955050505b50505092915050565b6200042081620004fa565b82525050565b60006200043482846200038a565b915081905092915050565b600060a08201905062000456600083018862000379565b62000465602083018762000379565b62000474604083018662000379565b62000483606083018562000415565b62000492608083018462000368565b9695505050505050565b60008190508160005260206000209050919050565b600081905092915050565b6000620004c982620004da565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200051d57607f821691505b602082108114156200053457620005336200053a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b611dc280620005796000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80637ecebe00116100ad578063b6a5d7de11610071578063b6a5d7de14610345578063b918161114610361578063d505accf14610391578063dd62ed3e146103ad578063fe9fbb80146103dd5761012c565b80637ecebe001461028d5780638da5cb5b146102bd57806395d89b41146102db5780639dc29fac146102f9578063a9059cbb146103155761012c565b806330adf81f116100f457806330adf81f146101e7578063313ce567146102055780633644e5151461022357806340c10f191461024157806370a082311461025d5761012c565b806306fdde0314610131578063095ea7b31461014f57806313af40351461017f57806323b872dd1461019b57806327c97fa5146101cb575b600080fd5b61013961040d565b6040516101469190611879565b60405180910390f35b6101696004803603810190610164919061155c565b61049b565b604051610176919061179d565b60405180910390f35b6101996004803603810190610194919061140a565b61058d565b005b6101b560048036038101906101b0919061146f565b610661565b6040516101c2919061179d565b60405180910390f35b6101e560048036038101906101e0919061140a565b6109e4565b005b6101ef610acf565b6040516101fc91906117b8565b60405180910390f35b61020d610af6565b60405161021a9190611996565b60405180910390f35b61022b610b09565b60405161023891906117b8565b60405180910390f35b61025b6004803603810190610256919061155c565b610b0f565b005b6102776004803603810190610272919061140a565b610b65565b604051610284919061197b565b60405180910390f35b6102a760048036038101906102a2919061140a565b610b7d565b6040516102b4919061197b565b60405180910390f35b6102c5610b95565b6040516102d29190611782565b60405180910390f35b6102e3610bbb565b6040516102f09190611879565b60405180910390f35b610313600480360381019061030e919061155c565b610c49565b005b61032f600480360381019061032a919061155c565b610c9f565b60405161033c919061179d565b60405180910390f35b61035f600480360381019061035a919061140a565b610cb4565b005b61037b6004803603810190610376919061140a565b610d50565b604051610388919061179d565b60405180910390f35b6103ab60048036038101906103a691906114be565b610d70565b005b6103c760048036038101906103c29190611433565b6110f0565b6040516103d4919061197b565b60405180910390f35b6103f760048036038101906103f2919061140a565b611115565b604051610404919061179d565b60405180910390f35b6000805461041a90611af4565b80601f016020809104026020016040519081016040528092919081815260200182805461044690611af4565b80156104935780601f1061046857610100808354040283529160200191610493565b820191906000526020600020905b81548152906001019060200180831161047657829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161057b919061197b565b60405180910390a36001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461061d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610614906118bb565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156106e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e09061195b565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610896576000600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108945783811015610807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fe9061189b565b60405180910390fd5b83816108139190611a2e565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505b82816108a29190611a2e565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461093091906119d8565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516109d0919061197b565b60405180910390a360019150509392505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6b906118bb565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b81565b600260009054906101000a900460ff1681565b60065481565b610b1833611115565b610b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4e906118db565b60405180910390fd5b610b61828261116b565b5050565b60036020528060005260406000206000915090505481565b60056020528060005260406000206000915090505481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60018054610bc890611af4565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf490611af4565b8015610c415780601f10610c1657610100808354040283529160200191610c41565b820191906000526020600020905b815481529060010190602001808311610c2457829003601f168201915b505050505081565b610c5233611115565b610c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c88906118db565b60405180910390fd5b610c9b8282611263565b5050565b6000610cac338484610661565b905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b906118bb565b60405180910390fd5b610d4d8161135b565b50565b60086020528060005260406000206000915054906101000a900460ff1681565b60006006547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b898989600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548a604051602001610df2969594939291906117d3565b60405160208183030381529060405280519060200120604051602001610e1992919061174b565b604051602081830303815290604052805190602001209050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415610ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e98906118fb565b60405180910390fd5b60018185858560405160008152602001604052604051610ec49493929190611834565b6020604051602081039080840390855afa158015610ee6573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f549061191b565b60405180910390fd5b6000851480610f6c5750844211155b610fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa29061193b565b60405180910390fd5b600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610ffb90611b26565b919050555085600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925886040516110de919061197b565b60405180910390a35050505050505050565b6004602052816000526040600020602052806000526040600020600091509150505481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111b691906119d8565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611257919061197b565b60405180910390a35050565b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112ae9190611a2e565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161134f919061197b565b60405180910390a35050565b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000813590506113c581611d30565b92915050565b6000813590506113da81611d47565b92915050565b6000813590506113ef81611d5e565b92915050565b60008135905061140481611d75565b92915050565b60006020828403121561141c57600080fd5b600061142a848285016113b6565b91505092915050565b6000806040838503121561144657600080fd5b6000611454858286016113b6565b9250506020611465858286016113b6565b9150509250929050565b60008060006060848603121561148457600080fd5b6000611492868287016113b6565b93505060206114a3868287016113b6565b92505060406114b4868287016113e0565b9150509250925092565b600080600080600080600060e0888a0312156114d957600080fd5b60006114e78a828b016113b6565b97505060206114f88a828b016113b6565b96505060406115098a828b016113e0565b955050606061151a8a828b016113e0565b945050608061152b8a828b016113f5565b93505060a061153c8a828b016113cb565b92505060c061154d8a828b016113cb565b91505092959891949750929550565b6000806040838503121561156f57600080fd5b600061157d858286016113b6565b925050602061158e858286016113e0565b9150509250929050565b6115a181611a62565b82525050565b6115b081611a74565b82525050565b6115bf81611a80565b82525050565b6115d66115d182611a80565b611b6f565b82525050565b60006115e7826119b1565b6115f181856119bc565b9350611601818560208601611ac1565b61160a81611bd7565b840191505092915050565b6000611622601d836119bc565b915061162d82611be8565b602082019050919050565b60006116456002836119cd565b915061165082611c11565b600282019050919050565b60006116686010836119bc565b915061167382611c3a565b602082019050919050565b600061168b6015836119bc565b915061169682611c63565b602082019050919050565b60006116ae6018836119bc565b91506116b982611c8c565b602082019050919050565b60006116d16015836119bc565b91506116dc82611cb5565b602082019050919050565b60006116f46015836119bc565b91506116ff82611cde565b602082019050919050565b6000611717601b836119bc565b915061172282611d07565b602082019050919050565b61173681611aaa565b82525050565b61174581611ab4565b82525050565b600061175682611638565b915061176282856115c5565b60208201915061177282846115c5565b6020820191508190509392505050565b60006020820190506117976000830184611598565b92915050565b60006020820190506117b260008301846115a7565b92915050565b60006020820190506117cd60008301846115b6565b92915050565b600060c0820190506117e860008301896115b6565b6117f56020830188611598565b6118026040830187611598565b61180f606083018661172d565b61181c608083018561172d565b61182960a083018461172d565b979650505050505050565b600060808201905061184960008301876115b6565b611856602083018661173c565b61186360408301856115b6565b61187060608301846115b6565b95945050505050565b6000602082019050818103600083015261189381846115dc565b905092915050565b600060208201905081810360008301526118b481611615565b9050919050565b600060208201905081810360008301526118d48161165b565b9050919050565b600060208201905081810360008301526118f48161167e565b9050919050565b60006020820190508181036000830152611914816116a1565b9050919050565b60006020820190508181036000830152611934816116c4565b9050919050565b60006020820190508181036000830152611954816116e7565b9050919050565b600060208201905081810360008301526119748161170a565b9050919050565b6000602082019050611990600083018461172d565b92915050565b60006020820190506119ab600083018461173c565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b60006119e382611aaa565b91506119ee83611aaa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611a2357611a22611b79565b5b828201905092915050565b6000611a3982611aaa565b9150611a4483611aaa565b925082821015611a5757611a56611b79565b5b828203905092915050565b6000611a6d82611a8a565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015611adf578082015181840152602081019050611ac4565b83811115611aee576000848401525b50505050565b60006002820490506001821680611b0c57607f821691505b60208210811415611b2057611b1f611ba8565b5b50919050565b6000611b3182611aaa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611b6457611b63611b79565b5b600182019050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a20696e73756666696369656e742d616c6c6f77616e6365000000600082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f53656e646572206e6f74206f776e657200000000000000000000000000000000600082015250565b7f53656e646572206e6f7420417574686f72697a65640000000000000000000000600082015250565b7f45524332303a20696e76616c69642d616464726573732d300000000000000000600082015250565b7f45524332303a20696e76616c69642d7065726d69740000000000000000000000600082015250565b7f45524332303a207065726d69742d657870697265640000000000000000000000600082015250565b7f45524332303a20696e73756666696369656e742d62616c616e63650000000000600082015250565b611d3981611a62565b8114611d4457600080fd5b50565b611d5081611a80565b8114611d5b57600080fd5b50565b611d6781611aaa565b8114611d7257600080fd5b50565b611d7e81611ab4565b8114611d8957600080fd5b5056fea264697066735822122048e015b78be9bae05a5a3af99609645396a4edd353af929a073799c2236cacb064736f6c63430008010033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061012c5760003560e01c80637ecebe00116100ad578063b6a5d7de11610071578063b6a5d7de14610345578063b918161114610361578063d505accf14610391578063dd62ed3e146103ad578063fe9fbb80146103dd5761012c565b80637ecebe001461028d5780638da5cb5b146102bd57806395d89b41146102db5780639dc29fac146102f9578063a9059cbb146103155761012c565b806330adf81f116100f457806330adf81f146101e7578063313ce567146102055780633644e5151461022357806340c10f191461024157806370a082311461025d5761012c565b806306fdde0314610131578063095ea7b31461014f57806313af40351461017f57806323b872dd1461019b57806327c97fa5146101cb575b600080fd5b61013961040d565b6040516101469190611879565b60405180910390f35b6101696004803603810190610164919061155c565b61049b565b604051610176919061179d565b60405180910390f35b6101996004803603810190610194919061140a565b61058d565b005b6101b560048036038101906101b0919061146f565b610661565b6040516101c2919061179d565b60405180910390f35b6101e560048036038101906101e0919061140a565b6109e4565b005b6101ef610acf565b6040516101fc91906117b8565b60405180910390f35b61020d610af6565b60405161021a9190611996565b60405180910390f35b61022b610b09565b60405161023891906117b8565b60405180910390f35b61025b6004803603810190610256919061155c565b610b0f565b005b6102776004803603810190610272919061140a565b610b65565b604051610284919061197b565b60405180910390f35b6102a760048036038101906102a2919061140a565b610b7d565b6040516102b4919061197b565b60405180910390f35b6102c5610b95565b6040516102d29190611782565b60405180910390f35b6102e3610bbb565b6040516102f09190611879565b60405180910390f35b610313600480360381019061030e919061155c565b610c49565b005b61032f600480360381019061032a919061155c565b610c9f565b60405161033c919061179d565b60405180910390f35b61035f600480360381019061035a919061140a565b610cb4565b005b61037b6004803603810190610376919061140a565b610d50565b604051610388919061179d565b60405180910390f35b6103ab60048036038101906103a691906114be565b610d70565b005b6103c760048036038101906103c29190611433565b6110f0565b6040516103d4919061197b565b60405180910390f35b6103f760048036038101906103f2919061140a565b611115565b604051610404919061179d565b60405180910390f35b6000805461041a90611af4565b80601f016020809104026020016040519081016040528092919081815260200182805461044690611af4565b80156104935780601f1061046857610100808354040283529160200191610493565b820191906000526020600020905b81548152906001019060200180831161047657829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161057b919061197b565b60405180910390a36001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461061d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610614906118bb565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156106e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e09061195b565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610896576000600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108945783811015610807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fe9061189b565b60405180910390fd5b83816108139190611a2e565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505b82816108a29190611a2e565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461093091906119d8565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516109d0919061197b565b60405180910390a360019150509392505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6b906118bb565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b81565b600260009054906101000a900460ff1681565b60065481565b610b1833611115565b610b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4e906118db565b60405180910390fd5b610b61828261116b565b5050565b60036020528060005260406000206000915090505481565b60056020528060005260406000206000915090505481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60018054610bc890611af4565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf490611af4565b8015610c415780601f10610c1657610100808354040283529160200191610c41565b820191906000526020600020905b815481529060010190602001808311610c2457829003601f168201915b505050505081565b610c5233611115565b610c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c88906118db565b60405180910390fd5b610c9b8282611263565b5050565b6000610cac338484610661565b905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b906118bb565b60405180910390fd5b610d4d8161135b565b50565b60086020528060005260406000206000915054906101000a900460ff1681565b60006006547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b898989600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548a604051602001610df2969594939291906117d3565b60405160208183030381529060405280519060200120604051602001610e1992919061174b565b604051602081830303815290604052805190602001209050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415610ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e98906118fb565b60405180910390fd5b60018185858560405160008152602001604052604051610ec49493929190611834565b6020604051602081039080840390855afa158015610ee6573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f549061191b565b60405180910390fd5b6000851480610f6c5750844211155b610fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa29061193b565b60405180910390fd5b600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610ffb90611b26565b919050555085600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925886040516110de919061197b565b60405180910390a35050505050505050565b6004602052816000526040600020602052806000526040600020600091509150505481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111b691906119d8565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611257919061197b565b60405180910390a35050565b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112ae9190611a2e565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161134f919061197b565b60405180910390a35050565b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000813590506113c581611d30565b92915050565b6000813590506113da81611d47565b92915050565b6000813590506113ef81611d5e565b92915050565b60008135905061140481611d75565b92915050565b60006020828403121561141c57600080fd5b600061142a848285016113b6565b91505092915050565b6000806040838503121561144657600080fd5b6000611454858286016113b6565b9250506020611465858286016113b6565b9150509250929050565b60008060006060848603121561148457600080fd5b6000611492868287016113b6565b93505060206114a3868287016113b6565b92505060406114b4868287016113e0565b9150509250925092565b600080600080600080600060e0888a0312156114d957600080fd5b60006114e78a828b016113b6565b97505060206114f88a828b016113b6565b96505060406115098a828b016113e0565b955050606061151a8a828b016113e0565b945050608061152b8a828b016113f5565b93505060a061153c8a828b016113cb565b92505060c061154d8a828b016113cb565b91505092959891949750929550565b6000806040838503121561156f57600080fd5b600061157d858286016113b6565b925050602061158e858286016113e0565b9150509250929050565b6115a181611a62565b82525050565b6115b081611a74565b82525050565b6115bf81611a80565b82525050565b6115d66115d182611a80565b611b6f565b82525050565b60006115e7826119b1565b6115f181856119bc565b9350611601818560208601611ac1565b61160a81611bd7565b840191505092915050565b6000611622601d836119bc565b915061162d82611be8565b602082019050919050565b60006116456002836119cd565b915061165082611c11565b600282019050919050565b60006116686010836119bc565b915061167382611c3a565b602082019050919050565b600061168b6015836119bc565b915061169682611c63565b602082019050919050565b60006116ae6018836119bc565b91506116b982611c8c565b602082019050919050565b60006116d16015836119bc565b91506116dc82611cb5565b602082019050919050565b60006116f46015836119bc565b91506116ff82611cde565b602082019050919050565b6000611717601b836119bc565b915061172282611d07565b602082019050919050565b61173681611aaa565b82525050565b61174581611ab4565b82525050565b600061175682611638565b915061176282856115c5565b60208201915061177282846115c5565b6020820191508190509392505050565b60006020820190506117976000830184611598565b92915050565b60006020820190506117b260008301846115a7565b92915050565b60006020820190506117cd60008301846115b6565b92915050565b600060c0820190506117e860008301896115b6565b6117f56020830188611598565b6118026040830187611598565b61180f606083018661172d565b61181c608083018561172d565b61182960a083018461172d565b979650505050505050565b600060808201905061184960008301876115b6565b611856602083018661173c565b61186360408301856115b6565b61187060608301846115b6565b95945050505050565b6000602082019050818103600083015261189381846115dc565b905092915050565b600060208201905081810360008301526118b481611615565b9050919050565b600060208201905081810360008301526118d48161165b565b9050919050565b600060208201905081810360008301526118f48161167e565b9050919050565b60006020820190508181036000830152611914816116a1565b9050919050565b60006020820190508181036000830152611934816116c4565b9050919050565b60006020820190508181036000830152611954816116e7565b9050919050565b600060208201905081810360008301526119748161170a565b9050919050565b6000602082019050611990600083018461172d565b92915050565b60006020820190506119ab600083018461173c565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b60006119e382611aaa565b91506119ee83611aaa565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611a2357611a22611b79565b5b828201905092915050565b6000611a3982611aaa565b9150611a4483611aaa565b925082821015611a5757611a56611b79565b5b828203905092915050565b6000611a6d82611a8a565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015611adf578082015181840152602081019050611ac4565b83811115611aee576000848401525b50505050565b60006002820490506001821680611b0c57607f821691505b60208210811415611b2057611b1f611ba8565b5b50919050565b6000611b3182611aaa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611b6457611b63611b79565b5b600182019050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a20696e73756666696369656e742d616c6c6f77616e6365000000600082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f53656e646572206e6f74206f776e657200000000000000000000000000000000600082015250565b7f53656e646572206e6f7420417574686f72697a65640000000000000000000000600082015250565b7f45524332303a20696e76616c69642d616464726573732d300000000000000000600082015250565b7f45524332303a20696e76616c69642d7065726d69740000000000000000000000600082015250565b7f45524332303a207065726d69742d657870697265640000000000000000000000600082015250565b7f45524332303a20696e73756666696369656e742d62616c616e63650000000000600082015250565b611d3981611a62565b8114611d4457600080fd5b50565b611d5081611a80565b8114611d5b57600080fd5b50565b611d6781611aaa565b8114611d7257600080fd5b50565b611d7e81611ab4565b8114611d8957600080fd5b5056fea264697066735822122048e015b78be9bae05a5a3af99609645396a4edd353af929a073799c2236cacb064736f6c63430008010033

Deployed Bytecode Sourcemap

15197:422:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3269:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10219:368;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14914:80;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6857:1524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14728:97;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4164:117;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3445:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3970:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15374:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3535:53;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3826:50;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13549:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3332:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15498:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6216:253;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14511:87;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13638:42;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11666:1467;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3677:73;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14300:103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3269:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10219:368::-;10338:4;10453:6;10420:9;:21;10430:10;10420:21;;;;;;;;;;;;;;;:30;10442:7;10420:30;;;;;;;;;;;;;;;:39;;;;10541:7;10520:37;;10529:10;10520:37;;;10550:6;10520:37;;;;;;:::i;:::-;;;;;;;;10575:4;10568:11;;10219:368;;;;:::o;14914:80::-;13915:5;;;;;;;;;;;13901:19;;:10;:19;;;13893:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;14983:3:::1;14975:5;;:11;;;;;;;;;;;;;;;;;;14914:80:::0;:::o;6857:1524::-;6998:4;7054:15;7072:9;:18;7082:7;7072:18;;;;;;;;;;;;;;;;7054:36;;7120:6;7109:7;:17;;7101:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;7237:10;7226:21;;:7;:21;;;7222:637;;7388:15;7406:9;:18;7416:7;7406:18;;;;;;;;;;;;;;;:30;7425:10;7406:30;;;;;;;;;;;;;;;;7388:48;;7667:17;7656:7;:28;7652:196;;7724:6;7713:7;:17;;7705:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;7826:6;7816:7;:16;;;;:::i;:::-;7783:9;:18;7793:7;7783:18;;;;;;;;;;;;;;;:30;7802:10;7783:30;;;;;;;;;;;;;;;:49;;;;7652:196;7222:637;;7932:6;7922:7;:16;;;;:::i;:::-;7901:9;:18;7911:7;7901:18;;;;;;;;;;;;;;;:37;;;;8215:6;8192:9;:20;8202:9;8192:20;;;;;;;;;;;;;;;;:29;;;;:::i;:::-;8169:9;:20;8179:9;8169:20;;;;;;;;;;;;;;;:52;;;;8289:9;8271:36;;8280:7;8271:36;;;8300:6;8271:36;;;;;;:::i;:::-;;;;;;;;8369:4;8362:11;;;6857:1524;;;;;:::o;14728:97::-;13915:5;;;;;;;;;;;13901:19;;:10;:19;;;13893:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;14812:5:::1;14794:10;:15;14805:3;14794:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;14728:97:::0;:::o;4164:117::-;4215:66;4164:117;;;:::o;3445:30::-;;;;;;;;;;;;;:::o;3970:40::-;;;;:::o;15374:118::-;14077:24;14090:10;14077:12;:24::i;:::-;14069:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;15460:24:::1;15466:8;15476:7;15460:5;:24::i;:::-;15374:118:::0;;:::o;3535:53::-;;;;;;;;;;;;;;;;;:::o;3826:50::-;;;;;;;;;;;;;;;;;:::o;13549:20::-;;;;;;;;;;;;;:::o;3332:29::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;15498:118::-;14077:24;14090:10;14077:12;:24::i;:::-;14069:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;15584:24:::1;15590:8;15600:7;15584:5;:24::i;:::-;15498:118:::0;;:::o;6216:253::-;6338:4;6418:43;6431:10;6443:9;6454:6;6418:12;:43::i;:::-;6411:50;;6216:253;;;;:::o;14511:87::-;13915:5;;;;;;;;;;;13901:19;;:10;:19;;;13893:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;14575:15:::1;14586:3;14575:10;:15::i;:::-;14511:87:::0;:::o;13638:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;11666:1467::-;11926:14;12031:16;;4215:66;12135:15;;12177:5;12209:7;12243:5;12275:6;:13;12282:5;12275:13;;;;;;;;;;;;;;;;12315:8;12098:248;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;12066:299;;;;;;11967:413;;;;;;;;;:::i;:::-;;;;;;;;;;;;;11943:448;;;;;;11926:465;;12474:1;12457:19;;:5;:19;;;;12449:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;12599:26;12609:6;12617:1;12620;12623;12599:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12590:35;;:5;:35;;;12582:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;12750:1;12738:8;:13;:44;;;;12774:8;12755:15;:27;;12738:44;12716:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;12902:6;:13;12909:5;12902:13;;;;;;;;;;;;;;;;:15;;;;;;;;;:::i;:::-;;;;;;13003:5;12975:9;:16;12985:5;12975:16;;;;;;;;;;;;;;;:25;12992:7;12975:25;;;;;;;;;;;;;;;:33;;;;13110:7;13094:31;;13103:5;13094:31;;;13119:5;13094:31;;;;;;:::i;:::-;;;;;;;;11666:1467;;;;;;;;:::o;3677:73::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14300:103::-;14356:4;14380:10;:15;14391:3;14380:15;;;;;;;;;;;;;;;;;;;;;;;;;14373:22;;14300:103;;;:::o;8838:270::-;8994:6;8973:9;:18;8983:7;8973:18;;;;;;;;;;;;;;;;:27;;;;:::i;:::-;8952:9;:18;8962:7;8952:18;;;;;;;;;;;;;;;:48;;;;9084:7;9063:37;;9080:1;9063:37;;;9093:6;9063:37;;;;;;:::i;:::-;;;;;;;;8838:270;;:::o;9548:276::-;9712:6;9691:9;:18;9701:7;9691:18;;;;;;;;;;;;;;;;:27;;;;:::i;:::-;9670:9;:18;9680:7;9670:18;;;;;;;;;;;;;;;:48;;;;9805:1;9779:37;;9788:7;9779:37;;;9809:6;9779:37;;;;;;:::i;:::-;;;;;;;;9548:276;;:::o;15107:83::-;15178:4;15160:10;:15;15171:3;15160:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;15107:83;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:139::-;;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;204:87;;;;:::o;297:139::-;;381:6;368:20;359:29;;397:33;424:5;397:33;:::i;:::-;349:87;;;;:::o;442:135::-;;524:6;511:20;502:29;;540:31;565:5;540:31;:::i;:::-;492:85;;;;:::o;583:262::-;;691:2;679:9;670:7;666:23;662:32;659:2;;;707:1;704;697:12;659:2;750:1;775:53;820:7;811:6;800:9;796:22;775:53;:::i;:::-;765:63;;721:117;649:196;;;;:::o;851:407::-;;;976:2;964:9;955:7;951:23;947:32;944:2;;;992:1;989;982:12;944:2;1035:1;1060:53;1105:7;1096:6;1085:9;1081:22;1060:53;:::i;:::-;1050:63;;1006:117;1162:2;1188:53;1233:7;1224:6;1213:9;1209:22;1188:53;:::i;:::-;1178:63;;1133:118;934:324;;;;;:::o;1264:552::-;;;;1406:2;1394:9;1385:7;1381:23;1377:32;1374:2;;;1422:1;1419;1412:12;1374:2;1465:1;1490:53;1535:7;1526:6;1515:9;1511:22;1490:53;:::i;:::-;1480:63;;1436:117;1592:2;1618:53;1663:7;1654:6;1643:9;1639:22;1618:53;:::i;:::-;1608:63;;1563:118;1720:2;1746:53;1791:7;1782:6;1771:9;1767:22;1746:53;:::i;:::-;1736:63;;1691:118;1364:452;;;;;:::o;1822:1132::-;;;;;;;;2030:3;2018:9;2009:7;2005:23;2001:33;1998:2;;;2047:1;2044;2037:12;1998:2;2090:1;2115:53;2160:7;2151:6;2140:9;2136:22;2115:53;:::i;:::-;2105:63;;2061:117;2217:2;2243:53;2288:7;2279:6;2268:9;2264:22;2243:53;:::i;:::-;2233:63;;2188:118;2345:2;2371:53;2416:7;2407:6;2396:9;2392:22;2371:53;:::i;:::-;2361:63;;2316:118;2473:2;2499:53;2544:7;2535:6;2524:9;2520:22;2499:53;:::i;:::-;2489:63;;2444:118;2601:3;2628:51;2671:7;2662:6;2651:9;2647:22;2628:51;:::i;:::-;2618:61;;2572:117;2728:3;2755:53;2800:7;2791:6;2780:9;2776:22;2755:53;:::i;:::-;2745:63;;2699:119;2857:3;2884:53;2929:7;2920:6;2909:9;2905:22;2884:53;:::i;:::-;2874:63;;2828:119;1988:966;;;;;;;;;;:::o;2960:407::-;;;3085:2;3073:9;3064:7;3060:23;3056:32;3053:2;;;3101:1;3098;3091:12;3053:2;3144:1;3169:53;3214:7;3205:6;3194:9;3190:22;3169:53;:::i;:::-;3159:63;;3115:117;3271:2;3297:53;3342:7;3333:6;3322:9;3318:22;3297:53;:::i;:::-;3287:63;;3242:118;3043:324;;;;;:::o;3373:118::-;3460:24;3478:5;3460:24;:::i;:::-;3455:3;3448:37;3438:53;;:::o;3497:109::-;3578:21;3593:5;3578:21;:::i;:::-;3573:3;3566:34;3556:50;;:::o;3612:118::-;3699:24;3717:5;3699:24;:::i;:::-;3694:3;3687:37;3677:53;;:::o;3736:157::-;3841:45;3861:24;3879:5;3861:24;:::i;:::-;3841:45;:::i;:::-;3836:3;3829:58;3819:74;;:::o;3899:364::-;;4015:39;4048:5;4015:39;:::i;:::-;4070:71;4134:6;4129:3;4070:71;:::i;:::-;4063:78;;4150:52;4195:6;4190:3;4183:4;4176:5;4172:16;4150:52;:::i;:::-;4227:29;4249:6;4227:29;:::i;:::-;4222:3;4218:39;4211:46;;3991:272;;;;;:::o;4269:366::-;;4432:67;4496:2;4491:3;4432:67;:::i;:::-;4425:74;;4508:93;4597:3;4508:93;:::i;:::-;4626:2;4621:3;4617:12;4610:19;;4415:220;;;:::o;4641:400::-;;4822:84;4904:1;4899:3;4822:84;:::i;:::-;4815:91;;4915:93;5004:3;4915:93;:::i;:::-;5033:1;5028:3;5024:11;5017:18;;4805:236;;;:::o;5047:366::-;;5210:67;5274:2;5269:3;5210:67;:::i;:::-;5203:74;;5286:93;5375:3;5286:93;:::i;:::-;5404:2;5399:3;5395:12;5388:19;;5193:220;;;:::o;5419:366::-;;5582:67;5646:2;5641:3;5582:67;:::i;:::-;5575:74;;5658:93;5747:3;5658:93;:::i;:::-;5776:2;5771:3;5767:12;5760:19;;5565:220;;;:::o;5791:366::-;;5954:67;6018:2;6013:3;5954:67;:::i;:::-;5947:74;;6030:93;6119:3;6030:93;:::i;:::-;6148:2;6143:3;6139:12;6132:19;;5937:220;;;:::o;6163:366::-;;6326:67;6390:2;6385:3;6326:67;:::i;:::-;6319:74;;6402:93;6491:3;6402:93;:::i;:::-;6520:2;6515:3;6511:12;6504:19;;6309:220;;;:::o;6535:366::-;;6698:67;6762:2;6757:3;6698:67;:::i;:::-;6691:74;;6774:93;6863:3;6774:93;:::i;:::-;6892:2;6887:3;6883:12;6876:19;;6681:220;;;:::o;6907:366::-;;7070:67;7134:2;7129:3;7070:67;:::i;:::-;7063:74;;7146:93;7235:3;7146:93;:::i;:::-;7264:2;7259:3;7255:12;7248:19;;7053:220;;;:::o;7279:118::-;7366:24;7384:5;7366:24;:::i;:::-;7361:3;7354:37;7344:53;;:::o;7403:112::-;7486:22;7502:5;7486:22;:::i;:::-;7481:3;7474:35;7464:51;;:::o;7521:663::-;;7784:148;7928:3;7784:148;:::i;:::-;7777:155;;7942:75;8013:3;8004:6;7942:75;:::i;:::-;8042:2;8037:3;8033:12;8026:19;;8055:75;8126:3;8117:6;8055:75;:::i;:::-;8155:2;8150:3;8146:12;8139:19;;8175:3;8168:10;;7766:418;;;;;:::o;8190:222::-;;8321:2;8310:9;8306:18;8298:26;;8334:71;8402:1;8391:9;8387:17;8378:6;8334:71;:::i;:::-;8288:124;;;;:::o;8418:210::-;;8543:2;8532:9;8528:18;8520:26;;8556:65;8618:1;8607:9;8603:17;8594:6;8556:65;:::i;:::-;8510:118;;;;:::o;8634:222::-;;8765:2;8754:9;8750:18;8742:26;;8778:71;8846:1;8835:9;8831:17;8822:6;8778:71;:::i;:::-;8732:124;;;;:::o;8862:775::-;;9133:3;9122:9;9118:19;9110:27;;9147:71;9215:1;9204:9;9200:17;9191:6;9147:71;:::i;:::-;9228:72;9296:2;9285:9;9281:18;9272:6;9228:72;:::i;:::-;9310;9378:2;9367:9;9363:18;9354:6;9310:72;:::i;:::-;9392;9460:2;9449:9;9445:18;9436:6;9392:72;:::i;:::-;9474:73;9542:3;9531:9;9527:19;9518:6;9474:73;:::i;:::-;9557;9625:3;9614:9;9610:19;9601:6;9557:73;:::i;:::-;9100:537;;;;;;;;;:::o;9643:545::-;;9854:3;9843:9;9839:19;9831:27;;9868:71;9936:1;9925:9;9921:17;9912:6;9868:71;:::i;:::-;9949:68;10013:2;10002:9;9998:18;9989:6;9949:68;:::i;:::-;10027:72;10095:2;10084:9;10080:18;10071:6;10027:72;:::i;:::-;10109;10177:2;10166:9;10162:18;10153:6;10109:72;:::i;:::-;9821:367;;;;;;;:::o;10194:313::-;;10345:2;10334:9;10330:18;10322:26;;10394:9;10388:4;10384:20;10380:1;10369:9;10365:17;10358:47;10422:78;10495:4;10486:6;10422:78;:::i;:::-;10414:86;;10312:195;;;;:::o;10513:419::-;;10717:2;10706:9;10702:18;10694:26;;10766:9;10760:4;10756:20;10752:1;10741:9;10737:17;10730:47;10794:131;10920:4;10794:131;:::i;:::-;10786:139;;10684:248;;;:::o;10938:419::-;;11142:2;11131:9;11127:18;11119:26;;11191:9;11185:4;11181:20;11177:1;11166:9;11162:17;11155:47;11219:131;11345:4;11219:131;:::i;:::-;11211:139;;11109:248;;;:::o;11363:419::-;;11567:2;11556:9;11552:18;11544:26;;11616:9;11610:4;11606:20;11602:1;11591:9;11587:17;11580:47;11644:131;11770:4;11644:131;:::i;:::-;11636:139;;11534:248;;;:::o;11788:419::-;;11992:2;11981:9;11977:18;11969:26;;12041:9;12035:4;12031:20;12027:1;12016:9;12012:17;12005:47;12069:131;12195:4;12069:131;:::i;:::-;12061:139;;11959:248;;;:::o;12213:419::-;;12417:2;12406:9;12402:18;12394:26;;12466:9;12460:4;12456:20;12452:1;12441:9;12437:17;12430:47;12494:131;12620:4;12494:131;:::i;:::-;12486:139;;12384:248;;;:::o;12638:419::-;;12842:2;12831:9;12827:18;12819:26;;12891:9;12885:4;12881:20;12877:1;12866:9;12862:17;12855:47;12919:131;13045:4;12919:131;:::i;:::-;12911:139;;12809:248;;;:::o;13063:419::-;;13267:2;13256:9;13252:18;13244:26;;13316:9;13310:4;13306:20;13302:1;13291:9;13287:17;13280:47;13344:131;13470:4;13344:131;:::i;:::-;13336:139;;13234:248;;;:::o;13488:222::-;;13619:2;13608:9;13604:18;13596:26;;13632:71;13700:1;13689:9;13685:17;13676:6;13632:71;:::i;:::-;13586:124;;;;:::o;13716:214::-;;13843:2;13832:9;13828:18;13820:26;;13856:67;13920:1;13909:9;13905:17;13896:6;13856:67;:::i;:::-;13810:120;;;;:::o;13936:99::-;;14022:5;14016:12;14006:22;;13995:40;;;:::o;14041:169::-;;14159:6;14154:3;14147:19;14199:4;14194:3;14190:14;14175:29;;14137:73;;;;:::o;14216:148::-;;14355:3;14340:18;;14330:34;;;;:::o;14370:305::-;;14429:20;14447:1;14429:20;:::i;:::-;14424:25;;14463:20;14481:1;14463:20;:::i;:::-;14458:25;;14617:1;14549:66;14545:74;14542:1;14539:81;14536:2;;;14623:18;;:::i;:::-;14536:2;14667:1;14664;14660:9;14653:16;;14414:261;;;;:::o;14681:191::-;;14741:20;14759:1;14741:20;:::i;:::-;14736:25;;14775:20;14793:1;14775:20;:::i;:::-;14770:25;;14814:1;14811;14808:8;14805:2;;;14819:18;;:::i;:::-;14805:2;14864:1;14861;14857:9;14849:17;;14726:146;;;;:::o;14878:96::-;;14944:24;14962:5;14944:24;:::i;:::-;14933:35;;14923:51;;;:::o;14980:90::-;;15057:5;15050:13;15043:21;15032:32;;15022:48;;;:::o;15076:77::-;;15142:5;15131:16;;15121:32;;;:::o;15159:126::-;;15236:42;15229:5;15225:54;15214:65;;15204:81;;;:::o;15291:77::-;;15357:5;15346:16;;15336:32;;;:::o;15374:86::-;;15449:4;15442:5;15438:16;15427:27;;15417:43;;;:::o;15466:307::-;15534:1;15544:113;15558:6;15555:1;15552:13;15544:113;;;15643:1;15638:3;15634:11;15628:18;15624:1;15619:3;15615:11;15608:39;15580:2;15577:1;15573:10;15568:15;;15544:113;;;15675:6;15672:1;15669:13;15666:2;;;15755:1;15746:6;15741:3;15737:16;15730:27;15666:2;15515:258;;;;:::o;15779:320::-;;15860:1;15854:4;15850:12;15840:22;;15907:1;15901:4;15897:12;15928:18;15918:2;;15984:4;15976:6;15972:17;15962:27;;15918:2;16046;16038:6;16035:14;16015:18;16012:38;16009:2;;;16065:18;;:::i;:::-;16009:2;15830:269;;;;:::o;16105:233::-;;16167:24;16185:5;16167:24;:::i;:::-;16158:33;;16213:66;16206:5;16203:77;16200:2;;;16283:18;;:::i;:::-;16200:2;16330:1;16323:5;16319:13;16312:20;;16148:190;;;:::o;16344:79::-;;16412:5;16401:16;;16391:32;;;:::o;16429:180::-;16477:77;16474:1;16467:88;16574:4;16571:1;16564:15;16598:4;16595:1;16588:15;16615:180;16663:77;16660:1;16653:88;16760:4;16757:1;16750:15;16784:4;16781:1;16774:15;16801:102;;16893:2;16889:7;16884:2;16877:5;16873:14;16869:28;16859:38;;16849:54;;;:::o;16909:179::-;17049:31;17045:1;17037:6;17033:14;17026:55;17015:73;:::o;17094:214::-;17234:66;17230:1;17222:6;17218:14;17211:90;17200:108;:::o;17314:166::-;17454:18;17450:1;17442:6;17438:14;17431:42;17420:60;:::o;17486:171::-;17626:23;17622:1;17614:6;17610:14;17603:47;17592:65;:::o;17663:174::-;17803:26;17799:1;17791:6;17787:14;17780:50;17769:68;:::o;17843:171::-;17983:23;17979:1;17971:6;17967:14;17960:47;17949:65;:::o;18020:171::-;18160:23;18156:1;18148:6;18144:14;18137:47;18126:65;:::o;18197:177::-;18337:29;18333:1;18325:6;18321:14;18314:53;18303:71;:::o;18380:122::-;18453:24;18471:5;18453:24;:::i;:::-;18446:5;18443:35;18433:2;;18492:1;18489;18482:12;18433:2;18423:79;:::o;18508:122::-;18581:24;18599:5;18581:24;:::i;:::-;18574:5;18571:35;18561:2;;18620:1;18617;18610:12;18561:2;18551:79;:::o;18636:122::-;18709:24;18727:5;18709:24;:::i;:::-;18702:5;18699:35;18689:2;;18748:1;18745;18738:12;18689:2;18679:79;:::o;18764:118::-;18835:22;18851:5;18835:22;:::i;:::-;18828:5;18825:33;18815:2;;18872:1;18869;18862:12;18815:2;18805:77;:::o

Swarm Source

ipfs://48e015b78be9bae05a5a3af99609645396a4edd353af929a073799c2236cacb0
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.