ETH Price: $3,271.74 (-1.17%)
Gas: 8 Gwei

Token

CryptoPunksBunnies (CPB)
 

Overview

Max Total Supply

2,491 CPB

Holders

536

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0xf319f0045a91b065c930e085bf03b9bd72fb7289
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:
CryptoPunksBunnies

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-25
*/

// CryptoPunks Bunnies Official Contract - https://cryptopunksbunnies.com
// Discord - https://discord.com/invite/xwR69ujF9E
// Twitter - https://twitter.com/cpbpixel

// 4096 unique collectible characters with proof of ownership working on the Ethereum blockchain. The project that inspired the classic pixel CryptoArt movement.

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

library Strings {
    bytes16 private constant alphabet = "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] = alphabet[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "#43");
        return string(buffer);
    }

}

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




/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155Receiver.sol)

/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}



// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}



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

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

/**
 * @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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 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);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal 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);
            }
        }
    }
}


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

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


abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */


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

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


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol)

/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI, Ownable {
    using Address for address;
     using Strings for uint256;
    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

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

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string public _uri;

    /**
     * @dev See {_setURI}.
     */
  

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

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256 tokenId) public view virtual override returns (string memory) {
        string memory baseURI = _uri;
        return bytes(baseURI).length > 0
            ? string(abi.encodePacked(baseURI, tokenId.toString()))
            : 'uri not set';
    }
  

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);

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

        emit TransferSingle(operator, from, to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

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

        emit TransferBatch(operator, from, to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }


    address payable internal  dev = payable(0x6B985E07ADc47b3662c349F07c3dFF4C6dFb68B6);
    address payable internal  iv = payable(0x4a851cfCFeB11c235F3aF002ABdE64fF31Defe61);
   
    function  _withdrawAll() internal virtual {
       uint256 balanceDev = address(this).balance*20/100;
       uint256 balanceIv = address(this).balance*12/100;
       uint256 balanceOwner = address(this).balance-balanceDev-balanceIv;
       payable(dev).transfer(balanceDev);
       payable(iv).transfer(balanceIv);
       payable(_msgSender()).transfer(balanceOwner);

    }

    

}

contract CryptoPunksBunnies is ERC1155 {
    string public name;
    string public symbol;
    uint public  MAX_TOKEN = 4096;
    uint public  basePrice = 40*10**15; // ETH
	//string public _baseTokenURI;
	bool public saleEnable = false;
    uint256 private _totalSupply;

    constructor (string memory name_, string memory symbol_, string memory uri_) {
        name = name_;
        symbol = symbol_;
        _uri = uri_;
    }
        
    function setsaleEnable(bool  _saleEnable) public onlyOwner {
         saleEnable = _saleEnable;
    }
    
    function setMaxToken(uint  _MAX_TOKEN) public onlyOwner {
         MAX_TOKEN = _MAX_TOKEN;
    }

    function setBasePrice(uint  _basePrice) public onlyOwner {
         basePrice = _basePrice;
    }
  
    function mint(address _to, uint _count) public payable {
        require(msg.sender == owner() || saleEnable, "Sale not enable");
        require(totalSupply() +_count <= MAX_TOKEN, "Exceeds limit");
        require(_count <= 50, "Exceeds 50");
        require(msg.value >= basePrice * _count || msg.sender == owner() , "Value below price");

        for(uint i = 0; i < _count; i++){
            _mint(_to, totalSupply(), 1, '');
            _totalSupply = _totalSupply + 1;
            }
         
    }

    function setBaseURI(string memory baseURI) public onlyOwner {
        _uri = baseURI;
    }
    

    function withdrawAll() public payable onlyOwner {
        _withdrawAll();
    }


      function totalSupply() public view virtual returns (uint256) {
        return _totalSupply;
    }


}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"string","name":"uri_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"MAX_TOKEN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"basePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mint","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":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_basePrice","type":"uint256"}],"name":"setBasePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MAX_TOKEN","type":"uint256"}],"name":"setMaxToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_saleEnable","type":"bool"}],"name":"setsaleEnable","outputs":[],"stateMutability":"nonpayable","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":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]

