ETH Price: $3,103.79 (+1.18%)
Gas: 16 Gwei

Token

CrowPunks (CROW)
 

Overview

Max Total Supply

132 CROW

Holders

44

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
4 CROW
0x694231368d42ba813e2bc71f884f9ee07d5d0267
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:
CrowPunks

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

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

// SPDX-License-Identifier: MIT

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/utils/Address.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() {
        _setOwner(_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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.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



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/ERC721.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 tokenId);

    /**
     * @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/token/ERC721/extensions/ERC721Enumerable.sol


pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

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

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

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

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

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

pragma solidity ^0.8.0;








/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @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.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` 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 tokenId
    ) internal virtual {}
}

// File: Nico/ColorBots/index-prod.sol


pragma solidity ^0.8.0;



/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

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

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

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

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

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







pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

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







pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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







pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

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














pragma solidity ^0.8.0;





contract CrowPunks is ERC721, ERC721Enumerable, Ownable {
  
  // Provenance
  string public CROWPUNKS_HASH = "";

  // Price & Supply
  uint256 public constant NFT_PRICE = 50000000000000000; //0.05 ETH
  uint256 public constant NFT_5PRICE = 220000000000000000; //0.22 ETH
  uint256 public constant NFT_10PRICE = 400000000000000000; //0.4 ETH
  uint public constant MAX_SUPPLY = 10000;
  uint public constant CrowReserve = 10;
  uint public constant MAXReserve = 10;

  // Internals
  string private _baseTokenURI;
  uint256 public startingIndexBlock;
  uint256 public startingIndex;  
  
  // Adress
  address member1 = 0xbFC3226E85203e1d597AAc20B32D4D6d342E74c1;
  address member2 = 0x31fF4098b05116733f27AFbD12d25F9DE9cBC9E3;

  // Sale
  bool public hasSaleStarted = false;
  bool public has5SaleStarted = false;
  bool public has10SaleStarted = false;
  uint private constant MAX_MINT_PER_CALL = 1;

  // Pre-Sale
  bool public hasPreSaleStarted = false;
  uint public constant MAX_PRESALE_SUPPLY = 100;

  constructor(string memory baseURI) ERC721("CrowPunks", "CROW") {
    setBaseURI(baseURI);
  }

  function _baseURI() internal view override(ERC721) returns (string memory) {        
    return _baseTokenURI;
  }

  function setBaseURI(string memory baseURI) public onlyOwner {
    _baseTokenURI = baseURI;
  }
  function getBaseURI() external view returns(string memory) {
    return _baseTokenURI;
  }
  
  function tokensOfOwner(address _owner) external view returns(uint256[] memory ) {
    uint256 tokenCount = balanceOf(_owner);
    if (tokenCount == 0) {
      // Return an empty array
      return new uint256[](0);
    } else {
      uint256[] memory result = new uint256[](tokenCount);
      uint256 index;
      for (index = 0; index < tokenCount; index++) {
        result[index] = tokenOfOwnerByIndex(_owner, index);
      }
      return result;
    }
  }

  function mintPreSale() public payable {
    require(hasPreSaleStarted, "Presale has not started");
    require(msg.value >= NFT_PRICE, "Incorrect ether value");
    require(totalSupply() < MAX_PRESALE_SUPPLY, "Presale has ended");

    uint mintIndex = totalSupply() ; // index 0.
    _safeMint(msg.sender, mintIndex);

    // If we haven't set the starting index and this is either 1) the last saleable token or 2) the first token to be sold after
    // the end of pre-sale, set the starting index block
    if (startingIndexBlock == 0 && (totalSupply() == MAX_SUPPLY)) {
      startingIndexBlock = block.number;
    } 
  }

  function mint(uint256 numNFTs) public payable {
    require(hasSaleStarted, "Sale has not started");
    require(MAX_SUPPLY > totalSupply(), "Sale has ended");
    require(numNFTs > 0 && numNFTs <= MAX_MINT_PER_CALL, "Exceeds MAX_MINT_PER_CALL");
    require(MAX_SUPPLY >= totalSupply() + numNFTs, "Exceeds MAX_SUPPLY");
    require(msg.value >= NFT_PRICE * numNFTs, "Incorrect ether value");

    for (uint i = 0; i < numNFTs; i++) {
      uint mintIndex = totalSupply() ; // index 0.
      _safeMint(msg.sender, mintIndex);
    }

    // If we haven't set the starting index and this is either 1) the last saleable token or 2) the first token to be sold after
    // the end of pre-sale, set the starting index block
    if (startingIndexBlock == 0 && (totalSupply() == MAX_SUPPLY)) {
      startingIndexBlock = block.number;
    } 
  }
  
  function mint5crows(uint256 num5NFTs) public payable {
    require(has5SaleStarted, "Sale has not started");
    require(MAX_SUPPLY > totalSupply(), "Sale has ended");
    require(num5NFTs > 0 && num5NFTs <= MAX_MINT_PER_CALL, "Exceeds MAX_MINT_PER_CALL");
    require(MAX_SUPPLY >= totalSupply() + (num5NFTs * 5), "Exceeds MAX_SUPPLY");
    require(msg.value >= NFT_5PRICE * num5NFTs, "Incorrect ether value");

    for (uint i = 0; i < (num5NFTs * 5); i++) {
      uint mintIndex = totalSupply() ; // index 0.
      _safeMint(msg.sender, mintIndex);
    }

    // If we haven't set the starting index and this is either 1) the last saleable token or 2) the first token to be sold after
    // the end of pre-sale, set the starting index block
    if (startingIndexBlock == 0 && (totalSupply() == MAX_SUPPLY)) {
      startingIndexBlock = block.number;
    } 
  }
  
  function mint10crows(uint256 num10NFTs) public payable {
    require(has10SaleStarted, "Sale has not started");
    require(MAX_SUPPLY > totalSupply(), "Sale has ended");
    require(num10NFTs > 0 && num10NFTs <= MAX_MINT_PER_CALL, "Exceeds MAX_MINT_PER_CALL");
    require(MAX_SUPPLY >= totalSupply() + (num10NFTs * 10), "Exceeds MAX_SUPPLY");
    require(msg.value >= NFT_10PRICE * num10NFTs, "Incorrect ether value");

    for (uint i = 0; i < (num10NFTs * 10); i++) {
      uint mintIndex = totalSupply() ; // index 0.
      _safeMint(msg.sender, mintIndex);
    }

    // If we haven't set the starting index and this is either 1) the last saleable token or 2) the first token to be sold after
    // the end of pre-sale, set the starting index block
    if (startingIndexBlock == 0 && (totalSupply() == MAX_SUPPLY)) {
      startingIndexBlock = block.number;
    } 
  }
  
  function reserveCrows(address _to, uint256 _reserveAmount) public onlyOwner {        
        uint supply = totalSupply();
        require(_reserveAmount > 0 && _reserveAmount <= CrowReserve, "Not enough reserve left for team");
        require(MAXReserve >= totalSupply() + _reserveAmount, "Not enough reserve left for team");
        for (uint i = 0; i < _reserveAmount; i++) {
            _safeMint(_to, supply + i);
        }
    }

  
  function flipSaleState() public onlyOwner {
    hasSaleStarted = !hasSaleStarted;
  }
  
  function flip5SaleState() public onlyOwner {
    has5SaleStarted = !has5SaleStarted;
  }
  
  function flip10SaleState() public onlyOwner {
    has10SaleStarted = !has10SaleStarted;
  }

  function flipPreSaleState() public onlyOwner {
    hasPreSaleStarted = !hasPreSaleStarted;
  }
  
  function withdraw() public onlyOwner {
    require(payable(member1).send(address(this).balance /5 ));
    require(payable(member2).send(address(this).balance));
        
  }
  function _beforeTokenTransfer(address from, address to, uint256 tokenId)
    internal
    override(ERC721, ERC721Enumerable)
  {
    super._beforeTokenTransfer(from, to, tokenId);
  }

  function _burn(uint256 tokenId) internal override(ERC721) {
    super._burn(tokenId);
  }

  function tokenURI(uint256 tokenId)
    public
    view
    override(ERC721)
    returns (string memory)
  {
    return super.tokenURI(tokenId);
  }
  function supportsInterface(bytes4 interfaceId)
    public
    view
    override(ERC721, ERC721Enumerable)
    returns (bool)
  {
    return super.supportsInterface(interfaceId);
  }

  function setStartingIndex() public {
    require(startingIndex == 0, "Starting index is already set");
    require(startingIndexBlock != 0, "Starting index block must be set");
    
    startingIndex = uint(blockhash(startingIndexBlock)) % MAX_SUPPLY;
    // Just a sanity case in the worst case if this function is called late (EVM only stores last 256 block hashes)
    if (block.number - startingIndexBlock > 255) {
      startingIndex = uint(blockhash(block.number - 1)) % MAX_SUPPLY;
    }
    // Prevent default sequence
    if (startingIndex == 0) {
      startingIndex = startingIndex + 1;
    }
  }

  function emergencySetStartingIndexBlock() public onlyOwner {
    require(startingIndex == 0, "Starting index is already set");
    startingIndexBlock = block.number;
  }

  function setProvenanceHash(string memory provenanceHash) public onlyOwner {
    CROWPUNKS_HASH = provenanceHash;
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","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":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"CROWPUNKS_HASH","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CrowReserve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAXReserve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PRESALE_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFT_10PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFT_5PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencySetStartingIndexBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flip10SaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flip5SaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipPreSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"has10SaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"has5SaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasPreSaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasSaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numNFTs","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num10NFTs","type":"uint256"}],"name":"mint10crows","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num5NFTs","type":"uint256"}],"name":"mint5crows","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPreSale","outputs":[],"stateMutability":"payable","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_reserveAmount","type":"uint256"}],"name":"reserveCrows","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"provenanceHash","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setStartingIndex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startingIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startingIndexBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260405180602001604052806000815250600b90805190602001906200002b929190620003f0565b5073bfc3226e85203e1d597aac20b32d4d6d342e74c1600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507331ff4098b05116733f27afbd12d25f9de9cbc9e3601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060146101000a81548160ff0219169083151502179055506000601060156101000a81548160ff0219169083151502179055506000601060166101000a81548160ff0219169083151502179055506000601060176101000a81548160ff0219169083151502179055503480156200014f57600080fd5b5060405162005aa638038062005aa683398181016040528101906200017591906200051e565b6040518060400160405280600981526020017f43726f7750756e6b7300000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f43524f57000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001f9929190620003f0565b50806001908051906020019062000212929190620003f0565b50505062000235620002296200024d60201b60201c565b6200025560201b60201c565b62000246816200031b60201b60201c565b5062000776565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200032b6200024d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000351620003c660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003a19062000596565b60405180910390fd5b80600c9080519060200190620003c2929190620003f0565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003fe906200065e565b90600052602060002090601f0160209004810192826200042257600085556200046e565b82601f106200043d57805160ff19168380011785556200046e565b828001600101855582156200046e579182015b828111156200046d57825182559160200191906001019062000450565b5b5090506200047d919062000481565b5090565b5b808211156200049c57600081600090555060010162000482565b5090565b6000620004b7620004b184620005e1565b620005b8565b905082815260208101848484011115620004d657620004d56200072d565b5b620004e384828562000628565b509392505050565b600082601f83011262000503576200050262000728565b5b815162000515848260208601620004a0565b91505092915050565b60006020828403121562000537576200053662000737565b5b600082015167ffffffffffffffff81111562000558576200055762000732565b5b6200056684828501620004eb565b91505092915050565b60006200057e60208362000617565b91506200058b826200074d565b602082019050919050565b60006020820190508181036000830152620005b1816200056f565b9050919050565b6000620005c4620005d7565b9050620005d2828262000694565b919050565b6000604051905090565b600067ffffffffffffffff821115620005ff57620005fe620006f9565b5b6200060a826200073c565b9050602081019050919050565b600082825260208201905092915050565b60005b83811015620006485780820151818401526020810190506200062b565b8381111562000658576000848401525b50505050565b600060028204905060018216806200067757607f821691505b602082108114156200068e576200068d620006ca565b5b50919050565b6200069f826200073c565b810181811067ffffffffffffffff82111715620006c157620006c0620006f9565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61532080620007866000396000f3fe6080604052600436106102ae5760003560e01c80636aac741011610175578063ade395f9116100dc578063e36d649811610095578063e98665501161006f578063e986655014610a22578063efbc85a014610a39578063f032554914610a50578063f2fde38b14610a67576102ae565b8063e36d6498146109b0578063e6b922e8146109db578063e985e9c5146109e5576102ae565b8063ade395f9146108af578063b88d4fde146108da578063c87b56dd14610903578063c887a25714610940578063cb774d4714610969578063da9426a114610994576102ae565b80637dc29f6a1161012e5780637dc29f6a146107ac5780638462151c146107d75780638da5cb5b1461081457806395d89b411461083f578063a0712d681461086a578063a22cb46514610886576102ae565b80636aac7410146106cf5780636b8dc355146106eb57806370a0823114610716578063714c539814610753578063715018a61461077e5780637d17fcbe14610795576102ae565b806323b872dd116102195780634f6ccce7116101d25780634f6ccce7146105ab57806355f804b3146105e85780635d1fbfc4146106115780636352211e1461063c578063676dd563146106795780636a5928f5146106a4576102ae565b806323b872dd146104c35780632f745c59146104ec57806332cb6b0c1461052957806334918dfd146105545780633ccfd60b1461056b57806342842e0e14610582576102ae565b806312cd1ef41161026b57806312cd1ef4146103c157806318160ddd146103ec57806318649f2614610417578063195bcd00146104425780631bb6fd841461046d5780631c8b232d14610498576102ae565b806301ffc9a7146102b357806306fdde03146102f0578063081812fc1461031b578063095ea7b3146103585780630ceccdc9146103815780631096952314610398575b600080fd5b3480156102bf57600080fd5b506102da60048036038101906102d59190613c96565b610a90565b6040516102e7919061433c565b60405180910390f35b3480156102fc57600080fd5b50610305610aa2565b6040516103129190614357565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d9190613d39565b610b34565b60405161034f91906142b3565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a9190613c56565b610bb9565b005b34801561038d57600080fd5b50610396610cd1565b005b3480156103a457600080fd5b506103bf60048036038101906103ba9190613cf0565b610d79565b005b3480156103cd57600080fd5b506103d6610e0f565b6040516103e39190614357565b60405180910390f35b3480156103f857600080fd5b50610401610e9d565b60405161040e91906146f9565b60405180910390f35b34801561042357600080fd5b5061042c610eaa565b60405161043991906146f9565b60405180910390f35b34801561044e57600080fd5b50610457610eaf565b60405161046491906146f9565b60405180910390f35b34801561047957600080fd5b50610482610eb4565b60405161048f919061433c565b60405180910390f35b3480156104a457600080fd5b506104ad610ec7565b6040516104ba919061433c565b60405180910390f35b3480156104cf57600080fd5b506104ea60048036038101906104e59190613b40565b610eda565b005b3480156104f857600080fd5b50610513600480360381019061050e9190613c56565b610f3a565b60405161052091906146f9565b60405180910390f35b34801561053557600080fd5b5061053e610fdf565b60405161054b91906146f9565b60405180910390f35b34801561056057600080fd5b50610569610fe5565b005b34801561057757600080fd5b5061058061108d565b005b34801561058e57600080fd5b506105a960048036038101906105a49190613b40565b6111d7565b005b3480156105b757600080fd5b506105d260048036038101906105cd9190613d39565b6111f7565b6040516105df91906146f9565b60405180910390f35b3480156105f457600080fd5b5061060f600480360381019061060a9190613cf0565b611268565b005b34801561061d57600080fd5b506106266112fe565b604051610633919061433c565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e9190613d39565b611311565b60405161067091906142b3565b60405180910390f35b34801561068557600080fd5b5061068e6113c3565b60405161069b91906146f9565b60405180910390f35b3480156106b057600080fd5b506106b96113ce565b6040516106c6919061433c565b60405180910390f35b6106e960048036038101906106e49190613d39565b6113e1565b005b3480156106f757600080fd5b506107006115f0565b60405161070d91906146f9565b60405180910390f35b34801561072257600080fd5b5061073d60048036038101906107389190613ad3565b6115f5565b60405161074a91906146f9565b60405180910390f35b34801561075f57600080fd5b506107686116ad565b6040516107759190614357565b60405180910390f35b34801561078a57600080fd5b5061079361173f565b005b3480156107a157600080fd5b506107aa6117c7565b005b3480156107b857600080fd5b506107c1611891565b6040516107ce91906146f9565b60405180910390f35b3480156107e357600080fd5b506107fe60048036038101906107f99190613ad3565b61189d565b60405161080b919061431a565b60405180910390f35b34801561082057600080fd5b506108296119a7565b60405161083691906142b3565b60405180910390f35b34801561084b57600080fd5b506108546119d1565b6040516108619190614357565b60405180910390f35b610884600480360381019061087f9190613d39565b611a63565b005b34801561089257600080fd5b506108ad60048036038101906108a89190613c16565b611c59565b005b3480156108bb57600080fd5b506108c4611dda565b6040516108d191906146f9565b60405180910390f35b3480156108e657600080fd5b5061090160048036038101906108fc9190613b93565b611de6565b005b34801561090f57600080fd5b5061092a60048036038101906109259190613d39565b611e48565b6040516109379190614357565b60405180910390f35b34801561094c57600080fd5b5061096760048036038101906109629190613c56565b611e5a565b005b34801561097557600080fd5b5061097e611fc1565b60405161098b91906146f9565b60405180910390f35b6109ae60048036038101906109a99190613d39565b611fc7565b005b3480156109bc57600080fd5b506109c56121d6565b6040516109d291906146f9565b60405180910390f35b6109e36121dc565b005b3480156109f157600080fd5b50610a0c6004803603810190610a079190613b00565b6122ff565b604051610a19919061433c565b60405180910390f35b348015610a2e57600080fd5b50610a37612393565b005b348015610a4557600080fd5b50610a4e612496565b005b348015610a5c57600080fd5b50610a6561253e565b005b348015610a7357600080fd5b50610a8e6004803603810190610a899190613ad3565b6125e6565b005b6000610a9b826126de565b9050919050565b606060008054610ab1906149e2565b80601f0160208091040260200160405190810160405280929190818152602001828054610add906149e2565b8015610b2a5780601f10610aff57610100808354040283529160200191610b2a565b820191906000526020600020905b815481529060010190602001808311610b0d57829003601f168201915b5050505050905090565b6000610b3f82612758565b610b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7590614599565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bc482611311565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2c90614639565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c546127c4565b73ffffffffffffffffffffffffffffffffffffffff161480610c835750610c8281610c7d6127c4565b6122ff565b5b610cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb9906144f9565b60405180910390fd5b610ccc83836127cc565b505050565b610cd96127c4565b73ffffffffffffffffffffffffffffffffffffffff16610cf76119a7565b73ffffffffffffffffffffffffffffffffffffffff1614610d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d44906145b9565b60405180910390fd5b601060169054906101000a900460ff1615601060166101000a81548160ff021916908315150217905550565b610d816127c4565b73ffffffffffffffffffffffffffffffffffffffff16610d9f6119a7565b73ffffffffffffffffffffffffffffffffffffffff1614610df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dec906145b9565b60405180910390fd5b80600b9080519060200190610e0b9291906138e7565b5050565b600b8054610e1c906149e2565b80601f0160208091040260200160405190810160405280929190818152602001828054610e48906149e2565b8015610e955780601f10610e6a57610100808354040283529160200191610e95565b820191906000526020600020905b815481529060010190602001808311610e7857829003601f168201915b505050505081565b6000600880549050905090565b600a81565b600a81565b601060169054906101000a900460ff1681565b601060149054906101000a900460ff1681565b610eeb610ee56127c4565b82612885565b610f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2190614679565b60405180910390fd5b610f35838383612963565b505050565b6000610f45836115f5565b8210610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d906143b9565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61271081565b610fed6127c4565b73ffffffffffffffffffffffffffffffffffffffff1661100b6119a7565b73ffffffffffffffffffffffffffffffffffffffff1614611061576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611058906145b9565b60405180910390fd5b601060149054906101000a900460ff1615601060146101000a81548160ff021916908315150217905550565b6110956127c4565b73ffffffffffffffffffffffffffffffffffffffff166110b36119a7565b73ffffffffffffffffffffffffffffffffffffffff1614611109576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611100906145b9565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600547611152919061486d565b9081150290604051600060405180830381858888f1935050505061117557600080fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050506111d557600080fd5b565b6111f283838360405180602001604052806000815250611de6565b505050565b6000611201610e9d565b8210611242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123990614699565b60405180910390fd5b6008828154811061125657611255614b7b565b5b90600052602060002001549050919050565b6112706127c4565b73ffffffffffffffffffffffffffffffffffffffff1661128e6119a7565b73ffffffffffffffffffffffffffffffffffffffff16146112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db906145b9565b60405180910390fd5b80600c90805190602001906112fa9291906138e7565b5050565b601060159054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b190614539565b60405180910390fd5b80915050919050565b66b1a2bc2ec5000081565b601060179054906101000a900460ff1681565b601060169054906101000a900460ff16611430576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611427906146d9565b60405180910390fd5b611438610e9d565b6127101161147b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147290614439565b60405180910390fd5b60008111801561148c575060018111155b6114cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c290614559565b60405180910390fd5b600a816114d8919061489e565b6114e0610e9d565b6114ea9190614817565b612710101561152e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152590614619565b60405180910390fd5b8067058d15e176280000611542919061489e565b341015611584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157b906146b9565b60405180910390fd5b60005b600a82611594919061489e565b8110156115c55760006115a5610e9d565b90506115b13382612bbf565b5080806115bd90614a45565b915050611587565b506000600d541480156115e057506127106115de610e9d565b145b156115ed5743600d819055505b50565b606481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165d90614519565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600c80546116bc906149e2565b80601f01602080910402602001604051908101604052809291908181526020018280546116e8906149e2565b80156117355780601f1061170a57610100808354040283529160200191611735565b820191906000526020600020905b81548152906001019060200180831161171857829003601f168201915b5050505050905090565b6117476127c4565b73ffffffffffffffffffffffffffffffffffffffff166117656119a7565b73ffffffffffffffffffffffffffffffffffffffff16146117bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b2906145b9565b60405180910390fd5b6117c56000612bdd565b565b6117cf6127c4565b73ffffffffffffffffffffffffffffffffffffffff166117ed6119a7565b73ffffffffffffffffffffffffffffffffffffffff1614611843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183a906145b9565b60405180910390fd5b6000600e5414611888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187f906144d9565b60405180910390fd5b43600d81905550565b67030d98d59a96000081565b606060006118aa836115f5565b9050600081141561190757600067ffffffffffffffff8111156118d0576118cf614baa565b5b6040519080825280602002602001820160405280156118fe5781602001602082028036833780820191505090505b509150506119a2565b60008167ffffffffffffffff81111561192357611922614baa565b5b6040519080825280602002602001820160405280156119515781602001602082028036833780820191505090505b50905060005b8281101561199b576119698582610f3a565b82828151811061197c5761197b614b7b565b5b602002602001018181525050808061199390614a45565b915050611957565b8193505050505b919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546119e0906149e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611a0c906149e2565b8015611a595780601f10611a2e57610100808354040283529160200191611a59565b820191906000526020600020905b815481529060010190602001808311611a3c57829003601f168201915b5050505050905090565b601060149054906101000a900460ff16611ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa9906146d9565b60405180910390fd5b611aba610e9d565b61271011611afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af490614439565b60405180910390fd5b600081118015611b0e575060018111155b611b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4490614559565b60405180910390fd5b80611b56610e9d565b611b609190614817565b6127101015611ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9b90614619565b60405180910390fd5b8066b1a2bc2ec50000611bb7919061489e565b341015611bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf0906146b9565b60405180910390fd5b60005b81811015611c2e576000611c0e610e9d565b9050611c1a3382612bbf565b508080611c2690614a45565b915050611bfc565b506000600d54148015611c495750612710611c47610e9d565b145b15611c565743600d819055505b50565b611c616127c4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc690614499565b60405180910390fd5b8060056000611cdc6127c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611d896127c4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611dce919061433c565b60405180910390a35050565b67058d15e17628000081565b611df7611df16127c4565b83612885565b611e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2d90614679565b60405180910390fd5b611e4284848484612ca3565b50505050565b6060611e5382612cff565b9050919050565b611e626127c4565b73ffffffffffffffffffffffffffffffffffffffff16611e806119a7565b73ffffffffffffffffffffffffffffffffffffffff1614611ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecd906145b9565b60405180910390fd5b6000611ee0610e9d565b9050600082118015611ef35750600a8211155b611f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2990614459565b60405180910390fd5b81611f3b610e9d565b611f459190614817565b600a1015611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f90614459565b60405180910390fd5b60005b82811015611fbb57611fa8848284611fa39190614817565b612bbf565b8080611fb390614a45565b915050611f8b565b50505050565b600e5481565b601060159054906101000a900460ff16612016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200d906146d9565b60405180910390fd5b61201e610e9d565b61271011612061576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205890614439565b60405180910390fd5b600081118015612072575060018111155b6120b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a890614559565b60405180910390fd5b6005816120be919061489e565b6120c6610e9d565b6120d09190614817565b6127101015612114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210b90614619565b60405180910390fd5b8067030d98d59a960000612128919061489e565b34101561216a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612161906146b9565b60405180910390fd5b60005b60058261217a919061489e565b8110156121ab57600061218b610e9d565b90506121973382612bbf565b5080806121a390614a45565b91505061216d565b506000600d541480156121c657506127106121c4610e9d565b145b156121d35743600d819055505b50565b600d5481565b601060179054906101000a900460ff1661222b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222290614399565b60405180910390fd5b66b1a2bc2ec50000341015612275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226c906146b9565b60405180910390fd5b606461227f610e9d565b106122bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b690614379565b60405180910390fd5b60006122c9610e9d565b90506122d53382612bbf565b6000600d541480156122ef57506127106122ed610e9d565b145b156122fc5743600d819055505b50565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000600e54146123d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cf906144d9565b60405180910390fd5b6000600d54141561241e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241590614659565b60405180910390fd5b612710600d544060001c6124329190614a8e565b600e8190555060ff600d544361244891906148f8565b11156124735761271060014361245e91906148f8565b4060001c61246c9190614a8e565b600e819055505b6000600e541415612494576001600e5461248d9190614817565b600e819055505b565b61249e6127c4565b73ffffffffffffffffffffffffffffffffffffffff166124bc6119a7565b73ffffffffffffffffffffffffffffffffffffffff1614612512576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612509906145b9565b60405180910390fd5b601060159054906101000a900460ff1615601060156101000a81548160ff021916908315150217905550565b6125466127c4565b73ffffffffffffffffffffffffffffffffffffffff166125646119a7565b73ffffffffffffffffffffffffffffffffffffffff16146125ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b1906145b9565b60405180910390fd5b601060179054906101000a900460ff1615601060176101000a81548160ff021916908315150217905550565b6125ee6127c4565b73ffffffffffffffffffffffffffffffffffffffff1661260c6119a7565b73ffffffffffffffffffffffffffffffffffffffff1614612662576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612659906145b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c9906143f9565b60405180910390fd5b6126db81612bdd565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612751575061275082612da6565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661283f83611311565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061289082612758565b6128cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c6906144b9565b60405180910390fd5b60006128da83611311565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061294957508373ffffffffffffffffffffffffffffffffffffffff1661293184610b34565b73ffffffffffffffffffffffffffffffffffffffff16145b8061295a575061295981856122ff565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661298382611311565b73ffffffffffffffffffffffffffffffffffffffff16146129d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d0906145d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4090614479565b60405180910390fd5b612a54838383612e88565b612a5f6000826127cc565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612aaf91906148f8565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b069190614817565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612bd9828260405180602001604052806000815250612e98565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612cae848484612963565b612cba84848484612ef3565b612cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf0906143d9565b60405180910390fd5b50505050565b6060612d0a82612758565b612d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d40906145f9565b60405180910390fd5b6000612d5361308a565b90506000815111612d735760405180602001604052806000815250612d9e565b80612d7d8461311c565b604051602001612d8e92919061428f565b6040516020818303038152906040525b915050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612e7157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612e815750612e808261327d565b5b9050919050565b612e938383836132e7565b505050565b612ea283836133fb565b612eaf6000848484612ef3565b612eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee5906143d9565b60405180910390fd5b505050565b6000612f148473ffffffffffffffffffffffffffffffffffffffff166135c9565b1561307d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f3d6127c4565b8786866040518563ffffffff1660e01b8152600401612f5f94939291906142ce565b602060405180830381600087803b158015612f7957600080fd5b505af1925050508015612faa57506040513d601f19601f82011682018060405250810190612fa79190613cc3565b60015b61302d573d8060008114612fda576040519150601f19603f3d011682016040523d82523d6000602084013e612fdf565b606091505b50600081511415613025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301c906143d9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613082565b600190505b949350505050565b6060600c8054613099906149e2565b80601f01602080910402602001604051908101604052809291908181526020018280546130c5906149e2565b80156131125780601f106130e757610100808354040283529160200191613112565b820191906000526020600020905b8154815290600101906020018083116130f557829003601f168201915b5050505050905090565b60606000821415613164576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613278565b600082905060005b6000821461319657808061317f90614a45565b915050600a8261318f919061486d565b915061316c565b60008167ffffffffffffffff8111156131b2576131b1614baa565b5b6040519080825280601f01601f1916602001820160405280156131e45781602001600182028036833780820191505090505b5090505b60008514613271576001826131fd91906148f8565b9150600a8561320c9190614a8e565b60306132189190614817565b60f81b81838151811061322e5761322d614b7b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561326a919061486d565b94506131e8565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6132f28383836135dc565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561333557613330816135e1565b613374565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461337357613372838261362a565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133b7576133b281613797565b6133f6565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146133f5576133f48282613868565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561346b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346290614579565b60405180910390fd5b61347481612758565b156134b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ab90614419565b60405180910390fd5b6134c060008383612e88565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135109190614817565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613637846115f5565b61364191906148f8565b9050600060076000848152602001908152602001600020549050818114613726576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506137ab91906148f8565b90506000600960008481526020019081526020016000205490506000600883815481106137db576137da614b7b565b5b9060005260206000200154905080600883815481106137fd576137fc614b7b565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061384c5761384b614b4c565b5b6001900381819060005260206000200160009055905550505050565b6000613873836115f5565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546138f3906149e2565b90600052602060002090601f016020900481019282613915576000855561395c565b82601f1061392e57805160ff191683800117855561395c565b8280016001018555821561395c579182015b8281111561395b578251825591602001919060010190613940565b5b509050613969919061396d565b5090565b5b8082111561398657600081600090555060010161396e565b5090565b600061399d61399884614739565b614714565b9050828152602081018484840111156139b9576139b8614bde565b5b6139c48482856149a0565b509392505050565b60006139df6139da8461476a565b614714565b9050828152602081018484840111156139fb576139fa614bde565b5b613a068482856149a0565b509392505050565b600081359050613a1d8161528e565b92915050565b600081359050613a32816152a5565b92915050565b600081359050613a47816152bc565b92915050565b600081519050613a5c816152bc565b92915050565b600082601f830112613a7757613a76614bd9565b5b8135613a8784826020860161398a565b91505092915050565b600082601f830112613aa557613aa4614bd9565b5b8135613ab58482602086016139cc565b91505092915050565b600081359050613acd816152d3565b92915050565b600060208284031215613ae957613ae8614be8565b5b6000613af784828501613a0e565b91505092915050565b60008060408385031215613b1757613b16614be8565b5b6000613b2585828601613a0e565b9250506020613b3685828601613a0e565b9150509250929050565b600080600060608486031215613b5957613b58614be8565b5b6000613b6786828701613a0e565b9350506020613b7886828701613a0e565b9250506040613b8986828701613abe565b9150509250925092565b60008060008060808587031215613bad57613bac614be8565b5b6000613bbb87828801613a0e565b9450506020613bcc87828801613a0e565b9350506040613bdd87828801613abe565b925050606085013567ffffffffffffffff811115613bfe57613bfd614be3565b5b613c0a87828801613a62565b91505092959194509250565b60008060408385031215613c2d57613c2c614be8565b5b6000613c3b85828601613a0e565b9250506020613c4c85828601613a23565b9150509250929050565b60008060408385031215613c6d57613c6c614be8565b5b6000613c7b85828601613a0e565b9250506020613c8c85828601613abe565b9150509250929050565b600060208284031215613cac57613cab614be8565b5b6000613cba84828501613a38565b91505092915050565b600060208284031215613cd957613cd8614be8565b5b6000613ce784828501613a4d565b91505092915050565b600060208284031215613d0657613d05614be8565b5b600082013567ffffffffffffffff811115613d2457613d23614be3565b5b613d3084828501613a90565b91505092915050565b600060208284031215613d4f57613d4e614be8565b5b6000613d5d84828501613abe565b91505092915050565b6000613d728383614271565b60208301905092915050565b613d878161492c565b82525050565b6000613d98826147ab565b613da281856147d9565b9350613dad8361479b565b8060005b83811015613dde578151613dc58882613d66565b9750613dd0836147cc565b925050600181019050613db1565b5085935050505092915050565b613df48161493e565b82525050565b6000613e05826147b6565b613e0f81856147ea565b9350613e1f8185602086016149af565b613e2881614bed565b840191505092915050565b6000613e3e826147c1565b613e4881856147fb565b9350613e588185602086016149af565b613e6181614bed565b840191505092915050565b6000613e77826147c1565b613e81818561480c565b9350613e918185602086016149af565b80840191505092915050565b6000613eaa6011836147fb565b9150613eb582614bfe565b602082019050919050565b6000613ecd6017836147fb565b9150613ed882614c27565b602082019050919050565b6000613ef0602b836147fb565b9150613efb82614c50565b604082019050919050565b6000613f136032836147fb565b9150613f1e82614c9f565b604082019050919050565b6000613f366026836147fb565b9150613f4182614cee565b604082019050919050565b6000613f59601c836147fb565b9150613f6482614d3d565b602082019050919050565b6000613f7c600e836147fb565b9150613f8782614d66565b602082019050919050565b6000613f9f6020836147fb565b9150613faa82614d8f565b602082019050919050565b6000613fc26024836147fb565b9150613fcd82614db8565b604082019050919050565b6000613fe56019836147fb565b9150613ff082614e07565b602082019050919050565b6000614008602c836147fb565b915061401382614e30565b604082019050919050565b600061402b601d836147fb565b915061403682614e7f565b602082019050919050565b600061404e6038836147fb565b915061405982614ea8565b604082019050919050565b6000614071602a836147fb565b915061407c82614ef7565b604082019050919050565b60006140946029836147fb565b915061409f82614f46565b604082019050919050565b60006140b76019836147fb565b91506140c282614f95565b602082019050919050565b60006140da6020836147fb565b91506140e582614fbe565b602082019050919050565b60006140fd602c836147fb565b915061410882614fe7565b604082019050919050565b60006141206020836147fb565b915061412b82615036565b602082019050919050565b60006141436029836147fb565b915061414e8261505f565b604082019050919050565b6000614166602f836147fb565b9150614171826150ae565b604082019050919050565b60006141896012836147fb565b9150614194826150fd565b602082019050919050565b60006141ac6021836147fb565b91506141b782615126565b604082019050919050565b60006141cf6020836147fb565b91506141da82615175565b602082019050919050565b60006141f26031836147fb565b91506141fd8261519e565b604082019050919050565b6000614215602c836147fb565b9150614220826151ed565b604082019050919050565b60006142386015836147fb565b91506142438261523c565b602082019050919050565b600061425b6014836147fb565b915061426682615265565b602082019050919050565b61427a81614996565b82525050565b61428981614996565b82525050565b600061429b8285613e6c565b91506142a78284613e6c565b91508190509392505050565b60006020820190506142c86000830184613d7e565b92915050565b60006080820190506142e36000830187613d7e565b6142f06020830186613d7e565b6142fd6040830185614280565b818103606083015261430f8184613dfa565b905095945050505050565b600060208201905081810360008301526143348184613d8d565b905092915050565b60006020820190506143516000830184613deb565b92915050565b600060208201905081810360008301526143718184613e33565b905092915050565b6000602082019050818103600083015261439281613e9d565b9050919050565b600060208201905081810360008301526143b281613ec0565b9050919050565b600060208201905081810360008301526143d281613ee3565b9050919050565b600060208201905081810360008301526143f281613f06565b9050919050565b6000602082019050818103600083015261441281613f29565b9050919050565b6000602082019050818103600083015261443281613f4c565b9050919050565b6000602082019050818103600083015261445281613f6f565b9050919050565b6000602082019050818103600083015261447281613f92565b9050919050565b6000602082019050818103600083015261449281613fb5565b9050919050565b600060208201905081810360008301526144b281613fd8565b9050919050565b600060208201905081810360008301526144d281613ffb565b9050919050565b600060208201905081810360008301526144f28161401e565b9050919050565b6000602082019050818103600083015261451281614041565b9050919050565b6000602082019050818103600083015261453281614064565b9050919050565b6000602082019050818103600083015261455281614087565b9050919050565b60006020820190508181036000830152614572816140aa565b9050919050565b60006020820190508181036000830152614592816140cd565b9050919050565b600060208201905081810360008301526145b2816140f0565b9050919050565b600060208201905081810360008301526145d281614113565b9050919050565b600060208201905081810360008301526145f281614136565b9050919050565b6000602082019050818103600083015261461281614159565b9050919050565b600060208201905081810360008301526146328161417c565b9050919050565b600060208201905081810360008301526146528161419f565b9050919050565b60006020820190508181036000830152614672816141c2565b9050919050565b60006020820190508181036000830152614692816141e5565b9050919050565b600060208201905081810360008301526146b281614208565b9050919050565b600060208201905081810360008301526146d28161422b565b9050919050565b600060208201905081810360008301526146f28161424e565b9050919050565b600060208201905061470e6000830184614280565b92915050565b600061471e61472f565b905061472a8282614a14565b919050565b6000604051905090565b600067ffffffffffffffff82111561475457614753614baa565b5b61475d82614bed565b9050602081019050919050565b600067ffffffffffffffff82111561478557614784614baa565b5b61478e82614bed565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061482282614996565b915061482d83614996565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561486257614861614abf565b5b828201905092915050565b600061487882614996565b915061488383614996565b92508261489357614892614aee565b5b828204905092915050565b60006148a982614996565b91506148b483614996565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148ed576148ec614abf565b5b828202905092915050565b600061490382614996565b915061490e83614996565b92508282101561492157614920614abf565b5b828203905092915050565b600061493782614976565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156149cd5780820151818401526020810190506149b2565b838111156149dc576000848401525b50505050565b600060028204905060018216806149fa57607f821691505b60208210811415614a0e57614a0d614b1d565b5b50919050565b614a1d82614bed565b810181811067ffffffffffffffff82111715614a3c57614a3b614baa565b5b80604052505050565b6000614a5082614996565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a8357614a82614abf565b5b600182019050919050565b6000614a9982614996565b9150614aa483614996565b925082614ab457614ab3614aee565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f50726573616c652068617320656e646564000000000000000000000000000000600082015250565b7f50726573616c6520686173206e6f742073746172746564000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f53616c652068617320656e646564000000000000000000000000000000000000600082015250565b7f4e6f7420656e6f7567682072657365727665206c65667420666f72207465616d600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5374617274696e6720696e64657820697320616c726561647920736574000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45786365656473204d41585f4d494e545f5045525f43414c4c00000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f45786365656473204d41585f535550504c590000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f5374617274696e6720696e64657820626c6f636b206d75737420626520736574600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f496e636f72726563742065746865722076616c75650000000000000000000000600082015250565b7f53616c6520686173206e6f742073746172746564000000000000000000000000600082015250565b6152978161492c565b81146152a257600080fd5b50565b6152ae8161493e565b81146152b957600080fd5b50565b6152c58161494a565b81146152d057600080fd5b50565b6152dc81614996565b81146152e757600080fd5b5056fea2646970667358221220293eebb75593156c8115ee9b1af8136bbcf4acf87da12bde46c1612e831ace4864736f6c6343000806003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102ae5760003560e01c80636aac741011610175578063ade395f9116100dc578063e36d649811610095578063e98665501161006f578063e986655014610a22578063efbc85a014610a39578063f032554914610a50578063f2fde38b14610a67576102ae565b8063e36d6498146109b0578063e6b922e8146109db578063e985e9c5146109e5576102ae565b8063ade395f9146108af578063b88d4fde146108da578063c87b56dd14610903578063c887a25714610940578063cb774d4714610969578063da9426a114610994576102ae565b80637dc29f6a1161012e5780637dc29f6a146107ac5780638462151c146107d75780638da5cb5b1461081457806395d89b411461083f578063a0712d681461086a578063a22cb46514610886576102ae565b80636aac7410146106cf5780636b8dc355146106eb57806370a0823114610716578063714c539814610753578063715018a61461077e5780637d17fcbe14610795576102ae565b806323b872dd116102195780634f6ccce7116101d25780634f6ccce7146105ab57806355f804b3146105e85780635d1fbfc4146106115780636352211e1461063c578063676dd563146106795780636a5928f5146106a4576102ae565b806323b872dd146104c35780632f745c59146104ec57806332cb6b0c1461052957806334918dfd146105545780633ccfd60b1461056b57806342842e0e14610582576102ae565b806312cd1ef41161026b57806312cd1ef4146103c157806318160ddd146103ec57806318649f2614610417578063195bcd00146104425780631bb6fd841461046d5780631c8b232d14610498576102ae565b806301ffc9a7146102b357806306fdde03146102f0578063081812fc1461031b578063095ea7b3146103585780630ceccdc9146103815780631096952314610398575b600080fd5b3480156102bf57600080fd5b506102da60048036038101906102d59190613c96565b610a90565b6040516102e7919061433c565b60405180910390f35b3480156102fc57600080fd5b50610305610aa2565b6040516103129190614357565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d9190613d39565b610b34565b60405161034f91906142b3565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a9190613c56565b610bb9565b005b34801561038d57600080fd5b50610396610cd1565b005b3480156103a457600080fd5b506103bf60048036038101906103ba9190613cf0565b610d79565b005b3480156103cd57600080fd5b506103d6610e0f565b6040516103e39190614357565b60405180910390f35b3480156103f857600080fd5b50610401610e9d565b60405161040e91906146f9565b60405180910390f35b34801561042357600080fd5b5061042c610eaa565b60405161043991906146f9565b60405180910390f35b34801561044e57600080fd5b50610457610eaf565b60405161046491906146f9565b60405180910390f35b34801561047957600080fd5b50610482610eb4565b60405161048f919061433c565b60405180910390f35b3480156104a457600080fd5b506104ad610ec7565b6040516104ba919061433c565b60405180910390f35b3480156104cf57600080fd5b506104ea60048036038101906104e59190613b40565b610eda565b005b3480156104f857600080fd5b50610513600480360381019061050e9190613c56565b610f3a565b60405161052091906146f9565b60405180910390f35b34801561053557600080fd5b5061053e610fdf565b60405161054b91906146f9565b60405180910390f35b34801561056057600080fd5b50610569610fe5565b005b34801561057757600080fd5b5061058061108d565b005b34801561058e57600080fd5b506105a960048036038101906105a49190613b40565b6111d7565b005b3480156105b757600080fd5b506105d260048036038101906105cd9190613d39565b6111f7565b6040516105df91906146f9565b60405180910390f35b3480156105f457600080fd5b5061060f600480360381019061060a9190613cf0565b611268565b005b34801561061d57600080fd5b506106266112fe565b604051610633919061433c565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e9190613d39565b611311565b60405161067091906142b3565b60405180910390f35b34801561068557600080fd5b5061068e6113c3565b60405161069b91906146f9565b60405180910390f35b3480156106b057600080fd5b506106b96113ce565b6040516106c6919061433c565b60405180910390f35b6106e960048036038101906106e49190613d39565b6113e1565b005b3480156106f757600080fd5b506107006115f0565b60405161070d91906146f9565b60405180910390f35b34801561072257600080fd5b5061073d60048036038101906107389190613ad3565b6115f5565b60405161074a91906146f9565b60405180910390f35b34801561075f57600080fd5b506107686116ad565b6040516107759190614357565b60405180910390f35b34801561078a57600080fd5b5061079361173f565b005b3480156107a157600080fd5b506107aa6117c7565b005b3480156107b857600080fd5b506107c1611891565b6040516107ce91906146f9565b60405180910390f35b3480156107e357600080fd5b506107fe60048036038101906107f99190613ad3565b61189d565b60405161080b919061431a565b60405180910390f35b34801561082057600080fd5b506108296119a7565b60405161083691906142b3565b60405180910390f35b34801561084b57600080fd5b506108546119d1565b6040516108619190614357565b60405180910390f35b610884600480360381019061087f9190613d39565b611a63565b005b34801561089257600080fd5b506108ad60048036038101906108a89190613c16565b611c59565b005b3480156108bb57600080fd5b506108c4611dda565b6040516108d191906146f9565b60405180910390f35b3480156108e657600080fd5b5061090160048036038101906108fc9190613b93565b611de6565b005b34801561090f57600080fd5b5061092a60048036038101906109259190613d39565b611e48565b6040516109379190614357565b60405180910390f35b34801561094c57600080fd5b5061096760048036038101906109629190613c56565b611e5a565b005b34801561097557600080fd5b5061097e611fc1565b60405161098b91906146f9565b60405180910390f35b6109ae60048036038101906109a99190613d39565b611fc7565b005b3480156109bc57600080fd5b506109c56121d6565b6040516109d291906146f9565b60405180910390f35b6109e36121dc565b005b3480156109f157600080fd5b50610a0c6004803603810190610a079190613b00565b6122ff565b604051610a19919061433c565b60405180910390f35b348015610a2e57600080fd5b50610a37612393565b005b348015610a4557600080fd5b50610a4e612496565b005b348015610a5c57600080fd5b50610a6561253e565b005b348015610a7357600080fd5b50610a8e6004803603810190610a899190613ad3565b6125e6565b005b6000610a9b826126de565b9050919050565b606060008054610ab1906149e2565b80601f0160208091040260200160405190810160405280929190818152602001828054610add906149e2565b8015610b2a5780601f10610aff57610100808354040283529160200191610b2a565b820191906000526020600020905b815481529060010190602001808311610b0d57829003601f168201915b5050505050905090565b6000610b3f82612758565b610b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7590614599565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bc482611311565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2c90614639565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c546127c4565b73ffffffffffffffffffffffffffffffffffffffff161480610c835750610c8281610c7d6127c4565b6122ff565b5b610cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb9906144f9565b60405180910390fd5b610ccc83836127cc565b505050565b610cd96127c4565b73ffffffffffffffffffffffffffffffffffffffff16610cf76119a7565b73ffffffffffffffffffffffffffffffffffffffff1614610d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d44906145b9565b60405180910390fd5b601060169054906101000a900460ff1615601060166101000a81548160ff021916908315150217905550565b610d816127c4565b73ffffffffffffffffffffffffffffffffffffffff16610d9f6119a7565b73ffffffffffffffffffffffffffffffffffffffff1614610df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dec906145b9565b60405180910390fd5b80600b9080519060200190610e0b9291906138e7565b5050565b600b8054610e1c906149e2565b80601f0160208091040260200160405190810160405280929190818152602001828054610e48906149e2565b8015610e955780601f10610e6a57610100808354040283529160200191610e95565b820191906000526020600020905b815481529060010190602001808311610e7857829003601f168201915b505050505081565b6000600880549050905090565b600a81565b600a81565b601060169054906101000a900460ff1681565b601060149054906101000a900460ff1681565b610eeb610ee56127c4565b82612885565b610f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2190614679565b60405180910390fd5b610f35838383612963565b505050565b6000610f45836115f5565b8210610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d906143b9565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61271081565b610fed6127c4565b73ffffffffffffffffffffffffffffffffffffffff1661100b6119a7565b73ffffffffffffffffffffffffffffffffffffffff1614611061576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611058906145b9565b60405180910390fd5b601060149054906101000a900460ff1615601060146101000a81548160ff021916908315150217905550565b6110956127c4565b73ffffffffffffffffffffffffffffffffffffffff166110b36119a7565b73ffffffffffffffffffffffffffffffffffffffff1614611109576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611100906145b9565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600547611152919061486d565b9081150290604051600060405180830381858888f1935050505061117557600080fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050506111d557600080fd5b565b6111f283838360405180602001604052806000815250611de6565b505050565b6000611201610e9d565b8210611242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123990614699565b60405180910390fd5b6008828154811061125657611255614b7b565b5b90600052602060002001549050919050565b6112706127c4565b73ffffffffffffffffffffffffffffffffffffffff1661128e6119a7565b73ffffffffffffffffffffffffffffffffffffffff16146112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db906145b9565b60405180910390fd5b80600c90805190602001906112fa9291906138e7565b5050565b601060159054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b190614539565b60405180910390fd5b80915050919050565b66b1a2bc2ec5000081565b601060179054906101000a900460ff1681565b601060169054906101000a900460ff16611430576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611427906146d9565b60405180910390fd5b611438610e9d565b6127101161147b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147290614439565b60405180910390fd5b60008111801561148c575060018111155b6114cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c290614559565b60405180910390fd5b600a816114d8919061489e565b6114e0610e9d565b6114ea9190614817565b612710101561152e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152590614619565b60405180910390fd5b8067058d15e176280000611542919061489e565b341015611584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157b906146b9565b60405180910390fd5b60005b600a82611594919061489e565b8110156115c55760006115a5610e9d565b90506115b13382612bbf565b5080806115bd90614a45565b915050611587565b506000600d541480156115e057506127106115de610e9d565b145b156115ed5743600d819055505b50565b606481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165d90614519565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600c80546116bc906149e2565b80601f01602080910402602001604051908101604052809291908181526020018280546116e8906149e2565b80156117355780601f1061170a57610100808354040283529160200191611735565b820191906000526020600020905b81548152906001019060200180831161171857829003601f168201915b5050505050905090565b6117476127c4565b73ffffffffffffffffffffffffffffffffffffffff166117656119a7565b73ffffffffffffffffffffffffffffffffffffffff16146117bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b2906145b9565b60405180910390fd5b6117c56000612bdd565b565b6117cf6127c4565b73ffffffffffffffffffffffffffffffffffffffff166117ed6119a7565b73ffffffffffffffffffffffffffffffffffffffff1614611843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183a906145b9565b60405180910390fd5b6000600e5414611888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187f906144d9565b60405180910390fd5b43600d81905550565b67030d98d59a96000081565b606060006118aa836115f5565b9050600081141561190757600067ffffffffffffffff8111156118d0576118cf614baa565b5b6040519080825280602002602001820160405280156118fe5781602001602082028036833780820191505090505b509150506119a2565b60008167ffffffffffffffff81111561192357611922614baa565b5b6040519080825280602002602001820160405280156119515781602001602082028036833780820191505090505b50905060005b8281101561199b576119698582610f3a565b82828151811061197c5761197b614b7b565b5b602002602001018181525050808061199390614a45565b915050611957565b8193505050505b919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546119e0906149e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611a0c906149e2565b8015611a595780601f10611a2e57610100808354040283529160200191611a59565b820191906000526020600020905b815481529060010190602001808311611a3c57829003601f168201915b5050505050905090565b601060149054906101000a900460ff16611ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa9906146d9565b60405180910390fd5b611aba610e9d565b61271011611afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af490614439565b60405180910390fd5b600081118015611b0e575060018111155b611b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4490614559565b60405180910390fd5b80611b56610e9d565b611b609190614817565b6127101015611ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9b90614619565b60405180910390fd5b8066b1a2bc2ec50000611bb7919061489e565b341015611bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf0906146b9565b60405180910390fd5b60005b81811015611c2e576000611c0e610e9d565b9050611c1a3382612bbf565b508080611c2690614a45565b915050611bfc565b506000600d54148015611c495750612710611c47610e9d565b145b15611c565743600d819055505b50565b611c616127c4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc690614499565b60405180910390fd5b8060056000611cdc6127c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611d896127c4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611dce919061433c565b60405180910390a35050565b67058d15e17628000081565b611df7611df16127c4565b83612885565b611e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2d90614679565b60405180910390fd5b611e4284848484612ca3565b50505050565b6060611e5382612cff565b9050919050565b611e626127c4565b73ffffffffffffffffffffffffffffffffffffffff16611e806119a7565b73ffffffffffffffffffffffffffffffffffffffff1614611ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecd906145b9565b60405180910390fd5b6000611ee0610e9d565b9050600082118015611ef35750600a8211155b611f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2990614459565b60405180910390fd5b81611f3b610e9d565b611f459190614817565b600a1015611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f90614459565b60405180910390fd5b60005b82811015611fbb57611fa8848284611fa39190614817565b612bbf565b8080611fb390614a45565b915050611f8b565b50505050565b600e5481565b601060159054906101000a900460ff16612016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200d906146d9565b60405180910390fd5b61201e610e9d565b61271011612061576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205890614439565b60405180910390fd5b600081118015612072575060018111155b6120b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a890614559565b60405180910390fd5b6005816120be919061489e565b6120c6610e9d565b6120d09190614817565b6127101015612114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210b90614619565b60405180910390fd5b8067030d98d59a960000612128919061489e565b34101561216a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612161906146b9565b60405180910390fd5b60005b60058261217a919061489e565b8110156121ab57600061218b610e9d565b90506121973382612bbf565b5080806121a390614a45565b91505061216d565b506000600d541480156121c657506127106121c4610e9d565b145b156121d35743600d819055505b50565b600d5481565b601060179054906101000a900460ff1661222b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222290614399565b60405180910390fd5b66b1a2bc2ec50000341015612275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226c906146b9565b60405180910390fd5b606461227f610e9d565b106122bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b690614379565b60405180910390fd5b60006122c9610e9d565b90506122d53382612bbf565b6000600d541480156122ef57506127106122ed610e9d565b145b156122fc5743600d819055505b50565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000600e54146123d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cf906144d9565b60405180910390fd5b6000600d54141561241e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241590614659565b60405180910390fd5b612710600d544060001c6124329190614a8e565b600e8190555060ff600d544361244891906148f8565b11156124735761271060014361245e91906148f8565b4060001c61246c9190614a8e565b600e819055505b6000600e541415612494576001600e5461248d9190614817565b600e819055505b565b61249e6127c4565b73ffffffffffffffffffffffffffffffffffffffff166124bc6119a7565b73ffffffffffffffffffffffffffffffffffffffff1614612512576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612509906145b9565b60405180910390fd5b601060159054906101000a900460ff1615601060156101000a81548160ff021916908315150217905550565b6125466127c4565b73ffffffffffffffffffffffffffffffffffffffff166125646119a7565b73ffffffffffffffffffffffffffffffffffffffff16146125ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b1906145b9565b60405180910390fd5b601060179054906101000a900460ff1615601060176101000a81548160ff021916908315150217905550565b6125ee6127c4565b73ffffffffffffffffffffffffffffffffffffffff1661260c6119a7565b73ffffffffffffffffffffffffffffffffffffffff1614612662576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612659906145b9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c9906143f9565b60405180910390fd5b6126db81612bdd565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612751575061275082612da6565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661283f83611311565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061289082612758565b6128cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c6906144b9565b60405180910390fd5b60006128da83611311565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061294957508373ffffffffffffffffffffffffffffffffffffffff1661293184610b34565b73ffffffffffffffffffffffffffffffffffffffff16145b8061295a575061295981856122ff565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661298382611311565b73ffffffffffffffffffffffffffffffffffffffff16146129d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d0906145d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4090614479565b60405180910390fd5b612a54838383612e88565b612a5f6000826127cc565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612aaf91906148f8565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b069190614817565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612bd9828260405180602001604052806000815250612e98565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612cae848484612963565b612cba84848484612ef3565b612cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf0906143d9565b60405180910390fd5b50505050565b6060612d0a82612758565b612d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d40906145f9565b60405180910390fd5b6000612d5361308a565b90506000815111612d735760405180602001604052806000815250612d9e565b80612d7d8461311c565b604051602001612d8e92919061428f565b6040516020818303038152906040525b915050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612e7157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612e815750612e808261327d565b5b9050919050565b612e938383836132e7565b505050565b612ea283836133fb565b612eaf6000848484612ef3565b612eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee5906143d9565b60405180910390fd5b505050565b6000612f148473ffffffffffffffffffffffffffffffffffffffff166135c9565b1561307d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f3d6127c4565b8786866040518563ffffffff1660e01b8152600401612f5f94939291906142ce565b602060405180830381600087803b158015612f7957600080fd5b505af1925050508015612faa57506040513d601f19601f82011682018060405250810190612fa79190613cc3565b60015b61302d573d8060008114612fda576040519150601f19603f3d011682016040523d82523d6000602084013e612fdf565b606091505b50600081511415613025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301c906143d9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613082565b600190505b949350505050565b6060600c8054613099906149e2565b80601f01602080910402602001604051908101604052809291908181526020018280546130c5906149e2565b80156131125780601f106130e757610100808354040283529160200191613112565b820191906000526020600020905b8154815290600101906020018083116130f557829003601f168201915b5050505050905090565b60606000821415613164576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613278565b600082905060005b6000821461319657808061317f90614a45565b915050600a8261318f919061486d565b915061316c565b60008167ffffffffffffffff8111156131b2576131b1614baa565b5b6040519080825280601f01601f1916602001820160405280156131e45781602001600182028036833780820191505090505b5090505b60008514613271576001826131fd91906148f8565b9150600a8561320c9190614a8e565b60306132189190614817565b60f81b81838151811061322e5761322d614b7b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561326a919061486d565b94506131e8565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6132f28383836135dc565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561333557613330816135e1565b613374565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461337357613372838261362a565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133b7576133b281613797565b6133f6565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146133f5576133f48282613868565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561346b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346290614579565b60405180910390fd5b61347481612758565b156134b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ab90614419565b60405180910390fd5b6134c060008383612e88565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135109190614817565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613637846115f5565b61364191906148f8565b9050600060076000848152602001908152602001600020549050818114613726576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506137ab91906148f8565b90506000600960008481526020019081526020016000205490506000600883815481106137db576137da614b7b565b5b9060005260206000200154905080600883815481106137fd576137fc614b7b565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061384c5761384b614b4c565b5b6001900381819060005260206000200160009055905550505050565b6000613873836115f5565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546138f3906149e2565b90600052602060002090601f016020900481019282613915576000855561395c565b82601f1061392e57805160ff191683800117855561395c565b8280016001018555821561395c579182015b8281111561395b578251825591602001919060010190613940565b5b509050613969919061396d565b5090565b5b8082111561398657600081600090555060010161396e565b5090565b600061399d61399884614739565b614714565b9050828152602081018484840111156139b9576139b8614bde565b5b6139c48482856149a0565b509392505050565b60006139df6139da8461476a565b614714565b9050828152602081018484840111156139fb576139fa614bde565b5b613a068482856149a0565b509392505050565b600081359050613a1d8161528e565b92915050565b600081359050613a32816152a5565b92915050565b600081359050613a47816152bc565b92915050565b600081519050613a5c816152bc565b92915050565b600082601f830112613a7757613a76614bd9565b5b8135613a8784826020860161398a565b91505092915050565b600082601f830112613aa557613aa4614bd9565b5b8135613ab58482602086016139cc565b91505092915050565b600081359050613acd816152d3565b92915050565b600060208284031215613ae957613ae8614be8565b5b6000613af784828501613a0e565b91505092915050565b60008060408385031215613b1757613b16614be8565b5b6000613b2585828601613a0e565b9250506020613b3685828601613a0e565b9150509250929050565b600080600060608486031215613b5957613b58614be8565b5b6000613b6786828701613a0e565b9350506020613b7886828701613a0e565b9250506040613b8986828701613abe565b9150509250925092565b60008060008060808587031215613bad57613bac614be8565b5b6000613bbb87828801613a0e565b9450506020613bcc87828801613a0e565b9350506040613bdd87828801613abe565b925050606085013567ffffffffffffffff811115613bfe57613bfd614be3565b5b613c0a87828801613a62565b91505092959194509250565b60008060408385031215613c2d57613c2c614be8565b5b6000613c3b85828601613a0e565b9250506020613c4c85828601613a23565b9150509250929050565b60008060408385031215613c6d57613c6c614be8565b5b6000613c7b85828601613a0e565b9250506020613c8c85828601613abe565b9150509250929050565b600060208284031215613cac57613cab614be8565b5b6000613cba84828501613a38565b91505092915050565b600060208284031215613cd957613cd8614be8565b5b6000613ce784828501613a4d565b91505092915050565b600060208284031215613d0657613d05614be8565b5b600082013567ffffffffffffffff811115613d2457613d23614be3565b5b613d3084828501613a90565b91505092915050565b600060208284031215613d4f57613d4e614be8565b5b6000613d5d84828501613abe565b91505092915050565b6000613d728383614271565b60208301905092915050565b613d878161492c565b82525050565b6000613d98826147ab565b613da281856147d9565b9350613dad8361479b565b8060005b83811015613dde578151613dc58882613d66565b9750613dd0836147cc565b925050600181019050613db1565b5085935050505092915050565b613df48161493e565b82525050565b6000613e05826147b6565b613e0f81856147ea565b9350613e1f8185602086016149af565b613e2881614bed565b840191505092915050565b6000613e3e826147c1565b613e4881856147fb565b9350613e588185602086016149af565b613e6181614bed565b840191505092915050565b6000613e77826147c1565b613e81818561480c565b9350613e918185602086016149af565b80840191505092915050565b6000613eaa6011836147fb565b9150613eb582614bfe565b602082019050919050565b6000613ecd6017836147fb565b9150613ed882614c27565b602082019050919050565b6000613ef0602b836147fb565b9150613efb82614c50565b604082019050919050565b6000613f136032836147fb565b9150613f1e82614c9f565b604082019050919050565b6000613f366026836147fb565b9150613f4182614cee565b604082019050919050565b6000613f59601c836147fb565b9150613f6482614d3d565b602082019050919050565b6000613f7c600e836147fb565b9150613f8782614d66565b602082019050919050565b6000613f9f6020836147fb565b9150613faa82614d8f565b602082019050919050565b6000613fc26024836147fb565b9150613fcd82614db8565b604082019050919050565b6000613fe56019836147fb565b9150613ff082614e07565b602082019050919050565b6000614008602c836147fb565b915061401382614e30565b604082019050919050565b600061402b601d836147fb565b915061403682614e7f565b602082019050919050565b600061404e6038836147fb565b915061405982614ea8565b604082019050919050565b6000614071602a836147fb565b915061407c82614ef7565b604082019050919050565b60006140946029836147fb565b915061409f82614f46565b604082019050919050565b60006140b76019836147fb565b91506140c282614f95565b602082019050919050565b60006140da6020836147fb565b91506140e582614fbe565b602082019050919050565b60006140fd602c836147fb565b915061410882614fe7565b604082019050919050565b60006141206020836147fb565b915061412b82615036565b602082019050919050565b60006141436029836147fb565b915061414e8261505f565b604082019050919050565b6000614166602f836147fb565b9150614171826150ae565b604082019050919050565b60006141896012836147fb565b9150614194826150fd565b602082019050919050565b60006141ac6021836147fb565b91506141b782615126565b604082019050919050565b60006141cf6020836147fb565b91506141da82615175565b602082019050919050565b60006141f26031836147fb565b91506141fd8261519e565b604082019050919050565b6000614215602c836147fb565b9150614220826151ed565b604082019050919050565b60006142386015836147fb565b91506142438261523c565b602082019050919050565b600061425b6014836147fb565b915061426682615265565b602082019050919050565b61427a81614996565b82525050565b61428981614996565b82525050565b600061429b8285613e6c565b91506142a78284613e6c565b91508190509392505050565b60006020820190506142c86000830184613d7e565b92915050565b60006080820190506142e36000830187613d7e565b6142f06020830186613d7e565b6142fd6040830185614280565b818103606083015261430f8184613dfa565b905095945050505050565b600060208201905081810360008301526143348184613d8d565b905092915050565b60006020820190506143516000830184613deb565b92915050565b600060208201905081810360008301526143718184613e33565b905092915050565b6000602082019050818103600083015261439281613e9d565b9050919050565b600060208201905081810360008301526143b281613ec0565b9050919050565b600060208201905081810360008301526143d281613ee3565b9050919050565b600060208201905081810360008301526143f281613f06565b9050919050565b6000602082019050818103600083015261441281613f29565b9050919050565b6000602082019050818103600083015261443281613f4c565b9050919050565b6000602082019050818103600083015261445281613f6f565b9050919050565b6000602082019050818103600083015261447281613f92565b9050919050565b6000602082019050818103600083015261449281613fb5565b9050919050565b600060208201905081810360008301526144b281613fd8565b9050919050565b600060208201905081810360008301526144d281613ffb565b9050919050565b600060208201905081810360008301526144f28161401e565b9050919050565b6000602082019050818103600083015261451281614041565b9050919050565b6000602082019050818103600083015261453281614064565b9050919050565b6000602082019050818103600083015261455281614087565b9050919050565b60006020820190508181036000830152614572816140aa565b9050919050565b60006020820190508181036000830152614592816140cd565b9050919050565b600060208201905081810360008301526145b2816140f0565b9050919050565b600060208201905081810360008301526145d281614113565b9050919050565b600060208201905081810360008301526145f281614136565b9050919050565b6000602082019050818103600083015261461281614159565b9050919050565b600060208201905081810360008301526146328161417c565b9050919050565b600060208201905081810360008301526146528161419f565b9050919050565b60006020820190508181036000830152614672816141c2565b9050919050565b60006020820190508181036000830152614692816141e5565b9050919050565b600060208201905081810360008301526146b281614208565b9050919050565b600060208201905081810360008301526146d28161422b565b9050919050565b600060208201905081810360008301526146f28161424e565b9050919050565b600060208201905061470e6000830184614280565b92915050565b600061471e61472f565b905061472a8282614a14565b919050565b6000604051905090565b600067ffffffffffffffff82111561475457614753614baa565b5b61475d82614bed565b9050602081019050919050565b600067ffffffffffffffff82111561478557614784614baa565b5b61478e82614bed565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061482282614996565b915061482d83614996565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561486257614861614abf565b5b828201905092915050565b600061487882614996565b915061488383614996565b92508261489357614892614aee565b5b828204905092915050565b60006148a982614996565b91506148b483614996565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148ed576148ec614abf565b5b828202905092915050565b600061490382614996565b915061490e83614996565b92508282101561492157614920614abf565b5b828203905092915050565b600061493782614976565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156149cd5780820151818401526020810190506149b2565b838111156149dc576000848401525b50505050565b600060028204905060018216806149fa57607f821691505b60208210811415614a0e57614a0d614b1d565b5b50919050565b614a1d82614bed565b810181811067ffffffffffffffff82111715614a3c57614a3b614baa565b5b80604052505050565b6000614a5082614996565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a8357614a82614abf565b5b600182019050919050565b6000614a9982614996565b9150614aa483614996565b925082614ab457614ab3614aee565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f50726573616c652068617320656e646564000000000000000000000000000000600082015250565b7f50726573616c6520686173206e6f742073746172746564000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f53616c652068617320656e646564000000000000000000000000000000000000600082015250565b7f4e6f7420656e6f7567682072657365727665206c65667420666f72207465616d600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5374617274696e6720696e64657820697320616c726561647920736574000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45786365656473204d41585f4d494e545f5045525f43414c4c00000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f45786365656473204d41585f535550504c590000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f5374617274696e6720696e64657820626c6f636b206d75737420626520736574600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f496e636f72726563742065746865722076616c75650000000000000000000000600082015250565b7f53616c6520686173206e6f742073746172746564000000000000000000000000600082015250565b6152978161492c565b81146152a257600080fd5b50565b6152ae8161493e565b81146152b957600080fd5b50565b6152c58161494a565b81146152d057600080fd5b50565b6152dc81614996565b81146152e757600080fd5b5056fea2646970667358221220293eebb75593156c8115ee9b1af8136bbcf4acf87da12bde46c1612e831ace4864736f6c63430008060033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string):

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

43037:7838:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49756:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13729:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15288:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14811:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48923:93;;;;;;;;;;;;;:::i;:::-;;50754:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43119:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26440:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43435:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43477:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43881;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43802:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16178:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26108:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43391:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48730:87;;;;;;;;;;;;;:::i;:::-;;49126:177;;;;;;;;;;;;;:::i;:::-;;16588:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26630:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44304:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43841:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13423:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43180:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43987:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47378:892;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44029:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13153:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44404:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2514:94;;;;;;;;;;;;;:::i;:::-;;50576:172;;;;;;;;;;;;;:::i;:::-;;43249:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44504:472;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1863:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13898:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45626:855;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15581:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43320:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16844:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49598:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48278:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43607:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46489:881;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43569:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44982:638;;;:::i;:::-;;15947:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49950:620;;;;;;;;;;;;;:::i;:::-;;48825:90;;;;;;;;;;;;;:::i;:::-;;49022:96;;;;;;;;;;;;;:::i;:::-;;2763:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49756:188;49879:4;49902:36;49926:11;49902:23;:36::i;:::-;49895:43;;49756:188;;;:::o;13729:100::-;13783:13;13816:5;13809:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13729:100;:::o;15288:221::-;15364:7;15392:16;15400:7;15392;:16::i;:::-;15384:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;15477:15;:24;15493:7;15477:24;;;;;;;;;;;;;;;;;;;;;15470:31;;15288:221;;;:::o;14811:411::-;14892:13;14908:23;14923:7;14908:14;:23::i;:::-;14892:39;;14956:5;14950:11;;:2;:11;;;;14942:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;15050:5;15034:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;15059:37;15076:5;15083:12;:10;:12::i;:::-;15059:16;:37::i;:::-;15034:62;15012:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;15193:21;15202:2;15206:7;15193:8;:21::i;:::-;14881:341;14811:411;;:::o;48923:93::-;2094:12;:10;:12::i;:::-;2083:23;;:7;:5;:7::i;:::-;:23;;;2075:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48994:16:::1;;;;;;;;;;;48993:17;48974:16;;:36;;;;;;;;;;;;;;;;;;48923:93::o:0;50754:118::-;2094:12;:10;:12::i;:::-;2083:23;;:7;:5;:7::i;:::-;:23;;;2075:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50852:14:::1;50835;:31;;;;;;;;;;;;:::i;:::-;;50754:118:::0;:::o;43119:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26440:113::-;26501:7;26528:10;:17;;;;26521:24;;26440:113;:::o;43435:37::-;43470:2;43435:37;:::o;43477:36::-;43511:2;43477:36;:::o;43881:::-;;;;;;;;;;;;;:::o;43802:34::-;;;;;;;;;;;;;:::o;16178:339::-;16373:41;16392:12;:10;:12::i;:::-;16406:7;16373:18;:41::i;:::-;16365:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;16481:28;16491:4;16497:2;16501:7;16481:9;:28::i;:::-;16178:339;;;:::o;26108:256::-;26205:7;26241:23;26258:5;26241:16;:23::i;:::-;26233:5;:31;26225:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;26330:12;:19;26343:5;26330:19;;;;;;;;;;;;;;;:26;26350:5;26330:26;;;;;;;;;;;;26323:33;;26108:256;;;;:::o;43391:39::-;43425:5;43391:39;:::o;48730:87::-;2094:12;:10;:12::i;:::-;2083:23;;:7;:5;:7::i;:::-;:23;;;2075:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48797:14:::1;;;;;;;;;;;48796:15;48779:14;;:32;;;;;;;;;;;;;;;;;;48730:87::o:0;49126:177::-;2094:12;:10;:12::i;:::-;2083:23;;:7;:5;:7::i;:::-;:23;;;2075:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49186:7:::1;;;;;;;;;;;49178:21;;:48;49223:1;49200:21;:24;;;;:::i;:::-;49178:48;;;;;;;;;;;;;;;;;;;;;;;49170:57;;;::::0;::::1;;49250:7;;;;;;;;;;;49242:21;;:44;49264:21;49242:44;;;;;;;;;;;;;;;;;;;;;;;49234:53;;;::::0;::::1;;49126:177::o:0;16588:185::-;16726:39;16743:4;16749:2;16753:7;16726:39;;;;;;;;;;;;:16;:39::i;:::-;16588:185;;;:::o;26630:233::-;26705:7;26741:30;:28;:30::i;:::-;26733:5;:38;26725:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;26838:10;26849:5;26838:17;;;;;;;;:::i;:::-;;;;;;;;;;26831:24;;26630:233;;;:::o;44304:96::-;2094:12;:10;:12::i;:::-;2083:23;;:7;:5;:7::i;:::-;:23;;;2075:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44387:7:::1;44371:13;:23;;;;;;;;;;;;:::i;:::-;;44304:96:::0;:::o;43841:35::-;;;;;;;;;;;;;:::o;13423:239::-;13495:7;13515:13;13531:7;:16;13539:7;13531:16;;;;;;;;;;;;;;;;;;;;;13515:32;;13583:1;13566:19;;:5;:19;;;;13558:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13649:5;13642:12;;;13423:239;;;:::o;43180:53::-;43216:17;43180:53;:::o;43987:37::-;;;;;;;;;;;;;:::o;47378:892::-;47448:16;;;;;;;;;;;47440:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;47517:13;:11;:13::i;:::-;43425:5;47504:26;47496:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;47576:1;47564:9;:13;:47;;;;;43964:1;47581:9;:30;;47564:47;47556:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;47699:2;47687:9;:14;;;;:::i;:::-;47670:13;:11;:13::i;:::-;:32;;;;:::i;:::-;43425:5;47656:46;;47648:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;47767:9;43358:18;47753:23;;;;:::i;:::-;47740:9;:36;;47732:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;47816:6;47811:145;47845:2;47833:9;:14;;;;:::i;:::-;47828:1;:20;47811:145;;;47864:14;47881:13;:11;:13::i;:::-;47864:30;;47916:32;47926:10;47938:9;47916;:32::i;:::-;47855:101;47850:3;;;;;:::i;:::-;;;;47811:145;;;;48178:1;48156:18;;:23;:56;;;;;43425:5;48184:13;:11;:13::i;:::-;:27;48156:56;48152:112;;;48244:12;48223:18;:33;;;;48152:112;47378:892;:::o;44029:45::-;44071:3;44029:45;:::o;13153:208::-;13225:7;13270:1;13253:19;;:5;:19;;;;13245:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;13337:9;:16;13347:5;13337:16;;;;;;;;;;;;;;;;13330:23;;13153:208;;;:::o;44404:92::-;44448:13;44477;44470:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44404:92;:::o;2514:94::-;2094:12;:10;:12::i;:::-;2083:23;;:7;:5;:7::i;:::-;:23;;;2075:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2579:21:::1;2597:1;2579:9;:21::i;:::-;2514:94::o:0;50576:172::-;2094:12;:10;:12::i;:::-;2083:23;;:7;:5;:7::i;:::-;:23;;;2075:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50667:1:::1;50650:13;;:18;50642:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;50730:12;50709:18;:33;;;;50576:172::o:0;43249:55::-;43286:18;43249:55;:::o;44504:472::-;44565:16;44591:18;44612:17;44622:6;44612:9;:17::i;:::-;44591:38;;44654:1;44640:10;:15;44636:335;;;44719:1;44705:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44698:23;;;;;44636:335;44744:23;44784:10;44770:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44744:51;;44804:13;44826:116;44850:10;44842:5;:18;44826:116;;;44898:34;44918:6;44926:5;44898:19;:34::i;:::-;44882:6;44889:5;44882:13;;;;;;;;:::i;:::-;;;;;;;:50;;;;;44862:7;;;;;:::i;:::-;;;;44826:116;;;44957:6;44950:13;;;;;44504:472;;;;:::o;1863:87::-;1909:7;1936:6;;;;;;;;;;;1929:13;;1863:87;:::o;13898:104::-;13954:13;13987:7;13980:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13898:104;:::o;45626:855::-;45687:14;;;;;;;;;;;45679:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;45754:13;:11;:13::i;:::-;43425:5;45741:26;45733:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;45811:1;45801:7;:11;:43;;;;;43964:1;45816:7;:28;;45801:43;45793:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;45919:7;45903:13;:11;:13::i;:::-;:23;;;;:::i;:::-;43425:5;45889:37;;45881:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45989:7;43216:17;45977:19;;;;:::i;:::-;45964:9;:32;;45956:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;46036:6;46031:136;46052:7;46048:1;:11;46031:136;;;46075:14;46092:13;:11;:13::i;:::-;46075:30;;46127:32;46137:10;46149:9;46127;:32::i;:::-;46066:101;46061:3;;;;;:::i;:::-;;;;46031:136;;;;46389:1;46367:18;;:23;:56;;;;;43425:5;46395:13;:11;:13::i;:::-;:27;46367:56;46363:112;;;46455:12;46434:18;:33;;;;46363:112;45626:855;:::o;15581:295::-;15696:12;:10;:12::i;:::-;15684:24;;:8;:24;;;;15676:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;15796:8;15751:18;:32;15770:12;:10;:12::i;:::-;15751:32;;;;;;;;;;;;;;;:42;15784:8;15751:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;15849:8;15820:48;;15835:12;:10;:12::i;:::-;15820:48;;;15859:8;15820:48;;;;;;:::i;:::-;;;;;;;;15581:295;;:::o;43320:56::-;43358:18;43320:56;:::o;16844:328::-;17019:41;17038:12;:10;:12::i;:::-;17052:7;17019:18;:41::i;:::-;17011:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;17125:39;17139:4;17145:2;17149:7;17158:5;17125:13;:39::i;:::-;16844:328;;;;:::o;49598:154::-;49691:13;49723:23;49738:7;49723:14;:23::i;:::-;49716:30;;49598:154;;;:::o;48278:442::-;2094:12;:10;:12::i;:::-;2083:23;;:7;:5;:7::i;:::-;:23;;;2075:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48373:11:::1;48387:13;:11;:13::i;:::-;48373:27;;48436:1;48419:14;:18;:51;;;;;43470:2;48441:14;:29;;48419:51;48411:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;48556:14;48540:13;:11;:13::i;:::-;:30;;;;:::i;:::-;43511:2;48526:44;;48518:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;48623:6;48618:95;48639:14;48635:1;:18;48618:95;;;48675:26;48685:3;48699:1;48690:6;:10;;;;:::i;:::-;48675:9;:26::i;:::-;48655:3;;;;;:::i;:::-;;;;48618:95;;;;48354:366;48278:442:::0;;:::o;43607:28::-;;;;:::o;46489:881::-;46557:15;;;;;;;;;;;46549:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;46625:13;:11;:13::i;:::-;43425:5;46612:26;46604:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;46683:1;46672:8;:12;:45;;;;;43964:1;46688:8;:29;;46672:45;46664:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;46804:1;46793:8;:12;;;;:::i;:::-;46776:13;:11;:13::i;:::-;:30;;;;:::i;:::-;43425:5;46762:44;;46754:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;46870:8;43286:18;46857:21;;;;:::i;:::-;46844:9;:34;;46836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46918:6;46913:143;46946:1;46935:8;:12;;;;:::i;:::-;46930:1;:18;46913:143;;;46964:14;46981:13;:11;:13::i;:::-;46964:30;;47016:32;47026:10;47038:9;47016;:32::i;:::-;46955:101;46950:3;;;;;:::i;:::-;;;;46913:143;;;;47278:1;47256:18;;:23;:56;;;;;43425:5;47284:13;:11;:13::i;:::-;:27;47256:56;47252:112;;;47344:12;47323:18;:33;;;;47252:112;46489:881;:::o;43569:33::-;;;;:::o;44982:638::-;45035:17;;;;;;;;;;;45027:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;43216:17;45095:9;:22;;45087:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;44071:3;45158:13;:11;:13::i;:::-;:34;45150:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;45223:14;45240:13;:11;:13::i;:::-;45223:30;;45273:32;45283:10;45295:9;45273;:32::i;:::-;45528:1;45506:18;;:23;:56;;;;;43425:5;45534:13;:11;:13::i;:::-;:27;45506:56;45502:112;;;45594:12;45573:18;:33;;;;45502:112;45020:600;44982:638::o;15947:164::-;16044:4;16068:18;:25;16087:5;16068:25;;;;;;;;;;;;;;;:35;16094:8;16068:35;;;;;;;;;;;;;;;;;;;;;;;;;16061:42;;15947:164;;;;:::o;49950:620::-;50017:1;50000:13;;:18;49992:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;50089:1;50067:18;;:23;;50059:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43425:5;50171:18;;50161:29;50156:35;;:48;;;;:::i;:::-;50140:13;:64;;;;50368:3;50347:18;;50332:12;:33;;;;:::i;:::-;:39;50328:124;;;43425:5;50428:1;50413:12;:16;;;;:::i;:::-;50403:27;50398:33;;:46;;;;:::i;:::-;50382:13;:62;;;;50328:124;50512:1;50495:13;;:18;50491:74;;;50556:1;50540:13;;:17;;;;:::i;:::-;50524:13;:33;;;;50491:74;49950:620::o;48825:90::-;2094:12;:10;:12::i;:::-;2083:23;;:7;:5;:7::i;:::-;:23;;;2075:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48894:15:::1;;;;;;;;;;;48893:16;48875:15;;:34;;;;;;;;;;;;;;;;;;48825:90::o:0;49022:96::-;2094:12;:10;:12::i;:::-;2083:23;;:7;:5;:7::i;:::-;:23;;;2075:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49095:17:::1;;;;;;;;;;;49094:18;49074:17;;:38;;;;;;;;;;;;;;;;;;49022:96::o:0;2763:192::-;2094:12;:10;:12::i;:::-;2083:23;;:7;:5;:7::i;:::-;:23;;;2075:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2872:1:::1;2852:22;;:8;:22;;;;2844:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2928:19;2938:8;2928:9;:19::i;:::-;2763:192:::0;:::o;25800:224::-;25902:4;25941:35;25926:50;;;:11;:50;;;;:90;;;;25980:36;26004:11;25980:23;:36::i;:::-;25926:90;25919:97;;25800:224;;;:::o;18682:127::-;18747:4;18799:1;18771:30;;:7;:16;18779:7;18771:16;;;;;;;;;;;;;;;;;;;;;:30;;;;18764:37;;18682:127;;;:::o;656:98::-;709:7;736:10;729:17;;656:98;:::o;22664:174::-;22766:2;22739:15;:24;22755:7;22739:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;22822:7;22818:2;22784:46;;22793:23;22808:7;22793:14;:23::i;:::-;22784:46;;;;;;;;;;;;22664:174;;:::o;18976:348::-;19069:4;19094:16;19102:7;19094;:16::i;:::-;19086:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;19170:13;19186:23;19201:7;19186:14;:23::i;:::-;19170:39;;19239:5;19228:16;;:7;:16;;;:51;;;;19272:7;19248:31;;:20;19260:7;19248:11;:20::i;:::-;:31;;;19228:51;:87;;;;19283:32;19300:5;19307:7;19283:16;:32::i;:::-;19228:87;19220:96;;;18976:348;;;;:::o;21968:578::-;22127:4;22100:31;;:23;22115:7;22100:14;:23::i;:::-;:31;;;22092:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;22210:1;22196:16;;:2;:16;;;;22188:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22266:39;22287:4;22293:2;22297:7;22266:20;:39::i;:::-;22370:29;22387:1;22391:7;22370:8;:29::i;:::-;22431:1;22412:9;:15;22422:4;22412:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;22460:1;22443:9;:13;22453:2;22443:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;22491:2;22472:7;:16;22480:7;22472:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;22530:7;22526:2;22511:27;;22520:4;22511:27;;;;;;;;;;;;21968:578;;;:::o;19666:110::-;19742:26;19752:2;19756:7;19742:26;;;;;;;;;;;;:9;:26::i;:::-;19666:110;;:::o;2963:173::-;3019:16;3038:6;;;;;;;;;;;3019:25;;3064:8;3055:6;;:17;;;;;;;;;;;;;;;;;;3119:8;3088:40;;3109:8;3088:40;;;;;;;;;;;;3008:128;2963:173;:::o;18054:315::-;18211:28;18221:4;18227:2;18231:7;18211:9;:28::i;:::-;18258:48;18281:4;18287:2;18291:7;18300:5;18258:22;:48::i;:::-;18250:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;18054:315;;;;:::o;14073:334::-;14146:13;14180:16;14188:7;14180;:16::i;:::-;14172:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;14261:21;14285:10;:8;:10::i;:::-;14261:34;;14337:1;14319:7;14313:21;:25;:86;;;;;;;;;;;;;;;;;14365:7;14374:18;:7;:16;:18::i;:::-;14348:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;14313:86;14306:93;;;14073:334;;;:::o;12784:305::-;12886:4;12938:25;12923:40;;;:11;:40;;;;:105;;;;12995:33;12980:48;;;:11;:48;;;;12923:105;:158;;;;13045:36;13069:11;13045:23;:36::i;:::-;12923:158;12903:178;;12784:305;;;:::o;49307:188::-;49444:45;49471:4;49477:2;49481:7;49444:26;:45::i;:::-;49307:188;;;:::o;20003:321::-;20133:18;20139:2;20143:7;20133:5;:18::i;:::-;20184:54;20215:1;20219:2;20223:7;20232:5;20184:22;:54::i;:::-;20162:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;20003:321;;;:::o;23403:803::-;23558:4;23579:15;:2;:13;;;:15::i;:::-;23575:624;;;23631:2;23615:36;;;23652:12;:10;:12::i;:::-;23666:4;23672:7;23681:5;23615:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;23611:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23878:1;23861:6;:13;:18;23857:272;;;23904:60;;;;;;;;;;:::i;:::-;;;;;;;;23857:272;24079:6;24073:13;24064:6;24060:2;24056:15;24049:38;23611:533;23748:45;;;23738:55;;;:6;:55;;;;23731:62;;;;;23575:624;24183:4;24176:11;;23403:803;;;;;;;:::o;44182:116::-;44242:13;44279;44272:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44182:116;:::o;32280:723::-;32336:13;32566:1;32557:5;:10;32553:53;;;32584:10;;;;;;;;;;;;;;;;;;;;;32553:53;32616:12;32631:5;32616:20;;32647:14;32672:78;32687:1;32679:4;:9;32672:78;;32705:8;;;;;:::i;:::-;;;;32736:2;32728:10;;;;;:::i;:::-;;;32672:78;;;32760:19;32792:6;32782:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32760:39;;32810:154;32826:1;32817:5;:10;32810:154;;32854:1;32844:11;;;;;:::i;:::-;;;32921:2;32913:5;:10;;;;:::i;:::-;32900:2;:24;;;;:::i;:::-;32887:39;;32870:6;32877;32870:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;32950:2;32941:11;;;;;:::i;:::-;;;32810:154;;;32988:6;32974:21;;;;;32280:723;;;;:::o;10580:157::-;10665:4;10704:25;10689:40;;;:11;:40;;;;10682:47;;10580:157;;;:::o;27476:589::-;27620:45;27647:4;27653:2;27657:7;27620:26;:45::i;:::-;27698:1;27682:18;;:4;:18;;;27678:187;;;27717:40;27749:7;27717:31;:40::i;:::-;27678:187;;;27787:2;27779:10;;:4;:10;;;27775:90;;27806:47;27839:4;27845:7;27806:32;:47::i;:::-;27775:90;27678:187;27893:1;27879:16;;:2;:16;;;27875:183;;;27912:45;27949:7;27912:36;:45::i;:::-;27875:183;;;27985:4;27979:10;;:2;:10;;;27975:83;;28006:40;28034:2;28038:7;28006:27;:40::i;:::-;27975:83;27875:183;27476:589;;;:::o;20660:382::-;20754:1;20740:16;;:2;:16;;;;20732:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;20813:16;20821:7;20813;:16::i;:::-;20812:17;20804:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;20875:45;20904:1;20908:2;20912:7;20875:20;:45::i;:::-;20950:1;20933:9;:13;20943:2;20933:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;20981:2;20962:7;:16;20970:7;20962:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;21026:7;21022:2;21001:33;;21018:1;21001:33;;;;;;;;;;;;20660:382;;:::o;34813:387::-;34873:4;35081:12;35148:7;35136:20;35128:28;;35191:1;35184:4;:8;35177:15;;;34813:387;;;:::o;24778:126::-;;;;:::o;28788:164::-;28892:10;:17;;;;28865:15;:24;28881:7;28865:24;;;;;;;;;;;:44;;;;28920:10;28936:7;28920:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28788:164;:::o;29579:988::-;29845:22;29895:1;29870:22;29887:4;29870:16;:22::i;:::-;:26;;;;:::i;:::-;29845:51;;29907:18;29928:17;:26;29946:7;29928:26;;;;;;;;;;;;29907:47;;30075:14;30061:10;:28;30057:328;;30106:19;30128:12;:18;30141:4;30128:18;;;;;;;;;;;;;;;:34;30147:14;30128:34;;;;;;;;;;;;30106:56;;30212:11;30179:12;:18;30192:4;30179:18;;;;;;;;;;;;;;;:30;30198:10;30179:30;;;;;;;;;;;:44;;;;30329:10;30296:17;:30;30314:11;30296:30;;;;;;;;;;;:43;;;;30091:294;30057:328;30481:17;:26;30499:7;30481:26;;;;;;;;;;;30474:33;;;30525:12;:18;30538:4;30525:18;;;;;;;;;;;;;;;:34;30544:14;30525:34;;;;;;;;;;;30518:41;;;29660:907;;29579:988;;:::o;30862:1079::-;31115:22;31160:1;31140:10;:17;;;;:21;;;;:::i;:::-;31115:46;;31172:18;31193:15;:24;31209:7;31193:24;;;;;;;;;;;;31172:45;;31544:19;31566:10;31577:14;31566:26;;;;;;;;:::i;:::-;;;;;;;;;;31544:48;;31630:11;31605:10;31616;31605:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;31741:10;31710:15;:28;31726:11;31710:28;;;;;;;;;;;:41;;;;31882:15;:24;31898:7;31882:24;;;;;;;;;;;31875:31;;;31917:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30933:1008;;;30862:1079;:::o;28366:221::-;28451:14;28468:20;28485:2;28468:16;:20::i;:::-;28451:37;;28526:7;28499:12;:16;28512:2;28499:16;;;;;;;;;;;;;;;:24;28516:6;28499:24;;;;;;;;;;;:34;;;;28573:6;28544:17;:26;28562:7;28544:26;;;;;;;;;;;:35;;;;28440:147;28366:221;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;280:79;;:::i;:::-;249:2;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:2;;;698:79;;:::i;:::-;667:2;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;893:87;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;1035:84;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1176:86;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1330:79;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:2;;1540:79;;:::i;:::-;1499:2;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:2;;1899:79;;:::i;:::-;1858:2;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2184:87;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:2;;;2391:79;;:::i;:::-;2353:2;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2343:263;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:2;;;2743:79;;:::i;:::-;2705:2;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2695:391;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:2;;;3240:79;;:::i;:::-;3202:2;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3192:519;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:2;;;3892:79;;:::i;:::-;3853:2;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:2;;;4476:79;;:::i;:::-;4440:2;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3843:817;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:2;;;4794:79;;:::i;:::-;4756:2;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4746:388;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:2;;;5271:79;;:::i;:::-;5233:2;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5223:391;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:2;;;5733:79;;:::i;:::-;5695:2;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5685:262;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:2;;;6077:79;;:::i;:::-;6039:2;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;6029:273;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:2;;;6432:79;;:::i;:::-;6394:2;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:2;;;6632:79;;:::i;:::-;6596:2;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6384:433;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:2;;;6937:79;;:::i;:::-;6899:2;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6889:263;;;;:::o;7158:179::-;7227:10;7248:46;7290:3;7282:6;7248:46;:::i;:::-;7326:4;7321:3;7317:14;7303:28;;7238:99;;;;:::o;7343:118::-;7430:24;7448:5;7430:24;:::i;:::-;7425:3;7418:37;7408:53;;:::o;7497:732::-;7616:3;7645:54;7693:5;7645:54;:::i;:::-;7715:86;7794:6;7789:3;7715:86;:::i;:::-;7708:93;;7825:56;7875:5;7825:56;:::i;:::-;7904:7;7935:1;7920:284;7945:6;7942:1;7939:13;7920:284;;;8021:6;8015:13;8048:63;8107:3;8092:13;8048:63;:::i;:::-;8041:70;;8134:60;8187:6;8134:60;:::i;:::-;8124:70;;7980:224;7967:1;7964;7960:9;7955:14;;7920:284;;;7924:14;8220:3;8213:10;;7621:608;;;;;;;:::o;8235:109::-;8316:21;8331:5;8316:21;:::i;:::-;8311:3;8304:34;8294:50;;:::o;8350:360::-;8436:3;8464:38;8496:5;8464:38;:::i;:::-;8518:70;8581:6;8576:3;8518:70;:::i;:::-;8511:77;;8597:52;8642:6;8637:3;8630:4;8623:5;8619:16;8597:52;:::i;:::-;8674:29;8696:6;8674:29;:::i;:::-;8669:3;8665:39;8658:46;;8440:270;;;;;:::o;8716:364::-;8804:3;8832:39;8865:5;8832:39;:::i;:::-;8887:71;8951:6;8946:3;8887:71;:::i;:::-;8880:78;;8967:52;9012:6;9007:3;9000:4;8993:5;8989:16;8967:52;:::i;:::-;9044:29;9066:6;9044:29;:::i;:::-;9039:3;9035:39;9028:46;;8808:272;;;;;:::o;9086:377::-;9192:3;9220:39;9253:5;9220:39;:::i;:::-;9275:89;9357:6;9352:3;9275:89;:::i;:::-;9268:96;;9373:52;9418:6;9413:3;9406:4;9399:5;9395:16;9373:52;:::i;:::-;9450:6;9445:3;9441:16;9434:23;;9196:267;;;;;:::o;9469:366::-;9611:3;9632:67;9696:2;9691:3;9632:67;:::i;:::-;9625:74;;9708:93;9797:3;9708:93;:::i;:::-;9826:2;9821:3;9817:12;9810:19;;9615:220;;;:::o;9841:366::-;9983:3;10004:67;10068:2;10063:3;10004:67;:::i;:::-;9997:74;;10080:93;10169:3;10080:93;:::i;:::-;10198:2;10193:3;10189:12;10182:19;;9987:220;;;:::o;10213:366::-;10355:3;10376:67;10440:2;10435:3;10376:67;:::i;:::-;10369:74;;10452:93;10541:3;10452:93;:::i;:::-;10570:2;10565:3;10561:12;10554:19;;10359:220;;;:::o;10585:366::-;10727:3;10748:67;10812:2;10807:3;10748:67;:::i;:::-;10741:74;;10824:93;10913:3;10824:93;:::i;:::-;10942:2;10937:3;10933:12;10926:19;;10731:220;;;:::o;10957:366::-;11099:3;11120:67;11184:2;11179:3;11120:67;:::i;:::-;11113:74;;11196:93;11285:3;11196:93;:::i;:::-;11314:2;11309:3;11305:12;11298:19;;11103:220;;;:::o;11329:366::-;11471:3;11492:67;11556:2;11551:3;11492:67;:::i;:::-;11485:74;;11568:93;11657:3;11568:93;:::i;:::-;11686:2;11681:3;11677:12;11670:19;;11475:220;;;:::o;11701:366::-;11843:3;11864:67;11928:2;11923:3;11864:67;:::i;:::-;11857:74;;11940:93;12029:3;11940:93;:::i;:::-;12058:2;12053:3;12049:12;12042:19;;11847:220;;;:::o;12073:366::-;12215:3;12236:67;12300:2;12295:3;12236:67;:::i;:::-;12229:74;;12312:93;12401:3;12312:93;:::i;:::-;12430:2;12425:3;12421:12;12414:19;;12219:220;;;:::o;12445:366::-;12587:3;12608:67;12672:2;12667:3;12608:67;:::i;:::-;12601:74;;12684:93;12773:3;12684:93;:::i;:::-;12802:2;12797:3;12793:12;12786:19;;12591:220;;;:::o;12817:366::-;12959:3;12980:67;13044:2;13039:3;12980:67;:::i;:::-;12973:74;;13056:93;13145:3;13056:93;:::i;:::-;13174:2;13169:3;13165:12;13158:19;;12963:220;;;:::o;13189:366::-;13331:3;13352:67;13416:2;13411:3;13352:67;:::i;:::-;13345:74;;13428:93;13517:3;13428:93;:::i;:::-;13546:2;13541:3;13537:12;13530:19;;13335:220;;;:::o;13561:366::-;13703:3;13724:67;13788:2;13783:3;13724:67;:::i;:::-;13717:74;;13800:93;13889:3;13800:93;:::i;:::-;13918:2;13913:3;13909:12;13902:19;;13707:220;;;:::o;13933:366::-;14075:3;14096:67;14160:2;14155:3;14096:67;:::i;:::-;14089:74;;14172:93;14261:3;14172:93;:::i;:::-;14290:2;14285:3;14281:12;14274:19;;14079:220;;;:::o;14305:366::-;14447:3;14468:67;14532:2;14527:3;14468:67;:::i;:::-;14461:74;;14544:93;14633:3;14544:93;:::i;:::-;14662:2;14657:3;14653:12;14646:19;;14451:220;;;:::o;14677:366::-;14819:3;14840:67;14904:2;14899:3;14840:67;:::i;:::-;14833:74;;14916:93;15005:3;14916:93;:::i;:::-;15034:2;15029:3;15025:12;15018:19;;14823:220;;;:::o;15049:366::-;15191:3;15212:67;15276:2;15271:3;15212:67;:::i;:::-;15205:74;;15288:93;15377:3;15288:93;:::i;:::-;15406:2;15401:3;15397:12;15390:19;;15195:220;;;:::o;15421:366::-;15563:3;15584:67;15648:2;15643:3;15584:67;:::i;:::-;15577:74;;15660:93;15749:3;15660:93;:::i;:::-;15778:2;15773:3;15769:12;15762:19;;15567:220;;;:::o;15793:366::-;15935:3;15956:67;16020:2;16015:3;15956:67;:::i;:::-;15949:74;;16032:93;16121:3;16032:93;:::i;:::-;16150:2;16145:3;16141:12;16134:19;;15939:220;;;:::o;16165:366::-;16307:3;16328:67;16392:2;16387:3;16328:67;:::i;:::-;16321:74;;16404:93;16493:3;16404:93;:::i;:::-;16522:2;16517:3;16513:12;16506:19;;16311:220;;;:::o;16537:366::-;16679:3;16700:67;16764:2;16759:3;16700:67;:::i;:::-;16693:74;;16776:93;16865:3;16776:93;:::i;:::-;16894:2;16889:3;16885:12;16878:19;;16683:220;;;:::o;16909:366::-;17051:3;17072:67;17136:2;17131:3;17072:67;:::i;:::-;17065:74;;17148:93;17237:3;17148:93;:::i;:::-;17266:2;17261:3;17257:12;17250:19;;17055:220;;;:::o;17281:366::-;17423:3;17444:67;17508:2;17503:3;17444:67;:::i;:::-;17437:74;;17520:93;17609:3;17520:93;:::i;:::-;17638:2;17633:3;17629:12;17622:19;;17427:220;;;:::o;17653:366::-;17795:3;17816:67;17880:2;17875:3;17816:67;:::i;:::-;17809:74;;17892:93;17981:3;17892:93;:::i;:::-;18010:2;18005:3;18001:12;17994:19;;17799:220;;;:::o;18025:366::-;18167:3;18188:67;18252:2;18247:3;18188:67;:::i;:::-;18181:74;;18264:93;18353:3;18264:93;:::i;:::-;18382:2;18377:3;18373:12;18366:19;;18171:220;;;:::o;18397:366::-;18539:3;18560:67;18624:2;18619:3;18560:67;:::i;:::-;18553:74;;18636:93;18725:3;18636:93;:::i;:::-;18754:2;18749:3;18745:12;18738:19;;18543:220;;;:::o;18769:366::-;18911:3;18932:67;18996:2;18991:3;18932:67;:::i;:::-;18925:74;;19008:93;19097:3;19008:93;:::i;:::-;19126:2;19121:3;19117:12;19110:19;;18915:220;;;:::o;19141:366::-;19283:3;19304:67;19368:2;19363:3;19304:67;:::i;:::-;19297:74;;19380:93;19469:3;19380:93;:::i;:::-;19498:2;19493:3;19489:12;19482:19;;19287:220;;;:::o;19513:366::-;19655:3;19676:67;19740:2;19735:3;19676:67;:::i;:::-;19669:74;;19752:93;19841:3;19752:93;:::i;:::-;19870:2;19865:3;19861:12;19854:19;;19659:220;;;:::o;19885:108::-;19962:24;19980:5;19962:24;:::i;:::-;19957:3;19950:37;19940:53;;:::o;19999:118::-;20086:24;20104:5;20086:24;:::i;:::-;20081:3;20074:37;20064:53;;:::o;20123:435::-;20303:3;20325:95;20416:3;20407:6;20325:95;:::i;:::-;20318:102;;20437:95;20528:3;20519:6;20437:95;:::i;:::-;20430:102;;20549:3;20542:10;;20307:251;;;;;:::o;20564:222::-;20657:4;20695:2;20684:9;20680:18;20672:26;;20708:71;20776:1;20765:9;20761:17;20752:6;20708:71;:::i;:::-;20662:124;;;;:::o;20792:640::-;20987:4;21025:3;21014:9;21010:19;21002:27;;21039:71;21107:1;21096:9;21092:17;21083:6;21039:71;:::i;:::-;21120:72;21188:2;21177:9;21173:18;21164:6;21120:72;:::i;:::-;21202;21270:2;21259:9;21255:18;21246:6;21202:72;:::i;:::-;21321:9;21315:4;21311:20;21306:2;21295:9;21291:18;21284:48;21349:76;21420:4;21411:6;21349:76;:::i;:::-;21341:84;;20992:440;;;;;;;:::o;21438:373::-;21581:4;21619:2;21608:9;21604:18;21596:26;;21668:9;21662:4;21658:20;21654:1;21643:9;21639:17;21632:47;21696:108;21799:4;21790:6;21696:108;:::i;:::-;21688:116;;21586:225;;;;:::o;21817:210::-;21904:4;21942:2;21931:9;21927:18;21919:26;;21955:65;22017:1;22006:9;22002:17;21993:6;21955:65;:::i;:::-;21909:118;;;;:::o;22033:313::-;22146:4;22184:2;22173:9;22169:18;22161:26;;22233:9;22227:4;22223:20;22219:1;22208:9;22204:17;22197:47;22261:78;22334:4;22325:6;22261:78;:::i;:::-;22253:86;;22151:195;;;;:::o;22352:419::-;22518:4;22556:2;22545:9;22541:18;22533:26;;22605:9;22599:4;22595:20;22591:1;22580:9;22576:17;22569:47;22633:131;22759:4;22633:131;:::i;:::-;22625:139;;22523:248;;;:::o;22777:419::-;22943:4;22981:2;22970:9;22966:18;22958:26;;23030:9;23024:4;23020:20;23016:1;23005:9;23001:17;22994:47;23058:131;23184:4;23058:131;:::i;:::-;23050:139;;22948:248;;;:::o;23202:419::-;23368:4;23406:2;23395:9;23391:18;23383:26;;23455:9;23449:4;23445:20;23441:1;23430:9;23426:17;23419:47;23483:131;23609:4;23483:131;:::i;:::-;23475:139;;23373:248;;;:::o;23627:419::-;23793:4;23831:2;23820:9;23816:18;23808:26;;23880:9;23874:4;23870:20;23866:1;23855:9;23851:17;23844:47;23908:131;24034:4;23908:131;:::i;:::-;23900:139;;23798:248;;;:::o;24052:419::-;24218:4;24256:2;24245:9;24241:18;24233:26;;24305:9;24299:4;24295:20;24291:1;24280:9;24276:17;24269:47;24333:131;24459:4;24333:131;:::i;:::-;24325:139;;24223:248;;;:::o;24477:419::-;24643:4;24681:2;24670:9;24666:18;24658:26;;24730:9;24724:4;24720:20;24716:1;24705:9;24701:17;24694:47;24758:131;24884:4;24758:131;:::i;:::-;24750:139;;24648:248;;;:::o;24902:419::-;25068:4;25106:2;25095:9;25091:18;25083:26;;25155:9;25149:4;25145:20;25141:1;25130:9;25126:17;25119:47;25183:131;25309:4;25183:131;:::i;:::-;25175:139;;25073:248;;;:::o;25327:419::-;25493:4;25531:2;25520:9;25516:18;25508:26;;25580:9;25574:4;25570:20;25566:1;25555:9;25551:17;25544:47;25608:131;25734:4;25608:131;:::i;:::-;25600:139;;25498:248;;;:::o;25752:419::-;25918:4;25956:2;25945:9;25941:18;25933:26;;26005:9;25999:4;25995:20;25991:1;25980:9;25976:17;25969:47;26033:131;26159:4;26033:131;:::i;:::-;26025:139;;25923:248;;;:::o;26177:419::-;26343:4;26381:2;26370:9;26366:18;26358:26;;26430:9;26424:4;26420:20;26416:1;26405:9;26401:17;26394:47;26458:131;26584:4;26458:131;:::i;:::-;26450:139;;26348:248;;;:::o;26602:419::-;26768:4;26806:2;26795:9;26791:18;26783:26;;26855:9;26849:4;26845:20;26841:1;26830:9;26826:17;26819:47;26883:131;27009:4;26883:131;:::i;:::-;26875:139;;26773:248;;;:::o;27027:419::-;27193:4;27231:2;27220:9;27216:18;27208:26;;27280:9;27274:4;27270:20;27266:1;27255:9;27251:17;27244:47;27308:131;27434:4;27308:131;:::i;:::-;27300:139;;27198:248;;;:::o;27452:419::-;27618:4;27656:2;27645:9;27641:18;27633:26;;27705:9;27699:4;27695:20;27691:1;27680:9;27676:17;27669:47;27733:131;27859:4;27733:131;:::i;:::-;27725:139;;27623:248;;;:::o;27877:419::-;28043:4;28081:2;28070:9;28066:18;28058:26;;28130:9;28124:4;28120:20;28116:1;28105:9;28101:17;28094:47;28158:131;28284:4;28158:131;:::i;:::-;28150:139;;28048:248;;;:::o;28302:419::-;28468:4;28506:2;28495:9;28491:18;28483:26;;28555:9;28549:4;28545:20;28541:1;28530:9;28526:17;28519:47;28583:131;28709:4;28583:131;:::i;:::-;28575:139;;28473:248;;;:::o;28727:419::-;28893:4;28931:2;28920:9;28916:18;28908:26;;28980:9;28974:4;28970:20;28966:1;28955:9;28951:17;28944:47;29008:131;29134:4;29008:131;:::i;:::-;29000:139;;28898:248;;;:::o;29152:419::-;29318:4;29356:2;29345:9;29341:18;29333:26;;29405:9;29399:4;29395:20;29391:1;29380:9;29376:17;29369:47;29433:131;29559:4;29433:131;:::i;:::-;29425:139;;29323:248;;;:::o;29577:419::-;29743:4;29781:2;29770:9;29766:18;29758:26;;29830:9;29824:4;29820:20;29816:1;29805:9;29801:17;29794:47;29858:131;29984:4;29858:131;:::i;:::-;29850:139;;29748:248;;;:::o;30002:419::-;30168:4;30206:2;30195:9;30191:18;30183:26;;30255:9;30249:4;30245:20;30241:1;30230:9;30226:17;30219:47;30283:131;30409:4;30283:131;:::i;:::-;30275:139;;30173:248;;;:::o;30427:419::-;30593:4;30631:2;30620:9;30616:18;30608:26;;30680:9;30674:4;30670:20;30666:1;30655:9;30651:17;30644:47;30708:131;30834:4;30708:131;:::i;:::-;30700:139;;30598:248;;;:::o;30852:419::-;31018:4;31056:2;31045:9;31041:18;31033:26;;31105:9;31099:4;31095:20;31091:1;31080:9;31076:17;31069:47;31133:131;31259:4;31133:131;:::i;:::-;31125:139;;31023:248;;;:::o;31277:419::-;31443:4;31481:2;31470:9;31466:18;31458:26;;31530:9;31524:4;31520:20;31516:1;31505:9;31501:17;31494:47;31558:131;31684:4;31558:131;:::i;:::-;31550:139;;31448:248;;;:::o;31702:419::-;31868:4;31906:2;31895:9;31891:18;31883:26;;31955:9;31949:4;31945:20;31941:1;31930:9;31926:17;31919:47;31983:131;32109:4;31983:131;:::i;:::-;31975:139;;31873:248;;;:::o;32127:419::-;32293:4;32331:2;32320:9;32316:18;32308:26;;32380:9;32374:4;32370:20;32366:1;32355:9;32351:17;32344:47;32408:131;32534:4;32408:131;:::i;:::-;32400:139;;32298:248;;;:::o;32552:419::-;32718:4;32756:2;32745:9;32741:18;32733:26;;32805:9;32799:4;32795:20;32791:1;32780:9;32776:17;32769:47;32833:131;32959:4;32833:131;:::i;:::-;32825:139;;32723:248;;;:::o;32977:419::-;33143:4;33181:2;33170:9;33166:18;33158:26;;33230:9;33224:4;33220:20;33216:1;33205:9;33201:17;33194:47;33258:131;33384:4;33258:131;:::i;:::-;33250:139;;33148:248;;;:::o;33402:419::-;33568:4;33606:2;33595:9;33591:18;33583:26;;33655:9;33649:4;33645:20;33641:1;33630:9;33626:17;33619:47;33683:131;33809:4;33683:131;:::i;:::-;33675:139;;33573:248;;;:::o;33827:419::-;33993:4;34031:2;34020:9;34016:18;34008:26;;34080:9;34074:4;34070:20;34066:1;34055:9;34051:17;34044:47;34108:131;34234:4;34108:131;:::i;:::-;34100:139;;33998:248;;;:::o;34252:222::-;34345:4;34383:2;34372:9;34368:18;34360:26;;34396:71;34464:1;34453:9;34449:17;34440:6;34396:71;:::i;:::-;34350:124;;;;:::o;34480:129::-;34514:6;34541:20;;:::i;:::-;34531:30;;34570:33;34598:4;34590:6;34570:33;:::i;:::-;34521:88;;;:::o;34615:75::-;34648:6;34681:2;34675:9;34665:19;;34655:35;:::o;34696:307::-;34757:4;34847:18;34839:6;34836:30;34833:2;;;34869:18;;:::i;:::-;34833:2;34907:29;34929:6;34907:29;:::i;:::-;34899:37;;34991:4;34985;34981:15;34973:23;;34762:241;;;:::o;35009:308::-;35071:4;35161:18;35153:6;35150:30;35147:2;;;35183:18;;:::i;:::-;35147:2;35221:29;35243:6;35221:29;:::i;:::-;35213:37;;35305:4;35299;35295:15;35287:23;;35076:241;;;:::o;35323:132::-;35390:4;35413:3;35405:11;;35443:4;35438:3;35434:14;35426:22;;35395:60;;;:::o;35461:114::-;35528:6;35562:5;35556:12;35546:22;;35535:40;;;:::o;35581:98::-;35632:6;35666:5;35660:12;35650:22;;35639:40;;;:::o;35685:99::-;35737:6;35771:5;35765:12;35755:22;;35744:40;;;:::o;35790:113::-;35860:4;35892;35887:3;35883:14;35875:22;;35865:38;;;:::o;35909:184::-;36008:11;36042:6;36037:3;36030:19;36082:4;36077:3;36073:14;36058:29;;36020:73;;;;:::o;36099:168::-;36182:11;36216:6;36211:3;36204:19;36256:4;36251:3;36247:14;36232:29;;36194:73;;;;:::o;36273:169::-;36357:11;36391:6;36386:3;36379:19;36431:4;36426:3;36422:14;36407:29;;36369:73;;;;:::o;36448:148::-;36550:11;36587:3;36572:18;;36562:34;;;;:::o;36602:305::-;36642:3;36661:20;36679:1;36661:20;:::i;:::-;36656:25;;36695:20;36713:1;36695:20;:::i;:::-;36690:25;;36849:1;36781:66;36777:74;36774:1;36771:81;36768:2;;;36855:18;;:::i;:::-;36768:2;36899:1;36896;36892:9;36885:16;;36646:261;;;;:::o;36913:185::-;36953:1;36970:20;36988:1;36970:20;:::i;:::-;36965:25;;37004:20;37022:1;37004:20;:::i;:::-;36999:25;;37043:1;37033:2;;37048:18;;:::i;:::-;37033:2;37090:1;37087;37083:9;37078:14;;36955:143;;;;:::o;37104:348::-;37144:7;37167:20;37185:1;37167:20;:::i;:::-;37162:25;;37201:20;37219:1;37201:20;:::i;:::-;37196:25;;37389:1;37321:66;37317:74;37314:1;37311:81;37306:1;37299:9;37292:17;37288:105;37285:2;;;37396:18;;:::i;:::-;37285:2;37444:1;37441;37437:9;37426:20;;37152:300;;;;:::o;37458:191::-;37498:4;37518:20;37536:1;37518:20;:::i;:::-;37513:25;;37552:20;37570:1;37552:20;:::i;:::-;37547:25;;37591:1;37588;37585:8;37582:2;;;37596:18;;:::i;:::-;37582:2;37641:1;37638;37634:9;37626:17;;37503:146;;;;:::o;37655:96::-;37692:7;37721:24;37739:5;37721:24;:::i;:::-;37710:35;;37700:51;;;:::o;37757:90::-;37791:7;37834:5;37827:13;37820:21;37809:32;;37799:48;;;:::o;37853:149::-;37889:7;37929:66;37922:5;37918:78;37907:89;;37897:105;;;:::o;38008:126::-;38045:7;38085:42;38078:5;38074:54;38063:65;;38053:81;;;:::o;38140:77::-;38177:7;38206:5;38195:16;;38185:32;;;:::o;38223:154::-;38307:6;38302:3;38297;38284:30;38369:1;38360:6;38355:3;38351:16;38344:27;38274:103;;;:::o;38383:307::-;38451:1;38461:113;38475:6;38472:1;38469:13;38461:113;;;38560:1;38555:3;38551:11;38545:18;38541:1;38536:3;38532:11;38525:39;38497:2;38494:1;38490:10;38485:15;;38461:113;;;38592:6;38589:1;38586:13;38583:2;;;38672:1;38663:6;38658:3;38654:16;38647:27;38583:2;38432:258;;;;:::o;38696:320::-;38740:6;38777:1;38771:4;38767:12;38757:22;;38824:1;38818:4;38814:12;38845:18;38835:2;;38901:4;38893:6;38889:17;38879:27;;38835:2;38963;38955:6;38952:14;38932:18;38929:38;38926:2;;;38982:18;;:::i;:::-;38926:2;38747:269;;;;:::o;39022:281::-;39105:27;39127:4;39105:27;:::i;:::-;39097:6;39093:40;39235:6;39223:10;39220:22;39199:18;39187:10;39184:34;39181:62;39178:2;;;39246:18;;:::i;:::-;39178:2;39286:10;39282:2;39275:22;39065:238;;;:::o;39309:233::-;39348:3;39371:24;39389:5;39371:24;:::i;:::-;39362:33;;39417:66;39410:5;39407:77;39404:2;;;39487:18;;:::i;:::-;39404:2;39534:1;39527:5;39523:13;39516:20;;39352:190;;;:::o;39548:176::-;39580:1;39597:20;39615:1;39597:20;:::i;:::-;39592:25;;39631:20;39649:1;39631:20;:::i;:::-;39626:25;;39670:1;39660:2;;39675:18;;:::i;:::-;39660:2;39716:1;39713;39709:9;39704:14;;39582:142;;;;:::o;39730:180::-;39778:77;39775:1;39768:88;39875:4;39872:1;39865:15;39899:4;39896:1;39889:15;39916:180;39964:77;39961:1;39954:88;40061:4;40058:1;40051:15;40085:4;40082:1;40075:15;40102:180;40150:77;40147:1;40140:88;40247:4;40244:1;40237:15;40271:4;40268:1;40261:15;40288:180;40336:77;40333:1;40326:88;40433:4;40430:1;40423:15;40457:4;40454:1;40447:15;40474:180;40522:77;40519:1;40512:88;40619:4;40616:1;40609:15;40643:4;40640:1;40633:15;40660:180;40708:77;40705:1;40698:88;40805:4;40802:1;40795:15;40829:4;40826:1;40819:15;40846:117;40955:1;40952;40945:12;40969:117;41078:1;41075;41068:12;41092:117;41201:1;41198;41191:12;41215:117;41324:1;41321;41314:12;41338:102;41379:6;41430:2;41426:7;41421:2;41414:5;41410:14;41406:28;41396:38;;41386:54;;;:::o;41446:167::-;41586:19;41582:1;41574:6;41570:14;41563:43;41552:61;:::o;41619:173::-;41759:25;41755:1;41747:6;41743:14;41736:49;41725:67;:::o;41798:230::-;41938:34;41934:1;41926:6;41922:14;41915:58;42007:13;42002:2;41994:6;41990:15;41983:38;41904:124;:::o;42034:237::-;42174:34;42170:1;42162:6;42158:14;42151:58;42243:20;42238:2;42230:6;42226:15;42219:45;42140:131;:::o;42277:225::-;42417:34;42413:1;42405:6;42401:14;42394:58;42486:8;42481:2;42473:6;42469:15;42462:33;42383:119;:::o;42508:178::-;42648:30;42644:1;42636:6;42632:14;42625:54;42614:72;:::o;42692:164::-;42832:16;42828:1;42820:6;42816:14;42809:40;42798:58;:::o;42862:182::-;43002:34;42998:1;42990:6;42986:14;42979:58;42968:76;:::o;43050:223::-;43190:34;43186:1;43178:6;43174:14;43167:58;43259:6;43254:2;43246:6;43242:15;43235:31;43156:117;:::o;43279:175::-;43419:27;43415:1;43407:6;43403:14;43396:51;43385:69;:::o;43460:231::-;43600:34;43596:1;43588:6;43584:14;43577:58;43669:14;43664:2;43656:6;43652:15;43645:39;43566:125;:::o;43697:179::-;43837:31;43833:1;43825:6;43821:14;43814:55;43803:73;:::o;43882:243::-;44022:34;44018:1;44010:6;44006:14;43999:58;44091:26;44086:2;44078:6;44074:15;44067:51;43988:137;:::o;44131:229::-;44271:34;44267:1;44259:6;44255:14;44248:58;44340:12;44335:2;44327:6;44323:15;44316:37;44237:123;:::o;44366:228::-;44506:34;44502:1;44494:6;44490:14;44483:58;44575:11;44570:2;44562:6;44558:15;44551:36;44472:122;:::o;44600:175::-;44740:27;44736:1;44728:6;44724:14;44717:51;44706:69;:::o;44781:182::-;44921:34;44917:1;44909:6;44905:14;44898:58;44887:76;:::o;44969:231::-;45109:34;45105:1;45097:6;45093:14;45086:58;45178:14;45173:2;45165:6;45161:15;45154:39;45075:125;:::o;45206:182::-;45346:34;45342:1;45334:6;45330:14;45323:58;45312:76;:::o;45394:228::-;45534:34;45530:1;45522:6;45518:14;45511:58;45603:11;45598:2;45590:6;45586:15;45579:36;45500:122;:::o;45628:234::-;45768:34;45764:1;45756:6;45752:14;45745:58;45837:17;45832:2;45824:6;45820:15;45813:42;45734:128;:::o;45868:168::-;46008:20;46004:1;45996:6;45992:14;45985:44;45974:62;:::o;46042:220::-;46182:34;46178:1;46170:6;46166:14;46159:58;46251:3;46246:2;46238:6;46234:15;46227:28;46148:114;:::o;46268:182::-;46408:34;46404:1;46396:6;46392:14;46385:58;46374:76;:::o;46456:236::-;46596:34;46592:1;46584:6;46580:14;46573:58;46665:19;46660:2;46652:6;46648:15;46641:44;46562:130;:::o;46698:231::-;46838:34;46834:1;46826:6;46822:14;46815:58;46907:14;46902:2;46894:6;46890:15;46883:39;46804:125;:::o;46935:171::-;47075:23;47071:1;47063:6;47059:14;47052:47;47041:65;:::o;47112:170::-;47252:22;47248:1;47240:6;47236:14;47229:46;47218:64;:::o;47288:122::-;47361:24;47379:5;47361:24;:::i;:::-;47354:5;47351:35;47341:2;;47400:1;47397;47390:12;47341:2;47331:79;:::o;47416:116::-;47486:21;47501:5;47486:21;:::i;:::-;47479:5;47476:32;47466:2;;47522:1;47519;47512:12;47466:2;47456:76;:::o;47538:120::-;47610:23;47627:5;47610:23;:::i;:::-;47603:5;47600:34;47590:2;;47648:1;47645;47638:12;47590:2;47580:78;:::o;47664:122::-;47737:24;47755:5;47737:24;:::i;:::-;47730:5;47727:35;47717:2;;47776:1;47773;47766:12;47717:2;47707:79;:::o

Swarm Source

ipfs://293eebb75593156c8115ee9b1af8136bbcf4acf87da12bde46c1612e831ace48
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.