Token HODLER CHADS

 

Overview [ERC-721]

Max Total Supply:
10,000 CHADS

Holders:
956

Transfers:
-

 
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
HodlerChads

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT


pragma solidity 0.8.6;

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

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}


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

pragma solidity 0.8.6;

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

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

pragma solidity 0.8.6;

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


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

pragma solidity 0.8.6;


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

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

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

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

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

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

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

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


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

pragma solidity 0.8.6;

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


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

pragma solidity 0.8.6;

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


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

pragma solidity 0.8.6;

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


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

pragma solidity 0.8.6;


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


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

pragma solidity 0.8.6;


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


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity 0.8.6;


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


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

pragma solidity 0.8.6;


/**
 * @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 {
        _setApprovalForAll(_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 Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

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

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

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

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

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

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

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

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

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




pragma solidity 0.8.6;


contract HodlerChads is ERC721, Ownable {

  string _name = "HODLER CHADS";
  string _symbol = "CHADS";

  using Strings for uint256;
  using Counters for Counters.Counter;

  Counters.Counter private supply;

  string public uriPrefix = "";
  string public uriSuffix = ".json";
  string public hiddenMetadataUri;
  
  uint256 public cost = 0.069 ether;
  uint256 public costPartners = 0.0420 ether;
  uint256 public mintLimitPartners = 4000;
  uint256 public maxSupply = 10000;
  uint256 public maxFreeChads = 600;
  uint256 public maxMintAmountPerTx = 10;

  bool public paused = true;
  bool public revealed = false;

  mapping(address => uint256) public whitelistRoles;

  //partner tokens
  IERC20 private tokenMICE = IERC20(0xbad6186E92002E312078b5a1dAfd5ddf63d3f731); // anonymice
  IERC20 private tokenBAYC = IERC20(0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D); // Bored Ape
  IERC20 private tokenKONGZ = IERC20(0x57a204AA1042f6E66DD7730813f4024114d74f37); // KONGZ
  IERC20 private tokenMAYC = IERC20(0x60E4d786628Fea6478F785A6d7e704777c86a7c6); // Mutant
  IERC20 private tokenHabibiz = IERC20(0x98a0227E99E7AF0f1f0D51746211a245c3B859c2); // Habibiz

  event Mint(uint256 index, address creator);

  constructor() ERC721(_name, _symbol) {
    setHiddenMetadataUri("ipfs://QmRXyTiJTuRjeksUMvcbsqhBqHm8N65ZwrEddcRwESpT7e/hidden.json");
  }

  modifier mintCompliance(uint256 _mintQuantity) {
    require(!paused, "The contract is paused!");
    require(_mintQuantity > 0 && _mintQuantity <= maxMintAmountPerTx, "Invalid mint amount!");
    require(supply.current() + _mintQuantity <= maxSupply, "Max supply exceeded!");
    _;
  }

  function totalSupply() public view returns (uint256) {
    return supply.current();
  }

  /**
  *    general mint function, first maxFreeChads are free mints
  */
 function mint(uint256 _mintQuantity) public payable mintCompliance(_mintQuantity) {
    if(supply.current() < maxFreeChads ) {
        _mintChads(msg.sender, _mintQuantity);
    } else {
        require(msg.value >= cost * _mintQuantity, "Insufficient funds sent!");
        _mintChads(msg.sender, _mintQuantity);
    }
  }

  /**
  *    Mint function for 1st Free mint to whitelisted users
  */
  function mintFreeRoles(uint256 _mintQuantity) public payable mintCompliance(_mintQuantity) {
    require(whitelistRoles[msg.sender] == 1 || whitelistRoles[msg.sender] == 3, "not whitelisted");
    _mintChads(msg.sender, 1);
    whitelistRoles[msg.sender] = whitelistRoles[msg.sender] - 1;
  }

  /**
  *    Mint function for discounted price mint to Partner or whitelisted users
  */
  function mintDiscounted(uint256 _mintQuantity) public payable mintCompliance(_mintQuantity) {
    if(whitelistRoles[msg.sender] == 2) {
        _mintForOG(_mintQuantity);
    } else if( mintLimitPartners > 0 && (tokenHabibiz.balanceOf(msg.sender) > 0 || tokenMICE.balanceOf(msg.sender) > 0 || tokenBAYC.balanceOf(msg.sender) > 0 
        || tokenMAYC.balanceOf(msg.sender) > 0 || tokenKONGZ.balanceOf(msg.sender) > 0 )) {

        _mintForPartner(_mintQuantity);
    } else {
        mint(_mintQuantity);
    }
  }

  /**
  *   owneronly mint function for giveaways by project
  */

  function mintForAddress(uint256 _mintQuantity, address _receiver) public mintCompliance(_mintQuantity) onlyOwner {
    _mintChads(_receiver, _mintQuantity);
  }

  /**
  *   devonly mint function for partner NFT holder at discounted rate
  */

  function _mintForPartner(uint256 _mintQuantity) internal {
    require(mintLimitPartners > 0 , "Partner limit exausted");
    require( tokenHabibiz.balanceOf(msg.sender) > 0 || tokenMICE.balanceOf(msg.sender) > 0 || tokenBAYC.balanceOf(msg.sender) > 0 
        || tokenMAYC.balanceOf(msg.sender) > 0 || tokenKONGZ.balanceOf(msg.sender) > 0 
        , "not partner");
    require(msg.value >= costPartners * _mintQuantity, "Insufficient funds sent!");
    _mintChads(msg.sender, _mintQuantity);
    mintLimitPartners = mintLimitPartners - _mintQuantity ;
  }

  /**
  *    devonly mint function discounted mint to OG Chad roles
  */
  function _mintForOG(uint256 _mintQuantity) internal {
    require(whitelistRoles[msg.sender] == 2, "not whitelisted for OG");
    require(msg.value >= costPartners * _mintQuantity, "Insufficient funds sent!");
    _mintChads(msg.sender, _mintQuantity);
  }

  /**
  *    devonly mint function to loop through mint quantity
  */
  function _mintChads(address _receiver, uint256 _mintQuantity) internal {
    for (uint256 i = 0; i < _mintQuantity; i++) {
      supply.increment();
      _safeMint(_receiver, supply.current());
      emit Mint(supply.current(), msg.sender);
    }
  }

  function walletOfOwner(address _owner) public view returns (uint256[] memory){
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
    uint256 currentTokenId = 1;
    uint256 ownedTokenIndex = 0;

    while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) {
      address currentTokenOwner = ownerOf(currentTokenId);

      if (currentTokenOwner == _owner) {
        ownedTokenIds[ownedTokenIndex] = currentTokenId;

        ownedTokenIndex++;
      }

      currentTokenId++;
    }

    return ownedTokenIds;
  }

  function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) {
    require(_exists(_tokenId),"ERC721Metadata: URI query for nonexistent token");

    if (revealed == false) {
      return hiddenMetadataUri;
    }

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

  function setRevealed(bool _state) public onlyOwner {
    revealed = _state;
  }

  function setCost(uint256 _cost) public onlyOwner {
    cost = _cost;
  }

  function setFreeLimit(uint256 _maxFree) public onlyOwner {
    maxFreeChads = _maxFree;
  }
  /**
  *   set limit for max mint per transaction
  *   @param _maxMintAmountPerTx => uint
  */
  function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner {
    maxMintAmountPerTx = _maxMintAmountPerTx;
  }

  function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner {
    hiddenMetadataUri = _hiddenMetadataUri;
  }

  function setUriPrefix(string memory _uriPrefix) public onlyOwner {
    uriPrefix = _uriPrefix;
  }

  function setUriSuffix(string memory _uriSuffix) public onlyOwner {
    uriSuffix = _uriSuffix;
  }

  /**
  *   enable/pause minting
  *   @param _state => true/false
  */
  function setPaused(bool _state) public onlyOwner {
    paused = _state;
  }

  /**
  *   withdraw balance to owner
  */
  function withdraw() public onlyOwner {
    (bool os, ) = payable(owner()).call{value: address(this).balance}("");
    require(os);
  }

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

  /**
  *   add single  whitelist addresses
  *   @param _user => collection address
  *   @param _roleCount => role id
  */
  function whitelistRole(address _user, uint256 _roleCount) internal onlyOwner {
    require(_user != address(0), "Invalid address");
    require(_roleCount > 0, "Invalid Count");
    whitelistRoles[_user] = _roleCount;
  }

    /**
    *   add bulk whitelist addresses
    *   @param _users => collection address
    *   @param _roleCounts => role id
    */
  function whitelistForRoles(address[] memory _users, uint256[] memory _roleCounts) external onlyOwner {
    for (uint i=0; i<_users.length; i++) {
        whitelistRole(_users[i], _roleCounts[i]);
    }
  }
}

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":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"address","name":"creator","type":"address"}],"name":"Mint","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":[{"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":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"costPartners","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"maxFreeChads","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintQuantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintQuantity","type":"uint256"}],"name":"mintDiscounted","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintQuantity","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintQuantity","type":"uint256"}],"name":"mintFreeRoles","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintLimitPartners","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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxFree","type":"uint256"}],"name":"setFreeLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","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":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"},{"internalType":"uint256[]","name":"_roleCounts","type":"uint256[]"}],"name":"whitelistForRoles","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistRoles","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280600c81526020017f484f444c4552204348414453000000000000000000000000000000000000000081525060079080519060200190620000519291906200067d565b506040518060400160405280600581526020017f4348414453000000000000000000000000000000000000000000000000000000815250600890805190602001906200009f9291906200067d565b5060405180602001604052806000815250600a9080519060200190620000c79291906200067d565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600b9080519060200190620001159291906200067d565b5066f5232269808000600d55669536c708910000600e55610fa0600f55612710601055610258601155600a6012556001601360006101000a81548160ff0219169083151502179055506000601360016101000a81548160ff02191690831515021790555073bad6186e92002e312078b5a1dafd5ddf63d3f731601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073bc4ca0eda7647a8ab7c2061c2e118a18a936f13d601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507357a204aa1042f6e66dd7730813f4024114d74f37601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507360e4d786628fea6478f785a6d7e704777c86a7c6601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507398a0227e99e7af0f1f0d51746211a245c3b859c2601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200032f57600080fd5b50600780546200033f9062000787565b80601f01602080910402602001604051908101604052809291908181526020018280546200036d9062000787565b8015620003be5780601f106200039257610100808354040283529160200191620003be565b820191906000526020600020905b815481529060010190602001808311620003a057829003601f168201915b505050505060088054620003d29062000787565b80601f0160208091040260200160405190810160405280929190818152602001828054620004009062000787565b8015620004515780601f10620004255761010080835404028352916020019162000451565b820191906000526020600020905b8154815290600101906020018083116200043357829003601f168201915b505050505081600090805190602001906200046e9291906200067d565b508060019080519060200190620004879291906200067d565b505050620004aa6200049e620004da60201b60201c565b620004e260201b60201c565b620004d46040518060800160405280604181526020016200611060419139620005a860201b60201c565b62000815565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620005b8620004da60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005de6200065360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000637576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200062e9062000754565b60405180910390fd5b80600c90805190602001906200064f9291906200067d565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200068b9062000787565b90600052602060002090601f016020900481019282620006af5760008555620006fb565b82601f10620006ca57805160ff1916838001178555620006fb565b82800160010185558215620006fb579182015b82811115620006fa578251825591602001919060010190620006dd565b5b5090506200070a91906200070e565b5090565b5b80821115620007295760008160009055506001016200070f565b5090565b60006200073c60208362000776565b91506200074982620007ec565b602082019050919050565b600060208201905081810360008301526200076f816200072d565b9050919050565b600082825260208201905092915050565b60006002820490506001821680620007a057607f821691505b60208210811415620007b757620007b6620007bd565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6158eb80620008256000396000f3fe6080604052600436106102675760003560e01c80636a5f6cb111610144578063b88d4fde116100b6578063e0a808531161007a578063e0a80853146108df578063e3b6e35314610908578063e985e9c514610933578063efbd73f414610970578063f2fde38b14610999578063f8604f11146109c257610267565b8063b88d4fde14610809578063c87b56dd14610832578063d5abeb011461086f578063d8cc091c1461089a578063e0668ee4146108c357610267565b806394354fd01161010857806394354fd01461071a57806395d89b4114610745578063a0712d6814610770578063a22cb4651461078c578063a45ba8e7146107b5578063b071401b146107e057610267565b80636a5f6cb11461065657806370a0823114610672578063715018a6146106af5780637ec4a659146106c65780638da5cb5b146106ef57610267565b806334e229a1116101dd5780634fdd43cb116101a15780634fdd43cb14610544578063518302271461056d5780635503a0e8146105985780635c975abb146105c357806362b99ad4146105ee5780636352211e1461061957610267565b806334e229a1146104615780633ccfd60b1461049e57806342842e0e146104b5578063438b6300146104de57806344a0d68a1461051b57610267565b806313faede61161022f57806313faede61461036557806316ba10e01461039057806316c38b3c146103b957806318160ddd146103e257806323b872dd1461040d578063318156b21461043657610267565b806301ffc9a71461026c57806306fdde03146102a9578063081812fc146102d45780630891cd8314610311578063095ea7b31461033c575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e91906141da565b6109eb565b6040516102a0919061496b565b60405180910390f35b3480156102b557600080fd5b506102be610acd565b6040516102cb9190614986565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f6919061427d565b610b5f565b60405161030891906148e2565b60405180910390f35b34801561031d57600080fd5b50610326610be4565b6040516103339190614ce8565b60405180910390f35b34801561034857600080fd5b50610363600480360381019061035e91906140f5565b610bea565b005b34801561037157600080fd5b5061037a610d02565b6040516103879190614ce8565b60405180910390f35b34801561039c57600080fd5b506103b760048036038101906103b29190614234565b610d08565b005b3480156103c557600080fd5b506103e060048036038101906103db91906141ad565b610d9e565b005b3480156103ee57600080fd5b506103f7610e37565b6040516104049190614ce8565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190613fdf565b610e48565b005b34801561044257600080fd5b5061044b610ea8565b6040516104589190614ce8565b60405180910390f35b34801561046d57600080fd5b5061048860048036038101906104839190613f72565b610eae565b6040516104959190614ce8565b60405180910390f35b3480156104aa57600080fd5b506104b3610ec6565b005b3480156104c157600080fd5b506104dc60048036038101906104d79190613fdf565b610fc2565b005b3480156104ea57600080fd5b5061050560048036038101906105009190613f72565b610fe2565b6040516105129190614949565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d919061427d565b6110ed565b005b34801561055057600080fd5b5061056b60048036038101906105669190614234565b611173565b005b34801561057957600080fd5b50610582611209565b60405161058f919061496b565b60405180910390f35b3480156105a457600080fd5b506105ad61121c565b6040516105ba9190614986565b60405180910390f35b3480156105cf57600080fd5b506105d86112aa565b6040516105e5919061496b565b60405180910390f35b3480156105fa57600080fd5b506106036112bd565b6040516106109190614986565b60405180910390f35b34801561062557600080fd5b50610640600480360381019061063b919061427d565b61134b565b60405161064d91906148e2565b60405180910390f35b610670600480360381019061066b919061427d565b6113fd565b005b34801561067e57600080fd5b5061069960048036038101906106949190613f72565b611900565b6040516106a69190614ce8565b60405180910390f35b3480156106bb57600080fd5b506106c46119b8565b005b3480156106d257600080fd5b506106ed60048036038101906106e89190614234565b611a40565b005b3480156106fb57600080fd5b50610704611ad6565b60405161071191906148e2565b60405180910390f35b34801561072657600080fd5b5061072f611b00565b60405161073c9190614ce8565b60405180910390f35b34801561075157600080fd5b5061075a611b06565b6040516107679190614986565b60405180910390f35b61078a6004803603810190610785919061427d565b611b98565b005b34801561079857600080fd5b506107b360048036038101906107ae91906140b5565b611d14565b005b3480156107c157600080fd5b506107ca611d2a565b6040516107d79190614986565b60405180910390f35b3480156107ec57600080fd5b506108076004803603810190610802919061427d565b611db8565b005b34801561081557600080fd5b50610830600480360381019061082b9190614032565b611e3e565b005b34801561083e57600080fd5b506108596004803603810190610854919061427d565b611ea0565b6040516108669190614986565b60405180910390f35b34801561087b57600080fd5b50610884611ff9565b6040516108919190614ce8565b60405180910390f35b3480156108a657600080fd5b506108c160048036038101906108bc9190614135565b611fff565b005b6108dd60048036038101906108d8919061427d565b6120dd565b005b3480156108eb57600080fd5b50610906600480360381019061090191906141ad565b612342565b005b34801561091457600080fd5b5061091d6123db565b60405161092a9190614ce8565b60405180910390f35b34801561093f57600080fd5b5061095a60048036038101906109559190613f9f565b6123e1565b604051610967919061496b565b60405180910390f35b34801561097c57600080fd5b50610997600480360381019061099291906142d7565b612475565b005b3480156109a557600080fd5b506109c060048036038101906109bb9190613f72565b6125fb565b005b3480156109ce57600080fd5b506109e960048036038101906109e4919061427d565b6126f3565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ab657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ac65750610ac582612779565b5b9050919050565b606060008054610adc90615072565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0890615072565b8015610b555780601f10610b2a57610100808354040283529160200191610b55565b820191906000526020600020905b815481529060010190602001808311610b3857829003601f168201915b5050505050905090565b6000610b6a826127e3565b610ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba090614ba8565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600e5481565b6000610bf58261134b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5d90614c48565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c8561284f565b73ffffffffffffffffffffffffffffffffffffffff161480610cb45750610cb381610cae61284f565b6123e1565b5b610cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cea90614b08565b60405180910390fd5b610cfd8383612857565b505050565b600d5481565b610d1061284f565b73ffffffffffffffffffffffffffffffffffffffff16610d2e611ad6565b73ffffffffffffffffffffffffffffffffffffffff1614610d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7b90614bc8565b60405180910390fd5b80600b9080519060200190610d9a929190613c35565b5050565b610da661284f565b73ffffffffffffffffffffffffffffffffffffffff16610dc4611ad6565b73ffffffffffffffffffffffffffffffffffffffff1614610e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1190614bc8565b60405180910390fd5b80601360006101000a81548160ff02191690831515021790555050565b6000610e436009612910565b905090565b610e59610e5361284f565b8261291e565b610e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8f90614c88565b60405180910390fd5b610ea38383836129fc565b505050565b600f5481565b60146020528060005260406000206000915090505481565b610ece61284f565b73ffffffffffffffffffffffffffffffffffffffff16610eec611ad6565b73ffffffffffffffffffffffffffffffffffffffff1614610f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3990614bc8565b60405180910390fd5b6000610f4c611ad6565b73ffffffffffffffffffffffffffffffffffffffff1647604051610f6f906148cd565b60006040518083038185875af1925050503d8060008114610fac576040519150601f19603f3d011682016040523d82523d6000602084013e610fb1565b606091505b5050905080610fbf57600080fd5b50565b610fdd83838360405180602001604052806000815250611e3e565b505050565b60606000610fef83611900565b905060008167ffffffffffffffff81111561100d5761100c61520b565b5b60405190808252806020026020018201604052801561103b5781602001602082028036833780820191505090505b50905060006001905060005b838110801561105857506010548211155b156110e15760006110688361134b565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110cd57828483815181106110b2576110b16151dc565b5b60200260200101818152505081806110c9906150d5565b9250505b82806110d8906150d5565b93505050611047565b82945050505050919050565b6110f561284f565b73ffffffffffffffffffffffffffffffffffffffff16611113611ad6565b73ffffffffffffffffffffffffffffffffffffffff1614611169576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116090614bc8565b60405180910390fd5b80600d8190555050565b61117b61284f565b73ffffffffffffffffffffffffffffffffffffffff16611199611ad6565b73ffffffffffffffffffffffffffffffffffffffff16146111ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e690614bc8565b60405180910390fd5b80600c9080519060200190611205929190613c35565b5050565b601360019054906101000a900460ff1681565b600b805461122990615072565b80601f016020809104026020016040519081016040528092919081815260200182805461125590615072565b80156112a25780601f10611277576101008083540402835291602001916112a2565b820191906000526020600020905b81548152906001019060200180831161128557829003601f168201915b505050505081565b601360009054906101000a900460ff1681565b600a80546112ca90615072565b80601f01602080910402602001604051908101604052809291908181526020018280546112f690615072565b80156113435780601f1061131857610100808354040283529160200191611343565b820191906000526020600020905b81548152906001019060200180831161132657829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113eb90614b48565b60405180910390fd5b80915050919050565b80601360009054906101000a900460ff161561144e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144590614be8565b60405180910390fd5b60008111801561146057506012548111155b61149f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149690614a48565b60405180910390fd5b601054816114ad6009612910565b6114b79190614ea7565b11156114f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ef90614c68565b60405180910390fd5b6002601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561154e5761154982612c58565b6118fc565b6000600f541180156118de57506000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016115b891906148e2565b60206040518083038186803b1580156115d057600080fd5b505afa1580156115e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160891906142aa565b11806116be57506000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161166c91906148e2565b60206040518083038186803b15801561168457600080fd5b505afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc91906142aa565b115b8061177357506000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161172191906148e2565b60206040518083038186803b15801561173957600080fd5b505afa15801561174d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177191906142aa565b115b8061182857506000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016117d691906148e2565b60206040518083038186803b1580156117ee57600080fd5b505afa158015611802573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182691906142aa565b115b806118dd57506000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161188b91906148e2565b60206040518083038186803b1580156118a357600080fd5b505afa1580156118b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118db91906142aa565b115b5b156118f1576118ec82612d37565b6118fb565b6118fa82611b98565b5b5b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196890614b28565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6119c061284f565b73ffffffffffffffffffffffffffffffffffffffff166119de611ad6565b73ffffffffffffffffffffffffffffffffffffffff1614611a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2b90614bc8565b60405180910390fd5b611a3e60006131ae565b565b611a4861284f565b73ffffffffffffffffffffffffffffffffffffffff16611a66611ad6565b73ffffffffffffffffffffffffffffffffffffffff1614611abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab390614bc8565b60405180910390fd5b80600a9080519060200190611ad2929190613c35565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b606060018054611b1590615072565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4190615072565b8015611b8e5780601f10611b6357610100808354040283529160200191611b8e565b820191906000526020600020905b815481529060010190602001808311611b7157829003601f168201915b5050505050905090565b80601360009054906101000a900460ff1615611be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be090614be8565b60405180910390fd5b600081118015611bfb57506012548111155b611c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3190614a48565b60405180910390fd5b60105481611c486009612910565b611c529190614ea7565b1115611c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8a90614c68565b60405180910390fd5b601154611ca06009612910565b1015611cb557611cb03383613274565b611d10565b81600d54611cc39190614f2e565b341015611d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfc90614a68565b60405180910390fd5b611d0f3383613274565b5b5050565b611d26611d1f61284f565b83836132f6565b5050565b600c8054611d3790615072565b80601f0160208091040260200160405190810160405280929190818152602001828054611d6390615072565b8015611db05780601f10611d8557610100808354040283529160200191611db0565b820191906000526020600020905b815481529060010190602001808311611d9357829003601f168201915b505050505081565b611dc061284f565b73ffffffffffffffffffffffffffffffffffffffff16611dde611ad6565b73ffffffffffffffffffffffffffffffffffffffff1614611e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2b90614bc8565b60405180910390fd5b8060128190555050565b611e4f611e4961284f565b8361291e565b611e8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8590614c88565b60405180910390fd5b611e9a84848484613463565b50505050565b6060611eab826127e3565b611eea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee190614c28565b60405180910390fd5b60001515601360019054906101000a900460ff1615151415611f9857600c8054611f1390615072565b80601f0160208091040260200160405190810160405280929190818152602001828054611f3f90615072565b8015611f8c5780601f10611f6157610100808354040283529160200191611f8c565b820191906000526020600020905b815481529060010190602001808311611f6f57829003601f168201915b50505050509050611ff4565b6000611fa26134bf565b90506000815111611fc25760405180602001604052806000815250611ff0565b80611fcc84613551565b600b604051602001611fe09392919061489c565b6040516020818303038152906040525b9150505b919050565b60105481565b61200761284f565b73ffffffffffffffffffffffffffffffffffffffff16612025611ad6565b73ffffffffffffffffffffffffffffffffffffffff161461207b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207290614bc8565b60405180910390fd5b60005b82518110156120d8576120c583828151811061209d5761209c6151dc565b5b60200260200101518383815181106120b8576120b76151dc565b5b60200260200101516136b2565b80806120d0906150d5565b91505061207e565b505050565b80601360009054906101000a900460ff161561212e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212590614be8565b60405180910390fd5b60008111801561214057506012548111155b61217f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217690614a48565b60405180910390fd5b6010548161218d6009612910565b6121979190614ea7565b11156121d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cf90614c68565b60405180910390fd5b6001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054148061226557506003601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b6122a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229b90614ca8565b60405180910390fd5b6122af336001613274565b6001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122fb9190614f88565b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b61234a61284f565b73ffffffffffffffffffffffffffffffffffffffff16612368611ad6565b73ffffffffffffffffffffffffffffffffffffffff16146123be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b590614bc8565b60405180910390fd5b80601360016101000a81548160ff02191690831515021790555050565b60115481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b81601360009054906101000a900460ff16156124c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bd90614be8565b60405180910390fd5b6000811180156124d857506012548111155b612517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250e90614a48565b60405180910390fd5b601054816125256009612910565b61252f9190614ea7565b1115612570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256790614c68565b60405180910390fd5b61257861284f565b73ffffffffffffffffffffffffffffffffffffffff16612596611ad6565b73ffffffffffffffffffffffffffffffffffffffff16146125ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e390614bc8565b60405180910390fd5b6125f68284613274565b505050565b61260361284f565b73ffffffffffffffffffffffffffffffffffffffff16612621611ad6565b73ffffffffffffffffffffffffffffffffffffffff1614612677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266e90614bc8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126de90614a08565b60405180910390fd5b6126f0816131ae565b50565b6126fb61284f565b73ffffffffffffffffffffffffffffffffffffffff16612719611ad6565b73ffffffffffffffffffffffffffffffffffffffff161461276f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276690614bc8565b60405180910390fd5b8060118190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166128ca8361134b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000612929826127e3565b612968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295f90614ae8565b60405180910390fd5b60006129738361134b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806129e257508373ffffffffffffffffffffffffffffffffffffffff166129ca84610b5f565b73ffffffffffffffffffffffffffffffffffffffff16145b806129f357506129f281856123e1565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612a1c8261134b565b73ffffffffffffffffffffffffffffffffffffffff1614612a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6990614c08565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad990614a88565b60405180910390fd5b612aed838383613829565b612af8600082612857565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b489190614f88565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b9f9190614ea7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6002601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414612cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd1906149a8565b60405180910390fd5b80600e54612ce89190614f2e565b341015612d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2190614a68565b60405180910390fd5b612d343382613274565b50565b6000600f5411612d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7390614ac8565b60405180910390fd5b6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401612dd991906148e2565b60206040518083038186803b158015612df157600080fd5b505afa158015612e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e2991906142aa565b1180612edf57506000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401612e8d91906148e2565b60206040518083038186803b158015612ea557600080fd5b505afa158015612eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612edd91906142aa565b115b80612f9457506000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401612f4291906148e2565b60206040518083038186803b158015612f5a57600080fd5b505afa158015612f6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f9291906142aa565b115b8061304957506000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401612ff791906148e2565b60206040518083038186803b15801561300f57600080fd5b505afa158015613023573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061304791906142aa565b115b806130fe57506000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016130ac91906148e2565b60206040518083038186803b1580156130c457600080fd5b505afa1580156130d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130fc91906142aa565b115b61313d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313490614cc8565b60405180910390fd5b80600e5461314b9190614f2e565b34101561318d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318490614a68565b60405180910390fd5b6131973382613274565b80600f546131a59190614f88565b600f8190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b818110156132f157613289600961382e565b61329c836132976009612910565b613844565b7ff3cea5493d790af0133817606f7350a91d7f154ea52eaa79d179d4d231e501026132c76009612910565b336040516132d6929190614d03565b60405180910390a180806132e9906150d5565b915050613277565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335c90614aa8565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051613456919061496b565b60405180910390a3505050565b61346e8484846129fc565b61347a84848484613862565b6134b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134b0906149e8565b60405180910390fd5b50505050565b6060600a80546134ce90615072565b80601f01602080910402602001604051908101604052809291908181526020018280546134fa90615072565b80156135475780601f1061351c57610100808354040283529160200191613547565b820191906000526020600020905b81548152906001019060200180831161352a57829003601f168201915b5050505050905090565b60606000821415613599576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506136ad565b600082905060005b600082146135cb5780806135b4906150d5565b915050600a826135c49190614efd565b91506135a1565b60008167ffffffffffffffff8111156135e7576135e661520b565b5b6040519080825280601f01601f1916602001820160405280156136195781602001600182028036833780820191505090505b5090505b600085146136a6576001826136329190614f88565b9150600a85613641919061511e565b603061364d9190614ea7565b60f81b818381518110613663576136626151dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561369f9190614efd565b945061361d565b8093505050505b919050565b6136ba61284f565b73ffffffffffffffffffffffffffffffffffffffff166136d8611ad6565b73ffffffffffffffffffffffffffffffffffffffff161461372e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161372590614bc8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561379e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613795906149c8565b60405180910390fd5b600081116137e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137d890614b68565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b505050565b6001816000016000828254019250508190555050565b61385e8282604051806020016040528060008152506139f9565b5050565b60006138838473ffffffffffffffffffffffffffffffffffffffff16613a54565b156139ec578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026138ac61284f565b8786866040518563ffffffff1660e01b81526004016138ce94939291906148fd565b602060405180830381600087803b1580156138e857600080fd5b505af192505050801561391957506040513d601f19601f820116820180604052508101906139169190614207565b60015b61399c573d8060008114613949576040519150601f19603f3d011682016040523d82523d6000602084013e61394e565b606091505b50600081511415613994576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161398b906149e8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506139f1565b600190505b949350505050565b613a038383613a67565b613a106000848484613862565b613a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a46906149e8565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ace90614b88565b60405180910390fd5b613ae0816127e3565b15613b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b1790614a28565b60405180910390fd5b613b2c60008383613829565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613b7c9190614ea7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613c4190615072565b90600052602060002090601f016020900481019282613c635760008555613caa565b82601f10613c7c57805160ff1916838001178555613caa565b82800160010185558215613caa579182015b82811115613ca9578251825591602001919060010190613c8e565b5b509050613cb79190613cbb565b5090565b5b80821115613cd4576000816000905550600101613cbc565b5090565b6000613ceb613ce684614d51565b614d2c565b90508083825260208201905082856020860282011115613d0e57613d0d61523f565b5b60005b85811015613d3e5781613d248882613e3c565b845260208401935060208301925050600181019050613d11565b5050509392505050565b6000613d5b613d5684614d7d565b614d2c565b90508083825260208201905082856020860282011115613d7e57613d7d61523f565b5b60005b85811015613dae5781613d948882613f48565b845260208401935060208301925050600181019050613d81565b5050509392505050565b6000613dcb613dc684614da9565b614d2c565b905082815260208101848484011115613de757613de6615244565b5b613df2848285615030565b509392505050565b6000613e0d613e0884614dda565b614d2c565b905082815260208101848484011115613e2957613e28615244565b5b613e34848285615030565b509392505050565b600081359050613e4b81615859565b92915050565b600082601f830112613e6657613e6561523a565b5b8135613e76848260208601613cd8565b91505092915050565b600082601f830112613e9457613e9361523a565b5b8135613ea4848260208601613d48565b91505092915050565b600081359050613ebc81615870565b92915050565b600081359050613ed181615887565b92915050565b600081519050613ee681615887565b92915050565b600082601f830112613f0157613f0061523a565b5b8135613f11848260208601613db8565b91505092915050565b600082601f830112613f2f57613f2e61523a565b5b8135613f3f848260208601613dfa565b91505092915050565b600081359050613f578161589e565b92915050565b600081519050613f6c8161589e565b92915050565b600060208284031215613f8857613f8761524e565b5b6000613f9684828501613e3c565b91505092915050565b60008060408385031215613fb657613fb561524e565b5b6000613fc485828601613e3c565b9250506020613fd585828601613e3c565b9150509250929050565b600080600060608486031215613ff857613ff761524e565b5b600061400686828701613e3c565b935050602061401786828701613e3c565b925050604061402886828701613f48565b9150509250925092565b6000806000806080858703121561404c5761404b61524e565b5b600061405a87828801613e3c565b945050602061406b87828801613e3c565b935050604061407c87828801613f48565b925050606085013567ffffffffffffffff81111561409d5761409c615249565b5b6140a987828801613eec565b91505092959194509250565b600080604083850312156140cc576140cb61524e565b5b60006140da85828601613e3c565b92505060206140eb85828601613ead565b9150509250929050565b6000806040838503121561410c5761410b61524e565b5b600061411a85828601613e3c565b925050602061412b85828601613f48565b9150509250929050565b6000806040838503121561414c5761414b61524e565b5b600083013567ffffffffffffffff81111561416a57614169615249565b5b61417685828601613e51565b925050602083013567ffffffffffffffff81111561419757614196615249565b5b6141a385828601613e7f565b9150509250929050565b6000602082840312156141c3576141c261524e565b5b60006141d184828501613ead565b91505092915050565b6000602082840312156141f0576141ef61524e565b5b60006141fe84828501613ec2565b91505092915050565b60006020828403121561421d5761421c61524e565b5b600061422b84828501613ed7565b91505092915050565b60006020828403121561424a5761424961524e565b5b600082013567ffffffffffffffff81111561426857614267615249565b5b61427484828501613f1a565b91505092915050565b6000602082840312156142935761429261524e565b5b60006142a184828501613f48565b91505092915050565b6000602082840312156142c0576142bf61524e565b5b60006142ce84828501613f5d565b91505092915050565b600080604083850312156142ee576142ed61524e565b5b60006142fc85828601613f48565b925050602061430d85828601613e3c565b9150509250929050565b6000614323838361487e565b60208301905092915050565b61433881614fbc565b82525050565b600061434982614e30565b6143538185614e5e565b935061435e83614e0b565b8060005b8381101561438f5781516143768882614317565b975061438183614e51565b925050600181019050614362565b5085935050505092915050565b6143a581614fce565b82525050565b60006143b682614e3b565b6143c08185614e6f565b93506143d081856020860161503f565b6143d981615253565b840191505092915050565b60006143ef82614e46565b6143f98185614e8b565b935061440981856020860161503f565b61441281615253565b840191505092915050565b600061442882614e46565b6144328185614e9c565b935061444281856020860161503f565b80840191505092915050565b6000815461445b81615072565b6144658186614e9c565b945060018216600081146144805760018114614491576144c4565b60ff198316865281860193506144c4565b61449a85614e1b565b60005b838110156144bc5781548189015260018201915060208101905061449d565b838801955050505b50505092915050565b60006144da601683614e8b565b91506144e582615264565b602082019050919050565b60006144fd600f83614e8b565b91506145088261528d565b602082019050919050565b6000614520603283614e8b565b915061452b826152b6565b604082019050919050565b6000614543602683614e8b565b915061454e82615305565b604082019050919050565b6000614566601c83614e8b565b915061457182615354565b602082019050919050565b6000614589601483614e8b565b91506145948261537d565b602082019050919050565b60006145ac601883614e8b565b91506145b7826153a6565b602082019050919050565b60006145cf602483614e8b565b91506145da826153cf565b604082019050919050565b60006145f2601983614e8b565b91506145fd8261541e565b602082019050919050565b6000614615601683614e8b565b915061462082615447565b602082019050919050565b6000614638602c83614e8b565b915061464382615470565b604082019050919050565b600061465b603883614e8b565b9150614666826154bf565b604082019050919050565b600061467e602a83614e8b565b91506146898261550e565b604082019050919050565b60006146a1602983614e8b565b91506146ac8261555d565b604082019050919050565b60006146c4600d83614e8b565b91506146cf826155ac565b602082019050919050565b60006146e7602083614e8b565b91506146f2826155d5565b602082019050919050565b600061470a602c83614e8b565b9150614715826155fe565b604082019050919050565b600061472d602083614e8b565b91506147388261564d565b602082019050919050565b6000614750601783614e8b565b915061475b82615676565b602082019050919050565b6000614773602983614e8b565b915061477e8261569f565b604082019050919050565b6000614796602f83614e8b565b91506147a1826156ee565b604082019050919050565b60006147b9602183614e8b565b91506147c48261573d565b604082019050919050565b60006147dc600083614e80565b91506147e78261578c565b600082019050919050565b60006147ff601483614e8b565b915061480a8261578f565b602082019050919050565b6000614822603183614e8b565b915061482d826157b8565b604082019050919050565b6000614845600f83614e8b565b915061485082615807565b602082019050919050565b6000614868600b83614e8b565b915061487382615830565b602082019050919050565b61488781615026565b82525050565b61489681615026565b82525050565b60006148a8828661441d565b91506148b4828561441d565b91506148c0828461444e565b9150819050949350505050565b60006148d8826147cf565b9150819050919050565b60006020820190506148f7600083018461432f565b92915050565b6000608082019050614912600083018761432f565b61491f602083018661432f565b61492c604083018561488d565b818103606083015261493e81846143ab565b905095945050505050565b60006020820190508181036000830152614963818461433e565b905092915050565b6000602082019050614980600083018461439c565b92915050565b600060208201905081810360008301526149a081846143e4565b905092915050565b600060208201905081810360008301526149c1816144cd565b9050919050565b600060208201905081810360008301526149e1816144f0565b9050919050565b60006020820190508181036000830152614a0181614513565b9050919050565b60006020820190508181036000830152614a2181614536565b9050919050565b60006020820190508181036000830152614a4181614559565b9050919050565b60006020820190508181036000830152614a618161457c565b9050919050565b60006020820190508181036000830152614a818161459f565b9050919050565b60006020820190508181036000830152614aa1816145c2565b9050919050565b60006020820190508181036000830152614ac1816145e5565b9050919050565b60006020820190508181036000830152614ae181614608565b9050919050565b60006020820190508181036000830152614b018161462b565b9050919050565b60006020820190508181036000830152614b218161464e565b9050919050565b60006020820190508181036000830152614b4181614671565b9050919050565b60006020820190508181036000830152614b6181614694565b9050919050565b60006020820190508181036000830152614b81816146b7565b9050919050565b60006020820190508181036000830152614ba1816146da565b9050919050565b60006020820190508181036000830152614bc1816146fd565b9050919050565b60006020820190508181036000830152614be181614720565b9050919050565b60006020820190508181036000830152614c0181614743565b9050919050565b60006020820190508181036000830152614c2181614766565b9050919050565b60006020820190508181036000830152614c4181614789565b9050919050565b60006020820190508181036000830152614c61816147ac565b9050919050565b60006020820190508181036000830152614c81816147f2565b9050919050565b60006020820190508181036000830152614ca181614815565b9050919050565b60006020820190508181036000830152614cc181614838565b9050919050565b60006020820190508181036000830152614ce18161485b565b9050919050565b6000602082019050614cfd600083018461488d565b92915050565b6000604082019050614d18600083018561488d565b614d25602083018461432f565b9392505050565b6000614d36614d47565b9050614d4282826150a4565b919050565b6000604051905090565b600067ffffffffffffffff821115614d6c57614d6b61520b565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614d9857614d9761520b565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614dc457614dc361520b565b5b614dcd82615253565b9050602081019050919050565b600067ffffffffffffffff821115614df557614df461520b565b5b614dfe82615253565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614eb282615026565b9150614ebd83615026565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614ef257614ef161514f565b5b828201905092915050565b6000614f0882615026565b9150614f1383615026565b925082614f2357614f2261517e565b5b828204905092915050565b6000614f3982615026565b9150614f4483615026565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f7d57614f7c61514f565b5b828202905092915050565b6000614f9382615026565b9150614f9e83615026565b925082821015614fb157614fb061514f565b5b828203905092915050565b6000614fc782615006565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561505d578082015181840152602081019050615042565b8381111561506c576000848401525b50505050565b6000600282049050600182168061508a57607f821691505b6020821081141561509e5761509d6151ad565b5b50919050565b6150ad82615253565b810181811067ffffffffffffffff821117156150cc576150cb61520b565b5b80604052505050565b60006150e082615026565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151135761511261514f565b5b600182019050919050565b600061512982615026565b915061513483615026565b9250826151445761514361517e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f6e6f742077686974656c697374656420666f72204f4700000000000000000000600082015250565b7f496e76616c696420616464726573730000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f496e73756666696369656e742066756e64732073656e74210000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f506172746e6572206c696d697420657861757374656400000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f496e76616c696420436f756e7400000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f6e6f742077686974656c69737465640000000000000000000000000000000000600082015250565b7f6e6f7420706172746e6572000000000000000000000000000000000000000000600082015250565b61586281614fbc565b811461586d57600080fd5b50565b61587981614fce565b811461588457600080fd5b50565b61589081614fda565b811461589b57600080fd5b50565b6158a781615026565b81146158b257600080fd5b5056fea2646970667358221220ba434ad09239fae7e6fb967e6936c9784044d210b03e2249743d16df2d2ee6a564736f6c63430008060033697066733a2f2f516d52587954694a5475526a656b73554d7663627371684271486d384e36355a77724564646352774553705437652f68696464656e2e6a736f6e

