ERC-721
Overview
Max Total Supply
1,491 MGD
Holders
299
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 MGDLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
mirageDreamers
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-21 */ // File: @openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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); /** * @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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @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); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/utils/cryptography/ECDSA.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/cryptography/ECDSA.sol) pragma solidity ^0.8.0; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } else if (error == RecoverError.InvalidSignatureV) { revert("ECDSA: invalid signature 'v' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { // Check the signature length // - case 65: r,s,v signature (standard) // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. /// @solidity memory-safe-assembly assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else if (signature.length == 64) { bytes32 r; bytes32 vs; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. /// @solidity memory-safe-assembly assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return tryRecover(hash, r, vs); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); uint8 v = uint8((uint256(vs) >> 255) + 27); return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } if (v != 27 && v != 28) { return (address(0), RecoverError.InvalidSignatureV); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } /** * @dev Returns an Ethereum Signed Message, created from `s`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: @openzeppelin/contracts/finance/PaymentSplitter.sol // OpenZeppelin Contracts (last updated v4.7.0) (finance/PaymentSplitter.sol) pragma solidity ^0.8.0; /** * @title PaymentSplitter * @dev This contract allows to split Ether payments among a group of accounts. The sender does not need to be aware * that the Ether will be split in this way, since it is handled transparently by the contract. * * The split can be in equal parts or in any other arbitrary proportion. The way this is specified is by assigning each * account to a number of shares. Of all the Ether that this contract receives, each account will then be able to claim * an amount proportional to the percentage of total shares they were assigned. The distribution of shares is set at the * time of contract deployment and can't be updated thereafter. * * `PaymentSplitter` follows a _pull payment_ model. This means that payments are not automatically forwarded to the * accounts but kept in this contract, and the actual transfer is triggered as a separate step by calling the {release} * function. * * NOTE: This contract assumes that ERC20 tokens will behave similarly to native tokens (Ether). Rebasing tokens, and * tokens that apply fees during transfers, are likely to not be supported as expected. If in doubt, we encourage you * to run tests before sending real value to this contract. */ contract PaymentSplitter is Context { event PayeeAdded(address account, uint256 shares); event PaymentReleased(address to, uint256 amount); event ERC20PaymentReleased(IERC20 indexed token, address to, uint256 amount); event PaymentReceived(address from, uint256 amount); uint256 private _totalShares; uint256 private _totalReleased; mapping(address => uint256) private _shares; mapping(address => uint256) private _released; address[] private _payees; mapping(IERC20 => uint256) private _erc20TotalReleased; mapping(IERC20 => mapping(address => uint256)) private _erc20Released; /** * @dev Creates an instance of `PaymentSplitter` where each account in `payees` is assigned the number of shares at * the matching position in the `shares` array. * * All addresses in `payees` must be non-zero. Both arrays must have the same non-zero length, and there must be no * duplicates in `payees`. */ constructor(address[] memory payees, uint256[] memory shares_) payable { require(payees.length == shares_.length, "PaymentSplitter: payees and shares length mismatch"); require(payees.length > 0, "PaymentSplitter: no payees"); for (uint256 i = 0; i < payees.length; i++) { _addPayee(payees[i], shares_[i]); } } /** * @dev The Ether received will be logged with {PaymentReceived} events. Note that these events are not fully * reliable: it's possible for a contract to receive Ether without triggering this function. This only affects the * reliability of the events, and not the actual splitting of Ether. * * To learn more about this see the Solidity documentation for * https://solidity.readthedocs.io/en/latest/contracts.html#fallback-function[fallback * functions]. */ receive() external payable virtual { emit PaymentReceived(_msgSender(), msg.value); } /** * @dev Getter for the total shares held by payees. */ function totalShares() public view returns (uint256) { return _totalShares; } /** * @dev Getter for the total amount of Ether already released. */ function totalReleased() public view returns (uint256) { return _totalReleased; } /** * @dev Getter for the total amount of `token` already released. `token` should be the address of an IERC20 * contract. */ function totalReleased(IERC20 token) public view returns (uint256) { return _erc20TotalReleased[token]; } /** * @dev Getter for the amount of shares held by an account. */ function shares(address account) public view returns (uint256) { return _shares[account]; } /** * @dev Getter for the amount of Ether already released to a payee. */ function released(address account) public view returns (uint256) { return _released[account]; } /** * @dev Getter for the amount of `token` tokens already released to a payee. `token` should be the address of an * IERC20 contract. */ function released(IERC20 token, address account) public view returns (uint256) { return _erc20Released[token][account]; } /** * @dev Getter for the address of the payee number `index`. */ function payee(uint256 index) public view returns (address) { return _payees[index]; } /** * @dev Getter for the amount of payee's releasable Ether. */ function releasable(address account) public view returns (uint256) { uint256 totalReceived = address(this).balance + totalReleased(); return _pendingPayment(account, totalReceived, released(account)); } /** * @dev Getter for the amount of payee's releasable `token` tokens. `token` should be the address of an * IERC20 contract. */ function releasable(IERC20 token, address account) public view returns (uint256) { uint256 totalReceived = token.balanceOf(address(this)) + totalReleased(token); return _pendingPayment(account, totalReceived, released(token, account)); } /** * @dev Triggers a transfer to `account` of the amount of Ether they are owed, according to their percentage of the * total shares and their previous withdrawals. */ function release(address payable account) public virtual { require(_shares[account] > 0, "PaymentSplitter: account has no shares"); uint256 payment = releasable(account); require(payment != 0, "PaymentSplitter: account is not due payment"); _released[account] += payment; _totalReleased += payment; Address.sendValue(account, payment); emit PaymentReleased(account, payment); } /** * @dev Triggers a transfer to `account` of the amount of `token` tokens they are owed, according to their * percentage of the total shares and their previous withdrawals. `token` must be the address of an IERC20 * contract. */ function release(IERC20 token, address account) public virtual { require(_shares[account] > 0, "PaymentSplitter: account has no shares"); uint256 payment = releasable(token, account); require(payment != 0, "PaymentSplitter: account is not due payment"); _erc20Released[token][account] += payment; _erc20TotalReleased[token] += payment; SafeERC20.safeTransfer(token, account, payment); emit ERC20PaymentReleased(token, account, payment); } /** * @dev internal logic for computing the pending payment of an `account` given the token historical balances and * already released amounts. */ function _pendingPayment( address account, uint256 totalReceived, uint256 alreadyReleased ) private view returns (uint256) { return (totalReceived * _shares[account]) / _totalShares - alreadyReleased; } /** * @dev Add a new payee to the contract. * @param account The address of the payee to add. * @param shares_ The number of shares owned by the payee. */ function _addPayee(address account, uint256 shares_) private { require(account != address(0), "PaymentSplitter: account is the zero address"); require(shares_ > 0, "PaymentSplitter: shares are 0"); require(_shares[account] == 0, "PaymentSplitter: account already has shares"); _payees.push(account); _shares[account] = shares_; _totalShares = _totalShares + shares_; emit PayeeAdded(account, shares_); } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * 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; /** * @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 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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: tinyERC721_ID.sol pragma solidity ^0.8.0; error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error TokenDataQueryForNonexistentToken(); error OwnerQueryForNonexistentToken(); error OperatorQueryForNonexistentToken(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); contract TinyERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; struct TokenData { address owner; bytes12 aux; } uint256 private immutable _maxBatchSize; mapping(uint256 => TokenData) private _tokens; uint256 private _mintCounter = 151; uint256 private _claimCounter; string private _name; string private _symbol; mapping(uint256 => address) private _tokenApprovals; mapping(address => mapping(address => bool)) private _operatorApprovals; constructor( string memory name_, string memory symbol_, uint256 maxBatchSize_ ) { _name = name_; _symbol = symbol_; _maxBatchSize = maxBatchSize_; } function totalSupply() public view virtual returns (uint256) { return (_mintCounter - 151 + _claimCounter); } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } function _baseURI() internal view virtual returns (string memory) { return ''; } function balanceOf(address owner) public view virtual override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); uint256 total = totalSupply() + 150 - _claimCounter; uint256 count; address lastOwner; for (uint256 i; i <= total; ++i) { if(_exists(i)) { address tokenOwner = _tokens[i].owner; if (tokenOwner != address(0)) lastOwner = tokenOwner; if (lastOwner == owner) ++count; } } return count; } function _tokenData(uint256 tokenId) internal view returns (TokenData storage) { if (!_exists(tokenId)) revert TokenDataQueryForNonexistentToken(); TokenData storage token = _tokens[tokenId]; uint256 currentIndex = tokenId; while (token.owner == address(0)) { unchecked { --currentIndex; } token = _tokens[currentIndex]; } return token; } function ownerOf(uint256 tokenId) public view virtual override returns (address) { if (!_exists(tokenId)) revert OwnerQueryForNonexistentToken(); return _tokenData(tokenId).owner; } function approve(address to, uint256 tokenId) public virtual override { TokenData memory token = _tokenData(tokenId); address owner = token.owner; if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, token); } function getApproved(uint256 tokenId) public view virtual override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } function transferFrom( address from, address to, uint256 tokenId ) public virtual override { TokenData memory token = _tokenData(tokenId); if (!_isApprovedOrOwner(_msgSender(), tokenId, token)) revert TransferCallerNotOwnerNorApproved(); _transfer(from, to, tokenId, token); } function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { TokenData memory token = _tokenData(tokenId); if (!_isApprovedOrOwner(_msgSender(), tokenId, token)) revert TransferCallerNotOwnerNorApproved(); _safeTransfer(from, to, tokenId, token, _data); } function _safeTransfer( address from, address to, uint256 tokenId, TokenData memory token, bytes memory _data ) internal virtual { _transfer(from, to, tokenId, token); if (to.isContract() && !_checkOnERC721Received(from, to, tokenId, _data)) revert TransferToNonERC721ReceiverImplementer(); } function _exists(uint256 tokenId) internal view virtual returns (bool) { if (tokenId > 150) { return tokenId < _mintCounter; } else if (tokenId <= 150) { return tokenId <= _claimCounter; } else { return false; } } function _isApprovedOrOwner( address spender, uint256 tokenId, TokenData memory token ) internal view virtual returns (bool) { address owner = token.owner; return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } function _safeMint(address to, uint256 quantity) internal virtual { _safeMint(to, quantity, ''); } function _safeMintID(address to, uint256 _id, uint256 quantity) internal virtual { _safeMintID(to, _id, quantity, ''); } function _safeMint( address to, uint256 quantity, bytes memory _data ) internal virtual { uint256 startTokenId = _mintCounter; _mint(to, quantity); if (to.isContract()) { unchecked { for (uint256 i; i < quantity; ++i) { if (!_checkOnERC721Received(address(0), to, startTokenId + i, _data)) revert TransferToNonERC721ReceiverImplementer(); } } } } function _safeMintID( address to, uint256 _id, uint256 quantity, bytes memory _data ) internal virtual { _mintID(to, _id, quantity); _claimCounter += quantity; if (to.isContract()) { unchecked { if (!_checkOnERC721Received(address(0), to, _id, _data)) revert TransferToNonERC721ReceiverImplementer(); } } } function _mint(address to, uint256 quantity) internal virtual { if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); uint256 startTokenId = _mintCounter; _beforeTokenTransfers(address(0), to, startTokenId, quantity); unchecked { for (uint256 i; i < quantity; ++i) { if (_maxBatchSize == 0 ? i == 0 : i % _maxBatchSize == 0) { TokenData storage token = _tokens[startTokenId + i]; token.owner = to; token.aux = _calculateAux(address(0), to, startTokenId + i, 0); } emit Transfer(address(0), to, startTokenId + i); } _mintCounter += quantity; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } function _mintID(address to, uint256 _id, uint256 quantity) internal virtual { if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); uint256 startTokenId = _id; _beforeTokenTransfers(address(0), to, startTokenId, quantity); unchecked { for (uint256 i; i < quantity; ++i) { if (_maxBatchSize == 0 ? i == 0 : i % _maxBatchSize == 0) { TokenData storage token = _tokens[startTokenId + i]; token.owner = to; token.aux = _calculateAux(address(0), to, startTokenId + i, 0); } emit Transfer(address(0), to, startTokenId + i); } } _afterTokenTransfers(address(0), to, startTokenId, quantity); } function _transfer( address from, address to, uint256 tokenId, TokenData memory token ) internal virtual { if (token.owner != from) revert TransferFromIncorrectOwner(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); _approve(address(0), tokenId, token); unchecked { uint256 nextTokenId = tokenId + 1; if (_exists(nextTokenId)) { TokenData storage nextToken = _tokens[nextTokenId]; if (nextToken.owner == address(0)) { nextToken.owner = token.owner; nextToken.aux = token.aux; } } } TokenData storage newToken = _tokens[tokenId]; newToken.owner = to; newToken.aux = _calculateAux(from, to, tokenId, token.aux); emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } function _calculateAux( address from, address to, uint256 tokenId, bytes12 current ) internal view virtual returns (bytes12) {} function _approve( address to, uint256 tokenId, TokenData memory token ) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(token.owner, to, tokenId); } function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { 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 TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: dreamers.sol /* MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMNOOXMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMXO0NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMk,'lKWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMKc.,kWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMNo...cKMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMKc...lNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMK:....cKMMMMMMMMMMMMMMMMMMMMMMMMMMMMMKc....:0MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMk,.....cKMMMMMMMMMMMMMMMMMMMMMMMMMMWKc.....,kWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMNd.......cKWMMMMMMMMMMMMMMMMMMMMMMMKkc.......oNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMKc........cKMMMMMMMMMMMMMMMMMMMMMMKc'........cKMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMO,.........cKMMMMMMMMMMMMMMMMMMMMKc..........,OMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMWd'..........cKWMMMMMMMMMMMMMMMMMKl............dWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMXc...;;.......cKMMMMMMMMMMMMMMMMKc...'co,......cXMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMO;..,x0:.......cKMMMMMMMMMMMMMMKl...cxKKc......;OMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMWd'..;0W0:.......cKWMMMMMMMMMMMKc...cKWMNo......'xWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMXl...lXMW0:.......c0WMMMMMMMMMKl...cKMMMWx'......lXXkxxddddoddddxxxkO0KXXNWWWMMMMMMMMMMM MMMMMMMMMMMM0;...dWMMW0:.......c0WMMMMMMMKl...cKMMMMMO;......;0k,.'''',,''.......'',;::cxXMMMMMMMMMM MMMMMMMMMMMWx'..,kMMMMW0:.......c0WMMMMMKl...cKMMMMWWKc......'xXOO00KKKKK00Okdoc,'......cKMMMMMMMMMM MMMMMMMMMMMXl...:0MMMMMW0:.......:0WMMMKl...cKMMWKkdxKd.......oNMMMMMMMMMMMMMMMWXOd:'...lXMMMMMMMMMM MMMMMMMMMMM0:...lXMMMMMMWO:.......:0MMKl...cKMWKo,..;0k,......:KMMMMMMMMMMMMMMMMMMWNOc'.oNMMMMMMMMMM MMMMMMMMMMWx'..'dWMMMMMMMW0:.......:0Kl...cKMNk;....,k0:......,kMMMMMMMMMMMMMMMMMMMMMXl'oNMMMMMMMMMM MMMMMMMMMMNl...,OMMMMMMMMMW0:.......;;...cKWXo'......dKl.......oNMMMMMMMMMMMMMMMMMMMMM0:dWMMMMMMMMMM MMMMMMMMMM0:...:KMMMMMMMMMMW0c..........lKMNo'.......oXd'......cKMMMMMMMMMMMMMMMMMMMMMNKXMMMMMMMMMMM MMMMMMMMMWk,...lXMMMMMMMMMMMWKc........cKMWx,.......,kWk,......,OMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMNo...'dWMMMMMMMMMMMMMKl......lKMMK:........:KMK:.......dNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMWO;...'xWMMMMMMMMMMMMMMXl'...lKMMWx'........lXMXl.......;OWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMNKOOd;.....;dkO0NMMMMMMMMMMMXo''lXMMMNo.........lNW0:........,lxkO0XWMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMN0kkkkkkkkkkxxkOXWMMMMMMMMMMMN0ONMMMMNo.........lXWXOkkkkxxxxxxxxxk0WMXOkkkkkkkkkkkkkkkkkOXMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNo.........:0MMMMMMMMMMMMMMMMMMMMN0OOxl,........,lxO0NMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWx'........'xWMMMMMMMMMMMMMMMMMMMMMMMMNd'......'dNMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM0:.........:KMMMMMMMMMMMMMMMMMMMMMMMMMk,......'xWMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNd'.........oXMMMMMMMMMMMMMMMMMMMMMMMMO,......'kWMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMXo.........'oXMMMMMMMMMMMMMMMMMMMMMMMO,......'kMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMXo'.........c0WMMMMMMMMMMMMMMMMMMMMMO,......'kMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNx;.........,dXWMMMMMMMMMMMMMMMMMMMO,......'kMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWKo;'........;d0NMMMMMMMMMMMMMMMMMO,......'kWMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWKOxc'.......':dOKNWMMMMMMMMMMMWk,......'kWMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN0xl;'.......,:ldxkO00KK00Od:.......;OMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWX0kdl:;''.......''''''....',;cox0NMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNXK0OkxxddddddddxxkkO0XNWMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM */ // Contract authored by August Rosedale (@augustfr) // https://miragegallery.ai // TinyERC721 used (https://github.com/tajigen/tiny-erc721) // Modifications were made to the TinyERC721 contract in order to allow for 'Sentient' members to claim from the first 150 tokens at any point in time. pragma solidity ^0.8.16; interface mirageContracts { function balanceOf(address owner, uint256 _id) external view returns (uint256); } interface mirageProjects { function balanceOf(address owner) external view returns (uint256); } contract mirageDreamers is TinyERC721, ReentrancyGuard, Ownable { using Strings for uint256; mapping(uint256 => uint256) public sentientClaimed; uint256 private maxSentientClaim = 3; uint256 public publicPrice = 0.06 ether; uint256 public holderPrice = 0.04 ether; uint256 public memberPrice = 0.02 ether; uint256 private maxMemberMint = 20; uint256 private maxHolderMint = 5; uint256 private maxPartnerMint = 5; address[] private mulIntelHolders; uint256[] private numIntelHeld; uint256 public maxSupply = 8000; bool private revealed; string private unrevealedURI = "ipfs://QmQoBSSf8ZvvPbUfVBnbKBZim9pJvgEvJS5zpfwCkp2HgW"; uint256 public claimCounter; string public baseURI; bool private paused; bool public metadataFrozen; mirageProjects private curated; mirageProjects private cryptoNative; mirageProjects private AlejandroAndTaylor; mirageProjects private earlyWorks; salePhase public phase = salePhase.unOpened; address private immutable _adminSigner; struct Coupon { bytes32 r; bytes32 s; uint8 v; } struct Minted { uint256 member; uint256 id; uint256 holder; uint256 partner; } struct intelAllotment { uint256 maxMint; uint256 numMinted; } enum salePhase { unOpened, memberSale, presale, openSale, publicSale, closed } mirageContracts public membershipContract; mapping(address => Minted) numMinted; mapping(uint256 => Minted) idMinted; mapping(address => intelAllotment) intelQuantity; constructor(string memory name, string memory symbol, address adminSigner, address membershipAddress) TinyERC721(name, symbol, 0) { membershipContract = mirageContracts(membershipAddress); _adminSigner = adminSigner; cryptoNative = mirageProjects(0x89568Fc8d04B3f833209144b77F39b71078e3CB0); AlejandroAndTaylor = mirageProjects(0x63400da86a6b42dac41075667cF871a5Ef93802F); earlyWorks = mirageProjects(0x3Cf6e4ff99D616d44Be53E90F74eAE5D150Cb726); curated = mirageProjects(0xb7eC7bbd2d2193B47027247FC666fB342D23c4B5); // cryptoNative = mirageProjects(0x662508A2767A1A978DF4CFd16f77A3358C613599); // AlejandroAndTaylor = mirageProjects(0x662508A2767A1A978DF4CFd16f77A3358C613599); // earlyWorks = mirageProjects(0x662508A2767A1A978DF4CFd16f77A3358C613599); // curated = mirageProjects(0x662508A2767A1A978DF4CFd16f77A3358C613599); } function updateMintStatus(salePhase phase_) external onlyOwner { require(uint8(phase_) > uint8(phase), "Increase only"); phase = phase_; } function updateMintLimits(uint256 _maxMember, uint256 _maxHolder, uint256 _maxPartner) public onlyOwner { maxMemberMint = _maxMember; maxHolderMint = _maxHolder; maxPartnerMint = _maxPartner; for(uint i = 0; i < mulIntelHolders.length; i++) { intelQuantity[mulIntelHolders[i]].maxMint = numIntelHeld[i] * maxMemberMint; } } function updateMintPrices(uint256 _public, uint256 _holder, uint256 _member) public onlyOwner { //input prices in wei publicPrice = _public; holderPrice = _holder; memberPrice = _member; } function togglePause() public onlyOwner { paused = !paused; } function sentientMint(uint256 numberOfTokens, uint256 _membershipId) public payable nonReentrant { require(_membershipId < 50, "Not a valid Sentient ID"); require(!paused, "Minting paused"); require(phase >= salePhase.memberSale && phase < salePhase.publicSale, "Not in member sale phase"); require(membershipContract.balanceOf(msg.sender,_membershipId) > 0, "No membership tokens in this wallet"); require(msg.value >= numberOfTokens * memberPrice, "Insufficient Payment: Amount of Ether sent is not correct."); require(numberOfTokens + totalSupply() <= 7850 + claimCounter, "Minting would exceed max supply"); require(idMinted[_membershipId].id + numberOfTokens <= maxMemberMint, "Would exceed max allotment for this phase"); idMinted[_membershipId].id += numberOfTokens; _safeMint(msg.sender,numberOfTokens); } function setIntelAllotment(address[] memory _addresses, uint256[] memory numHeld) public onlyOwner { require(_addresses.length == numHeld.length, "Array lengths don't match"); //input number of intelligent memberships held by a single address mulIntelHolders = _addresses; numIntelHeld = numHeld; for(uint i = 0; i < _addresses.length; i++) { intelQuantity[mulIntelHolders[i]].maxMint = numIntelHeld[i] * maxMemberMint; } } function intelligentMint(uint256 numberOfTokens, Coupon memory coupon) public payable nonReentrant{ require(!paused, "Minting paused"); require(msg.value >= numberOfTokens * memberPrice, "Must send minimum value to mint!"); require(phase >= salePhase.memberSale && phase < salePhase.publicSale, "Not in member sale phase"); require(numberOfTokens + totalSupply() <= 7850 + claimCounter, "Minting would exceed max supply"); bytes32 digest = keccak256(abi.encode(msg.sender,"member")); require(_isVerifiedCoupon(digest, coupon), "Invalid coupon"); uint256 maxMint = intelQuantity[msg.sender].maxMint; if (maxMint == 0) { maxMint = maxMemberMint; } require(intelQuantity[msg.sender].numMinted + numberOfTokens <= maxMint, "Would exceed allotment"); intelQuantity[msg.sender].numMinted += numberOfTokens; _safeMint(msg.sender,numberOfTokens); } function holderMint(uint256 numberOfTokens, Coupon memory coupon) public payable nonReentrant { require(!paused, "Minting paused"); require(phase >= salePhase.presale && phase < salePhase.publicSale, "Not in presale phase"); require(msg.value >= numberOfTokens * holderPrice, "Insufficient Payment: Amount of Ether sent is not correct."); require(numberOfTokens + totalSupply() <= 7850 + claimCounter, "Minting would exceed max supply"); require(numMinted[msg.sender].holder + numberOfTokens <= maxHolderMint, "Minted max allotment for this sale phase"); bytes32 digest = keccak256(abi.encode(msg.sender,"standard")); require(_isVerifiedCoupon(digest, coupon), "Invalid coupon"); numMinted[msg.sender].holder += numberOfTokens; _safeMint(msg.sender,numberOfTokens); } function partnerMint(uint256 numberOfTokens, Coupon memory coupon) public payable nonReentrant { require(!paused, "Minting paused"); require(phase >= salePhase.presale && phase < salePhase.publicSale, "Not in presale phase"); require(msg.value >= numberOfTokens * publicPrice, "Insufficient Payment: Amount of Ether sent is not correct."); require(numberOfTokens + totalSupply() <= 7850 + claimCounter, "Minting would exceed max supply"); require(numMinted[msg.sender].partner + numberOfTokens <= maxPartnerMint, "Minted max allotment for this sale phase"); bytes32 digest = keccak256(abi.encode(msg.sender,"secondary")); require(_isVerifiedCoupon(digest, coupon), "Invalid coupon"); numMinted[msg.sender].partner += numberOfTokens; _safeMint(msg.sender,numberOfTokens); } function openHolderPresale(uint256 numberOfTokens) public payable nonReentrant { require(!paused, "Minting paused"); require(numberOfTokens <= 10, "Can't mint more than 10 tokens per transaction"); require(phase >= salePhase.openSale && phase < salePhase.publicSale, "Not in presale phase"); require(msg.value >= numberOfTokens * holderPrice, "Insufficient Payment: Amount of Ether sent is not correct."); require(numberOfTokens + totalSupply() <= 7850 + claimCounter, "Minting would exceed max supply"); require(cryptoNative.balanceOf(msg.sender) > 0 || AlejandroAndTaylor.balanceOf(msg.sender) > 0 || earlyWorks.balanceOf(msg.sender) > 0 || curated.balanceOf(msg.sender) > 0, "No MG tokens held"); _safeMint(msg.sender,numberOfTokens); } function publicMint(uint256 numberOfTokens) public payable nonReentrant { require(!paused, "Minting paused"); require(phase == salePhase.publicSale, "Not in public sale phase"); require(numberOfTokens <= 10, "Can't mint more than 10 tokens per transaction"); require(msg.value >= numberOfTokens * publicPrice, "Insufficient Payment: Amount of Ether sent is not correct."); require(numberOfTokens + totalSupply() <= 7850 + claimCounter, "Minting would exceed max supply"); _safeMint(msg.sender,numberOfTokens); } function _isVerifiedCoupon(bytes32 digest, Coupon memory coupon) internal view returns (bool) { address signer = ecrecover(digest, coupon.v, coupon.r, coupon.s); require(signer != address(0), "ECDSA: invalid signature"); // Added check for zero address return signer == _adminSigner; } function claimSentient(uint256 membershipId, uint256 numberOfTokens) public { require(phase >= salePhase.memberSale, "Claiming not open"); require(membershipId < 50, "Must be a Sentient Membership ID (0-49)"); require(membershipContract.balanceOf(msg.sender, membershipId) == 1, "Wallet does not own this membership ID"); require(sentientClaimed[membershipId] + numberOfTokens <= maxSentientClaim, "Sentient Memberships can only claim 3 in total"); require(claimCounter + numberOfTokens <= 150, "All have been claimed"); sentientClaimed[membershipId] += numberOfTokens; _safeMintID(msg.sender,claimCounter + 1, numberOfTokens); claimCounter += numberOfTokens; } function airdrop(address[] memory addresses, uint256 numberOfTokens) public onlyOwner { require(totalSupply() + numberOfTokens <= 7850 + claimCounter, "Exceeds maximum token supply."); for (uint256 i = 0; i < addresses.length; i++) { _safeMint(addresses[i],numberOfTokens); } } function freezeMetadata() public onlyOwner { require(!metadataFrozen, "Already frozen"); metadataFrozen = true; } function reveal(string memory _URI) public onlyOwner { baseURI = _URI; revealed = true; } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function tokenURI(uint256 tokenID) public override view returns (string memory) { if (!_exists(tokenID)) revert URIQueryForNonexistentToken(); if (!revealed) { return unrevealedURI; } else { return string.concat(baseURI,Strings.toString(tokenID)); } } function updateURI(string memory _baseTokenURI, string memory _unrevealedURI) external onlyOwner { require(!metadataFrozen, "Metadata is frozen"); baseURI = _baseTokenURI; unrevealedURI = _unrevealedURI; } function withdraw(address secondaryPayee) public onlyOwner { uint mainBalance = address(this).balance * 9 / 10; uint secondaryBalance = address(this).balance / 10; payable(msg.sender).transfer(mainBalance); payable(secondaryPayee).transfer(secondaryBalance); } function withdrawERC20(IERC20 token, address to) external onlyOwner { token.transfer(to, token.balanceOf(address(this))); } } /* .....,:ldxxxkkkkkkxxdl:,'....,coxxkkkkkkxxdo:,'........................'''''''''''''''''.......................;:lloooool:;,'........................................................................... ......',lxkkxkxxkkkkkxoc;''...':oxkkkkkkkkkxdc;,'........................''''''',,,,,,,,,''....................;cloodoooooll:;,'........................................................................ ........'cdkkxkkkkkkkxxxl;'.....,cdxxxkkkkkkkxo:,'.......................'''',;;;:::::::::;,''.................,:ldddoooolooolc:;;,'.................................................................... ..........,cdkkkkkkkkkkxxo:'.....';lxkkkkkkxkkxdl;'......................'',;:cllllloooollllc:;'''....'.........,:ooooolcccloolllcc:,''''............................................................... ............;lxkkkkkkkkkkxdl;......,cdxkkkkkkkkkxo:'.....................',;clooddddddooooooooll:,,;:clcc:;'.....'cllccc::;;:cloooolllc:;,''............................................................ .............':oxkkkkkkkkxxxdc'.....';oxxkkkkkkkkkdc,'..................',;:loooddoooooooollllol;.',;::ccllc;'...,cllc::::;;;;;clllloooolc;,,'....................''''''''.............................. ..............',cxkkkkkkkxxxxko:'.....,cdxkkkkkkkkkkdc,................''';clloooolllllllllllllc;.',,,,;;::c::;:::clolcc:::::;;;:::cllolllcc:;,''',,...........',;;;;;,,,,'............................. ................';okkkkkkkxxkkkko;.....';lxkkkkkkkkkkxo:'.............''',,;:cloolllcclllccllccc;''',,,,,,;::::lol:;;:c::c::::::::::ccccccccclc:::cc,'.',;,...,:ccccc::;;;,'............................ ..................':dkkkkkkkkkkkkdc'.....':oxkkkkkkkkkxdc,..........';ccloolc::ccllllccllcclcccc:,,,,,'''',;:clodd:,',,,;;::::::::::::::ccccllllllol;',,,,;,,,:cllllllc:::;,............................ ....................,cdkkkkkkkxxxkxl,.....';lxkkkkkkkkkkxl:;'.......:ooxOkkkkxol:;:cccllllllllloc;,;;,'..',;:cldxd:,;;,,,,;;::c:ccc::::::ccccccllllc;';ll:;,,;clooooollccc::,........................... ....................'',ldxxkkkkkkxxxd:'...'',:dkkkkkkkkkkxdl:,'....'ldoxOOOOkkkxdo:;,;;::::::ccl:,,,,'....',:cclllc;,,,,;;;:::cc:cccc:::::c::::cclll:,,ldoc;,;cllooollcccccc;........................... ......................'';ldxxkkkkkkkkxo;'..'..,cdkkkkkkkkkxxdc;'...;oddxxxxxxxkkkxdol:;,,,,',,,,,,;,,'....,;:::cccc:;,,;ccccccccc:ccc::ccccc::cccccc:;;lddl:;;:ccllllccccccc:'.......................... ........................',:ldkkkkkkkxxxdc'......,lxkkkkkkkkkkxl:,.':loddddddddddxxxxxxdoc:;,,'',,,;;;,'.'';::::cclccc:::cllllloollccc::;:::ccccllllllcloddolc;;ccccccc::c::c:'.......................... ..........................',coxkkkkkkxxxxl,......'cxkkkkkkkkkkxol:,:lddddddddooooddoodk0Okkdlll::cllcccc::::;;:clllccclllloolllloooooll::::c::cccclllodxdooooc;;clc::cccc::c:'.......................... ............................',cdxkkxkkkxkxl;'.....';dkkkkkkkkkkxddl:clxxdddollllllloodk000OOOxl:cddddddoolcclloxxddollllllllllllloodddoolcc::;;:cloolooddollooc:;:llccllcccc:'.......................... ..............................':oxkkkkkkkkkdc,'.....,cxkkkkkkkkkxddollddoolllllodooodxO000OkxoclodxdddooddxxkkOO00OOxdlllllccllllloodddoollcc:clooollloooollllll:;lolllllccc:'.......................... ...............................';oxkxkkkxxkkkd:,......:okkkkkkkkkxdddddolllllloddxxxkO0K00kdoloddxkxddoodk00O00000000Oxoccllcllllllooddddoooooooooollloooollclloo:coddollcc:;'.......................... ................................';coxkkxxkkkkkxl;'.....,lxkkkkkkkxxxddddolldddddddxO0000OOkdc;cdxkkxxdddxkO000000000000Oxdoooooooooodxkkkxxxkkxddddoooollllllllodl:lddolcc::;'..........',,,'........... ..................................';ldxkkxxkkkkkxl;.....';okkkkkkxxxxxxdddxxxxxxddxO00000Okxl:lkkkkxxxxkkkO0000000000000000OOOOkkkOOO000OOOOOOkkxdddooollccccllokd;:ddllccc:,'.....'',;;:cll:,'''....... ...................................'';lxxxkkkkkkkkdl,..'..':dkxxxxxxxxkkxdxxddxxddxOKKKKK0OxdoxOOOkkxxkkOOO000K000000000000000K0000000OOOOOOOOOOkxxdddolccccclloxkl:lddolll:,''',,;::ccllloll:;,,'...... ...................................''',:oxkkkkkkkkkko:''...,cdxxddxxddxkkxxxxxxxdddk000K0K00OOO00000OOO000000KK000000000000000KKK0000000O00OO00OOOOkkxdlccllllloddl:cxxxdddl:;;;::cclllcclllc:;;;,,'.... ......................................'',cdxkxkkxxkkxdl:,..,cxkxxdxxdddxkxxxxxxxddxO0KK00000000000KK0K000000KKKK000KKKK000000000KKK00000O00000000000000kdoolllloxko:cdkkkkxdlccccc:::::ccccc:::;;;,'.... ......................................'''',cdkkkkkkkxxxdl:;;lxkkxxdxxdddxxxxxxxkkO0KK00K0000000000KK000000KKKKKKKKKKKKKKKK000000000000OkkO00KK00KKKK0000kdolllodxko:cldxkkkxoc:;,,,,,,;:c::::::;;,'..... .......................................'''',coxkkkkkkxkkkdoodxkOkxddxxxdddddxkkO0KKKK000000000000000000000000KKK00KKK0KKKK00K000000O0OkddxkO0000KKKK0000Oxooooodxxo;:llodddolc:;;;;:c:;;;:::::;;;,'..... ........................................''''';cdkkOkkkkkkkkxxkOOkkxddxxdddddddxkOO00000000000000000000000000000000000000000KK000KK000OOkxxxxxxkO0K0K0000Oxdoooodxxdc;ccclloollccc:;;::;,;:::::;;,....... ..........................................'''',;ldkkkkkxxxkkkkkOOOkdodddxxxdddddxxkO0O0000000000000000000000000000000000KK00000KKK00000OOkkxxddxxO0000000Okkxddxdddoccccloooooolc:;'''',;::::;;;,....... ............................................'''',:oxkxxxxxxxxxkkOOkxoloddxxxddddoddxkO0000000000000000000000000000000000KK00000K00OOOO000000OkkxddkO00K00K000OOkkxdoolccccccllollc;'...,:c:c:;;;;'...... ...............................................''';ldxxxdxxxxxxkkOOkdcclddxxxddddoodddkO000000000000OO000000000000000000000000000OOOOOOOOO0000Okkxdk00000KKKK0OOkxdlcccc:ccclllllc:,'.';cccc:;,;;'...... ................................................'',:okkxxxxdxxdxxkkkxocclodxxdddddooooodk00000000000O000000000000OOOO00O000000000OOOOOOOOOO00K00Okxxk00KKKKKK00Oxolccccc::ccccccc::,'',clc:::,,,'....... ...............................................'..',lxkkxdxddxxxxdoldxdollloddddddddoooooxO0O0000000O00000000OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO00KK00OOxxkOKKKKKK00Oxolcccc:::cccc::::;,'':cc::;;'''........ ..............................................''''',cdkOkdoddxxddolcdOkkkdooooodxdddddooooxOOO00OO0OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO00K00OkkkO0KKKKK0Oxocccccc:::cccc:::,'';::;;;;,........... ..............................................'''',;ck0OkocloddoooodO0OkkkkkxdoooxxxddooooodkOOkkkOOkOOOOOkkkkkkkkkkOOOOOOOOOOOOOOOOOOOOOOOOOkOO0K00OOkkkO00KKK0Okkxxollclllccc::;,,,:::;;,''........... .............................................''''';ldkOOOkdodddddkO000OOOOkkkOkolodxxdddoooodxxddddddxxkkkkkkkOOkkkkkOOOkkkOOOOOOOOOOOOOOOOOOOOOO00000OkkkO00K0KK00Okkxooodolc:::;,,:::::,'............. .............................................'..';lddxxkO00K0000000000OOkkkkxkxdllodxxdddooooddddddddddxxxxxxkkkkkkkkkkkkkkkkkkOOkkkkkkkkkkkkkkOOO0000OOkkkOO0KK00Oxxkddddolc:::;,,:c:::;,.............. .............................................'..,:ldollok00000000OOOOOkkkkkkxxdlclodddxdddoooodxkkO00OkkxxxddddxxxkkxxxxxxxxxxxxxkxxxxxxxkkkkkkkkkOOOOOkxkOOk0KK00Oxxdooddoc:::;,,;cc:::;'.............. ............................................','';codlc:coxkkkkOOkkkkkkkkkkkkxdllloxOOkkxxxdddoodxkO000000OkxdddooddxkkxxxxxxxxxxxxxxxxxxxxxxxxxxxkkkkkkxxkkkO00K0Okxdooodocc:::;,;:cc:::;'.............. ...........................................'cl,';clc:::::loodxxkkkkkxxxkkkxdolloxO00000kxxddddoloxkkkxxkkO0OOkxddoooddxxxxxxxxxxxxxxxxxxxxxxxxxxxxxkkxxkxxxOKK0OOkxdoodddlcc::;,;:ccc:::;............... ...........................................;oc;;:cc::::::ccccoxkkkxxxxxxddolldxO00KK0000OkxddxdoooodddoddxkO00Okkxdooooddddxxxxxxxxxxxxxxxxxxxxxxxxkdldkxxk0K0Okkxdoodddlccc:;,,:cccc::;'............... .........................................';cl:;:cc:::::c::c::lxxxxxxxdoolodxO0000000000000kkxddddooooodoooodkO000OOOkxdooooddxxxxxxxxxxxxxxxxxxxxxkxllxxxO0000Okkxdodxdlc:c:;;,;:c:::::,'............... ..........................................;;;:cccccccccccc:ccoolllllllodxOO000000O00000K000Okkxdxxdooodoollldxk00000OOkxddoloodxxxxxxxxxxxxxxxxxxxxocdkxOK00Oxxxdddddolccc::;;,;:cc:::;,'............... ...........'.............................,;::looolccc::::::cc:::::cldkkO00000000000000KK0000OOkxxxxdddddollloodkO00000O0Okxdlloodxxxxxxxxxxxxxxxxxdodddk0000Oxdddoddolcccc:;,,',:cc:;::;'............... ........................................,;:loxxxdoc::;;;;:ccc:clodxO0000000000000000K000000000OkxxxxxddxdooooooddkO00000000OkdooodxkkkxxxxxxxxxxxxdddcoO0000Oxddoodol::ccc:;,,',:ll:;:c;'............... .......................................';:ldxxxddlc:;::cccclldxkO000000000000000O00000K0O000000kxxxxxdooooodxdooodk00000000000OkkkkOOOOkkkkxxxxxxdxdlcxO00OOkddddddolc:ccc:;,,',:llc:::,................ ......................................';codxxxdlllc::cccloxkk00000000000000000O0OOO0OO0OOO0O0K0OkdooooooodkO0OkxdodxO000000KK0000000000Okkkxxxxxxxxoox000Okkkddddddolccccc:;,,,;:cc:::;'.............''' ......................................,:oxxxxxdllccccccoxkk0000000000000000000O00OO0OOOkkO0O00000OkkkkkkkO00000kxdooodkO00000000000000OOkkkxxxxxxxxdx000OOkkxxxxddoooccclc;,,,,;ccc:::;'...............' .....................................,;ldxkkkkkxdollccccloodxxkO000OO00000OO00OOOOOOOkkkkOOOOO0000000000KK00000OOxddddkO0000000000000OOOkkxxxxxxxkkkO00000Okkkkxxddoolccllc,,;;:clcc::;'................ ..................................',,,;codO00O00OOkdolc:cc::cclldxkO000000OOkOOOOOOkkxxxxkkkkkO0000000000K00K00000OOOOO00000000000000OOOkkxxxxxkxxkOO0K00K0OOOOkxddoooolooc;,;:ccccc::;,''.............. ..................................;:;,,;:ldkO00000K0OOkxxolcc::::cok00000OOkkkkOOOOOkxdodddxkxxOO0000KKK0000K000000000000000000000O00OOOkkxxxxxxkkkO0000KKK00K0Oxdoodooddoc;;;clllcc::;,'''''........... .................................,loc:,,',:okkO0000K000000OkkxxdocldO000Okkkkkkkkkkkxddooolloolodk00KKKKKKK000K00000000000000000000OOOOOOkxxxxxxkOOOO000KKKKKKK0kddddooddc:;;cllllc::;;,,''''........... ..................................,lxkxl;,',cdOOO00000O000000000Oxdxk00OkkkkkkkkkkkkxdolllllllllloxOO00KK00000000000000000000000000OOOOOkkxxxxxxxxxkOO00KKKKKKXKkxxxdooooc;,:lolllc:;;,,,,,''........... ....................................;okOx:,,,lk00000OxooxO000000000OO000Okkkkkkkxxxxxdoolcc:ccccccloddxkOOOOO0K00000000000000000OOOOOOOOkxxxxxxxxoodkOkO0KKKKXXKOkkkddool:,':oollc::;;;;;,,'''.......... ......................................lOOo;;;ck00OkOxc,':dOOOO00OO000000OkkkkkkkkxxxdoolllccccclcccloooodkOOOO00OOOO0OOOOOOO0000OOOOOOOkkkxxxxxxxdddxkkxk0KKKKXK00Oxdddol:,',::::::;;;;;;,,,''.......... .......................................lko;,,ck00OOkd;'',:c::ldO000000K0OkkkkkkkxkkkxdoooooollcllcccllllodxkOOOOOOOOOOOOOOOOOOOOOOOOkkkOOOkkkkkkkxxkkOOdld0KKKKK0Okxddol:;''',;;;;;;;;;;;,,,''.......... ........................................;c;,,:x0OOOkkl;;;;;''';dO0000000OkkkkkkkkkkOOkxxxxxxkxdooolllcllldxkkkkkkkkkkOOOOOkkkkOOOOkkkkkOOOOOOOkkkkkOO0OxlldkKKXKOkxxddoc:;,'.',;;;;:;;;;,,''''.......... ..........................................,,';d0Okkxdlclddc,'',cdO000KK0OkkkkkkkkkkkkkkkkkOkkkxxxxxdddddxxxxxxxxxkkkkkkkkkkkkkkOOkkkkkkkOOOOOOOOkOOO0Oxc:cokKKXK0kkxxxdoc;,'.',;;;;;;;,,,''''........... ...........................................,''l00dllllccoolc;,,,:ldk0K0OOkkkkkkkkkkkkkkkkkkkkxxxxxxxxxxxxxxxxxxxxkkxxxxxxxxkkkkkkkkkOOOOOOOOOOOOO0OOOdc::lk0KKKK0Okkkxxdl:;,''',,,,',,''''.............. ............................................''cOOl;;clllc:;:clc:;,,cxK0OOkkkkkkkkkkkkkkkkkkkkxxxxxxxxxxxxxxxxxxxxxxxxxxxkkkkkkkkkkOOO0OkOOkOOOkO000kocldxk0K0000Okxxxddlcc:;,,,;;;,'''.................. .............................................'lkOo;,,;;,,:cldxxdlc:cx0OkkkkkkkkkkkkkkkkkkkkkkkxxxxxxxxxxxxxxxxxxxxxxxxkkkkkkkkkO0OO0O0OOOkOOOkkO0OxoclodkO00OOkxdlllccccccccccccc:'....'................ .............................................,lO0xooc:::lodxxxxxxxxOOkxkkxkkkkkkkkkkkkkkkkkkkkkkxxxxxxxxkkkkkkkxxxxkkkkkkkkOOOO0K00OO00K0OOkkxolc;:loddxkkkxddolc:::;::c::cclllc::'....'................ .............................................'ck00OkkxxxxxxkkxkkkkOOkxkxxxkkkkkkkkkkkkkkkkkkkkkkxxkkkkkkkkkkkkkkkkkkkkkkOOOOOxddxxdddddddol:;,,,;:loollollllccc::::;;;:::cccllc:;;,....'................ .............................................,lk0OOkkkkkxxxxxkkkkkkkkxxxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkOOOOkxl:;:;;,;;;;::::c:cloodddlcccccccccc::::;;;;;;;;:::;,'.....'................. ............................................'cdxxxxxxxkkkkkkkkkkxxkkkxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkOOkkdlcloxollcccllllooodddddxdoccccccccccc::::;;;;;;;::;,...''....'............... ...........................................'cdxxxxxxxxxxxxxxxxxxxxxkxxxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkOOkxdoodxkOkxddooooooooddddddddolllcccc:::;;::ccc:::::cllc,'..'.................... ..........................................'cdxxxxxxxxxxxxxxxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkOOOOxlclodkkOkxdodddddddddddddddoollccccc:;;;;;;:::::::::ccc;,..'.................... .........................................;ldkkxxxxxxxxxxxxxxxxxxxxxxxxxdxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkOkOkd::odxkkkkkxddxxdxxxxxxxxxxxxxolccccc::c:;,,;;;;::::::::::,''''.................. ........................................'cxkkkkkkxxxxxxxxxxxxxxxxxxxxxddxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxl;,cdxkkkkOOkkkOOOOOOOOOOOOOOkkdlccc:::ccc;,,,,,;;::::::::::;,''.................. ........................................,cdxxkkxxxxxxxxxxxxxxxxxxxxxxddxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxoc;'.,lxxkkOO0OOOOO000KKKKKKKK0K0Okdlcc::;;::;;,,,,,;:::::::::;;;,'.................. ........................................';ldxxkkxxxxxkkxxxxxxxxxxxxxxxxkkkkkkkxkkkkkkkkkkkkkkkkkkkkkkkkkOOOkkxxdolc:;,';ldkkOOOOOOO000KKKKKKKKK000000Oxoolc:;;;;;;;,,,,;;:::::;;;;;;'................... ........................................';:ldoodoooodddddxkxxxxxxxxxxxkkkkkkkkkkkkkkkkkkOkkkkkkkkkOOkkxddollllllccccc::ldkOkkxxxkO0000KKKKKKK0OOOOkkkxddolc::;;;;;;;,,,;;::::;;;;;,'.................... .........................................';:lol::ccccc::cldxxxxxxxxxkkkkkkkkkkkkkkkOOOOOOkkkxxxdoolllc:;;:loodxxxxxxxddxkOOkxxxkkO0KKKK0KKK0OOOOkkdddxdooolcc:;,',;;,,;;::::;,,,,,'..................... ...........................................';cc,.';,,::;;;:odxxxxkkkkkkkkkkkkkkkkkkOOkkkxxdooc:;;;:ccloddxkkkkkkkkOOkkkkkkxxxkkkOO0KK00KK0OkkOOkxxdooooolooolcc;;;;;;;:::::;,'''''...................... ......................................................,,,,;:cdxxkkkkkkkkOOkkkkkkxxddoolc::;:clloddxkkkkkkkkkkkkkkkOkkkkkkxxxkOOOO00000KKKK0Okkxxxxxddolllloooolc:;;;:;;;;:;,''''........................ .........................................................',,;oxxkkkkkkkOkkxddoollcc::::::lodxxkkkkkkkkkkkkkkkkkkkkkkOOkxxddxk00000KK00KK0000Okxxdollollccllooollc:;;;,'',;;;,''......................... .............................................................,coxxxxdoolcc:::ccloooodddxxxxkkkkkkkkkkkkkkkkkkkkkkOOOOOkxdoodxkO000KK0KKK000kxxxdoccclcccccloooolc::;,,,'',:c:,'......................... ...............................................................;cc:;:::clooodxxxxxxxxxxxxxxkkkxxkkxxxkkkkkkkkOOOOOkkOOxdoodddxkO00K0000KKOxddxdolclllllcclooooollc:;:;;::cllc:,......................... ................................................................'';;:codxxxxxxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkOO00kxkkkdollooooxO0000000000Okxddolccllclcccloolloollccllllllllllc,........................ ..................................................................''':ldkxxxxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkOO00OdoxdollllllloxO0000000000Okdolcccclccc::clllccllllllllllcllcccc;'....................... ....................................................................',:dkkxxxxxdxddxxxxxxkkkkkkkkkkkkkkkkkOO00OkolllccllllllooxO00000000Okdolcccccccccccclllcc:cccllolcccccc:c::,....................... ....................................................................'''cdxkxxxxxxxxxxxkkkkkkkkkkkkkkkkkkkOOO00Okl:cccccccccllloxk00K00K00kxdxdoolcccccloooollcccccclllcccc::::::;'...................... ......................................................................';cdxxxxxxxxxxxxkkkkkkkkkkkkkkkkkkOO00000Ol;:cccccccccclldk0K000KKK0kxxkxxoloddoxxxxddolcclcc:cccccc::::::,....................... .......................................................................,:ldxxxxxxxxxxxkkkkkkkkkkkkkkkkkOOO000000x::::::ccccccllldOKK00KKK00OOOOOkkkkOkOOkkkxddoollc:ccccc:::;,,'........................ .......................................................................',:ldxxxxxxxxxxkkkkkkkkkkkkkkkkOOO0000000kl;,,;::ccc:cloooxO0KKKKK00KKKKKKK000OOkkkkxxdddolc:;:ccc:,'''.......................... .......................................................................'',;lxxxxxxxxxxkkkkkkkkkkkkkkkkOOO00000000ko:,,;:::::::coodxOKKKK0OO00OOOOOkkxxxxxddddoooollc:;;::;'............................. ........................................................................''':dxxxxxxxxxkkkkkkkkkkkkkkOOOO0000000000Okxoooc;;;::ccloxO00K0Oxdddddddooddddddooolllllooodolc;,'............................. ...........................................................................;ldxxxxxxxdxkkkkkkkkkkkkOOOOOO000K000000OOOO0Ooccc::ccldk000kddooooolllllollclloolllooddxkxoc,............................... ..........................................................................',:lddxxxxxdxkkkkkkkkkkkkOOOOO0000K000K000OOO00OkkxollccldO0Oxoooollllllccllcclooooooddxxdo:,................................. ...........................................................................',:odxxxxxxxxkkkkkkkkkkkOOOOOO0000000000000000000Oxoolllldkxdoooolllccccllllloooolc:::::;;,'................................. .............................................................................,codxxxxxxxxkkkkkkkkkkOOOOOO000000000000000000O0Okxololoddoooooolllllooodddddol:,.......................................... .............................................................................';lodxxxxxxxkkkkkkkkkOOOOOOO00000000000K000000O00OOkdllllddddooooooddxxxkOxxdol;'.......................................... ..............................................................................,:cdxxxxxxxxkkkkkkkkOOOOOOO000000000KKK000000000O00Oxdl:;:looooooodxxxkxdoc;::'........................................... ...............................................................................';codxxxxxxxkkkkkkkkOOOOOO000000000K0K0000000000000OOxl:,,;;:::cccllccc;',,,'............................................ .................................................................................,:odxxxxxxxkkkkkOOOOOOOOO00000000000000000000000000OOxo:,''',,;;:llldddddxxoc,......................................... .................................................................................',:oxxxxxxxxkkkkkOOOOOOO00000000K0000000000000000000000Odl:,''''',;:cloddooddo,........................................ ..................................................................................',;cdkxxxxxxkkkkOOOOOOO00000000000000K00K000000000000000OOxollc:;,,,,,,,,,,,:;........................................ ..........................................................................'......',,;;:dxxxxxxkkkOOOOOOOOO0000KKK00KKK0K00000000000000KK000000000Okdol:;,'.''.'......................................... .....................................................................',,;:ccllllcccc;,:ldxkxxxkkkOOOOOOOOO00000KK000KK00000000K00K0000K0000000000KKK00Oxdl:'......'..................................... ...............................................................'';:clooddkOOOOO0Oxdlc;,:oxxxxxxkkOOOOOOO00O0000000K000K00000000KKK0000KKK00000000K0KKKKKK0Od:'.......................................... ................................................''.....''.'',;:lodxxxxkxkkkkOOOOOOxdc:;;lxxxkxxkkkOOOOOO00O000000000K0000K00000KKK0000K0K0000000000KK0KKK000ko:'........................................ ..............................................'''''',,'';:looxxxkkkkkkkkkkkkOO000K0Ooc:;coxxxxxkkOOOOOOO00O00000000000K0000000000K00000000KK000KKK0KKKK0000000Oxl;',,,.................................. ..................................................';;::coxxkkkkkkkkkkkkkkkOO0KKK00XX0o::clxkxxxxkkOOOOOO00O0000000KKKKKKK000K0000000000000KK0000KKKKKKKKXK0000OO0Ol:olc;'............................... */
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"adminSigner","type":"address"},{"internalType":"address","name":"membershipAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TokenDataQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"membershipId","type":"uint256"},{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"claimSentient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freezeMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"},{"components":[{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"}],"internalType":"struct mirageDreamers.Coupon","name":"coupon","type":"tuple"}],"name":"holderMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"holderPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"},{"components":[{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"}],"internalType":"struct mirageDreamers.Coupon","name":"coupon","type":"tuple"}],"name":"intelligentMint","outputs":[],"stateMutability":"payable","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":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"memberPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"membershipContract","outputs":[{"internalType":"contract mirageContracts","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metadataFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"openHolderPresale","outputs":[],"stateMutability":"payable","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":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"},{"components":[{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"}],"internalType":"struct mirageDreamers.Coupon","name":"coupon","type":"tuple"}],"name":"partnerMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"phase","outputs":[{"internalType":"enum mirageDreamers.salePhase","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_URI","type":"string"}],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"sentientClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"},{"internalType":"uint256","name":"_membershipId","type":"uint256"}],"name":"sentientMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256[]","name":"numHeld","type":"uint256[]"}],"name":"setIntelAllotment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMember","type":"uint256"},{"internalType":"uint256","name":"_maxHolder","type":"uint256"},{"internalType":"uint256","name":"_maxPartner","type":"uint256"}],"name":"updateMintLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_public","type":"uint256"},{"internalType":"uint256","name":"_holder","type":"uint256"},{"internalType":"uint256","name":"_member","type":"uint256"}],"name":"updateMintPrices","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum mirageDreamers.salePhase","name":"phase_","type":"uint8"}],"name":"updateMintStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseTokenURI","type":"string"},{"internalType":"string","name":"_unrevealedURI","type":"string"}],"name":"updateURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"secondaryPayee","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60976001556003600a5566d529ae9e860000600b55668e1bc9bf040000600c5566470de4df820000600d556014600e556005600f819055601055611f40601355610120604052603560c0818152906200402c60e03960159062000063908262000282565b50601b805460ff60a01b191690553480156200007e57600080fd5b506040516200406138038062004061833981016040819052620000a1916200041a565b838360006003620000b3848262000282565b506004620000c2838262000282565b5060805250506001600755620000d8336200018b565b601c80546001600160a01b039283166001600160a01b031991821617909155911660a0526019805482167389568fc8d04b3f833209144b77f39b71078e3cb0179055601a805482167363400da86a6b42dac41075667cf871a5ef93802f179055601b8054909116733cf6e4ff99d616d44be53e90f74eae5d150cb72617905550506018805475b7ec7bbd2d2193b47027247fc666fb342d23c4b5000062010000600160b01b0319909116179055620004a9565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200020857607f821691505b6020821081036200022957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200027d57600081815260208120601f850160051c81016020861015620002585750805b601f850160051c820191505b81811015620002795782815560010162000264565b5050505b505050565b81516001600160401b038111156200029e576200029e620001dd565b620002b681620002af8454620001f3565b846200022f565b602080601f831160018114620002ee5760008415620002d55750858301515b600019600386901b1c1916600185901b17855562000279565b600085815260208120601f198616915b828110156200031f57888601518255948401946001909101908401620002fe565b50858210156200033e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082601f8301126200036057600080fd5b81516001600160401b03808211156200037d576200037d620001dd565b604051601f8301601f19908116603f01168101908282118183101715620003a857620003a8620001dd565b81604052838152602092508683858801011115620003c557600080fd5b600091505b83821015620003e95785820183015181830184015290820190620003ca565b600093810190920192909252949350505050565b80516001600160a01b03811681146200041557600080fd5b919050565b600080600080608085870312156200043157600080fd5b84516001600160401b03808211156200044957600080fd5b62000457888389016200034e565b955060208701519150808211156200046e57600080fd5b506200047d878288016200034e565b9350506200048e60408601620003fd565b91506200049e60608601620003fd565b905092959194509250565b60805160a051613b48620004e46000396000612903015260008181612cfb01528181612d2101528181612e200152612e460152613b486000f3fe6080604052600436106102725760003560e01c8063715018a61161014f578063b96afaa7116100c1578063d5abeb011161007a578063d5abeb0114610704578063e985e9c51461071a578063f2fde38b1461073a578063f6d1445b1461075a578063f905f1541461076d578063fb3cc6c21461078d57600080fd5b8063b96afaa71461065a578063c204642c14610687578063c29a3025146106a7578063c4ae3168146106ba578063c87b56dd146106cf578063d111515d146106ef57600080fd5b8063a00b43f911610113578063a00b43f914610596578063a22cb465146105b6578063a874258d146105d6578063a945bf80146105f6578063b1c9fe6e1461060c578063b88d4fde1461063a57600080fd5b8063715018a61461051b57806383a9bd80146105305780638da5cb5b146105435780639456fbcc1461056157806395d89b411461058157600080fd5b806349f6471d116101e857806355ea7328116101ac57806355ea73281461047a5780635ef3f776146104905780636352211e146104b0578063636e746b146104d05780636c0360eb146104e657806370a08231146104fb57600080fd5b806349f6471d146103f15780634c261247146104045780634efa8f171461042457806351cff8d91461043a57806351ec8d1e1461045a57600080fd5b806318160ddd1161023a57806318160ddd1461034857806323b872dd1461036b5780632db115441461038b578063406f7a951461039e57806342842e0e146103be57806346c5d449146103de57600080fd5b806301ffc9a71461027757806306fdde03146102ac578063081812fc146102ce578063095ea7b3146103065780631789e2d814610328575b600080fd5b34801561028357600080fd5b50610297610292366004612fb3565b6107ac565b60405190151581526020015b60405180910390f35b3480156102b857600080fd5b506102c16107fe565b6040516102a39190613027565b3480156102da57600080fd5b506102ee6102e936600461303a565b610890565b6040516001600160a01b0390911681526020016102a3565b34801561031257600080fd5b50610326610321366004613068565b6108d4565b005b34801561033457600080fd5b50610326610343366004613153565b610988565b34801561035457600080fd5b5061035d610a00565b6040519081526020016102a3565b34801561037757600080fd5b506103266103863660046131b7565b610a23565b61032661039936600461303a565b610a95565b3480156103aa57600080fd5b506103266103b93660046131f8565b610bea565b3480156103ca57600080fd5b506103266103d93660046131b7565b610c87565b6103266103ec36600461303a565b610ca2565b6103266103ff366004613224565b610ff2565b34801561041057600080fd5b5061032661041f3660046132ac565b6111f7565b34801561043057600080fd5b5061035d60165481565b34801561044657600080fd5b506103266104553660046132e1565b61121c565b34801561046657600080fd5b50601c546102ee906001600160a01b031681565b34801561048657600080fd5b5061035d600c5481565b34801561049c57600080fd5b506103266104ab3660046131f8565b6112b3565b3480156104bc57600080fd5b506102ee6104cb36600461303a565b6112c9565b3480156104dc57600080fd5b5061035d600d5481565b3480156104f257600080fd5b506102c161130a565b34801561050757600080fd5b5061035d6105163660046132e1565b611398565b34801561052757600080fd5b50610326611463565b61032661053e366004613224565b611477565b34801561054f57600080fd5b506008546001600160a01b03166102ee565b34801561056d57600080fd5b5061032661057c3660046132fe565b61171a565b34801561058d57600080fd5b506102c1611803565b3480156105a257600080fd5b506103266105b13660046133cf565b611812565b3480156105c257600080fd5b506103266105d1366004613498565b611918565b3480156105e257600080fd5b506103266105f13660046134c6565b6119ad565b34801561060257600080fd5b5061035d600b5481565b34801561061857600080fd5b50601b5461062d90600160a01b900460ff1681565b6040516102a391906134fe565b34801561064657600080fd5b50610326610655366004613526565b611c6e565b34801561066657600080fd5b5061035d61067536600461303a565b60096020526000908152604090205481565b34801561069357600080fd5b506103266106a23660046135a6565b611ce8565b6103266106b5366004613224565b611da1565b3480156106c657600080fd5b50610326611f8b565b3480156106db57600080fd5b506102c16106ea36600461303a565b611fa7565b3480156106fb57600080fd5b5061032661209d565b34801561071057600080fd5b5061035d60135481565b34801561072657600080fd5b506102976107353660046132fe565b6120ff565b34801561074657600080fd5b506103266107553660046132e1565b61212d565b6103266107683660046134c6565b6121a6565b34801561077957600080fd5b506103266107883660046135eb565b6124c2565b34801561079957600080fd5b5060185461029790610100900460ff1681565b60006001600160e01b031982166380ac58cd60e01b14806107dd57506001600160e01b03198216635b5e139f60e01b145b806107f857506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606003805461080d9061360c565b80601f01602080910402602001604051908101604052809291908181526020018280546108399061360c565b80156108865780601f1061085b57610100808354040283529160200191610886565b820191906000526020600020905b81548152906001019060200180831161086957829003601f168201915b5050505050905090565b600061089b8261256a565b6108b8576040516333d1c03960e21b815260040160405180910390fd5b506000908152600560205260409020546001600160a01b031690565b60006108df82612596565b6040805180820190915290546001600160a01b03808216808452600160a01b90920460a01b6001600160a01b03191660208401529192509084168190036109395760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610959575061095781336120ff565b155b15610977576040516367d9dca160e11b815260040160405180910390fd5b6109828484846125fd565b50505050565b61099061265e565b601854610100900460ff16156109e25760405162461bcd60e51b815260206004820152601260248201527126b2ba30b230ba309034b990333937bd32b760711b60448201526064015b60405180910390fd5b60176109ee8382613694565b5060156109fb8282613694565b505050565b60006002546097600154610a14919061376a565b610a1e919061377d565b905090565b6000610a2e82612596565b6040805180820190915290546001600160a01b0381168252600160a01b900460a01b6001600160a01b03191660208201529050610a6c3383836126b8565b610a8957604051632ce44b5f60e11b815260040160405180910390fd5b61098284848484612709565b600260075403610ab75760405162461bcd60e51b81526004016109d990613790565b600260075560185460ff1615610adf5760405162461bcd60e51b81526004016109d9906137c7565b6004601b54600160a01b900460ff166005811115610aff57610aff6134e8565b14610b4c5760405162461bcd60e51b815260206004820152601860248201527f4e6f7420696e207075626c69632073616c65207068617365000000000000000060448201526064016109d9565b600a811115610b6d5760405162461bcd60e51b81526004016109d9906137ef565b600b54610b7a908261383d565b341015610b995760405162461bcd60e51b81526004016109d99061385c565b601654610ba890611eaa61377d565b610bb0610a00565b610bba908361377d565b1115610bd85760405162461bcd60e51b81526004016109d9906138b9565b610be23382612813565b506001600755565b610bf261265e565b600e839055600f829055601081905560005b60115481101561098257600e5460128281548110610c2457610c246138f0565b9060005260206000200154610c39919061383d565b601f600060118481548110610c5057610c506138f0565b60009182526020808320909101546001600160a01b0316835282019290925260400190205580610c7f81613906565b915050610c04565b6109fb83838360405180602001604052806000815250611c6e565b600260075403610cc45760405162461bcd60e51b81526004016109d990613790565b600260075560185460ff1615610cec5760405162461bcd60e51b81526004016109d9906137c7565b600a811115610d0d5760405162461bcd60e51b81526004016109d9906137ef565b6003601b54600160a01b900460ff166005811115610d2d57610d2d6134e8565b10158015610d5857506004601b54600160a01b900460ff166005811115610d5657610d566134e8565b105b610d745760405162461bcd60e51b81526004016109d99061391f565b600c54610d81908261383d565b341015610da05760405162461bcd60e51b81526004016109d99061385c565b601654610daf90611eaa61377d565b610db7610a00565b610dc1908361377d565b1115610ddf5760405162461bcd60e51b81526004016109d9906138b9565b6019546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610e28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4c919061394d565b1180610ec25750601a546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610e9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec0919061394d565b115b80610f375750601b546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610f11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f35919061394d565b115b80610fb257506018546040516370a0823160e01b81523360048201526000916201000090046001600160a01b0316906370a0823190602401602060405180830381865afa158015610f8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb0919061394d565b115b610bd85760405162461bcd60e51b8152602060048201526011602482015270139bc81351c81d1bdad95b9cc81a195b19607a1b60448201526064016109d9565b6002600754036110145760405162461bcd60e51b81526004016109d990613790565b600260075560185460ff161561103c5760405162461bcd60e51b81526004016109d9906137c7565b6002601b54600160a01b900460ff16600581111561105c5761105c6134e8565b1015801561108757506004601b54600160a01b900460ff166005811115611085576110856134e8565b105b6110a35760405162461bcd60e51b81526004016109d99061391f565b600b546110b0908361383d565b3410156110cf5760405162461bcd60e51b81526004016109d99061385c565b6016546110de90611eaa61377d565b6110e6610a00565b6110f0908461377d565b111561110e5760405162461bcd60e51b81526004016109d9906138b9565b601054336000908152601d602052604090206003015461112f90849061377d565b111561114d5760405162461bcd60e51b81526004016109d990613966565b604080513360208201528082019190915260096060820152687365636f6e6461727960b81b608082015260009060a00160405160208183030381529060405280519060200120905061119f8183612831565b6111bb5760405162461bcd60e51b81526004016109d9906139ae565b336000908152601d6020526040812060030180548592906111dd90849061377d565b909155506111ed90503384612813565b5050600160075550565b6111ff61265e565b601761120b8282613694565b50506014805460ff19166001179055565b61122461265e565b6000600a61123347600961383d565b61123d91906139ec565b9050600061124c600a476139ec565b604051909150339083156108fc029084906000818181858888f1935050505015801561127c573d6000803e3d6000fd5b506040516001600160a01b0384169082156108fc029083906000818181858888f19350505050158015610982573d6000803e3d6000fd5b6112bb61265e565b600b92909255600c55600d55565b60006112d48261256a565b6112f157604051636f96cda160e11b815260040160405180910390fd5b6112fa82612596565b546001600160a01b031692915050565b601780546113179061360c565b80601f01602080910402602001604051908101604052809291908181526020018280546113439061360c565b80156113905780601f1061136557610100808354040283529160200191611390565b820191906000526020600020905b81548152906001019060200180831161137357829003601f168201915b505050505081565b60006001600160a01b0382166113c1576040516323d3ad8160e21b815260040160405180910390fd5b60006002546113ce610a00565b6113d990609661377d565b6113e3919061376a565b905060008060005b838111611459576113fb8161256a565b15611449576000818152602081905260409020546001600160a01b03168015611422578092505b866001600160a01b0316836001600160a01b0316036114475761144484613906565b93505b505b61145281613906565b90506113eb565b5090949350505050565b61146b61265e565b611475600061293f565b565b6002600754036114995760405162461bcd60e51b81526004016109d990613790565b600260075560185460ff16156114c15760405162461bcd60e51b81526004016109d9906137c7565b600d546114ce908361383d565b34101561151d5760405162461bcd60e51b815260206004820181905260248201527f4d7573742073656e64206d696e696d756d2076616c756520746f206d696e742160448201526064016109d9565b6001601b54600160a01b900460ff16600581111561153d5761153d6134e8565b1015801561156857506004601b54600160a01b900460ff166005811115611566576115666134e8565b105b6115af5760405162461bcd60e51b81526020600482015260186024820152774e6f7420696e206d656d6265722073616c6520706861736560401b60448201526064016109d9565b6016546115be90611eaa61377d565b6115c6610a00565b6115d0908461377d565b11156115ee5760405162461bcd60e51b81526004016109d9906138b9565b6040805133602082015280820191909152600660608201526536b2b6b132b960d11b608082015260009060a00160405160208183030381529060405280519060200120905061163d8183612831565b6116595760405162461bcd60e51b81526004016109d9906139ae565b336000908152601f6020526040812054908190036116765750600e545b336000908152601f6020526040902060010154819061169690869061377d565b11156116dd5760405162461bcd60e51b815260206004820152601660248201527515dbdd5b1908195e18d9595908185b1b1bdd1b595b9d60521b60448201526064016109d9565b336000908152601f6020526040812060010180548692906116ff90849061377d565b9091555061170f90503385612813565b505060016007555050565b61172261265e565b6040516370a0823160e01b81523060048201526001600160a01b0383169063a9059cbb90839083906370a0823190602401602060405180830381865afa158015611770573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611794919061394d565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156117df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fb9190613a00565b60606004805461080d9061360c565b61181a61265e565b805182511461186b5760405162461bcd60e51b815260206004820152601960248201527f4172726179206c656e6774687320646f6e2774206d617463680000000000000060448201526064016109d9565b815161187e906011906020850190612ee8565b508051611892906012906020840190612f4d565b5060005b82518110156109fb57600e54601282815481106118b5576118b56138f0565b90600052602060002001546118ca919061383d565b601f6000601184815481106118e1576118e16138f0565b60009182526020808320909101546001600160a01b031683528201929092526040019020558061191081613906565b915050611896565b336001600160a01b038316036119415760405163b06307db60e01b815260040160405180910390fd5b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6001601b54600160a01b900460ff1660058111156119cd576119cd6134e8565b1015611a0f5760405162461bcd60e51b815260206004820152601160248201527021b630b4b6b4b733903737ba1037b832b760791b60448201526064016109d9565b60328210611a6f5760405162461bcd60e51b815260206004820152602760248201527f4d75737420626520612053656e7469656e74204d656d626572736869702049446044820152662028302d34392960c81b60648201526084016109d9565b601c54604051627eeac760e11b8152336004820152602481018490526001600160a01b039091169062fdd58e90604401602060405180830381865afa158015611abc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae0919061394d565b600114611b3e5760405162461bcd60e51b815260206004820152602660248201527f57616c6c657420646f6573206e6f74206f776e2074686973206d656d626572736044820152651a1a5c08125160d21b60648201526084016109d9565b600a54600083815260096020526040902054611b5b90839061377d565b1115611bc05760405162461bcd60e51b815260206004820152602e60248201527f53656e7469656e74204d656d62657273686970732063616e206f6e6c7920636c60448201526d185a5b480cc81a5b881d1bdd185b60921b60648201526084016109d9565b609681601654611bd0919061377d565b1115611c165760405162461bcd60e51b8152602060048201526015602482015274105b1b081a185d99481899595b8818db185a5b5959605a1b60448201526064016109d9565b60008281526009602052604081208054839290611c3490849061377d565b9091555050601654611c53903390611c4d90600161377d565b83612991565b8060166000828254611c65919061377d565b90915550505050565b6000611c7983612596565b6040805180820190915290546001600160a01b0381168252600160a01b900460a01b6001600160a01b03191660208201529050611cb73384836126b8565b611cd457604051632ce44b5f60e11b815260040160405180910390fd5b611ce185858584866129ac565b5050505050565b611cf061265e565b601654611cff90611eaa61377d565b81611d08610a00565b611d12919061377d565b1115611d605760405162461bcd60e51b815260206004820152601d60248201527f45786365656473206d6178696d756d20746f6b656e20737570706c792e00000060448201526064016109d9565b60005b82518110156109fb57611d8f838281518110611d8157611d816138f0565b602002602001015183612813565b80611d9981613906565b915050611d63565b600260075403611dc35760405162461bcd60e51b81526004016109d990613790565b600260075560185460ff1615611deb5760405162461bcd60e51b81526004016109d9906137c7565b6002601b54600160a01b900460ff166005811115611e0b57611e0b6134e8565b10158015611e3657506004601b54600160a01b900460ff166005811115611e3457611e346134e8565b105b611e525760405162461bcd60e51b81526004016109d99061391f565b600c54611e5f908361383d565b341015611e7e5760405162461bcd60e51b81526004016109d99061385c565b601654611e8d90611eaa61377d565b611e95610a00565b611e9f908461377d565b1115611ebd5760405162461bcd60e51b81526004016109d9906138b9565b600f54336000908152601d6020526040902060020154611ede90849061377d565b1115611efc5760405162461bcd60e51b81526004016109d990613966565b604080513360208201528082019190915260086060820152671cdd185b99185c9960c21b608082015260009060a001604051602081830303815290604052805190602001209050611f4d8183612831565b611f695760405162461bcd60e51b81526004016109d9906139ae565b336000908152601d6020526040812060020180548592906111dd90849061377d565b611f9361265e565b6018805460ff19811660ff90911615179055565b6060611fb28261256a565b611fcf57604051630a14c4b560e41b815260040160405180910390fd5b60145460ff1661206b5760158054611fe69061360c565b80601f01602080910402602001604051908101604052809291908181526020018280546120129061360c565b801561205f5780601f106120345761010080835404028352916020019161205f565b820191906000526020600020905b81548152906001019060200180831161204257829003601f168201915b50505050509050919050565b6017612076836129f8565b604051602001612087929190613a1d565b6040516020818303038152906040529050919050565b6120a561265e565b601854610100900460ff16156120ee5760405162461bcd60e51b815260206004820152600e60248201526d20b63932b0b23c90333937bd32b760911b60448201526064016109d9565b6018805461ff001916610100179055565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b61213561265e565b6001600160a01b03811661219a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109d9565b6121a38161293f565b50565b6002600754036121c85760405162461bcd60e51b81526004016109d990613790565b60026007556032811061221d5760405162461bcd60e51b815260206004820152601760248201527f4e6f7420612076616c69642053656e7469656e7420494400000000000000000060448201526064016109d9565b60185460ff16156122405760405162461bcd60e51b81526004016109d9906137c7565b6001601b54600160a01b900460ff166005811115612260576122606134e8565b1015801561228b57506004601b54600160a01b900460ff166005811115612289576122896134e8565b105b6122d25760405162461bcd60e51b81526020600482015260186024820152774e6f7420696e206d656d6265722073616c6520706861736560401b60448201526064016109d9565b601c54604051627eeac760e11b8152336004820152602481018390526000916001600160a01b03169062fdd58e90604401602060405180830381865afa158015612320573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612344919061394d565b1161239d5760405162461bcd60e51b815260206004820152602360248201527f4e6f206d656d6265727368697020746f6b656e7320696e20746869732077616c6044820152621b195d60ea1b60648201526084016109d9565b600d546123aa908361383d565b3410156123c95760405162461bcd60e51b81526004016109d99061385c565b6016546123d890611eaa61377d565b6123e0610a00565b6123ea908461377d565b11156124085760405162461bcd60e51b81526004016109d9906138b9565b600e546000828152601e602052604090206001015461242890849061377d565b11156124885760405162461bcd60e51b815260206004820152602960248201527f576f756c6420657863656564206d617820616c6c6f746d656e7420666f72207460448201526868697320706861736560b81b60648201526084016109d9565b6000818152601e6020526040812060010180548492906124a990849061377d565b909155506124b990503383612813565b50506001600755565b6124ca61265e565b601b54600160a01b900460ff1660058111156124e8576124e86134e8565b60ff168160058111156124fd576124fd6134e8565b60ff161161253d5760405162461bcd60e51b815260206004820152600d60248201526c496e637265617365206f6e6c7960981b60448201526064016109d9565b601b805482919060ff60a01b1916600160a01b836005811115612562576125626134e8565b021790555050565b6000609682111561257d57506001541190565b6096821161258e5750600254101590565b506000919050565b60006125a18261256a565b6125be576040516319086e6360e11b815260040160405180910390fd5b6000828152602081905260409020825b81546001600160a01b03166125f65760001901600081815260208190526040902091506125ce565b5092915050565b60008281526005602052604080822080546001600160a01b0319166001600160a01b038781169182179092558451925186949193909216917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a4505050565b6008546001600160a01b031633146114755760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109d9565b80516000906001600160a01b0385811690821614806126dc57506126dc81866120ff565b806127005750846001600160a01b03166126f585610890565b6001600160a01b0316145b95945050505050565b836001600160a01b031681600001516001600160a01b03161461273e5760405162a1148160e81b815260040160405180910390fd5b6001600160a01b03831661276557604051633a954ecd60e21b815260040160405180910390fd5b612771600083836125fd565b6001820161277e8161256a565b156127c157600081815260208190526040902080546001600160a01b03166127bf578251602084015160a01c600160a01b026001600160a01b039091161781555b505b506000828152602081905260408082206001600160a01b0386811680835592519193869392918916917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4611ce1565b61282d828260405180602001604052806000815250612b01565b5050565b6000806001848460400151856000015186602001516040516000815260200160405260405161287c949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa15801561289e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166129015760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016109d9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03161491505092915050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6109fb83838360405180602001604052806000815250612b5d565b6129b885858585612709565b6001600160a01b0384163b151580156129da57506129d885858584612bb9565b155b15611ce1576040516368d2bf6b60e11b815260040160405180910390fd5b606081600003612a1f5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612a495780612a3381613906565b9150612a429050600a836139ec565b9150612a23565b60008167ffffffffffffffff811115612a6457612a64613094565b6040519080825280601f01601f191660200182016040528015612a8e576020820181803683370190505b5090505b8415612af957612aa360018361376a565b9150612ab0600a86613aa4565b612abb90603061377d565b60f81b818381518110612ad057612ad06138f0565b60200101906001600160f81b031916908160001a905350612af2600a866139ec565b9450612a92565b949350505050565b600154612b0e8484612ca4565b6001600160a01b0384163b156109825760005b83811015611ce157612b3860008683850186612bb9565b612b55576040516368d2bf6b60e11b815260040160405180910390fd5b600101612b21565b612b68848484612dcb565b8160026000828254612b7a919061377d565b90915550506001600160a01b0384163b1561098257612b9c6000858584612bb9565b610982576040516368d2bf6b60e11b815260040160405180910390fd5b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290612bee903390899088908890600401613ab8565b6020604051808303816000875af1925050508015612c29575060408051601f3d908101601f19168201909252612c2691810190613af5565b60015b612c87573d808015612c57576040519150601f19603f3d011682016040523d82523d6000602084013e612c5c565b606091505b508051600003612c7f576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b6001600160a01b038216612cca57604051622e076360e81b815260040160405180910390fd5b80600003612ceb5760405163b562e8dd60e01b815260040160405180910390fd5b60015460005b82811015612dbd577f000000000000000000000000000000000000000000000000000000000000000015612d55577f00000000000000000000000000000000000000000000000000000000000000008181612d4e57612d4e6139d6565b0615612d58565b80155b15612d7b5781810160009081526020819052604090206001600160a01b03851690555b604051828201906001600160a01b038616906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4600101612cf1565b506001805483019055505050565b6001600160a01b038316612df157604051622e076360e81b815260040160405180910390fd5b80600003612e125760405163b562e8dd60e01b815260040160405180910390fd5b8160005b82811015612ee2577f000000000000000000000000000000000000000000000000000000000000000015612e7a577f00000000000000000000000000000000000000000000000000000000000000008181612e7357612e736139d6565b0615612e7d565b80155b15612ea05781810160009081526020819052604090206001600160a01b03861690555b604051828201906001600160a01b038716906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4600101612e16565b50610982565b828054828255906000526020600020908101928215612f3d579160200282015b82811115612f3d57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612f08565b50612f49929150612f88565b5090565b828054828255906000526020600020908101928215612f3d579160200282015b82811115612f3d578251825591602001919060010190612f6d565b5b80821115612f495760008155600101612f89565b6001600160e01b0319811681146121a357600080fd5b600060208284031215612fc557600080fd5b8135612fd081612f9d565b9392505050565b60005b83811015612ff2578181015183820152602001612fda565b50506000910152565b60008151808452613013816020860160208601612fd7565b601f01601f19169290920160200192915050565b602081526000612fd06020830184612ffb565b60006020828403121561304c57600080fd5b5035919050565b6001600160a01b03811681146121a357600080fd5b6000806040838503121561307b57600080fd5b823561308681613053565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156130d3576130d3613094565b604052919050565b600067ffffffffffffffff8311156130f5576130f5613094565b613108601f8401601f19166020016130aa565b905082815283838301111561311c57600080fd5b828260208301376000602084830101529392505050565b600082601f83011261314457600080fd5b612fd0838335602085016130db565b6000806040838503121561316657600080fd5b823567ffffffffffffffff8082111561317e57600080fd5b61318a86838701613133565b935060208501359150808211156131a057600080fd5b506131ad85828601613133565b9150509250929050565b6000806000606084860312156131cc57600080fd5b83356131d781613053565b925060208401356131e781613053565b929592945050506040919091013590565b60008060006060848603121561320d57600080fd5b505081359360208301359350604090920135919050565b600080828403608081121561323857600080fd5b833592506060601f198201121561324e57600080fd5b506040516060810181811067ffffffffffffffff8211171561327257613272613094565b80604052506020840135815260408401356020820152606084013560ff8116811461329c57600080fd5b6040820152919491935090915050565b6000602082840312156132be57600080fd5b813567ffffffffffffffff8111156132d557600080fd5b612af984828501613133565b6000602082840312156132f357600080fd5b8135612fd081613053565b6000806040838503121561331157600080fd5b823561331c81613053565b9150602083013561332c81613053565b809150509250929050565b600067ffffffffffffffff82111561335157613351613094565b5060051b60200190565b600082601f83011261336c57600080fd5b8135602061338161337c83613337565b6130aa565b82815260059290921b840181019181810190868411156133a057600080fd5b8286015b848110156133c45780356133b781613053565b83529183019183016133a4565b509695505050505050565b600080604083850312156133e257600080fd5b823567ffffffffffffffff808211156133fa57600080fd5b6134068683870161335b565b935060209150818501358181111561341d57600080fd5b85019050601f8101861361343057600080fd5b803561343e61337c82613337565b81815260059190911b8201830190838101908883111561345d57600080fd5b928401925b8284101561347b57833582529284019290840190613462565b80955050505050509250929050565b80151581146121a357600080fd5b600080604083850312156134ab57600080fd5b82356134b681613053565b9150602083013561332c8161348a565b600080604083850312156134d957600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b602081016006831061352057634e487b7160e01b600052602160045260246000fd5b91905290565b6000806000806080858703121561353c57600080fd5b843561354781613053565b9350602085013561355781613053565b925060408501359150606085013567ffffffffffffffff81111561357a57600080fd5b8501601f8101871361358b57600080fd5b61359a878235602084016130db565b91505092959194509250565b600080604083850312156135b957600080fd5b823567ffffffffffffffff8111156135d057600080fd5b6135dc8582860161335b565b95602094909401359450505050565b6000602082840312156135fd57600080fd5b813560068110612fd057600080fd5b600181811c9082168061362057607f821691505b60208210810361364057634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156109fb57600081815260208120601f850160051c8101602086101561366d5750805b601f850160051c820191505b8181101561368c57828155600101613679565b505050505050565b815167ffffffffffffffff8111156136ae576136ae613094565b6136c2816136bc845461360c565b84613646565b602080601f8311600181146136f757600084156136df5750858301515b600019600386901b1c1916600185901b17855561368c565b600085815260208120601f198616915b8281101561372657888601518255948401946001909101908401613707565b50858210156137445787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b818103818111156107f8576107f8613754565b808201808211156107f8576107f8613754565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252600e908201526d135a5b9d1a5b99c81c185d5cd95960921b604082015260600190565b6020808252602e908201527f43616e2774206d696e74206d6f7265207468616e20313020746f6b656e73207060408201526d32b9103a3930b739b0b1ba34b7b760911b606082015260800190565b600081600019048311821515161561385757613857613754565b500290565b6020808252603a908201527f496e73756666696369656e74205061796d656e743a20416d6f756e74206f662060408201527f45746865722073656e74206973206e6f7420636f72726563742e000000000000606082015260800190565b6020808252601f908201527f4d696e74696e6720776f756c6420657863656564206d617820737570706c7900604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006001820161391857613918613754565b5060010190565b6020808252601490820152734e6f7420696e2070726573616c6520706861736560601b604082015260600190565b60006020828403121561395f57600080fd5b5051919050565b60208082526028908201527f4d696e746564206d617820616c6c6f746d656e7420666f7220746869732073616040820152676c6520706861736560c01b606082015260800190565b6020808252600e908201526d24b73b30b634b21031b7bab837b760911b604082015260600190565b634e487b7160e01b600052601260045260246000fd5b6000826139fb576139fb6139d6565b500490565b600060208284031215613a1257600080fd5b8151612fd08161348a565b6000808454613a2b8161360c565b60018281168015613a435760018114613a5857613a87565b60ff1984168752821515830287019450613a87565b8860005260208060002060005b85811015613a7e5781548a820152908401908201613a65565b50505082870194505b505050508351613a9b818360208801612fd7565b01949350505050565b600082613ab357613ab36139d6565b500690565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613aeb90830184612ffb565b9695505050505050565b600060208284031215613b0757600080fd5b8151612fd081612f9d56fea26469706673582212209fcd5413b580d474c9eebfd49794b4c055a5d06b3595e9d3e131efa8418f36aa64736f6c63430008100033697066733a2f2f516d516f42535366385a76765062556656426e624b425a696d39704a766745764a53357a706677436b7032486757000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000001539330800eb03c4da74cdd25c5dad03a7ec36230000000000000000000000000170227514a274826685bf81aed06e421817557200000000000000000000000000000000000000000000000000000000000000174d69726167652047616c6c65727920447265616d65727300000000000000000000000000000000000000000000000000000000000000000000000000000000034d47440000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102725760003560e01c8063715018a61161014f578063b96afaa7116100c1578063d5abeb011161007a578063d5abeb0114610704578063e985e9c51461071a578063f2fde38b1461073a578063f6d1445b1461075a578063f905f1541461076d578063fb3cc6c21461078d57600080fd5b8063b96afaa71461065a578063c204642c14610687578063c29a3025146106a7578063c4ae3168146106ba578063c87b56dd146106cf578063d111515d146106ef57600080fd5b8063a00b43f911610113578063a00b43f914610596578063a22cb465146105b6578063a874258d146105d6578063a945bf80146105f6578063b1c9fe6e1461060c578063b88d4fde1461063a57600080fd5b8063715018a61461051b57806383a9bd80146105305780638da5cb5b146105435780639456fbcc1461056157806395d89b411461058157600080fd5b806349f6471d116101e857806355ea7328116101ac57806355ea73281461047a5780635ef3f776146104905780636352211e146104b0578063636e746b146104d05780636c0360eb146104e657806370a08231146104fb57600080fd5b806349f6471d146103f15780634c261247146104045780634efa8f171461042457806351cff8d91461043a57806351ec8d1e1461045a57600080fd5b806318160ddd1161023a57806318160ddd1461034857806323b872dd1461036b5780632db115441461038b578063406f7a951461039e57806342842e0e146103be57806346c5d449146103de57600080fd5b806301ffc9a71461027757806306fdde03146102ac578063081812fc146102ce578063095ea7b3146103065780631789e2d814610328575b600080fd5b34801561028357600080fd5b50610297610292366004612fb3565b6107ac565b60405190151581526020015b60405180910390f35b3480156102b857600080fd5b506102c16107fe565b6040516102a39190613027565b3480156102da57600080fd5b506102ee6102e936600461303a565b610890565b6040516001600160a01b0390911681526020016102a3565b34801561031257600080fd5b50610326610321366004613068565b6108d4565b005b34801561033457600080fd5b50610326610343366004613153565b610988565b34801561035457600080fd5b5061035d610a00565b6040519081526020016102a3565b34801561037757600080fd5b506103266103863660046131b7565b610a23565b61032661039936600461303a565b610a95565b3480156103aa57600080fd5b506103266103b93660046131f8565b610bea565b3480156103ca57600080fd5b506103266103d93660046131b7565b610c87565b6103266103ec36600461303a565b610ca2565b6103266103ff366004613224565b610ff2565b34801561041057600080fd5b5061032661041f3660046132ac565b6111f7565b34801561043057600080fd5b5061035d60165481565b34801561044657600080fd5b506103266104553660046132e1565b61121c565b34801561046657600080fd5b50601c546102ee906001600160a01b031681565b34801561048657600080fd5b5061035d600c5481565b34801561049c57600080fd5b506103266104ab3660046131f8565b6112b3565b3480156104bc57600080fd5b506102ee6104cb36600461303a565b6112c9565b3480156104dc57600080fd5b5061035d600d5481565b3480156104f257600080fd5b506102c161130a565b34801561050757600080fd5b5061035d6105163660046132e1565b611398565b34801561052757600080fd5b50610326611463565b61032661053e366004613224565b611477565b34801561054f57600080fd5b506008546001600160a01b03166102ee565b34801561056d57600080fd5b5061032661057c3660046132fe565b61171a565b34801561058d57600080fd5b506102c1611803565b3480156105a257600080fd5b506103266105b13660046133cf565b611812565b3480156105c257600080fd5b506103266105d1366004613498565b611918565b3480156105e257600080fd5b506103266105f13660046134c6565b6119ad565b34801561060257600080fd5b5061035d600b5481565b34801561061857600080fd5b50601b5461062d90600160a01b900460ff1681565b6040516102a391906134fe565b34801561064657600080fd5b50610326610655366004613526565b611c6e565b34801561066657600080fd5b5061035d61067536600461303a565b60096020526000908152604090205481565b34801561069357600080fd5b506103266106a23660046135a6565b611ce8565b6103266106b5366004613224565b611da1565b3480156106c657600080fd5b50610326611f8b565b3480156106db57600080fd5b506102c16106ea36600461303a565b611fa7565b3480156106fb57600080fd5b5061032661209d565b34801561071057600080fd5b5061035d60135481565b34801561072657600080fd5b506102976107353660046132fe565b6120ff565b34801561074657600080fd5b506103266107553660046132e1565b61212d565b6103266107683660046134c6565b6121a6565b34801561077957600080fd5b506103266107883660046135eb565b6124c2565b34801561079957600080fd5b5060185461029790610100900460ff1681565b60006001600160e01b031982166380ac58cd60e01b14806107dd57506001600160e01b03198216635b5e139f60e01b145b806107f857506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606003805461080d9061360c565b80601f01602080910402602001604051908101604052809291908181526020018280546108399061360c565b80156108865780601f1061085b57610100808354040283529160200191610886565b820191906000526020600020905b81548152906001019060200180831161086957829003601f168201915b5050505050905090565b600061089b8261256a565b6108b8576040516333d1c03960e21b815260040160405180910390fd5b506000908152600560205260409020546001600160a01b031690565b60006108df82612596565b6040805180820190915290546001600160a01b03808216808452600160a01b90920460a01b6001600160a01b03191660208401529192509084168190036109395760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610959575061095781336120ff565b155b15610977576040516367d9dca160e11b815260040160405180910390fd5b6109828484846125fd565b50505050565b61099061265e565b601854610100900460ff16156109e25760405162461bcd60e51b815260206004820152601260248201527126b2ba30b230ba309034b990333937bd32b760711b60448201526064015b60405180910390fd5b60176109ee8382613694565b5060156109fb8282613694565b505050565b60006002546097600154610a14919061376a565b610a1e919061377d565b905090565b6000610a2e82612596565b6040805180820190915290546001600160a01b0381168252600160a01b900460a01b6001600160a01b03191660208201529050610a6c3383836126b8565b610a8957604051632ce44b5f60e11b815260040160405180910390fd5b61098284848484612709565b600260075403610ab75760405162461bcd60e51b81526004016109d990613790565b600260075560185460ff1615610adf5760405162461bcd60e51b81526004016109d9906137c7565b6004601b54600160a01b900460ff166005811115610aff57610aff6134e8565b14610b4c5760405162461bcd60e51b815260206004820152601860248201527f4e6f7420696e207075626c69632073616c65207068617365000000000000000060448201526064016109d9565b600a811115610b6d5760405162461bcd60e51b81526004016109d9906137ef565b600b54610b7a908261383d565b341015610b995760405162461bcd60e51b81526004016109d99061385c565b601654610ba890611eaa61377d565b610bb0610a00565b610bba908361377d565b1115610bd85760405162461bcd60e51b81526004016109d9906138b9565b610be23382612813565b506001600755565b610bf261265e565b600e839055600f829055601081905560005b60115481101561098257600e5460128281548110610c2457610c246138f0565b9060005260206000200154610c39919061383d565b601f600060118481548110610c5057610c506138f0565b60009182526020808320909101546001600160a01b0316835282019290925260400190205580610c7f81613906565b915050610c04565b6109fb83838360405180602001604052806000815250611c6e565b600260075403610cc45760405162461bcd60e51b81526004016109d990613790565b600260075560185460ff1615610cec5760405162461bcd60e51b81526004016109d9906137c7565b600a811115610d0d5760405162461bcd60e51b81526004016109d9906137ef565b6003601b54600160a01b900460ff166005811115610d2d57610d2d6134e8565b10158015610d5857506004601b54600160a01b900460ff166005811115610d5657610d566134e8565b105b610d745760405162461bcd60e51b81526004016109d99061391f565b600c54610d81908261383d565b341015610da05760405162461bcd60e51b81526004016109d99061385c565b601654610daf90611eaa61377d565b610db7610a00565b610dc1908361377d565b1115610ddf5760405162461bcd60e51b81526004016109d9906138b9565b6019546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610e28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4c919061394d565b1180610ec25750601a546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610e9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec0919061394d565b115b80610f375750601b546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610f11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f35919061394d565b115b80610fb257506018546040516370a0823160e01b81523360048201526000916201000090046001600160a01b0316906370a0823190602401602060405180830381865afa158015610f8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb0919061394d565b115b610bd85760405162461bcd60e51b8152602060048201526011602482015270139bc81351c81d1bdad95b9cc81a195b19607a1b60448201526064016109d9565b6002600754036110145760405162461bcd60e51b81526004016109d990613790565b600260075560185460ff161561103c5760405162461bcd60e51b81526004016109d9906137c7565b6002601b54600160a01b900460ff16600581111561105c5761105c6134e8565b1015801561108757506004601b54600160a01b900460ff166005811115611085576110856134e8565b105b6110a35760405162461bcd60e51b81526004016109d99061391f565b600b546110b0908361383d565b3410156110cf5760405162461bcd60e51b81526004016109d99061385c565b6016546110de90611eaa61377d565b6110e6610a00565b6110f0908461377d565b111561110e5760405162461bcd60e51b81526004016109d9906138b9565b601054336000908152601d602052604090206003015461112f90849061377d565b111561114d5760405162461bcd60e51b81526004016109d990613966565b604080513360208201528082019190915260096060820152687365636f6e6461727960b81b608082015260009060a00160405160208183030381529060405280519060200120905061119f8183612831565b6111bb5760405162461bcd60e51b81526004016109d9906139ae565b336000908152601d6020526040812060030180548592906111dd90849061377d565b909155506111ed90503384612813565b5050600160075550565b6111ff61265e565b601761120b8282613694565b50506014805460ff19166001179055565b61122461265e565b6000600a61123347600961383d565b61123d91906139ec565b9050600061124c600a476139ec565b604051909150339083156108fc029084906000818181858888f1935050505015801561127c573d6000803e3d6000fd5b506040516001600160a01b0384169082156108fc029083906000818181858888f19350505050158015610982573d6000803e3d6000fd5b6112bb61265e565b600b92909255600c55600d55565b60006112d48261256a565b6112f157604051636f96cda160e11b815260040160405180910390fd5b6112fa82612596565b546001600160a01b031692915050565b601780546113179061360c565b80601f01602080910402602001604051908101604052809291908181526020018280546113439061360c565b80156113905780601f1061136557610100808354040283529160200191611390565b820191906000526020600020905b81548152906001019060200180831161137357829003601f168201915b505050505081565b60006001600160a01b0382166113c1576040516323d3ad8160e21b815260040160405180910390fd5b60006002546113ce610a00565b6113d990609661377d565b6113e3919061376a565b905060008060005b838111611459576113fb8161256a565b15611449576000818152602081905260409020546001600160a01b03168015611422578092505b866001600160a01b0316836001600160a01b0316036114475761144484613906565b93505b505b61145281613906565b90506113eb565b5090949350505050565b61146b61265e565b611475600061293f565b565b6002600754036114995760405162461bcd60e51b81526004016109d990613790565b600260075560185460ff16156114c15760405162461bcd60e51b81526004016109d9906137c7565b600d546114ce908361383d565b34101561151d5760405162461bcd60e51b815260206004820181905260248201527f4d7573742073656e64206d696e696d756d2076616c756520746f206d696e742160448201526064016109d9565b6001601b54600160a01b900460ff16600581111561153d5761153d6134e8565b1015801561156857506004601b54600160a01b900460ff166005811115611566576115666134e8565b105b6115af5760405162461bcd60e51b81526020600482015260186024820152774e6f7420696e206d656d6265722073616c6520706861736560401b60448201526064016109d9565b6016546115be90611eaa61377d565b6115c6610a00565b6115d0908461377d565b11156115ee5760405162461bcd60e51b81526004016109d9906138b9565b6040805133602082015280820191909152600660608201526536b2b6b132b960d11b608082015260009060a00160405160208183030381529060405280519060200120905061163d8183612831565b6116595760405162461bcd60e51b81526004016109d9906139ae565b336000908152601f6020526040812054908190036116765750600e545b336000908152601f6020526040902060010154819061169690869061377d565b11156116dd5760405162461bcd60e51b815260206004820152601660248201527515dbdd5b1908195e18d9595908185b1b1bdd1b595b9d60521b60448201526064016109d9565b336000908152601f6020526040812060010180548692906116ff90849061377d565b9091555061170f90503385612813565b505060016007555050565b61172261265e565b6040516370a0823160e01b81523060048201526001600160a01b0383169063a9059cbb90839083906370a0823190602401602060405180830381865afa158015611770573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611794919061394d565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156117df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fb9190613a00565b60606004805461080d9061360c565b61181a61265e565b805182511461186b5760405162461bcd60e51b815260206004820152601960248201527f4172726179206c656e6774687320646f6e2774206d617463680000000000000060448201526064016109d9565b815161187e906011906020850190612ee8565b508051611892906012906020840190612f4d565b5060005b82518110156109fb57600e54601282815481106118b5576118b56138f0565b90600052602060002001546118ca919061383d565b601f6000601184815481106118e1576118e16138f0565b60009182526020808320909101546001600160a01b031683528201929092526040019020558061191081613906565b915050611896565b336001600160a01b038316036119415760405163b06307db60e01b815260040160405180910390fd5b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6001601b54600160a01b900460ff1660058111156119cd576119cd6134e8565b1015611a0f5760405162461bcd60e51b815260206004820152601160248201527021b630b4b6b4b733903737ba1037b832b760791b60448201526064016109d9565b60328210611a6f5760405162461bcd60e51b815260206004820152602760248201527f4d75737420626520612053656e7469656e74204d656d626572736869702049446044820152662028302d34392960c81b60648201526084016109d9565b601c54604051627eeac760e11b8152336004820152602481018490526001600160a01b039091169062fdd58e90604401602060405180830381865afa158015611abc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae0919061394d565b600114611b3e5760405162461bcd60e51b815260206004820152602660248201527f57616c6c657420646f6573206e6f74206f776e2074686973206d656d626572736044820152651a1a5c08125160d21b60648201526084016109d9565b600a54600083815260096020526040902054611b5b90839061377d565b1115611bc05760405162461bcd60e51b815260206004820152602e60248201527f53656e7469656e74204d656d62657273686970732063616e206f6e6c7920636c60448201526d185a5b480cc81a5b881d1bdd185b60921b60648201526084016109d9565b609681601654611bd0919061377d565b1115611c165760405162461bcd60e51b8152602060048201526015602482015274105b1b081a185d99481899595b8818db185a5b5959605a1b60448201526064016109d9565b60008281526009602052604081208054839290611c3490849061377d565b9091555050601654611c53903390611c4d90600161377d565b83612991565b8060166000828254611c65919061377d565b90915550505050565b6000611c7983612596565b6040805180820190915290546001600160a01b0381168252600160a01b900460a01b6001600160a01b03191660208201529050611cb73384836126b8565b611cd457604051632ce44b5f60e11b815260040160405180910390fd5b611ce185858584866129ac565b5050505050565b611cf061265e565b601654611cff90611eaa61377d565b81611d08610a00565b611d12919061377d565b1115611d605760405162461bcd60e51b815260206004820152601d60248201527f45786365656473206d6178696d756d20746f6b656e20737570706c792e00000060448201526064016109d9565b60005b82518110156109fb57611d8f838281518110611d8157611d816138f0565b602002602001015183612813565b80611d9981613906565b915050611d63565b600260075403611dc35760405162461bcd60e51b81526004016109d990613790565b600260075560185460ff1615611deb5760405162461bcd60e51b81526004016109d9906137c7565b6002601b54600160a01b900460ff166005811115611e0b57611e0b6134e8565b10158015611e3657506004601b54600160a01b900460ff166005811115611e3457611e346134e8565b105b611e525760405162461bcd60e51b81526004016109d99061391f565b600c54611e5f908361383d565b341015611e7e5760405162461bcd60e51b81526004016109d99061385c565b601654611e8d90611eaa61377d565b611e95610a00565b611e9f908461377d565b1115611ebd5760405162461bcd60e51b81526004016109d9906138b9565b600f54336000908152601d6020526040902060020154611ede90849061377d565b1115611efc5760405162461bcd60e51b81526004016109d990613966565b604080513360208201528082019190915260086060820152671cdd185b99185c9960c21b608082015260009060a001604051602081830303815290604052805190602001209050611f4d8183612831565b611f695760405162461bcd60e51b81526004016109d9906139ae565b336000908152601d6020526040812060020180548592906111dd90849061377d565b611f9361265e565b6018805460ff19811660ff90911615179055565b6060611fb28261256a565b611fcf57604051630a14c4b560e41b815260040160405180910390fd5b60145460ff1661206b5760158054611fe69061360c565b80601f01602080910402602001604051908101604052809291908181526020018280546120129061360c565b801561205f5780601f106120345761010080835404028352916020019161205f565b820191906000526020600020905b81548152906001019060200180831161204257829003601f168201915b50505050509050919050565b6017612076836129f8565b604051602001612087929190613a1d565b6040516020818303038152906040529050919050565b6120a561265e565b601854610100900460ff16156120ee5760405162461bcd60e51b815260206004820152600e60248201526d20b63932b0b23c90333937bd32b760911b60448201526064016109d9565b6018805461ff001916610100179055565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b61213561265e565b6001600160a01b03811661219a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109d9565b6121a38161293f565b50565b6002600754036121c85760405162461bcd60e51b81526004016109d990613790565b60026007556032811061221d5760405162461bcd60e51b815260206004820152601760248201527f4e6f7420612076616c69642053656e7469656e7420494400000000000000000060448201526064016109d9565b60185460ff16156122405760405162461bcd60e51b81526004016109d9906137c7565b6001601b54600160a01b900460ff166005811115612260576122606134e8565b1015801561228b57506004601b54600160a01b900460ff166005811115612289576122896134e8565b105b6122d25760405162461bcd60e51b81526020600482015260186024820152774e6f7420696e206d656d6265722073616c6520706861736560401b60448201526064016109d9565b601c54604051627eeac760e11b8152336004820152602481018390526000916001600160a01b03169062fdd58e90604401602060405180830381865afa158015612320573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612344919061394d565b1161239d5760405162461bcd60e51b815260206004820152602360248201527f4e6f206d656d6265727368697020746f6b656e7320696e20746869732077616c6044820152621b195d60ea1b60648201526084016109d9565b600d546123aa908361383d565b3410156123c95760405162461bcd60e51b81526004016109d99061385c565b6016546123d890611eaa61377d565b6123e0610a00565b6123ea908461377d565b11156124085760405162461bcd60e51b81526004016109d9906138b9565b600e546000828152601e602052604090206001015461242890849061377d565b11156124885760405162461bcd60e51b815260206004820152602960248201527f576f756c6420657863656564206d617820616c6c6f746d656e7420666f72207460448201526868697320706861736560b81b60648201526084016109d9565b6000818152601e6020526040812060010180548492906124a990849061377d565b909155506124b990503383612813565b50506001600755565b6124ca61265e565b601b54600160a01b900460ff1660058111156124e8576124e86134e8565b60ff168160058111156124fd576124fd6134e8565b60ff161161253d5760405162461bcd60e51b815260206004820152600d60248201526c496e637265617365206f6e6c7960981b60448201526064016109d9565b601b805482919060ff60a01b1916600160a01b836005811115612562576125626134e8565b021790555050565b6000609682111561257d57506001541190565b6096821161258e5750600254101590565b506000919050565b60006125a18261256a565b6125be576040516319086e6360e11b815260040160405180910390fd5b6000828152602081905260409020825b81546001600160a01b03166125f65760001901600081815260208190526040902091506125ce565b5092915050565b60008281526005602052604080822080546001600160a01b0319166001600160a01b038781169182179092558451925186949193909216917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a4505050565b6008546001600160a01b031633146114755760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109d9565b80516000906001600160a01b0385811690821614806126dc57506126dc81866120ff565b806127005750846001600160a01b03166126f585610890565b6001600160a01b0316145b95945050505050565b836001600160a01b031681600001516001600160a01b03161461273e5760405162a1148160e81b815260040160405180910390fd5b6001600160a01b03831661276557604051633a954ecd60e21b815260040160405180910390fd5b612771600083836125fd565b6001820161277e8161256a565b156127c157600081815260208190526040902080546001600160a01b03166127bf578251602084015160a01c600160a01b026001600160a01b039091161781555b505b506000828152602081905260408082206001600160a01b0386811680835592519193869392918916917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4611ce1565b61282d828260405180602001604052806000815250612b01565b5050565b6000806001848460400151856000015186602001516040516000815260200160405260405161287c949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa15801561289e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166129015760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016109d9565b7f0000000000000000000000001539330800eb03c4da74cdd25c5dad03a7ec36236001600160a01b0316816001600160a01b03161491505092915050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6109fb83838360405180602001604052806000815250612b5d565b6129b885858585612709565b6001600160a01b0384163b151580156129da57506129d885858584612bb9565b155b15611ce1576040516368d2bf6b60e11b815260040160405180910390fd5b606081600003612a1f5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612a495780612a3381613906565b9150612a429050600a836139ec565b9150612a23565b60008167ffffffffffffffff811115612a6457612a64613094565b6040519080825280601f01601f191660200182016040528015612a8e576020820181803683370190505b5090505b8415612af957612aa360018361376a565b9150612ab0600a86613aa4565b612abb90603061377d565b60f81b818381518110612ad057612ad06138f0565b60200101906001600160f81b031916908160001a905350612af2600a866139ec565b9450612a92565b949350505050565b600154612b0e8484612ca4565b6001600160a01b0384163b156109825760005b83811015611ce157612b3860008683850186612bb9565b612b55576040516368d2bf6b60e11b815260040160405180910390fd5b600101612b21565b612b68848484612dcb565b8160026000828254612b7a919061377d565b90915550506001600160a01b0384163b1561098257612b9c6000858584612bb9565b610982576040516368d2bf6b60e11b815260040160405180910390fd5b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290612bee903390899088908890600401613ab8565b6020604051808303816000875af1925050508015612c29575060408051601f3d908101601f19168201909252612c2691810190613af5565b60015b612c87573d808015612c57576040519150601f19603f3d011682016040523d82523d6000602084013e612c5c565b606091505b508051600003612c7f576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b6001600160a01b038216612cca57604051622e076360e81b815260040160405180910390fd5b80600003612ceb5760405163b562e8dd60e01b815260040160405180910390fd5b60015460005b82811015612dbd577f000000000000000000000000000000000000000000000000000000000000000015612d55577f00000000000000000000000000000000000000000000000000000000000000008181612d4e57612d4e6139d6565b0615612d58565b80155b15612d7b5781810160009081526020819052604090206001600160a01b03851690555b604051828201906001600160a01b038616906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4600101612cf1565b506001805483019055505050565b6001600160a01b038316612df157604051622e076360e81b815260040160405180910390fd5b80600003612e125760405163b562e8dd60e01b815260040160405180910390fd5b8160005b82811015612ee2577f000000000000000000000000000000000000000000000000000000000000000015612e7a577f00000000000000000000000000000000000000000000000000000000000000008181612e7357612e736139d6565b0615612e7d565b80155b15612ea05781810160009081526020819052604090206001600160a01b03861690555b604051828201906001600160a01b038716906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4600101612e16565b50610982565b828054828255906000526020600020908101928215612f3d579160200282015b82811115612f3d57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612f08565b50612f49929150612f88565b5090565b828054828255906000526020600020908101928215612f3d579160200282015b82811115612f3d578251825591602001919060010190612f6d565b5b80821115612f495760008155600101612f89565b6001600160e01b0319811681146121a357600080fd5b600060208284031215612fc557600080fd5b8135612fd081612f9d565b9392505050565b60005b83811015612ff2578181015183820152602001612fda565b50506000910152565b60008151808452613013816020860160208601612fd7565b601f01601f19169290920160200192915050565b602081526000612fd06020830184612ffb565b60006020828403121561304c57600080fd5b5035919050565b6001600160a01b03811681146121a357600080fd5b6000806040838503121561307b57600080fd5b823561308681613053565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156130d3576130d3613094565b604052919050565b600067ffffffffffffffff8311156130f5576130f5613094565b613108601f8401601f19166020016130aa565b905082815283838301111561311c57600080fd5b828260208301376000602084830101529392505050565b600082601f83011261314457600080fd5b612fd0838335602085016130db565b6000806040838503121561316657600080fd5b823567ffffffffffffffff8082111561317e57600080fd5b61318a86838701613133565b935060208501359150808211156131a057600080fd5b506131ad85828601613133565b9150509250929050565b6000806000606084860312156131cc57600080fd5b83356131d781613053565b925060208401356131e781613053565b929592945050506040919091013590565b60008060006060848603121561320d57600080fd5b505081359360208301359350604090920135919050565b600080828403608081121561323857600080fd5b833592506060601f198201121561324e57600080fd5b506040516060810181811067ffffffffffffffff8211171561327257613272613094565b80604052506020840135815260408401356020820152606084013560ff8116811461329c57600080fd5b6040820152919491935090915050565b6000602082840312156132be57600080fd5b813567ffffffffffffffff8111156132d557600080fd5b612af984828501613133565b6000602082840312156132f357600080fd5b8135612fd081613053565b6000806040838503121561331157600080fd5b823561331c81613053565b9150602083013561332c81613053565b809150509250929050565b600067ffffffffffffffff82111561335157613351613094565b5060051b60200190565b600082601f83011261336c57600080fd5b8135602061338161337c83613337565b6130aa565b82815260059290921b840181019181810190868411156133a057600080fd5b8286015b848110156133c45780356133b781613053565b83529183019183016133a4565b509695505050505050565b600080604083850312156133e257600080fd5b823567ffffffffffffffff808211156133fa57600080fd5b6134068683870161335b565b935060209150818501358181111561341d57600080fd5b85019050601f8101861361343057600080fd5b803561343e61337c82613337565b81815260059190911b8201830190838101908883111561345d57600080fd5b928401925b8284101561347b57833582529284019290840190613462565b80955050505050509250929050565b80151581146121a357600080fd5b600080604083850312156134ab57600080fd5b82356134b681613053565b9150602083013561332c8161348a565b600080604083850312156134d957600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b602081016006831061352057634e487b7160e01b600052602160045260246000fd5b91905290565b6000806000806080858703121561353c57600080fd5b843561354781613053565b9350602085013561355781613053565b925060408501359150606085013567ffffffffffffffff81111561357a57600080fd5b8501601f8101871361358b57600080fd5b61359a878235602084016130db565b91505092959194509250565b600080604083850312156135b957600080fd5b823567ffffffffffffffff8111156135d057600080fd5b6135dc8582860161335b565b95602094909401359450505050565b6000602082840312156135fd57600080fd5b813560068110612fd057600080fd5b600181811c9082168061362057607f821691505b60208210810361364057634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156109fb57600081815260208120601f850160051c8101602086101561366d5750805b601f850160051c820191505b8181101561368c57828155600101613679565b505050505050565b815167ffffffffffffffff8111156136ae576136ae613094565b6136c2816136bc845461360c565b84613646565b602080601f8311600181146136f757600084156136df5750858301515b600019600386901b1c1916600185901b17855561368c565b600085815260208120601f198616915b8281101561372657888601518255948401946001909101908401613707565b50858210156137445787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b818103818111156107f8576107f8613754565b808201808211156107f8576107f8613754565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252600e908201526d135a5b9d1a5b99c81c185d5cd95960921b604082015260600190565b6020808252602e908201527f43616e2774206d696e74206d6f7265207468616e20313020746f6b656e73207060408201526d32b9103a3930b739b0b1ba34b7b760911b606082015260800190565b600081600019048311821515161561385757613857613754565b500290565b6020808252603a908201527f496e73756666696369656e74205061796d656e743a20416d6f756e74206f662060408201527f45746865722073656e74206973206e6f7420636f72726563742e000000000000606082015260800190565b6020808252601f908201527f4d696e74696e6720776f756c6420657863656564206d617820737570706c7900604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006001820161391857613918613754565b5060010190565b6020808252601490820152734e6f7420696e2070726573616c6520706861736560601b604082015260600190565b60006020828403121561395f57600080fd5b5051919050565b60208082526028908201527f4d696e746564206d617820616c6c6f746d656e7420666f7220746869732073616040820152676c6520706861736560c01b606082015260800190565b6020808252600e908201526d24b73b30b634b21031b7bab837b760911b604082015260600190565b634e487b7160e01b600052601260045260246000fd5b6000826139fb576139fb6139d6565b500490565b600060208284031215613a1257600080fd5b8151612fd08161348a565b6000808454613a2b8161360c565b60018281168015613a435760018114613a5857613a87565b60ff1984168752821515830287019450613a87565b8860005260208060002060005b85811015613a7e5781548a820152908401908201613a65565b50505082870194505b505050508351613a9b818360208801612fd7565b01949350505050565b600082613ab357613ab36139d6565b500690565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613aeb90830184612ffb565b9695505050505050565b600060208284031215613b0757600080fd5b8151612fd081612f9d56fea26469706673582212209fcd5413b580d474c9eebfd49794b4c055a5d06b3595e9d3e131efa8418f36aa64736f6c63430008100033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000001539330800eb03c4da74cdd25c5dad03a7ec36230000000000000000000000000170227514a274826685bf81aed06e421817557200000000000000000000000000000000000000000000000000000000000000174d69726167652047616c6c65727920447265616d65727300000000000000000000000000000000000000000000000000000000000000000000000000000000034d47440000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): Mirage Gallery Dreamers
Arg [1] : symbol (string): MGD
Arg [2] : adminSigner (address): 0x1539330800EB03c4dA74CDd25C5DaD03A7Ec3623
Arg [3] : membershipAddress (address): 0x0170227514A274826685BF81AED06e4218175572
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000001539330800eb03c4da74cdd25c5dad03a7ec3623
Arg [3] : 0000000000000000000000000170227514a274826685bf81aed06e4218175572
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000017
Arg [5] : 4d69726167652047616c6c65727920447265616d657273000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 4d47440000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
70067:11429:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55198:281;;;;;;;;;;-1:-1:-1;55198:281:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;55198:281:0;;;;;;;;55485:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;57616:202::-;;;;;;;;;;-1:-1:-1;57616:202:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1697:32:1;;;1679:51;;1667:2;1652:18;57616:202:0;1533:203:1;57221:389:0;;;;;;;;;;-1:-1:-1;57221:389:0;;;;;:::i;:::-;;:::i;:::-;;80828:229;;;;;;;;;;-1:-1:-1;80828:229:0;;;;;:::i;:::-;;:::i;55075:117::-;;;;;;;;;;;;;:::i;:::-;;;3942:25:1;;;3930:2;3915:18;55075:117:0;3796:177:1;58267:314:0;;;;;;;;;;-1:-1:-1;58267:314:0;;;;;:::i;:::-;;:::i;78239:556::-;;;;;;:::i;:::-;;:::i;72786:372::-;;;;;;;;;;-1:-1:-1;72786:372:0;;;;;:::i;:::-;;:::i;58587:165::-;;;;;;;;;;-1:-1:-1;58587:165:0;;;;;:::i;:::-;;:::i;77442:791::-;;;;;;:::i;:::-;;:::i;76598:838::-;;;;;;:::i;:::-;;:::i;80296:106::-;;;;;;;;;;-1:-1:-1;80296:106:0;;;;;:::i;:::-;;:::i;70752:27::-;;;;;;;;;;;;;;;;81063:291;;;;;;;;;;-1:-1:-1;81063:291:0;;;;;:::i;:::-;;:::i;71532:41::-;;;;;;;;;;-1:-1:-1;71532:41:0;;;;-1:-1:-1;;;;;71532:41:0;;;70314:39;;;;;;;;;;;;;;;;73164:219;;;;;;;;;;-1:-1:-1;73164:219:0;;;;;:::i;:::-;;:::i;57021:194::-;;;;;;;;;;-1:-1:-1;57021:194:0;;;;;:::i;:::-;;:::i;70358:39::-;;;;;;;;;;;;;;;;70786:21;;;;;;;;;;;;;:::i;56092:512::-;;;;;;;;;;-1:-1:-1;56092:512:0;;;;;:::i;:::-;;:::i;22906:103::-;;;;;;;;;;;;;:::i;74822:912::-;;;;;;:::i;:::-;;:::i;22258:87::-;;;;;;;;;;-1:-1:-1;22331:6:0;;-1:-1:-1;;;;;22331:6:0;22258:87;;81360:133;;;;;;;;;;-1:-1:-1;81360:133:0;;;;;:::i;:::-;;:::i;55585:98::-;;;;;;;;;;;;;:::i;74351:465::-;;;;;;;;;;-1:-1:-1;74351:465:0;;;;;:::i;:::-;;:::i;57824:273::-;;;;;;;;;;-1:-1:-1;57824:273:0;;;;;:::i;:::-;;:::i;79116:720::-;;;;;;;;;;-1:-1:-1;79116:720:0;;;;;:::i;:::-;;:::i;70270:39::-;;;;;;;;;;;;;;;;71034:43;;;;;;;;;;-1:-1:-1;71034:43:0;;;;-1:-1:-1;;;71034:43:0;;;;;;;;;;;;;:::i;58758:354::-;;;;;;;;;;-1:-1:-1;58758:354:0;;;;;:::i;:::-;;:::i;70170:50::-;;;;;;;;;;-1:-1:-1;70170:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;79842:312;;;;;;;;;;-1:-1:-1;79842:312:0;;;;;:::i;:::-;;:::i;75741:851::-;;;;;;:::i;:::-;;:::i;73389:71::-;;;;;;;;;;;;;:::i;80518:304::-;;;;;;;;;;-1:-1:-1;80518:304:0;;;;;:::i;:::-;;:::i;80160:130::-;;;;;;;;;;;;;:::i;70595:31::-;;;;;;;;;;;;;;;;58103:158;;;;;;;;;;-1:-1:-1;58103:158:0;;;;;:::i;:::-;;:::i;23164:201::-;;;;;;;;;;-1:-1:-1;23164:201:0;;;;;:::i;:::-;;:::i;73466:879::-;;;;;;:::i;:::-;;:::i;72625:155::-;;;;;;;;;;-1:-1:-1;72625:155:0;;;;;:::i;:::-;;:::i;70840:26::-;;;;;;;;;;-1:-1:-1;70840:26:0;;;;;;;;;;;55198:281;55300:4;-1:-1:-1;;;;;;55327:40:0;;-1:-1:-1;;;55327:40:0;;:99;;-1:-1:-1;;;;;;;55378:48:0;;-1:-1:-1;;;55378:48:0;55327:99;:146;;;-1:-1:-1;;;;;;;;;;47944:40:0;;;55437:36;55313:160;55198:281;-1:-1:-1;;55198:281:0:o;55485:94::-;55539:13;55568:5;55561:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55485:94;:::o;57616:202::-;57692:7;57713:16;57721:7;57713;:16::i;:::-;57708:64;;57738:34;;-1:-1:-1;;;57738:34:0;;;;;;;;;;;57708:64;-1:-1:-1;57788:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;57788:24:0;;57616:202::o;57221:389::-;57298:22;57323:19;57334:7;57323:10;:19::i;:::-;57298:44;;;;;;;;;;;-1:-1:-1;;;;;57298:44:0;;;;;;-1:-1:-1;;;57298:44:0;;;;;-1:-1:-1;;;;;;57298:44:0;;;;;;;-1:-1:-1;57298:44:0;57387:11;;;;;57383:48;;57407:24;;-1:-1:-1;;;57407:24:0;;;;;;;;;;;57383:48;20889:10;-1:-1:-1;;;;;57444:21:0;;;;;;:63;;-1:-1:-1;57470:37:0;57487:5;20889:10;58103:158;:::i;57470:37::-;57469:38;57444:63;57440:128;;;57525:35;;-1:-1:-1;;;57525:35:0;;;;;;;;;;;57440:128;57576:28;57585:2;57589:7;57598:5;57576:8;:28::i;:::-;57291:319;;57221:389;;:::o;80828:229::-;22144:13;:11;:13::i;:::-;80943:14:::1;::::0;::::1;::::0;::::1;;;80942:15;80934:46;;;::::0;-1:-1:-1;;;80934:46:0;;12584:2:1;80934:46:0::1;::::0;::::1;12566:21:1::0;12623:2;12603:18;;;12596:30;-1:-1:-1;;;12642:18:1;;;12635:48;12700:18;;80934:46:0::1;;;;;;;;;80989:7;:23;80999:13:::0;80989:7;:23:::1;:::i;:::-;-1:-1:-1::0;81021:13:0::1;:30;81037:14:::0;81021:13;:30:::1;:::i;:::-;;80828:229:::0;;:::o;55075:117::-;55127:7;55172:13;;55166:3;55151:12;;:18;;;;:::i;:::-;:34;;;;:::i;:::-;55143:43;;55075:117;:::o;58267:314::-;58383:22;58408:19;58419:7;58408:10;:19::i;:::-;58383:44;;;;;;;;;;;-1:-1:-1;;;;;58383:44:0;;;;-1:-1:-1;;;58383:44:0;;;;-1:-1:-1;;;;;;58383:44:0;;;;;;-1:-1:-1;58439:48:0;20889:10;58472:7;58481:5;58439:18;:48::i;:::-;58434:97;;58496:35;;-1:-1:-1;;;58496:35:0;;;;;;;;;;;58434:97;58540:35;58550:4;58556:2;58560:7;58569:5;58540:9;:35::i;78239:556::-;7056:1;7654:7;;:19;7646:63;;;;-1:-1:-1;;;7646:63:0;;;;;;;:::i;:::-;7056:1;7787:7;:18;78329:6:::1;::::0;::::1;;78328:7;78320:34;;;;-1:-1:-1::0;;;78320:34:0::1;;;;;;;:::i;:::-;78380:20;78371:5;::::0;-1:-1:-1;;;78371:5:0;::::1;;;:29;::::0;::::1;;;;;;:::i;:::-;;78363:66;;;::::0;-1:-1:-1;;;78363:66:0;;16233:2:1;78363:66:0::1;::::0;::::1;16215:21:1::0;16272:2;16252:18;;;16245:30;16311:26;16291:18;;;16284:54;16355:18;;78363:66:0::1;16031:348:1::0;78363:66:0::1;78464:2;78446:14;:20;;78438:79;;;;-1:-1:-1::0;;;78438:79:0::1;;;;;;;:::i;:::-;78564:11;::::0;78547:28:::1;::::0;:14;:28:::1;:::i;:::-;78534:9;:41;;78526:112;;;;-1:-1:-1::0;;;78526:112:0::1;;;;;;;:::i;:::-;78696:12;::::0;78689:19:::1;::::0;:4:::1;:19;:::i;:::-;78672:13;:11;:13::i;:::-;78655:30;::::0;:14;:30:::1;:::i;:::-;:53;;78647:97;;;;-1:-1:-1::0;;;78647:97:0::1;;;;;;;:::i;:::-;78753:36;78763:10;78774:14;78753:9;:36::i;:::-;-1:-1:-1::0;7012:1:0;7966:7;:22;78239:556::o;72786:372::-;22144:13;:11;:13::i;:::-;72899::::1;:26:::0;;;72934:13:::1;:26:::0;;;72969:14:::1;:28:::0;;;-1:-1:-1;73006:147:0::1;73026:15;:22:::0;73022:26;::::1;73006:147;;;73130:13;;73112:12;73125:1;73112:15;;;;;;;;:::i;:::-;;;;;;;;;:31;;;;:::i;:::-;73068:13;:33;73082:15;73098:1;73082:18;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;73082:18:0::1;73068:33:::0;;;::::1;::::0;;;;;;;;:75;73050:3;::::1;::::0;::::1;:::i;:::-;;;;73006:147;;58587:165:::0;58707:39;58724:4;58730:2;58734:7;58707:39;;;;;;;;;;;;:16;:39::i;77442:791::-;7056:1;7654:7;;:19;7646:63;;;;-1:-1:-1;;;7646:63:0;;;;;;;:::i;:::-;7056:1;7787:7;:18;77539:6:::1;::::0;::::1;;77538:7;77530:34;;;;-1:-1:-1::0;;;77530:34:0::1;;;;;;;:::i;:::-;77599:2;77581:14;:20;;77573:79;;;;-1:-1:-1::0;;;77573:79:0::1;;;;;;;:::i;:::-;77678:18;77669:5;::::0;-1:-1:-1;;;77669:5:0;::::1;;;:27;::::0;::::1;;;;;;:::i;:::-;;;:59;;;;-1:-1:-1::0;77708:20:0::1;77700:5;::::0;-1:-1:-1;;;77700:5:0;::::1;;;:28;::::0;::::1;;;;;;:::i;:::-;;77669:59;77661:92;;;;-1:-1:-1::0;;;77661:92:0::1;;;;;;;:::i;:::-;77800:11;::::0;77783:28:::1;::::0;:14;:28:::1;:::i;:::-;77770:9;:41;;77762:112;;;;-1:-1:-1::0;;;77762:112:0::1;;;;;;;:::i;:::-;77932:12;::::0;77925:19:::1;::::0;:4:::1;:19;:::i;:::-;77908:13;:11;:13::i;:::-;77891:30;::::0;:14;:30:::1;:::i;:::-;:53;;77883:97;;;;-1:-1:-1::0;;;77883:97:0::1;;;;;;;:::i;:::-;77997:12;::::0;:34:::1;::::0;-1:-1:-1;;;77997:34:0;;78020:10:::1;77997:34;::::0;::::1;1679:51:1::0;78034:1:0::1;::::0;-1:-1:-1;;;;;77997:12:0::1;::::0;:22:::1;::::0;1652:18:1;;77997:34:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:38;:86;;;-1:-1:-1::0;78039:18:0::1;::::0;:40:::1;::::0;-1:-1:-1;;;78039:40:0;;78068:10:::1;78039:40;::::0;::::1;1679:51:1::0;78082:1:0::1;::::0;-1:-1:-1;;;;;78039:18:0::1;::::0;:28:::1;::::0;1652:18:1;;78039:40:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;77997:86;:126;;;-1:-1:-1::0;78087:10:0::1;::::0;:32:::1;::::0;-1:-1:-1;;;78087:32:0;;78108:10:::1;78087:32;::::0;::::1;1679:51:1::0;78122:1:0::1;::::0;-1:-1:-1;;;;;78087:10:0::1;::::0;:20:::1;::::0;1652:18:1;;78087:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;77997:126;:163;;;-1:-1:-1::0;78127:7:0::1;::::0;:29:::1;::::0;-1:-1:-1;;;78127:29:0;;78145:10:::1;78127:29;::::0;::::1;1679:51:1::0;78159:1:0::1;::::0;78127:7;;::::1;-1:-1:-1::0;;;;;78127:7:0::1;::::0;:17:::1;::::0;1652:18:1;;78127:29:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:33;77997:163;77989:193;;;::::0;-1:-1:-1;;;77989:193:0;;18771:2:1;77989:193:0::1;::::0;::::1;18753:21:1::0;18810:2;18790:18;;;18783:30;-1:-1:-1;;;18829:18:1;;;18822:47;18886:18;;77989:193:0::1;18569:341:1::0;76598:838:0;7056:1;7654:7;;:19;7646:63;;;;-1:-1:-1;;;7646:63:0;;;;;;;:::i;:::-;7056:1;7787:7;:18;76711:6:::1;::::0;::::1;;76710:7;76702:34;;;;-1:-1:-1::0;;;76702:34:0::1;;;;;;;:::i;:::-;76762:17;76753:5;::::0;-1:-1:-1;;;76753:5:0;::::1;;;:26;::::0;::::1;;;;;;:::i;:::-;;;:58;;;;-1:-1:-1::0;76791:20:0::1;76783:5;::::0;-1:-1:-1;;;76783:5:0;::::1;;;:28;::::0;::::1;;;;;;:::i;:::-;;76753:58;76745:91;;;;-1:-1:-1::0;;;76745:91:0::1;;;;;;;:::i;:::-;76883:11;::::0;76866:28:::1;::::0;:14;:28:::1;:::i;:::-;76853:9;:41;;76845:112;;;;-1:-1:-1::0;;;76845:112:0::1;;;;;;;:::i;:::-;77015:12;::::0;77008:19:::1;::::0;:4:::1;:19;:::i;:::-;76991:13;:11;:13::i;:::-;76974:30;::::0;:14;:30:::1;:::i;:::-;:53;;76966:97;;;;-1:-1:-1::0;;;76966:97:0::1;;;;;;;:::i;:::-;77130:14;::::0;77090:10:::1;77080:21;::::0;;;:9:::1;:21;::::0;;;;:29:::1;;::::0;:46:::1;::::0;77112:14;;77080:46:::1;:::i;:::-;:64;;77072:117;;;;-1:-1:-1::0;;;77072:117:0::1;;;;;;;:::i;:::-;77225:34;::::0;;77236:10:::1;77225:34;::::0;::::1;19536:51:1::0;19603:18;;;19596:30;;;;19662:1;19642:18;;;19635:29;-1:-1:-1;;;19680:18:1;;;19673:39;77198:14:0::1;::::0;19729:19:1;;77225:34:0::1;;;;;;;;;;;;77215:45;;;;;;77198:62;;77277:33;77295:6;77303;77277:17;:33::i;:::-;77269:60;;;;-1:-1:-1::0;;;77269:60:0::1;;;;;;;:::i;:::-;77348:10;77338:21;::::0;;;:9:::1;:21;::::0;;;;:29:::1;;:47:::0;;77371:14;;77338:21;:47:::1;::::0;77371:14;;77338:47:::1;:::i;:::-;::::0;;;-1:-1:-1;77394:36:0::1;::::0;-1:-1:-1;77404:10:0::1;77415:14:::0;77394:9:::1;:36::i;:::-;-1:-1:-1::0;;7012:1:0;7966:7;:22;-1:-1:-1;76598:838:0:o;80296:106::-;22144:13;:11;:13::i;:::-;80358:7:::1;:14;80368:4:::0;80358:7;:14:::1;:::i;:::-;-1:-1:-1::0;;80381:8:0::1;:15:::0;;-1:-1:-1;;80381:15:0::1;80392:4;80381:15;::::0;;80296:106::o;81063:291::-;22144:13;:11;:13::i;:::-;81131:16:::1;81178:2;81150:25;:21;81174:1;81150:25;:::i;:::-;:30;;;;:::i;:::-;81131:49:::0;-1:-1:-1;81189:21:0::1;81213:26;81237:2;81213:21;:26;:::i;:::-;81248:41;::::0;81189:50;;-1:-1:-1;81256:10:0::1;::::0;81248:41;::::1;;;::::0;81277:11;;81248:41:::1;::::0;;;81277:11;81256:10;81248:41;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;81298:50:0::1;::::0;-1:-1:-1;;;;;81298:32:0;::::1;::::0;:50;::::1;;;::::0;81331:16;;81298:50:::1;::::0;;;81331:16;81298:32;:50;::::1;;;;;;;;;;;;;::::0;::::1;;;;73164:219:::0;22144:13;:11;:13::i;:::-;73296:11:::1;:21:::0;;;;73326:11:::1;:21:::0;73356:11:::1;:21:::0;73164:219::o;57021:194::-;57093:7;57114:16;57122:7;57114;:16::i;:::-;57109:61;;57139:31;;-1:-1:-1;;;57139:31:0;;;;;;;;;;;57109:61;57184:19;57195:7;57184:10;:19::i;:::-;:25;-1:-1:-1;;;;;57184:25:0;;57021:194;-1:-1:-1;;57021:194:0:o;70786:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;56092:512::-;56164:7;-1:-1:-1;;;;;56184:19:0;;56180:60;;56212:28;;-1:-1:-1;;;56212:28:0;;;;;;;;;;;56180:60;56249:13;56287;;56265;:11;:13::i;:::-;:19;;56281:3;56265:19;:::i;:::-;:35;;;;:::i;:::-;56249:51;;56307:13;56327:17;56356:9;56351:227;56372:5;56367:1;:10;56351:227;;56396:10;56404:1;56396:7;:10::i;:::-;56393:178;;;56419:18;56440:10;;;;;;;;;;:16;-1:-1:-1;;;;;56440:16:0;56471:24;;56467:52;;56509:10;56497:22;;56467:52;56547:5;-1:-1:-1;;;;;56534:18:0;:9;-1:-1:-1;;;;;56534:18:0;;56530:31;;56554:7;;;:::i;:::-;;;56530:31;56408:163;56393:178;56379:3;;;:::i;:::-;;;56351:227;;;-1:-1:-1;56593:5:0;;56092:512;-1:-1:-1;;;;56092:512:0:o;22906:103::-;22144:13;:11;:13::i;:::-;22971:30:::1;22998:1;22971:18;:30::i;:::-;22906:103::o:0;74822:912::-;7056:1;7654:7;;:19;7646:63;;;;-1:-1:-1;;;7646:63:0;;;;;;;:::i;:::-;7056:1;7787:7;:18;74936:6:::1;::::0;::::1;;74935:7;74927:34;;;;-1:-1:-1::0;;;74927:34:0::1;;;;;;;:::i;:::-;75006:11;::::0;74989:28:::1;::::0;:14;:28:::1;:::i;:::-;74976:9;:41;;74968:86;;;::::0;-1:-1:-1;;;74968:86:0;;20561:2:1;74968:86:0::1;::::0;::::1;20543:21:1::0;;;20580:18;;;20573:30;20639:34;20619:18;;;20612:62;20691:18;;74968:86:0::1;20359:356:1::0;74968:86:0::1;75078:20;75069:5;::::0;-1:-1:-1;;;75069:5:0;::::1;;;:29;::::0;::::1;;;;;;:::i;:::-;;;:61;;;;-1:-1:-1::0;75110:20:0::1;75102:5;::::0;-1:-1:-1;;;75102:5:0;::::1;;;:28;::::0;::::1;;;;;;:::i;:::-;;75069:61;75061:98;;;::::0;-1:-1:-1;;;75061:98:0;;20922:2:1;75061:98:0::1;::::0;::::1;20904:21:1::0;20961:2;20941:18;;;20934:30;-1:-1:-1;;;20980:18:1;;;20973:54;21044:18;;75061:98:0::1;20720:348:1::0;75061:98:0::1;75215:12;::::0;75208:19:::1;::::0;:4:::1;:19;:::i;:::-;75191:13;:11;:13::i;:::-;75174:30;::::0;:14;:30:::1;:::i;:::-;:53;;75166:97;;;;-1:-1:-1::0;;;75166:97:0::1;;;;;;;:::i;:::-;75297:31;::::0;;75308:10:::1;75297:31;::::0;::::1;21285:51:1::0;21352:18;;;21345:30;;;;21411:1;21391:18;;;21384:29;-1:-1:-1;;;21429:18:1;;;21422:36;75270:14:0::1;::::0;21475:19:1;;75297:31:0::1;;;;;;;;;;;;75287:42;;;;;;75270:59;;75344:33;75362:6;75370;75344:17;:33::i;:::-;75336:60;;;;-1:-1:-1::0;;;75336:60:0::1;;;;;;;:::i;:::-;75435:10;75403:15;75421:25:::0;;;:13:::1;:25;::::0;;;;:33;;75465:12;;;75461:60:::1;;-1:-1:-1::0;75500:13:0::1;::::0;75461:60:::1;75549:10;75535:25;::::0;;;:13:::1;:25;::::0;;;;:35:::1;;::::0;75591:7;;75535:52:::1;::::0;75573:14;;75535:52:::1;:::i;:::-;:63;;75527:98;;;::::0;-1:-1:-1;;;75527:98:0;;21707:2:1;75527:98:0::1;::::0;::::1;21689:21:1::0;21746:2;21726:18;;;21719:30;-1:-1:-1;;;21765:18:1;;;21758:52;21827:18;;75527:98:0::1;21505:346:1::0;75527:98:0::1;75646:10;75632:25;::::0;;;:13:::1;:25;::::0;;;;:35:::1;;:53:::0;;75671:14;;75632:25;:53:::1;::::0;75671:14;;75632:53:::1;:::i;:::-;::::0;;;-1:-1:-1;75692:36:0::1;::::0;-1:-1:-1;75702:10:0::1;75713:14:::0;75692:9:::1;:36::i;:::-;-1:-1:-1::0;;7012:1:0;7966:7;:22;-1:-1:-1;;74822:912:0:o;81360:133::-;22144:13;:11;:13::i;:::-;81456:30:::1;::::0;-1:-1:-1;;;81456:30:0;;81480:4:::1;81456:30;::::0;::::1;1679:51:1::0;-1:-1:-1;;;;;81437:14:0;::::1;::::0;::::1;::::0;81452:2;;81437:14;;81456:15:::1;::::0;1652:18:1;;81456:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;81437:50;::::0;-1:-1:-1;;;;;;81437:50:0::1;::::0;;;;;;-1:-1:-1;;;;;22048:32:1;;;81437:50:0::1;::::0;::::1;22030:51:1::0;22097:18;;;22090:34;22003:18;;81437:50:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;55585:98::-:0;55641:13;55670:7;55663:14;;;;;:::i;74351:465::-;22144:13;:11;:13::i;:::-;74486:7:::1;:14;74465:10;:17;:35;74457:73;;;::::0;-1:-1:-1;;;74457:73:0;;22587:2:1;74457:73:0::1;::::0;::::1;22569:21:1::0;22626:2;22606:18;;;22599:30;22665:27;22645:18;;;22638:55;22710:18;;74457:73:0::1;22385:349:1::0;74457:73:0::1;74609:28:::0;;::::1;::::0;:15:::1;::::0;:28:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;74644:22:0;;::::1;::::0;:12:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;;74677:6;74673:138;74693:10;:17;74689:1;:21;74673:138;;;74790:13;;74772:12;74785:1;74772:15;;;;;;;;:::i;:::-;;;;;;;;;:31;;;;:::i;:::-;74728:13;:33;74742:15;74758:1;74742:18;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;74742:18:0::1;74728:33:::0;;;::::1;::::0;;;;;;;;:75;74712:3;::::1;::::0;::::1;:::i;:::-;;;;74673:138;;57824:273:::0;20889:10;-1:-1:-1;;;;;57919:24:0;;;57915:54;;57952:17;;-1:-1:-1;;;57952:17:0;;;;;;;;;;;57915:54;20889:10;57978:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;57978:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;57978:53:0;;;;;;;;;;58043:48;;540:41:1;;;57978:42:0;;20889:10;58043:48;;513:18:1;58043:48:0;;;;;;;57824:273;;:::o;79116:720::-;79218:20;79209:5;;-1:-1:-1;;;79209:5:0;;;;:29;;;;;;;;:::i;:::-;;;79201:59;;;;-1:-1:-1;;;79201:59:0;;22941:2:1;79201:59:0;;;22923:21:1;22980:2;22960:18;;;22953:30;-1:-1:-1;;;22999:18:1;;;22992:47;23056:18;;79201:59:0;22739:341:1;79201:59:0;79292:2;79277:12;:17;79269:69;;;;-1:-1:-1;;;79269:69:0;;23287:2:1;79269:69:0;;;23269:21:1;23326:2;23306:18;;;23299:30;23365:34;23345:18;;;23338:62;-1:-1:-1;;;23416:18:1;;;23409:37;23463:19;;79269:69:0;23085:403:1;79269:69:0;79355:18;;:54;;-1:-1:-1;;;79355:54:0;;79384:10;79355:54;;;22030:51:1;22097:18;;;22090:34;;;-1:-1:-1;;;;;79355:18:0;;;;:28;;22003:18:1;;79355:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;79413:1;79355:59;79347:110;;;;-1:-1:-1;;;79347:110:0;;23695:2:1;79347:110:0;;;23677:21:1;23734:2;23714:18;;;23707:30;23773:34;23753:18;;;23746:62;-1:-1:-1;;;23824:18:1;;;23817:36;23870:19;;79347:110:0;23493:402:1;79347:110:0;79524:16;;79474:29;;;;:15;:29;;;;;;:46;;79506:14;;79474:46;:::i;:::-;:66;;79466:125;;;;-1:-1:-1;;;79466:125:0;;24102:2:1;79466:125:0;;;24084:21:1;24141:2;24121:18;;;24114:30;24180:34;24160:18;;;24153:62;-1:-1:-1;;;24231:18:1;;;24224:44;24285:19;;79466:125:0;23900:410:1;79466:125:0;79641:3;79623:14;79608:12;;:29;;;;:::i;:::-;:36;;79600:70;;;;-1:-1:-1;;;79600:70:0;;24517:2:1;79600:70:0;;;24499:21:1;24556:2;24536:18;;;24529:30;-1:-1:-1;;;24575:18:1;;;24568:51;24636:18;;79600:70:0;24315:345:1;79600:70:0;79679:29;;;;:15;:29;;;;;:47;;79712:14;;79679:29;:47;;79712:14;;79679:47;:::i;:::-;;;;-1:-1:-1;;79758:12:0;;79735:56;;79747:10;;79758:16;;79773:1;79758:16;:::i;:::-;79776:14;79735:11;:56::i;:::-;79816:14;79800:12;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;79116:720:0:o;58758:354::-;58903:22;58928:19;58939:7;58928:10;:19::i;:::-;58903:44;;;;;;;;;;;-1:-1:-1;;;;;58903:44:0;;;;-1:-1:-1;;;58903:44:0;;;;-1:-1:-1;;;;;;58903:44:0;;;;;;-1:-1:-1;58959:48:0;20889:10;58992:7;59001:5;58959:18;:48::i;:::-;58954:97;;59016:35;;-1:-1:-1;;;59016:35:0;;;;;;;;;;;58954:97;59060:46;59074:4;59080:2;59084:7;59093:5;59100;59060:13;:46::i;:::-;58896:216;58758:354;;;;:::o;79842:312::-;22144:13;:11;:13::i;:::-;79986:12:::1;::::0;79979:19:::1;::::0;:4:::1;:19;:::i;:::-;79961:14;79945:13;:11;:13::i;:::-;:30;;;;:::i;:::-;:53;;79937:95;;;::::0;-1:-1:-1;;;79937:95:0;;24867:2:1;79937:95:0::1;::::0;::::1;24849:21:1::0;24906:2;24886:18;;;24879:30;24945:31;24925:18;;;24918:59;24994:18;;79937:95:0::1;24665:353:1::0;79937:95:0::1;80046:9;80041:108;80065:9;:16;80061:1;:20;80041:108;;;80101:38;80111:9;80121:1;80111:12;;;;;;;;:::i;:::-;;;;;;;80124:14;80101:9;:38::i;:::-;80083:3:::0;::::1;::::0;::::1;:::i;:::-;;;;80041:108;;75741:851:::0;7056:1;7654:7;;:19;7646:63;;;;-1:-1:-1;;;7646:63:0;;;;;;;:::i;:::-;7056:1;7787:7;:18;75855:6:::1;::::0;::::1;;75854:7;75846:34;;;;-1:-1:-1::0;;;75846:34:0::1;;;;;;;:::i;:::-;75908:17;75899:5;::::0;-1:-1:-1;;;75899:5:0;::::1;;;:26;::::0;::::1;;;;;;:::i;:::-;;;:58;;;;-1:-1:-1::0;75937:20:0::1;75929:5;::::0;-1:-1:-1;;;75929:5:0;::::1;;;:28;::::0;::::1;;;;;;:::i;:::-;;75899:58;75891:91;;;;-1:-1:-1::0;;;75891:91:0::1;;;;;;;:::i;:::-;76031:11;::::0;76014:28:::1;::::0;:14;:28:::1;:::i;:::-;76001:9;:41;;75993:112;;;;-1:-1:-1::0;;;75993:112:0::1;;;;;;;:::i;:::-;76165:12;::::0;76158:19:::1;::::0;:4:::1;:19;:::i;:::-;76141:13;:11;:13::i;:::-;76124:30;::::0;:14;:30:::1;:::i;:::-;:53;;76116:97;;;;-1:-1:-1::0;;;76116:97:0::1;;;;;;;:::i;:::-;76281:13;::::0;76242:10:::1;76232:21;::::0;;;:9:::1;:21;::::0;;;;:28:::1;;::::0;:45:::1;::::0;76263:14;;76232:45:::1;:::i;:::-;:62;;76224:115;;;;-1:-1:-1::0;;;76224:115:0::1;;;;;;;:::i;:::-;76377:33;::::0;;76388:10:::1;76377:33;::::0;::::1;25235:51:1::0;25302:18;;;25295:30;;;;25361:1;25341:18;;;25334:29;-1:-1:-1;;;25379:18:1;;;25372:38;76350:14:0::1;::::0;25427:19:1;;76377:33:0::1;;;;;;;;;;;;76367:44;;;;;;76350:61;;76430:33;76448:6;76456;76430:17;:33::i;:::-;76422:60;;;;-1:-1:-1::0;;;76422:60:0::1;;;;;;;:::i;:::-;76503:10;76493:21;::::0;;;:9:::1;:21;::::0;;;;:28:::1;;:46:::0;;76525:14;;76493:21;:46:::1;::::0;76525:14;;76493:46:::1;:::i;73389:71::-:0;22144:13;:11;:13::i;:::-;73448:6:::1;::::0;;-1:-1:-1;;73438:16:0;::::1;73448:6;::::0;;::::1;73447:7;73438:16;::::0;;73389:71::o;80518:304::-;80583:13;80612:16;80620:7;80612;:16::i;:::-;80607:59;;80637:29;;-1:-1:-1;;;80637:29:0;;;;;;;;;;;80607:59;80680:8;;;;80675:142;;80710:13;80703:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;80518:304;;;:::o;80675:142::-;80773:7;80781:25;80798:7;80781:16;:25::i;:::-;80759:48;;;;;;;;;:::i;:::-;;;;;;;;;;;;;80752:55;;80518:304;;;:::o;80160:130::-;22144:13;:11;:13::i;:::-;80221:14:::1;::::0;::::1;::::0;::::1;;;80220:15;80212:42;;;::::0;-1:-1:-1;;;80212:42:0;;26684:2:1;80212:42:0::1;::::0;::::1;26666:21:1::0;26723:2;26703:18;;;26696:30;-1:-1:-1;;;26742:18:1;;;26735:44;26796:18;;80212:42:0::1;26482:338:1::0;80212:42:0::1;80263:14;:21:::0;;-1:-1:-1;;80263:21:0::1;;;::::0;;80160:130::o;58103:158::-;-1:-1:-1;;;;;58220:25:0;;;58200:4;58220:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;58103:158::o;23164:201::-;22144:13;:11;:13::i;:::-;-1:-1:-1;;;;;23253:22:0;::::1;23245:73;;;::::0;-1:-1:-1;;;23245:73:0;;27027:2:1;23245:73:0::1;::::0;::::1;27009:21:1::0;27066:2;27046:18;;;27039:30;27105:34;27085:18;;;27078:62;-1:-1:-1;;;27156:18:1;;;27149:36;27202:19;;23245:73:0::1;26825:402:1::0;23245:73:0::1;23329:28;23348:8;23329:18;:28::i;:::-;23164:201:::0;:::o;73466:879::-;7056:1;7654:7;;:19;7646:63;;;;-1:-1:-1;;;7646:63:0;;;;;;;:::i;:::-;7056:1;7787:7;:18;73596:2:::1;73580:18:::0;::::1;73572:54;;;::::0;-1:-1:-1;;;73572:54:0;;27434:2:1;73572:54:0::1;::::0;::::1;27416:21:1::0;27473:2;27453:18;;;27446:30;27512:25;27492:18;;;27485:53;27555:18;;73572:54:0::1;27232:347:1::0;73572:54:0::1;73644:6;::::0;::::1;;73643:7;73635:34;;;;-1:-1:-1::0;;;73635:34:0::1;;;;;;;:::i;:::-;73695:20;73686:5;::::0;-1:-1:-1;;;73686:5:0;::::1;;;:29;::::0;::::1;;;;;;:::i;:::-;;;:61;;;;-1:-1:-1::0;73727:20:0::1;73719:5;::::0;-1:-1:-1;;;73719:5:0;::::1;;;:28;::::0;::::1;;;;;;:::i;:::-;;73686:61;73678:98;;;::::0;-1:-1:-1;;;73678:98:0;;20922:2:1;73678:98:0::1;::::0;::::1;20904:21:1::0;20961:2;20941:18;;;20934:30;-1:-1:-1;;;20980:18:1;;;20973:54;21044:18;;73678:98:0::1;20720:348:1::0;73678:98:0::1;73793:18;::::0;:54:::1;::::0;-1:-1:-1;;;73793:54:0;;73822:10:::1;73793:54;::::0;::::1;22030:51:1::0;22097:18;;;22090:34;;;73850:1:0::1;::::0;-1:-1:-1;;;;;73793:18:0::1;::::0;:28:::1;::::0;22003:18:1;;73793:54:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;73785:106;;;::::0;-1:-1:-1;;;73785:106:0;;27786:2:1;73785:106:0::1;::::0;::::1;27768:21:1::0;27825:2;27805:18;;;27798:30;27864:34;27844:18;;;27837:62;-1:-1:-1;;;27915:18:1;;;27908:33;27958:19;;73785:106:0::1;27584:399:1::0;73785:106:0::1;73938:11;::::0;73921:28:::1;::::0;:14;:28:::1;:::i;:::-;73908:9;:41;;73900:112;;;;-1:-1:-1::0;;;73900:112:0::1;;;;;;;:::i;:::-;74070:12;::::0;74063:19:::1;::::0;:4:::1;:19;:::i;:::-;74046:13;:11;:13::i;:::-;74029:30;::::0;:14;:30:::1;:::i;:::-;:53;;74021:97;;;;-1:-1:-1::0;;;74021:97:0::1;;;;;;;:::i;:::-;74182:13;::::0;74135:23:::1;::::0;;;:8:::1;:23;::::0;;;;:26:::1;;::::0;:43:::1;::::0;74164:14;;74135:43:::1;:::i;:::-;:60;;74127:114;;;::::0;-1:-1:-1;;;74127:114:0;;28190:2:1;74127:114:0::1;::::0;::::1;28172:21:1::0;28229:2;28209:18;;;28202:30;28268:34;28248:18;;;28241:62;-1:-1:-1;;;28319:18:1;;;28312:39;28368:19;;74127:114:0::1;27988:405:1::0;74127:114:0::1;74250:23;::::0;;;:8:::1;:23;::::0;;;;:26:::1;;:44:::0;;74280:14;;74250:23;:44:::1;::::0;74280:14;;74250:44:::1;:::i;:::-;::::0;;;-1:-1:-1;74303:36:0::1;::::0;-1:-1:-1;74313:10:0::1;74324:14:::0;74303:9:::1;:36::i;:::-;-1:-1:-1::0;;7012:1:0;7966:7;:22;73466:879::o;72625:155::-;22144:13;:11;:13::i;:::-;72727:5:::1;::::0;-1:-1:-1;;;72727:5:0;::::1;;;72721:12;::::0;::::1;;;;;;:::i;:::-;72705:28;;72711:6;72705:13;;;;;;;;:::i;:::-;:28;;;72697:54;;;::::0;-1:-1:-1;;;72697:54:0;;28600:2:1;72697:54:0::1;::::0;::::1;28582:21:1::0;28639:2;28619:18;;;28612:30;-1:-1:-1;;;28658:18:1;;;28651:43;28711:18;;72697:54:0::1;28398:337:1::0;72697:54:0::1;72760:5;:14:::0;;72768:6;;72760:5;-1:-1:-1;;;;72760:14:0::1;-1:-1:-1::0;;;72768:6:0;72760:14:::1;::::0;::::1;;;;;;:::i;:::-;;;;;;72625:155:::0;:::o;59466:257::-;59531:4;59558:3;59548:7;:13;59544:174;;;-1:-1:-1;59589:12:0;;-1:-1:-1;59579:22:0;59466:257::o;59544:174::-;59630:3;59619:7;:14;59615:103;;-1:-1:-1;59662:13:0;;-1:-1:-1;59651:24:0;;59466:257::o;59615:103::-;-1:-1:-1;59705:5:0;;59466:257;-1:-1:-1;59466:257:0:o;56610:405::-;56670:17;56701:16;56709:7;56701;:16::i;:::-;56696:65;;56726:35;;-1:-1:-1;;;56726:35:0;;;;;;;;;;;56696:65;56770:23;56796:16;;;;;;;;;;56804:7;56856:133;56863:11;;-1:-1:-1;;;;;56863:11:0;56856:133;;-1:-1:-1;;56920:14:0;56960:7;:21;;;;;;;;;;;-1:-1:-1;56856:133:0;;;-1:-1:-1;57004:5:0;56610:405;-1:-1:-1;;56610:405:0:o;63713:196::-;63828:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;63828:29:0;-1:-1:-1;;;;;63828:29:0;;;;;;;;;63878:11;;63869:34;;63828:24;;:29;;63869:34;;;;;;63828:24;63869:34;63713:196;;;:::o;22423:132::-;22331:6;;-1:-1:-1;;;;;22331:6:0;20889:10;22487:23;22479:68;;;;-1:-1:-1;;;22479:68:0;;28942:2:1;22479:68:0;;;28924:21:1;;;28961:18;;;28954:30;29020:34;29000:18;;;28993:62;29072:18;;22479:68:0;28740:356:1;59729:286:0;59895:11;;59866:4;;-1:-1:-1;;;;;59921:16:0;;;;;;;;:52;;;59941:32;59958:5;59965:7;59941:16;:32::i;:::-;59921:87;;;;60001:7;-1:-1:-1;;;;;59977:31:0;:20;59989:7;59977:11;:20::i;:::-;-1:-1:-1;;;;;59977:31:0;;59921:87;59913:96;59729:286;-1:-1:-1;;;;;59729:286:0:o;62647:904::-;62801:4;-1:-1:-1;;;;;62786:19:0;:5;:11;;;-1:-1:-1;;;;;62786:19:0;;62782:60;;62814:28;;-1:-1:-1;;;62814:28:0;;;;;;;;;;;62782:60;-1:-1:-1;;;;;62853:16:0;;62849:52;;62878:23;;-1:-1:-1;;;62878:23:0;;;;;;;;;;;62849:52;62962:36;62979:1;62983:7;62992:5;62962:8;:36::i;:::-;63058:1;63048:11;;63072:20;63048:11;63072:7;:20::i;:::-;63068:234;;;63105:27;63135:20;;;;;;;;;;63170:15;;-1:-1:-1;;;;;63170:15:0;63166:127;;63232:11;;63272:9;;;;63256:25;;-1:-1:-1;;;63256:25:0;-1:-1:-1;;;;;63214:29:0;;;63256:25;;;63166:127;63094:208;63068:234;-1:-1:-1;63317:26:0;63346:16;;;;;;;;;;;-1:-1:-1;;;;;63369:19:0;;;63395:58;;;63467:27;;63346:16;;;;63369:19;63467:27;;;;;;63317:26;63467:27;63503:42;57221:389;60021:106;60094:27;60104:2;60108:8;60094:27;;;;;;;;;;;;:9;:27::i;:::-;60021:106;;:::o;78801:309::-;78889:4;78904:14;78921:47;78931:6;78939;:8;;;78949:6;:8;;;78959:6;:8;;;78921:47;;;;;;;;;;;;;;;;;29328:25:1;;;29401:4;29389:17;;;;29384:2;29369:18;;29362:45;29438:2;29423:18;;29416:34;29481:2;29466:18;;29459:34;29315:3;29300:19;;29101:398;78921:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;78921:47:0;;-1:-1:-1;;78921:47:0;;;-1:-1:-1;;;;;;;78985:20:0;;78977:57;;;;-1:-1:-1;;;78977:57:0;;29706:2:1;78977:57:0;;;29688:21:1;29745:2;29725:18;;;29718:30;29784:26;29764:18;;;29757:54;29828:18;;78977:57:0;29504:348:1;78977:57:0;79092:12;-1:-1:-1;;;;;79082:22:0;:6;-1:-1:-1;;;;;79082:22:0;;79075:29;;;78801:309;;;;:::o;23525:191::-;23618:6;;;-1:-1:-1;;;;;23635:17:0;;;-1:-1:-1;;;;;;23635:17:0;;;;;;;23668:40;;23618:6;;;23635:17;23618:6;;23668:40;;23599:16;;23668:40;23588:128;23525:191;:::o;60133:128::-;60221:34;60233:2;60237:3;60242:8;60221:34;;;;;;;;;;;;:11;:34::i;59118:342::-;59282:35;59292:4;59298:2;59302:7;59311:5;59282:9;:35::i;:::-;-1:-1:-1;;;;;59330:13:0;;25251:19;:23;;59330:68;;;;;59350:48;59373:4;59379:2;59383:7;59392:5;59350:22;:48::i;:::-;59349:49;59330:68;59326:128;;;59414:40;;-1:-1:-1;;;59414:40:0;;;;;;;;;;;8433:723;8489:13;8710:5;8719:1;8710:10;8706:53;;-1:-1:-1;;8737:10:0;;;;;;;;;;;;-1:-1:-1;;;8737:10:0;;;;;8433:723::o;8706:53::-;8784:5;8769:12;8825:78;8832:9;;8825:78;;8858:8;;;;:::i;:::-;;-1:-1:-1;8881:10:0;;-1:-1:-1;8889:2:0;8881:10;;:::i;:::-;;;8825:78;;;8913:19;8945:6;8935:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8935:17:0;;8913:39;;8963:154;8970:10;;8963:154;;8997:11;9007:1;8997:11;;:::i;:::-;;-1:-1:-1;9066:10:0;9074:2;9066:5;:10;:::i;:::-;9053:24;;:2;:24;:::i;:::-;9040:39;;9023:6;9030;9023:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;9023:56:0;;;;;;;;-1:-1:-1;9094:11:0;9103:2;9094:11;;:::i;:::-;;;8963:154;;;9141:6;8433:723;-1:-1:-1;;;;8433:723:0:o;60267:445::-;60403:12;;60422:19;60428:2;60432:8;60422:5;:19::i;:::-;-1:-1:-1;;;;;60454:13:0;;25251:19;:23;60450:257;;60506:9;60501:190;60521:8;60517:1;:12;60501:190;;;60554:63;60585:1;60589:2;60608:1;60593:12;:16;60611:5;60554:22;:63::i;:::-;60549:130;;60639:40;;-1:-1:-1;;;60639:40:0;;;;;;;;;;;60549:130;60531:3;;60501:190;;60718:388;60851:26;60859:2;60863:3;60868:8;60851:7;:26::i;:::-;60901:8;60884:13;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;60920:13:0;;25251:19;:23;60916:185;;60972:50;61003:1;61007:2;61011:3;61016:5;60972:22;:50::i;:::-;60967:117;;61044:40;;-1:-1:-1;;;61044:40:0;;;;;;;;;;;63915:565;64069:72;;-1:-1:-1;;;64069:72:0;;64052:4;;-1:-1:-1;;;;;64069:36:0;;;;;:72;;20889:10;;64120:4;;64126:7;;64135:5;;64069:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;64069:72:0;;;;;;;;-1:-1:-1;;64069:72:0;;;;;;;;;;;;:::i;:::-;;;64065:410;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;64283:6;:13;64300:1;64283:18;64279:189;;64321:40;;-1:-1:-1;;;64321:40:0;;;;;;;;;;;64279:189;64440:6;64434:13;64425:6;64421:2;64417:15;64410:38;64065:410;-1:-1:-1;;;;;;64182:51:0;-1:-1:-1;;;64182:51:0;;-1:-1:-1;63915:565:0;;;;;;:::o;61112:775::-;-1:-1:-1;;;;;61185:16:0;;61181:48;;61210:19;;-1:-1:-1;;;61210:19:0;;;;;;;;;;;61181:48;61240:8;61252:1;61240:13;61236:44;;61262:18;;-1:-1:-1;;;61262:18:0;;;;;;;;;;;61236:44;61312:12;;61425:9;61420:353;61440:8;61436:1;:12;61420:353;;;61470:13;:18;:52;;61504:13;61500:1;:17;;;;;:::i;:::-;;:22;61470:52;;;61491:6;;61470:52;61466:238;;;61571:16;;;61537:23;61563:25;;;;;;;;;;-1:-1:-1;;;;;61601:16:0;;61630:62;;61466:238;61721:42;;61746:16;;;;-1:-1:-1;;;;;61721:42:0;;;61738:1;;61721:42;;61738:1;;61721:42;61450:3;;61420:353;;;-1:-1:-1;61781:12:0;:24;;;;;;81021:30:::1;80828:229:::0;;:::o;61893:748::-;-1:-1:-1;;;;;61981:16:0;;61977:48;;62006:19;;-1:-1:-1;;;62006:19:0;;;;;;;;;;;61977:48;62036:8;62048:1;62036:13;62032:44;;62058:18;;-1:-1:-1;;;62058:18:0;;;;;;;;;;;62032:44;62108:3;62212:9;62207:353;62227:8;62223:1;:12;62207:353;;;62257:13;:18;:52;;62291:13;62287:1;:17;;;;;:::i;:::-;;:22;62257:52;;;62278:6;;62257:52;62253:238;;;62358:16;;;62324:23;62350:25;;;;;;;;;;-1:-1:-1;;;;;62388:16:0;;62417:62;;62253:238;62508:42;;62533:16;;;;-1:-1:-1;;;;;62508:42:0;;;62525:1;;62508:42;;62525:1;;62508:42;62237:3;;62207:353;;;;62575:60;57221:389;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;:::-;384:5;150:245;-1:-1:-1;;;150:245:1:o;592:250::-;677:1;687:113;701:6;698:1;695:13;687:113;;;777:11;;;771:18;758:11;;;751:39;723:2;716:10;687:113;;;-1:-1:-1;;834:1:1;816:16;;809:27;592:250::o;847:271::-;889:3;927:5;921:12;954:6;949:3;942:19;970:76;1039:6;1032:4;1027:3;1023:14;1016:4;1009:5;1005:16;970:76;:::i;:::-;1100:2;1079:15;-1:-1:-1;;1075:29:1;1066:39;;;;1107:4;1062:50;;847:271;-1:-1:-1;;847:271:1:o;1123:220::-;1272:2;1261:9;1254:21;1235:4;1292:45;1333:2;1322:9;1318:18;1310:6;1292:45;:::i;1348:180::-;1407:6;1460:2;1448:9;1439:7;1435:23;1431:32;1428:52;;;1476:1;1473;1466:12;1428:52;-1:-1:-1;1499:23:1;;1348:180;-1:-1:-1;1348:180:1:o;1741:131::-;-1:-1:-1;;;;;1816:31:1;;1806:42;;1796:70;;1862:1;1859;1852:12;1877:315;1945:6;1953;2006:2;1994:9;1985:7;1981:23;1977:32;1974:52;;;2022:1;2019;2012:12;1974:52;2061:9;2048:23;2080:31;2105:5;2080:31;:::i;:::-;2130:5;2182:2;2167:18;;;;2154:32;;-1:-1:-1;;;1877:315:1:o;2197:127::-;2258:10;2253:3;2249:20;2246:1;2239:31;2289:4;2286:1;2279:15;2313:4;2310:1;2303:15;2329:275;2400:2;2394:9;2465:2;2446:13;;-1:-1:-1;;2442:27:1;2430:40;;2500:18;2485:34;;2521:22;;;2482:62;2479:88;;;2547:18;;:::i;:::-;2583:2;2576:22;2329:275;;-1:-1:-1;2329:275:1:o;2609:407::-;2674:5;2708:18;2700:6;2697:30;2694:56;;;2730:18;;:::i;:::-;2768:57;2813:2;2792:15;;-1:-1:-1;;2788:29:1;2819:4;2784:40;2768:57;:::i;:::-;2759:66;;2848:6;2841:5;2834:21;2888:3;2879:6;2874:3;2870:16;2867:25;2864:45;;;2905:1;2902;2895:12;2864:45;2954:6;2949:3;2942:4;2935:5;2931:16;2918:43;3008:1;3001:4;2992:6;2985:5;2981:18;2977:29;2970:40;2609:407;;;;;:::o;3021:222::-;3064:5;3117:3;3110:4;3102:6;3098:17;3094:27;3084:55;;3135:1;3132;3125:12;3084:55;3157:80;3233:3;3224:6;3211:20;3204:4;3196:6;3192:17;3157:80;:::i;3248:543::-;3336:6;3344;3397:2;3385:9;3376:7;3372:23;3368:32;3365:52;;;3413:1;3410;3403:12;3365:52;3453:9;3440:23;3482:18;3523:2;3515:6;3512:14;3509:34;;;3539:1;3536;3529:12;3509:34;3562:50;3604:7;3595:6;3584:9;3580:22;3562:50;:::i;:::-;3552:60;;3665:2;3654:9;3650:18;3637:32;3621:48;;3694:2;3684:8;3681:16;3678:36;;;3710:1;3707;3700:12;3678:36;;3733:52;3777:7;3766:8;3755:9;3751:24;3733:52;:::i;:::-;3723:62;;;3248:543;;;;;:::o;3978:456::-;4055:6;4063;4071;4124:2;4112:9;4103:7;4099:23;4095:32;4092:52;;;4140:1;4137;4130:12;4092:52;4179:9;4166:23;4198:31;4223:5;4198:31;:::i;:::-;4248:5;-1:-1:-1;4305:2:1;4290:18;;4277:32;4318:33;4277:32;4318:33;:::i;:::-;3978:456;;4370:7;;-1:-1:-1;;;4424:2:1;4409:18;;;;4396:32;;3978:456::o;4439:316::-;4516:6;4524;4532;4585:2;4573:9;4564:7;4560:23;4556:32;4553:52;;;4601:1;4598;4591:12;4553:52;-1:-1:-1;;4624:23:1;;;4694:2;4679:18;;4666:32;;-1:-1:-1;4745:2:1;4730:18;;;4717:32;;4439:316;-1:-1:-1;4439:316:1:o;4760:810::-;4852:6;4860;4904:9;4895:7;4891:23;4934:3;4930:2;4926:12;4923:32;;;4951:1;4948;4941:12;4923:32;4974:23;;;-1:-1:-1;5031:4:1;-1:-1:-1;;5013:16:1;;5009:27;5006:47;;;5049:1;5046;5039:12;5006:47;;5082:2;5076:9;5124:4;5116:6;5112:17;5195:6;5183:10;5180:22;5159:18;5147:10;5144:34;5141:62;5138:88;;;5206:18;;:::i;:::-;5246:10;5242:2;5235:22;;5309:2;5298:9;5294:18;5281:32;5273:6;5266:48;5375:2;5364:9;5360:18;5347:32;5342:2;5334:6;5330:15;5323:57;5430:4;5419:9;5415:20;5402:34;5476:4;5469:5;5465:16;5458:5;5455:27;5445:55;;5496:1;5493;5486:12;5445:55;5528:2;5516:15;;5509:30;4760:810;;5520:6;;-1:-1:-1;4760:810:1;;-1:-1:-1;;4760:810:1:o;5575:322::-;5644:6;5697:2;5685:9;5676:7;5672:23;5668:32;5665:52;;;5713:1;5710;5703:12;5665:52;5753:9;5740:23;5786:18;5778:6;5775:30;5772:50;;;5818:1;5815;5808:12;5772:50;5841;5883:7;5874:6;5863:9;5859:22;5841:50;:::i;5902:247::-;5961:6;6014:2;6002:9;5993:7;5989:23;5985:32;5982:52;;;6030:1;6027;6020:12;5982:52;6069:9;6056:23;6088:31;6113:5;6088:31;:::i;6386:402::-;6468:6;6476;6529:2;6517:9;6508:7;6504:23;6500:32;6497:52;;;6545:1;6542;6535:12;6497:52;6584:9;6571:23;6603:31;6628:5;6603:31;:::i;:::-;6653:5;-1:-1:-1;6710:2:1;6695:18;;6682:32;6723:33;6682:32;6723:33;:::i;:::-;6775:7;6765:17;;;6386:402;;;;;:::o;6793:183::-;6853:4;6886:18;6878:6;6875:30;6872:56;;;6908:18;;:::i;:::-;-1:-1:-1;6953:1:1;6949:14;6965:4;6945:25;;6793:183::o;6981:737::-;7035:5;7088:3;7081:4;7073:6;7069:17;7065:27;7055:55;;7106:1;7103;7096:12;7055:55;7142:6;7129:20;7168:4;7192:60;7208:43;7248:2;7208:43;:::i;:::-;7192:60;:::i;:::-;7286:15;;;7372:1;7368:10;;;;7356:23;;7352:32;;;7317:12;;;;7396:15;;;7393:35;;;7424:1;7421;7414:12;7393:35;7460:2;7452:6;7448:15;7472:217;7488:6;7483:3;7480:15;7472:217;;;7568:3;7555:17;7585:31;7610:5;7585:31;:::i;:::-;7629:18;;7667:12;;;;7505;;7472:217;;;-1:-1:-1;7707:5:1;6981:737;-1:-1:-1;;;;;;6981:737:1:o;7723:1138::-;7841:6;7849;7902:2;7890:9;7881:7;7877:23;7873:32;7870:52;;;7918:1;7915;7908:12;7870:52;7958:9;7945:23;7987:18;8028:2;8020:6;8017:14;8014:34;;;8044:1;8041;8034:12;8014:34;8067:61;8120:7;8111:6;8100:9;8096:22;8067:61;:::i;:::-;8057:71;;8147:2;8137:12;;8202:2;8191:9;8187:18;8174:32;8231:2;8221:8;8218:16;8215:36;;;8247:1;8244;8237:12;8215:36;8270:24;;;-1:-1:-1;8325:4:1;8317:13;;8313:27;-1:-1:-1;8303:55:1;;8354:1;8351;8344:12;8303:55;8390:2;8377:16;8413:60;8429:43;8469:2;8429:43;:::i;8413:60::-;8507:15;;;8589:1;8585:10;;;;8577:19;;8573:28;;;8538:12;;;;8613:19;;;8610:39;;;8645:1;8642;8635:12;8610:39;8669:11;;;;8689:142;8705:6;8700:3;8697:15;8689:142;;;8771:17;;8759:30;;8722:12;;;;8809;;;;8689:142;;;8850:5;8840:15;;;;;;;7723:1138;;;;;:::o;8866:118::-;8952:5;8945:13;8938:21;8931:5;8928:32;8918:60;;8974:1;8971;8964:12;8989:382;9054:6;9062;9115:2;9103:9;9094:7;9090:23;9086:32;9083:52;;;9131:1;9128;9121:12;9083:52;9170:9;9157:23;9189:31;9214:5;9189:31;:::i;:::-;9239:5;-1:-1:-1;9296:2:1;9281:18;;9268:32;9309:30;9268:32;9309:30;:::i;9376:248::-;9444:6;9452;9505:2;9493:9;9484:7;9480:23;9476:32;9473:52;;;9521:1;9518;9511:12;9473:52;-1:-1:-1;;9544:23:1;;;9614:2;9599:18;;;9586:32;;-1:-1:-1;9376:248:1:o;9629:127::-;9690:10;9685:3;9681:20;9678:1;9671:31;9721:4;9718:1;9711:15;9745:4;9742:1;9735:15;9761:342;9907:2;9892:18;;9940:1;9929:13;;9919:144;;9985:10;9980:3;9976:20;9973:1;9966:31;10020:4;10017:1;10010:15;10048:4;10045:1;10038:15;9919:144;10072:25;;;9761:342;:::o;10108:795::-;10203:6;10211;10219;10227;10280:3;10268:9;10259:7;10255:23;10251:33;10248:53;;;10297:1;10294;10287:12;10248:53;10336:9;10323:23;10355:31;10380:5;10355:31;:::i;:::-;10405:5;-1:-1:-1;10462:2:1;10447:18;;10434:32;10475:33;10434:32;10475:33;:::i;:::-;10527:7;-1:-1:-1;10581:2:1;10566:18;;10553:32;;-1:-1:-1;10636:2:1;10621:18;;10608:32;10663:18;10652:30;;10649:50;;;10695:1;10692;10685:12;10649:50;10718:22;;10771:4;10763:13;;10759:27;-1:-1:-1;10749:55:1;;10800:1;10797;10790:12;10749:55;10823:74;10889:7;10884:2;10871:16;10866:2;10862;10858:11;10823:74;:::i;:::-;10813:84;;;10108:795;;;;;;;:::o;10908:416::-;11001:6;11009;11062:2;11050:9;11041:7;11037:23;11033:32;11030:52;;;11078:1;11075;11068:12;11030:52;11118:9;11105:23;11151:18;11143:6;11140:30;11137:50;;;11183:1;11180;11173:12;11137:50;11206:61;11259:7;11250:6;11239:9;11235:22;11206:61;:::i;:::-;11196:71;11314:2;11299:18;;;;11286:32;;-1:-1:-1;;;;10908:416:1:o;11722:270::-;11795:6;11848:2;11836:9;11827:7;11823:23;11819:32;11816:52;;;11864:1;11861;11854:12;11816:52;11903:9;11890:23;11942:1;11935:5;11932:12;11922:40;;11958:1;11955;11948:12;11997:380;12076:1;12072:12;;;;12119;;;12140:61;;12194:4;12186:6;12182:17;12172:27;;12140:61;12247:2;12239:6;12236:14;12216:18;12213:38;12210:161;;12293:10;12288:3;12284:20;12281:1;12274:31;12328:4;12325:1;12318:15;12356:4;12353:1;12346:15;12210:161;;11997:380;;;:::o;12855:545::-;12957:2;12952:3;12949:11;12946:448;;;12993:1;13018:5;13014:2;13007:17;13063:4;13059:2;13049:19;13133:2;13121:10;13117:19;13114:1;13110:27;13104:4;13100:38;13169:4;13157:10;13154:20;13151:47;;;-1:-1:-1;13192:4:1;13151:47;13247:2;13242:3;13238:12;13235:1;13231:20;13225:4;13221:31;13211:41;;13302:82;13320:2;13313:5;13310:13;13302:82;;;13365:17;;;13346:1;13335:13;13302:82;;;13306:3;;;12855:545;;;:::o;13576:1352::-;13702:3;13696:10;13729:18;13721:6;13718:30;13715:56;;;13751:18;;:::i;:::-;13780:97;13870:6;13830:38;13862:4;13856:11;13830:38;:::i;:::-;13824:4;13780:97;:::i;:::-;13932:4;;13996:2;13985:14;;14013:1;14008:663;;;;14715:1;14732:6;14729:89;;;-1:-1:-1;14784:19:1;;;14778:26;14729:89;-1:-1:-1;;13533:1:1;13529:11;;;13525:24;13521:29;13511:40;13557:1;13553:11;;;13508:57;14831:81;;13978:944;;14008:663;12802:1;12795:14;;;12839:4;12826:18;;-1:-1:-1;;14044:20:1;;;14162:236;14176:7;14173:1;14170:14;14162:236;;;14265:19;;;14259:26;14244:42;;14357:27;;;;14325:1;14313:14;;;;14192:19;;14162:236;;;14166:3;14426:6;14417:7;14414:19;14411:201;;;14487:19;;;14481:26;-1:-1:-1;;14570:1:1;14566:14;;;14582:3;14562:24;14558:37;14554:42;14539:58;14524:74;;14411:201;-1:-1:-1;;;;;14658:1:1;14642:14;;;14638:22;14625:36;;-1:-1:-1;13576:1352:1:o;14933:127::-;14994:10;14989:3;14985:20;14982:1;14975:31;15025:4;15022:1;15015:15;15049:4;15046:1;15039:15;15065:128;15132:9;;;15153:11;;;15150:37;;;15167:18;;:::i;15198:125::-;15263:9;;;15284:10;;;15281:36;;;15297:18;;:::i;15328:355::-;15530:2;15512:21;;;15569:2;15549:18;;;15542:30;15608:33;15603:2;15588:18;;15581:61;15674:2;15659:18;;15328:355::o;15688:338::-;15890:2;15872:21;;;15929:2;15909:18;;;15902:30;-1:-1:-1;;;15963:2:1;15948:18;;15941:44;16017:2;16002:18;;15688:338::o;16384:410::-;16586:2;16568:21;;;16625:2;16605:18;;;16598:30;16664:34;16659:2;16644:18;;16637:62;-1:-1:-1;;;16730:2:1;16715:18;;16708:44;16784:3;16769:19;;16384:410::o;16799:168::-;16839:7;16905:1;16901;16897:6;16893:14;16890:1;16887:21;16882:1;16875:9;16868:17;16864:45;16861:71;;;16912:18;;:::i;:::-;-1:-1:-1;16952:9:1;;16799:168::o;16972:422::-;17174:2;17156:21;;;17213:2;17193:18;;;17186:30;17252:34;17247:2;17232:18;;17225:62;17323:28;17318:2;17303:18;;17296:56;17384:3;17369:19;;16972:422::o;17399:355::-;17601:2;17583:21;;;17640:2;17620:18;;;17613:30;17679:33;17674:2;17659:18;;17652:61;17745:2;17730:18;;17399:355::o;17759:127::-;17820:10;17815:3;17811:20;17808:1;17801:31;17851:4;17848:1;17841:15;17875:4;17872:1;17865:15;17891:135;17930:3;17951:17;;;17948:43;;17971:18;;:::i;:::-;-1:-1:-1;18018:1:1;18007:13;;17891:135::o;18031:344::-;18233:2;18215:21;;;18272:2;18252:18;;;18245:30;-1:-1:-1;;;18306:2:1;18291:18;;18284:50;18366:2;18351:18;;18031:344::o;18380:184::-;18450:6;18503:2;18491:9;18482:7;18478:23;18474:32;18471:52;;;18519:1;18516;18509:12;18471:52;-1:-1:-1;18542:16:1;;18380:184;-1:-1:-1;18380:184:1:o;18915:404::-;19117:2;19099:21;;;19156:2;19136:18;;;19129:30;19195:34;19190:2;19175:18;;19168:62;-1:-1:-1;;;19261:2:1;19246:18;;19239:38;19309:3;19294:19;;18915:404::o;19759:338::-;19961:2;19943:21;;;20000:2;19980:18;;;19973:30;-1:-1:-1;;;20034:2:1;20019:18;;20012:44;20088:2;20073:18;;19759:338::o;20102:127::-;20163:10;20158:3;20154:20;20151:1;20144:31;20194:4;20191:1;20184:15;20218:4;20215:1;20208:15;20234:120;20274:1;20300;20290:35;;20305:18;;:::i;:::-;-1:-1:-1;20339:9:1;;20234:120::o;22135:245::-;22202:6;22255:2;22243:9;22234:7;22230:23;22226:32;22223:52;;;22271:1;22268;22261:12;22223:52;22303:9;22297:16;22322:28;22344:5;22322:28;:::i;25457:1020::-;25633:3;25662:1;25695:6;25689:13;25725:36;25751:9;25725:36;:::i;:::-;25780:1;25797:18;;;25824:133;;;;25971:1;25966:356;;;;25790:532;;25824:133;-1:-1:-1;;25857:24:1;;25845:37;;25930:14;;25923:22;25911:35;;25902:45;;;-1:-1:-1;25824:133:1;;25966:356;25997:6;25994:1;25987:17;26027:4;26072:2;26069:1;26059:16;26097:1;26111:165;26125:6;26122:1;26119:13;26111:165;;;26203:14;;26190:11;;;26183:35;26246:16;;;;26140:10;;26111:165;;;26115:3;;;26305:6;26300:3;26296:16;26289:23;;25790:532;;;;;26353:6;26347:13;26369:68;26428:8;26423:3;26416:4;26408:6;26404:17;26369:68;:::i;:::-;26453:18;;25457:1020;-1:-1:-1;;;;25457:1020:1:o;29857:112::-;29889:1;29915;29905:35;;29920:18;;:::i;:::-;-1:-1:-1;29954:9:1;;29857:112::o;29974:489::-;-1:-1:-1;;;;;30243:15:1;;;30225:34;;30295:15;;30290:2;30275:18;;30268:43;30342:2;30327:18;;30320:34;;;30390:3;30385:2;30370:18;;30363:31;;;30168:4;;30411:46;;30437:19;;30429:6;30411:46;:::i;:::-;30403:54;29974:489;-1:-1:-1;;;;;;29974:489:1:o;30468:249::-;30537:6;30590:2;30578:9;30569:7;30565:23;30561:32;30558:52;;;30606:1;30603;30596:12;30558:52;30638:9;30632:16;30657:30;30681:5;30657:30;:::i
Swarm Source
ipfs://9fcd5413b580d474c9eebfd49794b4c055a5d06b3595e9d3e131efa8418f36aa
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.