ETH Price: $3,177.86 (+2.97%)

Token

World Cup Apes (WCA)
 

Overview

Max Total Supply

100,000,000 WCA

Holders

5

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 WCA

Value
$0.00
0x86831b4b0baf1399a987b601dac6212e99c15cd0
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:
WorldCupApesToken

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-01
*/

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, _allowances[owner][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[owner][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, 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:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

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

        _afterTokenTransfer(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 virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

// File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)

pragma solidity ^0.8.0;



/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
}

// File: contracts/WCAToken.sol

//SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;




contract WorldCupApesToken is ERC20Burnable, Ownable {
    uint256 public constant maxWalletStaked = 30;
    uint256 public constant emissionRate = 462962962962960; // 11574074074074 * 40
    uint256 public endTimestamp = 1659312000;
    uint256 public startUnstakeTimestamp = 1654041600;
    address public WCAAddress;
    bool private _stakingLive = false;

    mapping(uint256 => uint256) internal tokenIdTimeStaked;
    mapping(uint256 => address) internal tokenIdToStaker;
    mapping(address => uint256[]) internal stakerToTokenIds;
    
    IERC721Enumerable private WCAIERC721;

    constructor(address _WCAAddress) ERC20("World Cup Apes", "WCA") {
        _mint(msg.sender, 100000000*10**18);
        WCAAddress = _WCAAddress;
        WCAIERC721 = IERC721Enumerable(WCAAddress);
    }

    modifier stakingEnabled {
        require(_stakingLive && block.timestamp < endTimestamp, "Staking not live");
        _;
    }

    function setEndTimestamp(uint256 timestamp) external onlyOwner {
        endTimestamp = timestamp;
    }

    function setStartUnstakeTimestamp(uint256 timestamp) external onlyOwner {
        startUnstakeTimestamp = timestamp;
    }

    function getStaked(address staker) public view returns (uint256[] memory) {
        return stakerToTokenIds[staker];
    }
    
    function getStakedCount(address staker) public view returns (uint256) {
        return stakerToTokenIds[staker].length;
    }

    function removeTokenIdFromArray(uint256[] storage array, uint256 tokenId) internal {
        uint256 length = array.length;
        for (uint256 i = 0; i < length; i++) {
            if (array[i] == tokenId) {
                length--;
                if (i < length) {
                    array[i] = array[length];
                }
                array.pop();
                break;
            }
        }
    }

    function stakeByIds(uint256[] memory tokenIds) public stakingEnabled {
        require(getStakedCount(msg.sender) + tokenIds.length <= maxWalletStaked, "You have reached the maximum number of NFTs in stake");

        for (uint256 i = 0; i < tokenIds.length; i++) {
            uint256 id = tokenIds[i];
            require(WCAIERC721.ownerOf(id) == msg.sender && tokenIdToStaker[id] == address(0), "NFT is not yours");
            WCAIERC721.transferFrom(msg.sender, address(this), id);

            stakerToTokenIds[msg.sender].push(id);
            tokenIdTimeStaked[id] = block.timestamp;
            tokenIdToStaker[id] = msg.sender;
        }
    }

    function unstakeAll() public {
        require(getStakedCount(msg.sender) > 0, "No NFTs in stake");
        require(block.timestamp >= startUnstakeTimestamp, "You can't already unstake NFTs");
        uint256 totalRewards = 0;

        for (uint256 i = stakerToTokenIds[msg.sender].length; i > 0; i--) {
            uint256 tokenId = stakerToTokenIds[msg.sender][i - 1];

            WCAIERC721.transferFrom(address(this), msg.sender, tokenId);

            uint256 timestamp = block.timestamp;
            if(timestamp > endTimestamp){
                timestamp = endTimestamp;
            }
            totalRewards += ((timestamp - tokenIdTimeStaked[tokenId]) * emissionRate);
            stakerToTokenIds[msg.sender].pop();
            tokenIdToStaker[tokenId] = address(0);
        }

        _transfer(owner(), msg.sender, totalRewards);
    }

    function unstakeByIds(uint256[] memory tokenIds) public {
        require(block.timestamp >= startUnstakeTimestamp, "You can't already unstake NFTs");
        uint256 totalRewards = 0;
        
        for (uint256 i = 0; i < tokenIds.length; i++) {
            uint256 id = tokenIds[i];
            require(tokenIdToStaker[id] == msg.sender, "Not in stake");

            WCAIERC721.transferFrom(address(this), msg.sender, id);
            uint256 timestamp = block.timestamp;
            if(timestamp > endTimestamp){
                timestamp = endTimestamp;
            }
            totalRewards += ((timestamp - tokenIdTimeStaked[id]) * emissionRate);

            removeTokenIdFromArray(stakerToTokenIds[msg.sender], id);
            tokenIdToStaker[id] = address(0);
        }

        _transfer(owner(), msg.sender, totalRewards);
    }

    function claimByTokenId(uint256 tokenId) public {
        require(tokenIdToStaker[tokenId] == msg.sender, "Not staked by you");
        require(block.timestamp >= startUnstakeTimestamp, "You can't already claim your rewards");
        uint256 timestamp = block.timestamp;
        if(timestamp > endTimestamp){
            timestamp = endTimestamp;
        }
        uint256 totalRewards = ((timestamp - tokenIdTimeStaked[tokenId]) * emissionRate);
        tokenIdTimeStaked[tokenId] = timestamp;
        _transfer(owner(), msg.sender, totalRewards);
    }

    function claimAll() public {
        require(block.timestamp >= startUnstakeTimestamp, "You can't already claim your rewards");
        uint256 totalRewards = 0;

        uint256[] memory tokenIds = stakerToTokenIds[msg.sender];
        for (uint256 i = 0; i < tokenIds.length; i++) {
            uint256 id = tokenIds[i];
            require(tokenIdToStaker[id] == msg.sender, "Not staked by you");
            uint256 timestamp = block.timestamp;
            if(timestamp > endTimestamp){
                timestamp = endTimestamp;
            }
            totalRewards += ((timestamp - tokenIdTimeStaked[id]) * emissionRate);
            tokenIdTimeStaked[id] = timestamp;
        }

        _transfer(owner(), msg.sender, totalRewards);
    }

    function getAllRewards(address staker) public view returns (uint256) {
        uint256 totalRewards = 0;

        uint256[] memory tokenIds = stakerToTokenIds[staker];
        for (uint256 i = 0; i < tokenIds.length; i++) {
            uint256 timestamp = block.timestamp;
            if(timestamp > endTimestamp){
                timestamp = endTimestamp;
            }
            totalRewards += ((timestamp - tokenIdTimeStaked[tokenIds[i]]) * emissionRate);
        }

        return totalRewards;
    }

    function getRewardsByTokenId(uint256 tokenId) public view returns (uint256) {
        require(tokenIdToStaker[tokenId] != address(0), "NFT is not in stake");

        uint256 timestamp = block.timestamp;
        if(timestamp > endTimestamp){
            timestamp = endTimestamp;
        }
        uint256 secondsStaked = timestamp - tokenIdTimeStaked[tokenId];
        return secondsStaked * emissionRate;
    }

    function getStaker(uint256 tokenId) public view returns (address) {
        return tokenIdToStaker[tokenId];
    }

    function toggleStakingLive() external onlyOwner {
        _stakingLive = !_stakingLive;
    }

    function stakingLive() public view returns (bool){
        return _stakingLive && block.timestamp < endTimestamp;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_WCAAddress","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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":"WCAAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"claimByTokenId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emissionRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getAllRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getRewardsByTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getStaked","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getStakedCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getStaker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxWalletStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"setEndTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"setStartUnstakeTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"stakeByIds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startUnstakeTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleStakingLive","outputs":[],"stateMutability":"nonpayable","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":"amount","type":"uint256"}],"name":"transfer","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":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unstakeAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"unstakeByIds","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526362e71780600655636296ac006007556000600860146101000a81548160ff0219169083151502179055503480156200003c57600080fd5b506040516200418938038062004189833981810160405281019062000062919062000554565b6040518060400160405280600e81526020017f576f726c642043757020417065730000000000000000000000000000000000008152506040518060400160405280600381526020017f57434100000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000e69291906200043a565b508060049080519060200190620000ff9291906200043a565b5050506200012262000116620001ea60201b60201c565b620001f260201b60201c565b6200013f336a52b7d2dcc80cd2e4000000620002b860201b60201c565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000731565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200032a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200032190620005e7565b60405180910390fd5b6200033e600083836200043060201b60201c565b806002600082825462000352919062000642565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620003a9919062000642565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620004109190620006b0565b60405180910390a36200042c600083836200043560201b60201c565b5050565b505050565b505050565b8280546200044890620006fc565b90600052602060002090601f0160209004810192826200046c5760008555620004b8565b82601f106200048757805160ff1916838001178555620004b8565b82800160010185558215620004b8579182015b82811115620004b75782518255916020019190600101906200049a565b5b509050620004c79190620004cb565b5090565b5b80821115620004e6576000816000905550600101620004cc565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200051c82620004ef565b9050919050565b6200052e816200050f565b81146200053a57600080fd5b50565b6000815190506200054e8162000523565b92915050565b6000602082840312156200056d576200056c620004ea565b5b60006200057d848285016200053d565b91505092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620005cf601f8362000586565b9150620005dc8262000597565b602082019050919050565b600060208201905081810360008301526200060281620005c0565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200064f8262000609565b91506200065c8362000609565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000694576200069362000613565b5b828201905092915050565b620006aa8162000609565b82525050565b6000602082019050620006c760008301846200069f565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200071557607f821691505b6020821081036200072b576200072a620006cd565b5b50919050565b613a4880620007416000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c8063715018a611610125578063a457c2d7116100ad578063d92656a71161007c578063d92656a7146105f2578063d9ffad4714610610578063dd62ed3e1461062c578063e3c998fe1461065c578063f2fde38b1461068c57610211565b8063a457c2d71461056a578063a85adeab1461059a578063a9059cbb146105b8578063d1058e59146105e857610211565b806383c13db2116100f457806383c13db2146104d65780638da5cb5b1461050657806395d89b411461052457806396afc450146105425780639903303f1461056057610211565b8063715018a61461047657806376ea2fea1461048057806379cc67901461049e5780637df6a6c8146104ba57610211565b806336ed62eb116101a857806348aa19361161017757806348aa1936146103c0578063515ec105146103dc5780635c1e645a1461040c5780635e1f1e2a1461042a57806370a082311461044657610211565b806336ed62eb146103285780633950935114610344578063399080ec1461037457806342966c68146103a457610211565b806323b872dd116101e457806323b872dd146102a0578063313ce567146102d057806335322f37146102ee578063362a3fad146102f857610211565b806306fdde03146102165780630943791f14610234578063095ea7b31461025257806318160ddd14610282575b600080fd5b61021e6106a8565b60405161022b919061281c565b60405180910390f35b61023c61073a565b604051610249919061287f565b60405180910390f35b61026c60048036038101906102679190612910565b610760565b604051610279919061296b565b60405180910390f35b61028a610783565b6040516102979190612995565b60405180910390f35b6102ba60048036038101906102b591906129b0565b61078d565b6040516102c7919061296b565b60405180910390f35b6102d86107bc565b6040516102e59190612a1f565b60405180910390f35b6102f66107c5565b005b610312600480360381019061030d9190612a3a565b610ada565b60405161031f9190612995565b60405180910390f35b610342600480360381019061033d9190612a67565b610c0b565b005b61035e60048036038101906103599190612910565b610c91565b60405161036b919061296b565b60405180910390f35b61038e60048036038101906103899190612a3a565b610d3b565b60405161039b9190612b52565b60405180910390f35b6103be60048036038101906103b99190612a67565b610dd2565b005b6103da60048036038101906103d59190612cbc565b610de6565b005b6103f660048036038101906103f19190612a67565b6110a3565b6040516104039190612995565b60405180910390f35b61041461119a565b6040516104219190612995565b60405180910390f35b610444600480360381019061043f9190612a67565b6111a0565b005b610460600480360381019061045b9190612a3a565b6112ff565b60405161046d9190612995565b60405180910390f35b61047e611347565b005b6104886113cf565b6040516104959190612995565b60405180910390f35b6104b860048036038101906104b39190612910565b6113d4565b005b6104d460048036038101906104cf9190612a67565b6113f4565b005b6104f060048036038101906104eb9190612a3a565b61147a565b6040516104fd9190612995565b60405180910390f35b61050e6114c6565b60405161051b919061287f565b60405180910390f35b61052c6114f0565b604051610539919061281c565b60405180910390f35b61054a611582565b6040516105579190612995565b60405180910390f35b61056861158d565b005b610584600480360381019061057f9190612910565b611635565b604051610591919061296b565b60405180910390f35b6105a261171f565b6040516105af9190612995565b60405180910390f35b6105d260048036038101906105cd9190612910565b611725565b6040516105df919061296b565b60405180910390f35b6105f0611748565b005b6105fa611983565b604051610607919061296b565b60405180910390f35b61062a60048036038101906106259190612cbc565b6119a7565b005b61064660048036038101906106419190612d05565b611d73565b6040516106539190612995565b60405180910390f35b61067660048036038101906106719190612a67565b611dfa565b604051610683919061287f565b60405180910390f35b6106a660048036038101906106a19190612a3a565b611e37565b005b6060600380546106b790612d74565b80601f01602080910402602001604051908101604052809291908181526020018280546106e390612d74565b80156107305780601f1061070557610100808354040283529160200191610730565b820191906000526020600020905b81548152906001019060200180831161071357829003601f168201915b5050505050905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061076b611f2e565b9050610778818585611f36565b600191505092915050565b6000600254905090565b600080610798611f2e565b90506107a58582856120ff565b6107b085858561218b565b60019150509392505050565b60006012905090565b60006107d03361147a565b11610810576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080790612df1565b60405180910390fd5b600754421015610855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084c90612e5d565b60405180910390fd5b600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905090505b6000811115610ac4576000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001836108f59190612eac565b8154811061090657610905612ee0565b5b90600052602060002001549050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3033846040518463ffffffff1660e01b815260040161097293929190612f0f565b600060405180830381600087803b15801561098c57600080fd5b505af11580156109a0573d6000803e3d6000fd5b5050505060004290506006548111156109b95760065490505b6601a50ff6f39a106009600084815260200190815260200160002054826109e09190612eac565b6109ea9190612f46565b846109f59190612fa0565b9350600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480610a4657610a45612ff6565b5b600190038181906000526020600020016000905590556000600a600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050508080610abc90613025565b91505061089e565b50610ad7610ad06114c6565b338361218b565b50565b600080600090506000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610b6c57602002820191906000526020600020905b815481526020019060010190808311610b58575b5050505050905060005b8151811015610c00576000429050600654811115610b945760065490505b6601a50ff6f39a1060096000858581518110610bb357610bb2612ee0565b5b602002602001015181526020019081526020016000205482610bd59190612eac565b610bdf9190612f46565b84610bea9190612fa0565b9350508080610bf89061304e565b915050610b76565b508192505050919050565b610c13611f2e565b73ffffffffffffffffffffffffffffffffffffffff16610c316114c6565b73ffffffffffffffffffffffffffffffffffffffff1614610c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7e906130e2565b60405180910390fd5b8060078190555050565b600080610c9c611f2e565b9050610d30818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d2b9190612fa0565b611f36565b600191505092915050565b6060600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610dc657602002820191906000526020600020905b815481526020019060010190808311610db2575b50505050509050919050565b610de3610ddd611f2e565b8261240a565b50565b600754421015610e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2290612e5d565b60405180910390fd5b6000805b825181101561108c576000838281518110610e4d57610e4c612ee0565b5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff16600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eef9061314e565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3033846040518463ffffffff1660e01b8152600401610f5793929190612f0f565b600060405180830381600087803b158015610f7157600080fd5b505af1158015610f85573d6000803e3d6000fd5b505050506000429050600654811115610f9e5760065490505b6601a50ff6f39a10600960008481526020019081526020016000205482610fc59190612eac565b610fcf9190612f46565b84610fda9190612fa0565b9350611024600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020836125e0565b6000600a600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505080806110849061304e565b915050610e2f565b5061109f6110986114c6565b338361218b565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff16600a600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113d906131ba565b60405180910390fd5b600042905060065481111561115b5760065490505b600060096000858152602001908152602001600020548261117c9190612eac565b90506601a50ff6f39a10816111919190612f46565b92505050919050565b60075481565b3373ffffffffffffffffffffffffffffffffffffffff16600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611241576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123890613226565b60405180910390fd5b600754421015611286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127d906132b8565b60405180910390fd5b600042905060065481111561129b5760065490505b60006601a50ff6f39a106009600085815260200190815260200160002054836112c49190612eac565b6112ce9190612f46565b90508160096000858152602001908152602001600020819055506112fa6112f36114c6565b338361218b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61134f611f2e565b73ffffffffffffffffffffffffffffffffffffffff1661136d6114c6565b73ffffffffffffffffffffffffffffffffffffffff16146113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba906130e2565b60405180910390fd5b6113cd60006126b3565b565b601e81565b6113e6826113e0611f2e565b836120ff565b6113f0828261240a565b5050565b6113fc611f2e565b73ffffffffffffffffffffffffffffffffffffffff1661141a6114c6565b73ffffffffffffffffffffffffffffffffffffffff1614611470576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611467906130e2565b60405180910390fd5b8060068190555050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546114ff90612d74565b80601f016020809104026020016040519081016040528092919081815260200182805461152b90612d74565b80156115785780601f1061154d57610100808354040283529160200191611578565b820191906000526020600020905b81548152906001019060200180831161155b57829003601f168201915b5050505050905090565b6601a50ff6f39a1081565b611595611f2e565b73ffffffffffffffffffffffffffffffffffffffff166115b36114c6565b73ffffffffffffffffffffffffffffffffffffffff1614611609576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611600906130e2565b60405180910390fd5b600860149054906101000a900460ff1615600860146101000a81548160ff021916908315150217905550565b600080611640611f2e565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fd9061334a565b60405180910390fd5b6117138286868403611f36565b60019250505092915050565b60065481565b600080611730611f2e565b905061173d81858561218b565b600191505092915050565b60075442101561178d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611784906132b8565b60405180910390fd5b600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561181957602002820191906000526020600020905b815481526020019060010190808311611805575b5050505050905060005b815181101561196c57600082828151811061184157611840612ee0565b5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff16600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e390613226565b60405180910390fd5b60004290506006548111156119015760065490505b6601a50ff6f39a106009600084815260200190815260200160002054826119289190612eac565b6119329190612f46565b8561193d9190612fa0565b9450806009600084815260200190815260200160002081905550505080806119649061304e565b915050611823565b5061197f6119786114c6565b338461218b565b5050565b6000600860149054906101000a900460ff1680156119a2575060065442105b905090565b600860149054906101000a900460ff1680156119c4575060065442105b611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa906133b6565b60405180910390fd5b601e8151611a103361147a565b611a1a9190612fa0565b1115611a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5290613448565b60405180910390fd5b60005b8151811015611d6f576000828281518110611a7c57611a7b612ee0565b5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401611af89190612995565b602060405180830381865afa158015611b15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b39919061347d565b73ffffffffffffffffffffffffffffffffffffffff16148015611bbb5750600073ffffffffffffffffffffffffffffffffffffffff16600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf1906134f6565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401611c5993929190612f0f565b600060405180830381600087803b158015611c7357600080fd5b505af1158015611c87573d6000803e3d6000fd5b50505050600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505060019003906000526020600020016000909190919091505542600960008381526020019081526020016000208190555033600a600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508080611d679061304e565b915050611a5e565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b611e3f611f2e565b73ffffffffffffffffffffffffffffffffffffffff16611e5d6114c6565b73ffffffffffffffffffffffffffffffffffffffff1614611eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eaa906130e2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1990613588565b60405180910390fd5b611f2b816126b3565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9c9061361a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200b906136ac565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120f29190612995565b60405180910390a3505050565b600061210b8484611d73565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146121855781811015612177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216e90613718565b60405180910390fd5b6121848484848403611f36565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f1906137aa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612269576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122609061383c565b60405180910390fd5b612274838383612779565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156122fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f1906138ce565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461238d9190612fa0565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123f19190612995565b60405180910390a361240484848461277e565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247090613960565b60405180910390fd5b61248582600083612779565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561250b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612502906139f2565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546125629190612eac565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125c79190612995565b60405180910390a36125db8360008461277e565b505050565b60008280549050905060005b818110156126ad578284828154811061260857612607612ee0565b5b90600052602060002001540361269a57818061262390613025565b9250508181101561266e5783828154811061264157612640612ee0565b5b906000526020600020015484828154811061265f5761265e612ee0565b5b90600052602060002001819055505b8380548061267f5761267e612ff6565b5b600190038181906000526020600020016000905590556126ad565b80806126a59061304e565b9150506125ec565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156127bd5780820151818401526020810190506127a2565b838111156127cc576000848401525b50505050565b6000601f19601f8301169050919050565b60006127ee82612783565b6127f8818561278e565b935061280881856020860161279f565b612811816127d2565b840191505092915050565b6000602082019050818103600083015261283681846127e3565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006128698261283e565b9050919050565b6128798161285e565b82525050565b60006020820190506128946000830184612870565b92915050565b6000604051905090565b600080fd5b600080fd5b6128b78161285e565b81146128c257600080fd5b50565b6000813590506128d4816128ae565b92915050565b6000819050919050565b6128ed816128da565b81146128f857600080fd5b50565b60008135905061290a816128e4565b92915050565b60008060408385031215612927576129266128a4565b5b6000612935858286016128c5565b9250506020612946858286016128fb565b9150509250929050565b60008115159050919050565b61296581612950565b82525050565b6000602082019050612980600083018461295c565b92915050565b61298f816128da565b82525050565b60006020820190506129aa6000830184612986565b92915050565b6000806000606084860312156129c9576129c86128a4565b5b60006129d7868287016128c5565b93505060206129e8868287016128c5565b92505060406129f9868287016128fb565b9150509250925092565b600060ff82169050919050565b612a1981612a03565b82525050565b6000602082019050612a346000830184612a10565b92915050565b600060208284031215612a5057612a4f6128a4565b5b6000612a5e848285016128c5565b91505092915050565b600060208284031215612a7d57612a7c6128a4565b5b6000612a8b848285016128fb565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612ac9816128da565b82525050565b6000612adb8383612ac0565b60208301905092915050565b6000602082019050919050565b6000612aff82612a94565b612b098185612a9f565b9350612b1483612ab0565b8060005b83811015612b45578151612b2c8882612acf565b9750612b3783612ae7565b925050600181019050612b18565b5085935050505092915050565b60006020820190508181036000830152612b6c8184612af4565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612bb1826127d2565b810181811067ffffffffffffffff82111715612bd057612bcf612b79565b5b80604052505050565b6000612be361289a565b9050612bef8282612ba8565b919050565b600067ffffffffffffffff821115612c0f57612c0e612b79565b5b602082029050602081019050919050565b600080fd5b6000612c38612c3384612bf4565b612bd9565b90508083825260208201905060208402830185811115612c5b57612c5a612c20565b5b835b81811015612c845780612c7088826128fb565b845260208401935050602081019050612c5d565b5050509392505050565b600082601f830112612ca357612ca2612b74565b5b8135612cb3848260208601612c25565b91505092915050565b600060208284031215612cd257612cd16128a4565b5b600082013567ffffffffffffffff811115612cf057612cef6128a9565b5b612cfc84828501612c8e565b91505092915050565b60008060408385031215612d1c57612d1b6128a4565b5b6000612d2a858286016128c5565b9250506020612d3b858286016128c5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612d8c57607f821691505b602082108103612d9f57612d9e612d45565b5b50919050565b7f4e6f204e46547320696e207374616b6500000000000000000000000000000000600082015250565b6000612ddb60108361278e565b9150612de682612da5565b602082019050919050565b60006020820190508181036000830152612e0a81612dce565b9050919050565b7f596f752063616e277420616c726561647920756e7374616b65204e4654730000600082015250565b6000612e47601e8361278e565b9150612e5282612e11565b602082019050919050565b60006020820190508181036000830152612e7681612e3a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612eb7826128da565b9150612ec2836128da565b925082821015612ed557612ed4612e7d565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000606082019050612f246000830186612870565b612f316020830185612870565b612f3e6040830184612986565b949350505050565b6000612f51826128da565b9150612f5c836128da565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612f9557612f94612e7d565b5b828202905092915050565b6000612fab826128da565b9150612fb6836128da565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612feb57612fea612e7d565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000613030826128da565b91506000820361304357613042612e7d565b5b600182039050919050565b6000613059826128da565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361308b5761308a612e7d565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006130cc60208361278e565b91506130d782613096565b602082019050919050565b600060208201905081810360008301526130fb816130bf565b9050919050565b7f4e6f7420696e207374616b650000000000000000000000000000000000000000600082015250565b6000613138600c8361278e565b915061314382613102565b602082019050919050565b600060208201905081810360008301526131678161312b565b9050919050565b7f4e4654206973206e6f7420696e207374616b6500000000000000000000000000600082015250565b60006131a460138361278e565b91506131af8261316e565b602082019050919050565b600060208201905081810360008301526131d381613197565b9050919050565b7f4e6f74207374616b656420627920796f75000000000000000000000000000000600082015250565b600061321060118361278e565b915061321b826131da565b602082019050919050565b6000602082019050818103600083015261323f81613203565b9050919050565b7f596f752063616e277420616c726561647920636c61696d20796f75722072657760008201527f6172647300000000000000000000000000000000000000000000000000000000602082015250565b60006132a260248361278e565b91506132ad82613246565b604082019050919050565b600060208201905081810360008301526132d181613295565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061333460258361278e565b915061333f826132d8565b604082019050919050565b6000602082019050818103600083015261336381613327565b9050919050565b7f5374616b696e67206e6f74206c69766500000000000000000000000000000000600082015250565b60006133a060108361278e565b91506133ab8261336a565b602082019050919050565b600060208201905081810360008301526133cf81613393565b9050919050565b7f596f752068617665207265616368656420746865206d6178696d756d206e756d60008201527f626572206f66204e46547320696e207374616b65000000000000000000000000602082015250565b600061343260348361278e565b915061343d826133d6565b604082019050919050565b6000602082019050818103600083015261346181613425565b9050919050565b600081519050613477816128ae565b92915050565b600060208284031215613493576134926128a4565b5b60006134a184828501613468565b91505092915050565b7f4e4654206973206e6f7420796f75727300000000000000000000000000000000600082015250565b60006134e060108361278e565b91506134eb826134aa565b602082019050919050565b6000602082019050818103600083015261350f816134d3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061357260268361278e565b915061357d82613516565b604082019050919050565b600060208201905081810360008301526135a181613565565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061360460248361278e565b915061360f826135a8565b604082019050919050565b60006020820190508181036000830152613633816135f7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061369660228361278e565b91506136a18261363a565b604082019050919050565b600060208201905081810360008301526136c581613689565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613702601d8361278e565b915061370d826136cc565b602082019050919050565b60006020820190508181036000830152613731816136f5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061379460258361278e565b915061379f82613738565b604082019050919050565b600060208201905081810360008301526137c381613787565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061382660238361278e565b9150613831826137ca565b604082019050919050565b6000602082019050818103600083015261385581613819565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006138b860268361278e565b91506138c38261385c565b604082019050919050565b600060208201905081810360008301526138e7816138ab565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061394a60218361278e565b9150613955826138ee565b604082019050919050565b600060208201905081810360008301526139798161393d565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006139dc60228361278e565b91506139e782613980565b604082019050919050565b60006020820190508181036000830152613a0b816139cf565b905091905056fea2646970667358221220fb1987abf722c8bc4a90803f0965d5dc3c5bbc0bd96af48b90f0c5819d6f3bd664736f6c634300080d0033000000000000000000000000709ce875e2bec643b1932e4c9fd22ce113e20e2d

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102115760003560e01c8063715018a611610125578063a457c2d7116100ad578063d92656a71161007c578063d92656a7146105f2578063d9ffad4714610610578063dd62ed3e1461062c578063e3c998fe1461065c578063f2fde38b1461068c57610211565b8063a457c2d71461056a578063a85adeab1461059a578063a9059cbb146105b8578063d1058e59146105e857610211565b806383c13db2116100f457806383c13db2146104d65780638da5cb5b1461050657806395d89b411461052457806396afc450146105425780639903303f1461056057610211565b8063715018a61461047657806376ea2fea1461048057806379cc67901461049e5780637df6a6c8146104ba57610211565b806336ed62eb116101a857806348aa19361161017757806348aa1936146103c0578063515ec105146103dc5780635c1e645a1461040c5780635e1f1e2a1461042a57806370a082311461044657610211565b806336ed62eb146103285780633950935114610344578063399080ec1461037457806342966c68146103a457610211565b806323b872dd116101e457806323b872dd146102a0578063313ce567146102d057806335322f37146102ee578063362a3fad146102f857610211565b806306fdde03146102165780630943791f14610234578063095ea7b31461025257806318160ddd14610282575b600080fd5b61021e6106a8565b60405161022b919061281c565b60405180910390f35b61023c61073a565b604051610249919061287f565b60405180910390f35b61026c60048036038101906102679190612910565b610760565b604051610279919061296b565b60405180910390f35b61028a610783565b6040516102979190612995565b60405180910390f35b6102ba60048036038101906102b591906129b0565b61078d565b6040516102c7919061296b565b60405180910390f35b6102d86107bc565b6040516102e59190612a1f565b60405180910390f35b6102f66107c5565b005b610312600480360381019061030d9190612a3a565b610ada565b60405161031f9190612995565b60405180910390f35b610342600480360381019061033d9190612a67565b610c0b565b005b61035e60048036038101906103599190612910565b610c91565b60405161036b919061296b565b60405180910390f35b61038e60048036038101906103899190612a3a565b610d3b565b60405161039b9190612b52565b60405180910390f35b6103be60048036038101906103b99190612a67565b610dd2565b005b6103da60048036038101906103d59190612cbc565b610de6565b005b6103f660048036038101906103f19190612a67565b6110a3565b6040516104039190612995565b60405180910390f35b61041461119a565b6040516104219190612995565b60405180910390f35b610444600480360381019061043f9190612a67565b6111a0565b005b610460600480360381019061045b9190612a3a565b6112ff565b60405161046d9190612995565b60405180910390f35b61047e611347565b005b6104886113cf565b6040516104959190612995565b60405180910390f35b6104b860048036038101906104b39190612910565b6113d4565b005b6104d460048036038101906104cf9190612a67565b6113f4565b005b6104f060048036038101906104eb9190612a3a565b61147a565b6040516104fd9190612995565b60405180910390f35b61050e6114c6565b60405161051b919061287f565b60405180910390f35b61052c6114f0565b604051610539919061281c565b60405180910390f35b61054a611582565b6040516105579190612995565b60405180910390f35b61056861158d565b005b610584600480360381019061057f9190612910565b611635565b604051610591919061296b565b60405180910390f35b6105a261171f565b6040516105af9190612995565b60405180910390f35b6105d260048036038101906105cd9190612910565b611725565b6040516105df919061296b565b60405180910390f35b6105f0611748565b005b6105fa611983565b604051610607919061296b565b60405180910390f35b61062a60048036038101906106259190612cbc565b6119a7565b005b61064660048036038101906106419190612d05565b611d73565b6040516106539190612995565b60405180910390f35b61067660048036038101906106719190612a67565b611dfa565b604051610683919061287f565b60405180910390f35b6106a660048036038101906106a19190612a3a565b611e37565b005b6060600380546106b790612d74565b80601f01602080910402602001604051908101604052809291908181526020018280546106e390612d74565b80156107305780601f1061070557610100808354040283529160200191610730565b820191906000526020600020905b81548152906001019060200180831161071357829003601f168201915b5050505050905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061076b611f2e565b9050610778818585611f36565b600191505092915050565b6000600254905090565b600080610798611f2e565b90506107a58582856120ff565b6107b085858561218b565b60019150509392505050565b60006012905090565b60006107d03361147a565b11610810576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080790612df1565b60405180910390fd5b600754421015610855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084c90612e5d565b60405180910390fd5b600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905090505b6000811115610ac4576000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001836108f59190612eac565b8154811061090657610905612ee0565b5b90600052602060002001549050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3033846040518463ffffffff1660e01b815260040161097293929190612f0f565b600060405180830381600087803b15801561098c57600080fd5b505af11580156109a0573d6000803e3d6000fd5b5050505060004290506006548111156109b95760065490505b6601a50ff6f39a106009600084815260200190815260200160002054826109e09190612eac565b6109ea9190612f46565b846109f59190612fa0565b9350600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480610a4657610a45612ff6565b5b600190038181906000526020600020016000905590556000600a600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050508080610abc90613025565b91505061089e565b50610ad7610ad06114c6565b338361218b565b50565b600080600090506000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610b6c57602002820191906000526020600020905b815481526020019060010190808311610b58575b5050505050905060005b8151811015610c00576000429050600654811115610b945760065490505b6601a50ff6f39a1060096000858581518110610bb357610bb2612ee0565b5b602002602001015181526020019081526020016000205482610bd59190612eac565b610bdf9190612f46565b84610bea9190612fa0565b9350508080610bf89061304e565b915050610b76565b508192505050919050565b610c13611f2e565b73ffffffffffffffffffffffffffffffffffffffff16610c316114c6565b73ffffffffffffffffffffffffffffffffffffffff1614610c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7e906130e2565b60405180910390fd5b8060078190555050565b600080610c9c611f2e565b9050610d30818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d2b9190612fa0565b611f36565b600191505092915050565b6060600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610dc657602002820191906000526020600020905b815481526020019060010190808311610db2575b50505050509050919050565b610de3610ddd611f2e565b8261240a565b50565b600754421015610e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2290612e5d565b60405180910390fd5b6000805b825181101561108c576000838281518110610e4d57610e4c612ee0565b5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff16600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eef9061314e565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3033846040518463ffffffff1660e01b8152600401610f5793929190612f0f565b600060405180830381600087803b158015610f7157600080fd5b505af1158015610f85573d6000803e3d6000fd5b505050506000429050600654811115610f9e5760065490505b6601a50ff6f39a10600960008481526020019081526020016000205482610fc59190612eac565b610fcf9190612f46565b84610fda9190612fa0565b9350611024600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020836125e0565b6000600a600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505080806110849061304e565b915050610e2f565b5061109f6110986114c6565b338361218b565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff16600a600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113d906131ba565b60405180910390fd5b600042905060065481111561115b5760065490505b600060096000858152602001908152602001600020548261117c9190612eac565b90506601a50ff6f39a10816111919190612f46565b92505050919050565b60075481565b3373ffffffffffffffffffffffffffffffffffffffff16600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611241576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123890613226565b60405180910390fd5b600754421015611286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127d906132b8565b60405180910390fd5b600042905060065481111561129b5760065490505b60006601a50ff6f39a106009600085815260200190815260200160002054836112c49190612eac565b6112ce9190612f46565b90508160096000858152602001908152602001600020819055506112fa6112f36114c6565b338361218b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61134f611f2e565b73ffffffffffffffffffffffffffffffffffffffff1661136d6114c6565b73ffffffffffffffffffffffffffffffffffffffff16146113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba906130e2565b60405180910390fd5b6113cd60006126b3565b565b601e81565b6113e6826113e0611f2e565b836120ff565b6113f0828261240a565b5050565b6113fc611f2e565b73ffffffffffffffffffffffffffffffffffffffff1661141a6114c6565b73ffffffffffffffffffffffffffffffffffffffff1614611470576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611467906130e2565b60405180910390fd5b8060068190555050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546114ff90612d74565b80601f016020809104026020016040519081016040528092919081815260200182805461152b90612d74565b80156115785780601f1061154d57610100808354040283529160200191611578565b820191906000526020600020905b81548152906001019060200180831161155b57829003601f168201915b5050505050905090565b6601a50ff6f39a1081565b611595611f2e565b73ffffffffffffffffffffffffffffffffffffffff166115b36114c6565b73ffffffffffffffffffffffffffffffffffffffff1614611609576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611600906130e2565b60405180910390fd5b600860149054906101000a900460ff1615600860146101000a81548160ff021916908315150217905550565b600080611640611f2e565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fd9061334a565b60405180910390fd5b6117138286868403611f36565b60019250505092915050565b60065481565b600080611730611f2e565b905061173d81858561218b565b600191505092915050565b60075442101561178d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611784906132b8565b60405180910390fd5b600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561181957602002820191906000526020600020905b815481526020019060010190808311611805575b5050505050905060005b815181101561196c57600082828151811061184157611840612ee0565b5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff16600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e390613226565b60405180910390fd5b60004290506006548111156119015760065490505b6601a50ff6f39a106009600084815260200190815260200160002054826119289190612eac565b6119329190612f46565b8561193d9190612fa0565b9450806009600084815260200190815260200160002081905550505080806119649061304e565b915050611823565b5061197f6119786114c6565b338461218b565b5050565b6000600860149054906101000a900460ff1680156119a2575060065442105b905090565b600860149054906101000a900460ff1680156119c4575060065442105b611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa906133b6565b60405180910390fd5b601e8151611a103361147a565b611a1a9190612fa0565b1115611a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5290613448565b60405180910390fd5b60005b8151811015611d6f576000828281518110611a7c57611a7b612ee0565b5b602002602001015190503373ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401611af89190612995565b602060405180830381865afa158015611b15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b39919061347d565b73ffffffffffffffffffffffffffffffffffffffff16148015611bbb5750600073ffffffffffffffffffffffffffffffffffffffff16600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf1906134f6565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401611c5993929190612f0f565b600060405180830381600087803b158015611c7357600080fd5b505af1158015611c87573d6000803e3d6000fd5b50505050600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505060019003906000526020600020016000909190919091505542600960008381526020019081526020016000208190555033600a600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508080611d679061304e565b915050611a5e565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b611e3f611f2e565b73ffffffffffffffffffffffffffffffffffffffff16611e5d6114c6565b73ffffffffffffffffffffffffffffffffffffffff1614611eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eaa906130e2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1990613588565b60405180910390fd5b611f2b816126b3565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9c9061361a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200b906136ac565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120f29190612995565b60405180910390a3505050565b600061210b8484611d73565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146121855781811015612177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216e90613718565b60405180910390fd5b6121848484848403611f36565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f1906137aa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612269576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122609061383c565b60405180910390fd5b612274838383612779565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156122fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f1906138ce565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461238d9190612fa0565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123f19190612995565b60405180910390a361240484848461277e565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247090613960565b60405180910390fd5b61248582600083612779565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561250b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612502906139f2565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546125629190612eac565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125c79190612995565b60405180910390a36125db8360008461277e565b505050565b60008280549050905060005b818110156126ad578284828154811061260857612607612ee0565b5b90600052602060002001540361269a57818061262390613025565b9250508181101561266e5783828154811061264157612640612ee0565b5b906000526020600020015484828154811061265f5761265e612ee0565b5b90600052602060002001819055505b8380548061267f5761267e612ff6565b5b600190038181906000526020600020016000905590556126ad565b80806126a59061304e565b9150506125ec565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156127bd5780820151818401526020810190506127a2565b838111156127cc576000848401525b50505050565b6000601f19601f8301169050919050565b60006127ee82612783565b6127f8818561278e565b935061280881856020860161279f565b612811816127d2565b840191505092915050565b6000602082019050818103600083015261283681846127e3565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006128698261283e565b9050919050565b6128798161285e565b82525050565b60006020820190506128946000830184612870565b92915050565b6000604051905090565b600080fd5b600080fd5b6128b78161285e565b81146128c257600080fd5b50565b6000813590506128d4816128ae565b92915050565b6000819050919050565b6128ed816128da565b81146128f857600080fd5b50565b60008135905061290a816128e4565b92915050565b60008060408385031215612927576129266128a4565b5b6000612935858286016128c5565b9250506020612946858286016128fb565b9150509250929050565b60008115159050919050565b61296581612950565b82525050565b6000602082019050612980600083018461295c565b92915050565b61298f816128da565b82525050565b60006020820190506129aa6000830184612986565b92915050565b6000806000606084860312156129c9576129c86128a4565b5b60006129d7868287016128c5565b93505060206129e8868287016128c5565b92505060406129f9868287016128fb565b9150509250925092565b600060ff82169050919050565b612a1981612a03565b82525050565b6000602082019050612a346000830184612a10565b92915050565b600060208284031215612a5057612a4f6128a4565b5b6000612a5e848285016128c5565b91505092915050565b600060208284031215612a7d57612a7c6128a4565b5b6000612a8b848285016128fb565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612ac9816128da565b82525050565b6000612adb8383612ac0565b60208301905092915050565b6000602082019050919050565b6000612aff82612a94565b612b098185612a9f565b9350612b1483612ab0565b8060005b83811015612b45578151612b2c8882612acf565b9750612b3783612ae7565b925050600181019050612b18565b5085935050505092915050565b60006020820190508181036000830152612b6c8184612af4565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612bb1826127d2565b810181811067ffffffffffffffff82111715612bd057612bcf612b79565b5b80604052505050565b6000612be361289a565b9050612bef8282612ba8565b919050565b600067ffffffffffffffff821115612c0f57612c0e612b79565b5b602082029050602081019050919050565b600080fd5b6000612c38612c3384612bf4565b612bd9565b90508083825260208201905060208402830185811115612c5b57612c5a612c20565b5b835b81811015612c845780612c7088826128fb565b845260208401935050602081019050612c5d565b5050509392505050565b600082601f830112612ca357612ca2612b74565b5b8135612cb3848260208601612c25565b91505092915050565b600060208284031215612cd257612cd16128a4565b5b600082013567ffffffffffffffff811115612cf057612cef6128a9565b5b612cfc84828501612c8e565b91505092915050565b60008060408385031215612d1c57612d1b6128a4565b5b6000612d2a858286016128c5565b9250506020612d3b858286016128c5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612d8c57607f821691505b602082108103612d9f57612d9e612d45565b5b50919050565b7f4e6f204e46547320696e207374616b6500000000000000000000000000000000600082015250565b6000612ddb60108361278e565b9150612de682612da5565b602082019050919050565b60006020820190508181036000830152612e0a81612dce565b9050919050565b7f596f752063616e277420616c726561647920756e7374616b65204e4654730000600082015250565b6000612e47601e8361278e565b9150612e5282612e11565b602082019050919050565b60006020820190508181036000830152612e7681612e3a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612eb7826128da565b9150612ec2836128da565b925082821015612ed557612ed4612e7d565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000606082019050612f246000830186612870565b612f316020830185612870565b612f3e6040830184612986565b949350505050565b6000612f51826128da565b9150612f5c836128da565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612f9557612f94612e7d565b5b828202905092915050565b6000612fab826128da565b9150612fb6836128da565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612feb57612fea612e7d565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000613030826128da565b91506000820361304357613042612e7d565b5b600182039050919050565b6000613059826128da565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361308b5761308a612e7d565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006130cc60208361278e565b91506130d782613096565b602082019050919050565b600060208201905081810360008301526130fb816130bf565b9050919050565b7f4e6f7420696e207374616b650000000000000000000000000000000000000000600082015250565b6000613138600c8361278e565b915061314382613102565b602082019050919050565b600060208201905081810360008301526131678161312b565b9050919050565b7f4e4654206973206e6f7420696e207374616b6500000000000000000000000000600082015250565b60006131a460138361278e565b91506131af8261316e565b602082019050919050565b600060208201905081810360008301526131d381613197565b9050919050565b7f4e6f74207374616b656420627920796f75000000000000000000000000000000600082015250565b600061321060118361278e565b915061321b826131da565b602082019050919050565b6000602082019050818103600083015261323f81613203565b9050919050565b7f596f752063616e277420616c726561647920636c61696d20796f75722072657760008201527f6172647300000000000000000000000000000000000000000000000000000000602082015250565b60006132a260248361278e565b91506132ad82613246565b604082019050919050565b600060208201905081810360008301526132d181613295565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061333460258361278e565b915061333f826132d8565b604082019050919050565b6000602082019050818103600083015261336381613327565b9050919050565b7f5374616b696e67206e6f74206c69766500000000000000000000000000000000600082015250565b60006133a060108361278e565b91506133ab8261336a565b602082019050919050565b600060208201905081810360008301526133cf81613393565b9050919050565b7f596f752068617665207265616368656420746865206d6178696d756d206e756d60008201527f626572206f66204e46547320696e207374616b65000000000000000000000000602082015250565b600061343260348361278e565b915061343d826133d6565b604082019050919050565b6000602082019050818103600083015261346181613425565b9050919050565b600081519050613477816128ae565b92915050565b600060208284031215613493576134926128a4565b5b60006134a184828501613468565b91505092915050565b7f4e4654206973206e6f7420796f75727300000000000000000000000000000000600082015250565b60006134e060108361278e565b91506134eb826134aa565b602082019050919050565b6000602082019050818103600083015261350f816134d3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061357260268361278e565b915061357d82613516565b604082019050919050565b600060208201905081810360008301526135a181613565565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061360460248361278e565b915061360f826135a8565b604082019050919050565b60006020820190508181036000830152613633816135f7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061369660228361278e565b91506136a18261363a565b604082019050919050565b600060208201905081810360008301526136c581613689565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613702601d8361278e565b915061370d826136cc565b602082019050919050565b60006020820190508181036000830152613731816136f5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061379460258361278e565b915061379f82613738565b604082019050919050565b600060208201905081810360008301526137c381613787565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061382660238361278e565b9150613831826137ca565b604082019050919050565b6000602082019050818103600083015261385581613819565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006138b860268361278e565b91506138c38261385c565b604082019050919050565b600060208201905081810360008301526138e7816138ab565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061394a60218361278e565b9150613955826138ee565b604082019050919050565b600060208201905081810360008301526139798161393d565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006139dc60228361278e565b91506139e782613980565b604082019050919050565b60006020820190508181036000830152613a0b816139cf565b905091905056fea2646970667358221220fb1987abf722c8bc4a90803f0965d5dc3c5bbc0bd96af48b90f0c5819d6f3bd664736f6c634300080d0033

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

000000000000000000000000709ce875e2bec643b1932e4c9fd22ce113e20e2d

-----Decoded View---------------
Arg [0] : _WCAAddress (address): 0x709ce875E2bec643b1932E4c9fd22Ce113E20e2D

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000709ce875e2bec643b1932e4c9fd22ce113e20e2d


Deployed Bytecode Sourcemap

28102:6985:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16042:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28400:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18393:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17162:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19174:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17004:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30685:869;;;:::i;:::-;;33779:520;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29173:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19878:240;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29305:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27420:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31562:865;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34307:421;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28344:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32435:565;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17333:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9465:103;;;:::i;:::-;;28162:44;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27830:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29059:106;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29441:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8814:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16261:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28213:54;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34860:95;;;:::i;:::-;;20621:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28297:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17666:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33008:763;;;:::i;:::-;;34963:121;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30011:666;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17922:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34736:116;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9723:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16042:100;16096:13;16129:5;16122:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16042:100;:::o;28400:25::-;;;;;;;;;;;;;:::o;18393:201::-;18476:4;18493:13;18509:12;:10;:12::i;:::-;18493:28;;18532:32;18541:5;18548:7;18557:6;18532:8;:32::i;:::-;18582:4;18575:11;;;18393:201;;;;:::o;17162:108::-;17223:7;17250:12;;17243:19;;17162:108;:::o;19174:295::-;19305:4;19322:15;19340:12;:10;:12::i;:::-;19322:30;;19363:38;19379:4;19385:7;19394:6;19363:15;:38::i;:::-;19412:27;19422:4;19428:2;19432:6;19412:9;:27::i;:::-;19457:4;19450:11;;;19174:295;;;;;:::o;17004:93::-;17062:5;17087:2;17080:9;;17004:93;:::o;30685:869::-;30762:1;30733:26;30748:10;30733:14;:26::i;:::-;:30;30725:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;30822:21;;30803:15;:40;;30795:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;30889:20;30931:9;30943:16;:28;30960:10;30943:28;;;;;;;;;;;;;;;:35;;;;30931:47;;30926:564;30984:1;30980;:5;30926:564;;;31007:15;31025:16;:28;31042:10;31025:28;;;;;;;;;;;;;;;31058:1;31054;:5;;;;:::i;:::-;31025:35;;;;;;;;:::i;:::-;;;;;;;;;;31007:53;;31077:10;;;;;;;;;;;:23;;;31109:4;31116:10;31128:7;31077:59;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31153:17;31173:15;31153:35;;31218:12;;31206:9;:24;31203:87;;;31262:12;;31250:24;;31203:87;28252:15;31334:17;:26;31352:7;31334:26;;;;;;;;;;;;31322:9;:38;;;;:::i;:::-;31321:55;;;;:::i;:::-;31304:73;;;;;:::i;:::-;;;31392:16;:28;31409:10;31392:28;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31476:1;31441:15;:24;31457:7;31441:24;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;30992:498;;30987:3;;;;;:::i;:::-;;;;30926:564;;;;31502:44;31512:7;:5;:7::i;:::-;31521:10;31533:12;31502:9;:44::i;:::-;30714:840;30685:869::o;33779:520::-;33839:7;33859:20;33882:1;33859:24;;33896:25;33924:16;:24;33941:6;33924:24;;;;;;;;;;;;;;;33896:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33964:9;33959:301;33983:8;:15;33979:1;:19;33959:301;;;34020:17;34040:15;34020:35;;34085:12;;34073:9;:24;34070:87;;;34129:12;;34117:24;;34070:87;28252:15;34201:17;:30;34219:8;34228:1;34219:11;;;;;;;;:::i;:::-;;;;;;;;34201:30;;;;;;;;;;;;34189:9;:42;;;;:::i;:::-;34188:59;;;;:::i;:::-;34171:77;;;;;:::i;:::-;;;34005:255;34000:3;;;;;:::i;:::-;;;;33959:301;;;;34279:12;34272:19;;;;33779:520;;;:::o;29173:124::-;9045:12;:10;:12::i;:::-;9034:23;;:7;:5;:7::i;:::-;:23;;;9026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29280:9:::1;29256:21;:33;;;;29173:124:::0;:::o;19878:240::-;19966:4;19983:13;19999:12;:10;:12::i;:::-;19983:28;;20022:66;20031:5;20038:7;20077:10;20047:11;:18;20059:5;20047:18;;;;;;;;;;;;;;;:27;20066:7;20047:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;20022:8;:66::i;:::-;20106:4;20099:11;;;19878:240;;;;:::o;29305:124::-;29361:16;29397;:24;29414:6;29397:24;;;;;;;;;;;;;;;29390:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29305:124;;;:::o;27420:91::-;27476:27;27482:12;:10;:12::i;:::-;27496:6;27476:5;:27::i;:::-;27420:91;:::o;31562:865::-;31656:21;;31637:15;:40;;31629:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;31723:20;31773:9;31768:595;31792:8;:15;31788:1;:19;31768:595;;;31829:10;31842:8;31851:1;31842:11;;;;;;;;:::i;:::-;;;;;;;;31829:24;;31899:10;31876:33;;:15;:19;31892:2;31876:19;;;;;;;;;;;;;;;;;;;;;:33;;;31868:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31943:10;;;;;;;;;;;:23;;;31975:4;31982:10;31994:2;31943:54;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32012:17;32032:15;32012:35;;32077:12;;32065:9;:24;32062:87;;;32121:12;;32109:24;;32062:87;28252:15;32193:17;:21;32211:2;32193:21;;;;;;;;;;;;32181:9;:33;;;;:::i;:::-;32180:50;;;;:::i;:::-;32163:68;;;;;:::i;:::-;;;32248:56;32271:16;:28;32288:10;32271:28;;;;;;;;;;;;;;;32301:2;32248:22;:56::i;:::-;32349:1;32319:15;:19;32335:2;32319:19;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;31814:549;;31809:3;;;;;:::i;:::-;;;;31768:595;;;;32375:44;32385:7;:5;:7::i;:::-;32394:10;32406:12;32375:9;:44::i;:::-;31618:809;31562:865;:::o;34307:421::-;34374:7;34438:1;34402:38;;:15;:24;34418:7;34402:24;;;;;;;;;;;;;;;;;;;;;:38;;;34394:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;34477:17;34497:15;34477:35;;34538:12;;34526:9;:24;34523:79;;;34578:12;;34566:24;;34523:79;34612:21;34648:17;:26;34666:7;34648:26;;;;;;;;;;;;34636:9;:38;;;;:::i;:::-;34612:62;;28252:15;34692:13;:28;;;;:::i;:::-;34685:35;;;;34307:421;;;:::o;28344:49::-;;;;:::o;32435:565::-;32530:10;32502:38;;:15;:24;32518:7;32502:24;;;;;;;;;;;;;;;;;;;;;:38;;;32494:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32600:21;;32581:15;:40;;32573:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;32673:17;32693:15;32673:35;;32734:12;;32722:9;:24;32719:79;;;32774:12;;32762:24;;32719:79;32808:20;28252:15;32845:17;:26;32863:7;32845:26;;;;;;;;;;;;32833:9;:38;;;;:::i;:::-;32832:55;;;;:::i;:::-;32808:80;;32928:9;32899:17;:26;32917:7;32899:26;;;;;;;;;;;:38;;;;32948:44;32958:7;:5;:7::i;:::-;32967:10;32979:12;32948:9;:44::i;:::-;32483:517;;32435:565;:::o;17333:127::-;17407:7;17434:9;:18;17444:7;17434:18;;;;;;;;;;;;;;;;17427:25;;17333:127;;;:::o;9465:103::-;9045:12;:10;:12::i;:::-;9034:23;;:7;:5;:7::i;:::-;:23;;;9026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9530:30:::1;9557:1;9530:18;:30::i;:::-;9465:103::o:0;28162:44::-;28204:2;28162:44;:::o;27830:164::-;27907:46;27923:7;27932:12;:10;:12::i;:::-;27946:6;27907:15;:46::i;:::-;27964:22;27970:7;27979:6;27964:5;:22::i;:::-;27830:164;;:::o;29059:106::-;9045:12;:10;:12::i;:::-;9034:23;;:7;:5;:7::i;:::-;:23;;;9026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29148:9:::1;29133:12;:24;;;;29059:106:::0;:::o;29441:127::-;29502:7;29529:16;:24;29546:6;29529:24;;;;;;;;;;;;;;;:31;;;;29522:38;;29441:127;;;:::o;8814:87::-;8860:7;8887:6;;;;;;;;;;;8880:13;;8814:87;:::o;16261:104::-;16317:13;16350:7;16343:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16261:104;:::o;28213:54::-;28252:15;28213:54;:::o;34860:95::-;9045:12;:10;:12::i;:::-;9034:23;;:7;:5;:7::i;:::-;:23;;;9026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34935:12:::1;;;;;;;;;;;34934:13;34919:12;;:28;;;;;;;;;;;;;;;;;;34860:95::o:0;20621:438::-;20714:4;20731:13;20747:12;:10;:12::i;:::-;20731:28;;20770:24;20797:11;:18;20809:5;20797:18;;;;;;;;;;;;;;;:27;20816:7;20797:27;;;;;;;;;;;;;;;;20770:54;;20863:15;20843:16;:35;;20835:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;20956:60;20965:5;20972:7;21000:15;20981:16;:34;20956:8;:60::i;:::-;21047:4;21040:11;;;;20621:438;;;;:::o;28297:40::-;;;;:::o;17666:193::-;17745:4;17762:13;17778:12;:10;:12::i;:::-;17762:28;;17801;17811:5;17818:2;17822:6;17801:9;:28::i;:::-;17847:4;17840:11;;;17666:193;;;;:::o;33008:763::-;33073:21;;33054:15;:40;;33046:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;33146:20;33183:25;33211:16;:28;33228:10;33211:28;;;;;;;;;;;;;;;33183:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33255:9;33250:457;33274:8;:15;33270:1;:19;33250:457;;;33311:10;33324:8;33333:1;33324:11;;;;;;;;:::i;:::-;;;;;;;;33311:24;;33381:10;33358:33;;:15;:19;33374:2;33358:19;;;;;;;;;;;;;;;;;;;;;:33;;;33350:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;33428:17;33448:15;33428:35;;33493:12;;33481:9;:24;33478:87;;;33537:12;;33525:24;;33478:87;28252:15;33609:17;:21;33627:2;33609:21;;;;;;;;;;;;33597:9;:33;;;;:::i;:::-;33596:50;;;;:::i;:::-;33579:68;;;;;:::i;:::-;;;33686:9;33662:17;:21;33680:2;33662:21;;;;;;;;;;;:33;;;;33296:411;;33291:3;;;;;:::i;:::-;;;;33250:457;;;;33719:44;33729:7;:5;:7::i;:::-;33738:10;33750:12;33719:9;:44::i;:::-;33035:736;;33008:763::o;34963:121::-;35007:4;35030:12;;;;;;;;;;;:46;;;;;35064:12;;35046:15;:30;35030:46;35023:53;;34963:121;:::o;30011:666::-;28964:12;;;;;;;;;;;:46;;;;;28998:12;;28980:15;:30;28964:46;28956:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;28204:2:::1;30128:8;:15;30099:26;30114:10;30099:14;:26::i;:::-;:44;;;;:::i;:::-;:63;;30091:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;30237:9;30232:438;30256:8;:15;30252:1;:19;30232:438;;;30293:10;30306:8;30315:1;30306:11;;;;;;;;:::i;:::-;;;;;;;;30293:24;;30366:10;30340:36;;:10;;;;;;;;;;;:18;;;30359:2;30340:22;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;;;:73;;;;;30411:1;30380:33;;:15;:19;30396:2;30380:19;;;;;;;;;;;;;;;;;;;;;:33;;;30340:73;30332:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;30449:10;;;;;;;;;;;:23;;;30473:10;30493:4;30500:2;30449:54;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30520:16;:28;30537:10;30520:28;;;;;;;;;;;;;;;30554:2;30520:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30596:15;30572:17;:21;30590:2;30572:21;;;;;;;;;;;:39;;;;30648:10;30626:15;:19;30642:2;30626:19;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;30278:392;30273:3;;;;;:::i;:::-;;;;30232:438;;;;30011:666:::0;:::o;17922:151::-;18011:7;18038:11;:18;18050:5;18038:18;;;;;;;;;;;;;;;:27;18057:7;18038:27;;;;;;;;;;;;;;;;18031:34;;17922:151;;;;:::o;34736:116::-;34793:7;34820:15;:24;34836:7;34820:24;;;;;;;;;;;;;;;;;;;;;34813:31;;34736:116;;;:::o;9723:201::-;9045:12;:10;:12::i;:::-;9034:23;;:7;:5;:7::i;:::-;:23;;;9026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9832:1:::1;9812:22;;:8;:22;;::::0;9804:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;9888:28;9907:8;9888:18;:28::i;:::-;9723:201:::0;:::o;7538:98::-;7591:7;7618:10;7611:17;;7538:98;:::o;24257:380::-;24410:1;24393:19;;:5;:19;;;24385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24491:1;24472:21;;:7;:21;;;24464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24575:6;24545:11;:18;24557:5;24545:18;;;;;;;;;;;;;;;:27;24564:7;24545:27;;;;;;;;;;;;;;;:36;;;;24613:7;24597:32;;24606:5;24597:32;;;24622:6;24597:32;;;;;;:::i;:::-;;;;;;;;24257:380;;;:::o;24924:453::-;25059:24;25086:25;25096:5;25103:7;25086:9;:25::i;:::-;25059:52;;25146:17;25126:16;:37;25122:248;;25208:6;25188:16;:26;;25180:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25292:51;25301:5;25308:7;25336:6;25317:16;:25;25292:8;:51::i;:::-;25122:248;25048:329;24924:453;;;:::o;21538:671::-;21685:1;21669:18;;:4;:18;;;21661:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21762:1;21748:16;;:2;:16;;;21740:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21817:38;21838:4;21844:2;21848:6;21817:20;:38::i;:::-;21868:19;21890:9;:15;21900:4;21890:15;;;;;;;;;;;;;;;;21868:37;;21939:6;21924:11;:21;;21916:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;22056:6;22042:11;:20;22024:9;:15;22034:4;22024:15;;;;;;;;;;;;;;;:38;;;;22101:6;22084:9;:13;22094:2;22084:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;22140:2;22125:26;;22134:4;22125:26;;;22144:6;22125:26;;;;;;:::i;:::-;;;;;;;;22164:37;22184:4;22190:2;22194:6;22164:19;:37::i;:::-;21650:559;21538:671;;;:::o;23228:591::-;23331:1;23312:21;;:7;:21;;;23304:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23384:49;23405:7;23422:1;23426:6;23384:20;:49::i;:::-;23446:22;23471:9;:18;23481:7;23471:18;;;;;;;;;;;;;;;;23446:43;;23526:6;23508:14;:24;;23500:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23645:6;23628:14;:23;23607:9;:18;23617:7;23607:18;;;;;;;;;;;;;;;:44;;;;23689:6;23673:12;;:22;;;;;;;:::i;:::-;;;;;;;;23739:1;23713:37;;23722:7;23713:37;;;23743:6;23713:37;;;;;;:::i;:::-;;;;;;;;23763:48;23783:7;23800:1;23804:6;23763:19;:48::i;:::-;23293:526;23228:591;;:::o;29576:427::-;29670:14;29687:5;:12;;;;29670:29;;29715:9;29710:286;29734:6;29730:1;:10;29710:286;;;29778:7;29766:5;29772:1;29766:8;;;;;;;;:::i;:::-;;;;;;;;;;:19;29762:223;;29806:8;;;;;:::i;:::-;;;;29841:6;29837:1;:10;29833:83;;;29883:5;29889:6;29883:13;;;;;;;;:::i;:::-;;;;;;;;;;29872:5;29878:1;29872:8;;;;;;;;:::i;:::-;;;;;;;;;:24;;;;29833:83;29934:5;:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29964:5;;29762:223;29742:3;;;;;:::i;:::-;;;;29710:286;;;;29659:344;29576:427;;:::o;10084:191::-;10158:16;10177:6;;;;;;;;;;;10158:25;;10203:8;10194:6;;:17;;;;;;;;;;;;;;;;;;10258:8;10227:40;;10248:8;10227:40;;;;;;;;;;;;10147:128;10084:191;:::o;25977:125::-;;;;:::o;26706:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1397:126::-;1434:7;1474:42;1467:5;1463:54;1452:65;;1397:126;;;:::o;1529:96::-;1566:7;1595:24;1613:5;1595:24;:::i;:::-;1584:35;;1529:96;;;:::o;1631:118::-;1718:24;1736:5;1718:24;:::i;:::-;1713:3;1706:37;1631:118;;:::o;1755:222::-;1848:4;1886:2;1875:9;1871:18;1863:26;;1899:71;1967:1;1956:9;1952:17;1943:6;1899:71;:::i;:::-;1755:222;;;;:::o;1983:75::-;2016:6;2049:2;2043:9;2033:19;;1983:75;:::o;2064:117::-;2173:1;2170;2163:12;2187:117;2296:1;2293;2286:12;2310:122;2383:24;2401:5;2383:24;:::i;:::-;2376:5;2373:35;2363:63;;2422:1;2419;2412:12;2363:63;2310:122;:::o;2438:139::-;2484:5;2522:6;2509:20;2500:29;;2538:33;2565:5;2538:33;:::i;:::-;2438:139;;;;:::o;2583:77::-;2620:7;2649:5;2638:16;;2583:77;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:118::-;3933:24;3951:5;3933:24;:::i;:::-;3928:3;3921:37;3846:118;;:::o;3970:222::-;4063:4;4101:2;4090:9;4086:18;4078:26;;4114:71;4182:1;4171:9;4167:17;4158:6;4114:71;:::i;:::-;3970:222;;;;:::o;4198:619::-;4275:6;4283;4291;4340:2;4328:9;4319:7;4315:23;4311:32;4308:119;;;4346:79;;:::i;:::-;4308:119;4466:1;4491:53;4536:7;4527:6;4516:9;4512:22;4491:53;:::i;:::-;4481:63;;4437:117;4593:2;4619:53;4664:7;4655:6;4644:9;4640:22;4619:53;:::i;:::-;4609:63;;4564:118;4721:2;4747:53;4792:7;4783:6;4772:9;4768:22;4747:53;:::i;:::-;4737:63;;4692:118;4198:619;;;;;:::o;4823:86::-;4858:7;4898:4;4891:5;4887:16;4876:27;;4823:86;;;:::o;4915:112::-;4998:22;5014:5;4998:22;:::i;:::-;4993:3;4986:35;4915:112;;:::o;5033:214::-;5122:4;5160:2;5149:9;5145:18;5137:26;;5173:67;5237:1;5226:9;5222:17;5213:6;5173:67;:::i;:::-;5033:214;;;;:::o;5253:329::-;5312:6;5361:2;5349:9;5340:7;5336:23;5332:32;5329:119;;;5367:79;;:::i;:::-;5329:119;5487:1;5512:53;5557:7;5548:6;5537:9;5533:22;5512:53;:::i;:::-;5502:63;;5458:117;5253:329;;;;:::o;5588:::-;5647:6;5696:2;5684:9;5675:7;5671:23;5667:32;5664:119;;;5702:79;;:::i;:::-;5664:119;5822:1;5847:53;5892:7;5883:6;5872:9;5868:22;5847:53;:::i;:::-;5837:63;;5793:117;5588:329;;;;:::o;5923:114::-;5990:6;6024:5;6018:12;6008:22;;5923:114;;;:::o;6043:184::-;6142:11;6176:6;6171:3;6164:19;6216:4;6211:3;6207:14;6192:29;;6043:184;;;;:::o;6233:132::-;6300:4;6323:3;6315:11;;6353:4;6348:3;6344:14;6336:22;;6233:132;;;:::o;6371:108::-;6448:24;6466:5;6448:24;:::i;:::-;6443:3;6436:37;6371:108;;:::o;6485:179::-;6554:10;6575:46;6617:3;6609:6;6575:46;:::i;:::-;6653:4;6648:3;6644:14;6630:28;;6485:179;;;;:::o;6670:113::-;6740:4;6772;6767:3;6763:14;6755:22;;6670:113;;;:::o;6819:732::-;6938:3;6967:54;7015:5;6967:54;:::i;:::-;7037:86;7116:6;7111:3;7037:86;:::i;:::-;7030:93;;7147:56;7197:5;7147:56;:::i;:::-;7226:7;7257:1;7242:284;7267:6;7264:1;7261:13;7242:284;;;7343:6;7337:13;7370:63;7429:3;7414:13;7370:63;:::i;:::-;7363:70;;7456:60;7509:6;7456:60;:::i;:::-;7446:70;;7302:224;7289:1;7286;7282:9;7277:14;;7242:284;;;7246:14;7542:3;7535:10;;6943:608;;;6819:732;;;;:::o;7557:373::-;7700:4;7738:2;7727:9;7723:18;7715:26;;7787:9;7781:4;7777:20;7773:1;7762:9;7758:17;7751:47;7815:108;7918:4;7909:6;7815:108;:::i;:::-;7807:116;;7557:373;;;;:::o;7936:117::-;8045:1;8042;8035:12;8059:180;8107:77;8104:1;8097:88;8204:4;8201:1;8194:15;8228:4;8225:1;8218:15;8245:281;8328:27;8350:4;8328:27;:::i;:::-;8320:6;8316:40;8458:6;8446:10;8443:22;8422:18;8410:10;8407:34;8404:62;8401:88;;;8469:18;;:::i;:::-;8401:88;8509:10;8505:2;8498:22;8288:238;8245:281;;:::o;8532:129::-;8566:6;8593:20;;:::i;:::-;8583:30;;8622:33;8650:4;8642:6;8622:33;:::i;:::-;8532:129;;;:::o;8667:311::-;8744:4;8834:18;8826:6;8823:30;8820:56;;;8856:18;;:::i;:::-;8820:56;8906:4;8898:6;8894:17;8886:25;;8966:4;8960;8956:15;8948:23;;8667:311;;;:::o;8984:117::-;9093:1;9090;9083:12;9124:710;9220:5;9245:81;9261:64;9318:6;9261:64;:::i;:::-;9245:81;:::i;:::-;9236:90;;9346:5;9375:6;9368:5;9361:21;9409:4;9402:5;9398:16;9391:23;;9462:4;9454:6;9450:17;9442:6;9438:30;9491:3;9483:6;9480:15;9477:122;;;9510:79;;:::i;:::-;9477:122;9625:6;9608:220;9642:6;9637:3;9634:15;9608:220;;;9717:3;9746:37;9779:3;9767:10;9746:37;:::i;:::-;9741:3;9734:50;9813:4;9808:3;9804:14;9797:21;;9684:144;9668:4;9663:3;9659:14;9652:21;;9608:220;;;9612:21;9226:608;;9124:710;;;;;:::o;9857:370::-;9928:5;9977:3;9970:4;9962:6;9958:17;9954:27;9944:122;;9985:79;;:::i;:::-;9944:122;10102:6;10089:20;10127:94;10217:3;10209:6;10202:4;10194:6;10190:17;10127:94;:::i;:::-;10118:103;;9934:293;9857:370;;;;:::o;10233:539::-;10317:6;10366:2;10354:9;10345:7;10341:23;10337:32;10334:119;;;10372:79;;:::i;:::-;10334:119;10520:1;10509:9;10505:17;10492:31;10550:18;10542:6;10539:30;10536:117;;;10572:79;;:::i;:::-;10536:117;10677:78;10747:7;10738:6;10727:9;10723:22;10677:78;:::i;:::-;10667:88;;10463:302;10233:539;;;;:::o;10778:474::-;10846:6;10854;10903:2;10891:9;10882:7;10878:23;10874:32;10871:119;;;10909:79;;:::i;:::-;10871:119;11029:1;11054:53;11099:7;11090:6;11079:9;11075:22;11054:53;:::i;:::-;11044:63;;11000:117;11156:2;11182:53;11227:7;11218:6;11207:9;11203:22;11182:53;:::i;:::-;11172:63;;11127:118;10778:474;;;;;:::o;11258:180::-;11306:77;11303:1;11296:88;11403:4;11400:1;11393:15;11427:4;11424:1;11417:15;11444:320;11488:6;11525:1;11519:4;11515:12;11505:22;;11572:1;11566:4;11562:12;11593:18;11583:81;;11649:4;11641:6;11637:17;11627:27;;11583:81;11711:2;11703:6;11700:14;11680:18;11677:38;11674:84;;11730:18;;:::i;:::-;11674:84;11495:269;11444:320;;;:::o;11770:166::-;11910:18;11906:1;11898:6;11894:14;11887:42;11770:166;:::o;11942:366::-;12084:3;12105:67;12169:2;12164:3;12105:67;:::i;:::-;12098:74;;12181:93;12270:3;12181:93;:::i;:::-;12299:2;12294:3;12290:12;12283:19;;11942:366;;;:::o;12314:419::-;12480:4;12518:2;12507:9;12503:18;12495:26;;12567:9;12561:4;12557:20;12553:1;12542:9;12538:17;12531:47;12595:131;12721:4;12595:131;:::i;:::-;12587:139;;12314:419;;;:::o;12739:180::-;12879:32;12875:1;12867:6;12863:14;12856:56;12739:180;:::o;12925:366::-;13067:3;13088:67;13152:2;13147:3;13088:67;:::i;:::-;13081:74;;13164:93;13253:3;13164:93;:::i;:::-;13282:2;13277:3;13273:12;13266:19;;12925:366;;;:::o;13297:419::-;13463:4;13501:2;13490:9;13486:18;13478:26;;13550:9;13544:4;13540:20;13536:1;13525:9;13521:17;13514:47;13578:131;13704:4;13578:131;:::i;:::-;13570:139;;13297:419;;;:::o;13722:180::-;13770:77;13767:1;13760:88;13867:4;13864:1;13857:15;13891:4;13888:1;13881:15;13908:191;13948:4;13968:20;13986:1;13968:20;:::i;:::-;13963:25;;14002:20;14020:1;14002:20;:::i;:::-;13997:25;;14041:1;14038;14035:8;14032:34;;;14046:18;;:::i;:::-;14032:34;14091:1;14088;14084:9;14076:17;;13908:191;;;;:::o;14105:180::-;14153:77;14150:1;14143:88;14250:4;14247:1;14240:15;14274:4;14271:1;14264:15;14291:442;14440:4;14478:2;14467:9;14463:18;14455:26;;14491:71;14559:1;14548:9;14544:17;14535:6;14491:71;:::i;:::-;14572:72;14640:2;14629:9;14625:18;14616:6;14572:72;:::i;:::-;14654;14722:2;14711:9;14707:18;14698:6;14654:72;:::i;:::-;14291:442;;;;;;:::o;14739:348::-;14779:7;14802:20;14820:1;14802:20;:::i;:::-;14797:25;;14836:20;14854:1;14836:20;:::i;:::-;14831:25;;15024:1;14956:66;14952:74;14949:1;14946:81;14941:1;14934:9;14927:17;14923:105;14920:131;;;15031:18;;:::i;:::-;14920:131;15079:1;15076;15072:9;15061:20;;14739:348;;;;:::o;15093:305::-;15133:3;15152:20;15170:1;15152:20;:::i;:::-;15147:25;;15186:20;15204:1;15186:20;:::i;:::-;15181:25;;15340:1;15272:66;15268:74;15265:1;15262:81;15259:107;;;15346:18;;:::i;:::-;15259:107;15390:1;15387;15383:9;15376:16;;15093:305;;;;:::o;15404:180::-;15452:77;15449:1;15442:88;15549:4;15546:1;15539:15;15573:4;15570:1;15563:15;15590:171;15629:3;15652:24;15670:5;15652:24;:::i;:::-;15643:33;;15698:4;15691:5;15688:15;15685:41;;15706:18;;:::i;:::-;15685:41;15753:1;15746:5;15742:13;15735:20;;15590:171;;;:::o;15767:233::-;15806:3;15829:24;15847:5;15829:24;:::i;:::-;15820:33;;15875:66;15868:5;15865:77;15862:103;;15945:18;;:::i;:::-;15862:103;15992:1;15985:5;15981:13;15974:20;;15767:233;;;:::o;16006:182::-;16146:34;16142:1;16134:6;16130:14;16123:58;16006:182;:::o;16194:366::-;16336:3;16357:67;16421:2;16416:3;16357:67;:::i;:::-;16350:74;;16433:93;16522:3;16433:93;:::i;:::-;16551:2;16546:3;16542:12;16535:19;;16194:366;;;:::o;16566:419::-;16732:4;16770:2;16759:9;16755:18;16747:26;;16819:9;16813:4;16809:20;16805:1;16794:9;16790:17;16783:47;16847:131;16973:4;16847:131;:::i;:::-;16839:139;;16566:419;;;:::o;16991:162::-;17131:14;17127:1;17119:6;17115:14;17108:38;16991:162;:::o;17159:366::-;17301:3;17322:67;17386:2;17381:3;17322:67;:::i;:::-;17315:74;;17398:93;17487:3;17398:93;:::i;:::-;17516:2;17511:3;17507:12;17500:19;;17159:366;;;:::o;17531:419::-;17697:4;17735:2;17724:9;17720:18;17712:26;;17784:9;17778:4;17774:20;17770:1;17759:9;17755:17;17748:47;17812:131;17938:4;17812:131;:::i;:::-;17804:139;;17531:419;;;:::o;17956:169::-;18096:21;18092:1;18084:6;18080:14;18073:45;17956:169;:::o;18131:366::-;18273:3;18294:67;18358:2;18353:3;18294:67;:::i;:::-;18287:74;;18370:93;18459:3;18370:93;:::i;:::-;18488:2;18483:3;18479:12;18472:19;;18131:366;;;:::o;18503:419::-;18669:4;18707:2;18696:9;18692:18;18684:26;;18756:9;18750:4;18746:20;18742:1;18731:9;18727:17;18720:47;18784:131;18910:4;18784:131;:::i;:::-;18776:139;;18503:419;;;:::o;18928:167::-;19068:19;19064:1;19056:6;19052:14;19045:43;18928:167;:::o;19101:366::-;19243:3;19264:67;19328:2;19323:3;19264:67;:::i;:::-;19257:74;;19340:93;19429:3;19340:93;:::i;:::-;19458:2;19453:3;19449:12;19442:19;;19101:366;;;:::o;19473:419::-;19639:4;19677:2;19666:9;19662:18;19654:26;;19726:9;19720:4;19716:20;19712:1;19701:9;19697:17;19690:47;19754:131;19880:4;19754:131;:::i;:::-;19746:139;;19473:419;;;:::o;19898:223::-;20038:34;20034:1;20026:6;20022:14;20015:58;20107:6;20102:2;20094:6;20090:15;20083:31;19898:223;:::o;20127:366::-;20269:3;20290:67;20354:2;20349:3;20290:67;:::i;:::-;20283:74;;20366:93;20455:3;20366:93;:::i;:::-;20484:2;20479:3;20475:12;20468:19;;20127:366;;;:::o;20499:419::-;20665:4;20703:2;20692:9;20688:18;20680:26;;20752:9;20746:4;20742:20;20738:1;20727:9;20723:17;20716:47;20780:131;20906:4;20780:131;:::i;:::-;20772:139;;20499:419;;;:::o;20924:224::-;21064:34;21060:1;21052:6;21048:14;21041:58;21133:7;21128:2;21120:6;21116:15;21109:32;20924:224;:::o;21154:366::-;21296:3;21317:67;21381:2;21376:3;21317:67;:::i;:::-;21310:74;;21393:93;21482:3;21393:93;:::i;:::-;21511:2;21506:3;21502:12;21495:19;;21154:366;;;:::o;21526:419::-;21692:4;21730:2;21719:9;21715:18;21707:26;;21779:9;21773:4;21769:20;21765:1;21754:9;21750:17;21743:47;21807:131;21933:4;21807:131;:::i;:::-;21799:139;;21526:419;;;:::o;21951:166::-;22091:18;22087:1;22079:6;22075:14;22068:42;21951:166;:::o;22123:366::-;22265:3;22286:67;22350:2;22345:3;22286:67;:::i;:::-;22279:74;;22362:93;22451:3;22362:93;:::i;:::-;22480:2;22475:3;22471:12;22464:19;;22123:366;;;:::o;22495:419::-;22661:4;22699:2;22688:9;22684:18;22676:26;;22748:9;22742:4;22738:20;22734:1;22723:9;22719:17;22712:47;22776:131;22902:4;22776:131;:::i;:::-;22768:139;;22495:419;;;:::o;22920:239::-;23060:34;23056:1;23048:6;23044:14;23037:58;23129:22;23124:2;23116:6;23112:15;23105:47;22920:239;:::o;23165:366::-;23307:3;23328:67;23392:2;23387:3;23328:67;:::i;:::-;23321:74;;23404:93;23493:3;23404:93;:::i;:::-;23522:2;23517:3;23513:12;23506:19;;23165:366;;;:::o;23537:419::-;23703:4;23741:2;23730:9;23726:18;23718:26;;23790:9;23784:4;23780:20;23776:1;23765:9;23761:17;23754:47;23818:131;23944:4;23818:131;:::i;:::-;23810:139;;23537:419;;;:::o;23962:143::-;24019:5;24050:6;24044:13;24035:22;;24066:33;24093:5;24066:33;:::i;:::-;23962:143;;;;:::o;24111:351::-;24181:6;24230:2;24218:9;24209:7;24205:23;24201:32;24198:119;;;24236:79;;:::i;:::-;24198:119;24356:1;24381:64;24437:7;24428:6;24417:9;24413:22;24381:64;:::i;:::-;24371:74;;24327:128;24111:351;;;;:::o;24468:166::-;24608:18;24604:1;24596:6;24592:14;24585:42;24468:166;:::o;24640:366::-;24782:3;24803:67;24867:2;24862:3;24803:67;:::i;:::-;24796:74;;24879:93;24968:3;24879:93;:::i;:::-;24997:2;24992:3;24988:12;24981:19;;24640:366;;;:::o;25012:419::-;25178:4;25216:2;25205:9;25201:18;25193:26;;25265:9;25259:4;25255:20;25251:1;25240:9;25236:17;25229:47;25293:131;25419:4;25293:131;:::i;:::-;25285:139;;25012:419;;;:::o;25437:225::-;25577:34;25573:1;25565:6;25561:14;25554:58;25646:8;25641:2;25633:6;25629:15;25622:33;25437:225;:::o;25668:366::-;25810:3;25831:67;25895:2;25890:3;25831:67;:::i;:::-;25824:74;;25907:93;25996:3;25907:93;:::i;:::-;26025:2;26020:3;26016:12;26009:19;;25668:366;;;:::o;26040:419::-;26206:4;26244:2;26233:9;26229:18;26221:26;;26293:9;26287:4;26283:20;26279:1;26268:9;26264:17;26257:47;26321:131;26447:4;26321:131;:::i;:::-;26313:139;;26040:419;;;:::o;26465:223::-;26605:34;26601:1;26593:6;26589:14;26582:58;26674:6;26669:2;26661:6;26657:15;26650:31;26465:223;:::o;26694:366::-;26836:3;26857:67;26921:2;26916:3;26857:67;:::i;:::-;26850:74;;26933:93;27022:3;26933:93;:::i;:::-;27051:2;27046:3;27042:12;27035:19;;26694:366;;;:::o;27066:419::-;27232:4;27270:2;27259:9;27255:18;27247:26;;27319:9;27313:4;27309:20;27305:1;27294:9;27290:17;27283:47;27347:131;27473:4;27347:131;:::i;:::-;27339:139;;27066:419;;;:::o;27491:221::-;27631:34;27627:1;27619:6;27615:14;27608:58;27700:4;27695:2;27687:6;27683:15;27676:29;27491:221;:::o;27718:366::-;27860:3;27881:67;27945:2;27940:3;27881:67;:::i;:::-;27874:74;;27957:93;28046:3;27957:93;:::i;:::-;28075:2;28070:3;28066:12;28059:19;;27718:366;;;:::o;28090:419::-;28256:4;28294:2;28283:9;28279:18;28271:26;;28343:9;28337:4;28333:20;28329:1;28318:9;28314:17;28307:47;28371:131;28497:4;28371:131;:::i;:::-;28363:139;;28090:419;;;:::o;28515:179::-;28655:31;28651:1;28643:6;28639:14;28632:55;28515:179;:::o;28700:366::-;28842:3;28863:67;28927:2;28922:3;28863:67;:::i;:::-;28856:74;;28939:93;29028:3;28939:93;:::i;:::-;29057:2;29052:3;29048:12;29041:19;;28700:366;;;:::o;29072:419::-;29238:4;29276:2;29265:9;29261:18;29253:26;;29325:9;29319:4;29315:20;29311:1;29300:9;29296:17;29289:47;29353:131;29479:4;29353:131;:::i;:::-;29345:139;;29072:419;;;:::o;29497:224::-;29637:34;29633:1;29625:6;29621:14;29614:58;29706:7;29701:2;29693:6;29689:15;29682:32;29497:224;:::o;29727:366::-;29869:3;29890:67;29954:2;29949:3;29890:67;:::i;:::-;29883:74;;29966:93;30055:3;29966:93;:::i;:::-;30084:2;30079:3;30075:12;30068:19;;29727:366;;;:::o;30099:419::-;30265:4;30303:2;30292:9;30288:18;30280:26;;30352:9;30346:4;30342:20;30338:1;30327:9;30323:17;30316:47;30380:131;30506:4;30380:131;:::i;:::-;30372:139;;30099:419;;;:::o;30524:222::-;30664:34;30660:1;30652:6;30648:14;30641:58;30733:5;30728:2;30720:6;30716:15;30709:30;30524:222;:::o;30752:366::-;30894:3;30915:67;30979:2;30974:3;30915:67;:::i;:::-;30908:74;;30991:93;31080:3;30991:93;:::i;:::-;31109:2;31104:3;31100:12;31093:19;;30752:366;;;:::o;31124:419::-;31290:4;31328:2;31317:9;31313:18;31305:26;;31377:9;31371:4;31367:20;31363:1;31352:9;31348:17;31341:47;31405:131;31531:4;31405:131;:::i;:::-;31397:139;;31124:419;;;:::o;31549:225::-;31689:34;31685:1;31677:6;31673:14;31666:58;31758:8;31753:2;31745:6;31741:15;31734:33;31549:225;:::o;31780:366::-;31922:3;31943:67;32007:2;32002:3;31943:67;:::i;:::-;31936:74;;32019:93;32108:3;32019:93;:::i;:::-;32137:2;32132:3;32128:12;32121:19;;31780:366;;;:::o;32152:419::-;32318:4;32356:2;32345:9;32341:18;32333:26;;32405:9;32399:4;32395:20;32391:1;32380:9;32376:17;32369:47;32433:131;32559:4;32433:131;:::i;:::-;32425:139;;32152:419;;;:::o;32577:220::-;32717:34;32713:1;32705:6;32701:14;32694:58;32786:3;32781:2;32773:6;32769:15;32762:28;32577:220;:::o;32803:366::-;32945:3;32966:67;33030:2;33025:3;32966:67;:::i;:::-;32959:74;;33042:93;33131:3;33042:93;:::i;:::-;33160:2;33155:3;33151:12;33144:19;;32803:366;;;:::o;33175:419::-;33341:4;33379:2;33368:9;33364:18;33356:26;;33428:9;33422:4;33418:20;33414:1;33403:9;33399:17;33392:47;33456:131;33582:4;33456:131;:::i;:::-;33448:139;;33175:419;;;:::o;33600:221::-;33740:34;33736:1;33728:6;33724:14;33717:58;33809:4;33804:2;33796:6;33792:15;33785:29;33600:221;:::o;33827:366::-;33969:3;33990:67;34054:2;34049:3;33990:67;:::i;:::-;33983:74;;34066:93;34155:3;34066:93;:::i;:::-;34184:2;34179:3;34175:12;34168:19;;33827:366;;;:::o;34199:419::-;34365:4;34403:2;34392:9;34388:18;34380:26;;34452:9;34446:4;34442:20;34438:1;34427:9;34423:17;34416:47;34480:131;34606:4;34480:131;:::i;:::-;34472:139;;34199:419;;;:::o

Swarm Source

ipfs://fb1987abf722c8bc4a90803f0965d5dc3c5bbc0bd96af48b90f0c5819d6f3bd6
Loading...
Loading
Loading...
Loading
[ 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.