Deployed ByteCode Sourcemap

39676:7861:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24540:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25485:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27044:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40047:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26567:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40009:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46261:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46443:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41363:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27794:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40094:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40323:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46572:137;;;;;;;;;;;;;:::i;:::-;;28204:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44444:616;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45603:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46017:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40288:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39931:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40258:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39898:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25179:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42340:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24909:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6006:103;;;;;;;;;;;;;:::i;:::-;;46155:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5355:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40213:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25654:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41535:330;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27337:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39969:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45881:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28460:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45066:444;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40138:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47325:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41945:296;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45516:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40175:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27563:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42941:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6264:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45683:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24540:305;24642:4;24694:25;24679:40;;;:11;:40;;;;:105;;;;24751:33;24736:48;;;:11;:48;;;;24679:105;:158;;;;24801:36;24825:11;24801:23;:36::i;:::-;24679:158;24659:178;;24540:305;;;:::o;25485:100::-;25539:13;25572:5;25565:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25485:100;:::o;27044:221::-;27120:7;27148:16;27156:7;27148;:16::i;:::-;27140:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27233:15;:24;27249:7;27233:24;;;;;;;;;;;;;;;;;;;;;27226:31;;27044:221;;;:::o;40047:42::-;;;;:::o;26567:411::-;26648:13;26664:23;26679:7;26664:14;:23::i;:::-;26648:39;;26712:5;26706:11;;:2;:11;;;;26698:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26806:5;26790:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26815:37;26832:5;26839:12;:10;:12::i;:::-;26815:16;:37::i;:::-;26790:62;26768:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;26949:21;26958:2;26962:7;26949:8;:21::i;:::-;26637:341;26567:411;;:::o;40009:33::-;;;;:::o;46261:100::-;5586:12;:10;:12::i;:::-;5575:23;;:7;:5;:7::i;:::-;:23;;;5567:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46345:10:::1;46333:9;:22;;;;;;;;;;;;:::i;:::-;;46261:100:::0;:::o;46443:77::-;5586:12;:10;:12::i;:::-;5575:23;;:7;:5;:7::i;:::-;:23;;;5567:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46508:6:::1;46499;;:15;;;;;;;;;;;;;;;;;;46443:77:::0;:::o;41363:89::-;41407:7;41430:16;:6;:14;:16::i;:::-;41423:23;;41363:89;:::o;27794:339::-;27989:41;28008:12;:10;:12::i;:::-;28022:7;27989:18;:41::i;:::-;27981:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28097:28;28107:4;28113:2;28117:7;28097:9;:28::i;:::-;27794:339;;;:::o;40094:39::-;;;;:::o;40323:49::-;;;;;;;;;;;;;;;;;:::o;46572:137::-;5586:12;:10;:12::i;:::-;5575:23;;:7;:5;:7::i;:::-;:23;;;5567:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46617:7:::1;46638;:5;:7::i;:::-;46630:21;;46659;46630:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46616:69;;;46700:2;46692:11;;;::::0;::::1;;46609:100;46572:137::o:0;28204:185::-;28342:39;28359:4;28365:2;28369:7;28342:39;;;;;;;;;;;;:16;:39::i;:::-;28204:185;;;:::o;44444:616::-;44504:16;44528:23;44554:17;44564:6;44554:9;:17::i;:::-;44528:43;;44578:30;44625:15;44611:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44578:63;;44648:22;44673:1;44648:26;;44681:23;44717:309;44742:15;44724;:33;:64;;;;;44779:9;;44761:14;:27;;44724:64;44717:309;;;44799:25;44827:23;44835:14;44827:7;:23::i;:::-;44799:51;;44886:6;44865:27;;:17;:27;;;44861:131;;;44938:14;44905:13;44919:15;44905:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;44965:17;;;;;:::i;:::-;;;;44861:131;45002:16;;;;;:::i;:::-;;;;44790:236;44717:309;;;45041:13;45034:20;;;;;;44444:616;;;:::o;45603:74::-;5586:12;:10;:12::i;:::-;5575:23;;:7;:5;:7::i;:::-;:23;;;5567:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45666:5:::1;45659:4;:12;;;;45603:74:::0;:::o;46017:132::-;5586:12;:10;:12::i;:::-;5575:23;;:7;:5;:7::i;:::-;:23;;;5567:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46125:18:::1;46105:17;:38;;;;;;;;;;;;:::i;:::-;;46017:132:::0;:::o;40288:28::-;;;;;;;;;;;;;:::o;39931:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40258:25::-;;;;;;;;;;;;;:::o;39898:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25179:239::-;25251:7;25271:13;25287:7;:16;25295:7;25287:16;;;;;;;;;;;;;;;;;;;;;25271:32;;25339:1;25322:19;;:5;:19;;;;25314:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25405:5;25398:12;;;25179:239;;;:::o;42340:524::-;42417:13;41128:6;;;;;;;;;;;41127:7;41119:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;41193:1;41177:13;:17;:56;;;;;41215:18;;41198:13;:35;;41177:56;41169:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;41309:9;;41292:13;41273:16;:6;:14;:16::i;:::-;:32;;;;:::i;:::-;:45;;41265:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;42472:1:::1;42442:14;:26;42457:10;42442:26;;;;;;;;;;;;;;;;:31;42439:420;;;42486:25;42497:13;42486:10;:25::i;:::-;42439:420;;;42549:1;42529:17;;:21;:233;;;;;42592:1;42555:12;;;;;;;;;;;:22;;;42578:10;42555:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:38;:77;;;;42631:1;42597:9;;;;;;;;;;;:19;;;42617:10;42597:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:35;42555:77;:116;;;;42670:1;42636:9;;;;;;;;;;;:19;;;42656:10;42636:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:35;42555:116;:165;;;;42719:1;42685:9;;;;;;;;;;;:19;;;42705:10;42685:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:35;42555:165;:205;;;;42759:1;42724:10;;;;;;;;;;;:20;;;42745:10;42724:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;42555:205;42529:233;42525:334;;;42777:30;42793:13;42777:15;:30::i;:::-;42525:334;;;42832:19;42837:13;42832:4;:19::i;:::-;42525:334;42439:420;42340:524:::0;;:::o;24909:208::-;24981:7;25026:1;25009:19;;:5;:19;;;;25001:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25093:9;:16;25103:5;25093:16;;;;;;;;;;;;;;;;25086:23;;24909:208;;;:::o;6006:103::-;5586:12;:10;:12::i;:::-;5575:23;;:7;:5;:7::i;:::-;:23;;;5567:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6071:30:::1;6098:1;6071:18;:30::i;:::-;6006:103::o:0;46155:100::-;5586:12;:10;:12::i;:::-;5575:23;;:7;:5;:7::i;:::-;:23;;;5567:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46239:10:::1;46227:9;:22;;;;;;;;;;;;:::i;:::-;;46155:100:::0;:::o;5355:87::-;5401:7;5428:6;;;;;;;;;;;5421:13;;5355:87;:::o;40213:38::-;;;;:::o;25654:104::-;25710:13;25743:7;25736:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25654:104;:::o;41535:330::-;41602:13;41128:6;;;;;;;;;;;41127:7;41119:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;41193:1;41177:13;:17;:56;;;;;41215:18;;41198:13;:35;;41177:56;41169:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;41309:9;;41292:13;41273:16;:6;:14;:16::i;:::-;:32;;;;:::i;:::-;:45;;41265:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;41646:12:::1;;41627:16;:6;:14;:16::i;:::-;:31;41624:236;;;41672:37;41683:10;41695:13;41672:10;:37::i;:::-;41624:236;;;41762:13;41755:4;;:20;;;;:::i;:::-;41742:9;:33;;41734:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;41815:37;41826:10;41838:13;41815:10;:37::i;:::-;41624:236;41535:330:::0;;:::o;27337:155::-;27432:52;27451:12;:10;:12::i;:::-;27465:8;27475;27432:18;:52::i;:::-;27337:155;;:::o;39969:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45881:130::-;5586:12;:10;:12::i;:::-;5575:23;;:7;:5;:7::i;:::-;:23;;;5567:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45986:19:::1;45965:18;:40;;;;45881:130:::0;:::o;28460:328::-;28635:41;28654:12;:10;:12::i;:::-;28668:7;28635:18;:41::i;:::-;28627:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28741:39;28755:4;28761:2;28765:7;28774:5;28741:13;:39::i;:::-;28460:328;;;;:::o;45066:444::-;45140:13;45170:17;45178:8;45170:7;:17::i;:::-;45162:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;45263:5;45251:17;;:8;;;;;;;;;;;:17;;;45247:64;;;45286:17;45279:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45247:64;45319:28;45350:10;:8;:10::i;:::-;45319:41;;45405:1;45380:14;45374:28;:32;:130;;;;;;;;;;;;;;;;;45442:14;45458:19;:8;:17;:19::i;:::-;45479:9;45425:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45374:130;45367:137;;;45066:444;;;;:::o;40138:32::-;;;;:::o;47325:209::-;5586:12;:10;:12::i;:::-;5575:23;;:7;:5;:7::i;:::-;:23;;;5567:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47438:6:::1;47433:96;47450:6;:13;47448:1;:15;47433:96;;;47481:40;47495:6;47502:1;47495:9;;;;;;;;:::i;:::-;;;;;;;;47506:11;47518:1;47506:14;;;;;;;;:::i;:::-;;;;;;;;47481:13;:40::i;:::-;47465:3;;;;;:::i;:::-;;;;47433:96;;;;47325:209:::0;;:::o;41945:296::-;42021:13;41128:6;;;;;;;;;;;41127:7;41119:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;41193:1;41177:13;:17;:56;;;;;41215:18;;41198:13;:35;;41177:56;41169:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;41309:9;;41292:13;41273:16;:6;:14;:16::i;:::-;:32;;;;:::i;:::-;:45;;41265:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;42081:1:::1;42051:14;:26;42066:10;42051:26;;;;;;;;;;;;;;;;:31;:66;;;;42116:1;42086:14;:26;42101:10;42086:26;;;;;;;;;;;;;;;;:31;42051:66;42043:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;42144:25;42155:10;42167:1;42144:10;:25::i;:::-;42234:1;42205:14;:26;42220:10;42205:26;;;;;;;;;;;;;;;;:30;;;;:::i;:::-;42176:14;:26;42191:10;42176:26;;;;;;;;;;;;;;;:59;;;;41945:296:::0;;:::o;45516:81::-;5586:12;:10;:12::i;:::-;5575:23;;:7;:5;:7::i;:::-;:23;;;5567:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45585:6:::1;45574:8;;:17;;;;;;;;;;;;;;;;;;45516:81:::0;:::o;40175:33::-;;;;:::o;27563:164::-;27660:4;27684:18;:25;27703:5;27684:25;;;;;;;;;;;;;;;:35;27710:8;27684:35;;;;;;;;;;;;;;;;;;;;;;;;;27677:42;;27563:164;;;;:::o;42941:162::-;43029:13;41128:6;;;;;;;;;;;41127:7;41119:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;41193:1;41177:13;:17;:56;;;;;41215:18;;41198:13;:35;;41177:56;41169:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;41309:9;;41292:13;41273:16;:6;:14;:16::i;:::-;:32;;;;:::i;:::-;:45;;41265:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;5586:12:::1;:10;:12::i;:::-;5575:23;;:7;:5;:7::i;:::-;:23;;;5567:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43061:36:::2;43072:9;43083:13;43061:10;:36::i;:::-;42941:162:::0;;;:::o;6264:201::-;5586:12;:10;:12::i;:::-;5575:23;;:7;:5;:7::i;:::-;:23;;;5567:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6373:1:::1;6353:22;;:8;:22;;;;6345:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6429:28;6448:8;6429:18;:28::i;:::-;6264:201:::0;:::o;45683:93::-;5586:12;:10;:12::i;:::-;5575:23;;:7;:5;:7::i;:::-;:23;;;5567:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45762:8:::1;45747:12;:23;;;;45683:93:::0;:::o;17525:157::-;17610:4;17649:25;17634:40;;;:11;:40;;;;17627:47;;17525:157;;;:::o;30298:127::-;30363:4;30415:1;30387:30;;:7;:16;30395:7;30387:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30380:37;;30298:127;;;:::o;4135:98::-;4188:7;4215:10;4208:17;;4135:98;:::o;34280:174::-;34382:2;34355:15;:24;34371:7;34355:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34438:7;34434:2;34400:46;;34409:23;34424:7;34409:14;:23::i;:::-;34400:46;;;;;;;;;;;;34280:174;;:::o;851:114::-;916:7;943;:14;;;936:21;;851:114;;;:::o;30592:348::-;30685:4;30710:16;30718:7;30710;:16::i;:::-;30702:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30786:13;30802:23;30817:7;30802:14;:23::i;:::-;30786:39;;30855:5;30844:16;;:7;:16;;;:51;;;;30888:7;30864:31;;:20;30876:7;30864:11;:20::i;:::-;:31;;;30844:51;:87;;;;30899:32;30916:5;30923:7;30899:16;:32::i;:::-;30844:87;30836:96;;;30592:348;;;;:::o;33584:578::-;33743:4;33716:31;;:23;33731:7;33716:14;:23::i;:::-;:31;;;33708:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33826:1;33812:16;;:2;:16;;;;33804:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33882:39;33903:4;33909:2;33913:7;33882:20;:39::i;:::-;33986:29;34003:1;34007:7;33986:8;:29::i;:::-;34047:1;34028:9;:15;34038:4;34028:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34076:1;34059:9;:13;34069:2;34059:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34107:2;34088:7;:16;34096:7;34088:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34146:7;34142:2;34127:27;;34136:4;34127:27;;;;;;;;;;;;33584:578;;;:::o;43842:260::-;43939:1;43909:14;:26;43924:10;43909:26;;;;;;;;;;;;;;;;:31;43901:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;44010:13;43995:12;;:28;;;;:::i;:::-;43982:9;:41;;43974:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;44059:37;44070:10;44082:13;44059:10;:37::i;:::-;43842:260;:::o;43195:565::-;43287:1;43267:17;;:21;43259:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;43369:1;43332:12;;;;;;;;;;;:22;;;43355:10;43332:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:38;:77;;;;43408:1;43374:9;;;;;;;;;;;:19;;;43394:10;43374:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:35;43332:77;:116;;;;43447:1;43413:9;;;;;;;;;;;:19;;;43433:10;43413:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:35;43332:116;:165;;;;43496:1;43462:9;;;;;;;;;;;:19;;;43482:10;43462:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:35;43332:165;:205;;;;43536:1;43501:10;;;;;;;;;;;:20;;;43522:10;43501:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;43332:205;43323:241;;;;;;;;;;;;:::i;:::-;;;;;;;;;43607:13;43592:12;;:28;;;;:::i;:::-;43579:9;:41;;43571:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;43656:37;43667:10;43679:13;43656:10;:37::i;:::-;43740:13;43720:17;;:33;;;;:::i;:::-;43700:17;:53;;;;43195:565;:::o;6625:191::-;6699:16;6718:6;;;;;;;;;;;6699:25;;6744:8;6735:6;;:17;;;;;;;;;;;;;;;;;;6799:8;6768:40;;6789:8;6768:40;;;;;;;;;;;;6688:128;6625:191;:::o;44181:257::-;44264:9;44259:174;44283:13;44279:1;:17;44259:174;;;44312:18;:6;:16;:18::i;:::-;44339:38;44349:9;44360:16;:6;:14;:16::i;:::-;44339:9;:38::i;:::-;44391:34;44396:16;:6;:14;:16::i;:::-;44414:10;44391:34;;;;;;;:::i;:::-;;;;;;;;44298:3;;;;;:::i;:::-;;;;44259:174;;;;44181:257;;:::o;34596:315::-;34751:8;34742:17;;:5;:17;;;;34734:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;34838:8;34800:18;:25;34819:5;34800:25;;;;;;;;;;;;;;;:35;34826:8;34800:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34884:8;34862:41;;34877:5;34862:41;;;34894:8;34862:41;;;;;;:::i;:::-;;;;;;;;34596:315;;;:::o;29670:::-;29827:28;29837:4;29843:2;29847:7;29827:9;:28::i;:::-;29874:48;29897:4;29903:2;29907:7;29916:5;29874:22;:48::i;:::-;29866:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29670:315;;;;:::o;46715:104::-;46775:13;46804:9;46797:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46715:104;:::o;1754:723::-;1810:13;2040:1;2031:5;:10;2027:53;;;2058:10;;;;;;;;;;;;;;;;;;;;;2027:53;2090:12;2105:5;2090:20;;2121:14;2146:78;2161:1;2153:4;:9;2146:78;;2179:8;;;;;:::i;:::-;;;;2210:2;2202:10;;;;;:::i;:::-;;;2146:78;;;2234:19;2266:6;2256:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2234:39;;2284:154;2300:1;2291:5;:10;2284:154;;2328:1;2318:11;;;;;:::i;:::-;;;2395:2;2387:5;:10;;;;:::i;:::-;2374:2;:24;;;;:::i;:::-;2361:39;;2344:6;2351;2344:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2424:2;2415:11;;;;;:::i;:::-;;;2284:154;;;2462:6;2448:21;;;;;1754:723;;;;:::o;46955:225::-;5586:12;:10;:12::i;:::-;5575:23;;:7;:5;:7::i;:::-;:23;;;5567:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47064:1:::1;47047:19;;:5;:19;;;;47039:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;47114:1;47101:10;:14;47093:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;47164:10;47140:14;:21;47155:5;47140:21;;;;;;;;;;;;;;;:34;;;;46955:225:::0;;:::o;36847:126::-;;;;:::o;973:127::-;1080:1;1062:7;:14;;;:19;;;;;;;;;;;973:127;:::o;31282:110::-;31358:26;31368:2;31372:7;31358:26;;;;;;;;;;;;:9;:26::i;:::-;31282:110;;:::o;35476:799::-;35631:4;35652:15;:2;:13;;;:15::i;:::-;35648:620;;;35704:2;35688:36;;;35725:12;:10;:12::i;:::-;35739:4;35745:7;35754:5;35688:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35684:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35947:1;35930:6;:13;:18;35926:272;;;35973:60;;;;;;;;;;:::i;:::-;;;;;;;;35926:272;36148:6;36142:13;36133:6;36129:2;36125:15;36118:38;35684:529;35821:41;;;35811:51;;;:6;:51;;;;35804:58;;;;;35648:620;36252:4;36245:11;;35476:799;;;;;;;:::o;31619:321::-;31749:18;31755:2;31759:7;31749:5;:18::i;:::-;31800:54;31831:1;31835:2;31839:7;31848:5;31800:22;:54::i;:::-;31778:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31619:321;;;:::o;7588:387::-;7648:4;7856:12;7923:7;7911:20;7903:28;;7966:1;7959:4;:8;7952:15;;;7588:387;;;:::o;32276:382::-;32370:1;32356:16;;:2;:16;;;;32348:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32429:16;32437:7;32429;:16::i;:::-;32428:17;32420:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32491:45;32520:1;32524:2;32528:7;32491:20;:45::i;:::-;32566:1;32549:9;:13;32559:2;32549:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32597:2;32578:7;:16;32586:7;32578:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32642:7;32638:2;32617:33;;32634:1;32617:33;;;;;;;;;;;;32276:382;;:::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:2;;;404:79;;:::i;:::-;350:2;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;;;;;;;:::o;769:722::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:2;;;1149:79;;:::i;:::-;1095:2;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:2;;;1770:79;;:::i;:::-;1739:2;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:2;;;2188:79;;:::i;:::-;2157:2;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2383:87;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:2;;2621:79;;:::i;:::-;2580:2;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;;;;;:::o;2886:370::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:2;;3014:79;;:::i;:::-;2973:2;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3311:84;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3452:86;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3606:79;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:2;;3816:79;;:::i;:::-;3775:2;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:2;;4175:79;;:::i;:::-;4134:2;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4460:87;;;;:::o;4553:143::-;4610:5;4641:6;4635:13;4626:22;;4657:33;4684:5;4657:33;:::i;:::-;4616:80;;;;:::o;4702:329::-;4761:6;4810:2;4798:9;4789:7;4785:23;4781:32;4778:2;;;4816:79;;:::i;:::-;4778:2;4936:1;4961:53;5006:7;4997:6;4986:9;4982:22;4961:53;:::i;:::-;4951:63;;4907:117;4768:263;;;;:::o;5037:474::-;5105:6;5113;5162:2;5150:9;5141:7;5137:23;5133:32;5130:2;;;5168:79;;:::i;:::-;5130:2;5288:1;5313:53;5358:7;5349:6;5338:9;5334:22;5313:53;:::i;:::-;5303:63;;5259:117;5415:2;5441:53;5486:7;5477:6;5466:9;5462:22;5441:53;:::i;:::-;5431:63;;5386:118;5120:391;;;;;:::o;5517:619::-;5594:6;5602;5610;5659:2;5647:9;5638:7;5634:23;5630:32;5627:2;;;5665:79;;:::i;:::-;5627:2;5785:1;5810:53;5855:7;5846:6;5835:9;5831:22;5810:53;:::i;:::-;5800:63;;5756:117;5912:2;5938:53;5983:7;5974:6;5963:9;5959:22;5938:53;:::i;:::-;5928:63;;5883:118;6040:2;6066:53;6111:7;6102:6;6091:9;6087:22;6066:53;:::i;:::-;6056:63;;6011:118;5617:519;;;;;:::o;6142:943::-;6237:6;6245;6253;6261;6310:3;6298:9;6289:7;6285:23;6281:33;6278:2;;;6317:79;;:::i;:::-;6278:2;6437:1;6462:53;6507:7;6498:6;6487:9;6483:22;6462:53;:::i;:::-;6452:63;;6408:117;6564:2;6590:53;6635:7;6626:6;6615:9;6611:22;6590:53;:::i;:::-;6580:63;;6535:118;6692:2;6718:53;6763:7;6754:6;6743:9;6739:22;6718:53;:::i;:::-;6708:63;;6663:118;6848:2;6837:9;6833:18;6820:32;6879:18;6871:6;6868:30;6865:2;;;6901:79;;:::i;:::-;6865:2;7006:62;7060:7;7051:6;7040:9;7036:22;7006:62;:::i;:::-;6996:72;;6791:287;6268:817;;;;;;;:::o;7091:468::-;7156:6;7164;7213:2;7201:9;7192:7;7188:23;7184:32;7181:2;;;7219:79;;:::i;:::-;7181:2;7339:1;7364:53;7409:7;7400:6;7389:9;7385:22;7364:53;:::i;:::-;7354:63;;7310:117;7466:2;7492:50;7534:7;7525:6;7514:9;7510:22;7492:50;:::i;:::-;7482:60;;7437:115;7171:388;;;;;:::o;7565:474::-;7633:6;7641;7690:2;7678:9;7669:7;7665:23;7661:32;7658:2;;;7696:79;;:::i;:::-;7658:2;7816:1;7841:53;7886:7;7877:6;7866:9;7862:22;7841:53;:::i;:::-;7831:63;;7787:117;7943:2;7969:53;8014:7;8005:6;7994:9;7990:22;7969:53;:::i;:::-;7959:63;;7914:118;7648:391;;;;;:::o;8045:894::-;8163:6;8171;8220:2;8208:9;8199:7;8195:23;8191:32;8188:2;;;8226:79;;:::i;:::-;8188:2;8374:1;8363:9;8359:17;8346:31;8404:18;8396:6;8393:30;8390:2;;;8426:79;;:::i;:::-;8390:2;8531:78;8601:7;8592:6;8581:9;8577:22;8531:78;:::i;:::-;8521:88;;8317:302;8686:2;8675:9;8671:18;8658:32;8717:18;8709:6;8706:30;8703:2;;;8739:79;;:::i;:::-;8703:2;8844:78;8914:7;8905:6;8894:9;8890:22;8844:78;:::i;:::-;8834:88;;8629:303;8178:761;;;;;:::o;8945:323::-;9001:6;9050:2;9038:9;9029:7;9025:23;9021:32;9018:2;;;9056:79;;:::i;:::-;9018:2;9176:1;9201:50;9243:7;9234:6;9223:9;9219:22;9201:50;:::i;:::-;9191:60;;9147:114;9008:260;;;;:::o;9274:327::-;9332:6;9381:2;9369:9;9360:7;9356:23;9352:32;9349:2;;;9387:79;;:::i;:::-;9349:2;9507:1;9532:52;9576:7;9567:6;9556:9;9552:22;9532:52;:::i;:::-;9522:62;;9478:116;9339:262;;;;:::o;9607:349::-;9676:6;9725:2;9713:9;9704:7;9700:23;9696:32;9693:2;;;9731:79;;:::i;:::-;9693:2;9851:1;9876:63;9931:7;9922:6;9911:9;9907:22;9876:63;:::i;:::-;9866:73;;9822:127;9683:273;;;;:::o;9962:509::-;10031:6;10080:2;10068:9;10059:7;10055:23;10051:32;10048:2;;;10086:79;;:::i;:::-;10048:2;10234:1;10223:9;10219:17;10206:31;10264:18;10256:6;10253:30;10250:2;;;10286:79;;:::i;:::-;10250:2;10391:63;10446:7;10437:6;10426:9;10422:22;10391:63;:::i;:::-;10381:73;;10177:287;10038:433;;;;:::o;10477:329::-;10536:6;10585:2;10573:9;10564:7;10560:23;10556:32;10553:2;;;10591:79;;:::i;:::-;10553:2;10711:1;10736:53;10781:7;10772:6;10761:9;10757:22;10736:53;:::i;:::-;10726:63;;10682:117;10543:263;;;;:::o;10812:351::-;10882:6;10931:2;10919:9;10910:7;10906:23;10902:32;10899:2;;;10937:79;;:::i;:::-;10899:2;11057:1;11082:64;11138:7;11129:6;11118:9;11114:22;11082:64;:::i;:::-;11072:74;;11028:128;10889:274;;;;:::o;11169:474::-;11237:6;11245;11294:2;11282:9;11273:7;11269:23;11265:32;11262:2;;;11300:79;;:::i;:::-;11262:2;11420:1;11445:53;11490:7;11481:6;11470:9;11466:22;11445:53;:::i;:::-;11435:63;;11391:117;11547:2;11573:53;11618:7;11609:6;11598:9;11594:22;11573:53;:::i;:::-;11563:63;;11518:118;11252:391;;;;;:::o;11649:179::-;11718:10;11739:46;11781:3;11773:6;11739:46;:::i;:::-;11817:4;11812:3;11808:14;11794:28;;11729:99;;;;:::o;11834:118::-;11921:24;11939:5;11921:24;:::i;:::-;11916:3;11909:37;11899:53;;:::o;11988:732::-;12107:3;12136:54;12184:5;12136:54;:::i;:::-;12206:86;12285:6;12280:3;12206:86;:::i;:::-;12199:93;;12316:56;12366:5;12316:56;:::i;:::-;12395:7;12426:1;12411:284;12436:6;12433:1;12430:13;12411:284;;;12512:6;12506:13;12539:63;12598:3;12583:13;12539:63;:::i;:::-;12532:70;;12625:60;12678:6;12625:60;:::i;:::-;12615:70;;12471:224;12458:1;12455;12451:9;12446:14;;12411:284;;;12415:14;12711:3;12704:10;;12112:608;;;;;;;:::o;12726:109::-;12807:21;12822:5;12807:21;:::i;:::-;12802:3;12795:34;12785:50;;:::o;12841:360::-;12927:3;12955:38;12987:5;12955:38;:::i;:::-;13009:70;13072:6;13067:3;13009:70;:::i;:::-;13002:77;;13088:52;13133:6;13128:3;13121:4;13114:5;13110:16;13088:52;:::i;:::-;13165:29;13187:6;13165:29;:::i;:::-;13160:3;13156:39;13149:46;;12931:270;;;;;:::o;13207:364::-;13295:3;13323:39;13356:5;13323:39;:::i;:::-;13378:71;13442:6;13437:3;13378:71;:::i;:::-;13371:78;;13458:52;13503:6;13498:3;13491:4;13484:5;13480:16;13458:52;:::i;:::-;13535:29;13557:6;13535:29;:::i;:::-;13530:3;13526:39;13519:46;;13299:272;;;;;:::o;13577:377::-;13683:3;13711:39;13744:5;13711:39;:::i;:::-;13766:89;13848:6;13843:3;13766:89;:::i;:::-;13759:96;;13864:52;13909:6;13904:3;13897:4;13890:5;13886:16;13864:52;:::i;:::-;13941:6;13936:3;13932:16;13925:23;;13687:267;;;;;:::o;13984:845::-;14087:3;14124:5;14118:12;14153:36;14179:9;14153:36;:::i;:::-;14205:89;14287:6;14282:3;14205:89;:::i;:::-;14198:96;;14325:1;14314:9;14310:17;14341:1;14336:137;;;;14487:1;14482:341;;;;14303:520;;14336:137;14420:4;14416:9;14405;14401:25;14396:3;14389:38;14456:6;14451:3;14447:16;14440:23;;14336:137;;14482:341;14549:38;14581:5;14549:38;:::i;:::-;14609:1;14623:154;14637:6;14634:1;14631:13;14623:154;;;14711:7;14705:14;14701:1;14696:3;14692:11;14685:35;14761:1;14752:7;14748:15;14737:26;;14659:4;14656:1;14652:12;14647:17;;14623:154;;;14806:6;14801:3;14797:16;14790:23;;14489:334;;14303:520;;14091:738;;;;;;:::o;14835:366::-;14977:3;14998:67;15062:2;15057:3;14998:67;:::i;:::-;14991:74;;15074:93;15163:3;15074:93;:::i;:::-;15192:2;15187:3;15183:12;15176:19;;14981:220;;;:::o;15207:366::-;15349:3;15370:67;15434:2;15429:3;15370:67;:::i;:::-;15363:74;;15446:93;15535:3;15446:93;:::i;:::-;15564:2;15559:3;15555:12;15548:19;;15353:220;;;:::o;15579:366::-;15721:3;15742:67;15806:2;15801:3;15742:67;:::i;:::-;15735:74;;15818:93;15907:3;15818:93;:::i;:::-;15936:2;15931:3;15927:12;15920:19;;15725:220;;;:::o;15951:366::-;16093:3;16114:67;16178:2;16173:3;16114:67;:::i;:::-;16107:74;;16190:93;16279:3;16190:93;:::i;:::-;16308:2;16303:3;16299:12;16292:19;;16097:220;;;:::o;16323:366::-;16465:3;16486:67;16550:2;16545:3;16486:67;:::i;:::-;16479:74;;16562:93;16651:3;16562:93;:::i;:::-;16680:2;16675:3;16671:12;16664:19;;16469:220;;;:::o;16695:366::-;16837:3;16858:67;16922:2;16917:3;16858:67;:::i;:::-;16851:74;;16934:93;17023:3;16934:93;:::i;:::-;17052:2;17047:3;17043:12;17036:19;;16841:220;;;:::o;17067:366::-;17209:3;17230:67;17294:2;17289:3;17230:67;:::i;:::-;17223:74;;17306:93;17395:3;17306:93;:::i;:::-;17424:2;17419:3;17415:12;17408:19;;17213:220;;;:::o;17439:366::-;17581:3;17602:67;17666:2;17661:3;17602:67;:::i;:::-;17595:74;;17678:93;17767:3;17678:93;:::i;:::-;17796:2;17791:3;17787:12;17780:19;;17585:220;;;:::o;17811:366::-;17953:3;17974:67;18038:2;18033:3;17974:67;:::i;:::-;17967:74;;18050:93;18139:3;18050:93;:::i;:::-;18168:2;18163:3;18159:12;18152:19;;17957:220;;;:::o;18183:366::-;18325:3;18346:67;18410:2;18405:3;18346:67;:::i;:::-;18339:74;;18422:93;18511:3;18422:93;:::i;:::-;18540:2;18535:3;18531:12;18524:19;;18329:220;;;:::o;18555:366::-;18697:3;18718:67;18782:2;18777:3;18718:67;:::i;:::-;18711:74;;18794:93;18883:3;18794:93;:::i;:::-;18912:2;18907:3;18903:12;18896:19;;18701:220;;;:::o;18927:366::-;19069:3;19090:67;19154:2;19149:3;19090:67;:::i;:::-;19083:74;;19166:93;19255:3;19166:93;:::i;:::-;19284:2;19279:3;19275:12;19268:19;;19073:220;;;:::o;19299:366::-;19441:3;19462:67;19526:2;19521:3;19462:67;:::i;:::-;19455:74;;19538:93;19627:3;19538:93;:::i;:::-;19656:2;19651:3;19647:12;19640:19;;19445:220;;;:::o;19671:366::-;19813:3;19834:67;19898:2;19893:3;19834:67;:::i;:::-;19827:74;;19910:93;19999:3;19910:93;:::i;:::-;20028:2;20023:3;20019:12;20012:19;;19817:220;;;:::o;20043:366::-;20185:3;20206:67;20270:2;20265:3;20206:67;:::i;:::-;20199:74;;20282:93;20371:3;20282:93;:::i;:::-;20400:2;20395:3;20391:12;20384:19;;20189:220;;;:::o;20415:366::-;20557:3;20578:67;20642:2;20637:3;20578:67;:::i;:::-;20571:74;;20654:93;20743:3;20654:93;:::i;:::-;20772:2;20767:3;20763:12;20756:19;;20561:220;;;:::o;20787:366::-;20929:3;20950:67;21014:2;21009:3;20950:67;:::i;:::-;20943:74;;21026:93;21115:3;21026:93;:::i;:::-;21144:2;21139:3;21135:12;21128:19;;20933:220;;;:::o;21159:366::-;21301:3;21322:67;21386:2;21381:3;21322:67;:::i;:::-;21315:74;;21398:93;21487:3;21398:93;:::i;:::-;21516:2;21511:3;21507:12;21500:19;;21305:220;;;:::o;21531:366::-;21673:3;21694:67;21758:2;21753:3;21694:67;:::i;:::-;21687:74;;21770:93;21859:3;21770:93;:::i;:::-;21888:2;21883:3;21879:12;21872:19;;21677:220;;;:::o;21903:366::-;22045:3;22066:67;22130:2;22125:3;22066:67;:::i;:::-;22059:74;;22142:93;22231:3;22142:93;:::i;:::-;22260:2;22255:3;22251:12;22244:19;;22049:220;;;:::o;22275:366::-;22417:3;22438:67;22502:2;22497:3;22438:67;:::i;:::-;22431:74;;22514:93;22603:3;22514:93;:::i;:::-;22632:2;22627:3;22623:12;22616:19;;22421:220;;;:::o;22647:366::-;22789:3;22810:67;22874:2;22869:3;22810:67;:::i;:::-;22803:74;;22886:93;22975:3;22886:93;:::i;:::-;23004:2;22999:3;22995:12;22988:19;;22793:220;;;:::o;23019:398::-;23178:3;23199:83;23280:1;23275:3;23199:83;:::i;:::-;23192:90;;23291:93;23380:3;23291:93;:::i;:::-;23409:1;23404:3;23400:11;23393:18;;23182:235;;;:::o;23423:366::-;23565:3;23586:67;23650:2;23645:3;23586:67;:::i;:::-;23579:74;;23662:93;23751:3;23662:93;:::i;:::-;23780:2;23775:3;23771:12;23764:19;;23569:220;;;:::o;23795:366::-;23937:3;23958:67;24022:2;24017:3;23958:67;:::i;:::-;23951:74;;24034:93;24123:3;24034:93;:::i;:::-;24152:2;24147:3;24143:12;24136:19;;23941:220;;;:::o;24167:366::-;24309:3;24330:67;24394:2;24389:3;24330:67;:::i;:::-;24323:74;;24406:93;24495:3;24406:93;:::i;:::-;24524:2;24519:3;24515:12;24508:19;;24313:220;;;:::o;24539:366::-;24681:3;24702:67;24766:2;24761:3;24702:67;:::i;:::-;24695:74;;24778:93;24867:3;24778:93;:::i;:::-;24896:2;24891:3;24887:12;24880:19;;24685:220;;;:::o;24911:108::-;24988:24;25006:5;24988:24;:::i;:::-;24983:3;24976:37;24966:53;;:::o;25025:118::-;25112:24;25130:5;25112:24;:::i;:::-;25107:3;25100:37;25090:53;;:::o;25149:589::-;25374:3;25396:95;25487:3;25478:6;25396:95;:::i;:::-;25389:102;;25508:95;25599:3;25590:6;25508:95;:::i;:::-;25501:102;;25620:92;25708:3;25699:6;25620:92;:::i;:::-;25613:99;;25729:3;25722:10;;25378:360;;;;;;:::o;25744:379::-;25928:3;25950:147;26093:3;25950:147;:::i;:::-;25943:154;;26114:3;26107:10;;25932:191;;;:::o;26129:222::-;26222:4;26260:2;26249:9;26245:18;26237:26;;26273:71;26341:1;26330:9;26326:17;26317:6;26273:71;:::i;:::-;26227:124;;;;:::o;26357:640::-;26552:4;26590:3;26579:9;26575:19;26567:27;;26604:71;26672:1;26661:9;26657:17;26648:6;26604:71;:::i;:::-;26685:72;26753:2;26742:9;26738:18;26729:6;26685:72;:::i;:::-;26767;26835:2;26824:9;26820:18;26811:6;26767:72;:::i;:::-;26886:9;26880:4;26876:20;26871:2;26860:9;26856:18;26849:48;26914:76;26985:4;26976:6;26914:76;:::i;:::-;26906:84;;26557:440;;;;;;;:::o;27003:373::-;27146:4;27184:2;27173:9;27169:18;27161:26;;27233:9;27227:4;27223:20;27219:1;27208:9;27204:17;27197:47;27261:108;27364:4;27355:6;27261:108;:::i;:::-;27253:116;;27151:225;;;;:::o;27382:210::-;27469:4;27507:2;27496:9;27492:18;27484:26;;27520:65;27582:1;27571:9;27567:17;27558:6;27520:65;:::i;:::-;27474:118;;;;:::o;27598:313::-;27711:4;27749:2;27738:9;27734:18;27726:26;;27798:9;27792:4;27788:20;27784:1;27773:9;27769:17;27762:47;27826:78;27899:4;27890:6;27826:78;:::i;:::-;27818:86;;27716:195;;;;:::o;27917:419::-;28083:4;28121:2;28110:9;28106:18;28098:26;;28170:9;28164:4;28160:20;28156:1;28145:9;28141:17;28134:47;28198:131;28324:4;28198:131;:::i;:::-;28190:139;;28088:248;;;:::o;28342:419::-;28508:4;28546:2;28535:9;28531:18;28523:26;;28595:9;28589:4;28585:20;28581:1;28570:9;28566:17;28559:47;28623:131;28749:4;28623:131;:::i;:::-;28615:139;;28513:248;;;:::o;28767:419::-;28933:4;28971:2;28960:9;28956:18;28948:26;;29020:9;29014:4;29010:20;29006:1;28995:9;28991:17;28984:47;29048:131;29174:4;29048:131;:::i;:::-;29040:139;;28938:248;;;:::o;29192:419::-;29358:4;29396:2;29385:9;29381:18;29373:26;;29445:9;29439:4;29435:20;29431:1;29420:9;29416:17;29409:47;29473:131;29599:4;29473:131;:::i;:::-;29465:139;;29363:248;;;:::o;29617:419::-;29783:4;29821:2;29810:9;29806:18;29798:26;;29870:9;29864:4;29860:20;29856:1;29845:9;29841:17;29834:47;29898:131;30024:4;29898:131;:::i;:::-;29890:139;;29788:248;;;:::o;30042:419::-;30208:4;30246:2;30235:9;30231:18;30223:26;;30295:9;30289:4;30285:20;30281:1;30270:9;30266:17;30259:47;30323:131;30449:4;30323:131;:::i;:::-;30315:139;;30213:248;;;:::o;30467:419::-;30633:4;30671:2;30660:9;30656:18;30648:26;;30720:9;30714:4;30710:20;30706:1;30695:9;30691:17;30684:47;30748:131;30874:4;30748:131;:::i;:::-;30740:139;;30638:248;;;:::o;30892:419::-;31058:4;31096:2;31085:9;31081:18;31073:26;;31145:9;31139:4;31135:20;31131:1;31120:9;31116:17;31109:47;31173:131;31299:4;31173:131;:::i;:::-;31165:139;;31063:248;;;:::o;31317:419::-;31483:4;31521:2;31510:9;31506:18;31498:26;;31570:9;31564:4;31560:20;31556:1;31545:9;31541:17;31534:47;31598:131;31724:4;31598:131;:::i;:::-;31590:139;;31488:248;;;:::o;31742:419::-;31908:4;31946:2;31935:9;31931:18;31923:26;;31995:9;31989:4;31985:20;31981:1;31970:9;31966:17;31959:47;32023:131;32149:4;32023:131;:::i;:::-;32015:139;;31913:248;;;:::o;32167:419::-;32333:4;32371:2;32360:9;32356:18;32348:26;;32420:9;32414:4;32410:20;32406:1;32395:9;32391:17;32384:47;32448:131;32574:4;32448:131;:::i;:::-;32440:139;;32338:248;;;:::o;32592:419::-;32758:4;32796:2;32785:9;32781:18;32773:26;;32845:9;32839:4;32835:20;32831:1;32820:9;32816:17;32809:47;32873:131;32999:4;32873:131;:::i;:::-;32865:139;;32763:248;;;:::o;33017:419::-;33183:4;33221:2;33210:9;33206:18;33198:26;;33270:9;33264:4;33260:20;33256:1;33245:9;33241:17;33234:47;33298:131;33424:4;33298:131;:::i;:::-;33290:139;;33188:248;;;:::o;33442:419::-;33608:4;33646:2;33635:9;33631:18;33623:26;;33695:9;33689:4;33685:20;33681:1;33670:9;33666:17;33659:47;33723:131;33849:4;33723:131;:::i;:::-;33715:139;;33613:248;;;:::o;33867:419::-;34033:4;34071:2;34060:9;34056:18;34048:26;;34120:9;34114:4;34110:20;34106:1;34095:9;34091:17;34084:47;34148:131;34274:4;34148:131;:::i;:::-;34140:139;;34038:248;;;:::o;34292:419::-;34458:4;34496:2;34485:9;34481:18;34473:26;;34545:9;34539:4;34535:20;34531:1;34520:9;34516:17;34509:47;34573:131;34699:4;34573:131;:::i;:::-;34565:139;;34463:248;;;:::o;34717:419::-;34883:4;34921:2;34910:9;34906:18;34898:26;;34970:9;34964:4;34960:20;34956:1;34945:9;34941:17;34934:47;34998:131;35124:4;34998:131;:::i;:::-;34990:139;;34888:248;;;:::o;35142:419::-;35308:4;35346:2;35335:9;35331:18;35323:26;;35395:9;35389:4;35385:20;35381:1;35370:9;35366:17;35359:47;35423:131;35549:4;35423:131;:::i;:::-;35415:139;;35313:248;;;:::o;35567:419::-;35733:4;35771:2;35760:9;35756:18;35748:26;;35820:9;35814:4;35810:20;35806:1;35795:9;35791:17;35784:47;35848:131;35974:4;35848:131;:::i;:::-;35840:139;;35738:248;;;:::o;35992:419::-;36158:4;36196:2;36185:9;36181:18;36173:26;;36245:9;36239:4;36235:20;36231:1;36220:9;36216:17;36209:47;36273:131;36399:4;36273:131;:::i;:::-;36265:139;;36163:248;;;:::o;36417:419::-;36583:4;36621:2;36610:9;36606:18;36598:26;;36670:9;36664:4;36660:20;36656:1;36645:9;36641:17;36634:47;36698:131;36824:4;36698:131;:::i;:::-;36690:139;;36588:248;;;:::o;36842:419::-;37008:4;37046:2;37035:9;37031:18;37023:26;;37095:9;37089:4;37085:20;37081:1;37070:9;37066:17;37059:47;37123:131;37249:4;37123:131;:::i;:::-;37115:139;;37013:248;;;:::o;37267:419::-;37433:4;37471:2;37460:9;37456:18;37448:26;;37520:9;37514:4;37510:20;37506:1;37495:9;37491:17;37484:47;37548:131;37674:4;37548:131;:::i;:::-;37540:139;;37438:248;;;:::o;37692:419::-;37858:4;37896:2;37885:9;37881:18;37873:26;;37945:9;37939:4;37935:20;37931:1;37920:9;37916:17;37909:47;37973:131;38099:4;37973:131;:::i;:::-;37965:139;;37863:248;;;:::o;38117:419::-;38283:4;38321:2;38310:9;38306:18;38298:26;;38370:9;38364:4;38360:20;38356:1;38345:9;38341:17;38334:47;38398:131;38524:4;38398:131;:::i;:::-;38390:139;;38288:248;;;:::o;38542:419::-;38708:4;38746:2;38735:9;38731:18;38723:26;;38795:9;38789:4;38785:20;38781:1;38770:9;38766:17;38759:47;38823:131;38949:4;38823:131;:::i;:::-;38815:139;;38713:248;;;:::o;38967:222::-;39060:4;39098:2;39087:9;39083:18;39075:26;;39111:71;39179:1;39168:9;39164:17;39155:6;39111:71;:::i;:::-;39065:124;;;;:::o;39195:332::-;39316:4;39354:2;39343:9;39339:18;39331:26;;39367:71;39435:1;39424:9;39420:17;39411:6;39367:71;:::i;:::-;39448:72;39516:2;39505:9;39501:18;39492:6;39448:72;:::i;:::-;39321:206;;;;;:::o;39533:129::-;39567:6;39594:20;;:::i;:::-;39584:30;;39623:33;39651:4;39643:6;39623:33;:::i;:::-;39574:88;;;:::o;39668:75::-;39701:6;39734:2;39728:9;39718:19;;39708:35;:::o;39749:311::-;39826:4;39916:18;39908:6;39905:30;39902:2;;;39938:18;;:::i;:::-;39902:2;39988:4;39980:6;39976:17;39968:25;;40048:4;40042;40038:15;40030:23;;39831:229;;;:::o;40066:311::-;40143:4;40233:18;40225:6;40222:30;40219:2;;;40255:18;;:::i;:::-;40219:2;40305:4;40297:6;40293:17;40285:25;;40365:4;40359;40355:15;40347:23;;40148:229;;;:::o;40383:307::-;40444:4;40534:18;40526:6;40523:30;40520:2;;;40556:18;;:::i;:::-;40520:2;40594:29;40616:6;40594:29;:::i;:::-;40586:37;;40678:4;40672;40668:15;40660:23;;40449:241;;;:::o;40696:308::-;40758:4;40848:18;40840:6;40837:30;40834:2;;;40870:18;;:::i;:::-;40834:2;40908:29;40930:6;40908:29;:::i;:::-;40900:37;;40992:4;40986;40982:15;40974:23;;40763:241;;;:::o;41010:132::-;41077:4;41100:3;41092:11;;41130:4;41125:3;41121:14;41113:22;;41082:60;;;:::o;41148:141::-;41197:4;41220:3;41212:11;;41243:3;41240:1;41233:14;41277:4;41274:1;41264:18;41256:26;;41202:87;;;:::o;41295:114::-;41362:6;41396:5;41390:12;41380:22;;41369:40;;;:::o;41415:98::-;41466:6;41500:5;41494:12;41484:22;;41473:40;;;:::o;41519:99::-;41571:6;41605:5;41599:12;41589:22;;41578:40;;;:::o;41624:113::-;41694:4;41726;41721:3;41717:14;41709:22;;41699:38;;;:::o;41743:184::-;41842:11;41876:6;41871:3;41864:19;41916:4;41911:3;41907:14;41892:29;;41854:73;;;;:::o;41933:168::-;42016:11;42050:6;42045:3;42038:19;42090:4;42085:3;42081:14;42066:29;;42028:73;;;;:::o;42107:147::-;42208:11;42245:3;42230:18;;42220:34;;;;:::o;42260:169::-;42344:11;42378:6;42373:3;42366:19;42418:4;42413:3;42409:14;42394:29;;42356:73;;;;:::o;42435:148::-;42537:11;42574:3;42559:18;;42549:34;;;;:::o;42589:305::-;42629:3;42648:20;42666:1;42648:20;:::i;:::-;42643:25;;42682:20;42700:1;42682:20;:::i;:::-;42677:25;;42836:1;42768:66;42764:74;42761:1;42758:81;42755:2;;;42842:18;;:::i;:::-;42755:2;42886:1;42883;42879:9;42872:16;;42633:261;;;;:::o;42900:185::-;42940:1;42957:20;42975:1;42957:20;:::i;:::-;42952:25;;42991:20;43009:1;42991:20;:::i;:::-;42986:25;;43030:1;43020:2;;43035:18;;:::i;:::-;43020:2;43077:1;43074;43070:9;43065:14;;42942:143;;;;:::o;43091:348::-;43131:7;43154:20;43172:1;43154:20;:::i;:::-;43149:25;;43188:20;43206:1;43188:20;:::i;:::-;43183:25;;43376:1;43308:66;43304:74;43301:1;43298:81;43293:1;43286:9;43279:17;43275:105;43272:2;;;43383:18;;:::i;:::-;43272:2;43431:1;43428;43424:9;43413:20;;43139:300;;;;:::o;43445:191::-;43485:4;43505:20;43523:1;43505:20;:::i;:::-;43500:25;;43539:20;43557:1;43539:20;:::i;:::-;43534:25;;43578:1;43575;43572:8;43569:2;;;43583:18;;:::i;:::-;43569:2;43628:1;43625;43621:9;43613:17;;43490:146;;;;:::o;43642:96::-;43679:7;43708:24;43726:5;43708:24;:::i;:::-;43697:35;;43687:51;;;:::o;43744:90::-;43778:7;43821:5;43814:13;43807:21;43796:32;;43786:48;;;:::o;43840:149::-;43876:7;43916:66;43909:5;43905:78;43894:89;;43884:105;;;:::o;43995:126::-;44032:7;44072:42;44065:5;44061:54;44050:65;;44040:81;;;:::o;44127:77::-;44164:7;44193:5;44182:16;;44172:32;;;:::o;44210:154::-;44294:6;44289:3;44284;44271:30;44356:1;44347:6;44342:3;44338:16;44331:27;44261:103;;;:::o;44370:307::-;44438:1;44448:113;44462:6;44459:1;44456:13;44448:113;;;44547:1;44542:3;44538:11;44532:18;44528:1;44523:3;44519:11;44512:39;44484:2;44481:1;44477:10;44472:15;;44448:113;;;44579:6;44576:1;44573:13;44570:2;;;44659:1;44650:6;44645:3;44641:16;44634:27;44570:2;44419:258;;;;:::o;44683:320::-;44727:6;44764:1;44758:4;44754:12;44744:22;;44811:1;44805:4;44801:12;44832:18;44822:2;;44888:4;44880:6;44876:17;44866:27;;44822:2;44950;44942:6;44939:14;44919:18;44916:38;44913:2;;;44969:18;;:::i;:::-;44913:2;44734:269;;;;:::o;45009:281::-;45092:27;45114:4;45092:27;:::i;:::-;45084:6;45080:40;45222:6;45210:10;45207:22;45186:18;45174:10;45171:34;45168:62;45165:2;;;45233:18;;:::i;:::-;45165:2;45273:10;45269:2;45262:22;45052:238;;;:::o;45296:233::-;45335:3;45358:24;45376:5;45358:24;:::i;:::-;45349:33;;45404:66;45397:5;45394:77;45391:2;;;45474:18;;:::i;:::-;45391:2;45521:1;45514:5;45510:13;45503:20;;45339:190;;;:::o;45535:176::-;45567:1;45584:20;45602:1;45584:20;:::i;:::-;45579:25;;45618:20;45636:1;45618:20;:::i;:::-;45613:25;;45657:1;45647:2;;45662:18;;:::i;:::-;45647:2;45703:1;45700;45696:9;45691:14;;45569:142;;;;:::o;45717:180::-;45765:77;45762:1;45755:88;45862:4;45859:1;45852:15;45886:4;45883:1;45876:15;45903:180;45951:77;45948:1;45941:88;46048:4;46045:1;46038:15;46072:4;46069:1;46062:15;46089:180;46137:77;46134:1;46127:88;46234:4;46231:1;46224:15;46258:4;46255:1;46248:15;46275:180;46323:77;46320:1;46313:88;46420:4;46417:1;46410:15;46444:4;46441:1;46434:15;46461:180;46509:77;46506:1;46499:88;46606:4;46603:1;46596:15;46630:4;46627:1;46620:15;46647:117;46756:1;46753;46746:12;46770:117;46879:1;46876;46869:12;46893:117;47002:1;46999;46992:12;47016:117;47125:1;47122;47115:12;47139:117;47248:1;47245;47238:12;47262:102;47303:6;47354:2;47350:7;47345:2;47338:5;47334:14;47330:28;47320:38;;47310:54;;;:::o;47370:172::-;47510:24;47506:1;47498:6;47494:14;47487:48;47476:66;:::o;47548:165::-;47688:17;47684:1;47676:6;47672:14;47665:41;47654:59;:::o;47719:237::-;47859:34;47855:1;47847:6;47843:14;47836:58;47928:20;47923:2;47915:6;47911:15;47904:45;47825:131;:::o;47962:225::-;48102:34;48098:1;48090:6;48086:14;48079:58;48171:8;48166:2;48158:6;48154:15;48147:33;48068:119;:::o;48193:178::-;48333:30;48329:1;48321:6;48317:14;48310:54;48299:72;:::o;48377:170::-;48517:22;48513:1;48505:6;48501:14;48494:46;48483:64;:::o;48553:174::-;48693:26;48689:1;48681:6;48677:14;48670:50;48659:68;:::o;48733:223::-;48873:34;48869:1;48861:6;48857:14;48850:58;48942:6;48937:2;48929:6;48925:15;48918:31;48839:117;:::o;48962:175::-;49102:27;49098:1;49090:6;49086:14;49079:51;49068:69;:::o;49143:172::-;49283:24;49279:1;49271:6;49267:14;49260:48;49249:66;:::o;49321:231::-;49461:34;49457:1;49449:6;49445:14;49438:58;49530:14;49525:2;49517:6;49513:15;49506:39;49427:125;:::o;49558:243::-;49698:34;49694:1;49686:6;49682:14;49675:58;49767:26;49762:2;49754:6;49750:15;49743:51;49664:137;:::o;49807:229::-;49947:34;49943:1;49935:6;49931:14;49924:58;50016:12;50011:2;50003:6;49999:15;49992:37;49913:123;:::o;50042:228::-;50182:34;50178:1;50170:6;50166:14;50159:58;50251:11;50246:2;50238:6;50234:15;50227:36;50148:122;:::o;50276:163::-;50416:15;50412:1;50404:6;50400:14;50393:39;50382:57;:::o;50445:182::-;50585:34;50581:1;50573:6;50569:14;50562:58;50551:76;:::o;50633:231::-;50773:34;50769:1;50761:6;50757:14;50750:58;50842:14;50837:2;50829:6;50825:15;50818:39;50739:125;:::o;50870:182::-;51010:34;51006:1;50998:6;50994:14;50987:58;50976:76;:::o;51058:173::-;51198:25;51194:1;51186:6;51182:14;51175:49;51164:67;:::o;51237:228::-;51377:34;51373:1;51365:6;51361:14;51354:58;51446:11;51441:2;51433:6;51429:15;51422:36;51343:122;:::o;51471:234::-;51611:34;51607:1;51599:6;51595:14;51588:58;51680:17;51675:2;51667:6;51663:15;51656:42;51577:128;:::o;51711:220::-;51851:34;51847:1;51839:6;51835:14;51828:58;51920:3;51915:2;51907:6;51903:15;51896:28;51817:114;:::o;51937:::-;52043:8;:::o;52057:170::-;52197:22;52193:1;52185:6;52181:14;52174:46;52163:64;:::o;52233:236::-;52373:34;52369:1;52361:6;52357:14;52350:58;52442:19;52437:2;52429:6;52425:15;52418:44;52339:130;:::o;52475:165::-;52615:17;52611:1;52603:6;52599:14;52592:41;52581:59;:::o;52646:161::-;52786:13;52782:1;52774:6;52770:14;52763:37;52752:55;:::o;52813:122::-;52886:24;52904:5;52886:24;:::i;:::-;52879:5;52876:35;52866:2;;52925:1;52922;52915:12;52866:2;52856:79;:::o;52941:116::-;53011:21;53026:5;53011:21;:::i;:::-;53004:5;53001:32;52991:2;;53047:1;53044;53037:12;52991:2;52981:76;:::o;53063:120::-;53135:23;53152:5;53135:23;:::i;:::-;53128:5;53125:34;53115:2;;53173:1;53170;53163:12;53115:2;53105:78;:::o;53189:122::-;53262:24;53280:5;53262:24;:::i;:::-;53255:5;53252:35;53242:2;;53301:1;53298;53291:12;53242:2;53232:79;:::o

Swarm Source

ipfs://ba434ad09239fae7e6fb967e6936c9784044d210b03e2249743d16df2d2ee6a5

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.