6080604052736b985e07adc47b3662c349f07c3dff4c6dfb68b6600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734a851cfcfeb11c235f3af002abde64ff31defe61600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611000600855668e1bc9bf0400006009556000600a60006101000a81548160ff021916908315150217905550348015620000e757600080fd5b50604051620043273803806200432783398181016040528101906200010d91906200037b565b6200012d620001216200018160201b60201c565b6200018960201b60201c565b8260069080519060200190620001459291906200024d565b5081600790805190602001906200015e9291906200024d565b508060039080519060200190620001779291906200024d565b50505050620005b8565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200025b90620004c9565b90600052602060002090601f0160209004810192826200027f5760008555620002cb565b82601f106200029a57805160ff1916838001178555620002cb565b82800160010185558215620002cb579182015b82811115620002ca578251825591602001919060010190620002ad565b5b509050620002da9190620002de565b5090565b5b80821115620002f9576000816000905550600101620002df565b5090565b6000620003146200030e846200045d565b62000434565b90508281526020810184848401111562000333576200033262000598565b5b6200034084828562000493565b509392505050565b600082601f83011262000360576200035f62000593565b5b815162000372848260208601620002fd565b91505092915050565b600080600060608486031215620003975762000396620005a2565b5b600084015167ffffffffffffffff811115620003b857620003b76200059d565b5b620003c68682870162000348565b935050602084015167ffffffffffffffff811115620003ea57620003e96200059d565b5b620003f88682870162000348565b925050604084015167ffffffffffffffff8111156200041c576200041b6200059d565b5b6200042a8682870162000348565b9150509250925092565b60006200044062000453565b90506200044e8282620004ff565b919050565b6000604051905090565b600067ffffffffffffffff8211156200047b576200047a62000564565b5b6200048682620005a7565b9050602081019050919050565b60005b83811015620004b357808201518184015260208101905062000496565b83811115620004c3576000848401525b50505050565b60006002820490506001821680620004e257607f821691505b60208210811415620004f957620004f862000535565b5b50919050565b6200050a82620005a7565b810181811067ffffffffffffffff821117156200052c576200052b62000564565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b613d5f80620005c86000396000f3fe60806040526004361061013f5760003560e01c80636e1bd323116100b6578063c7876ea41161006f578063c7876ea41461042d578063de4b326214610458578063e985e9c514610481578063f242432a146104be578063f2fde38b146104e7578063fe4ca847146105105761013f565b80636e1bd32314610350578063853828b61461037b5780638da5cb5b1461038557806395d89b41146103b0578063a22cb465146103db578063b02636fd146104045761013f565b80630e89341c116101085780630e89341c1461023d57806318160ddd1461027a5780632eb2c2d6146102a557806340c10f19146102ce5780634e1273f4146102ea57806355f804b3146103275761013f565b8062fdd58e1461014457806301ffc9a71461018157806306fdde03146101be57806309acc2cb146101e95780630dccc9ad14610212575b600080fd5b34801561015057600080fd5b5061016b60048036038101906101669190612917565b61053b565b604051610178919061322b565b60405180910390f35b34801561018d57600080fd5b506101a860048036038101906101a391906129fc565b610605565b6040516101b59190612fce565b60405180910390f35b3480156101ca57600080fd5b506101d36106e7565b6040516101e09190612fe9565b60405180910390f35b3480156101f557600080fd5b50610210600480360381019061020b9190612a9f565b610775565b005b34801561021e57600080fd5b506102276107fb565b6040516102349190612fe9565b60405180910390f35b34801561024957600080fd5b50610264600480360381019061025f9190612a9f565b610889565b6040516102719190612fe9565b60405180910390f35b34801561028657600080fd5b5061028f610991565b60405161029c919061322b565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c79190612771565b61099b565b005b6102e860048036038101906102e39190612917565b610a3c565b005b3480156102f657600080fd5b50610311600480360381019061030c9190612957565b610c4b565b60405161031e9190612f75565b60405180910390f35b34801561033357600080fd5b5061034e60048036038101906103499190612a56565b610d64565b005b34801561035c57600080fd5b50610365610dfa565b604051610372919061322b565b60405180910390f35b610383610e00565b005b34801561039157600080fd5b5061039a610e86565b6040516103a79190612e98565b60405180910390f35b3480156103bc57600080fd5b506103c5610eaf565b6040516103d29190612fe9565b60405180910390f35b3480156103e757600080fd5b5061040260048036038101906103fd91906128d7565b610f3d565b005b34801561041057600080fd5b5061042b600480360381019061042691906129cf565b610f53565b005b34801561043957600080fd5b50610442610fec565b60405161044f919061322b565b60405180910390f35b34801561046457600080fd5b5061047f600480360381019061047a9190612a9f565b610ff2565b005b34801561048d57600080fd5b506104a860048036038101906104a39190612731565b611078565b6040516104b59190612fce565b60405180910390f35b3480156104ca57600080fd5b506104e560048036038101906104e09190612840565b61110c565b005b3480156104f357600080fd5b5061050e60048036038101906105099190612704565b6111ad565b005b34801561051c57600080fd5b506105256112a5565b6040516105329190612fce565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a39061304b565b60405180910390fd5b6001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106d057507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106e057506106df826112b8565b5b9050919050565b600680546106f490613595565b80601f016020809104026020016040519081016040528092919081815260200182805461072090613595565b801561076d5780601f106107425761010080835404028352916020019161076d565b820191906000526020600020905b81548152906001019060200180831161075057829003601f168201915b505050505081565b61077d611322565b73ffffffffffffffffffffffffffffffffffffffff1661079b610e86565b73ffffffffffffffffffffffffffffffffffffffff16146107f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e89061316b565b60405180910390fd5b8060088190555050565b6003805461080890613595565b80601f016020809104026020016040519081016040528092919081815260200182805461083490613595565b80156108815780601f1061085657610100808354040283529160200191610881565b820191906000526020600020905b81548152906001019060200180831161086457829003601f168201915b505050505081565b606060006003805461089a90613595565b80601f01602080910402602001604051908101604052809291908181526020018280546108c690613595565b80156109135780601f106108e857610100808354040283529160200191610913565b820191906000526020600020905b8154815290600101906020018083116108f657829003601f168201915b50505050509050600081511161095e576040518060400160405280600b81526020017f757269206e6f7420736574000000000000000000000000000000000000000000815250610989565b806109688461132a565b604051602001610979929190612e74565b6040516020818303038152906040525b915050919050565b6000600b54905090565b6109a3611322565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806109e957506109e8856109e3611322565b611078565b5b610a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1f906130eb565b60405180910390fd5b610a35858585858561148b565b5050505050565b610a44610e86565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610a895750600a60009054906101000a900460ff165b610ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abf9061308b565b60405180910390fd5b60085481610ad4610991565b610ade91906133ca565b1115610b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b169061312b565b60405180910390fd5b6032811115610b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5a9061314b565b60405180910390fd5b80600954610b719190613451565b34101580610bb15750610b82610e86565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610bf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be79061318b565b60405180910390fd5b60005b81811015610c4657610c1e83610c07610991565b6001604051806020016040528060008152506117a2565b6001600b54610c2d91906133ca565b600b819055508080610c3e906135f8565b915050610bf3565b505050565b60608151835114610c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c88906131cb565b60405180910390fd5b6000835167ffffffffffffffff811115610cae57610cad61372e565b5b604051908082528060200260200182016040528015610cdc5781602001602082028036833780820191505090505b50905060005b8451811015610d5957610d29858281518110610d0157610d006136ff565b5b6020026020010151858381518110610d1c57610d1b6136ff565b5b602002602001015161053b565b828281518110610d3c57610d3b6136ff565b5b60200260200101818152505080610d52906135f8565b9050610ce2565b508091505092915050565b610d6c611322565b73ffffffffffffffffffffffffffffffffffffffff16610d8a610e86565b73ffffffffffffffffffffffffffffffffffffffff1614610de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd79061316b565b60405180910390fd5b8060039080519060200190610df69291906123dc565b5050565b60085481565b610e08611322565b73ffffffffffffffffffffffffffffffffffffffff16610e26610e86565b73ffffffffffffffffffffffffffffffffffffffff1614610e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e739061316b565b60405180910390fd5b610e84611939565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60078054610ebc90613595565b80601f0160208091040260200160405190810160405280929190818152602001828054610ee890613595565b8015610f355780601f10610f0a57610100808354040283529160200191610f35565b820191906000526020600020905b815481529060010190602001808311610f1857829003601f168201915b505050505081565b610f4f610f48611322565b8383611ab3565b5050565b610f5b611322565b73ffffffffffffffffffffffffffffffffffffffff16610f79610e86565b73ffffffffffffffffffffffffffffffffffffffff1614610fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc69061316b565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b60095481565b610ffa611322565b73ffffffffffffffffffffffffffffffffffffffff16611018610e86565b73ffffffffffffffffffffffffffffffffffffffff161461106e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110659061316b565b60405180910390fd5b8060098190555050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611114611322565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061115a575061115985611154611322565b611078565b5b611199576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611190906130ab565b60405180910390fd5b6111a68585858585611c20565b5050505050565b6111b5611322565b73ffffffffffffffffffffffffffffffffffffffff166111d3610e86565b73ffffffffffffffffffffffffffffffffffffffff1614611229576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112209061316b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611299576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112909061306b565b60405180910390fd5b6112a281611ea5565b50565b600a60009054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60606000821415611372576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611486565b600082905060005b600082146113a457808061138d906135f8565b915050600a8261139d9190613420565b915061137a565b60008167ffffffffffffffff8111156113c0576113bf61372e565b5b6040519080825280601f01601f1916602001820160405280156113f25781602001600182028036833780820191505090505b5090505b6000851461147f5760018261140b91906134ab565b9150600a8561141a9190613641565b603061142691906133ca565b60f81b81838151811061143c5761143b6136ff565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856114789190613420565b94506113f6565b8093505050505b919050565b81518351146114cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c6906131eb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561153f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611536906130cb565b60405180910390fd5b6000611549611322565b9050611559818787878787611f69565b60005b845181101561170d57600085828151811061157a576115796136ff565b5b602002602001015190506000858381518110611599576115986136ff565b5b6020026020010151905060006001600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561163b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116329061310b565b60405180910390fd5b8181036001600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816001600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116f291906133ca565b9250508190555050505080611706906135f8565b905061155c565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611784929190612f97565b60405180910390a461179a818787878787611f71565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611812576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118099061320b565b60405180910390fd5b600061181c611322565b905061183d8160008761182e88612158565b61183788612158565b87611f69565b826001600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461189d91906133ca565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161191b929190613246565b60405180910390a4611932816000878787876121d2565b5050505050565b6000606460144761194a9190613451565b6119549190613420565b905060006064600c476119679190613451565b6119719190613420565b9050600081834761198291906134ab565b61198c91906134ab565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156119f6573d6000803e3d6000fd5b50600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611a5f573d6000803e3d6000fd5b50611a68611322565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611aad573d6000803e3d6000fd5b50505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b19906131ab565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c139190612fce565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c87906130cb565b60405180910390fd5b6000611c9a611322565b9050611cba818787611cab88612158565b611cb488612158565b87611f69565b60006001600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d499061310b565b60405180910390fd5b8381036001600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550836001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e0991906133ca565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611e86929190613246565b60405180910390a4611e9c8288888888886121d2565b50505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050505050565b611f908473ffffffffffffffffffffffffffffffffffffffff166123b9565b15612150578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611fd6959493929190612eb3565b602060405180830381600087803b158015611ff057600080fd5b505af192505050801561202157506040513d601f19601f8201168201806040525081019061201e9190612a29565b60015b6120c75761202d61375d565b806308c379a0141561208a5750612042613c37565b8061204d575061208c565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120819190612fe9565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120be9061300b565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461214e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121459061302b565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff8111156121775761217661372e565b5b6040519080825280602002602001820160405280156121a55781602001602082028036833780820191505090505b50905082816000815181106121bd576121bc6136ff565b5b60200260200101818152505080915050919050565b6121f18473ffffffffffffffffffffffffffffffffffffffff166123b9565b156123b1578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612237959493929190612f1b565b602060405180830381600087803b15801561225157600080fd5b505af192505050801561228257506040513d601f19601f8201168201806040525081019061227f9190612a29565b60015b6123285761228e61375d565b806308c379a014156122eb57506122a3613c37565b806122ae57506122ed565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e29190612fe9565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231f9061300b565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146123af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a69061302b565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546123e890613595565b90600052602060002090601f01602090048101928261240a5760008555612451565b82601f1061242357805160ff1916838001178555612451565b82800160010185558215612451579182015b82811115612450578251825591602001919060010190612435565b5b50905061245e9190612462565b5090565b5b8082111561247b576000816000905550600101612463565b5090565b600061249261248d84613294565b61326f565b905080838252602082019050828560208602820111156124b5576124b4613784565b5b60005b858110156124e557816124cb88826125e3565b8452602084019350602083019250506001810190506124b8565b5050509392505050565b60006125026124fd846132c0565b61326f565b9050808382526020820190508285602086028201111561252557612524613784565b5b60005b85811015612555578161253b88826126ef565b845260208401935060208301925050600181019050612528565b5050509392505050565b600061257261256d846132ec565b61326f565b90508281526020810184848401111561258e5761258d613789565b5b612599848285613553565b509392505050565b60006125b46125af8461331d565b61326f565b9050828152602081018484840111156125d0576125cf613789565b5b6125db848285613553565b509392505050565b6000813590506125f281613ccd565b92915050565b600082601f83011261260d5761260c61377f565b5b813561261d84826020860161247f565b91505092915050565b600082601f83011261263b5761263a61377f565b5b813561264b8482602086016124ef565b91505092915050565b60008135905061266381613ce4565b92915050565b60008135905061267881613cfb565b92915050565b60008151905061268d81613cfb565b92915050565b600082601f8301126126a8576126a761377f565b5b81356126b884826020860161255f565b91505092915050565b600082601f8301126126d6576126d561377f565b5b81356126e68482602086016125a1565b91505092915050565b6000813590506126fe81613d12565b92915050565b60006020828403121561271a57612719613793565b5b6000612728848285016125e3565b91505092915050565b6000806040838503121561274857612747613793565b5b6000612756858286016125e3565b9250506020612767858286016125e3565b9150509250929050565b600080600080600060a0868803121561278d5761278c613793565b5b600061279b888289016125e3565b95505060206127ac888289016125e3565b945050604086013567ffffffffffffffff8111156127cd576127cc61378e565b5b6127d988828901612626565b935050606086013567ffffffffffffffff8111156127fa576127f961378e565b5b61280688828901612626565b925050608086013567ffffffffffffffff8111156128275761282661378e565b5b61283388828901612693565b9150509295509295909350565b600080600080600060a0868803121561285c5761285b613793565b5b600061286a888289016125e3565b955050602061287b888289016125e3565b945050604061288c888289016126ef565b935050606061289d888289016126ef565b925050608086013567ffffffffffffffff8111156128be576128bd61378e565b5b6128ca88828901612693565b9150509295509295909350565b600080604083850312156128ee576128ed613793565b5b60006128fc858286016125e3565b925050602061290d85828601612654565b9150509250929050565b6000806040838503121561292e5761292d613793565b5b600061293c858286016125e3565b925050602061294d858286016126ef565b9150509250929050565b6000806040838503121561296e5761296d613793565b5b600083013567ffffffffffffffff81111561298c5761298b61378e565b5b612998858286016125f8565b925050602083013567ffffffffffffffff8111156129b9576129b861378e565b5b6129c585828601612626565b9150509250929050565b6000602082840312156129e5576129e4613793565b5b60006129f384828501612654565b91505092915050565b600060208284031215612a1257612a11613793565b5b6000612a2084828501612669565b91505092915050565b600060208284031215612a3f57612a3e613793565b5b6000612a4d8482850161267e565b91505092915050565b600060208284031215612a6c57612a6b613793565b5b600082013567ffffffffffffffff811115612a8a57612a8961378e565b5b612a96848285016126c1565b91505092915050565b600060208284031215612ab557612ab4613793565b5b6000612ac3848285016126ef565b91505092915050565b6000612ad88383612e56565b60208301905092915050565b612aed816134df565b82525050565b6000612afe8261335e565b612b08818561338c565b9350612b138361334e565b8060005b83811015612b44578151612b2b8882612acc565b9750612b368361337f565b925050600181019050612b17565b5085935050505092915050565b612b5a816134f1565b82525050565b6000612b6b82613369565b612b75818561339d565b9350612b85818560208601613562565b612b8e81613798565b840191505092915050565b6000612ba482613374565b612bae81856133ae565b9350612bbe818560208601613562565b612bc781613798565b840191505092915050565b6000612bdd82613374565b612be781856133bf565b9350612bf7818560208601613562565b80840191505092915050565b6000612c106034836133ae565b9150612c1b826137b6565b604082019050919050565b6000612c336028836133ae565b9150612c3e82613805565b604082019050919050565b6000612c56602b836133ae565b9150612c6182613854565b604082019050919050565b6000612c796026836133ae565b9150612c84826138a3565b604082019050919050565b6000612c9c600f836133ae565b9150612ca7826138f2565b602082019050919050565b6000612cbf6029836133ae565b9150612cca8261391b565b604082019050919050565b6000612ce26025836133ae565b9150612ced8261396a565b604082019050919050565b6000612d056032836133ae565b9150612d10826139b9565b604082019050919050565b6000612d28602a836133ae565b9150612d3382613a08565b604082019050919050565b6000612d4b600d836133ae565b9150612d5682613a57565b602082019050919050565b6000612d6e600a836133ae565b9150612d7982613a80565b602082019050919050565b6000612d916020836133ae565b9150612d9c82613aa9565b602082019050919050565b6000612db46011836133ae565b9150612dbf82613ad2565b602082019050919050565b6000612dd76029836133ae565b9150612de282613afb565b604082019050919050565b6000612dfa6029836133ae565b9150612e0582613b4a565b604082019050919050565b6000612e1d6028836133ae565b9150612e2882613b99565b604082019050919050565b6000612e406021836133ae565b9150612e4b82613be8565b604082019050919050565b612e5f81613549565b82525050565b612e6e81613549565b82525050565b6000612e808285612bd2565b9150612e8c8284612bd2565b91508190509392505050565b6000602082019050612ead6000830184612ae4565b92915050565b600060a082019050612ec86000830188612ae4565b612ed56020830187612ae4565b8181036040830152612ee78186612af3565b90508181036060830152612efb8185612af3565b90508181036080830152612f0f8184612b60565b90509695505050505050565b600060a082019050612f306000830188612ae4565b612f3d6020830187612ae4565b612f4a6040830186612e65565b612f576060830185612e65565b8181036080830152612f698184612b60565b90509695505050505050565b60006020820190508181036000830152612f8f8184612af3565b905092915050565b60006040820190508181036000830152612fb18185612af3565b90508181036020830152612fc58184612af3565b90509392505050565b6000602082019050612fe36000830184612b51565b92915050565b600060208201905081810360008301526130038184612b99565b905092915050565b6000602082019050818103600083015261302481612c03565b9050919050565b6000602082019050818103600083015261304481612c26565b9050919050565b6000602082019050818103600083015261306481612c49565b9050919050565b6000602082019050818103600083015261308481612c6c565b9050919050565b600060208201905081810360008301526130a481612c8f565b9050919050565b600060208201905081810360008301526130c481612cb2565b9050919050565b600060208201905081810360008301526130e481612cd5565b9050919050565b6000602082019050818103600083015261310481612cf8565b9050919050565b6000602082019050818103600083015261312481612d1b565b9050919050565b6000602082019050818103600083015261314481612d3e565b9050919050565b6000602082019050818103600083015261316481612d61565b9050919050565b6000602082019050818103600083015261318481612d84565b9050919050565b600060208201905081810360008301526131a481612da7565b9050919050565b600060208201905081810360008301526131c481612dca565b9050919050565b600060208201905081810360008301526131e481612ded565b9050919050565b6000602082019050818103600083015261320481612e10565b9050919050565b6000602082019050818103600083015261322481612e33565b9050919050565b60006020820190506132406000830184612e65565b92915050565b600060408201905061325b6000830185612e65565b6132686020830184612e65565b9392505050565b600061327961328a565b905061328582826135c7565b919050565b6000604051905090565b600067ffffffffffffffff8211156132af576132ae61372e565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156132db576132da61372e565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156133075761330661372e565b5b61331082613798565b9050602081019050919050565b600067ffffffffffffffff8211156133385761333761372e565b5b61334182613798565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006133d582613549565b91506133e083613549565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561341557613414613672565b5b828201905092915050565b600061342b82613549565b915061343683613549565b925082613446576134456136a1565b5b828204905092915050565b600061345c82613549565b915061346783613549565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156134a05761349f613672565b5b828202905092915050565b60006134b682613549565b91506134c183613549565b9250828210156134d4576134d3613672565b5b828203905092915050565b60006134ea82613529565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613580578082015181840152602081019050613565565b8381111561358f576000848401525b50505050565b600060028204905060018216806135ad57607f821691505b602082108114156135c1576135c06136d0565b5b50919050565b6135d082613798565b810181811067ffffffffffffffff821117156135ef576135ee61372e565b5b80604052505050565b600061360382613549565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561363657613635613672565b5b600182019050919050565b600061364c82613549565b915061365783613549565b925082613667576136666136a1565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561377c5760046000803e6137796000516137a9565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f53616c65206e6f7420656e61626c650000000000000000000000000000000000600082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f45786365656473206c696d697400000000000000000000000000000000000000600082015250565b7f4578636565647320353000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613c4757613cca565b613c4f61328a565b60043d036004823e80513d602482011167ffffffffffffffff82111715613c77575050613cca565b808201805167ffffffffffffffff811115613c955750505050613cca565b80602083010160043d038501811115613cb2575050505050613cca565b613cc1826020018501866135c7565b82955050505050505b90565b613cd6816134df565b8114613ce157600080fd5b50565b613ced816134f1565b8114613cf857600080fd5b50565b613d04816134fd565b8114613d0f57600080fd5b50565b613d1b81613549565b8114613d2657600080fd5b5056fea2646970667358221220e3f013a701505d007d0f6792c6264e665b741371b1d8bec09c87490f9a78f75664736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001243727970746f50756e6b7342756e6e696573000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034350420000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002368747470733a2f2f6170692e63727970746f70756e6b7362756e6e6965732e636f6d2f0000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061013f5760003560e01c80636e1bd323116100b6578063c7876ea41161006f578063c7876ea41461042d578063de4b326214610458578063e985e9c514610481578063f242432a146104be578063f2fde38b146104e7578063fe4ca847146105105761013f565b80636e1bd32314610350578063853828b61461037b5780638da5cb5b1461038557806395d89b41146103b0578063a22cb465146103db578063b02636fd146104045761013f565b80630e89341c116101085780630e89341c1461023d57806318160ddd1461027a5780632eb2c2d6146102a557806340c10f19146102ce5780634e1273f4146102ea57806355f804b3146103275761013f565b8062fdd58e1461014457806301ffc9a71461018157806306fdde03146101be57806309acc2cb146101e95780630dccc9ad14610212575b600080fd5b34801561015057600080fd5b5061016b60048036038101906101669190612917565b61053b565b604051610178919061322b565b60405180910390f35b34801561018d57600080fd5b506101a860048036038101906101a391906129fc565b610605565b6040516101b59190612fce565b60405180910390f35b3480156101ca57600080fd5b506101d36106e7565b6040516101e09190612fe9565b60405180910390f35b3480156101f557600080fd5b50610210600480360381019061020b9190612a9f565b610775565b005b34801561021e57600080fd5b506102276107fb565b6040516102349190612fe9565b60405180910390f35b34801561024957600080fd5b50610264600480360381019061025f9190612a9f565b610889565b6040516102719190612fe9565b60405180910390f35b34801561028657600080fd5b5061028f610991565b60405161029c919061322b565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c79190612771565b61099b565b005b6102e860048036038101906102e39190612917565b610a3c565b005b3480156102f657600080fd5b50610311600480360381019061030c9190612957565b610c4b565b60405161031e9190612f75565b60405180910390f35b34801561033357600080fd5b5061034e60048036038101906103499190612a56565b610d64565b005b34801561035c57600080fd5b50610365610dfa565b604051610372919061322b565b60405180910390f35b610383610e00565b005b34801561039157600080fd5b5061039a610e86565b6040516103a79190612e98565b60405180910390f35b3480156103bc57600080fd5b506103c5610eaf565b6040516103d29190612fe9565b60405180910390f35b3480156103e757600080fd5b5061040260048036038101906103fd91906128d7565b610f3d565b005b34801561041057600080fd5b5061042b600480360381019061042691906129cf565b610f53565b005b34801561043957600080fd5b50610442610fec565b60405161044f919061322b565b60405180910390f35b34801561046457600080fd5b5061047f600480360381019061047a9190612a9f565b610ff2565b005b34801561048d57600080fd5b506104a860048036038101906104a39190612731565b611078565b6040516104b59190612fce565b60405180910390f35b3480156104ca57600080fd5b506104e560048036038101906104e09190612840565b61110c565b005b3480156104f357600080fd5b5061050e60048036038101906105099190612704565b6111ad565b005b34801561051c57600080fd5b506105256112a5565b6040516105329190612fce565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a39061304b565b60405180910390fd5b6001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106d057507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106e057506106df826112b8565b5b9050919050565b600680546106f490613595565b80601f016020809104026020016040519081016040528092919081815260200182805461072090613595565b801561076d5780601f106107425761010080835404028352916020019161076d565b820191906000526020600020905b81548152906001019060200180831161075057829003601f168201915b505050505081565b61077d611322565b73ffffffffffffffffffffffffffffffffffffffff1661079b610e86565b73ffffffffffffffffffffffffffffffffffffffff16146107f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e89061316b565b60405180910390fd5b8060088190555050565b6003805461080890613595565b80601f016020809104026020016040519081016040528092919081815260200182805461083490613595565b80156108815780601f1061085657610100808354040283529160200191610881565b820191906000526020600020905b81548152906001019060200180831161086457829003601f168201915b505050505081565b606060006003805461089a90613595565b80601f01602080910402602001604051908101604052809291908181526020018280546108c690613595565b80156109135780601f106108e857610100808354040283529160200191610913565b820191906000526020600020905b8154815290600101906020018083116108f657829003601f168201915b50505050509050600081511161095e576040518060400160405280600b81526020017f757269206e6f7420736574000000000000000000000000000000000000000000815250610989565b806109688461132a565b604051602001610979929190612e74565b6040516020818303038152906040525b915050919050565b6000600b54905090565b6109a3611322565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806109e957506109e8856109e3611322565b611078565b5b610a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1f906130eb565b60405180910390fd5b610a35858585858561148b565b5050505050565b610a44610e86565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610a895750600a60009054906101000a900460ff165b610ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abf9061308b565b60405180910390fd5b60085481610ad4610991565b610ade91906133ca565b1115610b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b169061312b565b60405180910390fd5b6032811115610b63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5a9061314b565b60405180910390fd5b80600954610b719190613451565b34101580610bb15750610b82610e86565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610bf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be79061318b565b60405180910390fd5b60005b81811015610c4657610c1e83610c07610991565b6001604051806020016040528060008152506117a2565b6001600b54610c2d91906133ca565b600b819055508080610c3e906135f8565b915050610bf3565b505050565b60608151835114610c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c88906131cb565b60405180910390fd5b6000835167ffffffffffffffff811115610cae57610cad61372e565b5b604051908082528060200260200182016040528015610cdc5781602001602082028036833780820191505090505b50905060005b8451811015610d5957610d29858281518110610d0157610d006136ff565b5b6020026020010151858381518110610d1c57610d1b6136ff565b5b602002602001015161053b565b828281518110610d3c57610d3b6136ff565b5b60200260200101818152505080610d52906135f8565b9050610ce2565b508091505092915050565b610d6c611322565b73ffffffffffffffffffffffffffffffffffffffff16610d8a610e86565b73ffffffffffffffffffffffffffffffffffffffff1614610de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd79061316b565b60405180910390fd5b8060039080519060200190610df69291906123dc565b5050565b60085481565b610e08611322565b73ffffffffffffffffffffffffffffffffffffffff16610e26610e86565b73ffffffffffffffffffffffffffffffffffffffff1614610e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e739061316b565b60405180910390fd5b610e84611939565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60078054610ebc90613595565b80601f0160208091040260200160405190810160405280929190818152602001828054610ee890613595565b8015610f355780601f10610f0a57610100808354040283529160200191610f35565b820191906000526020600020905b815481529060010190602001808311610f1857829003601f168201915b505050505081565b610f4f610f48611322565b8383611ab3565b5050565b610f5b611322565b73ffffffffffffffffffffffffffffffffffffffff16610f79610e86565b73ffffffffffffffffffffffffffffffffffffffff1614610fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc69061316b565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b60095481565b610ffa611322565b73ffffffffffffffffffffffffffffffffffffffff16611018610e86565b73ffffffffffffffffffffffffffffffffffffffff161461106e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110659061316b565b60405180910390fd5b8060098190555050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611114611322565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061115a575061115985611154611322565b611078565b5b611199576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611190906130ab565b60405180910390fd5b6111a68585858585611c20565b5050505050565b6111b5611322565b73ffffffffffffffffffffffffffffffffffffffff166111d3610e86565b73ffffffffffffffffffffffffffffffffffffffff1614611229576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112209061316b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611299576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112909061306b565b60405180910390fd5b6112a281611ea5565b50565b600a60009054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60606000821415611372576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611486565b600082905060005b600082146113a457808061138d906135f8565b915050600a8261139d9190613420565b915061137a565b60008167ffffffffffffffff8111156113c0576113bf61372e565b5b6040519080825280601f01601f1916602001820160405280156113f25781602001600182028036833780820191505090505b5090505b6000851461147f5760018261140b91906134ab565b9150600a8561141a9190613641565b603061142691906133ca565b60f81b81838151811061143c5761143b6136ff565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856114789190613420565b94506113f6565b8093505050505b919050565b81518351146114cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c6906131eb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561153f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611536906130cb565b60405180910390fd5b6000611549611322565b9050611559818787878787611f69565b60005b845181101561170d57600085828151811061157a576115796136ff565b5b602002602001015190506000858381518110611599576115986136ff565b5b6020026020010151905060006001600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561163b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116329061310b565b60405180910390fd5b8181036001600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816001600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116f291906133ca565b9250508190555050505080611706906135f8565b905061155c565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611784929190612f97565b60405180910390a461179a818787878787611f71565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611812576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118099061320b565b60405180910390fd5b600061181c611322565b905061183d8160008761182e88612158565b61183788612158565b87611f69565b826001600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461189d91906133ca565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161191b929190613246565b60405180910390a4611932816000878787876121d2565b5050505050565b6000606460144761194a9190613451565b6119549190613420565b905060006064600c476119679190613451565b6119719190613420565b9050600081834761198291906134ab565b61198c91906134ab565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156119f6573d6000803e3d6000fd5b50600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611a5f573d6000803e3d6000fd5b50611a68611322565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611aad573d6000803e3d6000fd5b50505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b19906131ab565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c139190612fce565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c87906130cb565b60405180910390fd5b6000611c9a611322565b9050611cba818787611cab88612158565b611cb488612158565b87611f69565b60006001600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d499061310b565b60405180910390fd5b8381036001600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550836001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e0991906133ca565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611e86929190613246565b60405180910390a4611e9c8288888888886121d2565b50505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050505050565b611f908473ffffffffffffffffffffffffffffffffffffffff166123b9565b15612150578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611fd6959493929190612eb3565b602060405180830381600087803b158015611ff057600080fd5b505af192505050801561202157506040513d601f19601f8201168201806040525081019061201e9190612a29565b60015b6120c75761202d61375d565b806308c379a0141561208a5750612042613c37565b8061204d575061208c565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120819190612fe9565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120be9061300b565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461214e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121459061302b565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff8111156121775761217661372e565b5b6040519080825280602002602001820160405280156121a55781602001602082028036833780820191505090505b50905082816000815181106121bd576121bc6136ff565b5b60200260200101818152505080915050919050565b6121f18473ffffffffffffffffffffffffffffffffffffffff166123b9565b156123b1578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612237959493929190612f1b565b602060405180830381600087803b15801561225157600080fd5b505af192505050801561228257506040513d601f19601f8201168201806040525081019061227f9190612a29565b60015b6123285761228e61375d565b806308c379a014156122eb57506122a3613c37565b806122ae57506122ed565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e29190612fe9565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231f9061300b565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146123af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a69061302b565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546123e890613595565b90600052602060002090601f01602090048101928261240a5760008555612451565b82601f1061242357805160ff1916838001178555612451565b82800160010185558215612451579182015b82811115612450578251825591602001919060010190612435565b5b50905061245e9190612462565b5090565b5b8082111561247b576000816000905550600101612463565b5090565b600061249261248d84613294565b61326f565b905080838252602082019050828560208602820111156124b5576124b4613784565b5b60005b858110156124e557816124cb88826125e3565b8452602084019350602083019250506001810190506124b8565b5050509392505050565b60006125026124fd846132c0565b61326f565b9050808382526020820190508285602086028201111561252557612524613784565b5b60005b85811015612555578161253b88826126ef565b845260208401935060208301925050600181019050612528565b5050509392505050565b600061257261256d846132ec565b61326f565b90508281526020810184848401111561258e5761258d613789565b5b612599848285613553565b509392505050565b60006125b46125af8461331d565b61326f565b9050828152602081018484840111156125d0576125cf613789565b5b6125db848285613553565b509392505050565b6000813590506125f281613ccd565b92915050565b600082601f83011261260d5761260c61377f565b5b813561261d84826020860161247f565b91505092915050565b600082601f83011261263b5761263a61377f565b5b813561264b8482602086016124ef565b91505092915050565b60008135905061266381613ce4565b92915050565b60008135905061267881613cfb565b92915050565b60008151905061268d81613cfb565b92915050565b600082601f8301126126a8576126a761377f565b5b81356126b884826020860161255f565b91505092915050565b600082601f8301126126d6576126d561377f565b5b81356126e68482602086016125a1565b91505092915050565b6000813590506126fe81613d12565b92915050565b60006020828403121561271a57612719613793565b5b6000612728848285016125e3565b91505092915050565b6000806040838503121561274857612747613793565b5b6000612756858286016125e3565b9250506020612767858286016125e3565b9150509250929050565b600080600080600060a0868803121561278d5761278c613793565b5b600061279b888289016125e3565b95505060206127ac888289016125e3565b945050604086013567ffffffffffffffff8111156127cd576127cc61378e565b5b6127d988828901612626565b935050606086013567ffffffffffffffff8111156127fa576127f961378e565b5b61280688828901612626565b925050608086013567ffffffffffffffff8111156128275761282661378e565b5b61283388828901612693565b9150509295509295909350565b600080600080600060a0868803121561285c5761285b613793565b5b600061286a888289016125e3565b955050602061287b888289016125e3565b945050604061288c888289016126ef565b935050606061289d888289016126ef565b925050608086013567ffffffffffffffff8111156128be576128bd61378e565b5b6128ca88828901612693565b9150509295509295909350565b600080604083850312156128ee576128ed613793565b5b60006128fc858286016125e3565b925050602061290d85828601612654565b9150509250929050565b6000806040838503121561292e5761292d613793565b5b600061293c858286016125e3565b925050602061294d858286016126ef565b9150509250929050565b6000806040838503121561296e5761296d613793565b5b600083013567ffffffffffffffff81111561298c5761298b61378e565b5b612998858286016125f8565b925050602083013567ffffffffffffffff8111156129b9576129b861378e565b5b6129c585828601612626565b9150509250929050565b6000602082840312156129e5576129e4613793565b5b60006129f384828501612654565b91505092915050565b600060208284031215612a1257612a11613793565b5b6000612a2084828501612669565b91505092915050565b600060208284031215612a3f57612a3e613793565b5b6000612a4d8482850161267e565b91505092915050565b600060208284031215612a6c57612a6b613793565b5b600082013567ffffffffffffffff811115612a8a57612a8961378e565b5b612a96848285016126c1565b91505092915050565b600060208284031215612ab557612ab4613793565b5b6000612ac3848285016126ef565b91505092915050565b6000612ad88383612e56565b60208301905092915050565b612aed816134df565b82525050565b6000612afe8261335e565b612b08818561338c565b9350612b138361334e565b8060005b83811015612b44578151612b2b8882612acc565b9750612b368361337f565b925050600181019050612b17565b5085935050505092915050565b612b5a816134f1565b82525050565b6000612b6b82613369565b612b75818561339d565b9350612b85818560208601613562565b612b8e81613798565b840191505092915050565b6000612ba482613374565b612bae81856133ae565b9350612bbe818560208601613562565b612bc781613798565b840191505092915050565b6000612bdd82613374565b612be781856133bf565b9350612bf7818560208601613562565b80840191505092915050565b6000612c106034836133ae565b9150612c1b826137b6565b604082019050919050565b6000612c336028836133ae565b9150612c3e82613805565b604082019050919050565b6000612c56602b836133ae565b9150612c6182613854565b604082019050919050565b6000612c796026836133ae565b9150612c84826138a3565b604082019050919050565b6000612c9c600f836133ae565b9150612ca7826138f2565b602082019050919050565b6000612cbf6029836133ae565b9150612cca8261391b565b604082019050919050565b6000612ce26025836133ae565b9150612ced8261396a565b604082019050919050565b6000612d056032836133ae565b9150612d10826139b9565b604082019050919050565b6000612d28602a836133ae565b9150612d3382613a08565b604082019050919050565b6000612d4b600d836133ae565b9150612d5682613a57565b602082019050919050565b6000612d6e600a836133ae565b9150612d7982613a80565b602082019050919050565b6000612d916020836133ae565b9150612d9c82613aa9565b602082019050919050565b6000612db46011836133ae565b9150612dbf82613ad2565b602082019050919050565b6000612dd76029836133ae565b9150612de282613afb565b604082019050919050565b6000612dfa6029836133ae565b9150612e0582613b4a565b604082019050919050565b6000612e1d6028836133ae565b9150612e2882613b99565b604082019050919050565b6000612e406021836133ae565b9150612e4b82613be8565b604082019050919050565b612e5f81613549565b82525050565b612e6e81613549565b82525050565b6000612e808285612bd2565b9150612e8c8284612bd2565b91508190509392505050565b6000602082019050612ead6000830184612ae4565b92915050565b600060a082019050612ec86000830188612ae4565b612ed56020830187612ae4565b8181036040830152612ee78186612af3565b90508181036060830152612efb8185612af3565b90508181036080830152612f0f8184612b60565b90509695505050505050565b600060a082019050612f306000830188612ae4565b612f3d6020830187612ae4565b612f4a6040830186612e65565b612f576060830185612e65565b8181036080830152612f698184612b60565b90509695505050505050565b60006020820190508181036000830152612f8f8184612af3565b905092915050565b60006040820190508181036000830152612fb18185612af3565b90508181036020830152612fc58184612af3565b90509392505050565b6000602082019050612fe36000830184612b51565b92915050565b600060208201905081810360008301526130038184612b99565b905092915050565b6000602082019050818103600083015261302481612c03565b9050919050565b6000602082019050818103600083015261304481612c26565b9050919050565b6000602082019050818103600083015261306481612c49565b9050919050565b6000602082019050818103600083015261308481612c6c565b9050919050565b600060208201905081810360008301526130a481612c8f565b9050919050565b600060208201905081810360008301526130c481612cb2565b9050919050565b600060208201905081810360008301526130e481612cd5565b9050919050565b6000602082019050818103600083015261310481612cf8565b9050919050565b6000602082019050818103600083015261312481612d1b565b9050919050565b6000602082019050818103600083015261314481612d3e565b9050919050565b6000602082019050818103600083015261316481612d61565b9050919050565b6000602082019050818103600083015261318481612d84565b9050919050565b600060208201905081810360008301526131a481612da7565b9050919050565b600060208201905081810360008301526131c481612dca565b9050919050565b600060208201905081810360008301526131e481612ded565b9050919050565b6000602082019050818103600083015261320481612e10565b9050919050565b6000602082019050818103600083015261322481612e33565b9050919050565b60006020820190506132406000830184612e65565b92915050565b600060408201905061325b6000830185612e65565b6132686020830184612e65565b9392505050565b600061327961328a565b905061328582826135c7565b919050565b6000604051905090565b600067ffffffffffffffff8211156132af576132ae61372e565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156132db576132da61372e565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156133075761330661372e565b5b61331082613798565b9050602081019050919050565b600067ffffffffffffffff8211156133385761333761372e565b5b61334182613798565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006133d582613549565b91506133e083613549565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561341557613414613672565b5b828201905092915050565b600061342b82613549565b915061343683613549565b925082613446576134456136a1565b5b828204905092915050565b600061345c82613549565b915061346783613549565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156134a05761349f613672565b5b828202905092915050565b60006134b682613549565b91506134c183613549565b9250828210156134d4576134d3613672565b5b828203905092915050565b60006134ea82613529565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613580578082015181840152602081019050613565565b8381111561358f576000848401525b50505050565b600060028204905060018216806135ad57607f821691505b602082108114156135c1576135c06136d0565b5b50919050565b6135d082613798565b810181811067ffffffffffffffff821117156135ef576135ee61372e565b5b80604052505050565b600061360382613549565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561363657613635613672565b5b600182019050919050565b600061364c82613549565b915061365783613549565b925082613667576136666136a1565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561377c5760046000803e6137796000516137a9565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f53616c65206e6f7420656e61626c650000000000000000000000000000000000600082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f45786365656473206c696d697400000000000000000000000000000000000000600082015250565b7f4578636565647320353000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613c4757613cca565b613c4f61328a565b60043d036004823e80513d602482011167ffffffffffffffff82111715613c77575050613cca565b808201805167ffffffffffffffff811115613c955750505050613cca565b80602083010160043d038501811115613cb2575050505050613cca565b613cc1826020018501866135c7565b82955050505050505b90565b613cd6816134df565b8114613ce157600080fd5b50565b613ced816134f1565b8114613cf857600080fd5b50565b613d04816134fd565b8114613d0f57600080fd5b50565b613d1b81613549565b8114613d2657600080fd5b5056fea2646970667358221220e3f013a701505d007d0f6792c6264e665b741371b1d8bec09c87490f9a78f75664736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001243727970746f50756e6b7342756e6e696573000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034350420000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002368747470733a2f2f6170692e63727970746f70756e6b7362756e6e6965732e636f6d2f0000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): CryptoPunksBunnies
Arg [1] : symbol_ (string): CPB
Arg [2] : uri_ (string): https://api.cryptopunksbunnies.com/

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [4] : 43727970746f50756e6b7342756e6e6965730000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 4350420000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000023
Arg [8] : 68747470733a2f2f6170692e63727970746f70756e6b7362756e6e6965732e63
Arg [9] : 6f6d2f0000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

