ETH Price: $2,674.33 (+1.41%)

Token

BoardPunks (BP)
 

Overview

Max Total Supply

321 BP

Holders

61

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 BP
0x2a10d16087c4be528ffe5d940b2402edf542a90e
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:
BoardPunks

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-26
*/

/**
 *Submitted for verification at Etherscan.io on 2022-06-24
*/

/**
 *Submitted for verification at Etherscan.io on 2022-06-14
*/

/**
 *Submitted for verification at Etherscan.io on 2022-02-12
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
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);
    }
}


//merkle start

// OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 *
 * WARNING: You should avoid using leaf values that are 64 bytes long prior to
 * hashing, or use a hash function other than keccak256 for hashing leaves.
 * This is because the concatenation of a sorted pair of internal nodes in
 * the merkle tree could be reinterpreted as a leaf value.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

//merkle end


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

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
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);
}
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);
}
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);
    }
}
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;
    }
}
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;
}
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);
}
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.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 {}
}


pragma solidity ^0.8.0;


struct DutchAuctionConfig {
  uint256 txLimit;
  uint256 startTime;
  uint256 bottomTime;
  uint256 stepInterval;
  uint256 startPrice;
  uint256 bottomPrice;
  uint256 priceStep;
}

contract BoardPunks is Ownable, ERC721 {
    
    uint constant maxSupply = 10000;
    uint public presale_price = 0.1 ether;
    uint public totalSupply = 0;

    bool public Presale_status = false;
    bool public public_sale_status = false;

    bool public custom_price = false;
    uint public custom_token_Price = 0.24 ether;
    
    mapping(address => bool) private presaleList;
    mapping(address => uint) private buyers_list;

    string public baseURI;
    uint public maxPerTransaction = 20;  //Max Limit for Sale
    uint public _walletLimit=3; //Max Limit for perwallet
    bytes32 public whitelistMerkleRoot;
  
    uint public phase=100;

      DutchAuctionConfig public dutchAuctionConfig = DutchAuctionConfig({
      txLimit: 20,
      startTime: 1656108600, // Tuesday, March 1, 2022 12:00:00 PM GMT
      bottomTime: 1656173500, // Tuesday, March 1, 2022 1:11:40 PM GMT
      stepInterval: 1200, // 20 minute
      startPrice: 3 ether,
      bottomPrice: 0.35 ether,
      priceStep: 0.05 ether
    });
         
    constructor() ERC721("BoardPunks", "BP"){}

   function buy(uint _count) public payable{
         require(public_sale_status == true, "Sale is Paused.");
        require(_count > 0, "mint at least one token");
        require(totalSupply + _count <= maxSupply, "Sold Out");
        require(totalSupply + _count<= phase, "No more tokens left in current phase");
        DutchAuctionConfig memory _config = dutchAuctionConfig;
        require(block.timestamp >= _config.startTime, "Sale is not active");
        require(_count <= _config.txLimit, "Transaction limit exceeded");

        uint256 mintPrice = getCurrentAuctionPrice() * _count;
        require(msg.value >= mintPrice, "Incorrect Amount. Try again."); 
      
  for(uint i = 0; i < _count; i++)
       { _safeMint(msg.sender, totalSupply + 1);
             totalSupply += 1; 
             addbuyer();
           }
    }

   function buy_presale(uint _count, bytes32[] calldata merkleProof) public payable{ 
        require(Presale_status == true, "Sale is Paused.");
        require(MerkleProof.verify(merkleProof,whitelistMerkleRoot,keccak256(abi.encodePacked(msg.sender))),"You are not in Presale List.");
        require(checkbuyer() + _count <= _walletLimit, "Wallet limit Reached");
        require(_count > 0, "mint at least one token");
        require(_count <= maxPerTransaction, "max per transaction 20");
        require(totalSupply + _count<= maxSupply, "Sold Out");
        require(totalSupply + _count<= phase, "No more tokens left in current phase");
        require(msg.value >= presale_price * _count, "incorrect ether amount");
        
       
         for(uint i = 0; i < _count; i++)
             { _safeMint(msg.sender, totalSupply + 1);
               totalSupply += 1; 
               addbuyer();
           }
    }

    function bpMint(address[] memory _wallets) public onlyOwner{
        require(_wallets.length > 0, "mint at least one token");
        require(_wallets.length <= maxPerTransaction, "max per transaction 20");
        require(totalSupply + _wallets.length <= maxSupply, "not enough tokens left");
        for(uint i = 0; i < _wallets.length; i++)
            _safeMint(_wallets[i], totalSupply + 1 + i);
        totalSupply += _wallets.length;
    }

    function presalegetCurrentAuctionPrice() public view returns (uint256 presalecurrentPrice) {
    return presalecurrentPrice=presale_price;
    }

    function getCurrentAuctionPrice() public view returns (uint256 currentPrice) {
    DutchAuctionConfig memory _config = dutchAuctionConfig;
    uint256 timestamp = block.timestamp;

    if(!custom_price){
    if (timestamp < _config.startTime) {
      currentPrice = _config.startPrice;
    } else if (timestamp >= _config.bottomTime) {
      currentPrice = _config.bottomPrice;
    } else {
      uint256 elapsedIntervals = (timestamp - _config.startTime) /
        _config.stepInterval;
      currentPrice =
        _config.startPrice -
        (elapsedIntervals * _config.priceStep);
    }
    return currentPrice;
    }

    else{
    return currentPrice=custom_token_Price;
    }
  
  }

  function configureDutchAuction(
    uint256 startTime,
    uint256 bottomTime,
    uint256 stepInterval,
    uint256 startPrice,
    uint256 bottomPrice,
    uint256 priceStep
  ) external onlyOwner {

    dutchAuctionConfig.startTime = startTime;
    dutchAuctionConfig.bottomTime = bottomTime;
    dutchAuctionConfig.stepInterval = stepInterval;
    dutchAuctionConfig.startPrice = startPrice;
    dutchAuctionConfig.bottomPrice = bottomPrice;
    dutchAuctionConfig.priceStep = priceStep;

  }

     function setPhase(uint256 _newPhase) public onlyOwner() {
        phase = _newPhase;
    }
    
    function addPresaleList(address[] memory _wallets) public onlyOwner{
        for(uint i; i < _wallets.length; i++)
            presaleList[_wallets[i]] = true;
    }
    
    function is_presale_active() public view returns(uint){
        require(Presale_status == true,"Sale not Started Yet.");
        return 1;
     }
      function is_sale_active() public view returns(uint){
      require(public_sale_status == true,"Sale not Started Yet.");
        return 1;
     }
     function checkPresale() public view returns(bool){
        return presaleList[msg.sender];
    }
    function setBaseUri(string memory _uri) external onlyOwner {
        baseURI = _uri;
    }
     function pre_Sale_status(bool temp) external onlyOwner {
        Presale_status = temp;
    }
    function publicSale_status(bool temp) external onlyOwner {
        public_sale_status = temp;
    }

    function enable_custom_price(bool _enable) external onlyOwner{
        custom_price = _enable;
    }  

       function update_preSale_price(uint price) external onlyOwner {
        presale_price = price;
    }
  
    function _baseURI() internal view virtual override returns (string memory) {
        return baseURI;
    }

    function addbuyer() internal {
         buyers_list[msg.sender] = buyers_list[msg.sender] + 1;
    }
    
    function checkbuyer() public view returns (uint) {
       
         return buyers_list[msg.sender];
    }

    function update_wallet_limit(uint number) external onlyOwner {
      _walletLimit = number;
    }

    function set_custom_token_price(uint _price) external onlyOwner{
    custom_token_Price = _price;
    } 

    function setWhiteListMerkleRoot(bytes32 merkleRoot) public onlyOwner {
		whitelistMerkleRoot = merkleRoot;
	}

   function withdraw() external onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }


}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":"Presale_status","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"}],"name":"addPresaleList","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":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"}],"name":"bpMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"buy_presale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"checkPresale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkbuyer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"bottomTime","type":"uint256"},{"internalType":"uint256","name":"stepInterval","type":"uint256"},{"internalType":"uint256","name":"startPrice","type":"uint256"},{"internalType":"uint256","name":"bottomPrice","type":"uint256"},{"internalType":"uint256","name":"priceStep","type":"uint256"}],"name":"configureDutchAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"custom_price","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"custom_token_Price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dutchAuctionConfig","outputs":[{"internalType":"uint256","name":"txLimit","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"bottomTime","type":"uint256"},{"internalType":"uint256","name":"stepInterval","type":"uint256"},{"internalType":"uint256","name":"startPrice","type":"uint256"},{"internalType":"uint256","name":"bottomPrice","type":"uint256"},{"internalType":"uint256","name":"priceStep","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"enable_custom_price","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentAuctionPrice","outputs":[{"internalType":"uint256","name":"currentPrice","type":"uint256"}],"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":[],"name":"is_presale_active","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"is_sale_active","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"temp","type":"bool"}],"name":"pre_Sale_status","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"presale_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presalegetCurrentAuctionPrice","outputs":[{"internalType":"uint256","name":"presalecurrentPrice","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"temp","type":"bool"}],"name":"publicSale_status","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"public_sale_status","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPhase","type":"uint256"}],"name":"setPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"}],"name":"setWhiteListMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"set_custom_token_price","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":"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":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"update_preSale_price","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"name":"update_wallet_limit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405267016345785d8a000060075560006008556000600960006101000a81548160ff0219169083151502179055506000600960016101000a81548160ff0219169083151502179055506000600960026101000a81548160ff021916908315150217905550670354a6ba7a180000600a556014600e556003600f5560646011556040518060e00160405280601481526020016362b6363881526020016362b733bc81526020016104b081526020016729a2241af62c000081526020016704db732547630000815260200166b1a2bc2ec500008152506012600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015550503480156200012d57600080fd5b506040518060400160405280600a81526020017f426f61726450756e6b73000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f4250000000000000000000000000000000000000000000000000000000000000815250620001ba620001ae620001f460201b60201c565b620001fc60201b60201c565b8160019080519060200190620001d2929190620002c0565b508060029080519060200190620001eb929190620002c0565b505050620003d5565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002ce9062000370565b90600052602060002090601f016020900481019282620002f257600085556200033e565b82601f106200030d57805160ff19168380011785556200033e565b828001600101855582156200033e579182015b828111156200033d57825182559160200191906001019062000320565b5b5090506200034d919062000351565b5090565b5b808211156200036c57600081600090555060010162000352565b5090565b600060028204905060018216806200038957607f821691505b60208210811415620003a0576200039f620003a6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6152b480620003e56000396000f3fe6080604052600436106102ae5760003560e01c80637bd07f8b11610175578063ba6dd6f0116100dc578063e985e9c511610095578063f0ca24dd1161006f578063f0ca24dd14610a5d578063f2fde38b14610a88578063f4effb6e14610ab1578063f962547414610ada576102ae565b8063e985e9c5146109ce578063ebb3151014610a0b578063ef5f198514610a34576102ae565b8063ba6dd6f0146108cd578063c4f2eb2a146108f8578063c87b56dd14610921578063cd7de4581461095e578063d96a094a14610989578063e08e65ea146109a5576102ae565b8063996953fc1161012e578063996953fc146107d1578063a0bcfc7f146107fc578063a22cb46514610825578063aa98e0c61461084e578063b1c9fe6e14610879578063b88d4fde146108a4576102ae565b80637bd07f8b146106cb5780638358090b146106fc5780638da5cb5b1461072557806395d89b411461075057806395ea5e671461077b578063969745e8146107a6576102ae565b80633a4087c711610219578063626877af116101d2578063626877af146105bd5780636352211e146105e657806363adc5a5146106235780636c0360eb1461064c57806370a0823114610677578063715018a6146106b4576102ae565b80633a4087c7146104d15780633ccfd60b146104fc57806342842e0e14610513578063492cf9541461053c5780634b980d671461056757806351c7115b14610592576102ae565b80630e2351e21161026b5780630e2351e2146103d557806318160ddd146104005780631cef37e41461042b57806323b872dd146104545780632cc826551461047d57806339ff7253146104a6576102ae565b806301ffc9a7146102b357806302689663146102f057806306fdde031461031b578063081812fc14610346578063095ea7b314610383578063097fedd3146103ac575b600080fd5b3480156102bf57600080fd5b506102da60048036038101906102d59190613ab3565b610af6565b6040516102e79190614203565b60405180910390f35b3480156102fc57600080fd5b50610305610bd8565b6040516103129190614203565b60405180910390f35b34801561032757600080fd5b50610330610c2c565b60405161033d9190614239565b60405180910390f35b34801561035257600080fd5b5061036d60048036038101906103689190613b56565b610cbe565b60405161037a919061419c565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a591906139d0565b610d43565b005b3480156103b857600080fd5b506103d360048036038101906103ce9190613be3565b610e5b565b005b3480156103e157600080fd5b506103ea610f1b565b6040516103f791906145fb565b60405180910390f35b34801561040c57600080fd5b50610415610f21565b60405161042291906145fb565b60405180910390f35b34801561043757600080fd5b50610452600480360381019061044d9190613a59565b610f27565b005b34801561046057600080fd5b5061047b600480360381019061047691906138ba565b610fc0565b005b34801561048957600080fd5b506104a4600480360381019061049f9190613b56565b611020565b005b3480156104b257600080fd5b506104bb6110a6565b6040516104c891906145fb565b60405180910390f35b3480156104dd57600080fd5b506104e66110ed565b6040516104f39190614203565b60405180910390f35b34801561050857600080fd5b50610511611100565b005b34801561051f57600080fd5b5061053a600480360381019061053591906138ba565b6111cc565b005b34801561054857600080fd5b506105516111ec565b60405161055e91906145fb565b60405180910390f35b34801561057357600080fd5b5061057c6111f2565b60405161058991906145fb565b60405180910390f35b34801561059e57600080fd5b506105a76111f8565b6040516105b491906145fb565b60405180910390f35b3480156105c957600080fd5b506105e460048036038101906105df9190613a10565b6112f1565b005b3480156105f257600080fd5b5061060d60048036038101906106089190613b56565b6114c4565b60405161061a919061419c565b60405180910390f35b34801561062f57600080fd5b5061064a60048036038101906106459190613b56565b611576565b005b34801561065857600080fd5b506106616115fc565b60405161066e9190614239565b60405180910390f35b34801561068357600080fd5b5061069e6004803603810190610699919061384d565b61168a565b6040516106ab91906145fb565b60405180910390f35b3480156106c057600080fd5b506106c9611742565b005b3480156106d757600080fd5b506106e06117ca565b6040516106f39796959493929190614616565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e9190613b56565b6117fa565b005b34801561073157600080fd5b5061073a611880565b604051610747919061419c565b60405180910390f35b34801561075c57600080fd5b506107656118a9565b6040516107729190614239565b60405180910390f35b34801561078757600080fd5b5061079061193b565b60405161079d9190614203565b60405180910390f35b3480156107b257600080fd5b506107bb61194e565b6040516107c891906145fb565b60405180910390f35b3480156107dd57600080fd5b506107e6611954565b6040516107f391906145fb565b60405180910390f35b34801561080857600080fd5b50610823600480360381019061081e9190613b0d565b6119b3565b005b34801561083157600080fd5b5061084c60048036038101906108479190613990565b611a49565b005b34801561085a57600080fd5b50610863611bca565b604051610870919061421e565b60405180910390f35b34801561088557600080fd5b5061088e611bd0565b60405161089b91906145fb565b60405180910390f35b3480156108b057600080fd5b506108cb60048036038101906108c6919061390d565b611bd6565b005b3480156108d957600080fd5b506108e2611c38565b6040516108ef9190614203565b60405180910390f35b34801561090457600080fd5b5061091f600480360381019061091a9190613b56565b611c4b565b005b34801561092d57600080fd5b5061094860048036038101906109439190613b56565b611cd1565b6040516109559190614239565b60405180910390f35b34801561096a57600080fd5b50610973611d78565b60405161098091906145fb565b60405180910390f35b6109a3600480360381019061099e9190613b56565b611dd7565b005b3480156109b157600080fd5b506109cc60048036038101906109c79190613a86565b6120b1565b005b3480156109da57600080fd5b506109f560048036038101906109f0919061387a565b612137565b604051610a029190614203565b60405180910390f35b348015610a1757600080fd5b50610a326004803603810190610a2d9190613a10565b6121cb565b005b348015610a4057600080fd5b50610a5b6004803603810190610a569190613a59565b6122dc565b005b348015610a6957600080fd5b50610a72612375565b604051610a7f91906145fb565b60405180910390f35b348015610a9457600080fd5b50610aaf6004803603810190610aaa919061384d565b61237f565b005b348015610abd57600080fd5b50610ad86004803603810190610ad39190613a59565b612477565b005b610af46004803603810190610aef9190613b83565b612510565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bc157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bd15750610bd08261284a565b5b9050919050565b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905090565b606060018054610c3b90614950565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6790614950565b8015610cb45780601f10610c8957610100808354040283529160200191610cb4565b820191906000526020600020905b815481529060010190602001808311610c9757829003601f168201915b5050505050905090565b6000610cc9826128b4565b610d08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cff9061445b565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d4e826114c4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db6906144fb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610dde612920565b73ffffffffffffffffffffffffffffffffffffffff161480610e0d5750610e0c81610e07612920565b612137565b5b610e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e43906143db565b60405180910390fd5b610e568383612928565b505050565b610e63612920565b73ffffffffffffffffffffffffffffffffffffffff16610e81611880565b73ffffffffffffffffffffffffffffffffffffffff1614610ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ece9061447b565b60405180910390fd5b856012600101819055508460126002018190555083601260030181905550826012600401819055508160126005018190555080601260060181905550505050505050565b600f5481565b60085481565b610f2f612920565b73ffffffffffffffffffffffffffffffffffffffff16610f4d611880565b73ffffffffffffffffffffffffffffffffffffffff1614610fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9a9061447b565b60405180910390fd5b80600960016101000a81548160ff02191690831515021790555050565b610fd1610fcb612920565b826129e1565b611010576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110079061451b565b60405180910390fd5b61101b838383612abf565b505050565b611028612920565b73ffffffffffffffffffffffffffffffffffffffff16611046611880565b73ffffffffffffffffffffffffffffffffffffffff161461109c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110939061447b565b60405180910390fd5b8060118190555050565b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b600960029054906101000a900460ff1681565b611108612920565b73ffffffffffffffffffffffffffffffffffffffff16611126611880565b73ffffffffffffffffffffffffffffffffffffffff161461117c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111739061447b565b60405180910390fd5b611184611880565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156111c9573d6000803e3d6000fd5b50565b6111e783838360405180602001604052806000815250611bd6565b505050565b600a5481565b600e5481565b60008060126040518060e001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152505090506000429050600960029054906101000a900460ff166112e657816020015181101561128157816080015192506112df565b81604001518110611298578160a0015192506112de565b600082606001518360200151836112af919061485c565b6112b991906147d1565b90508260c00151816112cb9190614802565b83608001516112da919061485c565b9350505b5b50506112ee565b600a54925050505b90565b6112f9612920565b73ffffffffffffffffffffffffffffffffffffffff16611317611880565b73ffffffffffffffffffffffffffffffffffffffff161461136d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113649061447b565b60405180910390fd5b60008151116113b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a89061453b565b60405180910390fd5b600e54815111156113f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ee9061455b565b60405180910390fd5b6127108151600854611409919061477b565b111561144a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611441906145bb565b60405180910390fd5b60005b81518110156114a65761149382828151811061146c5761146b614ade565b5b6020026020010151826001600854611484919061477b565b61148e919061477b565b612d1b565b808061149e906149b3565b91505061144d565b508051600860008282546114ba919061477b565b9250508190555050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561156d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115649061441b565b60405180910390fd5b80915050919050565b61157e612920565b73ffffffffffffffffffffffffffffffffffffffff1661159c611880565b73ffffffffffffffffffffffffffffffffffffffff16146115f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e99061447b565b60405180910390fd5b8060078190555050565b600d805461160990614950565b80601f016020809104026020016040519081016040528092919081815260200182805461163590614950565b80156116825780601f1061165757610100808354040283529160200191611682565b820191906000526020600020905b81548152906001019060200180831161166557829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f2906143fb565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61174a612920565b73ffffffffffffffffffffffffffffffffffffffff16611768611880565b73ffffffffffffffffffffffffffffffffffffffff16146117be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b59061447b565b60405180910390fd5b6117c86000612d39565b565b60128060000154908060010154908060020154908060030154908060040154908060050154908060060154905087565b611802612920565b73ffffffffffffffffffffffffffffffffffffffff16611820611880565b73ffffffffffffffffffffffffffffffffffffffff1614611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186d9061447b565b60405180910390fd5b80600f8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546118b890614950565b80601f01602080910402602001604051908101604052809291908181526020018280546118e490614950565b80156119315780601f1061190657610100808354040283529160200191611931565b820191906000526020600020905b81548152906001019060200180831161191457829003601f168201915b5050505050905090565b600960019054906101000a900460ff1681565b60075481565b600060011515600960009054906101000a900460ff161515146119ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a39061449b565b60405180910390fd5b6001905090565b6119bb612920565b73ffffffffffffffffffffffffffffffffffffffff166119d9611880565b73ffffffffffffffffffffffffffffffffffffffff1614611a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a269061447b565b60405180910390fd5b80600d9080519060200190611a45929190613558565b5050565b611a51612920565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab69061435b565b60405180910390fd5b8060066000611acc612920565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b79612920565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bbe9190614203565b60405180910390a35050565b60105481565b60115481565b611be7611be1612920565b836129e1565b611c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1d9061451b565b60405180910390fd5b611c3284848484612dfd565b50505050565b600960009054906101000a900460ff1681565b611c53612920565b73ffffffffffffffffffffffffffffffffffffffff16611c71611880565b73ffffffffffffffffffffffffffffffffffffffff1614611cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbe9061447b565b60405180910390fd5b80600a8190555050565b6060611cdc826128b4565b611d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d12906144db565b60405180910390fd5b6000611d25612e59565b90506000815111611d455760405180602001604052806000815250611d70565b80611d4f84612eeb565b604051602001611d60929190614178565b6040516020818303038152906040525b915050919050565b600060011515600960019054906101000a900460ff16151514611dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc79061449b565b60405180910390fd5b6001905090565b60011515600960019054906101000a900460ff16151514611e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e24906145db565b60405180910390fd5b60008111611e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e679061453b565b60405180910390fd5b61271081600854611e81919061477b565b1115611ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb9906142db565b60405180910390fd5b60115481600854611ed3919061477b565b1115611f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0b9061427b565b60405180910390fd5b600060126040518060e001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152505090508060200151421015611fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa99061437b565b60405180910390fd5b8060000151821115611ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff09061429b565b60405180910390fd5b6000826120046111f8565b61200e9190614802565b905080341015612053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204a9061457b565b60405180910390fd5b60005b838110156120ab57612076336001600854612071919061477b565b612d1b565b600160086000828254612089919061477b565b9250508190555061209861304c565b80806120a3906149b3565b915050612056565b50505050565b6120b9612920565b73ffffffffffffffffffffffffffffffffffffffff166120d7611880565b73ffffffffffffffffffffffffffffffffffffffff161461212d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121249061447b565b60405180910390fd5b8060108190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6121d3612920565b73ffffffffffffffffffffffffffffffffffffffff166121f1611880565b73ffffffffffffffffffffffffffffffffffffffff1614612247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223e9061447b565b60405180910390fd5b60005b81518110156122d8576001600b600084848151811061226c5761226b614ade565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806122d0906149b3565b91505061224a565b5050565b6122e4612920565b73ffffffffffffffffffffffffffffffffffffffff16612302611880565b73ffffffffffffffffffffffffffffffffffffffff1614612358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234f9061447b565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b6000600754905090565b612387612920565b73ffffffffffffffffffffffffffffffffffffffff166123a5611880565b73ffffffffffffffffffffffffffffffffffffffff16146123fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f29061447b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561246b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612462906142fb565b60405180910390fd5b61247481612d39565b50565b61247f612920565b73ffffffffffffffffffffffffffffffffffffffff1661249d611880565b73ffffffffffffffffffffffffffffffffffffffff16146124f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ea9061447b565b60405180910390fd5b80600960026101000a81548160ff02191690831515021790555050565b60011515600960009054906101000a900460ff16151514612566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255d906145db565b60405180910390fd5b6125da828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050601054336040516020016125bf919061415d565b604051602081830303815290604052805190602001206130dd565b612619576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126109061459b565b60405180910390fd5b600f54836126256110a6565b61262f919061477b565b1115612670576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126679061425b565b60405180910390fd5b600083116126b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126aa9061453b565b60405180910390fd5b600e548311156126f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ef9061455b565b60405180910390fd5b61271083600854612709919061477b565b111561274a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612741906142db565b60405180910390fd5b6011548360085461275b919061477b565b111561279c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127939061427b565b60405180910390fd5b826007546127aa9190614802565b3410156127ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e3906143bb565b60405180910390fd5b60005b838110156128445761280f33600160085461280a919061477b565b612d1b565b600160086000828254612822919061477b565b9250508190555061283161304c565b808061283c906149b3565b9150506127ef565b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661299b836114c4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006129ec826128b4565b612a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a229061439b565b60405180910390fd5b6000612a36836114c4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612aa557508373ffffffffffffffffffffffffffffffffffffffff16612a8d84610cbe565b73ffffffffffffffffffffffffffffffffffffffff16145b80612ab65750612ab58185612137565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612adf826114c4565b73ffffffffffffffffffffffffffffffffffffffff1614612b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2c906144bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9c9061433b565b60405180910390fd5b612bb08383836130f4565b612bbb600082612928565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c0b919061485c565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c62919061477b565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612d358282604051806020016040528060008152506130f9565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612e08848484612abf565b612e1484848484613154565b612e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4a906142bb565b60405180910390fd5b50505050565b6060600d8054612e6890614950565b80601f0160208091040260200160405190810160405280929190818152602001828054612e9490614950565b8015612ee15780601f10612eb657610100808354040283529160200191612ee1565b820191906000526020600020905b815481529060010190602001808311612ec457829003601f168201915b5050505050905090565b60606000821415612f33576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613047565b600082905060005b60008214612f65578080612f4e906149b3565b915050600a82612f5e91906147d1565b9150612f3b565b60008167ffffffffffffffff811115612f8157612f80614b0d565b5b6040519080825280601f01601f191660200182016040528015612fb35781602001600182028036833780820191505090505b5090505b6000851461304057600182612fcc919061485c565b9150600a85612fdb9190614a20565b6030612fe7919061477b565b60f81b818381518110612ffd57612ffc614ade565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561303991906147d1565b9450612fb7565b8093505050505b919050565b6001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613098919061477b565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b6000826130ea85846132eb565b1490509392505050565b505050565b6131038383613360565b6131106000848484613154565b61314f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613146906142bb565b60405180910390fd5b505050565b60006131758473ffffffffffffffffffffffffffffffffffffffff1661352e565b156132de578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261319e612920565b8786866040518563ffffffff1660e01b81526004016131c094939291906141b7565b602060405180830381600087803b1580156131da57600080fd5b505af192505050801561320b57506040513d601f19601f820116820180604052508101906132089190613ae0565b60015b61328e573d806000811461323b576040519150601f19603f3d011682016040523d82523d6000602084013e613240565b606091505b50600081511415613286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327d906142bb565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506132e3565b600190505b949350505050565b60008082905060005b845181101561335557600085828151811061331257613311614ade565b5b602002602001015190508083116133345761332d8382613541565b9250613341565b61333e8184613541565b92505b50808061334d906149b3565b9150506132f4565b508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133c79061443b565b60405180910390fd5b6133d9816128b4565b15613419576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134109061431b565b60405180910390fd5b613425600083836130f4565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613475919061477b565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b600082600052816020526040600020905092915050565b82805461356490614950565b90600052602060002090601f01602090048101928261358657600085556135cd565b82601f1061359f57805160ff19168380011785556135cd565b828001600101855582156135cd579182015b828111156135cc5782518255916020019190600101906135b1565b5b5090506135da91906135de565b5090565b5b808211156135f75760008160009055506001016135df565b5090565b600061360e613609846146aa565b614685565b9050808382526020820190508285602086028201111561363157613630614b46565b5b60005b85811015613661578161364788826136ef565b845260208401935060208301925050600181019050613634565b5050509392505050565b600061367e613679846146d6565b614685565b90508281526020810184848401111561369a57613699614b4b565b5b6136a584828561490e565b509392505050565b60006136c06136bb84614707565b614685565b9050828152602081018484840111156136dc576136db614b4b565b5b6136e784828561490e565b509392505050565b6000813590506136fe8161520b565b92915050565b600082601f83011261371957613718614b41565b5b81356137298482602086016135fb565b91505092915050565b60008083601f84011261374857613747614b41565b5b8235905067ffffffffffffffff81111561376557613764614b3c565b5b60208301915083602082028301111561378157613780614b46565b5b9250929050565b60008135905061379781615222565b92915050565b6000813590506137ac81615239565b92915050565b6000813590506137c181615250565b92915050565b6000815190506137d681615250565b92915050565b600082601f8301126137f1576137f0614b41565b5b813561380184826020860161366b565b91505092915050565b600082601f83011261381f5761381e614b41565b5b813561382f8482602086016136ad565b91505092915050565b60008135905061384781615267565b92915050565b60006020828403121561386357613862614b55565b5b6000613871848285016136ef565b91505092915050565b6000806040838503121561389157613890614b55565b5b600061389f858286016136ef565b92505060206138b0858286016136ef565b9150509250929050565b6000806000606084860312156138d3576138d2614b55565b5b60006138e1868287016136ef565b93505060206138f2868287016136ef565b925050604061390386828701613838565b9150509250925092565b6000806000806080858703121561392757613926614b55565b5b6000613935878288016136ef565b9450506020613946878288016136ef565b935050604061395787828801613838565b925050606085013567ffffffffffffffff81111561397857613977614b50565b5b613984878288016137dc565b91505092959194509250565b600080604083850312156139a7576139a6614b55565b5b60006139b5858286016136ef565b92505060206139c685828601613788565b9150509250929050565b600080604083850312156139e7576139e6614b55565b5b60006139f5858286016136ef565b9250506020613a0685828601613838565b9150509250929050565b600060208284031215613a2657613a25614b55565b5b600082013567ffffffffffffffff811115613a4457613a43614b50565b5b613a5084828501613704565b91505092915050565b600060208284031215613a6f57613a6e614b55565b5b6000613a7d84828501613788565b91505092915050565b600060208284031215613a9c57613a9b614b55565b5b6000613aaa8482850161379d565b91505092915050565b600060208284031215613ac957613ac8614b55565b5b6000613ad7848285016137b2565b91505092915050565b600060208284031215613af657613af5614b55565b5b6000613b04848285016137c7565b91505092915050565b600060208284031215613b2357613b22614b55565b5b600082013567ffffffffffffffff811115613b4157613b40614b50565b5b613b4d8482850161380a565b91505092915050565b600060208284031215613b6c57613b6b614b55565b5b6000613b7a84828501613838565b91505092915050565b600080600060408486031215613b9c57613b9b614b55565b5b6000613baa86828701613838565b935050602084013567ffffffffffffffff811115613bcb57613bca614b50565b5b613bd786828701613732565b92509250509250925092565b60008060008060008060c08789031215613c0057613bff614b55565b5b6000613c0e89828a01613838565b9650506020613c1f89828a01613838565b9550506040613c3089828a01613838565b9450506060613c4189828a01613838565b9350506080613c5289828a01613838565b92505060a0613c6389828a01613838565b9150509295509295509295565b613c7981614890565b82525050565b613c90613c8b82614890565b6149fc565b82525050565b613c9f816148a2565b82525050565b613cae816148ae565b82525050565b6000613cbf82614738565b613cc9818561474e565b9350613cd981856020860161491d565b613ce281614b5a565b840191505092915050565b6000613cf882614743565b613d02818561475f565b9350613d1281856020860161491d565b613d1b81614b5a565b840191505092915050565b6000613d3182614743565b613d3b8185614770565b9350613d4b81856020860161491d565b80840191505092915050565b6000613d6460148361475f565b9150613d6f82614b78565b602082019050919050565b6000613d8760248361475f565b9150613d9282614ba1565b604082019050919050565b6000613daa601a8361475f565b9150613db582614bf0565b602082019050919050565b6000613dcd60328361475f565b9150613dd882614c19565b604082019050919050565b6000613df060088361475f565b9150613dfb82614c68565b602082019050919050565b6000613e1360268361475f565b9150613e1e82614c91565b604082019050919050565b6000613e36601c8361475f565b9150613e4182614ce0565b602082019050919050565b6000613e5960248361475f565b9150613e6482614d09565b604082019050919050565b6000613e7c60198361475f565b9150613e8782614d58565b602082019050919050565b6000613e9f60128361475f565b9150613eaa82614d81565b602082019050919050565b6000613ec2602c8361475f565b9150613ecd82614daa565b604082019050919050565b6000613ee560168361475f565b9150613ef082614df9565b602082019050919050565b6000613f0860388361475f565b9150613f1382614e22565b604082019050919050565b6000613f2b602a8361475f565b9150613f3682614e71565b604082019050919050565b6000613f4e60298361475f565b9150613f5982614ec0565b604082019050919050565b6000613f7160208361475f565b9150613f7c82614f0f565b602082019050919050565b6000613f94602c8361475f565b9150613f9f82614f38565b604082019050919050565b6000613fb760208361475f565b9150613fc282614f87565b602082019050919050565b6000613fda60158361475f565b9150613fe582614fb0565b602082019050919050565b6000613ffd60298361475f565b915061400882614fd9565b604082019050919050565b6000614020602f8361475f565b915061402b82615028565b604082019050919050565b600061404360218361475f565b915061404e82615077565b604082019050919050565b600061406660318361475f565b9150614071826150c6565b604082019050919050565b600061408960178361475f565b915061409482615115565b602082019050919050565b60006140ac60168361475f565b91506140b78261513e565b602082019050919050565b60006140cf601c8361475f565b91506140da82615167565b602082019050919050565b60006140f2601c8361475f565b91506140fd82615190565b602082019050919050565b600061411560168361475f565b9150614120826151b9565b602082019050919050565b6000614138600f8361475f565b9150614143826151e2565b602082019050919050565b61415781614904565b82525050565b60006141698284613c7f565b60148201915081905092915050565b60006141848285613d26565b91506141908284613d26565b91508190509392505050565b60006020820190506141b16000830184613c70565b92915050565b60006080820190506141cc6000830187613c70565b6141d96020830186613c70565b6141e6604083018561414e565b81810360608301526141f88184613cb4565b905095945050505050565b60006020820190506142186000830184613c96565b92915050565b60006020820190506142336000830184613ca5565b92915050565b600060208201905081810360008301526142538184613ced565b905092915050565b6000602082019050818103600083015261427481613d57565b9050919050565b6000602082019050818103600083015261429481613d7a565b9050919050565b600060208201905081810360008301526142b481613d9d565b9050919050565b600060208201905081810360008301526142d481613dc0565b9050919050565b600060208201905081810360008301526142f481613de3565b9050919050565b6000602082019050818103600083015261431481613e06565b9050919050565b6000602082019050818103600083015261433481613e29565b9050919050565b6000602082019050818103600083015261435481613e4c565b9050919050565b6000602082019050818103600083015261437481613e6f565b9050919050565b6000602082019050818103600083015261439481613e92565b9050919050565b600060208201905081810360008301526143b481613eb5565b9050919050565b600060208201905081810360008301526143d481613ed8565b9050919050565b600060208201905081810360008301526143f481613efb565b9050919050565b6000602082019050818103600083015261441481613f1e565b9050919050565b6000602082019050818103600083015261443481613f41565b9050919050565b6000602082019050818103600083015261445481613f64565b9050919050565b6000602082019050818103600083015261447481613f87565b9050919050565b6000602082019050818103600083015261449481613faa565b9050919050565b600060208201905081810360008301526144b481613fcd565b9050919050565b600060208201905081810360008301526144d481613ff0565b9050919050565b600060208201905081810360008301526144f481614013565b9050919050565b6000602082019050818103600083015261451481614036565b9050919050565b6000602082019050818103600083015261453481614059565b9050919050565b600060208201905081810360008301526145548161407c565b9050919050565b600060208201905081810360008301526145748161409f565b9050919050565b60006020820190508181036000830152614594816140c2565b9050919050565b600060208201905081810360008301526145b4816140e5565b9050919050565b600060208201905081810360008301526145d481614108565b9050919050565b600060208201905081810360008301526145f48161412b565b9050919050565b6000602082019050614610600083018461414e565b92915050565b600060e08201905061462b600083018a61414e565b614638602083018961414e565b614645604083018861414e565b614652606083018761414e565b61465f608083018661414e565b61466c60a083018561414e565b61467960c083018461414e565b98975050505050505050565b600061468f6146a0565b905061469b8282614982565b919050565b6000604051905090565b600067ffffffffffffffff8211156146c5576146c4614b0d565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156146f1576146f0614b0d565b5b6146fa82614b5a565b9050602081019050919050565b600067ffffffffffffffff82111561472257614721614b0d565b5b61472b82614b5a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061478682614904565b915061479183614904565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147c6576147c5614a51565b5b828201905092915050565b60006147dc82614904565b91506147e783614904565b9250826147f7576147f6614a80565b5b828204905092915050565b600061480d82614904565b915061481883614904565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561485157614850614a51565b5b828202905092915050565b600061486782614904565b915061487283614904565b92508282101561488557614884614a51565b5b828203905092915050565b600061489b826148e4565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561493b578082015181840152602081019050614920565b8381111561494a576000848401525b50505050565b6000600282049050600182168061496857607f821691505b6020821081141561497c5761497b614aaf565b5b50919050565b61498b82614b5a565b810181811067ffffffffffffffff821117156149aa576149a9614b0d565b5b80604052505050565b60006149be82614904565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156149f1576149f0614a51565b5b600182019050919050565b6000614a0782614a0e565b9050919050565b6000614a1982614b6b565b9050919050565b6000614a2b82614904565b9150614a3683614904565b925082614a4657614a45614a80565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f57616c6c6574206c696d69742052656163686564000000000000000000000000600082015250565b7f4e6f206d6f726520746f6b656e73206c65667420696e2063757272656e74207060008201527f6861736500000000000000000000000000000000000000000000000000000000602082015250565b7f5472616e73616374696f6e206c696d6974206578636565646564000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f536f6c64204f7574000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206163746976650000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f696e636f727265637420657468657220616d6f756e7400000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53616c65206e6f742053746172746564205965742e0000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f6d696e74206174206c65617374206f6e6520746f6b656e000000000000000000600082015250565b7f6d617820706572207472616e73616374696f6e20323000000000000000000000600082015250565b7f496e636f727265637420416d6f756e742e2054727920616761696e2e00000000600082015250565b7f596f7520617265206e6f7420696e2050726573616c65204c6973742e00000000600082015250565b7f6e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f53616c65206973205061757365642e0000000000000000000000000000000000600082015250565b61521481614890565b811461521f57600080fd5b50565b61522b816148a2565b811461523657600080fd5b50565b615242816148ae565b811461524d57600080fd5b50565b615259816148b8565b811461526457600080fd5b50565b61527081614904565b811461527b57600080fd5b5056fea26469706673582212207433df92f18689b74963360dbda1cb741e0774f0033bc4da2c575e3bbcc66e4b64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102ae5760003560e01c80637bd07f8b11610175578063ba6dd6f0116100dc578063e985e9c511610095578063f0ca24dd1161006f578063f0ca24dd14610a5d578063f2fde38b14610a88578063f4effb6e14610ab1578063f962547414610ada576102ae565b8063e985e9c5146109ce578063ebb3151014610a0b578063ef5f198514610a34576102ae565b8063ba6dd6f0146108cd578063c4f2eb2a146108f8578063c87b56dd14610921578063cd7de4581461095e578063d96a094a14610989578063e08e65ea146109a5576102ae565b8063996953fc1161012e578063996953fc146107d1578063a0bcfc7f146107fc578063a22cb46514610825578063aa98e0c61461084e578063b1c9fe6e14610879578063b88d4fde146108a4576102ae565b80637bd07f8b146106cb5780638358090b146106fc5780638da5cb5b1461072557806395d89b411461075057806395ea5e671461077b578063969745e8146107a6576102ae565b80633a4087c711610219578063626877af116101d2578063626877af146105bd5780636352211e146105e657806363adc5a5146106235780636c0360eb1461064c57806370a0823114610677578063715018a6146106b4576102ae565b80633a4087c7146104d15780633ccfd60b146104fc57806342842e0e14610513578063492cf9541461053c5780634b980d671461056757806351c7115b14610592576102ae565b80630e2351e21161026b5780630e2351e2146103d557806318160ddd146104005780631cef37e41461042b57806323b872dd146104545780632cc826551461047d57806339ff7253146104a6576102ae565b806301ffc9a7146102b357806302689663146102f057806306fdde031461031b578063081812fc14610346578063095ea7b314610383578063097fedd3146103ac575b600080fd5b3480156102bf57600080fd5b506102da60048036038101906102d59190613ab3565b610af6565b6040516102e79190614203565b60405180910390f35b3480156102fc57600080fd5b50610305610bd8565b6040516103129190614203565b60405180910390f35b34801561032757600080fd5b50610330610c2c565b60405161033d9190614239565b60405180910390f35b34801561035257600080fd5b5061036d60048036038101906103689190613b56565b610cbe565b60405161037a919061419c565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a591906139d0565b610d43565b005b3480156103b857600080fd5b506103d360048036038101906103ce9190613be3565b610e5b565b005b3480156103e157600080fd5b506103ea610f1b565b6040516103f791906145fb565b60405180910390f35b34801561040c57600080fd5b50610415610f21565b60405161042291906145fb565b60405180910390f35b34801561043757600080fd5b50610452600480360381019061044d9190613a59565b610f27565b005b34801561046057600080fd5b5061047b600480360381019061047691906138ba565b610fc0565b005b34801561048957600080fd5b506104a4600480360381019061049f9190613b56565b611020565b005b3480156104b257600080fd5b506104bb6110a6565b6040516104c891906145fb565b60405180910390f35b3480156104dd57600080fd5b506104e66110ed565b6040516104f39190614203565b60405180910390f35b34801561050857600080fd5b50610511611100565b005b34801561051f57600080fd5b5061053a600480360381019061053591906138ba565b6111cc565b005b34801561054857600080fd5b506105516111ec565b60405161055e91906145fb565b60405180910390f35b34801561057357600080fd5b5061057c6111f2565b60405161058991906145fb565b60405180910390f35b34801561059e57600080fd5b506105a76111f8565b6040516105b491906145fb565b60405180910390f35b3480156105c957600080fd5b506105e460048036038101906105df9190613a10565b6112f1565b005b3480156105f257600080fd5b5061060d60048036038101906106089190613b56565b6114c4565b60405161061a919061419c565b60405180910390f35b34801561062f57600080fd5b5061064a60048036038101906106459190613b56565b611576565b005b34801561065857600080fd5b506106616115fc565b60405161066e9190614239565b60405180910390f35b34801561068357600080fd5b5061069e6004803603810190610699919061384d565b61168a565b6040516106ab91906145fb565b60405180910390f35b3480156106c057600080fd5b506106c9611742565b005b3480156106d757600080fd5b506106e06117ca565b6040516106f39796959493929190614616565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e9190613b56565b6117fa565b005b34801561073157600080fd5b5061073a611880565b604051610747919061419c565b60405180910390f35b34801561075c57600080fd5b506107656118a9565b6040516107729190614239565b60405180910390f35b34801561078757600080fd5b5061079061193b565b60405161079d9190614203565b60405180910390f35b3480156107b257600080fd5b506107bb61194e565b6040516107c891906145fb565b60405180910390f35b3480156107dd57600080fd5b506107e6611954565b6040516107f391906145fb565b60405180910390f35b34801561080857600080fd5b50610823600480360381019061081e9190613b0d565b6119b3565b005b34801561083157600080fd5b5061084c60048036038101906108479190613990565b611a49565b005b34801561085a57600080fd5b50610863611bca565b604051610870919061421e565b60405180910390f35b34801561088557600080fd5b5061088e611bd0565b60405161089b91906145fb565b60405180910390f35b3480156108b057600080fd5b506108cb60048036038101906108c6919061390d565b611bd6565b005b3480156108d957600080fd5b506108e2611c38565b6040516108ef9190614203565b60405180910390f35b34801561090457600080fd5b5061091f600480360381019061091a9190613b56565b611c4b565b005b34801561092d57600080fd5b5061094860048036038101906109439190613b56565b611cd1565b6040516109559190614239565b60405180910390f35b34801561096a57600080fd5b50610973611d78565b60405161098091906145fb565b60405180910390f35b6109a3600480360381019061099e9190613b56565b611dd7565b005b3480156109b157600080fd5b506109cc60048036038101906109c79190613a86565b6120b1565b005b3480156109da57600080fd5b506109f560048036038101906109f0919061387a565b612137565b604051610a029190614203565b60405180910390f35b348015610a1757600080fd5b50610a326004803603810190610a2d9190613a10565b6121cb565b005b348015610a4057600080fd5b50610a5b6004803603810190610a569190613a59565b6122dc565b005b348015610a6957600080fd5b50610a72612375565b604051610a7f91906145fb565b60405180910390f35b348015610a9457600080fd5b50610aaf6004803603810190610aaa919061384d565b61237f565b005b348015610abd57600080fd5b50610ad86004803603810190610ad39190613a59565b612477565b005b610af46004803603810190610aef9190613b83565b612510565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bc157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bd15750610bd08261284a565b5b9050919050565b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905090565b606060018054610c3b90614950565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6790614950565b8015610cb45780601f10610c8957610100808354040283529160200191610cb4565b820191906000526020600020905b815481529060010190602001808311610c9757829003601f168201915b5050505050905090565b6000610cc9826128b4565b610d08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cff9061445b565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d4e826114c4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db6906144fb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610dde612920565b73ffffffffffffffffffffffffffffffffffffffff161480610e0d5750610e0c81610e07612920565b612137565b5b610e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e43906143db565b60405180910390fd5b610e568383612928565b505050565b610e63612920565b73ffffffffffffffffffffffffffffffffffffffff16610e81611880565b73ffffffffffffffffffffffffffffffffffffffff1614610ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ece9061447b565b60405180910390fd5b856012600101819055508460126002018190555083601260030181905550826012600401819055508160126005018190555080601260060181905550505050505050565b600f5481565b60085481565b610f2f612920565b73ffffffffffffffffffffffffffffffffffffffff16610f4d611880565b73ffffffffffffffffffffffffffffffffffffffff1614610fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9a9061447b565b60405180910390fd5b80600960016101000a81548160ff02191690831515021790555050565b610fd1610fcb612920565b826129e1565b611010576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110079061451b565b60405180910390fd5b61101b838383612abf565b505050565b611028612920565b73ffffffffffffffffffffffffffffffffffffffff16611046611880565b73ffffffffffffffffffffffffffffffffffffffff161461109c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110939061447b565b60405180910390fd5b8060118190555050565b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b600960029054906101000a900460ff1681565b611108612920565b73ffffffffffffffffffffffffffffffffffffffff16611126611880565b73ffffffffffffffffffffffffffffffffffffffff161461117c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111739061447b565b60405180910390fd5b611184611880565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156111c9573d6000803e3d6000fd5b50565b6111e783838360405180602001604052806000815250611bd6565b505050565b600a5481565b600e5481565b60008060126040518060e001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152505090506000429050600960029054906101000a900460ff166112e657816020015181101561128157816080015192506112df565b81604001518110611298578160a0015192506112de565b600082606001518360200151836112af919061485c565b6112b991906147d1565b90508260c00151816112cb9190614802565b83608001516112da919061485c565b9350505b5b50506112ee565b600a54925050505b90565b6112f9612920565b73ffffffffffffffffffffffffffffffffffffffff16611317611880565b73ffffffffffffffffffffffffffffffffffffffff161461136d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113649061447b565b60405180910390fd5b60008151116113b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a89061453b565b60405180910390fd5b600e54815111156113f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ee9061455b565b60405180910390fd5b6127108151600854611409919061477b565b111561144a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611441906145bb565b60405180910390fd5b60005b81518110156114a65761149382828151811061146c5761146b614ade565b5b6020026020010151826001600854611484919061477b565b61148e919061477b565b612d1b565b808061149e906149b3565b91505061144d565b508051600860008282546114ba919061477b565b9250508190555050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561156d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115649061441b565b60405180910390fd5b80915050919050565b61157e612920565b73ffffffffffffffffffffffffffffffffffffffff1661159c611880565b73ffffffffffffffffffffffffffffffffffffffff16146115f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e99061447b565b60405180910390fd5b8060078190555050565b600d805461160990614950565b80601f016020809104026020016040519081016040528092919081815260200182805461163590614950565b80156116825780601f1061165757610100808354040283529160200191611682565b820191906000526020600020905b81548152906001019060200180831161166557829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f2906143fb565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61174a612920565b73ffffffffffffffffffffffffffffffffffffffff16611768611880565b73ffffffffffffffffffffffffffffffffffffffff16146117be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b59061447b565b60405180910390fd5b6117c86000612d39565b565b60128060000154908060010154908060020154908060030154908060040154908060050154908060060154905087565b611802612920565b73ffffffffffffffffffffffffffffffffffffffff16611820611880565b73ffffffffffffffffffffffffffffffffffffffff1614611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186d9061447b565b60405180910390fd5b80600f8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546118b890614950565b80601f01602080910402602001604051908101604052809291908181526020018280546118e490614950565b80156119315780601f1061190657610100808354040283529160200191611931565b820191906000526020600020905b81548152906001019060200180831161191457829003601f168201915b5050505050905090565b600960019054906101000a900460ff1681565b60075481565b600060011515600960009054906101000a900460ff161515146119ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a39061449b565b60405180910390fd5b6001905090565b6119bb612920565b73ffffffffffffffffffffffffffffffffffffffff166119d9611880565b73ffffffffffffffffffffffffffffffffffffffff1614611a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a269061447b565b60405180910390fd5b80600d9080519060200190611a45929190613558565b5050565b611a51612920565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab69061435b565b60405180910390fd5b8060066000611acc612920565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b79612920565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bbe9190614203565b60405180910390a35050565b60105481565b60115481565b611be7611be1612920565b836129e1565b611c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1d9061451b565b60405180910390fd5b611c3284848484612dfd565b50505050565b600960009054906101000a900460ff1681565b611c53612920565b73ffffffffffffffffffffffffffffffffffffffff16611c71611880565b73ffffffffffffffffffffffffffffffffffffffff1614611cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbe9061447b565b60405180910390fd5b80600a8190555050565b6060611cdc826128b4565b611d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d12906144db565b60405180910390fd5b6000611d25612e59565b90506000815111611d455760405180602001604052806000815250611d70565b80611d4f84612eeb565b604051602001611d60929190614178565b6040516020818303038152906040525b915050919050565b600060011515600960019054906101000a900460ff16151514611dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc79061449b565b60405180910390fd5b6001905090565b60011515600960019054906101000a900460ff16151514611e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e24906145db565b60405180910390fd5b60008111611e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e679061453b565b60405180910390fd5b61271081600854611e81919061477b565b1115611ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb9906142db565b60405180910390fd5b60115481600854611ed3919061477b565b1115611f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0b9061427b565b60405180910390fd5b600060126040518060e001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152505090508060200151421015611fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa99061437b565b60405180910390fd5b8060000151821115611ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff09061429b565b60405180910390fd5b6000826120046111f8565b61200e9190614802565b905080341015612053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204a9061457b565b60405180910390fd5b60005b838110156120ab57612076336001600854612071919061477b565b612d1b565b600160086000828254612089919061477b565b9250508190555061209861304c565b80806120a3906149b3565b915050612056565b50505050565b6120b9612920565b73ffffffffffffffffffffffffffffffffffffffff166120d7611880565b73ffffffffffffffffffffffffffffffffffffffff161461212d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121249061447b565b60405180910390fd5b8060108190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6121d3612920565b73ffffffffffffffffffffffffffffffffffffffff166121f1611880565b73ffffffffffffffffffffffffffffffffffffffff1614612247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223e9061447b565b60405180910390fd5b60005b81518110156122d8576001600b600084848151811061226c5761226b614ade565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806122d0906149b3565b91505061224a565b5050565b6122e4612920565b73ffffffffffffffffffffffffffffffffffffffff16612302611880565b73ffffffffffffffffffffffffffffffffffffffff1614612358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234f9061447b565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b6000600754905090565b612387612920565b73ffffffffffffffffffffffffffffffffffffffff166123a5611880565b73ffffffffffffffffffffffffffffffffffffffff16146123fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f29061447b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561246b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612462906142fb565b60405180910390fd5b61247481612d39565b50565b61247f612920565b73ffffffffffffffffffffffffffffffffffffffff1661249d611880565b73ffffffffffffffffffffffffffffffffffffffff16146124f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ea9061447b565b60405180910390fd5b80600960026101000a81548160ff02191690831515021790555050565b60011515600960009054906101000a900460ff16151514612566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255d906145db565b60405180910390fd5b6125da828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050601054336040516020016125bf919061415d565b604051602081830303815290604052805190602001206130dd565b612619576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126109061459b565b60405180910390fd5b600f54836126256110a6565b61262f919061477b565b1115612670576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126679061425b565b60405180910390fd5b600083116126b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126aa9061453b565b60405180910390fd5b600e548311156126f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ef9061455b565b60405180910390fd5b61271083600854612709919061477b565b111561274a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612741906142db565b60405180910390fd5b6011548360085461275b919061477b565b111561279c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127939061427b565b60405180910390fd5b826007546127aa9190614802565b3410156127ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e3906143bb565b60405180910390fd5b60005b838110156128445761280f33600160085461280a919061477b565b612d1b565b600160086000828254612822919061477b565b9250508190555061283161304c565b808061283c906149b3565b9150506127ef565b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661299b836114c4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006129ec826128b4565b612a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a229061439b565b60405180910390fd5b6000612a36836114c4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612aa557508373ffffffffffffffffffffffffffffffffffffffff16612a8d84610cbe565b73ffffffffffffffffffffffffffffffffffffffff16145b80612ab65750612ab58185612137565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612adf826114c4565b73ffffffffffffffffffffffffffffffffffffffff1614612b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2c906144bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9c9061433b565b60405180910390fd5b612bb08383836130f4565b612bbb600082612928565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c0b919061485c565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c62919061477b565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612d358282604051806020016040528060008152506130f9565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612e08848484612abf565b612e1484848484613154565b612e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4a906142bb565b60405180910390fd5b50505050565b6060600d8054612e6890614950565b80601f0160208091040260200160405190810160405280929190818152602001828054612e9490614950565b8015612ee15780601f10612eb657610100808354040283529160200191612ee1565b820191906000526020600020905b815481529060010190602001808311612ec457829003601f168201915b5050505050905090565b60606000821415612f33576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613047565b600082905060005b60008214612f65578080612f4e906149b3565b915050600a82612f5e91906147d1565b9150612f3b565b60008167ffffffffffffffff811115612f8157612f80614b0d565b5b6040519080825280601f01601f191660200182016040528015612fb35781602001600182028036833780820191505090505b5090505b6000851461304057600182612fcc919061485c565b9150600a85612fdb9190614a20565b6030612fe7919061477b565b60f81b818381518110612ffd57612ffc614ade565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561303991906147d1565b9450612fb7565b8093505050505b919050565b6001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613098919061477b565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550565b6000826130ea85846132eb565b1490509392505050565b505050565b6131038383613360565b6131106000848484613154565b61314f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613146906142bb565b60405180910390fd5b505050565b60006131758473ffffffffffffffffffffffffffffffffffffffff1661352e565b156132de578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261319e612920565b8786866040518563ffffffff1660e01b81526004016131c094939291906141b7565b602060405180830381600087803b1580156131da57600080fd5b505af192505050801561320b57506040513d601f19601f820116820180604052508101906132089190613ae0565b60015b61328e573d806000811461323b576040519150601f19603f3d011682016040523d82523d6000602084013e613240565b606091505b50600081511415613286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327d906142bb565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506132e3565b600190505b949350505050565b60008082905060005b845181101561335557600085828151811061331257613311614ade565b5b602002602001015190508083116133345761332d8382613541565b9250613341565b61333e8184613541565b92505b50808061334d906149b3565b9150506132f4565b508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133c79061443b565b60405180910390fd5b6133d9816128b4565b15613419576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134109061431b565b60405180910390fd5b613425600083836130f4565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613475919061477b565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b600082600052816020526040600020905092915050565b82805461356490614950565b90600052602060002090601f01602090048101928261358657600085556135cd565b82601f1061359f57805160ff19168380011785556135cd565b828001600101855582156135cd579182015b828111156135cc5782518255916020019190600101906135b1565b5b5090506135da91906135de565b5090565b5b808211156135f75760008160009055506001016135df565b5090565b600061360e613609846146aa565b614685565b9050808382526020820190508285602086028201111561363157613630614b46565b5b60005b85811015613661578161364788826136ef565b845260208401935060208301925050600181019050613634565b5050509392505050565b600061367e613679846146d6565b614685565b90508281526020810184848401111561369a57613699614b4b565b5b6136a584828561490e565b509392505050565b60006136c06136bb84614707565b614685565b9050828152602081018484840111156136dc576136db614b4b565b5b6136e784828561490e565b509392505050565b6000813590506136fe8161520b565b92915050565b600082601f83011261371957613718614b41565b5b81356137298482602086016135fb565b91505092915050565b60008083601f84011261374857613747614b41565b5b8235905067ffffffffffffffff81111561376557613764614b3c565b5b60208301915083602082028301111561378157613780614b46565b5b9250929050565b60008135905061379781615222565b92915050565b6000813590506137ac81615239565b92915050565b6000813590506137c181615250565b92915050565b6000815190506137d681615250565b92915050565b600082601f8301126137f1576137f0614b41565b5b813561380184826020860161366b565b91505092915050565b600082601f83011261381f5761381e614b41565b5b813561382f8482602086016136ad565b91505092915050565b60008135905061384781615267565b92915050565b60006020828403121561386357613862614b55565b5b6000613871848285016136ef565b91505092915050565b6000806040838503121561389157613890614b55565b5b600061389f858286016136ef565b92505060206138b0858286016136ef565b9150509250929050565b6000806000606084860312156138d3576138d2614b55565b5b60006138e1868287016136ef565b93505060206138f2868287016136ef565b925050604061390386828701613838565b9150509250925092565b6000806000806080858703121561392757613926614b55565b5b6000613935878288016136ef565b9450506020613946878288016136ef565b935050604061395787828801613838565b925050606085013567ffffffffffffffff81111561397857613977614b50565b5b613984878288016137dc565b91505092959194509250565b600080604083850312156139a7576139a6614b55565b5b60006139b5858286016136ef565b92505060206139c685828601613788565b9150509250929050565b600080604083850312156139e7576139e6614b55565b5b60006139f5858286016136ef565b9250506020613a0685828601613838565b9150509250929050565b600060208284031215613a2657613a25614b55565b5b600082013567ffffffffffffffff811115613a4457613a43614b50565b5b613a5084828501613704565b91505092915050565b600060208284031215613a6f57613a6e614b55565b5b6000613a7d84828501613788565b91505092915050565b600060208284031215613a9c57613a9b614b55565b5b6000613aaa8482850161379d565b91505092915050565b600060208284031215613ac957613ac8614b55565b5b6000613ad7848285016137b2565b91505092915050565b600060208284031215613af657613af5614b55565b5b6000613b04848285016137c7565b91505092915050565b600060208284031215613b2357613b22614b55565b5b600082013567ffffffffffffffff811115613b4157613b40614b50565b5b613b4d8482850161380a565b91505092915050565b600060208284031215613b6c57613b6b614b55565b5b6000613b7a84828501613838565b91505092915050565b600080600060408486031215613b9c57613b9b614b55565b5b6000613baa86828701613838565b935050602084013567ffffffffffffffff811115613bcb57613bca614b50565b5b613bd786828701613732565b92509250509250925092565b60008060008060008060c08789031215613c0057613bff614b55565b5b6000613c0e89828a01613838565b9650506020613c1f89828a01613838565b9550506040613c3089828a01613838565b9450506060613c4189828a01613838565b9350506080613c5289828a01613838565b92505060a0613c6389828a01613838565b9150509295509295509295565b613c7981614890565b82525050565b613c90613c8b82614890565b6149fc565b82525050565b613c9f816148a2565b82525050565b613cae816148ae565b82525050565b6000613cbf82614738565b613cc9818561474e565b9350613cd981856020860161491d565b613ce281614b5a565b840191505092915050565b6000613cf882614743565b613d02818561475f565b9350613d1281856020860161491d565b613d1b81614b5a565b840191505092915050565b6000613d3182614743565b613d3b8185614770565b9350613d4b81856020860161491d565b80840191505092915050565b6000613d6460148361475f565b9150613d6f82614b78565b602082019050919050565b6000613d8760248361475f565b9150613d9282614ba1565b604082019050919050565b6000613daa601a8361475f565b9150613db582614bf0565b602082019050919050565b6000613dcd60328361475f565b9150613dd882614c19565b604082019050919050565b6000613df060088361475f565b9150613dfb82614c68565b602082019050919050565b6000613e1360268361475f565b9150613e1e82614c91565b604082019050919050565b6000613e36601c8361475f565b9150613e4182614ce0565b602082019050919050565b6000613e5960248361475f565b9150613e6482614d09565b604082019050919050565b6000613e7c60198361475f565b9150613e8782614d58565b602082019050919050565b6000613e9f60128361475f565b9150613eaa82614d81565b602082019050919050565b6000613ec2602c8361475f565b9150613ecd82614daa565b604082019050919050565b6000613ee560168361475f565b9150613ef082614df9565b602082019050919050565b6000613f0860388361475f565b9150613f1382614e22565b604082019050919050565b6000613f2b602a8361475f565b9150613f3682614e71565b604082019050919050565b6000613f4e60298361475f565b9150613f5982614ec0565b604082019050919050565b6000613f7160208361475f565b9150613f7c82614f0f565b602082019050919050565b6000613f94602c8361475f565b9150613f9f82614f38565b604082019050919050565b6000613fb760208361475f565b9150613fc282614f87565b602082019050919050565b6000613fda60158361475f565b9150613fe582614fb0565b602082019050919050565b6000613ffd60298361475f565b915061400882614fd9565b604082019050919050565b6000614020602f8361475f565b915061402b82615028565b604082019050919050565b600061404360218361475f565b915061404e82615077565b604082019050919050565b600061406660318361475f565b9150614071826150c6565b604082019050919050565b600061408960178361475f565b915061409482615115565b602082019050919050565b60006140ac60168361475f565b91506140b78261513e565b602082019050919050565b60006140cf601c8361475f565b91506140da82615167565b602082019050919050565b60006140f2601c8361475f565b91506140fd82615190565b602082019050919050565b600061411560168361475f565b9150614120826151b9565b602082019050919050565b6000614138600f8361475f565b9150614143826151e2565b602082019050919050565b61415781614904565b82525050565b60006141698284613c7f565b60148201915081905092915050565b60006141848285613d26565b91506141908284613d26565b91508190509392505050565b60006020820190506141b16000830184613c70565b92915050565b60006080820190506141cc6000830187613c70565b6141d96020830186613c70565b6141e6604083018561414e565b81810360608301526141f88184613cb4565b905095945050505050565b60006020820190506142186000830184613c96565b92915050565b60006020820190506142336000830184613ca5565b92915050565b600060208201905081810360008301526142538184613ced565b905092915050565b6000602082019050818103600083015261427481613d57565b9050919050565b6000602082019050818103600083015261429481613d7a565b9050919050565b600060208201905081810360008301526142b481613d9d565b9050919050565b600060208201905081810360008301526142d481613dc0565b9050919050565b600060208201905081810360008301526142f481613de3565b9050919050565b6000602082019050818103600083015261431481613e06565b9050919050565b6000602082019050818103600083015261433481613e29565b9050919050565b6000602082019050818103600083015261435481613e4c565b9050919050565b6000602082019050818103600083015261437481613e6f565b9050919050565b6000602082019050818103600083015261439481613e92565b9050919050565b600060208201905081810360008301526143b481613eb5565b9050919050565b600060208201905081810360008301526143d481613ed8565b9050919050565b600060208201905081810360008301526143f481613efb565b9050919050565b6000602082019050818103600083015261441481613f1e565b9050919050565b6000602082019050818103600083015261443481613f41565b9050919050565b6000602082019050818103600083015261445481613f64565b9050919050565b6000602082019050818103600083015261447481613f87565b9050919050565b6000602082019050818103600083015261449481613faa565b9050919050565b600060208201905081810360008301526144b481613fcd565b9050919050565b600060208201905081810360008301526144d481613ff0565b9050919050565b600060208201905081810360008301526144f481614013565b9050919050565b6000602082019050818103600083015261451481614036565b9050919050565b6000602082019050818103600083015261453481614059565b9050919050565b600060208201905081810360008301526145548161407c565b9050919050565b600060208201905081810360008301526145748161409f565b9050919050565b60006020820190508181036000830152614594816140c2565b9050919050565b600060208201905081810360008301526145b4816140e5565b9050919050565b600060208201905081810360008301526145d481614108565b9050919050565b600060208201905081810360008301526145f48161412b565b9050919050565b6000602082019050614610600083018461414e565b92915050565b600060e08201905061462b600083018a61414e565b614638602083018961414e565b614645604083018861414e565b614652606083018761414e565b61465f608083018661414e565b61466c60a083018561414e565b61467960c083018461414e565b98975050505050505050565b600061468f6146a0565b905061469b8282614982565b919050565b6000604051905090565b600067ffffffffffffffff8211156146c5576146c4614b0d565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156146f1576146f0614b0d565b5b6146fa82614b5a565b9050602081019050919050565b600067ffffffffffffffff82111561472257614721614b0d565b5b61472b82614b5a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061478682614904565b915061479183614904565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147c6576147c5614a51565b5b828201905092915050565b60006147dc82614904565b91506147e783614904565b9250826147f7576147f6614a80565b5b828204905092915050565b600061480d82614904565b915061481883614904565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561485157614850614a51565b5b828202905092915050565b600061486782614904565b915061487283614904565b92508282101561488557614884614a51565b5b828203905092915050565b600061489b826148e4565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561493b578082015181840152602081019050614920565b8381111561494a576000848401525b50505050565b6000600282049050600182168061496857607f821691505b6020821081141561497c5761497b614aaf565b5b50919050565b61498b82614b5a565b810181811067ffffffffffffffff821117156149aa576149a9614b0d565b5b80604052505050565b60006149be82614904565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156149f1576149f0614a51565b5b600182019050919050565b6000614a0782614a0e565b9050919050565b6000614a1982614b6b565b9050919050565b6000614a2b82614904565b9150614a3683614904565b925082614a4657614a45614a80565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f57616c6c6574206c696d69742052656163686564000000000000000000000000600082015250565b7f4e6f206d6f726520746f6b656e73206c65667420696e2063757272656e74207060008201527f6861736500000000000000000000000000000000000000000000000000000000602082015250565b7f5472616e73616374696f6e206c696d6974206578636565646564000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f536f6c64204f7574000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206163746976650000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f696e636f727265637420657468657220616d6f756e7400000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53616c65206e6f742053746172746564205965742e0000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f6d696e74206174206c65617374206f6e6520746f6b656e000000000000000000600082015250565b7f6d617820706572207472616e73616374696f6e20323000000000000000000000600082015250565b7f496e636f727265637420416d6f756e742e2054727920616761696e2e00000000600082015250565b7f596f7520617265206e6f7420696e2050726573616c65204c6973742e00000000600082015250565b7f6e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f53616c65206973205061757365642e0000000000000000000000000000000000600082015250565b61521481614890565b811461521f57600080fd5b50565b61522b816148a2565b811461523657600080fd5b50565b615242816148ae565b811461524d57600080fd5b50565b615259816148b8565b811461526457600080fd5b50565b61527081614904565b811461527b57600080fd5b5056fea26469706673582212207433df92f18689b74963360dbda1cb741e0774f0033bc4da2c575e3bbcc66e4b64736f6c63430008070033

Deployed Bytecode Sourcemap

37463:6801:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25116:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42827:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26061:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27620:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27143:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41712:512;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38011:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37597:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43131:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28510:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42233:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43696:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37721:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44151:106;;;;;;;;;;;;;:::i;:::-;;28920:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37760:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37948:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40993:713;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40378:453;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25755:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43355:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37920:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25485:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16963:94;;;;;;;;;;;;;:::i;:::-;;38147:368;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;43812:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16312:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26230:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37674:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37553:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42517:148;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42931:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27913:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38070:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38115:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29176:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37633:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43919:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26405:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42673:147;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38582:850;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44033:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28279:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42337:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43030:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40839:146;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17212:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43240:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39439:931;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25116:305;25218:4;25270:25;25255:40;;;:11;:40;;;;:105;;;;25327:33;25312:48;;;:11;:48;;;;25255:105;:158;;;;25377:36;25401:11;25377:23;:36::i;:::-;25255:158;25235:178;;25116:305;;;:::o;42827:98::-;42871:4;42894:11;:23;42906:10;42894:23;;;;;;;;;;;;;;;;;;;;;;;;;42887:30;;42827:98;:::o;26061:100::-;26115:13;26148:5;26141:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26061:100;:::o;27620:221::-;27696:7;27724:16;27732:7;27724;:16::i;:::-;27716:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27809:15;:24;27825:7;27809:24;;;;;;;;;;;;;;;;;;;;;27802:31;;27620:221;;;:::o;27143:411::-;27224:13;27240:23;27255:7;27240:14;:23::i;:::-;27224:39;;27288:5;27282:11;;:2;:11;;;;27274:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27382:5;27366:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27391:37;27408:5;27415:12;:10;:12::i;:::-;27391:16;:37::i;:::-;27366:62;27344:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27525:21;27534:2;27538:7;27525:8;:21::i;:::-;27213:341;27143:411;;:::o;41712:512::-;16543:12;:10;:12::i;:::-;16532:23;;:7;:5;:7::i;:::-;:23;;;16524:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41958:9:::1;41927:18;:28;;:40;;;;42006:10;41974:18;:29;;:42;;;;42057:12;42023:18;:31;;:46;;;;42108:10;42076:18;:29;;:42;;;;42158:11;42125:18;:30;;:44;;;;42207:9;42176:18;:28;;:40;;;;41712:512:::0;;;;;;:::o;38011:26::-;;;;:::o;37597:27::-;;;;:::o;43131:101::-;16543:12;:10;:12::i;:::-;16532:23;;:7;:5;:7::i;:::-;:23;;;16524:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43220:4:::1;43199:18;;:25;;;;;;;;;;;;;;;;;;43131:101:::0;:::o;28510:339::-;28705:41;28724:12;:10;:12::i;:::-;28738:7;28705:18;:41::i;:::-;28697:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28813:28;28823:4;28829:2;28833:7;28813:9;:28::i;:::-;28510:339;;;:::o;42233:92::-;16543:12;:10;:12::i;:::-;16532:23;;:7;:5;:7::i;:::-;:23;;;16524:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42308:9:::1;42300:5;:17;;;;42233:92:::0;:::o;43696:108::-;43739:4;43773:11;:23;43785:10;43773:23;;;;;;;;;;;;;;;;43766:30;;43696:108;:::o;37721:32::-;;;;;;;;;;;;;:::o;44151:106::-;16543:12;:10;:12::i;:::-;16532:23;;:7;:5;:7::i;:::-;:23;;;16524:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44209:7:::1;:5;:7::i;:::-;44201:25;;:48;44227:21;44201:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;44151:106::o:0;28920:185::-;29058:39;29075:4;29081:2;29085:7;29058:39;;;;;;;;;;;;:16;:39::i;:::-;28920:185;;;:::o;37760:43::-;;;;:::o;37948:34::-;;;;:::o;40993:713::-;41048:20;41077:33;41113:18;41077:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41138:17;41158:15;41138:35;;41186:12;;;;;;;;;;;41182:515;;41222:7;:17;;;41210:9;:29;41206:393;;;41265:7;:18;;;41250:33;;41206:393;;;41314:7;:18;;;41301:9;:31;41297:302;;41358:7;:19;;;41343:34;;41297:302;;;41400:24;41470:7;:20;;;41440:7;:17;;;41428:9;:29;;;;:::i;:::-;41427:63;;;;:::i;:::-;41400:90;;41573:7;:17;;;41554:16;:36;;;;:::i;:::-;41523:7;:18;;;:68;;;;:::i;:::-;41499:92;;41391:208;41297:302;41206:393;41605:19;;;;41182:515;41671:18;;41658:31;;41651:38;;40993:713;;:::o;40378:453::-;16543:12;:10;:12::i;:::-;16532:23;;:7;:5;:7::i;:::-;:23;;;16524:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40474:1:::1;40456:8;:15;:19;40448:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;40541:17;;40522:8;:15;:36;;40514:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;37541:5;40618:8;:15;40604:11;;:29;;;;:::i;:::-;:42;;40596:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;40688:6;40684:98;40704:8;:15;40700:1;:19;40684:98;;;40739:43;40749:8;40758:1;40749:11;;;;;;;;:::i;:::-;;;;;;;;40780:1;40776;40762:11;;:15;;;;:::i;:::-;:19;;;;:::i;:::-;40739:9;:43::i;:::-;40721:3;;;;;:::i;:::-;;;;40684:98;;;;40808:8;:15;40793:11;;:30;;;;;;;:::i;:::-;;;;;;;;40378:453:::0;:::o;25755:239::-;25827:7;25847:13;25863:7;:16;25871:7;25863:16;;;;;;;;;;;;;;;;;;;;;25847:32;;25915:1;25898:19;;:5;:19;;;;25890:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25981:5;25974:12;;;25755:239;;;:::o;43355:101::-;16543:12;:10;:12::i;:::-;16532:23;;:7;:5;:7::i;:::-;:23;;;16524:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43443:5:::1;43427:13;:21;;;;43355:101:::0;:::o;37920:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25485:208::-;25557:7;25602:1;25585:19;;:5;:19;;;;25577:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25669:9;:16;25679:5;25669:16;;;;;;;;;;;;;;;;25662:23;;25485:208;;;:::o;16963:94::-;16543:12;:10;:12::i;:::-;16532:23;;:7;:5;:7::i;:::-;:23;;;16524:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17028:21:::1;17046:1;17028:9;:21::i;:::-;16963:94::o:0;38147:368::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43812:99::-;16543:12;:10;:12::i;:::-;16532:23;;:7;:5;:7::i;:::-;:23;;;16524:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43897:6:::1;43882:12;:21;;;;43812:99:::0;:::o;16312:87::-;16358:7;16385:6;;;;;;;;;;;16378:13;;16312:87;:::o;26230:104::-;26286:13;26319:7;26312:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26230:104;:::o;37674:38::-;;;;;;;;;;;;;:::o;37553:37::-;;;;:::o;42517:148::-;42566:4;42608;42590:22;;:14;;;;;;;;;;;:22;;;42582:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;42655:1;42648:8;;42517:148;:::o;42931:92::-;16543:12;:10;:12::i;:::-;16532:23;;:7;:5;:7::i;:::-;:23;;;16524:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43011:4:::1;43001:7;:14;;;;;;;;;;;;:::i;:::-;;42931:92:::0;:::o;27913:295::-;28028:12;:10;:12::i;:::-;28016:24;;:8;:24;;;;28008:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28128:8;28083:18;:32;28102:12;:10;:12::i;:::-;28083:32;;;;;;;;;;;;;;;:42;28116:8;28083:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28181:8;28152:48;;28167:12;:10;:12::i;:::-;28152:48;;;28191:8;28152:48;;;;;;:::i;:::-;;;;;;;;27913:295;;:::o;38070:34::-;;;;:::o;38115:21::-;;;;:::o;29176:328::-;29351:41;29370:12;:10;:12::i;:::-;29384:7;29351:18;:41::i;:::-;29343:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29457:39;29471:4;29477:2;29481:7;29490:5;29457:13;:39::i;:::-;29176:328;;;;:::o;37633:34::-;;;;;;;;;;;;;:::o;43919:105::-;16543:12;:10;:12::i;:::-;16532:23;;:7;:5;:7::i;:::-;:23;;;16524:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44010:6:::1;43989:18;:27;;;;43919:105:::0;:::o;26405:334::-;26478:13;26512:16;26520:7;26512;:16::i;:::-;26504:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26593:21;26617:10;:8;:10::i;:::-;26593:34;;26669:1;26651:7;26645:21;:25;:86;;;;;;;;;;;;;;;;;26697:7;26706:18;:7;:16;:18::i;:::-;26680:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26645:86;26638:93;;;26405:334;;;:::o;42673:147::-;42719:4;42763;42741:26;;:18;;;;;;;;;;;:26;;;42733:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;42810:1;42803:8;;42673:147;:::o;38582:850::-;38664:4;38642:26;;:18;;;;;;;;;;;:26;;;38634:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;38716:1;38707:6;:10;38699:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;37541:5;38778:6;38764:11;;:20;;;;:::i;:::-;:33;;38756:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;38852:5;;38843:6;38829:11;;:20;;;;:::i;:::-;:28;;38821:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;38909:33;38945:18;38909:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39001:7;:17;;;38982:15;:36;;38974:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39070:7;:15;;;39060:6;:25;;39052:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39129:17;39176:6;39149:24;:22;:24::i;:::-;:33;;;;:::i;:::-;39129:53;;39214:9;39201;:22;;39193:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;39274:6;39270:155;39290:6;39286:1;:10;39270:155;;;39313:38;39323:10;39349:1;39335:11;;:15;;;;:::i;:::-;39313:9;:38::i;:::-;39382:1;39367:11;;:16;;;;;;;:::i;:::-;;;;;;;;39400:10;:8;:10::i;:::-;39298:3;;;;;:::i;:::-;;;;39270:155;;;;38622:810;;38582:850;:::o;44033:111::-;16543:12;:10;:12::i;:::-;16532:23;;:7;:5;:7::i;:::-;:23;;;16524:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44129:10:::1;44107:19;:32;;;;44033:111:::0;:::o;28279:164::-;28376:4;28400:18;:25;28419:5;28400:25;;;;;;;;;;;;;;;:35;28426:8;28400:35;;;;;;;;;;;;;;;;;;;;;;;;;28393:42;;28279:164;;;;:::o;42337:168::-;16543:12;:10;:12::i;:::-;16532:23;;:7;:5;:7::i;:::-;:23;;;16524:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42419:6:::1;42415:82;42431:8;:15;42427:1;:19;42415:82;;;42493:4;42466:11;:24;42478:8;42487:1;42478:11;;;;;;;;:::i;:::-;;;;;;;;42466:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;42448:3;;;;;:::i;:::-;;;;42415:82;;;;42337:168:::0;:::o;43030:95::-;16543:12;:10;:12::i;:::-;16532:23;;:7;:5;:7::i;:::-;:23;;;16524:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43113:4:::1;43096:14;;:21;;;;;;;;;;;;;;;;;;43030:95:::0;:::o;40839:146::-;40901:27;40964:13;;40944:33;;40839:146;:::o;17212:192::-;16543:12;:10;:12::i;:::-;16532:23;;:7;:5;:7::i;:::-;:23;;;16524:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17321:1:::1;17301:22;;:8;:22;;;;17293:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;17377:19;17387:8;17377:9;:19::i;:::-;17212:192:::0;:::o;43240:102::-;16543:12;:10;:12::i;:::-;16532:23;;:7;:5;:7::i;:::-;:23;;;16524:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43327:7:::1;43312:12;;:22;;;;;;;;;;;;;;;;;;43240:102:::0;:::o;39439:931::-;39557:4;39539:22;;:14;;;;;;;;;;;:22;;;39531:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;39600:91;39619:11;;39600:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39631:19;;39678:10;39661:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;39651:39;;;;;;39600:18;:91::i;:::-;39592:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;39767:12;;39757:6;39742:12;:10;:12::i;:::-;:21;;;;:::i;:::-;:37;;39734:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;39832:1;39823:6;:10;39815:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;39890:17;;39880:6;:27;;39872:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;37541:5;39967:6;39953:11;;:20;;;;:::i;:::-;:32;;39945:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;40040:5;;40031:6;40017:11;;:20;;;;:::i;:::-;:28;;40009:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;40134:6;40118:13;;:22;;;;:::i;:::-;40105:9;:35;;40097:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;40202:6;40198:165;40218:6;40214:1;:10;40198:165;;;40247:38;40257:10;40283:1;40269:11;;:15;;;;:::i;:::-;40247:9;:38::i;:::-;40318:1;40303:11;;:16;;;;;;;:::i;:::-;;;;;;;;40338:10;:8;:10::i;:::-;40226:3;;;;;:::i;:::-;;;;40198:165;;;;39439:931;;;:::o;18317:157::-;18402:4;18441:25;18426:40;;;:11;:40;;;;18419:47;;18317:157;;;:::o;31014:127::-;31079:4;31131:1;31103:30;;:7;:16;31111:7;31103:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31096:37;;31014:127;;;:::o;815:98::-;868:7;895:10;888:17;;815:98;:::o;34996:174::-;35098:2;35071:15;:24;35087:7;35071:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35154:7;35150:2;35116:46;;35125:23;35140:7;35125:14;:23::i;:::-;35116:46;;;;;;;;;;;;34996:174;;:::o;31308:348::-;31401:4;31426:16;31434:7;31426;:16::i;:::-;31418:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31502:13;31518:23;31533:7;31518:14;:23::i;:::-;31502:39;;31571:5;31560:16;;:7;:16;;;:51;;;;31604:7;31580:31;;:20;31592:7;31580:11;:20::i;:::-;:31;;;31560:51;:87;;;;31615:32;31632:5;31639:7;31615:16;:32::i;:::-;31560:87;31552:96;;;31308:348;;;;:::o;34300:578::-;34459:4;34432:31;;:23;34447:7;34432:14;:23::i;:::-;:31;;;34424:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34542:1;34528:16;;:2;:16;;;;34520:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34598:39;34619:4;34625:2;34629:7;34598:20;:39::i;:::-;34702:29;34719:1;34723:7;34702:8;:29::i;:::-;34763:1;34744:9;:15;34754:4;34744:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34792:1;34775:9;:13;34785:2;34775:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34823:2;34804:7;:16;34812:7;34804:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34862:7;34858:2;34843:27;;34852:4;34843:27;;;;;;;;;;;;34300:578;;;:::o;31998:110::-;32074:26;32084:2;32088:7;32074:26;;;;;;;;;;;;:9;:26::i;:::-;31998:110;;:::o;17412:173::-;17468:16;17487:6;;;;;;;;;;;17468:25;;17513:8;17504:6;;:17;;;;;;;;;;;;;;;;;;17568:8;17537:40;;17558:8;17537:40;;;;;;;;;;;;17457:128;17412:173;:::o;30386:315::-;30543:28;30553:4;30559:2;30563:7;30543:9;:28::i;:::-;30590:48;30613:4;30619:2;30623:7;30632:5;30590:22;:48::i;:::-;30582:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30386:315;;;;:::o;43466:108::-;43526:13;43559:7;43552:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43466:108;:::o;1280:723::-;1336:13;1566:1;1557:5;:10;1553:53;;;1584:10;;;;;;;;;;;;;;;;;;;;;1553:53;1616:12;1631:5;1616:20;;1647:14;1672:78;1687:1;1679:4;:9;1672:78;;1705:8;;;;;:::i;:::-;;;;1736:2;1728:10;;;;;:::i;:::-;;;1672:78;;;1760:19;1792:6;1782:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1760:39;;1810:154;1826:1;1817:5;:10;1810:154;;1854:1;1844:11;;;;;:::i;:::-;;;1921:2;1913:5;:10;;;;:::i;:::-;1900:2;:24;;;;:::i;:::-;1887:39;;1870:6;1877;1870:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1950:2;1941:11;;;;;:::i;:::-;;;1810:154;;;1988:6;1974:21;;;;;1280:723;;;;:::o;43582:102::-;43675:1;43649:11;:23;43661:10;43649:23;;;;;;;;;;;;;;;;:27;;;;:::i;:::-;43623:11;:23;43635:10;43623:23;;;;;;;;;;;;;;;:53;;;;43582:102::o;4191:190::-;4316:4;4369;4340:25;4353:5;4360:4;4340:12;:25::i;:::-;:33;4333:40;;4191:190;;;;;:::o;37106:126::-;;;;:::o;32335:321::-;32465:18;32471:2;32475:7;32465:5;:18::i;:::-;32516:54;32547:1;32551:2;32555:7;32564:5;32516:22;:54::i;:::-;32494:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32335:321;;;:::o;35735:799::-;35890:4;35911:15;:2;:13;;;:15::i;:::-;35907:620;;;35963:2;35947:36;;;35984:12;:10;:12::i;:::-;35998:4;36004:7;36013:5;35947:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35943:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36206:1;36189:6;:13;:18;36185:272;;;36232:60;;;;;;;;;;:::i;:::-;;;;;;;;36185:272;36407:6;36401:13;36392:6;36388:2;36384:15;36377:38;35943:529;36080:41;;;36070:51;;;:6;:51;;;;36063:58;;;;;35907:620;36511:4;36504:11;;35735:799;;;;;;;:::o;4742:675::-;4825:7;4845:20;4868:4;4845:27;;4888:9;4883:497;4907:5;:12;4903:1;:16;4883:497;;;4941:20;4964:5;4970:1;4964:8;;;;;;;;:::i;:::-;;;;;;;;4941:31;;5007:12;4991;:28;4987:382;;5134:42;5149:12;5163;5134:14;:42::i;:::-;5119:57;;4987:382;;;5311:42;5326:12;5340;5311:14;:42::i;:::-;5296:57;;4987:382;4926:454;4921:3;;;;;:::i;:::-;;;;4883:497;;;;5397:12;5390:19;;;4742:675;;;;:::o;32992:382::-;33086:1;33072:16;;:2;:16;;;;33064:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33145:16;33153:7;33145;:16::i;:::-;33144:17;33136:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33207:45;33236:1;33240:2;33244:7;33207:20;:45::i;:::-;33282:1;33265:9;:13;33275:2;33265:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33313:2;33294:7;:16;33302:7;33294:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33358:7;33354:2;33333:33;;33350:1;33333:33;;;;;;;;;;;;32992:382;;:::o;6382:387::-;6442:4;6650:12;6717:7;6705:20;6697:28;;6760:1;6753:4;:8;6746:15;;;6382:387;;;:::o;5425:224::-;5493:13;5556:1;5550:4;5543:15;5585:1;5579:4;5572:15;5626:4;5620;5610:21;5601:30;;5425:224;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2141:568::-;2214:8;2224:6;2274:3;2267:4;2259:6;2255:17;2251:27;2241:122;;2282:79;;:::i;:::-;2241:122;2395:6;2382:20;2372:30;;2425:18;2417:6;2414:30;2411:117;;;2447:79;;:::i;:::-;2411:117;2561:4;2553:6;2549:17;2537:29;;2615:3;2607:4;2599:6;2595:17;2585:8;2581:32;2578:41;2575:128;;;2622:79;;:::i;:::-;2575:128;2141:568;;;;;:::o;2715:133::-;2758:5;2796:6;2783:20;2774:29;;2812:30;2836:5;2812:30;:::i;:::-;2715:133;;;;:::o;2854:139::-;2900:5;2938:6;2925:20;2916:29;;2954:33;2981:5;2954:33;:::i;:::-;2854:139;;;;:::o;2999:137::-;3044:5;3082:6;3069:20;3060:29;;3098:32;3124:5;3098:32;:::i;:::-;2999:137;;;;:::o;3142:141::-;3198:5;3229:6;3223:13;3214:22;;3245:32;3271:5;3245:32;:::i;:::-;3142:141;;;;:::o;3302:338::-;3357:5;3406:3;3399:4;3391:6;3387:17;3383:27;3373:122;;3414:79;;:::i;:::-;3373:122;3531:6;3518:20;3556:78;3630:3;3622:6;3615:4;3607:6;3603:17;3556:78;:::i;:::-;3547:87;;3363:277;3302:338;;;;:::o;3660:340::-;3716:5;3765:3;3758:4;3750:6;3746:17;3742:27;3732:122;;3773:79;;:::i;:::-;3732:122;3890:6;3877:20;3915:79;3990:3;3982:6;3975:4;3967:6;3963:17;3915:79;:::i;:::-;3906:88;;3722:278;3660:340;;;;:::o;4006:139::-;4052:5;4090:6;4077:20;4068:29;;4106:33;4133:5;4106:33;:::i;:::-;4006:139;;;;:::o;4151:329::-;4210:6;4259:2;4247:9;4238:7;4234:23;4230:32;4227:119;;;4265:79;;:::i;:::-;4227:119;4385:1;4410:53;4455:7;4446:6;4435:9;4431:22;4410:53;:::i;:::-;4400:63;;4356:117;4151:329;;;;:::o;4486:474::-;4554:6;4562;4611:2;4599:9;4590:7;4586:23;4582:32;4579:119;;;4617:79;;:::i;:::-;4579:119;4737:1;4762:53;4807:7;4798:6;4787:9;4783:22;4762:53;:::i;:::-;4752:63;;4708:117;4864:2;4890:53;4935:7;4926:6;4915:9;4911:22;4890:53;:::i;:::-;4880:63;;4835:118;4486:474;;;;;:::o;4966:619::-;5043:6;5051;5059;5108:2;5096:9;5087:7;5083:23;5079:32;5076:119;;;5114:79;;:::i;:::-;5076:119;5234:1;5259:53;5304:7;5295:6;5284:9;5280:22;5259:53;:::i;:::-;5249:63;;5205:117;5361:2;5387:53;5432:7;5423:6;5412:9;5408:22;5387:53;:::i;:::-;5377:63;;5332:118;5489:2;5515:53;5560:7;5551:6;5540:9;5536:22;5515:53;:::i;:::-;5505:63;;5460:118;4966:619;;;;;:::o;5591:943::-;5686:6;5694;5702;5710;5759:3;5747:9;5738:7;5734:23;5730:33;5727:120;;;5766:79;;:::i;:::-;5727:120;5886:1;5911:53;5956:7;5947:6;5936:9;5932:22;5911:53;:::i;:::-;5901:63;;5857:117;6013:2;6039:53;6084:7;6075:6;6064:9;6060:22;6039:53;:::i;:::-;6029:63;;5984:118;6141:2;6167:53;6212:7;6203:6;6192:9;6188:22;6167:53;:::i;:::-;6157:63;;6112:118;6297:2;6286:9;6282:18;6269:32;6328:18;6320:6;6317:30;6314:117;;;6350:79;;:::i;:::-;6314:117;6455:62;6509:7;6500:6;6489:9;6485:22;6455:62;:::i;:::-;6445:72;;6240:287;5591:943;;;;;;;:::o;6540:468::-;6605:6;6613;6662:2;6650:9;6641:7;6637:23;6633:32;6630:119;;;6668:79;;:::i;:::-;6630:119;6788:1;6813:53;6858:7;6849:6;6838:9;6834:22;6813:53;:::i;:::-;6803:63;;6759:117;6915:2;6941:50;6983:7;6974:6;6963:9;6959:22;6941:50;:::i;:::-;6931:60;;6886:115;6540:468;;;;;:::o;7014:474::-;7082:6;7090;7139:2;7127:9;7118:7;7114:23;7110:32;7107:119;;;7145:79;;:::i;:::-;7107:119;7265:1;7290:53;7335:7;7326:6;7315:9;7311:22;7290:53;:::i;:::-;7280:63;;7236:117;7392:2;7418:53;7463:7;7454:6;7443:9;7439:22;7418:53;:::i;:::-;7408:63;;7363:118;7014:474;;;;;:::o;7494:539::-;7578:6;7627:2;7615:9;7606:7;7602:23;7598:32;7595:119;;;7633:79;;:::i;:::-;7595:119;7781:1;7770:9;7766:17;7753:31;7811:18;7803:6;7800:30;7797:117;;;7833:79;;:::i;:::-;7797:117;7938:78;8008:7;7999:6;7988:9;7984:22;7938:78;:::i;:::-;7928:88;;7724:302;7494:539;;;;:::o;8039:323::-;8095:6;8144:2;8132:9;8123:7;8119:23;8115:32;8112:119;;;8150:79;;:::i;:::-;8112:119;8270:1;8295:50;8337:7;8328:6;8317:9;8313:22;8295:50;:::i;:::-;8285:60;;8241:114;8039:323;;;;:::o;8368:329::-;8427:6;8476:2;8464:9;8455:7;8451:23;8447:32;8444:119;;;8482:79;;:::i;:::-;8444:119;8602:1;8627:53;8672:7;8663:6;8652:9;8648:22;8627:53;:::i;:::-;8617:63;;8573:117;8368:329;;;;:::o;8703:327::-;8761:6;8810:2;8798:9;8789:7;8785:23;8781:32;8778:119;;;8816:79;;:::i;:::-;8778:119;8936:1;8961:52;9005:7;8996:6;8985:9;8981:22;8961:52;:::i;:::-;8951:62;;8907:116;8703:327;;;;:::o;9036:349::-;9105:6;9154:2;9142:9;9133:7;9129:23;9125:32;9122:119;;;9160:79;;:::i;:::-;9122:119;9280:1;9305:63;9360:7;9351:6;9340:9;9336:22;9305:63;:::i;:::-;9295:73;;9251:127;9036:349;;;;:::o;9391:509::-;9460:6;9509:2;9497:9;9488:7;9484:23;9480:32;9477:119;;;9515:79;;:::i;:::-;9477:119;9663:1;9652:9;9648:17;9635:31;9693:18;9685:6;9682:30;9679:117;;;9715:79;;:::i;:::-;9679:117;9820:63;9875:7;9866:6;9855:9;9851:22;9820:63;:::i;:::-;9810:73;;9606:287;9391:509;;;;:::o;9906:329::-;9965:6;10014:2;10002:9;9993:7;9989:23;9985:32;9982:119;;;10020:79;;:::i;:::-;9982:119;10140:1;10165:53;10210:7;10201:6;10190:9;10186:22;10165:53;:::i;:::-;10155:63;;10111:117;9906:329;;;;:::o;10241:704::-;10336:6;10344;10352;10401:2;10389:9;10380:7;10376:23;10372:32;10369:119;;;10407:79;;:::i;:::-;10369:119;10527:1;10552:53;10597:7;10588:6;10577:9;10573:22;10552:53;:::i;:::-;10542:63;;10498:117;10682:2;10671:9;10667:18;10654:32;10713:18;10705:6;10702:30;10699:117;;;10735:79;;:::i;:::-;10699:117;10848:80;10920:7;10911:6;10900:9;10896:22;10848:80;:::i;:::-;10830:98;;;;10625:313;10241:704;;;;;:::o;10951:1057::-;11055:6;11063;11071;11079;11087;11095;11144:3;11132:9;11123:7;11119:23;11115:33;11112:120;;;11151:79;;:::i;:::-;11112:120;11271:1;11296:53;11341:7;11332:6;11321:9;11317:22;11296:53;:::i;:::-;11286:63;;11242:117;11398:2;11424:53;11469:7;11460:6;11449:9;11445:22;11424:53;:::i;:::-;11414:63;;11369:118;11526:2;11552:53;11597:7;11588:6;11577:9;11573:22;11552:53;:::i;:::-;11542:63;;11497:118;11654:2;11680:53;11725:7;11716:6;11705:9;11701:22;11680:53;:::i;:::-;11670:63;;11625:118;11782:3;11809:53;11854:7;11845:6;11834:9;11830:22;11809:53;:::i;:::-;11799:63;;11753:119;11911:3;11938:53;11983:7;11974:6;11963:9;11959:22;11938:53;:::i;:::-;11928:63;;11882:119;10951:1057;;;;;;;;:::o;12014:118::-;12101:24;12119:5;12101:24;:::i;:::-;12096:3;12089:37;12014:118;;:::o;12138:157::-;12243:45;12263:24;12281:5;12263:24;:::i;:::-;12243:45;:::i;:::-;12238:3;12231:58;12138:157;;:::o;12301:109::-;12382:21;12397:5;12382:21;:::i;:::-;12377:3;12370:34;12301:109;;:::o;12416:118::-;12503:24;12521:5;12503:24;:::i;:::-;12498:3;12491:37;12416:118;;:::o;12540:360::-;12626:3;12654:38;12686:5;12654:38;:::i;:::-;12708:70;12771:6;12766:3;12708:70;:::i;:::-;12701:77;;12787:52;12832:6;12827:3;12820:4;12813:5;12809:16;12787:52;:::i;:::-;12864:29;12886:6;12864:29;:::i;:::-;12859:3;12855:39;12848:46;;12630:270;12540:360;;;;:::o;12906:364::-;12994:3;13022:39;13055:5;13022:39;:::i;:::-;13077:71;13141:6;13136:3;13077:71;:::i;:::-;13070:78;;13157:52;13202:6;13197:3;13190:4;13183:5;13179:16;13157:52;:::i;:::-;13234:29;13256:6;13234:29;:::i;:::-;13229:3;13225:39;13218:46;;12998:272;12906:364;;;;:::o;13276:377::-;13382:3;13410:39;13443:5;13410:39;:::i;:::-;13465:89;13547:6;13542:3;13465:89;:::i;:::-;13458:96;;13563:52;13608:6;13603:3;13596:4;13589:5;13585:16;13563:52;:::i;:::-;13640:6;13635:3;13631:16;13624:23;;13386:267;13276:377;;;;:::o;13659:366::-;13801:3;13822:67;13886:2;13881:3;13822:67;:::i;:::-;13815:74;;13898:93;13987:3;13898:93;:::i;:::-;14016:2;14011:3;14007:12;14000:19;;13659:366;;;:::o;14031:::-;14173:3;14194:67;14258:2;14253:3;14194:67;:::i;:::-;14187:74;;14270:93;14359:3;14270:93;:::i;:::-;14388:2;14383:3;14379:12;14372:19;;14031:366;;;:::o;14403:::-;14545:3;14566:67;14630:2;14625:3;14566:67;:::i;:::-;14559:74;;14642:93;14731:3;14642:93;:::i;:::-;14760:2;14755:3;14751:12;14744:19;;14403:366;;;:::o;14775:::-;14917:3;14938:67;15002:2;14997:3;14938:67;:::i;:::-;14931:74;;15014:93;15103:3;15014:93;:::i;:::-;15132:2;15127:3;15123:12;15116:19;;14775:366;;;:::o;15147:365::-;15289:3;15310:66;15374:1;15369:3;15310:66;:::i;:::-;15303:73;;15385:93;15474:3;15385:93;:::i;:::-;15503:2;15498:3;15494:12;15487:19;;15147:365;;;:::o;15518:366::-;15660:3;15681:67;15745:2;15740:3;15681:67;:::i;:::-;15674:74;;15757:93;15846:3;15757:93;:::i;:::-;15875:2;15870:3;15866:12;15859:19;;15518:366;;;:::o;15890:::-;16032:3;16053:67;16117:2;16112:3;16053:67;:::i;:::-;16046:74;;16129:93;16218:3;16129:93;:::i;:::-;16247:2;16242:3;16238:12;16231:19;;15890:366;;;:::o;16262:::-;16404:3;16425:67;16489:2;16484:3;16425:67;:::i;:::-;16418:74;;16501:93;16590:3;16501:93;:::i;:::-;16619:2;16614:3;16610:12;16603:19;;16262:366;;;:::o;16634:::-;16776:3;16797:67;16861:2;16856:3;16797:67;:::i;:::-;16790:74;;16873:93;16962:3;16873:93;:::i;:::-;16991:2;16986:3;16982:12;16975:19;;16634:366;;;:::o;17006:::-;17148:3;17169:67;17233:2;17228:3;17169:67;:::i;:::-;17162:74;;17245:93;17334:3;17245:93;:::i;:::-;17363:2;17358:3;17354:12;17347:19;;17006:366;;;:::o;17378:::-;17520:3;17541:67;17605:2;17600:3;17541:67;:::i;:::-;17534:74;;17617:93;17706:3;17617:93;:::i;:::-;17735:2;17730:3;17726:12;17719:19;;17378:366;;;:::o;17750:::-;17892:3;17913:67;17977:2;17972:3;17913:67;:::i;:::-;17906:74;;17989:93;18078:3;17989:93;:::i;:::-;18107:2;18102:3;18098:12;18091:19;;17750:366;;;:::o;18122:::-;18264:3;18285:67;18349:2;18344:3;18285:67;:::i;:::-;18278:74;;18361:93;18450:3;18361:93;:::i;:::-;18479:2;18474:3;18470:12;18463:19;;18122:366;;;:::o;18494:::-;18636:3;18657:67;18721:2;18716:3;18657:67;:::i;:::-;18650:74;;18733:93;18822:3;18733:93;:::i;:::-;18851:2;18846:3;18842:12;18835:19;;18494:366;;;:::o;18866:::-;19008:3;19029:67;19093:2;19088:3;19029:67;:::i;:::-;19022:74;;19105:93;19194:3;19105:93;:::i;:::-;19223:2;19218:3;19214:12;19207:19;;18866:366;;;:::o;19238:::-;19380:3;19401:67;19465:2;19460:3;19401:67;:::i;:::-;19394:74;;19477:93;19566:3;19477:93;:::i;:::-;19595:2;19590:3;19586:12;19579:19;;19238:366;;;:::o;19610:::-;19752:3;19773:67;19837:2;19832:3;19773:67;:::i;:::-;19766:74;;19849:93;19938:3;19849:93;:::i;:::-;19967:2;19962:3;19958:12;19951:19;;19610:366;;;:::o;19982:::-;20124:3;20145:67;20209:2;20204:3;20145:67;:::i;:::-;20138:74;;20221:93;20310:3;20221:93;:::i;:::-;20339:2;20334:3;20330:12;20323:19;;19982:366;;;:::o;20354:::-;20496:3;20517:67;20581:2;20576:3;20517:67;:::i;:::-;20510:74;;20593:93;20682:3;20593:93;:::i;:::-;20711:2;20706:3;20702:12;20695:19;;20354:366;;;:::o;20726:::-;20868:3;20889:67;20953:2;20948:3;20889:67;:::i;:::-;20882:74;;20965:93;21054:3;20965:93;:::i;:::-;21083:2;21078:3;21074:12;21067:19;;20726:366;;;:::o;21098:::-;21240:3;21261:67;21325:2;21320:3;21261:67;:::i;:::-;21254:74;;21337:93;21426:3;21337:93;:::i;:::-;21455:2;21450:3;21446:12;21439:19;;21098:366;;;:::o;21470:::-;21612:3;21633:67;21697:2;21692:3;21633:67;:::i;:::-;21626:74;;21709:93;21798:3;21709:93;:::i;:::-;21827:2;21822:3;21818:12;21811:19;;21470:366;;;:::o;21842:::-;21984:3;22005:67;22069:2;22064:3;22005:67;:::i;:::-;21998:74;;22081:93;22170:3;22081:93;:::i;:::-;22199:2;22194:3;22190:12;22183:19;;21842:366;;;:::o;22214:::-;22356:3;22377:67;22441:2;22436:3;22377:67;:::i;:::-;22370:74;;22453:93;22542:3;22453:93;:::i;:::-;22571:2;22566:3;22562:12;22555:19;;22214:366;;;:::o;22586:::-;22728:3;22749:67;22813:2;22808:3;22749:67;:::i;:::-;22742:74;;22825:93;22914:3;22825:93;:::i;:::-;22943:2;22938:3;22934:12;22927:19;;22586:366;;;:::o;22958:::-;23100:3;23121:67;23185:2;23180:3;23121:67;:::i;:::-;23114:74;;23197:93;23286:3;23197:93;:::i;:::-;23315:2;23310:3;23306:12;23299:19;;22958:366;;;:::o;23330:::-;23472:3;23493:67;23557:2;23552:3;23493:67;:::i;:::-;23486:74;;23569:93;23658:3;23569:93;:::i;:::-;23687:2;23682:3;23678:12;23671:19;;23330:366;;;:::o;23702:::-;23844:3;23865:67;23929:2;23924:3;23865:67;:::i;:::-;23858:74;;23941:93;24030:3;23941:93;:::i;:::-;24059:2;24054:3;24050:12;24043:19;;23702:366;;;:::o;24074:::-;24216:3;24237:67;24301:2;24296:3;24237:67;:::i;:::-;24230:74;;24313:93;24402:3;24313:93;:::i;:::-;24431:2;24426:3;24422:12;24415:19;;24074:366;;;:::o;24446:118::-;24533:24;24551:5;24533:24;:::i;:::-;24528:3;24521:37;24446:118;;:::o;24570:256::-;24682:3;24697:75;24768:3;24759:6;24697:75;:::i;:::-;24797:2;24792:3;24788:12;24781:19;;24817:3;24810:10;;24570:256;;;;:::o;24832:435::-;25012:3;25034:95;25125:3;25116:6;25034:95;:::i;:::-;25027:102;;25146:95;25237:3;25228:6;25146:95;:::i;:::-;25139:102;;25258:3;25251:10;;24832:435;;;;;:::o;25273:222::-;25366:4;25404:2;25393:9;25389:18;25381:26;;25417:71;25485:1;25474:9;25470:17;25461:6;25417:71;:::i;:::-;25273:222;;;;:::o;25501:640::-;25696:4;25734:3;25723:9;25719:19;25711:27;;25748:71;25816:1;25805:9;25801:17;25792:6;25748:71;:::i;:::-;25829:72;25897:2;25886:9;25882:18;25873:6;25829:72;:::i;:::-;25911;25979:2;25968:9;25964:18;25955:6;25911:72;:::i;:::-;26030:9;26024:4;26020:20;26015:2;26004:9;26000:18;25993:48;26058:76;26129:4;26120:6;26058:76;:::i;:::-;26050:84;;25501:640;;;;;;;:::o;26147:210::-;26234:4;26272:2;26261:9;26257:18;26249:26;;26285:65;26347:1;26336:9;26332:17;26323:6;26285:65;:::i;:::-;26147:210;;;;:::o;26363:222::-;26456:4;26494:2;26483:9;26479:18;26471:26;;26507:71;26575:1;26564:9;26560:17;26551:6;26507:71;:::i;:::-;26363:222;;;;:::o;26591:313::-;26704:4;26742:2;26731:9;26727:18;26719:26;;26791:9;26785:4;26781:20;26777:1;26766:9;26762:17;26755:47;26819:78;26892:4;26883:6;26819:78;:::i;:::-;26811:86;;26591:313;;;;:::o;26910:419::-;27076:4;27114:2;27103:9;27099:18;27091:26;;27163:9;27157:4;27153:20;27149:1;27138:9;27134:17;27127:47;27191:131;27317:4;27191:131;:::i;:::-;27183:139;;26910:419;;;:::o;27335:::-;27501:4;27539:2;27528:9;27524:18;27516:26;;27588:9;27582:4;27578:20;27574:1;27563:9;27559:17;27552:47;27616:131;27742:4;27616:131;:::i;:::-;27608:139;;27335:419;;;:::o;27760:::-;27926:4;27964:2;27953:9;27949:18;27941:26;;28013:9;28007:4;28003:20;27999:1;27988:9;27984:17;27977:47;28041:131;28167:4;28041:131;:::i;:::-;28033:139;;27760:419;;;:::o;28185:::-;28351:4;28389:2;28378:9;28374:18;28366:26;;28438:9;28432:4;28428:20;28424:1;28413:9;28409:17;28402:47;28466:131;28592:4;28466:131;:::i;:::-;28458:139;;28185:419;;;:::o;28610:::-;28776:4;28814:2;28803:9;28799:18;28791:26;;28863:9;28857:4;28853:20;28849:1;28838:9;28834:17;28827:47;28891:131;29017:4;28891:131;:::i;:::-;28883:139;;28610:419;;;:::o;29035:::-;29201:4;29239:2;29228:9;29224:18;29216:26;;29288:9;29282:4;29278:20;29274:1;29263:9;29259:17;29252:47;29316:131;29442:4;29316:131;:::i;:::-;29308:139;;29035:419;;;:::o;29460:::-;29626:4;29664:2;29653:9;29649:18;29641:26;;29713:9;29707:4;29703:20;29699:1;29688:9;29684:17;29677:47;29741:131;29867:4;29741:131;:::i;:::-;29733:139;;29460:419;;;:::o;29885:::-;30051:4;30089:2;30078:9;30074:18;30066:26;;30138:9;30132:4;30128:20;30124:1;30113:9;30109:17;30102:47;30166:131;30292:4;30166:131;:::i;:::-;30158:139;;29885:419;;;:::o;30310:::-;30476:4;30514:2;30503:9;30499:18;30491:26;;30563:9;30557:4;30553:20;30549:1;30538:9;30534:17;30527:47;30591:131;30717:4;30591:131;:::i;:::-;30583:139;;30310:419;;;:::o;30735:::-;30901:4;30939:2;30928:9;30924:18;30916:26;;30988:9;30982:4;30978:20;30974:1;30963:9;30959:17;30952:47;31016:131;31142:4;31016:131;:::i;:::-;31008:139;;30735:419;;;:::o;31160:::-;31326:4;31364:2;31353:9;31349:18;31341:26;;31413:9;31407:4;31403:20;31399:1;31388:9;31384:17;31377:47;31441:131;31567:4;31441:131;:::i;:::-;31433:139;;31160:419;;;:::o;31585:::-;31751:4;31789:2;31778:9;31774:18;31766:26;;31838:9;31832:4;31828:20;31824:1;31813:9;31809:17;31802:47;31866:131;31992:4;31866:131;:::i;:::-;31858:139;;31585:419;;;:::o;32010:::-;32176:4;32214:2;32203:9;32199:18;32191:26;;32263:9;32257:4;32253:20;32249:1;32238:9;32234:17;32227:47;32291:131;32417:4;32291:131;:::i;:::-;32283:139;;32010:419;;;:::o;32435:::-;32601:4;32639:2;32628:9;32624:18;32616:26;;32688:9;32682:4;32678:20;32674:1;32663:9;32659:17;32652:47;32716:131;32842:4;32716:131;:::i;:::-;32708:139;;32435:419;;;:::o;32860:::-;33026:4;33064:2;33053:9;33049:18;33041:26;;33113:9;33107:4;33103:20;33099:1;33088:9;33084:17;33077:47;33141:131;33267:4;33141:131;:::i;:::-;33133:139;;32860:419;;;:::o;33285:::-;33451:4;33489:2;33478:9;33474:18;33466:26;;33538:9;33532:4;33528:20;33524:1;33513:9;33509:17;33502:47;33566:131;33692:4;33566:131;:::i;:::-;33558:139;;33285:419;;;:::o;33710:::-;33876:4;33914:2;33903:9;33899:18;33891:26;;33963:9;33957:4;33953:20;33949:1;33938:9;33934:17;33927:47;33991:131;34117:4;33991:131;:::i;:::-;33983:139;;33710:419;;;:::o;34135:::-;34301:4;34339:2;34328:9;34324:18;34316:26;;34388:9;34382:4;34378:20;34374:1;34363:9;34359:17;34352:47;34416:131;34542:4;34416:131;:::i;:::-;34408:139;;34135:419;;;:::o;34560:::-;34726:4;34764:2;34753:9;34749:18;34741:26;;34813:9;34807:4;34803:20;34799:1;34788:9;34784:17;34777:47;34841:131;34967:4;34841:131;:::i;:::-;34833:139;;34560:419;;;:::o;34985:::-;35151:4;35189:2;35178:9;35174:18;35166:26;;35238:9;35232:4;35228:20;35224:1;35213:9;35209:17;35202:47;35266:131;35392:4;35266:131;:::i;:::-;35258:139;;34985:419;;;:::o;35410:::-;35576:4;35614:2;35603:9;35599:18;35591:26;;35663:9;35657:4;35653:20;35649:1;35638:9;35634:17;35627:47;35691:131;35817:4;35691:131;:::i;:::-;35683:139;;35410:419;;;:::o;35835:::-;36001:4;36039:2;36028:9;36024:18;36016:26;;36088:9;36082:4;36078:20;36074:1;36063:9;36059:17;36052:47;36116:131;36242:4;36116:131;:::i;:::-;36108:139;;35835:419;;;:::o;36260:::-;36426:4;36464:2;36453:9;36449:18;36441:26;;36513:9;36507:4;36503:20;36499:1;36488:9;36484:17;36477:47;36541:131;36667:4;36541:131;:::i;:::-;36533:139;;36260:419;;;:::o;36685:::-;36851:4;36889:2;36878:9;36874:18;36866:26;;36938:9;36932:4;36928:20;36924:1;36913:9;36909:17;36902:47;36966:131;37092:4;36966:131;:::i;:::-;36958:139;;36685:419;;;:::o;37110:::-;37276:4;37314:2;37303:9;37299:18;37291:26;;37363:9;37357:4;37353:20;37349:1;37338:9;37334:17;37327:47;37391:131;37517:4;37391:131;:::i;:::-;37383:139;;37110:419;;;:::o;37535:::-;37701:4;37739:2;37728:9;37724:18;37716:26;;37788:9;37782:4;37778:20;37774:1;37763:9;37759:17;37752:47;37816:131;37942:4;37816:131;:::i;:::-;37808:139;;37535:419;;;:::o;37960:::-;38126:4;38164:2;38153:9;38149:18;38141:26;;38213:9;38207:4;38203:20;38199:1;38188:9;38184:17;38177:47;38241:131;38367:4;38241:131;:::i;:::-;38233:139;;37960:419;;;:::o;38385:::-;38551:4;38589:2;38578:9;38574:18;38566:26;;38638:9;38632:4;38628:20;38624:1;38613:9;38609:17;38602:47;38666:131;38792:4;38666:131;:::i;:::-;38658:139;;38385:419;;;:::o;38810:::-;38976:4;39014:2;39003:9;38999:18;38991:26;;39063:9;39057:4;39053:20;39049:1;39038:9;39034:17;39027:47;39091:131;39217:4;39091:131;:::i;:::-;39083:139;;38810:419;;;:::o;39235:222::-;39328:4;39366:2;39355:9;39351:18;39343:26;;39379:71;39447:1;39436:9;39432:17;39423:6;39379:71;:::i;:::-;39235:222;;;;:::o;39463:886::-;39724:4;39762:3;39751:9;39747:19;39739:27;;39776:71;39844:1;39833:9;39829:17;39820:6;39776:71;:::i;:::-;39857:72;39925:2;39914:9;39910:18;39901:6;39857:72;:::i;:::-;39939;40007:2;39996:9;39992:18;39983:6;39939:72;:::i;:::-;40021;40089:2;40078:9;40074:18;40065:6;40021:72;:::i;:::-;40103:73;40171:3;40160:9;40156:19;40147:6;40103:73;:::i;:::-;40186;40254:3;40243:9;40239:19;40230:6;40186:73;:::i;:::-;40269;40337:3;40326:9;40322:19;40313:6;40269:73;:::i;:::-;39463:886;;;;;;;;;;:::o;40355:129::-;40389:6;40416:20;;:::i;:::-;40406:30;;40445:33;40473:4;40465:6;40445:33;:::i;:::-;40355:129;;;:::o;40490:75::-;40523:6;40556:2;40550:9;40540:19;;40490:75;:::o;40571:311::-;40648:4;40738:18;40730:6;40727:30;40724:56;;;40760:18;;:::i;:::-;40724:56;40810:4;40802:6;40798:17;40790:25;;40870:4;40864;40860:15;40852:23;;40571:311;;;:::o;40888:307::-;40949:4;41039:18;41031:6;41028:30;41025:56;;;41061:18;;:::i;:::-;41025:56;41099:29;41121:6;41099:29;:::i;:::-;41091:37;;41183:4;41177;41173:15;41165:23;;40888:307;;;:::o;41201:308::-;41263:4;41353:18;41345:6;41342:30;41339:56;;;41375:18;;:::i;:::-;41339:56;41413:29;41435:6;41413:29;:::i;:::-;41405:37;;41497:4;41491;41487:15;41479:23;;41201:308;;;:::o;41515:98::-;41566:6;41600:5;41594:12;41584:22;;41515:98;;;:::o;41619:99::-;41671:6;41705:5;41699:12;41689:22;;41619:99;;;:::o;41724:168::-;41807:11;41841:6;41836:3;41829:19;41881:4;41876:3;41872:14;41857:29;;41724:168;;;;:::o;41898:169::-;41982:11;42016:6;42011:3;42004:19;42056:4;42051:3;42047:14;42032:29;;41898:169;;;;:::o;42073:148::-;42175:11;42212:3;42197:18;;42073:148;;;;:::o;42227:305::-;42267:3;42286:20;42304:1;42286:20;:::i;:::-;42281:25;;42320:20;42338:1;42320:20;:::i;:::-;42315:25;;42474:1;42406:66;42402:74;42399:1;42396:81;42393:107;;;42480:18;;:::i;:::-;42393:107;42524:1;42521;42517:9;42510:16;;42227:305;;;;:::o;42538:185::-;42578:1;42595:20;42613:1;42595:20;:::i;:::-;42590:25;;42629:20;42647:1;42629:20;:::i;:::-;42624:25;;42668:1;42658:35;;42673:18;;:::i;:::-;42658:35;42715:1;42712;42708:9;42703:14;;42538:185;;;;:::o;42729:348::-;42769:7;42792:20;42810:1;42792:20;:::i;:::-;42787:25;;42826:20;42844:1;42826:20;:::i;:::-;42821:25;;43014:1;42946:66;42942:74;42939:1;42936:81;42931:1;42924:9;42917:17;42913:105;42910:131;;;43021:18;;:::i;:::-;42910:131;43069:1;43066;43062:9;43051:20;;42729:348;;;;:::o;43083:191::-;43123:4;43143:20;43161:1;43143:20;:::i;:::-;43138:25;;43177:20;43195:1;43177:20;:::i;:::-;43172:25;;43216:1;43213;43210:8;43207:34;;;43221:18;;:::i;:::-;43207:34;43266:1;43263;43259:9;43251:17;;43083:191;;;;:::o;43280:96::-;43317:7;43346:24;43364:5;43346:24;:::i;:::-;43335:35;;43280:96;;;:::o;43382:90::-;43416:7;43459:5;43452:13;43445:21;43434:32;;43382:90;;;:::o;43478:77::-;43515:7;43544:5;43533:16;;43478:77;;;:::o;43561:149::-;43597:7;43637:66;43630:5;43626:78;43615:89;;43561:149;;;:::o;43716:126::-;43753:7;43793:42;43786:5;43782:54;43771:65;;43716:126;;;:::o;43848:77::-;43885:7;43914:5;43903:16;;43848:77;;;:::o;43931:154::-;44015:6;44010:3;44005;43992:30;44077:1;44068:6;44063:3;44059:16;44052:27;43931:154;;;:::o;44091:307::-;44159:1;44169:113;44183:6;44180:1;44177:13;44169:113;;;44268:1;44263:3;44259:11;44253:18;44249:1;44244:3;44240:11;44233:39;44205:2;44202:1;44198:10;44193:15;;44169:113;;;44300:6;44297:1;44294:13;44291:101;;;44380:1;44371:6;44366:3;44362:16;44355:27;44291:101;44140:258;44091:307;;;:::o;44404:320::-;44448:6;44485:1;44479:4;44475:12;44465:22;;44532:1;44526:4;44522:12;44553:18;44543:81;;44609:4;44601:6;44597:17;44587:27;;44543:81;44671:2;44663:6;44660:14;44640:18;44637:38;44634:84;;;44690:18;;:::i;:::-;44634:84;44455:269;44404:320;;;:::o;44730:281::-;44813:27;44835:4;44813:27;:::i;:::-;44805:6;44801:40;44943:6;44931:10;44928:22;44907:18;44895:10;44892:34;44889:62;44886:88;;;44954:18;;:::i;:::-;44886:88;44994:10;44990:2;44983:22;44773:238;44730:281;;:::o;45017:233::-;45056:3;45079:24;45097:5;45079:24;:::i;:::-;45070:33;;45125:66;45118:5;45115:77;45112:103;;;45195:18;;:::i;:::-;45112:103;45242:1;45235:5;45231:13;45224:20;;45017:233;;;:::o;45256:100::-;45295:7;45324:26;45344:5;45324:26;:::i;:::-;45313:37;;45256:100;;;:::o;45362:94::-;45401:7;45430:20;45444:5;45430:20;:::i;:::-;45419:31;;45362:94;;;:::o;45462:176::-;45494:1;45511:20;45529:1;45511:20;:::i;:::-;45506:25;;45545:20;45563:1;45545:20;:::i;:::-;45540:25;;45584:1;45574:35;;45589:18;;:::i;:::-;45574:35;45630:1;45627;45623:9;45618:14;;45462:176;;;;:::o;45644:180::-;45692:77;45689:1;45682:88;45789:4;45786:1;45779:15;45813:4;45810:1;45803:15;45830:180;45878:77;45875:1;45868:88;45975:4;45972:1;45965:15;45999:4;45996:1;45989:15;46016:180;46064:77;46061:1;46054:88;46161:4;46158:1;46151:15;46185:4;46182:1;46175:15;46202:180;46250:77;46247:1;46240:88;46347:4;46344:1;46337:15;46371:4;46368:1;46361:15;46388:180;46436:77;46433:1;46426:88;46533:4;46530:1;46523:15;46557:4;46554:1;46547:15;46574:117;46683:1;46680;46673:12;46697:117;46806:1;46803;46796:12;46820:117;46929:1;46926;46919:12;46943:117;47052:1;47049;47042:12;47066:117;47175:1;47172;47165:12;47189:117;47298:1;47295;47288:12;47312:102;47353:6;47404:2;47400:7;47395:2;47388:5;47384:14;47380:28;47370:38;;47312:102;;;:::o;47420:94::-;47453:8;47501:5;47497:2;47493:14;47472:35;;47420:94;;;:::o;47520:170::-;47660:22;47656:1;47648:6;47644:14;47637:46;47520:170;:::o;47696:223::-;47836:34;47832:1;47824:6;47820:14;47813:58;47905:6;47900:2;47892:6;47888:15;47881:31;47696:223;:::o;47925:176::-;48065:28;48061:1;48053:6;48049:14;48042:52;47925:176;:::o;48107:237::-;48247:34;48243:1;48235:6;48231:14;48224:58;48316:20;48311:2;48303:6;48299:15;48292:45;48107:237;:::o;48350:158::-;48490:10;48486:1;48478:6;48474:14;48467:34;48350:158;:::o;48514:225::-;48654:34;48650:1;48642:6;48638:14;48631:58;48723:8;48718:2;48710:6;48706:15;48699:33;48514:225;:::o;48745:178::-;48885:30;48881:1;48873:6;48869:14;48862:54;48745:178;:::o;48929:223::-;49069:34;49065:1;49057:6;49053:14;49046:58;49138:6;49133:2;49125:6;49121:15;49114:31;48929:223;:::o;49158:175::-;49298:27;49294:1;49286:6;49282:14;49275:51;49158:175;:::o;49339:168::-;49479:20;49475:1;49467:6;49463:14;49456:44;49339:168;:::o;49513:231::-;49653:34;49649:1;49641:6;49637:14;49630:58;49722:14;49717:2;49709:6;49705:15;49698:39;49513:231;:::o;49750:172::-;49890:24;49886:1;49878:6;49874:14;49867:48;49750:172;:::o;49928:243::-;50068:34;50064:1;50056:6;50052:14;50045:58;50137:26;50132:2;50124:6;50120:15;50113:51;49928:243;:::o;50177:229::-;50317:34;50313:1;50305:6;50301:14;50294:58;50386:12;50381:2;50373:6;50369:15;50362:37;50177:229;:::o;50412:228::-;50552:34;50548:1;50540:6;50536:14;50529:58;50621:11;50616:2;50608:6;50604:15;50597:36;50412:228;:::o;50646:182::-;50786:34;50782:1;50774:6;50770:14;50763:58;50646:182;:::o;50834:231::-;50974:34;50970:1;50962:6;50958:14;50951:58;51043:14;51038:2;51030:6;51026:15;51019:39;50834:231;:::o;51071:182::-;51211:34;51207:1;51199:6;51195:14;51188:58;51071:182;:::o;51259:171::-;51399:23;51395:1;51387:6;51383:14;51376:47;51259:171;:::o;51436:228::-;51576:34;51572:1;51564:6;51560:14;51553:58;51645:11;51640:2;51632:6;51628:15;51621:36;51436:228;:::o;51670:234::-;51810:34;51806:1;51798:6;51794:14;51787:58;51879:17;51874:2;51866:6;51862:15;51855:42;51670:234;:::o;51910:220::-;52050:34;52046:1;52038:6;52034:14;52027:58;52119:3;52114:2;52106:6;52102:15;52095:28;51910:220;:::o;52136:236::-;52276:34;52272:1;52264:6;52260:14;52253:58;52345:19;52340:2;52332:6;52328:15;52321:44;52136:236;:::o;52378:173::-;52518:25;52514:1;52506:6;52502:14;52495:49;52378:173;:::o;52557:172::-;52697:24;52693:1;52685:6;52681:14;52674:48;52557:172;:::o;52735:178::-;52875:30;52871:1;52863:6;52859:14;52852:54;52735:178;:::o;52919:::-;53059:30;53055:1;53047:6;53043:14;53036:54;52919:178;:::o;53103:172::-;53243:24;53239:1;53231:6;53227:14;53220:48;53103:172;:::o;53281:165::-;53421:17;53417:1;53409:6;53405:14;53398:41;53281:165;:::o;53452:122::-;53525:24;53543:5;53525:24;:::i;:::-;53518:5;53515:35;53505:63;;53564:1;53561;53554:12;53505:63;53452:122;:::o;53580:116::-;53650:21;53665:5;53650:21;:::i;:::-;53643:5;53640:32;53630:60;;53686:1;53683;53676:12;53630:60;53580:116;:::o;53702:122::-;53775:24;53793:5;53775:24;:::i;:::-;53768:5;53765:35;53755:63;;53814:1;53811;53804:12;53755:63;53702:122;:::o;53830:120::-;53902:23;53919:5;53902:23;:::i;:::-;53895:5;53892:34;53882:62;;53940:1;53937;53930:12;53882:62;53830:120;:::o;53956:122::-;54029:24;54047:5;54029:24;:::i;:::-;54022:5;54019:35;54009:63;;54068:1;54065;54058:12;54009:63;53956:122;:::o

Swarm Source

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