ETH Price: $3,396.53 (-0.63%)
Gas: 22 Gwei

Token

Baddies (BADDIE)
 

Overview

Max Total Supply

756 BADDIE

Holders

329

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
pickleric.eth
Balance
1 BADDIE
0xef3F063136fE5002065bf7c4A2D85fF34cfB0ac0
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:
Baddies

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// Sources flattened with hardhat v2.4.1 https://hardhat.org

// File @openzeppelin/contracts/utils/introspection/[email protected]

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC721/[email protected]



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/token/ERC721/[email protected]



pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]



pragma solidity ^0.8.0;

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

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

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


// File @openzeppelin/contracts/utils/[email protected]



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/utils/[email protected]



pragma solidity ^0.8.0;

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

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


// File @openzeppelin/contracts/utils/[email protected]



pragma solidity ^0.8.0;

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

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

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

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

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


// File @openzeppelin/contracts/utils/introspection/[email protected]



pragma solidity ^0.8.0;

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


// File @openzeppelin/contracts/token/ERC721/[email protected]



pragma solidity ^0.8.0;







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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]



pragma solidity ^0.8.0;

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

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

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


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/access/[email protected]



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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


// File contracts/Baddies.sol


pragma solidity ^0.8.0;



contract Baddies is ERC721Enumerable, Ownable {

    // Max supply and price of Baddies (0.049 ETH)
    uint256 public constant MAX_BADDIES = 9999;
    uint256 public reserved = 1000;
    uint256 pricePerBaddie = 0.049 ether;
    uint256 constant CREATOR_SHARE = 90;
    address baddiesAddress = 0xb27A7637eCdf570b624B97758074220E7aC71eA4;

    // Dev commission
    uint256 constant DEV_SHARE = 10;
    address devAddress = 0x6246D8c407D802d0E060D8f6A2Fd621318350C99;

    // Who can claim their free baddie?
    mapping(address => bool) public claimants;

    string _baseTokenURI;

    // The Baddies
    constructor(string memory baseURI) ERC721("Baddies", "BADDIE") {
        setBaseURI(baseURI);
    }

    modifier saleIsOpen {
        require(totalSupply() < MAX_BADDIES, "All available Baddies already minted");
        _;
    }

    function mintBaddies(address _to, uint256 _count) public payable saleIsOpen {
        require(totalSupply() + _count <= MAX_BADDIES - reserved, "Almost sold out, try to mint less Baddies");
        require(totalSupply() < MAX_BADDIES - reserved, "All non-reserved Baddies already minted");
        require(_count <= 20, "Can't mint more than 20 Baddies at a time");
        require(msg.value >= _count * pricePerBaddie, "Price is too low");

        // Mint the Baddies on the respective address
        for(uint i = 0; i < _count; i++) {
            _safeMint(_to, totalSupply());
        }
        
        // Dev gets 10%
        uint256 devPayout = msg.value * DEV_SHARE / 100;
        _pay(devAddress, devPayout);
        
        // Creator gets the rest (90%)
        uint256 creatorPayout = msg.value - devPayout;
        _pay(baddiesAddress, creatorPayout);
    }

    function claimMyBaddie() public saleIsOpen {
        require(claimants[msg.sender], "Cannot claim or already claimed");
        _safeMint(msg.sender, totalSupply());
        claimants[msg.sender] = false;
    }

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

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

    function baddiesOwnedBy(address _owner) external view returns (uint256[] memory) {
        uint256 baddieCount = balanceOf(_owner);

        uint256[] memory tokensId = new uint256[](baddieCount);
        for (uint256 i = 0; i < baddieCount; i++) {
            tokensId[i] = tokenOfOwnerByIndex(_owner, i);
        }

        return tokensId;
    }

    function _pay(address to, uint256 value) internal {
        (bool success, ) = to.call{value: value}("");
        require(success, "Payout failed");
    }

    function withdraw() public payable onlyOwner {
        _pay(baddiesAddress, address(this).balance);
    }

    function addClaimants(address[] memory _claimants) public onlyOwner {
        for (uint i=0; i < _claimants.length; i++) { 
            claimants[_claimants[i]] = true;
        }
        reserved += _claimants.length;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_BADDIES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_claimants","type":"address[]"}],"name":"addClaimants","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"baddiesOwnedBy","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimMyBaddie","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimants","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mintBaddies","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526103e8600b5566ae153d89fe8000600c5573b27a7637ecdf570b624b97758074220e7ac71ea4600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550736246d8c407d802d0e060d8f6a2fd621318350c99600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000cc57600080fd5b5060405162004ad738038062004ad78339818101604052810190620000f291906200048f565b6040518060400160405280600781526020017f42616464696573000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f42414444494500000000000000000000000000000000000000000000000000008152508160009080519060200190620001769291906200036d565b5080600190805190602001906200018f9291906200036d565b505050620001b2620001a6620001ca60201b60201c565b620001d260201b60201c565b620001c3816200029860201b60201c565b506200067a565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002a8620001ca60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002ce6200034360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000327576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200031e9062000516565b60405180910390fd5b80601090805190602001906200033f9291906200036d565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200037b90620005e6565b90600052602060002090601f0160209004810192826200039f5760008555620003eb565b82601f10620003ba57805160ff1916838001178555620003eb565b82800160010185558215620003eb579182015b82811115620003ea578251825591602001919060010190620003cd565b5b509050620003fa9190620003fe565b5090565b5b8082111562000419576000816000905550600101620003ff565b5090565b6000620004346200042e846200056c565b62000538565b9050828152602081018484840111156200044d57600080fd5b6200045a848285620005b0565b509392505050565b600082601f8301126200047457600080fd5b8151620004868482602086016200041d565b91505092915050565b600060208284031215620004a257600080fd5b600082015167ffffffffffffffff811115620004bd57600080fd5b620004cb8482850162000462565b91505092915050565b6000620004e36020836200059f565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600060208201905081810360008301526200053181620004d4565b9050919050565b6000604051905081810181811067ffffffffffffffff821117156200056257620005616200064b565b5b8060405250919050565b600067ffffffffffffffff8211156200058a57620005896200064b565b5b601f19601f8301169050602081019050919050565b600082825260208201905092915050565b60005b83811015620005d0578082015181840152602081019050620005b3565b83811115620005e0576000848401525b50505050565b60006002820490506001821680620005ff57607f821691505b602082108114156200061657620006156200061c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61444d806200068a6000396000f3fe6080604052600436106101b75760003560e01c80636352211e116100ec578063a22cb4651161008a578063e985e9c511610064578063e985e9c51461060f578063f2fde38b1461064c578063f8149b8914610675578063fe60d12c14610691576101b7565b8063a22cb46514610580578063b88d4fde146105a9578063c87b56dd146105d2576101b7565b8063887e9c1e116100c6578063887e9c1e146104c25780638da5cb5b146104ff57806392e953961461052a57806395d89b4114610555576101b7565b80636352211e1461043157806370a082311461046e578063715018a6146104ab576101b7565b80632f745c59116101595780633e519cc6116101335780633e519cc61461038b57806342842e0e146103a25780634f6ccce7146103cb57806355f804b314610408576101b7565b80632f745c591461031b57806333e678f5146103585780633ccfd60b14610381576101b7565b8063095ea7b311610195578063095ea7b314610261578063171c41af1461028a57806318160ddd146102c757806323b872dd146102f2576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063081812fc14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190612fe2565b6106bc565b6040516101f09190613bbb565b60405180910390f35b34801561020557600080fd5b5061020e610736565b60405161021b9190613bd6565b60405180910390f35b34801561023057600080fd5b5061024b60048036038101906102469190613075565b6107c8565b6040516102589190613b32565b60405180910390f35b34801561026d57600080fd5b5061028860048036038101906102839190612f65565b61084d565b005b34801561029657600080fd5b506102b160048036038101906102ac9190612dfa565b610965565b6040516102be9190613bbb565b60405180910390f35b3480156102d357600080fd5b506102dc610985565b6040516102e99190613f18565b60405180910390f35b3480156102fe57600080fd5b5061031960048036038101906103149190612e5f565b610992565b005b34801561032757600080fd5b50610342600480360381019061033d9190612f65565b6109f2565b60405161034f9190613f18565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a9190612fa1565b610a97565b005b610389610be8565b005b34801561039757600080fd5b506103a0610c92565b005b3480156103ae57600080fd5b506103c960048036038101906103c49190612e5f565b610dd4565b005b3480156103d757600080fd5b506103f260048036038101906103ed9190613075565b610df4565b6040516103ff9190613f18565b60405180910390f35b34801561041457600080fd5b5061042f600480360381019061042a9190613034565b610e8b565b005b34801561043d57600080fd5b5061045860048036038101906104539190613075565b610f21565b6040516104659190613b32565b60405180910390f35b34801561047a57600080fd5b5061049560048036038101906104909190612dfa565b610fd3565b6040516104a29190613f18565b60405180910390f35b3480156104b757600080fd5b506104c061108b565b005b3480156104ce57600080fd5b506104e960048036038101906104e49190612dfa565b611113565b6040516104f69190613b99565b60405180910390f35b34801561050b57600080fd5b5061051461120d565b6040516105219190613b32565b60405180910390f35b34801561053657600080fd5b5061053f611237565b60405161054c9190613f18565b60405180910390f35b34801561056157600080fd5b5061056a61123d565b6040516105779190613bd6565b60405180910390f35b34801561058c57600080fd5b506105a760048036038101906105a29190612f29565b6112cf565b005b3480156105b557600080fd5b506105d060048036038101906105cb9190612eae565b611450565b005b3480156105de57600080fd5b506105f960048036038101906105f49190613075565b6114b2565b6040516106069190613bd6565b60405180910390f35b34801561061b57600080fd5b5061063660048036038101906106319190612e23565b611559565b6040516106439190613bbb565b60405180910390f35b34801561065857600080fd5b50610673600480360381019061066e9190612dfa565b6115ed565b005b61068f600480360381019061068a9190612f65565b6116e5565b005b34801561069d57600080fd5b506106a661193b565b6040516106b39190613f18565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061072f575061072e82611941565b5b9050919050565b60606000805461074590614242565b80601f016020809104026020016040519081016040528092919081815260200182805461077190614242565b80156107be5780601f10610793576101008083540402835291602001916107be565b820191906000526020600020905b8154815290600101906020018083116107a157829003601f168201915b5050505050905090565b60006107d382611a23565b610812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080990613e18565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061085882610f21565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c090613e98565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108e8611a8f565b73ffffffffffffffffffffffffffffffffffffffff161480610917575061091681610911611a8f565b611559565b5b610956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094d90613d78565b60405180910390fd5b6109608383611a97565b505050565b600f6020528060005260406000206000915054906101000a900460ff1681565b6000600880549050905090565b6109a361099d611a8f565b82611b50565b6109e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d990613eb8565b60405180910390fd5b6109ed838383611c2e565b505050565b60006109fd83610fd3565b8210610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590613c38565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610a9f611a8f565b73ffffffffffffffffffffffffffffffffffffffff16610abd61120d565b73ffffffffffffffffffffffffffffffffffffffff1614610b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0a90613e38565b60405180910390fd5b60005b8151811015610bca576001600f6000848481518110610b5e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610bc290614274565b915050610b16565b508051600b6000828254610bde9190614077565b9250508190555050565b610bf0611a8f565b73ffffffffffffffffffffffffffffffffffffffff16610c0e61120d565b73ffffffffffffffffffffffffffffffffffffffff1614610c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5b90613e38565b60405180910390fd5b610c90600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1647611e8a565b565b61270f610c9d610985565b10610cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd490613bf8565b60405180910390fd5b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6090613d38565b60405180910390fd5b610d7a33610d75610985565b611f3b565b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550565b610def83838360405180602001604052806000815250611450565b505050565b6000610dfe610985565b8210610e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3690613ef8565b60405180910390fd5b60088281548110610e79577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610e93611a8f565b73ffffffffffffffffffffffffffffffffffffffff16610eb161120d565b73ffffffffffffffffffffffffffffffffffffffff1614610f07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efe90613e38565b60405180910390fd5b8060109080519060200190610f1d929190612b88565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc190613dd8565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103b90613db8565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611093611a8f565b73ffffffffffffffffffffffffffffffffffffffff166110b161120d565b73ffffffffffffffffffffffffffffffffffffffff1614611107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fe90613e38565b60405180910390fd5b6111116000611f59565b565b6060600061112083610fd3565b905060008167ffffffffffffffff811115611164577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156111925781602001602082028036833780820191505090505b50905060005b82811015611202576111aa85826109f2565b8282815181106111e3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080806111fa90614274565b915050611198565b508092505050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61270f81565b60606001805461124c90614242565b80601f016020809104026020016040519081016040528092919081815260200182805461127890614242565b80156112c55780601f1061129a576101008083540402835291602001916112c5565b820191906000526020600020905b8154815290600101906020018083116112a857829003601f168201915b5050505050905090565b6112d7611a8f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133c90613d18565b60405180910390fd5b8060056000611352611a8f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166113ff611a8f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114449190613bbb565b60405180910390a35050565b61146161145b611a8f565b83611b50565b6114a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149790613eb8565b60405180910390fd5b6114ac8484848461201f565b50505050565b60606114bd82611a23565b6114fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f390613e78565b60405180910390fd5b600061150661207b565b905060008151116115265760405180602001604052806000815250611551565b806115308461210d565b604051602001611541929190613af9565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115f5611a8f565b73ffffffffffffffffffffffffffffffffffffffff1661161361120d565b73ffffffffffffffffffffffffffffffffffffffff1614611669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166090613e38565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d090613c98565b60405180910390fd5b6116e281611f59565b50565b61270f6116f0610985565b10611730576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172790613bf8565b60405180910390fd5b600b5461270f6117409190614158565b81611749610985565b6117539190614077565b1115611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b90613c78565b60405180910390fd5b600b5461270f6117a49190614158565b6117ac610985565b106117ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e390613d98565b60405180910390fd5b6014811115611830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182790613c18565b60405180910390fd5b600c548161183e91906140fe565b341015611880576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187790613ed8565b60405180910390fd5b60005b818110156118af5761189c83611897610985565b611f3b565b80806118a790614274565b915050611883565b5060006064600a346118c191906140fe565b6118cb91906140cd565b90506118f9600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611e8a565b600081346119079190614158565b9050611935600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611e8a565b50505050565b600b5481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a0c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611a1c5750611a1b826122ba565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b0a83610f21565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611b5b82611a23565b611b9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9190613d58565b60405180910390fd5b6000611ba583610f21565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c1457508373ffffffffffffffffffffffffffffffffffffffff16611bfc846107c8565b73ffffffffffffffffffffffffffffffffffffffff16145b80611c255750611c248185611559565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611c4e82610f21565b73ffffffffffffffffffffffffffffffffffffffff1614611ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9b90613e58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0b90613cf8565b60405180910390fd5b611d1f838383612324565b611d2a600082611a97565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d7a9190614158565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dd19190614077565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611eb090613b1d565b60006040518083038185875af1925050503d8060008114611eed576040519150601f19603f3d011682016040523d82523d6000602084013e611ef2565b606091505b5050905080611f36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2d90613cd8565b60405180910390fd5b505050565b611f55828260405180602001604052806000815250612438565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61202a848484611c2e565b61203684848484612493565b612075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206c90613c58565b60405180910390fd5b50505050565b60606010805461208a90614242565b80601f01602080910402602001604051908101604052809291908181526020018280546120b690614242565b80156121035780601f106120d857610100808354040283529160200191612103565b820191906000526020600020905b8154815290600101906020018083116120e657829003601f168201915b5050505050905090565b60606000821415612155576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506122b5565b600082905060005b6000821461218757808061217090614274565b915050600a8261218091906140cd565b915061215d565b60008167ffffffffffffffff8111156121c9577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156121fb5781602001600182028036833780820191505090505b5090505b600085146122ae576001826122149190614158565b9150600a8561222391906142bd565b603061222f9190614077565b60f81b81838151811061226b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122a791906140cd565b94506121ff565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61232f83838361262a565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123725761236d8161262f565b6123b1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146123b0576123af8382612678565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123f4576123ef816127e5565b612433565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612432576124318282612928565b5b5b505050565b61244283836129a7565b61244f6000848484612493565b61248e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248590613c58565b60405180910390fd5b505050565b60006124b48473ffffffffffffffffffffffffffffffffffffffff16612b75565b1561261d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124dd611a8f565b8786866040518563ffffffff1660e01b81526004016124ff9493929190613b4d565b602060405180830381600087803b15801561251957600080fd5b505af192505050801561254a57506040513d601f19601f82011682018060405250810190612547919061300b565b60015b6125cd573d806000811461257a576040519150601f19603f3d011682016040523d82523d6000602084013e61257f565b606091505b506000815114156125c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bc90613c58565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612622565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161268584610fd3565b61268f9190614158565b9050600060076000848152602001908152602001600020549050818114612774576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506127f99190614158565b905060006009600084815260200190815260200160002054905060006008838154811061284f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612897577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061290c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061293383610fd3565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0e90613df8565b60405180910390fd5b612a2081611a23565b15612a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5790613cb8565b60405180910390fd5b612a6c60008383612324565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612abc9190614077565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612b9490614242565b90600052602060002090601f016020900481019282612bb65760008555612bfd565b82601f10612bcf57805160ff1916838001178555612bfd565b82800160010185558215612bfd579182015b82811115612bfc578251825591602001919060010190612be1565b5b509050612c0a9190612c0e565b5090565b5b80821115612c27576000816000905550600101612c0f565b5090565b6000612c3e612c3984613f64565b613f33565b90508083825260208201905082856020860282011115612c5d57600080fd5b60005b85811015612c8d5781612c738882612d13565b845260208401935060208301925050600181019050612c60565b5050509392505050565b6000612caa612ca584613f90565b613f33565b905082815260208101848484011115612cc257600080fd5b612ccd848285614200565b509392505050565b6000612ce8612ce384613fc0565b613f33565b905082815260208101848484011115612d0057600080fd5b612d0b848285614200565b509392505050565b600081359050612d22816143bb565b92915050565b600082601f830112612d3957600080fd5b8135612d49848260208601612c2b565b91505092915050565b600081359050612d61816143d2565b92915050565b600081359050612d76816143e9565b92915050565b600081519050612d8b816143e9565b92915050565b600082601f830112612da257600080fd5b8135612db2848260208601612c97565b91505092915050565b600082601f830112612dcc57600080fd5b8135612ddc848260208601612cd5565b91505092915050565b600081359050612df481614400565b92915050565b600060208284031215612e0c57600080fd5b6000612e1a84828501612d13565b91505092915050565b60008060408385031215612e3657600080fd5b6000612e4485828601612d13565b9250506020612e5585828601612d13565b9150509250929050565b600080600060608486031215612e7457600080fd5b6000612e8286828701612d13565b9350506020612e9386828701612d13565b9250506040612ea486828701612de5565b9150509250925092565b60008060008060808587031215612ec457600080fd5b6000612ed287828801612d13565b9450506020612ee387828801612d13565b9350506040612ef487828801612de5565b925050606085013567ffffffffffffffff811115612f1157600080fd5b612f1d87828801612d91565b91505092959194509250565b60008060408385031215612f3c57600080fd5b6000612f4a85828601612d13565b9250506020612f5b85828601612d52565b9150509250929050565b60008060408385031215612f7857600080fd5b6000612f8685828601612d13565b9250506020612f9785828601612de5565b9150509250929050565b600060208284031215612fb357600080fd5b600082013567ffffffffffffffff811115612fcd57600080fd5b612fd984828501612d28565b91505092915050565b600060208284031215612ff457600080fd5b600061300284828501612d67565b91505092915050565b60006020828403121561301d57600080fd5b600061302b84828501612d7c565b91505092915050565b60006020828403121561304657600080fd5b600082013567ffffffffffffffff81111561306057600080fd5b61306c84828501612dbb565b91505092915050565b60006020828403121561308757600080fd5b600061309584828501612de5565b91505092915050565b60006130aa8383613adb565b60208301905092915050565b6130bf8161418c565b82525050565b60006130d082614000565b6130da818561402e565b93506130e583613ff0565b8060005b838110156131165781516130fd888261309e565b975061310883614021565b9250506001810190506130e9565b5085935050505092915050565b61312c8161419e565b82525050565b600061313d8261400b565b613147818561403f565b935061315781856020860161420f565b613160816143aa565b840191505092915050565b600061317682614016565b613180818561405b565b935061319081856020860161420f565b613199816143aa565b840191505092915050565b60006131af82614016565b6131b9818561406c565b93506131c981856020860161420f565b80840191505092915050565b60006131e260248361405b565b91507f416c6c20617661696c61626c65204261646469657320616c7265616479206d6960008301527f6e746564000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061324860298361405b565b91507f43616e2774206d696e74206d6f7265207468616e20323020426164646965732060008301527f617420612074696d6500000000000000000000000000000000000000000000006020830152604082019050919050565b60006132ae602b8361405b565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b600061331460328361405b565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061337a60298361405b565b91507f416c6d6f737420736f6c64206f75742c2074727920746f206d696e74206c657360008301527f73204261646469657300000000000000000000000000000000000000000000006020830152604082019050919050565b60006133e060268361405b565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613446601c8361405b565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000613486600d8361405b565b91507f5061796f7574206661696c6564000000000000000000000000000000000000006000830152602082019050919050565b60006134c660248361405b565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061352c60198361405b565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b600061356c601f8361405b565b91507f43616e6e6f7420636c61696d206f7220616c726561647920636c61696d6564006000830152602082019050919050565b60006135ac602c8361405b565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061361260388361405b565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b600061367860278361405b565b91507f416c6c206e6f6e2d7265736572766564204261646469657320616c726561647960008301527f206d696e746564000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006136de602a8361405b565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b600061374460298361405b565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006137aa60208361405b565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006137ea602c8361405b565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061385060208361405b565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061389060298361405b565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006138f6602f8361405b565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b600061395c60218361405b565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006139c2600083614050565b9150600082019050919050565b60006139dc60318361405b565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613a4260108361405b565b91507f507269636520697320746f6f206c6f77000000000000000000000000000000006000830152602082019050919050565b6000613a82602c8361405b565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b613ae4816141f6565b82525050565b613af3816141f6565b82525050565b6000613b0582856131a4565b9150613b1182846131a4565b91508190509392505050565b6000613b28826139b5565b9150819050919050565b6000602082019050613b4760008301846130b6565b92915050565b6000608082019050613b6260008301876130b6565b613b6f60208301866130b6565b613b7c6040830185613aea565b8181036060830152613b8e8184613132565b905095945050505050565b60006020820190508181036000830152613bb381846130c5565b905092915050565b6000602082019050613bd06000830184613123565b92915050565b60006020820190508181036000830152613bf0818461316b565b905092915050565b60006020820190508181036000830152613c11816131d5565b9050919050565b60006020820190508181036000830152613c318161323b565b9050919050565b60006020820190508181036000830152613c51816132a1565b9050919050565b60006020820190508181036000830152613c7181613307565b9050919050565b60006020820190508181036000830152613c918161336d565b9050919050565b60006020820190508181036000830152613cb1816133d3565b9050919050565b60006020820190508181036000830152613cd181613439565b9050919050565b60006020820190508181036000830152613cf181613479565b9050919050565b60006020820190508181036000830152613d11816134b9565b9050919050565b60006020820190508181036000830152613d318161351f565b9050919050565b60006020820190508181036000830152613d518161355f565b9050919050565b60006020820190508181036000830152613d718161359f565b9050919050565b60006020820190508181036000830152613d9181613605565b9050919050565b60006020820190508181036000830152613db18161366b565b9050919050565b60006020820190508181036000830152613dd1816136d1565b9050919050565b60006020820190508181036000830152613df181613737565b9050919050565b60006020820190508181036000830152613e118161379d565b9050919050565b60006020820190508181036000830152613e31816137dd565b9050919050565b60006020820190508181036000830152613e5181613843565b9050919050565b60006020820190508181036000830152613e7181613883565b9050919050565b60006020820190508181036000830152613e91816138e9565b9050919050565b60006020820190508181036000830152613eb18161394f565b9050919050565b60006020820190508181036000830152613ed1816139cf565b9050919050565b60006020820190508181036000830152613ef181613a35565b9050919050565b60006020820190508181036000830152613f1181613a75565b9050919050565b6000602082019050613f2d6000830184613aea565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613f5a57613f5961437b565b5b8060405250919050565b600067ffffffffffffffff821115613f7f57613f7e61437b565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613fab57613faa61437b565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115613fdb57613fda61437b565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614082826141f6565b915061408d836141f6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140c2576140c16142ee565b5b828201905092915050565b60006140d8826141f6565b91506140e3836141f6565b9250826140f3576140f261431d565b5b828204905092915050565b6000614109826141f6565b9150614114836141f6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561414d5761414c6142ee565b5b828202905092915050565b6000614163826141f6565b915061416e836141f6565b925082821015614181576141806142ee565b5b828203905092915050565b6000614197826141d6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561422d578082015181840152602081019050614212565b8381111561423c576000848401525b50505050565b6000600282049050600182168061425a57607f821691505b6020821081141561426e5761426d61434c565b5b50919050565b600061427f826141f6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142b2576142b16142ee565b5b600182019050919050565b60006142c8826141f6565b91506142d3836141f6565b9250826142e3576142e261431d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6143c48161418c565b81146143cf57600080fd5b50565b6143db8161419e565b81146143e657600080fd5b50565b6143f2816141aa565b81146143fd57600080fd5b50565b614409816141f6565b811461441457600080fd5b5056fea2646970667358221220f274161595d341f93df165521f9944a6d56120a52416d8bbabe61ec700e1173464736f6c634300080000330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002768747470733a2f2f6d696e74686f6c61626164646965732e636f6d2f6170692f6261646469652f00000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101b75760003560e01c80636352211e116100ec578063a22cb4651161008a578063e985e9c511610064578063e985e9c51461060f578063f2fde38b1461064c578063f8149b8914610675578063fe60d12c14610691576101b7565b8063a22cb46514610580578063b88d4fde146105a9578063c87b56dd146105d2576101b7565b8063887e9c1e116100c6578063887e9c1e146104c25780638da5cb5b146104ff57806392e953961461052a57806395d89b4114610555576101b7565b80636352211e1461043157806370a082311461046e578063715018a6146104ab576101b7565b80632f745c59116101595780633e519cc6116101335780633e519cc61461038b57806342842e0e146103a25780634f6ccce7146103cb57806355f804b314610408576101b7565b80632f745c591461031b57806333e678f5146103585780633ccfd60b14610381576101b7565b8063095ea7b311610195578063095ea7b314610261578063171c41af1461028a57806318160ddd146102c757806323b872dd146102f2576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063081812fc14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190612fe2565b6106bc565b6040516101f09190613bbb565b60405180910390f35b34801561020557600080fd5b5061020e610736565b60405161021b9190613bd6565b60405180910390f35b34801561023057600080fd5b5061024b60048036038101906102469190613075565b6107c8565b6040516102589190613b32565b60405180910390f35b34801561026d57600080fd5b5061028860048036038101906102839190612f65565b61084d565b005b34801561029657600080fd5b506102b160048036038101906102ac9190612dfa565b610965565b6040516102be9190613bbb565b60405180910390f35b3480156102d357600080fd5b506102dc610985565b6040516102e99190613f18565b60405180910390f35b3480156102fe57600080fd5b5061031960048036038101906103149190612e5f565b610992565b005b34801561032757600080fd5b50610342600480360381019061033d9190612f65565b6109f2565b60405161034f9190613f18565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a9190612fa1565b610a97565b005b610389610be8565b005b34801561039757600080fd5b506103a0610c92565b005b3480156103ae57600080fd5b506103c960048036038101906103c49190612e5f565b610dd4565b005b3480156103d757600080fd5b506103f260048036038101906103ed9190613075565b610df4565b6040516103ff9190613f18565b60405180910390f35b34801561041457600080fd5b5061042f600480360381019061042a9190613034565b610e8b565b005b34801561043d57600080fd5b5061045860048036038101906104539190613075565b610f21565b6040516104659190613b32565b60405180910390f35b34801561047a57600080fd5b5061049560048036038101906104909190612dfa565b610fd3565b6040516104a29190613f18565b60405180910390f35b3480156104b757600080fd5b506104c061108b565b005b3480156104ce57600080fd5b506104e960048036038101906104e49190612dfa565b611113565b6040516104f69190613b99565b60405180910390f35b34801561050b57600080fd5b5061051461120d565b6040516105219190613b32565b60405180910390f35b34801561053657600080fd5b5061053f611237565b60405161054c9190613f18565b60405180910390f35b34801561056157600080fd5b5061056a61123d565b6040516105779190613bd6565b60405180910390f35b34801561058c57600080fd5b506105a760048036038101906105a29190612f29565b6112cf565b005b3480156105b557600080fd5b506105d060048036038101906105cb9190612eae565b611450565b005b3480156105de57600080fd5b506105f960048036038101906105f49190613075565b6114b2565b6040516106069190613bd6565b60405180910390f35b34801561061b57600080fd5b5061063660048036038101906106319190612e23565b611559565b6040516106439190613bbb565b60405180910390f35b34801561065857600080fd5b50610673600480360381019061066e9190612dfa565b6115ed565b005b61068f600480360381019061068a9190612f65565b6116e5565b005b34801561069d57600080fd5b506106a661193b565b6040516106b39190613f18565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061072f575061072e82611941565b5b9050919050565b60606000805461074590614242565b80601f016020809104026020016040519081016040528092919081815260200182805461077190614242565b80156107be5780601f10610793576101008083540402835291602001916107be565b820191906000526020600020905b8154815290600101906020018083116107a157829003601f168201915b5050505050905090565b60006107d382611a23565b610812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080990613e18565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061085882610f21565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c090613e98565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108e8611a8f565b73ffffffffffffffffffffffffffffffffffffffff161480610917575061091681610911611a8f565b611559565b5b610956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094d90613d78565b60405180910390fd5b6109608383611a97565b505050565b600f6020528060005260406000206000915054906101000a900460ff1681565b6000600880549050905090565b6109a361099d611a8f565b82611b50565b6109e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d990613eb8565b60405180910390fd5b6109ed838383611c2e565b505050565b60006109fd83610fd3565b8210610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590613c38565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610a9f611a8f565b73ffffffffffffffffffffffffffffffffffffffff16610abd61120d565b73ffffffffffffffffffffffffffffffffffffffff1614610b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0a90613e38565b60405180910390fd5b60005b8151811015610bca576001600f6000848481518110610b5e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610bc290614274565b915050610b16565b508051600b6000828254610bde9190614077565b9250508190555050565b610bf0611a8f565b73ffffffffffffffffffffffffffffffffffffffff16610c0e61120d565b73ffffffffffffffffffffffffffffffffffffffff1614610c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5b90613e38565b60405180910390fd5b610c90600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1647611e8a565b565b61270f610c9d610985565b10610cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd490613bf8565b60405180910390fd5b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6090613d38565b60405180910390fd5b610d7a33610d75610985565b611f3b565b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550565b610def83838360405180602001604052806000815250611450565b505050565b6000610dfe610985565b8210610e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3690613ef8565b60405180910390fd5b60088281548110610e79577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610e93611a8f565b73ffffffffffffffffffffffffffffffffffffffff16610eb161120d565b73ffffffffffffffffffffffffffffffffffffffff1614610f07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efe90613e38565b60405180910390fd5b8060109080519060200190610f1d929190612b88565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc190613dd8565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103b90613db8565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611093611a8f565b73ffffffffffffffffffffffffffffffffffffffff166110b161120d565b73ffffffffffffffffffffffffffffffffffffffff1614611107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fe90613e38565b60405180910390fd5b6111116000611f59565b565b6060600061112083610fd3565b905060008167ffffffffffffffff811115611164577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156111925781602001602082028036833780820191505090505b50905060005b82811015611202576111aa85826109f2565b8282815181106111e3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080806111fa90614274565b915050611198565b508092505050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61270f81565b60606001805461124c90614242565b80601f016020809104026020016040519081016040528092919081815260200182805461127890614242565b80156112c55780601f1061129a576101008083540402835291602001916112c5565b820191906000526020600020905b8154815290600101906020018083116112a857829003601f168201915b5050505050905090565b6112d7611a8f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133c90613d18565b60405180910390fd5b8060056000611352611a8f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166113ff611a8f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114449190613bbb565b60405180910390a35050565b61146161145b611a8f565b83611b50565b6114a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149790613eb8565b60405180910390fd5b6114ac8484848461201f565b50505050565b60606114bd82611a23565b6114fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f390613e78565b60405180910390fd5b600061150661207b565b905060008151116115265760405180602001604052806000815250611551565b806115308461210d565b604051602001611541929190613af9565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115f5611a8f565b73ffffffffffffffffffffffffffffffffffffffff1661161361120d565b73ffffffffffffffffffffffffffffffffffffffff1614611669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166090613e38565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d090613c98565b60405180910390fd5b6116e281611f59565b50565b61270f6116f0610985565b10611730576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172790613bf8565b60405180910390fd5b600b5461270f6117409190614158565b81611749610985565b6117539190614077565b1115611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b90613c78565b60405180910390fd5b600b5461270f6117a49190614158565b6117ac610985565b106117ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e390613d98565b60405180910390fd5b6014811115611830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182790613c18565b60405180910390fd5b600c548161183e91906140fe565b341015611880576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187790613ed8565b60405180910390fd5b60005b818110156118af5761189c83611897610985565b611f3b565b80806118a790614274565b915050611883565b5060006064600a346118c191906140fe565b6118cb91906140cd565b90506118f9600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611e8a565b600081346119079190614158565b9050611935600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611e8a565b50505050565b600b5481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a0c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611a1c5750611a1b826122ba565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b0a83610f21565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611b5b82611a23565b611b9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9190613d58565b60405180910390fd5b6000611ba583610f21565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c1457508373ffffffffffffffffffffffffffffffffffffffff16611bfc846107c8565b73ffffffffffffffffffffffffffffffffffffffff16145b80611c255750611c248185611559565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611c4e82610f21565b73ffffffffffffffffffffffffffffffffffffffff1614611ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9b90613e58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0b90613cf8565b60405180910390fd5b611d1f838383612324565b611d2a600082611a97565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d7a9190614158565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dd19190614077565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611eb090613b1d565b60006040518083038185875af1925050503d8060008114611eed576040519150601f19603f3d011682016040523d82523d6000602084013e611ef2565b606091505b5050905080611f36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2d90613cd8565b60405180910390fd5b505050565b611f55828260405180602001604052806000815250612438565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61202a848484611c2e565b61203684848484612493565b612075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206c90613c58565b60405180910390fd5b50505050565b60606010805461208a90614242565b80601f01602080910402602001604051908101604052809291908181526020018280546120b690614242565b80156121035780601f106120d857610100808354040283529160200191612103565b820191906000526020600020905b8154815290600101906020018083116120e657829003601f168201915b5050505050905090565b60606000821415612155576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506122b5565b600082905060005b6000821461218757808061217090614274565b915050600a8261218091906140cd565b915061215d565b60008167ffffffffffffffff8111156121c9577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156121fb5781602001600182028036833780820191505090505b5090505b600085146122ae576001826122149190614158565b9150600a8561222391906142bd565b603061222f9190614077565b60f81b81838151811061226b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122a791906140cd565b94506121ff565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61232f83838361262a565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123725761236d8161262f565b6123b1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146123b0576123af8382612678565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123f4576123ef816127e5565b612433565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612432576124318282612928565b5b5b505050565b61244283836129a7565b61244f6000848484612493565b61248e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248590613c58565b60405180910390fd5b505050565b60006124b48473ffffffffffffffffffffffffffffffffffffffff16612b75565b1561261d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124dd611a8f565b8786866040518563ffffffff1660e01b81526004016124ff9493929190613b4d565b602060405180830381600087803b15801561251957600080fd5b505af192505050801561254a57506040513d601f19601f82011682018060405250810190612547919061300b565b60015b6125cd573d806000811461257a576040519150601f19603f3d011682016040523d82523d6000602084013e61257f565b606091505b506000815114156125c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bc90613c58565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612622565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161268584610fd3565b61268f9190614158565b9050600060076000848152602001908152602001600020549050818114612774576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506127f99190614158565b905060006009600084815260200190815260200160002054905060006008838154811061284f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612897577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061290c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061293383610fd3565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0e90613df8565b60405180910390fd5b612a2081611a23565b15612a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5790613cb8565b60405180910390fd5b612a6c60008383612324565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612abc9190614077565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612b9490614242565b90600052602060002090601f016020900481019282612bb65760008555612bfd565b82601f10612bcf57805160ff1916838001178555612bfd565b82800160010185558215612bfd579182015b82811115612bfc578251825591602001919060010190612be1565b5b509050612c0a9190612c0e565b5090565b5b80821115612c27576000816000905550600101612c0f565b5090565b6000612c3e612c3984613f64565b613f33565b90508083825260208201905082856020860282011115612c5d57600080fd5b60005b85811015612c8d5781612c738882612d13565b845260208401935060208301925050600181019050612c60565b5050509392505050565b6000612caa612ca584613f90565b613f33565b905082815260208101848484011115612cc257600080fd5b612ccd848285614200565b509392505050565b6000612ce8612ce384613fc0565b613f33565b905082815260208101848484011115612d0057600080fd5b612d0b848285614200565b509392505050565b600081359050612d22816143bb565b92915050565b600082601f830112612d3957600080fd5b8135612d49848260208601612c2b565b91505092915050565b600081359050612d61816143d2565b92915050565b600081359050612d76816143e9565b92915050565b600081519050612d8b816143e9565b92915050565b600082601f830112612da257600080fd5b8135612db2848260208601612c97565b91505092915050565b600082601f830112612dcc57600080fd5b8135612ddc848260208601612cd5565b91505092915050565b600081359050612df481614400565b92915050565b600060208284031215612e0c57600080fd5b6000612e1a84828501612d13565b91505092915050565b60008060408385031215612e3657600080fd5b6000612e4485828601612d13565b9250506020612e5585828601612d13565b9150509250929050565b600080600060608486031215612e7457600080fd5b6000612e8286828701612d13565b9350506020612e9386828701612d13565b9250506040612ea486828701612de5565b9150509250925092565b60008060008060808587031215612ec457600080fd5b6000612ed287828801612d13565b9450506020612ee387828801612d13565b9350506040612ef487828801612de5565b925050606085013567ffffffffffffffff811115612f1157600080fd5b612f1d87828801612d91565b91505092959194509250565b60008060408385031215612f3c57600080fd5b6000612f4a85828601612d13565b9250506020612f5b85828601612d52565b9150509250929050565b60008060408385031215612f7857600080fd5b6000612f8685828601612d13565b9250506020612f9785828601612de5565b9150509250929050565b600060208284031215612fb357600080fd5b600082013567ffffffffffffffff811115612fcd57600080fd5b612fd984828501612d28565b91505092915050565b600060208284031215612ff457600080fd5b600061300284828501612d67565b91505092915050565b60006020828403121561301d57600080fd5b600061302b84828501612d7c565b91505092915050565b60006020828403121561304657600080fd5b600082013567ffffffffffffffff81111561306057600080fd5b61306c84828501612dbb565b91505092915050565b60006020828403121561308757600080fd5b600061309584828501612de5565b91505092915050565b60006130aa8383613adb565b60208301905092915050565b6130bf8161418c565b82525050565b60006130d082614000565b6130da818561402e565b93506130e583613ff0565b8060005b838110156131165781516130fd888261309e565b975061310883614021565b9250506001810190506130e9565b5085935050505092915050565b61312c8161419e565b82525050565b600061313d8261400b565b613147818561403f565b935061315781856020860161420f565b613160816143aa565b840191505092915050565b600061317682614016565b613180818561405b565b935061319081856020860161420f565b613199816143aa565b840191505092915050565b60006131af82614016565b6131b9818561406c565b93506131c981856020860161420f565b80840191505092915050565b60006131e260248361405b565b91507f416c6c20617661696c61626c65204261646469657320616c7265616479206d6960008301527f6e746564000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061324860298361405b565b91507f43616e2774206d696e74206d6f7265207468616e20323020426164646965732060008301527f617420612074696d6500000000000000000000000000000000000000000000006020830152604082019050919050565b60006132ae602b8361405b565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b600061331460328361405b565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061337a60298361405b565b91507f416c6d6f737420736f6c64206f75742c2074727920746f206d696e74206c657360008301527f73204261646469657300000000000000000000000000000000000000000000006020830152604082019050919050565b60006133e060268361405b565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613446601c8361405b565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000613486600d8361405b565b91507f5061796f7574206661696c6564000000000000000000000000000000000000006000830152602082019050919050565b60006134c660248361405b565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061352c60198361405b565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b600061356c601f8361405b565b91507f43616e6e6f7420636c61696d206f7220616c726561647920636c61696d6564006000830152602082019050919050565b60006135ac602c8361405b565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061361260388361405b565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b600061367860278361405b565b91507f416c6c206e6f6e2d7265736572766564204261646469657320616c726561647960008301527f206d696e746564000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006136de602a8361405b565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b600061374460298361405b565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006137aa60208361405b565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006137ea602c8361405b565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061385060208361405b565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061389060298361405b565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006138f6602f8361405b565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b600061395c60218361405b565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006139c2600083614050565b9150600082019050919050565b60006139dc60318361405b565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613a4260108361405b565b91507f507269636520697320746f6f206c6f77000000000000000000000000000000006000830152602082019050919050565b6000613a82602c8361405b565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b613ae4816141f6565b82525050565b613af3816141f6565b82525050565b6000613b0582856131a4565b9150613b1182846131a4565b91508190509392505050565b6000613b28826139b5565b9150819050919050565b6000602082019050613b4760008301846130b6565b92915050565b6000608082019050613b6260008301876130b6565b613b6f60208301866130b6565b613b7c6040830185613aea565b8181036060830152613b8e8184613132565b905095945050505050565b60006020820190508181036000830152613bb381846130c5565b905092915050565b6000602082019050613bd06000830184613123565b92915050565b60006020820190508181036000830152613bf0818461316b565b905092915050565b60006020820190508181036000830152613c11816131d5565b9050919050565b60006020820190508181036000830152613c318161323b565b9050919050565b60006020820190508181036000830152613c51816132a1565b9050919050565b60006020820190508181036000830152613c7181613307565b9050919050565b60006020820190508181036000830152613c918161336d565b9050919050565b60006020820190508181036000830152613cb1816133d3565b9050919050565b60006020820190508181036000830152613cd181613439565b9050919050565b60006020820190508181036000830152613cf181613479565b9050919050565b60006020820190508181036000830152613d11816134b9565b9050919050565b60006020820190508181036000830152613d318161351f565b9050919050565b60006020820190508181036000830152613d518161355f565b9050919050565b60006020820190508181036000830152613d718161359f565b9050919050565b60006020820190508181036000830152613d9181613605565b9050919050565b60006020820190508181036000830152613db18161366b565b9050919050565b60006020820190508181036000830152613dd1816136d1565b9050919050565b60006020820190508181036000830152613df181613737565b9050919050565b60006020820190508181036000830152613e118161379d565b9050919050565b60006020820190508181036000830152613e31816137dd565b9050919050565b60006020820190508181036000830152613e5181613843565b9050919050565b60006020820190508181036000830152613e7181613883565b9050919050565b60006020820190508181036000830152613e91816138e9565b9050919050565b60006020820190508181036000830152613eb18161394f565b9050919050565b60006020820190508181036000830152613ed1816139cf565b9050919050565b60006020820190508181036000830152613ef181613a35565b9050919050565b60006020820190508181036000830152613f1181613a75565b9050919050565b6000602082019050613f2d6000830184613aea565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613f5a57613f5961437b565b5b8060405250919050565b600067ffffffffffffffff821115613f7f57613f7e61437b565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613fab57613faa61437b565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115613fdb57613fda61437b565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614082826141f6565b915061408d836141f6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140c2576140c16142ee565b5b828201905092915050565b60006140d8826141f6565b91506140e3836141f6565b9250826140f3576140f261431d565b5b828204905092915050565b6000614109826141f6565b9150614114836141f6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561414d5761414c6142ee565b5b828202905092915050565b6000614163826141f6565b915061416e836141f6565b925082821015614181576141806142ee565b5b828203905092915050565b6000614197826141d6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561422d578082015181840152602081019050614212565b8381111561423c576000848401525b50505050565b6000600282049050600182168061425a57607f821691505b6020821081141561426e5761426d61434c565b5b50919050565b600061427f826141f6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142b2576142b16142ee565b5b600182019050919050565b60006142c8826141f6565b91506142d3836141f6565b9250826142e3576142e261431d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6143c48161418c565b81146143cf57600080fd5b50565b6143db8161419e565b81146143e657600080fd5b50565b6143f2816141aa565b81146143fd57600080fd5b50565b614409816141f6565b811461441457600080fd5b5056fea2646970667358221220f274161595d341f93df165521f9944a6d56120a52416d8bbabe61ec700e1173464736f6c63430008000033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002768747470733a2f2f6d696e74686f6c61626164646965732e636f6d2f6170692f6261646469652f00000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string): https://mintholabaddies.com/api/baddie/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000027
Arg [2] : 68747470733a2f2f6d696e74686f6c61626164646965732e636f6d2f6170692f
Arg [3] : 6261646469652f00000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

43144:3099:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34644:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21529:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23088:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22611:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43672:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35284:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23978:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34952:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46012:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45897:107;;;:::i;:::-;;44913:214;;;;;;;;;;;;;:::i;:::-;;24388:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35474:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45257:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21223:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20953:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42447:94;;;;;;;;;;;;;:::i;:::-;;45367:357;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41796:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43251:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21698:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23381:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24644:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21873:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23747:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42696:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44015:890;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43300:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34644:224;34746:4;34785:35;34770:50;;;:11;:50;;;;:90;;;;34824:36;34848:11;34824:23;:36::i;:::-;34770:90;34763:97;;34644:224;;;:::o;21529:100::-;21583:13;21616:5;21609:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21529:100;:::o;23088:221::-;23164:7;23192:16;23200:7;23192;:16::i;:::-;23184:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23277:15;:24;23293:7;23277:24;;;;;;;;;;;;;;;;;;;;;23270:31;;23088:221;;;:::o;22611:411::-;22692:13;22708:23;22723:7;22708:14;:23::i;:::-;22692:39;;22756:5;22750:11;;:2;:11;;;;22742:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22850:5;22834:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22859:37;22876:5;22883:12;:10;:12::i;:::-;22859:16;:37::i;:::-;22834:62;22812:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;22993:21;23002:2;23006:7;22993:8;:21::i;:::-;22611:411;;;:::o;43672:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;35284:113::-;35345:7;35372:10;:17;;;;35365:24;;35284:113;:::o;23978:339::-;24173:41;24192:12;:10;:12::i;:::-;24206:7;24173:18;:41::i;:::-;24165:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24281:28;24291:4;24297:2;24301:7;24281:9;:28::i;:::-;23978:339;;;:::o;34952:256::-;35049:7;35085:23;35102:5;35085:16;:23::i;:::-;35077:5;:31;35069:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35174:12;:19;35187:5;35174:19;;;;;;;;;;;;;;;:26;35194:5;35174:26;;;;;;;;;;;;35167:33;;34952:256;;;;:::o;46012:228::-;42027:12;:10;:12::i;:::-;42016:23;;:7;:5;:7::i;:::-;:23;;;42008:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46096:6:::1;46091:102;46110:10;:17;46106:1;:21;46091:102;;;46177:4;46150:9;:24;46160:10;46171:1;46160:13;;;;;;;;;;;;;;;;;;;;;;46150:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;46129:3;;;;;:::i;:::-;;;;46091:102;;;;46215:10;:17;46203:8;;:29;;;;;;;:::i;:::-;;;;;;;;46012:228:::0;:::o;45897:107::-;42027:12;:10;:12::i;:::-;42016:23;;:7;:5;:7::i;:::-;:23;;;42008:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45953:43:::1;45958:14;;;;;;;;;;;45974:21;45953:4;:43::i;:::-;45897:107::o:0;44913:214::-;43289:4;43919:13;:11;:13::i;:::-;:27;43911:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;44975:9:::1;:21;44985:10;44975:21;;;;;;;;;;;;;;;;;;;;;;;;;44967:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;45043:36;45053:10;45065:13;:11;:13::i;:::-;45043:9;:36::i;:::-;45114:5;45090:9;:21;45100:10;45090:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;44913:214::o:0;24388:185::-;24526:39;24543:4;24549:2;24553:7;24526:39;;;;;;;;;;;;:16;:39::i;:::-;24388:185;;;:::o;35474:233::-;35549:7;35585:30;:28;:30::i;:::-;35577:5;:38;35569:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35682:10;35693:5;35682:17;;;;;;;;;;;;;;;;;;;;;;;;35675:24;;35474:233;;;:::o;45257:102::-;42027:12;:10;:12::i;:::-;42016:23;;:7;:5;:7::i;:::-;:23;;;42008:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45344:7:::1;45328:13;:23;;;;;;;;;;;;:::i;:::-;;45257:102:::0;:::o;21223:239::-;21295:7;21315:13;21331:7;:16;21339:7;21331:16;;;;;;;;;;;;;;;;;;;;;21315:32;;21383:1;21366:19;;:5;:19;;;;21358:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21449:5;21442:12;;;21223:239;;;:::o;20953:208::-;21025:7;21070:1;21053:19;;:5;:19;;;;21045:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21137:9;:16;21147:5;21137:16;;;;;;;;;;;;;;;;21130:23;;20953:208;;;:::o;42447:94::-;42027:12;:10;:12::i;:::-;42016:23;;:7;:5;:7::i;:::-;:23;;;42008:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42512:21:::1;42530:1;42512:9;:21::i;:::-;42447:94::o:0;45367:357::-;45430:16;45459:19;45481:17;45491:6;45481:9;:17::i;:::-;45459:39;;45511:25;45553:11;45539:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45511:54;;45581:9;45576:113;45600:11;45596:1;:15;45576:113;;;45647:30;45667:6;45675:1;45647:19;:30::i;:::-;45633:8;45642:1;45633:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;45613:3;;;;;:::i;:::-;;;;45576:113;;;;45708:8;45701:15;;;;45367:357;;;:::o;41796:87::-;41842:7;41869:6;;;;;;;;;;;41862:13;;41796:87;:::o;43251:42::-;43289:4;43251:42;:::o;21698:104::-;21754:13;21787:7;21780:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21698:104;:::o;23381:295::-;23496:12;:10;:12::i;:::-;23484:24;;:8;:24;;;;23476:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23596:8;23551:18;:32;23570:12;:10;:12::i;:::-;23551:32;;;;;;;;;;;;;;;:42;23584:8;23551:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23649:8;23620:48;;23635:12;:10;:12::i;:::-;23620:48;;;23659:8;23620:48;;;;;;:::i;:::-;;;;;;;;23381:295;;:::o;24644:328::-;24819:41;24838:12;:10;:12::i;:::-;24852:7;24819:18;:41::i;:::-;24811:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24925:39;24939:4;24945:2;24949:7;24958:5;24925:13;:39::i;:::-;24644:328;;;;:::o;21873:334::-;21946:13;21980:16;21988:7;21980;:16::i;:::-;21972:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22061:21;22085:10;:8;:10::i;:::-;22061:34;;22137:1;22119:7;22113:21;:25;:86;;;;;;;;;;;;;;;;;22165:7;22174:18;:7;:16;:18::i;:::-;22148:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22113:86;22106:93;;;21873:334;;;:::o;23747:164::-;23844:4;23868:18;:25;23887:5;23868:25;;;;;;;;;;;;;;;:35;23894:8;23868:35;;;;;;;;;;;;;;;;;;;;;;;;;23861:42;;23747:164;;;;:::o;42696:192::-;42027:12;:10;:12::i;:::-;42016:23;;:7;:5;:7::i;:::-;:23;;;42008:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42805:1:::1;42785:22;;:8;:22;;;;42777:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42861:19;42871:8;42861:9;:19::i;:::-;42696:192:::0;:::o;44015:890::-;43289:4;43919:13;:11;:13::i;:::-;:27;43911:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;44150:8:::1;;43289:4;44136:22;;;;:::i;:::-;44126:6;44110:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:48;;44102:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;44253:8;;43289:4;44239:22;;;;:::i;:::-;44223:13;:11;:13::i;:::-;:38;44215:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;44334:2;44324:6;:12;;44316:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;44423:14;;44414:6;:23;;;;:::i;:::-;44401:9;:36;;44393:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;44530:6;44526:89;44546:6;44542:1;:10;44526:89;;;44574:29;44584:3;44589:13;:11;:13::i;:::-;44574:9;:29::i;:::-;44554:3;;;;;:::i;:::-;;;;44526:89;;;;44660:17;44704:3;43550:2;44680:9;:21;;;;:::i;:::-;:27;;;;:::i;:::-;44660:47;;44718:27;44723:10;;;;;;;;;;;44735:9;44718:4;:27::i;:::-;44806:21;44842:9;44830;:21;;;;:::i;:::-;44806:45;;44862:35;44867:14;;;;;;;;;;;44883:13;44862:4;:35::i;:::-;43998:1;;44015:890:::0;;:::o;43300:30::-;;;;:::o;20584:305::-;20686:4;20738:25;20723:40;;;:11;:40;;;;:105;;;;20795:33;20780:48;;;:11;:48;;;;20723:105;:158;;;;20845:36;20869:11;20845:23;:36::i;:::-;20723:158;20703:178;;20584:305;;;:::o;26482:127::-;26547:4;26599:1;26571:30;;:7;:16;26579:7;26571:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26564:37;;26482:127;;;:::o;15986:98::-;16039:7;16066:10;16059:17;;15986:98;:::o;30464:174::-;30566:2;30539:15;:24;30555:7;30539:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30622:7;30618:2;30584:46;;30593:23;30608:7;30593:14;:23::i;:::-;30584:46;;;;;;;;;;;;30464:174;;:::o;26776:348::-;26869:4;26894:16;26902:7;26894;:16::i;:::-;26886:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26970:13;26986:23;27001:7;26986:14;:23::i;:::-;26970:39;;27039:5;27028:16;;:7;:16;;;:51;;;;27072:7;27048:31;;:20;27060:7;27048:11;:20::i;:::-;:31;;;27028:51;:87;;;;27083:32;27100:5;27107:7;27083:16;:32::i;:::-;27028:87;27020:96;;;26776:348;;;;:::o;29768:578::-;29927:4;29900:31;;:23;29915:7;29900:14;:23::i;:::-;:31;;;29892:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30010:1;29996:16;;:2;:16;;;;29988:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30066:39;30087:4;30093:2;30097:7;30066:20;:39::i;:::-;30170:29;30187:1;30191:7;30170:8;:29::i;:::-;30231:1;30212:9;:15;30222:4;30212:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30260:1;30243:9;:13;30253:2;30243:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30291:2;30272:7;:16;30280:7;30272:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30330:7;30326:2;30311:27;;30320:4;30311:27;;;;;;;;;;;;29768:578;;;:::o;45732:157::-;45794:12;45812:2;:7;;45827:5;45812:25;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45793:44;;;45856:7;45848:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;45732:157;;;:::o;27466:110::-;27542:26;27552:2;27556:7;27542:26;;;;;;;;;;;;:9;:26::i;:::-;27466:110;;:::o;42896:173::-;42952:16;42971:6;;;;;;;;;;;42952:25;;42997:8;42988:6;;:17;;;;;;;;;;;;;;;;;;43052:8;43021:40;;43042:8;43021:40;;;;;;;;;;;;42896:173;;:::o;25854:315::-;26011:28;26021:4;26027:2;26031:7;26011:9;:28::i;:::-;26058:48;26081:4;26087:2;26091:7;26100:5;26058:22;:48::i;:::-;26050:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25854:315;;;;:::o;45135:114::-;45195:13;45228;45221:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45135:114;:::o;16519:723::-;16575:13;16805:1;16796:5;:10;16792:53;;;16823:10;;;;;;;;;;;;;;;;;;;;;16792:53;16855:12;16870:5;16855:20;;16886:14;16911:78;16926:1;16918:4;:9;16911:78;;16944:8;;;;;:::i;:::-;;;;16975:2;16967:10;;;;;:::i;:::-;;;16911:78;;;16999:19;17031:6;17021:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16999:39;;17049:154;17065:1;17056:5;:10;17049:154;;17093:1;17083:11;;;;;:::i;:::-;;;17160:2;17152:5;:10;;;;:::i;:::-;17139:2;:24;;;;:::i;:::-;17126:39;;17109:6;17116;17109:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;17189:2;17180:11;;;;;:::i;:::-;;;17049:154;;;17227:6;17213:21;;;;;16519:723;;;;:::o;19082:157::-;19167:4;19206:25;19191:40;;;:11;:40;;;;19184:47;;19082:157;;;:::o;36320:589::-;36464:45;36491:4;36497:2;36501:7;36464:26;:45::i;:::-;36542:1;36526:18;;:4;:18;;;36522:187;;;36561:40;36593:7;36561:31;:40::i;:::-;36522:187;;;36631:2;36623:10;;:4;:10;;;36619:90;;36650:47;36683:4;36689:7;36650:32;:47::i;:::-;36619:90;36522:187;36737:1;36723:16;;:2;:16;;;36719:183;;;36756:45;36793:7;36756:36;:45::i;:::-;36719:183;;;36829:4;36823:10;;:2;:10;;;36819:83;;36850:40;36878:2;36882:7;36850:27;:40::i;:::-;36819:83;36719:183;36320:589;;;:::o;27803:321::-;27933:18;27939:2;27943:7;27933:5;:18::i;:::-;27984:54;28015:1;28019:2;28023:7;28032:5;27984:22;:54::i;:::-;27962:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;27803:321;;;:::o;31203:803::-;31358:4;31379:15;:2;:13;;;:15::i;:::-;31375:624;;;31431:2;31415:36;;;31452:12;:10;:12::i;:::-;31466:4;31472:7;31481:5;31415:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31411:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31678:1;31661:6;:13;:18;31657:272;;;31704:60;;;;;;;;;;:::i;:::-;;;;;;;;31657:272;31879:6;31873:13;31864:6;31860:2;31856:15;31849:38;31411:533;31548:45;;;31538:55;;;:6;:55;;;;31531:62;;;;;31375:624;31983:4;31976:11;;31203:803;;;;;;;:::o;32578:126::-;;;;:::o;37632:164::-;37736:10;:17;;;;37709:15;:24;37725:7;37709:24;;;;;;;;;;;:44;;;;37764:10;37780:7;37764:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37632:164;:::o;38423:988::-;38689:22;38739:1;38714:22;38731:4;38714:16;:22::i;:::-;:26;;;;:::i;:::-;38689:51;;38751:18;38772:17;:26;38790:7;38772:26;;;;;;;;;;;;38751:47;;38919:14;38905:10;:28;38901:328;;38950:19;38972:12;:18;38985:4;38972:18;;;;;;;;;;;;;;;:34;38991:14;38972:34;;;;;;;;;;;;38950:56;;39056:11;39023:12;:18;39036:4;39023:18;;;;;;;;;;;;;;;:30;39042:10;39023:30;;;;;;;;;;;:44;;;;39173:10;39140:17;:30;39158:11;39140:30;;;;;;;;;;;:43;;;;38901:328;;39325:17;:26;39343:7;39325:26;;;;;;;;;;;39318:33;;;39369:12;:18;39382:4;39369:18;;;;;;;;;;;;;;;:34;39388:14;39369:34;;;;;;;;;;;39362:41;;;38423:988;;;;:::o;39706:1079::-;39959:22;40004:1;39984:10;:17;;;;:21;;;;:::i;:::-;39959:46;;40016:18;40037:15;:24;40053:7;40037:24;;;;;;;;;;;;40016:45;;40388:19;40410:10;40421:14;40410:26;;;;;;;;;;;;;;;;;;;;;;;;40388:48;;40474:11;40449:10;40460;40449:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;40585:10;40554:15;:28;40570:11;40554:28;;;;;;;;;;;:41;;;;40726:15;:24;40742:7;40726:24;;;;;;;;;;;40719:31;;;40761:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39706:1079;;;;:::o;37210:221::-;37295:14;37312:20;37329:2;37312:16;:20::i;:::-;37295:37;;37370:7;37343:12;:16;37356:2;37343:16;;;;;;;;;;;;;;;:24;37360:6;37343:24;;;;;;;;;;;:34;;;;37417:6;37388:17;:26;37406:7;37388:26;;;;;;;;;;;:35;;;;37210:221;;;:::o;28460:382::-;28554:1;28540:16;;:2;:16;;;;28532:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28613:16;28621:7;28613;:16::i;:::-;28612:17;28604:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28675:45;28704:1;28708:2;28712:7;28675:20;:45::i;:::-;28750:1;28733:9;:13;28743:2;28733:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28781:2;28762:7;:16;28770:7;28762:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28826:7;28822:2;28801:33;;28818:1;28801:33;;;;;;;;;;;;28460:382;;:::o;8240:387::-;8300:4;8508:12;8575:7;8563:20;8555:28;;8618:1;8611:4;:8;8604:15;;;8240:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;652:342::-;;754:64;769:48;810:6;769:48;:::i;:::-;754:64;:::i;:::-;745:73;;841:6;834:5;827:21;879:4;872:5;868:16;917:3;908:6;903:3;899:16;896:25;893:2;;;934:1;931;924:12;893:2;947:41;981:6;976:3;971;947:41;:::i;:::-;735:259;;;;;;:::o;1000:344::-;;1103:65;1118:49;1160:6;1118:49;:::i;:::-;1103:65;:::i;:::-;1094:74;;1191:6;1184:5;1177:21;1229:4;1222:5;1218:16;1267:3;1258:6;1253:3;1249:16;1246:25;1243:2;;;1284:1;1281;1274:12;1243:2;1297:41;1331:6;1326:3;1321;1297:41;:::i;:::-;1084:260;;;;;;:::o;1350:139::-;;1434:6;1421:20;1412:29;;1450:33;1477:5;1450:33;:::i;:::-;1402:87;;;;:::o;1512:303::-;;1632:3;1625:4;1617:6;1613:17;1609:27;1599:2;;1650:1;1647;1640:12;1599:2;1690:6;1677:20;1715:94;1805:3;1797:6;1790:4;1782:6;1778:17;1715:94;:::i;:::-;1706:103;;1589:226;;;;;:::o;1821:133::-;;1902:6;1889:20;1880:29;;1918:30;1942:5;1918:30;:::i;:::-;1870:84;;;;:::o;1960:137::-;;2043:6;2030:20;2021:29;;2059:32;2085:5;2059:32;:::i;:::-;2011:86;;;;:::o;2103:141::-;;2190:6;2184:13;2175:22;;2206:32;2232:5;2206:32;:::i;:::-;2165:79;;;;:::o;2263:271::-;;2367:3;2360:4;2352:6;2348:17;2344:27;2334:2;;2385:1;2382;2375:12;2334:2;2425:6;2412:20;2450:78;2524:3;2516:6;2509:4;2501:6;2497:17;2450:78;:::i;:::-;2441:87;;2324:210;;;;;:::o;2554:273::-;;2659:3;2652:4;2644:6;2640:17;2636:27;2626:2;;2677:1;2674;2667:12;2626:2;2717:6;2704:20;2742:79;2817:3;2809:6;2802:4;2794:6;2790:17;2742:79;:::i;:::-;2733:88;;2616:211;;;;;:::o;2833:139::-;;2917:6;2904:20;2895:29;;2933:33;2960:5;2933:33;:::i;:::-;2885:87;;;;:::o;2978:262::-;;3086:2;3074:9;3065:7;3061:23;3057:32;3054:2;;;3102:1;3099;3092:12;3054:2;3145:1;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3116:117;3044:196;;;;:::o;3246:407::-;;;3371:2;3359:9;3350:7;3346:23;3342:32;3339:2;;;3387:1;3384;3377:12;3339:2;3430:1;3455:53;3500:7;3491:6;3480:9;3476:22;3455:53;:::i;:::-;3445:63;;3401:117;3557:2;3583:53;3628:7;3619:6;3608:9;3604:22;3583:53;:::i;:::-;3573:63;;3528:118;3329:324;;;;;:::o;3659:552::-;;;;3801:2;3789:9;3780:7;3776:23;3772:32;3769:2;;;3817:1;3814;3807:12;3769:2;3860:1;3885:53;3930:7;3921:6;3910:9;3906:22;3885:53;:::i;:::-;3875:63;;3831:117;3987:2;4013:53;4058:7;4049:6;4038:9;4034:22;4013:53;:::i;:::-;4003:63;;3958:118;4115:2;4141:53;4186:7;4177:6;4166:9;4162:22;4141:53;:::i;:::-;4131:63;;4086:118;3759:452;;;;;:::o;4217:809::-;;;;;4385:3;4373:9;4364:7;4360:23;4356:33;4353:2;;;4402:1;4399;4392:12;4353:2;4445:1;4470:53;4515:7;4506:6;4495:9;4491:22;4470:53;:::i;:::-;4460:63;;4416:117;4572:2;4598:53;4643:7;4634:6;4623:9;4619:22;4598:53;:::i;:::-;4588:63;;4543:118;4700:2;4726:53;4771:7;4762:6;4751:9;4747:22;4726:53;:::i;:::-;4716:63;;4671:118;4856:2;4845:9;4841:18;4828:32;4887:18;4879:6;4876:30;4873:2;;;4919:1;4916;4909:12;4873:2;4947:62;5001:7;4992:6;4981:9;4977:22;4947:62;:::i;:::-;4937:72;;4799:220;4343:683;;;;;;;:::o;5032:401::-;;;5154:2;5142:9;5133:7;5129:23;5125:32;5122:2;;;5170:1;5167;5160:12;5122:2;5213:1;5238:53;5283:7;5274:6;5263:9;5259:22;5238:53;:::i;:::-;5228:63;;5184:117;5340:2;5366:50;5408:7;5399:6;5388:9;5384:22;5366:50;:::i;:::-;5356:60;;5311:115;5112:321;;;;;:::o;5439:407::-;;;5564:2;5552:9;5543:7;5539:23;5535:32;5532:2;;;5580:1;5577;5570:12;5532:2;5623:1;5648:53;5693:7;5684:6;5673:9;5669:22;5648:53;:::i;:::-;5638:63;;5594:117;5750:2;5776:53;5821:7;5812:6;5801:9;5797:22;5776:53;:::i;:::-;5766:63;;5721:118;5522:324;;;;;:::o;5852:405::-;;5985:2;5973:9;5964:7;5960:23;5956:32;5953:2;;;6001:1;5998;5991:12;5953:2;6072:1;6061:9;6057:17;6044:31;6102:18;6094:6;6091:30;6088:2;;;6134:1;6131;6124:12;6088:2;6162:78;6232:7;6223:6;6212:9;6208:22;6162:78;:::i;:::-;6152:88;;6015:235;5943:314;;;;:::o;6263:260::-;;6370:2;6358:9;6349:7;6345:23;6341:32;6338:2;;;6386:1;6383;6376:12;6338:2;6429:1;6454:52;6498:7;6489:6;6478:9;6474:22;6454:52;:::i;:::-;6444:62;;6400:116;6328:195;;;;:::o;6529:282::-;;6647:2;6635:9;6626:7;6622:23;6618:32;6615:2;;;6663:1;6660;6653:12;6615:2;6706:1;6731:63;6786:7;6777:6;6766:9;6762:22;6731:63;:::i;:::-;6721:73;;6677:127;6605:206;;;;:::o;6817:375::-;;6935:2;6923:9;6914:7;6910:23;6906:32;6903:2;;;6951:1;6948;6941:12;6903:2;7022:1;7011:9;7007:17;6994:31;7052:18;7044:6;7041:30;7038:2;;;7084:1;7081;7074:12;7038:2;7112:63;7167:7;7158:6;7147:9;7143:22;7112:63;:::i;:::-;7102:73;;6965:220;6893:299;;;;:::o;7198:262::-;;7306:2;7294:9;7285:7;7281:23;7277:32;7274:2;;;7322:1;7319;7312:12;7274:2;7365:1;7390:53;7435:7;7426:6;7415:9;7411:22;7390:53;:::i;:::-;7380:63;;7336:117;7264:196;;;;:::o;7466:179::-;;7556:46;7598:3;7590:6;7556:46;:::i;:::-;7634:4;7629:3;7625:14;7611:28;;7546:99;;;;:::o;7651:118::-;7738:24;7756:5;7738:24;:::i;:::-;7733:3;7726:37;7716:53;;:::o;7805:732::-;;7953:54;8001:5;7953:54;:::i;:::-;8023:86;8102:6;8097:3;8023:86;:::i;:::-;8016:93;;8133:56;8183:5;8133:56;:::i;:::-;8212:7;8243:1;8228:284;8253:6;8250:1;8247:13;8228:284;;;8329:6;8323:13;8356:63;8415:3;8400:13;8356:63;:::i;:::-;8349:70;;8442:60;8495:6;8442:60;:::i;:::-;8432:70;;8288:224;8275:1;8272;8268:9;8263:14;;8228:284;;;8232:14;8528:3;8521:10;;7929:608;;;;;;;:::o;8543:109::-;8624:21;8639:5;8624:21;:::i;:::-;8619:3;8612:34;8602:50;;:::o;8658:360::-;;8772:38;8804:5;8772:38;:::i;:::-;8826:70;8889:6;8884:3;8826:70;:::i;:::-;8819:77;;8905:52;8950:6;8945:3;8938:4;8931:5;8927:16;8905:52;:::i;:::-;8982:29;9004:6;8982:29;:::i;:::-;8977:3;8973:39;8966:46;;8748:270;;;;;:::o;9024:364::-;;9140:39;9173:5;9140:39;:::i;:::-;9195:71;9259:6;9254:3;9195:71;:::i;:::-;9188:78;;9275:52;9320:6;9315:3;9308:4;9301:5;9297:16;9275:52;:::i;:::-;9352:29;9374:6;9352:29;:::i;:::-;9347:3;9343:39;9336:46;;9116:272;;;;;:::o;9394:377::-;;9528:39;9561:5;9528:39;:::i;:::-;9583:89;9665:6;9660:3;9583:89;:::i;:::-;9576:96;;9681:52;9726:6;9721:3;9714:4;9707:5;9703:16;9681:52;:::i;:::-;9758:6;9753:3;9749:16;9742:23;;9504:267;;;;;:::o;9777:368::-;;9940:67;10004:2;9999:3;9940:67;:::i;:::-;9933:74;;10037:34;10033:1;10028:3;10024:11;10017:55;10103:6;10098:2;10093:3;10089:12;10082:28;10136:2;10131:3;10127:12;10120:19;;9923:222;;;:::o;10151:373::-;;10314:67;10378:2;10373:3;10314:67;:::i;:::-;10307:74;;10411:34;10407:1;10402:3;10398:11;10391:55;10477:11;10472:2;10467:3;10463:12;10456:33;10515:2;10510:3;10506:12;10499:19;;10297:227;;;:::o;10530:375::-;;10693:67;10757:2;10752:3;10693:67;:::i;:::-;10686:74;;10790:34;10786:1;10781:3;10777:11;10770:55;10856:13;10851:2;10846:3;10842:12;10835:35;10896:2;10891:3;10887:12;10880:19;;10676:229;;;:::o;10911:382::-;;11074:67;11138:2;11133:3;11074:67;:::i;:::-;11067:74;;11171:34;11167:1;11162:3;11158:11;11151:55;11237:20;11232:2;11227:3;11223:12;11216:42;11284:2;11279:3;11275:12;11268:19;;11057:236;;;:::o;11299:373::-;;11462:67;11526:2;11521:3;11462:67;:::i;:::-;11455:74;;11559:34;11555:1;11550:3;11546:11;11539:55;11625:11;11620:2;11615:3;11611:12;11604:33;11663:2;11658:3;11654:12;11647:19;;11445:227;;;:::o;11678:370::-;;11841:67;11905:2;11900:3;11841:67;:::i;:::-;11834:74;;11938:34;11934:1;11929:3;11925:11;11918:55;12004:8;11999:2;11994:3;11990:12;11983:30;12039:2;12034:3;12030:12;12023:19;;11824:224;;;:::o;12054:326::-;;12217:67;12281:2;12276:3;12217:67;:::i;:::-;12210:74;;12314:30;12310:1;12305:3;12301:11;12294:51;12371:2;12366:3;12362:12;12355:19;;12200:180;;;:::o;12386:311::-;;12549:67;12613:2;12608:3;12549:67;:::i;:::-;12542:74;;12646:15;12642:1;12637:3;12633:11;12626:36;12688:2;12683:3;12679:12;12672:19;;12532:165;;;:::o;12703:368::-;;12866:67;12930:2;12925:3;12866:67;:::i;:::-;12859:74;;12963:34;12959:1;12954:3;12950:11;12943:55;13029:6;13024:2;13019:3;13015:12;13008:28;13062:2;13057:3;13053:12;13046:19;;12849:222;;;:::o;13077:323::-;;13240:67;13304:2;13299:3;13240:67;:::i;:::-;13233:74;;13337:27;13333:1;13328:3;13324:11;13317:48;13391:2;13386:3;13382:12;13375:19;;13223:177;;;:::o;13406:329::-;;13569:67;13633:2;13628:3;13569:67;:::i;:::-;13562:74;;13666:33;13662:1;13657:3;13653:11;13646:54;13726:2;13721:3;13717:12;13710:19;;13552:183;;;:::o;13741:376::-;;13904:67;13968:2;13963:3;13904:67;:::i;:::-;13897:74;;14001:34;13997:1;13992:3;13988:11;13981:55;14067:14;14062:2;14057:3;14053:12;14046:36;14108:2;14103:3;14099:12;14092:19;;13887:230;;;:::o;14123:388::-;;14286:67;14350:2;14345:3;14286:67;:::i;:::-;14279:74;;14383:34;14379:1;14374:3;14370:11;14363:55;14449:26;14444:2;14439:3;14435:12;14428:48;14502:2;14497:3;14493:12;14486:19;;14269:242;;;:::o;14517:371::-;;14680:67;14744:2;14739:3;14680:67;:::i;:::-;14673:74;;14777:34;14773:1;14768:3;14764:11;14757:55;14843:9;14838:2;14833:3;14829:12;14822:31;14879:2;14874:3;14870:12;14863:19;;14663:225;;;:::o;14894:374::-;;15057:67;15121:2;15116:3;15057:67;:::i;:::-;15050:74;;15154:34;15150:1;15145:3;15141:11;15134:55;15220:12;15215:2;15210:3;15206:12;15199:34;15259:2;15254:3;15250:12;15243:19;;15040:228;;;:::o;15274:373::-;;15437:67;15501:2;15496:3;15437:67;:::i;:::-;15430:74;;15534:34;15530:1;15525:3;15521:11;15514:55;15600:11;15595:2;15590:3;15586:12;15579:33;15638:2;15633:3;15629:12;15622:19;;15420:227;;;:::o;15653:330::-;;15816:67;15880:2;15875:3;15816:67;:::i;:::-;15809:74;;15913:34;15909:1;15904:3;15900:11;15893:55;15974:2;15969:3;15965:12;15958:19;;15799:184;;;:::o;15989:376::-;;16152:67;16216:2;16211:3;16152:67;:::i;:::-;16145:74;;16249:34;16245:1;16240:3;16236:11;16229:55;16315:14;16310:2;16305:3;16301:12;16294:36;16356:2;16351:3;16347:12;16340:19;;16135:230;;;:::o;16371:330::-;;16534:67;16598:2;16593:3;16534:67;:::i;:::-;16527:74;;16631:34;16627:1;16622:3;16618:11;16611:55;16692:2;16687:3;16683:12;16676:19;;16517:184;;;:::o;16707:373::-;;16870:67;16934:2;16929:3;16870:67;:::i;:::-;16863:74;;16967:34;16963:1;16958:3;16954:11;16947:55;17033:11;17028:2;17023:3;17019:12;17012:33;17071:2;17066:3;17062:12;17055:19;;16853:227;;;:::o;17086:379::-;;17249:67;17313:2;17308:3;17249:67;:::i;:::-;17242:74;;17346:34;17342:1;17337:3;17333:11;17326:55;17412:17;17407:2;17402:3;17398:12;17391:39;17456:2;17451:3;17447:12;17440:19;;17232:233;;;:::o;17471:365::-;;17634:67;17698:2;17693:3;17634:67;:::i;:::-;17627:74;;17731:34;17727:1;17722:3;17718:11;17711:55;17797:3;17792:2;17787:3;17783:12;17776:25;17827:2;17822:3;17818:12;17811:19;;17617:219;;;:::o;17842:297::-;;18022:83;18103:1;18098:3;18022:83;:::i;:::-;18015:90;;18131:1;18126:3;18122:11;18115:18;;18005:134;;;:::o;18145:381::-;;18308:67;18372:2;18367:3;18308:67;:::i;:::-;18301:74;;18405:34;18401:1;18396:3;18392:11;18385:55;18471:19;18466:2;18461:3;18457:12;18450:41;18517:2;18512:3;18508:12;18501:19;;18291:235;;;:::o;18532:314::-;;18695:67;18759:2;18754:3;18695:67;:::i;:::-;18688:74;;18792:18;18788:1;18783:3;18779:11;18772:39;18837:2;18832:3;18828:12;18821:19;;18678:168;;;:::o;18852:376::-;;19015:67;19079:2;19074:3;19015:67;:::i;:::-;19008:74;;19112:34;19108:1;19103:3;19099:11;19092:55;19178:14;19173:2;19168:3;19164:12;19157:36;19219:2;19214:3;19210:12;19203:19;;18998:230;;;:::o;19234:108::-;19311:24;19329:5;19311:24;:::i;:::-;19306:3;19299:37;19289:53;;:::o;19348:118::-;19435:24;19453:5;19435:24;:::i;:::-;19430:3;19423:37;19413:53;;:::o;19472:435::-;;19674:95;19765:3;19756:6;19674:95;:::i;:::-;19667:102;;19786:95;19877:3;19868:6;19786:95;:::i;:::-;19779:102;;19898:3;19891:10;;19656:251;;;;;:::o;19913:379::-;;20119:147;20262:3;20119:147;:::i;:::-;20112:154;;20283:3;20276:10;;20101:191;;;:::o;20298:222::-;;20429:2;20418:9;20414:18;20406:26;;20442:71;20510:1;20499:9;20495:17;20486:6;20442:71;:::i;:::-;20396:124;;;;:::o;20526:640::-;;20759:3;20748:9;20744:19;20736:27;;20773:71;20841:1;20830:9;20826:17;20817:6;20773:71;:::i;:::-;20854:72;20922:2;20911:9;20907:18;20898:6;20854:72;:::i;:::-;20936;21004:2;20993:9;20989:18;20980:6;20936:72;:::i;:::-;21055:9;21049:4;21045:20;21040:2;21029:9;21025:18;21018:48;21083:76;21154:4;21145:6;21083:76;:::i;:::-;21075:84;;20726:440;;;;;;;:::o;21172:373::-;;21353:2;21342:9;21338:18;21330:26;;21402:9;21396:4;21392:20;21388:1;21377:9;21373:17;21366:47;21430:108;21533:4;21524:6;21430:108;:::i;:::-;21422:116;;21320:225;;;;:::o;21551:210::-;;21676:2;21665:9;21661:18;21653:26;;21689:65;21751:1;21740:9;21736:17;21727:6;21689:65;:::i;:::-;21643:118;;;;:::o;21767:313::-;;21918:2;21907:9;21903:18;21895:26;;21967:9;21961:4;21957:20;21953:1;21942:9;21938:17;21931:47;21995:78;22068:4;22059:6;21995:78;:::i;:::-;21987:86;;21885:195;;;;:::o;22086:419::-;;22290:2;22279:9;22275:18;22267:26;;22339:9;22333:4;22329:20;22325:1;22314:9;22310:17;22303:47;22367:131;22493:4;22367:131;:::i;:::-;22359:139;;22257:248;;;:::o;22511:419::-;;22715:2;22704:9;22700:18;22692:26;;22764:9;22758:4;22754:20;22750:1;22739:9;22735:17;22728:47;22792:131;22918:4;22792:131;:::i;:::-;22784:139;;22682:248;;;:::o;22936:419::-;;23140:2;23129:9;23125:18;23117:26;;23189:9;23183:4;23179:20;23175:1;23164:9;23160:17;23153:47;23217:131;23343:4;23217:131;:::i;:::-;23209:139;;23107:248;;;:::o;23361:419::-;;23565:2;23554:9;23550:18;23542:26;;23614:9;23608:4;23604:20;23600:1;23589:9;23585:17;23578:47;23642:131;23768:4;23642:131;:::i;:::-;23634:139;;23532:248;;;:::o;23786:419::-;;23990:2;23979:9;23975:18;23967:26;;24039:9;24033:4;24029:20;24025:1;24014:9;24010:17;24003:47;24067:131;24193:4;24067:131;:::i;:::-;24059:139;;23957:248;;;:::o;24211:419::-;;24415:2;24404:9;24400:18;24392:26;;24464:9;24458:4;24454:20;24450:1;24439:9;24435:17;24428:47;24492:131;24618:4;24492:131;:::i;:::-;24484:139;;24382:248;;;:::o;24636:419::-;;24840:2;24829:9;24825:18;24817:26;;24889:9;24883:4;24879:20;24875:1;24864:9;24860:17;24853:47;24917:131;25043:4;24917:131;:::i;:::-;24909:139;;24807:248;;;:::o;25061:419::-;;25265:2;25254:9;25250:18;25242:26;;25314:9;25308:4;25304:20;25300:1;25289:9;25285:17;25278:47;25342:131;25468:4;25342:131;:::i;:::-;25334:139;;25232:248;;;:::o;25486:419::-;;25690:2;25679:9;25675:18;25667:26;;25739:9;25733:4;25729:20;25725:1;25714:9;25710:17;25703:47;25767:131;25893:4;25767:131;:::i;:::-;25759:139;;25657:248;;;:::o;25911:419::-;;26115:2;26104:9;26100:18;26092:26;;26164:9;26158:4;26154:20;26150:1;26139:9;26135:17;26128:47;26192:131;26318:4;26192:131;:::i;:::-;26184:139;;26082:248;;;:::o;26336:419::-;;26540:2;26529:9;26525:18;26517:26;;26589:9;26583:4;26579:20;26575:1;26564:9;26560:17;26553:47;26617:131;26743:4;26617:131;:::i;:::-;26609:139;;26507:248;;;:::o;26761:419::-;;26965:2;26954:9;26950:18;26942:26;;27014:9;27008:4;27004:20;27000:1;26989:9;26985:17;26978:47;27042:131;27168:4;27042:131;:::i;:::-;27034:139;;26932:248;;;:::o;27186:419::-;;27390:2;27379:9;27375:18;27367:26;;27439:9;27433:4;27429:20;27425:1;27414:9;27410:17;27403:47;27467:131;27593:4;27467:131;:::i;:::-;27459:139;;27357:248;;;:::o;27611:419::-;;27815:2;27804:9;27800:18;27792:26;;27864:9;27858:4;27854:20;27850:1;27839:9;27835:17;27828:47;27892:131;28018:4;27892:131;:::i;:::-;27884:139;;27782:248;;;:::o;28036:419::-;;28240:2;28229:9;28225:18;28217:26;;28289:9;28283:4;28279:20;28275:1;28264:9;28260:17;28253:47;28317:131;28443:4;28317:131;:::i;:::-;28309:139;;28207:248;;;:::o;28461:419::-;;28665:2;28654:9;28650:18;28642:26;;28714:9;28708:4;28704:20;28700:1;28689:9;28685:17;28678:47;28742:131;28868:4;28742:131;:::i;:::-;28734:139;;28632:248;;;:::o;28886:419::-;;29090:2;29079:9;29075:18;29067:26;;29139:9;29133:4;29129:20;29125:1;29114:9;29110:17;29103:47;29167:131;29293:4;29167:131;:::i;:::-;29159:139;;29057:248;;;:::o;29311:419::-;;29515:2;29504:9;29500:18;29492:26;;29564:9;29558:4;29554:20;29550:1;29539:9;29535:17;29528:47;29592:131;29718:4;29592:131;:::i;:::-;29584:139;;29482:248;;;:::o;29736:419::-;;29940:2;29929:9;29925:18;29917:26;;29989:9;29983:4;29979:20;29975:1;29964:9;29960:17;29953:47;30017:131;30143:4;30017:131;:::i;:::-;30009:139;;29907:248;;;:::o;30161:419::-;;30365:2;30354:9;30350:18;30342:26;;30414:9;30408:4;30404:20;30400:1;30389:9;30385:17;30378:47;30442:131;30568:4;30442:131;:::i;:::-;30434:139;;30332:248;;;:::o;30586:419::-;;30790:2;30779:9;30775:18;30767:26;;30839:9;30833:4;30829:20;30825:1;30814:9;30810:17;30803:47;30867:131;30993:4;30867:131;:::i;:::-;30859:139;;30757:248;;;:::o;31011:419::-;;31215:2;31204:9;31200:18;31192:26;;31264:9;31258:4;31254:20;31250:1;31239:9;31235:17;31228:47;31292:131;31418:4;31292:131;:::i;:::-;31284:139;;31182:248;;;:::o;31436:419::-;;31640:2;31629:9;31625:18;31617:26;;31689:9;31683:4;31679:20;31675:1;31664:9;31660:17;31653:47;31717:131;31843:4;31717:131;:::i;:::-;31709:139;;31607:248;;;:::o;31861:419::-;;32065:2;32054:9;32050:18;32042:26;;32114:9;32108:4;32104:20;32100:1;32089:9;32085:17;32078:47;32142:131;32268:4;32142:131;:::i;:::-;32134:139;;32032:248;;;:::o;32286:419::-;;32490:2;32479:9;32475:18;32467:26;;32539:9;32533:4;32529:20;32525:1;32514:9;32510:17;32503:47;32567:131;32693:4;32567:131;:::i;:::-;32559:139;;32457:248;;;:::o;32711:222::-;;32842:2;32831:9;32827:18;32819:26;;32855:71;32923:1;32912:9;32908:17;32899:6;32855:71;:::i;:::-;32809:124;;;;:::o;32939:283::-;;33005:2;32999:9;32989:19;;33047:4;33039:6;33035:17;33154:6;33142:10;33139:22;33118:18;33106:10;33103:34;33100:62;33097:2;;;33165:18;;:::i;:::-;33097:2;33205:10;33201:2;33194:22;32979:243;;;;:::o;33228:311::-;;33395:18;33387:6;33384:30;33381:2;;;33417:18;;:::i;:::-;33381:2;33467:4;33459:6;33455:17;33447:25;;33527:4;33521;33517:15;33509:23;;33310:229;;;:::o;33545:331::-;;33696:18;33688:6;33685:30;33682:2;;;33718:18;;:::i;:::-;33682:2;33803:4;33799:9;33792:4;33784:6;33780:17;33776:33;33768:41;;33864:4;33858;33854:15;33846:23;;33611:265;;;:::o;33882:332::-;;34034:18;34026:6;34023:30;34020:2;;;34056:18;;:::i;:::-;34020:2;34141:4;34137:9;34130:4;34122:6;34118:17;34114:33;34106:41;;34202:4;34196;34192:15;34184:23;;33949:265;;;:::o;34220:132::-;;34310:3;34302:11;;34340:4;34335:3;34331:14;34323:22;;34292:60;;;:::o;34358:114::-;;34459:5;34453:12;34443:22;;34432:40;;;:::o;34478:98::-;;34563:5;34557:12;34547:22;;34536:40;;;:::o;34582:99::-;;34668:5;34662:12;34652:22;;34641:40;;;:::o;34687:113::-;;34789:4;34784:3;34780:14;34772:22;;34762:38;;;:::o;34806:184::-;;34939:6;34934:3;34927:19;34979:4;34974:3;34970:14;34955:29;;34917:73;;;;:::o;34996:168::-;;35113:6;35108:3;35101:19;35153:4;35148:3;35144:14;35129:29;;35091:73;;;;:::o;35170:147::-;;35308:3;35293:18;;35283:34;;;;:::o;35323:169::-;;35441:6;35436:3;35429:19;35481:4;35476:3;35472:14;35457:29;;35419:73;;;;:::o;35498:148::-;;35637:3;35622:18;;35612:34;;;;:::o;35652:305::-;;35711:20;35729:1;35711:20;:::i;:::-;35706:25;;35745:20;35763:1;35745:20;:::i;:::-;35740:25;;35899:1;35831:66;35827:74;35824:1;35821:81;35818:2;;;35905:18;;:::i;:::-;35818:2;35949:1;35946;35942:9;35935:16;;35696:261;;;;:::o;35963:185::-;;36020:20;36038:1;36020:20;:::i;:::-;36015:25;;36054:20;36072:1;36054:20;:::i;:::-;36049:25;;36093:1;36083:2;;36098:18;;:::i;:::-;36083:2;36140:1;36137;36133:9;36128:14;;36005:143;;;;:::o;36154:348::-;;36217:20;36235:1;36217:20;:::i;:::-;36212:25;;36251:20;36269:1;36251:20;:::i;:::-;36246:25;;36439:1;36371:66;36367:74;36364:1;36361:81;36356:1;36349:9;36342:17;36338:105;36335:2;;;36446:18;;:::i;:::-;36335:2;36494:1;36491;36487:9;36476:20;;36202:300;;;;:::o;36508:191::-;;36568:20;36586:1;36568:20;:::i;:::-;36563:25;;36602:20;36620:1;36602:20;:::i;:::-;36597:25;;36641:1;36638;36635:8;36632:2;;;36646:18;;:::i;:::-;36632:2;36691:1;36688;36684:9;36676:17;;36553:146;;;;:::o;36705:96::-;;36771:24;36789:5;36771:24;:::i;:::-;36760:35;;36750:51;;;:::o;36807:90::-;;36884:5;36877:13;36870:21;36859:32;;36849:48;;;:::o;36903:149::-;;36979:66;36972:5;36968:78;36957:89;;36947:105;;;:::o;37058:126::-;;37135:42;37128:5;37124:54;37113:65;;37103:81;;;:::o;37190:77::-;;37256:5;37245:16;;37235:32;;;:::o;37273:154::-;37357:6;37352:3;37347;37334:30;37419:1;37410:6;37405:3;37401:16;37394:27;37324:103;;;:::o;37433:307::-;37501:1;37511:113;37525:6;37522:1;37519:13;37511:113;;;37610:1;37605:3;37601:11;37595:18;37591:1;37586:3;37582:11;37575:39;37547:2;37544:1;37540:10;37535:15;;37511:113;;;37642:6;37639:1;37636:13;37633:2;;;37722:1;37713:6;37708:3;37704:16;37697:27;37633:2;37482:258;;;;:::o;37746:320::-;;37827:1;37821:4;37817:12;37807:22;;37874:1;37868:4;37864:12;37895:18;37885:2;;37951:4;37943:6;37939:17;37929:27;;37885:2;38013;38005:6;38002:14;37982:18;37979:38;37976:2;;;38032:18;;:::i;:::-;37976:2;37797:269;;;;:::o;38072:233::-;;38134:24;38152:5;38134:24;:::i;:::-;38125:33;;38180:66;38173:5;38170:77;38167:2;;;38250:18;;:::i;:::-;38167:2;38297:1;38290:5;38286:13;38279:20;;38115:190;;;:::o;38311:176::-;;38360:20;38378:1;38360:20;:::i;:::-;38355:25;;38394:20;38412:1;38394:20;:::i;:::-;38389:25;;38433:1;38423:2;;38438:18;;:::i;:::-;38423:2;38479:1;38476;38472:9;38467:14;;38345:142;;;;:::o;38493:180::-;38541:77;38538:1;38531:88;38638:4;38635:1;38628:15;38662:4;38659:1;38652:15;38679:180;38727:77;38724:1;38717:88;38824:4;38821:1;38814:15;38848:4;38845:1;38838:15;38865:180;38913:77;38910:1;38903:88;39010:4;39007:1;39000:15;39034:4;39031:1;39024:15;39051:180;39099:77;39096:1;39089:88;39196:4;39193:1;39186:15;39220:4;39217:1;39210:15;39237:102;;39329:2;39325:7;39320:2;39313:5;39309:14;39305:28;39295:38;;39285:54;;;:::o;39345:122::-;39418:24;39436:5;39418:24;:::i;:::-;39411:5;39408:35;39398:2;;39457:1;39454;39447:12;39398:2;39388:79;:::o;39473:116::-;39543:21;39558:5;39543:21;:::i;:::-;39536:5;39533:32;39523:2;;39579:1;39576;39569:12;39523:2;39513:76;:::o;39595:120::-;39667:23;39684:5;39667:23;:::i;:::-;39660:5;39657:34;39647:2;;39705:1;39702;39695:12;39647:2;39637:78;:::o;39721:122::-;39794:24;39812:5;39794:24;:::i;:::-;39787:5;39784:35;39774:2;;39833:1;39830;39823:12;39774:2;39764:79;:::o

Swarm Source

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