38186:1619:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24097:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22950:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38232:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38760:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22807:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23671:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39699:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26036:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38975:516;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24494:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39499:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38284:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39606:81;;;:::i;:::-;;20640:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38257:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25091:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38645:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38320:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38866:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25318:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25558:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21442:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38398:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24097:231;24183:7;24230:1;24211:21;;:7;:21;;;;24203:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;24298:9;:13;24308:2;24298:13;;;;;;;;;;;:22;24312:7;24298:22;;;;;;;;;;;;;;;;24291:29;;24097:231;;;;:::o;22950:310::-;23052:4;23104:26;23089:41;;;:11;:41;;;;:110;;;;23162:37;23147:52;;;:11;:52;;;;23089:110;:163;;;;23216:36;23240:11;23216:23;:36::i;:::-;23089:163;23069:183;;22950:310;;;:::o;38232:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38760:98::-;20871:12;:10;:12::i;:::-;20860:23;;:7;:5;:7::i;:::-;:23;;;20852:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38840:10:::1;38828:9;:22;;;;38760:98:::0;:::o;22807:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23671:271::-;23739:13;23765:21;23789:4;23765:28;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23835:1;23817:7;23811:21;:25;:123;;;;;;;;;;;;;;;;;;;;;;23876:7;23885:18;:7;:16;:18::i;:::-;23859:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23811:123;23804:130;;;23671:271;;;:::o;39699:99::-;39751:7;39778:12;;39771:19;;39699:99;:::o;26036:442::-;26277:12;:10;:12::i;:::-;26269:20;;:4;:20;;;:60;;;;26293:36;26310:4;26316:12;:10;:12::i;:::-;26293:16;:36::i;:::-;26269:60;26247:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;26418:52;26441:4;26447:2;26451:3;26456:7;26465:4;26418:22;:52::i;:::-;26036:442;;;;;:::o;38975:516::-;39063:7;:5;:7::i;:::-;39049:21;;:10;:21;;;:35;;;;39074:10;;;;;;;;;;;39049:35;39041:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;39148:9;;39138:6;39123:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:34;;39115:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;39204:2;39194:6;:12;;39186:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;39265:6;39253:9;;:18;;;;:::i;:::-;39240:9;:31;;:56;;;;39289:7;:5;:7::i;:::-;39275:21;;:10;:21;;;39240:56;39232:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39336:6;39332:141;39352:6;39348:1;:10;39332:141;;;39379:32;39385:3;39390:13;:11;:13::i;:::-;39405:1;39379:32;;;;;;;;;;;;:5;:32::i;:::-;39456:1;39441:12;;:16;;;;:::i;:::-;39426:12;:31;;;;39360:3;;;;;:::i;:::-;;;;39332:141;;;;38975:516;;:::o;24494:524::-;24650:16;24711:3;:10;24692:8;:15;:29;24684:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;24780:30;24827:8;:15;24813:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24780:63;;24861:9;24856:122;24880:8;:15;24876:1;:19;24856:122;;;24936:30;24946:8;24955:1;24946:11;;;;;;;;:::i;:::-;;;;;;;;24959:3;24963:1;24959:6;;;;;;;;:::i;:::-;;;;;;;;24936:9;:30::i;:::-;24917:13;24931:1;24917:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;24897:3;;;;:::i;:::-;;;24856:122;;;;24997:13;24990:20;;;24494:524;;;;:::o;39499:93::-;20871:12;:10;:12::i;:::-;20860:23;;:7;:5;:7::i;:::-;:23;;;20852:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39577:7:::1;39570:4;:14;;;;;;;;;;;;:::i;:::-;;39499:93:::0;:::o;38284:29::-;;;;:::o;39606:81::-;20871:12;:10;:12::i;:::-;20860:23;;:7;:5;:7::i;:::-;:23;;;20852:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39665:14:::1;:12;:14::i;:::-;39606:81::o:0;20640:87::-;20686:7;20713:6;;;;;;;;;;;20706:13;;20640:87;:::o;38257:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25091:155::-;25186:52;25205:12;:10;:12::i;:::-;25219:8;25229;25186:18;:52::i;:::-;25091:155;;:::o;38645:103::-;20871:12;:10;:12::i;:::-;20860:23;;:7;:5;:7::i;:::-;:23;;;20852:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38729:11:::1;38716:10;;:24;;;;;;;;;;;;;;;;;;38645:103:::0;:::o;38320:34::-;;;;:::o;38866:99::-;20871:12;:10;:12::i;:::-;20860:23;;:7;:5;:7::i;:::-;:23;;;20852:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38947:10:::1;38935:9;:22;;;;38866:99:::0;:::o;25318:168::-;25417:4;25441:18;:27;25460:7;25441:27;;;;;;;;;;;;;;;:37;25469:8;25441:37;;;;;;;;;;;;;;;;;;;;;;;;;25434:44;;25318:168;;;;:::o;25558:401::-;25774:12;:10;:12::i;:::-;25766:20;;:4;:20;;;:60;;;;25790:36;25807:4;25813:12;:10;:12::i;:::-;25790:16;:36::i;:::-;25766:60;25744:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;25906:45;25924:4;25930:2;25934;25938:6;25946:4;25906:17;:45::i;:::-;25558:401;;;;;:::o;21442:201::-;20871:12;:10;:12::i;:::-;20860:23;;:7;:5;:7::i;:::-;:23;;;20852:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21551:1:::1;21531:22;;:8;:22;;;;21523:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21607:28;21626:8;21607:18;:28::i;:::-;21442:201:::0;:::o;38398:30::-;;;;;;;;;;;;;:::o;10899:157::-;10984:4;11023:25;11008:40;;;:11;:40;;;;11001:47;;10899:157;;;:::o;20012:98::-;20065:7;20092:10;20085:17;;20012:98;:::o;581:723::-;637:13;867:1;858:5;:10;854:53;;;885:10;;;;;;;;;;;;;;;;;;;;;854:53;917:12;932:5;917:20;;948:14;973:78;988:1;980:4;:9;973:78;;1006:8;;;;;:::i;:::-;;;;1037:2;1029:10;;;;;:::i;:::-;;;973:78;;;1061:19;1093:6;1083:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1061:39;;1111:154;1127:1;1118:5;:10;1111:154;;1155:1;1145:11;;;;;:::i;:::-;;;1222:2;1214:5;:10;;;;:::i;:::-;1201:2;:24;;;;:::i;:::-;1188:39;;1171:6;1178;1171:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1251:2;1242:11;;;;;:::i;:::-;;;1111:154;;;1289:6;1275:21;;;;;581:723;;;;:::o;28120:1074::-;28347:7;:14;28333:3;:10;:28;28325:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;28439:1;28425:16;;:2;:16;;;;28417:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28496:16;28515:12;:10;:12::i;:::-;28496:31;;28540:60;28561:8;28571:4;28577:2;28581:3;28586:7;28595:4;28540:20;:60::i;:::-;28618:9;28613:421;28637:3;:10;28633:1;:14;28613:421;;;28669:10;28682:3;28686:1;28682:6;;;;;;;;:::i;:::-;;;;;;;;28669:19;;28703:14;28720:7;28728:1;28720:10;;;;;;;;:::i;:::-;;;;;;;;28703:27;;28747:19;28769:9;:13;28779:2;28769:13;;;;;;;;;;;:19;28783:4;28769:19;;;;;;;;;;;;;;;;28747:41;;28826:6;28811:11;:21;;28803:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28959:6;28945:11;:20;28923:9;:13;28933:2;28923:13;;;;;;;;;;;:19;28937:4;28923:19;;;;;;;;;;;;;;;:42;;;;29016:6;28995:9;:13;29005:2;28995:13;;;;;;;;;;;:17;29009:2;28995:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28654:380;;;28649:3;;;;:::i;:::-;;;28613:421;;;;29081:2;29051:47;;29075:4;29051:47;;29065:8;29051:47;;;29085:3;29090:7;29051:47;;;;;;;:::i;:::-;;;;;;;;29111:75;29147:8;29157:4;29163:2;29167:3;29172:7;29181:4;29111:35;:75::i;:::-;28314:880;28120:1074;;;;;:::o;30512:569::-;30679:1;30665:16;;:2;:16;;;;30657:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30732:16;30751:12;:10;:12::i;:::-;30732:31;;30776:102;30797:8;30815:1;30819:2;30823:21;30841:2;30823:17;:21::i;:::-;30846:25;30864:6;30846:17;:25::i;:::-;30873:4;30776:20;:102::i;:::-;30912:6;30891:9;:13;30901:2;30891:13;;;;;;;;;;;:17;30905:2;30891:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30971:2;30934:52;;30967:1;30934:52;;30949:8;30934:52;;;30975:2;30979:6;30934:52;;;;;;;:::i;:::-;;;;;;;;30999:74;31030:8;31048:1;31052:2;31056;31060:6;31068:4;30999:30;:74::i;:::-;30646:435;30512:569;;;;:::o;37787:382::-;37839:18;37885:3;37882:2;37860:21;:24;;;;:::i;:::-;:28;;;;:::i;:::-;37839:49;;37898:17;37943:3;37940:2;37918:21;:24;;;;:::i;:::-;:28;;;;:::i;:::-;37898:48;;37956:20;38012:9;38001:10;37979:21;:32;;;;:::i;:::-;:42;;;;:::i;:::-;37956:65;;38039:3;;;;;;;;;;;38031:21;;:33;38053:10;38031:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38082:2;;;;;;;;;;;38074:20;;:31;38095:9;38074:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38123:12;:10;:12::i;:::-;38115:30;;:44;38146:12;38115:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37829:340;;;37787:382::o;34306:331::-;34461:8;34452:17;;:5;:17;;;;34444:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;34564:8;34526:18;:25;34545:5;34526:25;;;;;;;;;;;;;;;:35;34552:8;34526:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34610:8;34588:41;;34603:5;34588:41;;;34620:8;34588:41;;;;;;:::i;:::-;;;;;;;;34306:331;;;:::o;26942:820::-;27144:1;27130:16;;:2;:16;;;;27122:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27201:16;27220:12;:10;:12::i;:::-;27201:31;;27245:96;27266:8;27276:4;27282:2;27286:21;27304:2;27286:17;:21::i;:::-;27309:25;27327:6;27309:17;:25::i;:::-;27336:4;27245:20;:96::i;:::-;27354:19;27376:9;:13;27386:2;27376:13;;;;;;;;;;;:19;27390:4;27376:19;;;;;;;;;;;;;;;;27354:41;;27429:6;27414:11;:21;;27406:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27554:6;27540:11;:20;27518:9;:13;27528:2;27518:13;;;;;;;;;;;:19;27532:4;27518:19;;;;;;;;;;;;;;;:42;;;;27603:6;27582:9;:13;27592:2;27582:13;;;;;;;;;;;:17;27596:2;27582:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27658:2;27627:46;;27652:4;27627:46;;27642:8;27627:46;;;27662:2;27666:6;27627:46;;;;;;;:::i;:::-;;;;;;;;27686:68;27717:8;27727:4;27733:2;27737;27741:6;27749:4;27686:30;:68::i;:::-;27111:651;;26942:820;;;;;:::o;21803:191::-;21877:16;21896:6;;;;;;;;;;;21877:25;;21922:8;21913:6;;:17;;;;;;;;;;;;;;;;;;21977:8;21946:40;;21967:8;21946:40;;;;;;;;;;;;21866:128;21803:191;:::o;35593:221::-;;;;;;;:::o;36574:813::-;36814:15;:2;:13;;;:15::i;:::-;36810:570;;;36867:2;36850:43;;;36894:8;36904:4;36910:3;36915:7;36924:4;36850:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36846:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;37242:6;37235:14;;;;;;;;;;;:::i;:::-;;;;;;;;36846:523;;;37291:62;;;;;;;;;;:::i;:::-;;;;;;;;36846:523;37023:48;;;37011:60;;;:8;:60;;;;37007:159;;37096:50;;;;;;;;;;:::i;:::-;;;;;;;;37007:159;36930:251;36810:570;36574:813;;;;;;:::o;37395:198::-;37461:16;37490:22;37529:1;37515:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37490:41;;37553:7;37542:5;37548:1;37542:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;37580:5;37573:12;;;37395:198;;;:::o;35822:744::-;36037:15;:2;:13;;;:15::i;:::-;36033:526;;;36090:2;36073:38;;;36112:8;36122:4;36128:2;36132:6;36140:4;36073:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36069:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;36421:6;36414:14;;;;;;;;;;;:::i;:::-;;;;;;;;36069:479;;;36470:62;;;;;;;;;;:::i;:::-;;;;;;;;36069:479;36207:43;;;36195:55;;;:8;:55;;;;36191:154;;36275:50;;;;;;;;;;:::i;:::-;;;;;;;;36191:154;36146:214;36033:526;35822:744;;;;;;:::o;12144:326::-;12204:4;12461:1;12439:7;:19;;;:23;12432:30;;12144:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4408:139;;;;:::o;4553:329::-;4612:6;4661:2;4649:9;4640:7;4636:23;4632:32;4629:119;;;4667:79;;:::i;:::-;4629:119;4787:1;4812:53;4857:7;4848:6;4837:9;4833:22;4812:53;:::i;:::-;4802:63;;4758:117;4553:329;;;;:::o;4888:474::-;4956:6;4964;5013:2;5001:9;4992:7;4988:23;4984:32;4981:119;;;5019:79;;:::i;:::-;4981:119;5139:1;5164:53;5209:7;5200:6;5189:9;5185:22;5164:53;:::i;:::-;5154:63;;5110:117;5266:2;5292:53;5337:7;5328:6;5317:9;5313:22;5292:53;:::i;:::-;5282:63;;5237:118;4888:474;;;;;:::o;5368:1509::-;5522:6;5530;5538;5546;5554;5603:3;5591:9;5582:7;5578:23;5574:33;5571:120;;;5610:79;;:::i;:::-;5571:120;5730:1;5755:53;5800:7;5791:6;5780:9;5776:22;5755:53;:::i;:::-;5745:63;;5701:117;5857:2;5883:53;5928:7;5919:6;5908:9;5904:22;5883:53;:::i;:::-;5873:63;;5828:118;6013:2;6002:9;5998:18;5985:32;6044:18;6036:6;6033:30;6030:117;;;6066:79;;:::i;:::-;6030:117;6171:78;6241:7;6232:6;6221:9;6217:22;6171:78;:::i;:::-;6161:88;;5956:303;6326:2;6315:9;6311:18;6298:32;6357:18;6349:6;6346:30;6343:117;;;6379:79;;:::i;:::-;6343:117;6484:78;6554:7;6545:6;6534:9;6530:22;6484:78;:::i;:::-;6474:88;;6269:303;6639:3;6628:9;6624:19;6611:33;6671:18;6663:6;6660:30;6657:117;;;6693:79;;:::i;:::-;6657:117;6798:62;6852:7;6843:6;6832:9;6828:22;6798:62;:::i;:::-;6788:72;;6582:288;5368:1509;;;;;;;;:::o;6883:1089::-;6987:6;6995;7003;7011;7019;7068:3;7056:9;7047:7;7043:23;7039:33;7036:120;;;7075:79;;:::i;:::-;7036:120;7195:1;7220:53;7265:7;7256:6;7245:9;7241:22;7220:53;:::i;:::-;7210:63;;7166:117;7322:2;7348:53;7393:7;7384:6;7373:9;7369:22;7348:53;:::i;:::-;7338:63;;7293:118;7450:2;7476:53;7521:7;7512:6;7501:9;7497:22;7476:53;:::i;:::-;7466:63;;7421:118;7578:2;7604:53;7649:7;7640:6;7629:9;7625:22;7604:53;:::i;:::-;7594:63;;7549:118;7734:3;7723:9;7719:19;7706:33;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:62;7947:7;7938:6;7927:9;7923:22;7893:62;:::i;:::-;7883:72;;7677:288;6883:1089;;;;;;;;:::o;7978:468::-;8043:6;8051;8100:2;8088:9;8079:7;8075:23;8071:32;8068:119;;;8106:79;;:::i;:::-;8068:119;8226:1;8251:53;8296:7;8287:6;8276:9;8272:22;8251:53;:::i;:::-;8241:63;;8197:117;8353:2;8379:50;8421:7;8412:6;8401:9;8397:22;8379:50;:::i;:::-;8369:60;;8324:115;7978:468;;;;;:::o;8452:474::-;8520:6;8528;8577:2;8565:9;8556:7;8552:23;8548:32;8545:119;;;8583:79;;:::i;:::-;8545:119;8703:1;8728:53;8773:7;8764:6;8753:9;8749:22;8728:53;:::i;:::-;8718:63;;8674:117;8830:2;8856:53;8901:7;8892:6;8881:9;8877:22;8856:53;:::i;:::-;8846:63;;8801:118;8452:474;;;;;:::o;8932:894::-;9050:6;9058;9107:2;9095:9;9086:7;9082:23;9078:32;9075:119;;;9113:79;;:::i;:::-;9075:119;9261:1;9250:9;9246:17;9233:31;9291:18;9283:6;9280:30;9277:117;;;9313:79;;:::i;:::-;9277:117;9418:78;9488:7;9479:6;9468:9;9464:22;9418:78;:::i;:::-;9408:88;;9204:302;9573:2;9562:9;9558:18;9545:32;9604:18;9596:6;9593:30;9590:117;;;9626:79;;:::i;:::-;9590:117;9731:78;9801:7;9792:6;9781:9;9777:22;9731:78;:::i;:::-;9721:88;;9516:303;8932:894;;;;;:::o;9832:323::-;9888:6;9937:2;9925:9;9916:7;9912:23;9908:32;9905:119;;;9943:79;;:::i;:::-;9905:119;10063:1;10088:50;10130:7;10121:6;10110:9;10106:22;10088:50;:::i;:::-;10078:60;;10034:114;9832:323;;;;:::o;10161:327::-;10219:6;10268:2;10256:9;10247:7;10243:23;10239:32;10236:119;;;10274:79;;:::i;:::-;10236:119;10394:1;10419:52;10463:7;10454:6;10443:9;10439:22;10419:52;:::i;:::-;10409:62;;10365:116;10161:327;;;;:::o;10494:349::-;10563:6;10612:2;10600:9;10591:7;10587:23;10583:32;10580:119;;;10618:79;;:::i;:::-;10580:119;10738:1;10763:63;10818:7;10809:6;10798:9;10794:22;10763:63;:::i;:::-;10753:73;;10709:127;10494:349;;;;:::o;10849:509::-;10918:6;10967:2;10955:9;10946:7;10942:23;10938:32;10935:119;;;10973:79;;:::i;:::-;10935:119;11121:1;11110:9;11106:17;11093:31;11151:18;11143:6;11140:30;11137:117;;;11173:79;;:::i;:::-;11137:117;11278:63;11333:7;11324:6;11313:9;11309:22;11278:63;:::i;:::-;11268:73;;11064:287;10849:509;;;;:::o;11364:329::-;11423:6;11472:2;11460:9;11451:7;11447:23;11443:32;11440:119;;;11478:79;;:::i;:::-;11440:119;11598:1;11623:53;11668:7;11659:6;11648:9;11644:22;11623:53;:::i;:::-;11613:63;;11569:117;11364:329;;;;:::o;11699:179::-;11768:10;11789:46;11831:3;11823:6;11789:46;:::i;:::-;11867:4;11862:3;11858:14;11844:28;;11699:179;;;;:::o;11884:118::-;11971:24;11989:5;11971:24;:::i;:::-;11966:3;11959:37;11884:118;;:::o;12038:732::-;12157:3;12186:54;12234:5;12186:54;:::i;:::-;12256:86;12335:6;12330:3;12256:86;:::i;:::-;12249:93;;12366:56;12416:5;12366:56;:::i;:::-;12445:7;12476:1;12461:284;12486:6;12483:1;12480:13;12461:284;;;12562:6;12556:13;12589:63;12648:3;12633:13;12589:63;:::i;:::-;12582:70;;12675:60;12728:6;12675:60;:::i;:::-;12665:70;;12521:224;12508:1;12505;12501:9;12496:14;;12461:284;;;12465:14;12761:3;12754:10;;12162:608;;;12038:732;;;;:::o;12776:109::-;12857:21;12872:5;12857:21;:::i;:::-;12852:3;12845:34;12776:109;;:::o;12891:360::-;12977:3;13005:38;13037:5;13005:38;:::i;:::-;13059:70;13122:6;13117:3;13059:70;:::i;:::-;13052:77;;13138:52;13183:6;13178:3;13171:4;13164:5;13160:16;13138:52;:::i;:::-;13215:29;13237:6;13215:29;:::i;:::-;13210:3;13206:39;13199:46;;12981:270;12891:360;;;;:::o;13257:364::-;13345:3;13373:39;13406:5;13373:39;:::i;:::-;13428:71;13492:6;13487:3;13428:71;:::i;:::-;13421:78;;13508:52;13553:6;13548:3;13541:4;13534:5;13530:16;13508:52;:::i;:::-;13585:29;13607:6;13585:29;:::i;:::-;13580:3;13576:39;13569:46;;13349:272;13257:364;;;;:::o;13627:377::-;13733:3;13761:39;13794:5;13761:39;:::i;:::-;13816:89;13898:6;13893:3;13816:89;:::i;:::-;13809:96;;13914:52;13959:6;13954:3;13947:4;13940:5;13936:16;13914:52;:::i;:::-;13991:6;13986:3;13982:16;13975:23;;13737:267;13627:377;;;;:::o;14010:366::-;14152:3;14173:67;14237:2;14232:3;14173:67;:::i;:::-;14166:74;;14249:93;14338:3;14249:93;:::i;:::-;14367:2;14362:3;14358:12;14351:19;;14010:366;;;:::o;14382:::-;14524:3;14545:67;14609:2;14604:3;14545:67;:::i;:::-;14538:74;;14621:93;14710:3;14621:93;:::i;:::-;14739:2;14734:3;14730:12;14723:19;;14382:366;;;:::o;14754:::-;14896:3;14917:67;14981:2;14976:3;14917:67;:::i;:::-;14910:74;;14993:93;15082:3;14993:93;:::i;:::-;15111:2;15106:3;15102:12;15095:19;;14754:366;;;:::o;15126:::-;15268:3;15289:67;15353:2;15348:3;15289:67;:::i;:::-;15282:74;;15365:93;15454:3;15365:93;:::i;:::-;15483:2;15478:3;15474:12;15467:19;;15126:366;;;:::o;15498:::-;15640:3;15661:67;15725:2;15720:3;15661:67;:::i;:::-;15654:74;;15737:93;15826:3;15737:93;:::i;:::-;15855:2;15850:3;15846:12;15839:19;;15498:366;;;:::o;15870:::-;16012:3;16033:67;16097:2;16092:3;16033:67;:::i;:::-;16026:74;;16109:93;16198:3;16109:93;:::i;:::-;16227:2;16222:3;16218:12;16211:19;;15870:366;;;:::o;16242:::-;16384:3;16405:67;16469:2;16464:3;16405:67;:::i;:::-;16398:74;;16481:93;16570:3;16481:93;:::i;:::-;16599:2;16594:3;16590:12;16583:19;;16242:366;;;:::o;16614:::-;16756:3;16777:67;16841:2;16836:3;16777:67;:::i;:::-;16770:74;;16853:93;16942:3;16853:93;:::i;:::-;16971:2;16966:3;16962:12;16955:19;;16614:366;;;:::o;16986:::-;17128:3;17149:67;17213:2;17208:3;17149:67;:::i;:::-;17142:74;;17225:93;17314:3;17225:93;:::i;:::-;17343:2;17338:3;17334:12;17327:19;;16986:366;;;:::o;17358:::-;17500:3;17521:67;17585:2;17580:3;17521:67;:::i;:::-;17514:74;;17597:93;17686:3;17597:93;:::i;:::-;17715:2;17710:3;17706:12;17699:19;;17358:366;;;:::o;17730:::-;17872:3;17893:67;17957:2;17952:3;17893:67;:::i;:::-;17886:74;;17969:93;18058:3;17969:93;:::i;:::-;18087:2;18082:3;18078:12;18071:19;;17730:366;;;:::o;18102:::-;18244:3;18265:67;18329:2;18324:3;18265:67;:::i;:::-;18258:74;;18341:93;18430:3;18341:93;:::i;:::-;18459:2;18454:3;18450:12;18443:19;;18102:366;;;:::o;18474:::-;18616:3;18637:67;18701:2;18696:3;18637:67;:::i;:::-;18630:74;;18713:93;18802:3;18713:93;:::i;:::-;18831:2;18826:3;18822:12;18815:19;;18474:366;;;:::o;18846:::-;18988:3;19009:67;19073:2;19068:3;19009:67;:::i;:::-;19002:74;;19085:93;19174:3;19085:93;:::i;:::-;19203:2;19198:3;19194:12;19187:19;;18846:366;;;:::o;19218:::-;19360:3;19381:67;19445:2;19440:3;19381:67;:::i;:::-;19374:74;;19457:93;19546:3;19457:93;:::i;:::-;19575:2;19570:3;19566:12;19559:19;;19218:366;;;:::o;19590:::-;19732:3;19753:67;19817:2;19812:3;19753:67;:::i;:::-;19746:74;;19829:93;19918:3;19829:93;:::i;:::-;19947:2;19942:3;19938:12;19931:19;;19590:366;;;:::o;19962:::-;20104:3;20125:67;20189:2;20184:3;20125:67;:::i;:::-;20118:74;;20201:93;20290:3;20201:93;:::i;:::-;20319:2;20314:3;20310:12;20303:19;;19962:366;;;:::o;20334:108::-;20411:24;20429:5;20411:24;:::i;:::-;20406:3;20399:37;20334:108;;:::o;20448:118::-;20535:24;20553:5;20535:24;:::i;:::-;20530:3;20523:37;20448:118;;:::o;20572:435::-;20752:3;20774:95;20865:3;20856:6;20774:95;:::i;:::-;20767:102;;20886:95;20977:3;20968:6;20886:95;:::i;:::-;20879:102;;20998:3;20991:10;;20572:435;;;;;:::o;21013:222::-;21106:4;21144:2;21133:9;21129:18;21121:26;;21157:71;21225:1;21214:9;21210:17;21201:6;21157:71;:::i;:::-;21013:222;;;;:::o;21241:1053::-;21564:4;21602:3;21591:9;21587:19;21579:27;;21616:71;21684:1;21673:9;21669:17;21660:6;21616:71;:::i;:::-;21697:72;21765:2;21754:9;21750:18;21741:6;21697:72;:::i;:::-;21816:9;21810:4;21806:20;21801:2;21790:9;21786:18;21779:48;21844:108;21947:4;21938:6;21844:108;:::i;:::-;21836:116;;21999:9;21993:4;21989:20;21984:2;21973:9;21969:18;21962:48;22027:108;22130:4;22121:6;22027:108;:::i;:::-;22019:116;;22183:9;22177:4;22173:20;22167:3;22156:9;22152:19;22145:49;22211:76;22282:4;22273:6;22211:76;:::i;:::-;22203:84;;21241:1053;;;;;;;;:::o;22300:751::-;22523:4;22561:3;22550:9;22546:19;22538:27;;22575:71;22643:1;22632:9;22628:17;22619:6;22575:71;:::i;:::-;22656:72;22724:2;22713:9;22709:18;22700:6;22656:72;:::i;:::-;22738;22806:2;22795:9;22791:18;22782:6;22738:72;:::i;:::-;22820;22888:2;22877:9;22873:18;22864:6;22820:72;:::i;:::-;22940:9;22934:4;22930:20;22924:3;22913:9;22909:19;22902:49;22968:76;23039:4;23030:6;22968:76;:::i;:::-;22960:84;;22300:751;;;;;;;;:::o;23057:373::-;23200:4;23238:2;23227:9;23223:18;23215:26;;23287:9;23281:4;23277:20;23273:1;23262:9;23258:17;23251:47;23315:108;23418:4;23409:6;23315:108;:::i;:::-;23307:116;;23057:373;;;;:::o;23436:634::-;23657:4;23695:2;23684:9;23680:18;23672:26;;23744:9;23738:4;23734:20;23730:1;23719:9;23715:17;23708:47;23772:108;23875:4;23866:6;23772:108;:::i;:::-;23764:116;;23927:9;23921:4;23917:20;23912:2;23901:9;23897:18;23890:48;23955:108;24058:4;24049:6;23955:108;:::i;:::-;23947:116;;23436:634;;;;;:::o;24076:210::-;24163:4;24201:2;24190:9;24186:18;24178:26;;24214:65;24276:1;24265:9;24261:17;24252:6;24214:65;:::i;:::-;24076:210;;;;:::o;24292:313::-;24405:4;24443:2;24432:9;24428:18;24420:26;;24492:9;24486:4;24482:20;24478:1;24467:9;24463:17;24456:47;24520:78;24593:4;24584:6;24520:78;:::i;:::-;24512:86;;24292:313;;;;:::o;24611:419::-;24777:4;24815:2;24804:9;24800:18;24792:26;;24864:9;24858:4;24854:20;24850:1;24839:9;24835:17;24828:47;24892:131;25018:4;24892:131;:::i;:::-;24884:139;;24611:419;;;:::o;25036:::-;25202:4;25240:2;25229:9;25225:18;25217:26;;25289:9;25283:4;25279:20;25275:1;25264:9;25260:17;25253:47;25317:131;25443:4;25317:131;:::i;:::-;25309:139;;25036:419;;;:::o;25461:::-;25627:4;25665:2;25654:9;25650:18;25642:26;;25714:9;25708:4;25704:20;25700:1;25689:9;25685:17;25678:47;25742:131;25868:4;25742:131;:::i;:::-;25734:139;;25461:419;;;:::o;25886:::-;26052:4;26090:2;26079:9;26075:18;26067:26;;26139:9;26133:4;26129:20;26125:1;26114:9;26110:17;26103:47;26167:131;26293:4;26167:131;:::i;:::-;26159:139;;25886:419;;;:::o;26311:::-;26477:4;26515:2;26504:9;26500:18;26492:26;;26564:9;26558:4;26554:20;26550:1;26539:9;26535:17;26528:47;26592:131;26718:4;26592:131;:::i;:::-;26584:139;;26311:419;;;:::o;26736:::-;26902:4;26940:2;26929:9;26925:18;26917:26;;26989:9;26983:4;26979:20;26975:1;26964:9;26960:17;26953:47;27017:131;27143:4;27017:131;:::i;:::-;27009:139;;26736:419;;;:::o;27161:::-;27327:4;27365:2;27354:9;27350:18;27342:26;;27414:9;27408:4;27404:20;27400:1;27389:9;27385:17;27378:47;27442:131;27568:4;27442:131;:::i;:::-;27434:139;;27161:419;;;:::o;27586:::-;27752:4;27790:2;27779:9;27775:18;27767:26;;27839:9;27833:4;27829:20;27825:1;27814:9;27810:17;27803:47;27867:131;27993:4;27867:131;:::i;:::-;27859:139;;27586:419;;;:::o;28011:::-;28177:4;28215:2;28204:9;28200:18;28192:26;;28264:9;28258:4;28254:20;28250:1;28239:9;28235:17;28228:47;28292:131;28418:4;28292:131;:::i;:::-;28284:139;;28011:419;;;:::o;28436:::-;28602:4;28640:2;28629:9;28625:18;28617:26;;28689:9;28683:4;28679:20;28675:1;28664:9;28660:17;28653:47;28717:131;28843:4;28717:131;:::i;:::-;28709:139;;28436:419;;;:::o;28861:::-;29027:4;29065:2;29054:9;29050:18;29042:26;;29114:9;29108:4;29104:20;29100:1;29089:9;29085:17;29078:47;29142:131;29268:4;29142:131;:::i;:::-;29134:139;;28861:419;;;:::o;29286:::-;29452:4;29490:2;29479:9;29475:18;29467:26;;29539:9;29533:4;29529:20;29525:1;29514:9;29510:17;29503:47;29567:131;29693:4;29567:131;:::i;:::-;29559:139;;29286:419;;;:::o;29711:::-;29877:4;29915:2;29904:9;29900:18;29892:26;;29964:9;29958:4;29954:20;29950:1;29939:9;29935:17;29928:47;29992:131;30118:4;29992:131;:::i;:::-;29984:139;;29711:419;;;:::o;30136:::-;30302:4;30340:2;30329:9;30325:18;30317:26;;30389:9;30383:4;30379:20;30375:1;30364:9;30360:17;30353:47;30417:131;30543:4;30417:131;:::i;:::-;30409:139;;30136:419;;;:::o;30561:::-;30727:4;30765:2;30754:9;30750:18;30742:26;;30814:9;30808:4;30804:20;30800:1;30789:9;30785:17;30778:47;30842:131;30968:4;30842:131;:::i;:::-;30834:139;;30561:419;;;:::o;30986:::-;31152:4;31190:2;31179:9;31175:18;31167:26;;31239:9;31233:4;31229:20;31225:1;31214:9;31210:17;31203:47;31267:131;31393:4;31267:131;:::i;:::-;31259:139;;30986:419;;;:::o;31411:::-;31577:4;31615:2;31604:9;31600:18;31592:26;;31664:9;31658:4;31654:20;31650:1;31639:9;31635:17;31628:47;31692:131;31818:4;31692:131;:::i;:::-;31684:139;;31411:419;;;:::o;31836:222::-;31929:4;31967:2;31956:9;31952:18;31944:26;;31980:71;32048:1;32037:9;32033:17;32024:6;31980:71;:::i;:::-;31836:222;;;;:::o;32064:332::-;32185:4;32223:2;32212:9;32208:18;32200:26;;32236:71;32304:1;32293:9;32289:17;32280:6;32236:71;:::i;:::-;32317:72;32385:2;32374:9;32370:18;32361:6;32317:72;:::i;:::-;32064:332;;;;;:::o;32402:129::-;32436:6;32463:20;;:::i;:::-;32453:30;;32492:33;32520:4;32512:6;32492:33;:::i;:::-;32402:129;;;:::o;32537:75::-;32570:6;32603:2;32597:9;32587:19;;32537:75;:::o;32618:311::-;32695:4;32785:18;32777:6;32774:30;32771:56;;;32807:18;;:::i;:::-;32771:56;32857:4;32849:6;32845:17;32837:25;;32917:4;32911;32907:15;32899:23;;32618:311;;;:::o;32935:::-;33012:4;33102:18;33094:6;33091:30;33088:56;;;33124:18;;:::i;:::-;33088:56;33174:4;33166:6;33162:17;33154:25;;33234:4;33228;33224:15;33216:23;;32935:311;;;:::o;33252:307::-;33313:4;33403:18;33395:6;33392:30;33389:56;;;33425:18;;:::i;:::-;33389:56;33463:29;33485:6;33463:29;:::i;:::-;33455:37;;33547:4;33541;33537:15;33529:23;;33252:307;;;:::o;33565:308::-;33627:4;33717:18;33709:6;33706:30;33703:56;;;33739:18;;:::i;:::-;33703:56;33777:29;33799:6;33777:29;:::i;:::-;33769:37;;33861:4;33855;33851:15;33843:23;;33565:308;;;:::o;33879:132::-;33946:4;33969:3;33961:11;;33999:4;33994:3;33990:14;33982:22;;33879:132;;;:::o;34017:114::-;34084:6;34118:5;34112:12;34102:22;;34017:114;;;:::o;34137:98::-;34188:6;34222:5;34216:12;34206:22;;34137:98;;;:::o;34241:99::-;34293:6;34327:5;34321:12;34311:22;;34241:99;;;:::o;34346:113::-;34416:4;34448;34443:3;34439:14;34431:22;;34346:113;;;:::o;34465:184::-;34564:11;34598:6;34593:3;34586:19;34638:4;34633:3;34629:14;34614:29;;34465:184;;;;:::o;34655:168::-;34738:11;34772:6;34767:3;34760:19;34812:4;34807:3;34803:14;34788:29;;34655:168;;;;:::o;34829:169::-;34913:11;34947:6;34942:3;34935:19;34987:4;34982:3;34978:14;34963:29;;34829:169;;;;:::o;35004:148::-;35106:11;35143:3;35128:18;;35004:148;;;;:::o;35158:305::-;35198:3;35217:20;35235:1;35217:20;:::i;:::-;35212:25;;35251:20;35269:1;35251:20;:::i;:::-;35246:25;;35405:1;35337:66;35333:74;35330:1;35327:81;35324:107;;;35411:18;;:::i;:::-;35324:107;35455:1;35452;35448:9;35441:16;;35158:305;;;;:::o;35469:185::-;35509:1;35526:20;35544:1;35526:20;:::i;:::-;35521:25;;35560:20;35578:1;35560:20;:::i;:::-;35555:25;;35599:1;35589:35;;35604:18;;:::i;:::-;35589:35;35646:1;35643;35639:9;35634:14;;35469:185;;;;:::o;35660:348::-;35700:7;35723:20;35741:1;35723:20;:::i;:::-;35718:25;;35757:20;35775:1;35757:20;:::i;:::-;35752:25;;35945:1;35877:66;35873:74;35870:1;35867:81;35862:1;35855:9;35848:17;35844:105;35841:131;;;35952:18;;:::i;:::-;35841:131;36000:1;35997;35993:9;35982:20;;35660:348;;;;:::o;36014:191::-;36054:4;36074:20;36092:1;36074:20;:::i;:::-;36069:25;;36108:20;36126:1;36108:20;:::i;:::-;36103:25;;36147:1;36144;36141:8;36138:34;;;36152:18;;:::i;:::-;36138:34;36197:1;36194;36190:9;36182:17;;36014:191;;;;:::o;36211:96::-;36248:7;36277:24;36295:5;36277:24;:::i;:::-;36266:35;;36211:96;;;:::o;36313:90::-;36347:7;36390:5;36383:13;36376:21;36365:32;;36313:90;;;:::o;36409:149::-;36445:7;36485:66;36478:5;36474:78;36463:89;;36409:149;;;:::o;36564:126::-;36601:7;36641:42;36634:5;36630:54;36619:65;;36564:126;;;:::o;36696:77::-;36733:7;36762:5;36751:16;;36696:77;;;:::o;36779:154::-;36863:6;36858:3;36853;36840:30;36925:1;36916:6;36911:3;36907:16;36900:27;36779:154;;;:::o;36939:307::-;37007:1;37017:113;37031:6;37028:1;37025:13;37017:113;;;37116:1;37111:3;37107:11;37101:18;37097:1;37092:3;37088:11;37081:39;37053:2;37050:1;37046:10;37041:15;;37017:113;;;37148:6;37145:1;37142:13;37139:101;;;37228:1;37219:6;37214:3;37210:16;37203:27;37139:101;36988:258;36939:307;;;:::o;37252:320::-;37296:6;37333:1;37327:4;37323:12;37313:22;;37380:1;37374:4;37370:12;37401:18;37391:81;;37457:4;37449:6;37445:17;37435:27;;37391:81;37519:2;37511:6;37508:14;37488:18;37485:38;37482:84;;;37538:18;;:::i;:::-;37482:84;37303:269;37252:320;;;:::o;37578:281::-;37661:27;37683:4;37661:27;:::i;:::-;37653:6;37649:40;37791:6;37779:10;37776:22;37755:18;37743:10;37740:34;37737:62;37734:88;;;37802:18;;:::i;:::-;37734:88;37842:10;37838:2;37831:22;37621:238;37578:281;;:::o;37865:233::-;37904:3;37927:24;37945:5;37927:24;:::i;:::-;37918:33;;37973:66;37966:5;37963:77;37960:103;;;38043:18;;:::i;:::-;37960:103;38090:1;38083:5;38079:13;38072:20;;37865:233;;;:::o;38104:176::-;38136:1;38153:20;38171:1;38153:20;:::i;:::-;38148:25;;38187:20;38205:1;38187:20;:::i;:::-;38182:25;;38226:1;38216:35;;38231:18;;:::i;:::-;38216:35;38272:1;38269;38265:9;38260:14;;38104:176;;;;:::o;38286:180::-;38334:77;38331:1;38324:88;38431:4;38428:1;38421:15;38455:4;38452:1;38445:15;38472:180;38520:77;38517:1;38510:88;38617:4;38614:1;38607:15;38641:4;38638:1;38631:15;38658:180;38706:77;38703:1;38696:88;38803:4;38800:1;38793:15;38827:4;38824:1;38817:15;38844:180;38892:77;38889:1;38882:88;38989:4;38986:1;38979:15;39013:4;39010:1;39003:15;39030:180;39078:77;39075:1;39068:88;39175:4;39172:1;39165:15;39199:4;39196:1;39189:15;39216:183;39251:3;39289:1;39271:16;39268:23;39265:128;;;39327:1;39324;39321;39306:23;39349:34;39380:1;39374:8;39349:34;:::i;:::-;39342:41;;39265:128;39216:183;:::o;39405:117::-;39514:1;39511;39504:12;39528:117;39637:1;39634;39627:12;39651:117;39760:1;39757;39750:12;39774:117;39883:1;39880;39873:12;39897:117;40006:1;40003;39996:12;40020:102;40061:6;40112:2;40108:7;40103:2;40096:5;40092:14;40088:28;40078:38;;40020:102;;;:::o;40128:106::-;40172:8;40221:5;40216:3;40212:15;40191:36;;40128:106;;;:::o;40240:239::-;40380:34;40376:1;40368:6;40364:14;40357:58;40449:22;40444:2;40436:6;40432:15;40425:47;40240:239;:::o;40485:227::-;40625:34;40621:1;40613:6;40609:14;40602:58;40694:10;40689:2;40681:6;40677:15;40670:35;40485:227;:::o;40718:230::-;40858:34;40854:1;40846:6;40842:14;40835:58;40927:13;40922:2;40914:6;40910:15;40903:38;40718:230;:::o;40954:225::-;41094:34;41090:1;41082:6;41078:14;41071:58;41163:8;41158:2;41150:6;41146:15;41139:33;40954:225;:::o;41185:165::-;41325:17;41321:1;41313:6;41309:14;41302:41;41185:165;:::o;41356:228::-;41496:34;41492:1;41484:6;41480:14;41473:58;41565:11;41560:2;41552:6;41548:15;41541:36;41356:228;:::o;41590:224::-;41730:34;41726:1;41718:6;41714:14;41707:58;41799:7;41794:2;41786:6;41782:15;41775:32;41590:224;:::o;41820:237::-;41960:34;41956:1;41948:6;41944:14;41937:58;42029:20;42024:2;42016:6;42012:15;42005:45;41820:237;:::o;42063:229::-;42203:34;42199:1;42191:6;42187:14;42180:58;42272:12;42267:2;42259:6;42255:15;42248:37;42063:229;:::o;42298:163::-;42438:15;42434:1;42426:6;42422:14;42415:39;42298:163;:::o;42467:160::-;42607:12;42603:1;42595:6;42591:14;42584:36;42467:160;:::o;42633:182::-;42773:34;42769:1;42761:6;42757:14;42750:58;42633:182;:::o;42821:167::-;42961:19;42957:1;42949:6;42945:14;42938:43;42821:167;:::o;42994:228::-;43134:34;43130:1;43122:6;43118:14;43111:58;43203:11;43198:2;43190:6;43186:15;43179:36;42994:228;:::o;43228:::-;43368:34;43364:1;43356:6;43352:14;43345:58;43437:11;43432:2;43424:6;43420:15;43413:36;43228:228;:::o;43462:227::-;43602:34;43598:1;43590:6;43586:14;43579:58;43671:10;43666:2;43658:6;43654:15;43647:35;43462:227;:::o;43695:220::-;43835:34;43831:1;43823:6;43819:14;43812:58;43904:3;43899:2;43891:6;43887:15;43880:28;43695:220;:::o;43921:711::-;43960:3;43998:4;43980:16;43977:26;43974:39;;;44006:5;;43974:39;44035:20;;:::i;:::-;44110:1;44092:16;44088:24;44085:1;44079:4;44064:49;44143:4;44137:11;44242:16;44235:4;44227:6;44223:17;44220:39;44187:18;44179:6;44176:30;44160:113;44157:146;;;44288:5;;;;44157:146;44334:6;44328:4;44324:17;44370:3;44364:10;44397:18;44389:6;44386:30;44383:43;;;44419:5;;;;;;44383:43;44467:6;44460:4;44455:3;44451:14;44447:27;44526:1;44508:16;44504:24;44498:4;44494:35;44489:3;44486:44;44483:57;;;44533:5;;;;;;;44483:57;44550;44598:6;44592:4;44588:17;44580:6;44576:30;44570:4;44550:57;:::i;:::-;44623:3;44616:10;;43964:668;;;;;43921:711;;:::o;44638:122::-;44711:24;44729:5;44711:24;:::i;:::-;44704:5;44701:35;44691:63;;44750:1;44747;44740:12;44691:63;44638:122;:::o;44766:116::-;44836:21;44851:5;44836:21;:::i;:::-;44829:5;44826:32;44816:60;;44872:1;44869;44862:12;44816:60;44766:116;:::o;44888:120::-;44960:23;44977:5;44960:23;:::i;:::-;44953:5;44950:34;44940:62;;44998:1;44995;44988:12;44940:62;44888:120;:::o;45014:122::-;45087:24;45105:5;45087:24;:::i;:::-;45080:5;45077:35;45067:63;;45126:1;45123;45116:12;45067:63;45014:122;:::o

Swarm Source

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