Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 4,594 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Give Back Owners... | 17050174 | 588 days ago | IN | 0 ETH | 0.00074146 | ||||
Sale Mint | 17046554 | 589 days ago | IN | 0 ETH | 0.00165751 | ||||
Sale Mint | 17046554 | 589 days ago | IN | 0 ETH | 0.00170214 | ||||
Sale Mint | 17046554 | 589 days ago | IN | 0 ETH | 0.00170214 | ||||
Sale Mint | 17046522 | 589 days ago | IN | 0 ETH | 0.00170214 | ||||
Sale Mint | 17046522 | 589 days ago | IN | 0 ETH | 0.00169532 | ||||
Sale Mint | 17046372 | 589 days ago | IN | 0 ETH | 0.00179916 | ||||
Sale Mint | 17046372 | 589 days ago | IN | 0 ETH | 0.00179916 | ||||
Sale Mint | 17046372 | 589 days ago | IN | 0 ETH | 0.00179916 | ||||
Sale Mint | 17046367 | 589 days ago | IN | 0 ETH | 0.00192909 | ||||
Sale Mint | 17046367 | 589 days ago | IN | 0 ETH | 0.00192909 | ||||
Sale Mint | 17046367 | 589 days ago | IN | 0 ETH | 0.00194928 | ||||
Sale Mint | 17046367 | 589 days ago | IN | 0 ETH | 0.00194928 | ||||
Sale Mint | 17046334 | 589 days ago | IN | 0 ETH | 0.00211689 | ||||
Sale Mint | 17046334 | 589 days ago | IN | 0 ETH | 0.00211689 | ||||
Sale Mint | 17046334 | 589 days ago | IN | 0 ETH | 0.00211689 | ||||
Sale Mint | 17046334 | 589 days ago | IN | 0 ETH | 0.00211689 | ||||
Sale Mint | 17046334 | 589 days ago | IN | 0 ETH | 0.00211689 | ||||
Sale Mint | 17046334 | 589 days ago | IN | 0 ETH | 0.00211689 | ||||
Sale Mint | 17046334 | 589 days ago | IN | 0 ETH | 0.00211689 | ||||
Sale Mint | 17046286 | 589 days ago | IN | 0 ETH | 0.00226952 | ||||
Sale Mint | 17046286 | 589 days ago | IN | 0 ETH | 0.00227208 | ||||
Sale Mint | 17046286 | 589 days ago | IN | 0 ETH | 0.00227208 | ||||
Sale Mint | 17046275 | 589 days ago | IN | 0 ETH | 0.00233699 | ||||
Sale Mint | 17046275 | 589 days ago | IN | 0 ETH | 0.00233699 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
FreeMint
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-04-12 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.7; // File @openzeppelin/contracts/utils/math/[email protected] // OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol) /** * @dev Standard math utilities missing in the Solidity language. */ library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) * with further edits by Uniswap Labs also under MIT license. */ function mulDiv( uint256 x, uint256 y, uint256 denominator ) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1); /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv( uint256 x, uint256 y, uint256 denominator, Rounding rounding ) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2, rounded down, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 2, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10, rounded down, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10**64) { value /= 10**64; result += 64; } if (value >= 10**32) { value /= 10**32; result += 32; } if (value >= 10**16) { value /= 10**16; result += 16; } if (value >= 10**8) { value /= 10**8; result += 8; } if (value >= 10**4) { value /= 10**4; result += 4; } if (value >= 10**2) { value /= 10**2; result += 2; } if (value >= 10**1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0); } } /** * @dev Return the log in base 256, rounded down, of a positive value. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0); } } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol) /** * @dev String operations. */ library Strings { bytes16 private constant _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) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), _SYMBOLS)) } value /= 10; if (value == 0) break; } return buffer; } } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } /** * @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] = _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/[email protected] // OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol) /** * @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 // Deprecated in v4.8 } 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"); } } /** * @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) { 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 { 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 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/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) /** * @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 contracts/FreeMint.sol interface IMeteoriaNFT { function ownerMint(uint256, address) external; } contract FreeMint is Ownable { using ECDSA for bytes32; error AmountGreaterThanMax(); error MintPaused(); error NotSale(); error NotPresale(); error OnlyEOA(); error NotWhitelisted(); error NotAllowedSigProtected(); struct SaleConfig { uint64 presaleStart; uint64 presaleEnd; uint8 maxMintsPresale; uint8 maxMintsPublic; bool mintPaused; bool sigProtected; } struct Mint { uint128 presaleMints; uint128 publicMints; } address private constant _PRESALE_AUTHORITY = 0x8734A7EA99895869a16d2c2fc5DBAD78a40F1C70; address public constant METEORIA_NFT = 0x4bD3B5e3936254CE753d154907997597021ce64a; SaleConfig public config; mapping(address => Mint) public mints; event ConfigUpdated(SaleConfig newConf); constructor() { config = SaleConfig( 1681473600, 1681484400, 3, 2, false, true ); } function giveBackOwnership() external onlyOwner { Ownable(METEORIA_NFT).transferOwnership(msg.sender); } function setConfig(SaleConfig calldata newConf) external onlyOwner { config = newConf; emit ConfigUpdated(newConf); } function presaleMint(uint256 amount, bytes calldata sig) external payable { if (msg.sender != tx.origin) revert OnlyEOA(); if ( _PRESALE_AUTHORITY != keccak256( abi.encodePacked(msg.sender, address(this)) ).toEthSignedMessageHash().recover(sig) ) revert NotWhitelisted(); SaleConfig memory conf = config; if (conf.mintPaused) revert MintPaused(); if ( block.timestamp < conf.presaleStart || block.timestamp >= conf.presaleEnd ) revert NotPresale(); Mint memory userMints = mints[msg.sender]; uint256 nextPreMints = userMints.presaleMints + amount; if (nextPreMints > conf.maxMintsPresale) revert AmountGreaterThanMax(); mints[msg.sender].presaleMints = uint128(nextPreMints); IMeteoriaNFT(METEORIA_NFT).ownerMint(amount, msg.sender); } function saleMint(uint256 amount, bytes calldata sig) external payable { if (msg.sender != tx.origin) revert OnlyEOA(); // Not checking soldout => performed on MTO contract SaleConfig memory conf = config; if (conf.mintPaused) revert MintPaused(); if (block.timestamp < conf.presaleEnd) revert NotSale(); if ( conf.sigProtected && _PRESALE_AUTHORITY != keccak256( abi.encodePacked(msg.sender, address(this)) ).toEthSignedMessageHash().recover(sig) ) revert NotAllowedSigProtected(); Mint memory userMints = mints[msg.sender]; uint256 nextPubMints = userMints.publicMints + amount; if (nextPubMints > conf.maxMintsPublic) revert AmountGreaterThanMax(); mints[msg.sender].publicMints = uint128(nextPubMints); IMeteoriaNFT(METEORIA_NFT).ownerMint(amount, msg.sender); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AmountGreaterThanMax","type":"error"},{"inputs":[],"name":"MintPaused","type":"error"},{"inputs":[],"name":"NotAllowedSigProtected","type":"error"},{"inputs":[],"name":"NotPresale","type":"error"},{"inputs":[],"name":"NotSale","type":"error"},{"inputs":[],"name":"NotWhitelisted","type":"error"},{"inputs":[],"name":"OnlyEOA","type":"error"},{"anonymous":false,"inputs":[{"components":[{"internalType":"uint64","name":"presaleStart","type":"uint64"},{"internalType":"uint64","name":"presaleEnd","type":"uint64"},{"internalType":"uint8","name":"maxMintsPresale","type":"uint8"},{"internalType":"uint8","name":"maxMintsPublic","type":"uint8"},{"internalType":"bool","name":"mintPaused","type":"bool"},{"internalType":"bool","name":"sigProtected","type":"bool"}],"indexed":false,"internalType":"struct FreeMint.SaleConfig","name":"newConf","type":"tuple"}],"name":"ConfigUpdated","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"},{"inputs":[],"name":"METEORIA_NFT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"config","outputs":[{"internalType":"uint64","name":"presaleStart","type":"uint64"},{"internalType":"uint64","name":"presaleEnd","type":"uint64"},{"internalType":"uint8","name":"maxMintsPresale","type":"uint8"},{"internalType":"uint8","name":"maxMintsPublic","type":"uint8"},{"internalType":"bool","name":"mintPaused","type":"bool"},{"internalType":"bool","name":"sigProtected","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giveBackOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mints","outputs":[{"internalType":"uint128","name":"presaleMints","type":"uint128"},{"internalType":"uint128","name":"publicMints","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"presaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"saleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"uint64","name":"presaleStart","type":"uint64"},{"internalType":"uint64","name":"presaleEnd","type":"uint64"},{"internalType":"uint8","name":"maxMintsPresale","type":"uint8"},{"internalType":"uint8","name":"maxMintsPublic","type":"uint8"},{"internalType":"bool","name":"mintPaused","type":"bool"},{"internalType":"bool","name":"sigProtected","type":"bool"}],"internalType":"struct FreeMint.SaleConfig","name":"newConf","type":"tuple"}],"name":"setConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b5061002d61002261016e60201b60201c565b61017660201b60201c565b6040518060c00160405280636439404067ffffffffffffffff1681526020016364396a7067ffffffffffffffff168152602001600360ff168152602001600260ff16815260200160001515815260200160011515815250600160008201518160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060208201518160000160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160000160106101000a81548160ff021916908360ff16021790555060608201518160000160116101000a81548160ff021916908360ff16021790555060808201518160000160126101000a81548160ff02191690831515021790555060a08201518160000160136101000a81548160ff02191690831515021790555090505061023a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6120e0806200024a6000396000f3fe6080604052600436106100915760003560e01c8063803019a511610059578063803019a5146101605780638da5cb5b1461018b5780639293a4a7146101b6578063f2fde38b146101cd578063fd24a854146101f657610091565b80632682e5d4146100965780635660f851146100bf57806357a5e84f146100fd578063715018a61461011957806379502c5514610130575b600080fd5b3480156100a257600080fd5b506100bd60048036038101906100b89190611369565b610212565b005b3480156100cb57600080fd5b506100e660048036038101906100e191906113f4565b610266565b6040516100f492919061144c565b60405180910390f35b61011760048036038101906101129190611510565b6102c2565b005b34801561012557600080fd5b5061012e6107e9565b005b34801561013c57600080fd5b506101456107fd565b604051610157969594939291906115ca565b60405180910390f35b34801561016c57600080fd5b50610175610883565b604051610182919061163a565b60405180910390f35b34801561019757600080fd5b506101a061089b565b6040516101ad919061163a565b60405180910390f35b3480156101c257600080fd5b506101cb6108c4565b005b3480156101d957600080fd5b506101f460048036038101906101ef91906113f4565b61094d565b005b610210600480360381019061020b9190611510565b6109d0565b005b61021a610f01565b80600181816102299190611a72565b9050507f6c75a04b3212659f7128f584f5f8dad5d22443374e7ad52115d370641e7a477c8160405161025b9190611bdc565b60405180910390a150565b60026020528060005260406000206000915090508060000160009054906101000a90046fffffffffffffffffffffffffffffffff16908060000160109054906101000a90046fffffffffffffffffffffffffffffffff16905082565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610327576040517f9f8129d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060016040518060c00160405290816000820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160109054906101000a900460ff1660ff1660ff1681526020016000820160119054906101000a900460ff1660ff1660ff1681526020016000820160129054906101000a900460ff161515151581526020016000820160139054906101000a900460ff1615151515815250509050806080015115610448576040517fd7d248ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806020015167ffffffffffffffff16421015610490576040517fa7283fb900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060a001518015610567575061052383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061051533306040516020016104fa929190611c3f565b60405160208183030381529060405280519060200120610f7f565b610faf90919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff16738734a7ea99895869a16d2c2fc5dbad78a40f1c7073ffffffffffffffffffffffffffffffffffffffff1614155b1561059e576040517f6d4c361600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060008582602001516fffffffffffffffffffffffffffffffff166106a49190611c9a565b9050826060015160ff168111156106e7576040517fd65b7e0700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550734bd3b5e3936254ce753d154907997597021ce64a73ffffffffffffffffffffffffffffffffffffffff1663d52c57e087336040518363ffffffff1660e01b81526004016107af929190611cdd565b600060405180830381600087803b1580156107c957600080fd5b505af11580156107dd573d6000803e3d6000fd5b50505050505050505050565b6107f1610f01565b6107fb6000610fd6565b565b60018060000160009054906101000a900467ffffffffffffffff16908060000160089054906101000a900467ffffffffffffffff16908060000160109054906101000a900460ff16908060000160119054906101000a900460ff16908060000160129054906101000a900460ff16908060000160139054906101000a900460ff16905086565b734bd3b5e3936254ce753d154907997597021ce64a81565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6108cc610f01565b734bd3b5e3936254ce753d154907997597021ce64a73ffffffffffffffffffffffffffffffffffffffff1663f2fde38b336040518263ffffffff1660e01b8152600401610919919061163a565b600060405180830381600087803b15801561093357600080fd5b505af1158015610947573d6000803e3d6000fd5b50505050565b610955610f01565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bb90611d89565b60405180910390fd5b6109cd81610fd6565b50565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a35576040517f9f8129d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610abc82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610aae3330604051602001610a93929190611c3f565b60405160208183030381529060405280519060200120610f7f565b610faf90919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff16738734a7ea99895869a16d2c2fc5dbad78a40f1c7073ffffffffffffffffffffffffffffffffffffffff1614610b34576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060016040518060c00160405290816000820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160109054906101000a900460ff1660ff1660ff1681526020016000820160119054906101000a900460ff1660ff1660ff1681526020016000820160129054906101000a900460ff161515151581526020016000820160139054906101000a900460ff1615151515815250509050806080015115610c55576040517fd7d248ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000015167ffffffffffffffff16421080610c7f5750806020015167ffffffffffffffff164210155b15610cb6576040517f310a594a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060008582600001516fffffffffffffffffffffffffffffffff16610dbc9190611c9a565b9050826040015160ff16811115610dff576040517fd65b7e0700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550734bd3b5e3936254ce753d154907997597021ce64a73ffffffffffffffffffffffffffffffffffffffff1663d52c57e087336040518363ffffffff1660e01b8152600401610ec7929190611cdd565b600060405180830381600087803b158015610ee157600080fd5b505af1158015610ef5573d6000803e3d6000fd5b50505050505050505050565b610f0961109a565b73ffffffffffffffffffffffffffffffffffffffff16610f2761089b565b73ffffffffffffffffffffffffffffffffffffffff1614610f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7490611df5565b60405180910390fd5b565b600081604051602001610f929190611e97565b604051602081830303815290604052805190602001209050919050565b6000806000610fbe85856110a2565b91509150610fcb816110f3565b819250505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b60008060418351036110e35760008060006020860151925060408601519150606086015160001a90506110d787828585611259565b945094505050506110ec565b60006002915091505b9250929050565b6000600481111561110757611106611ebd565b5b81600481111561111a57611119611ebd565b5b0315611256576001600481111561113457611133611ebd565b5b81600481111561114757611146611ebd565b5b03611187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117e90611f38565b60405180910390fd5b6002600481111561119b5761119a611ebd565b5b8160048111156111ae576111ad611ebd565b5b036111ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e590611fa4565b60405180910390fd5b6003600481111561120257611201611ebd565b5b81600481111561121557611214611ebd565b5b03611255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124c90612036565b60405180910390fd5b5b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115611294576000600391509150611332565b6000600187878787604051600081526020016040526040516112b99493929190612065565b6020604051602081039080840390855afa1580156112db573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361132957600060019250925050611332565b80600092509250505b94509492505050565b600080fd5b600080fd5b600080fd5b600060c082840312156113605761135f611345565b5b81905092915050565b600060c0828403121561137f5761137e61133b565b5b600061138d8482850161134a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006113c182611396565b9050919050565b6113d1816113b6565b81146113dc57600080fd5b50565b6000813590506113ee816113c8565b92915050565b60006020828403121561140a5761140961133b565b5b6000611418848285016113df565b91505092915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b61144681611421565b82525050565b6000604082019050611461600083018561143d565b61146e602083018461143d565b9392505050565b6000819050919050565b61148881611475565b811461149357600080fd5b50565b6000813590506114a58161147f565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126114d0576114cf6114ab565b5b8235905067ffffffffffffffff8111156114ed576114ec6114b0565b5b602083019150836001820283011115611509576115086114b5565b5b9250929050565b6000806000604084860312156115295761152861133b565b5b600061153786828701611496565b935050602084013567ffffffffffffffff81111561155857611557611340565b5b611564868287016114ba565b92509250509250925092565b600067ffffffffffffffff82169050919050565b61158d81611570565b82525050565b600060ff82169050919050565b6115a981611593565b82525050565b60008115159050919050565b6115c4816115af565b82525050565b600060c0820190506115df6000830189611584565b6115ec6020830188611584565b6115f960408301876115a0565b61160660608301866115a0565b61161360808301856115bb565b61162060a08301846115bb565b979650505050505050565b611634816113b6565b82525050565b600060208201905061164f600083018461162b565b92915050565b61165e81611570565b811461166957600080fd5b50565b6000813561167981611655565b80915050919050565b60008160001b9050919050565b600067ffffffffffffffff6116a384611682565b9350801983169250808416831791505092915050565b6000819050919050565b60006116de6116d96116d484611570565b6116b9565b611570565b9050919050565b6000819050919050565b6116f8826116c3565b61170b611704826116e5565b835461168f565b8255505050565b60008160401b9050919050565b60006fffffffffffffffff000000000000000061173b84611712565b9350801983169250808416831791505092915050565b61175a826116c3565b61176d611766826116e5565b835461171f565b8255505050565b61177d81611593565b811461178857600080fd5b50565b6000813561179881611774565b80915050919050565b60008160801b9050919050565b600070ff000000000000000000000000000000006117cb846117a1565b9350801983169250808416831791505092915050565b60006117fc6117f76117f284611593565b6116b9565b611593565b9050919050565b6000819050919050565b611816826117e1565b61182961182282611803565b83546117ae565b8255505050565b60008160881b9050919050565b600071ff000000000000000000000000000000000061185b84611830565b9350801983169250808416831791505092915050565b61187a826117e1565b61188d61188682611803565b835461183d565b8255505050565b61189d816115af565b81146118a857600080fd5b50565b600081356118b881611894565b80915050919050565b60008160901b9050919050565b600072ff0000000000000000000000000000000000006118ed846118c1565b9350801983169250808416831791505092915050565b600061190e826115af565b9050919050565b6000819050919050565b61192882611903565b61193b61193482611915565b83546118ce565b8255505050565b60008160981b9050919050565b600073ff0000000000000000000000000000000000000061196f84611942565b9350801983169250808416831791505092915050565b61198e82611903565b6119a161199a82611915565b835461194f565b8255505050565b6000810160008301806119ba8161166c565b90506119c681846116ef565b5050506000810160208301806119db8161166c565b90506119e78184611751565b5050506000810160408301806119fc8161178b565b9050611a08818461180d565b505050600081016060830180611a1d8161178b565b9050611a298184611871565b505050600081016080830180611a3e816118ab565b9050611a4a818461191f565b5050506000810160a0830180611a5f816118ab565b9050611a6b8184611985565b5050505050565b611a7c82826119a8565b5050565b600081359050611a8f81611655565b92915050565b6000611aa46020840184611a80565b905092915050565b611ab581611570565b82525050565b600081359050611aca81611774565b92915050565b6000611adf6020840184611abb565b905092915050565b611af081611593565b82525050565b600081359050611b0581611894565b92915050565b6000611b1a6020840184611af6565b905092915050565b611b2b816115af565b82525050565b60c08201611b426000830183611a95565b611b4f6000850182611aac565b50611b5d6020830183611a95565b611b6a6020850182611aac565b50611b786040830183611ad0565b611b856040850182611ae7565b50611b936060830183611ad0565b611ba06060850182611ae7565b50611bae6080830183611b0b565b611bbb6080850182611b22565b50611bc960a0830183611b0b565b611bd660a0850182611b22565b50505050565b600060c082019050611bf16000830184611b31565b92915050565b60008160601b9050919050565b6000611c0f82611bf7565b9050919050565b6000611c2182611c04565b9050919050565b611c39611c34826113b6565b611c16565b82525050565b6000611c4b8285611c28565b601482019150611c5b8284611c28565b6014820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611ca582611475565b9150611cb083611475565b9250828201905080821115611cc857611cc7611c6b565b5b92915050565b611cd781611475565b82525050565b6000604082019050611cf26000830185611cce565b611cff602083018461162b565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611d73602683611d06565b9150611d7e82611d17565b604082019050919050565b60006020820190508181036000830152611da281611d66565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611ddf602083611d06565b9150611dea82611da9565b602082019050919050565b60006020820190508181036000830152611e0e81611dd2565b9050919050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000611e56601c83611e15565b9150611e6182611e20565b601c82019050919050565b6000819050919050565b6000819050919050565b611e91611e8c82611e6c565b611e76565b82525050565b6000611ea282611e49565b9150611eae8284611e80565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000611f22601883611d06565b9150611f2d82611eec565b602082019050919050565b60006020820190508181036000830152611f5181611f15565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000611f8e601f83611d06565b9150611f9982611f58565b602082019050919050565b60006020820190508181036000830152611fbd81611f81565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000612020602283611d06565b915061202b82611fc4565b604082019050919050565b6000602082019050818103600083015261204f81612013565b9050919050565b61205f81611e6c565b82525050565b600060808201905061207a6000830187612056565b61208760208301866115a0565b6120946040830185612056565b6120a16060830184612056565b9594505050505056fea264697066735822122021d6056fe319cb5df14c2b84cc857bcb3de7a9b325008eaee79ca539535fbff464736f6c63430008120033
Deployed Bytecode
0x6080604052600436106100915760003560e01c8063803019a511610059578063803019a5146101605780638da5cb5b1461018b5780639293a4a7146101b6578063f2fde38b146101cd578063fd24a854146101f657610091565b80632682e5d4146100965780635660f851146100bf57806357a5e84f146100fd578063715018a61461011957806379502c5514610130575b600080fd5b3480156100a257600080fd5b506100bd60048036038101906100b89190611369565b610212565b005b3480156100cb57600080fd5b506100e660048036038101906100e191906113f4565b610266565b6040516100f492919061144c565b60405180910390f35b61011760048036038101906101129190611510565b6102c2565b005b34801561012557600080fd5b5061012e6107e9565b005b34801561013c57600080fd5b506101456107fd565b604051610157969594939291906115ca565b60405180910390f35b34801561016c57600080fd5b50610175610883565b604051610182919061163a565b60405180910390f35b34801561019757600080fd5b506101a061089b565b6040516101ad919061163a565b60405180910390f35b3480156101c257600080fd5b506101cb6108c4565b005b3480156101d957600080fd5b506101f460048036038101906101ef91906113f4565b61094d565b005b610210600480360381019061020b9190611510565b6109d0565b005b61021a610f01565b80600181816102299190611a72565b9050507f6c75a04b3212659f7128f584f5f8dad5d22443374e7ad52115d370641e7a477c8160405161025b9190611bdc565b60405180910390a150565b60026020528060005260406000206000915090508060000160009054906101000a90046fffffffffffffffffffffffffffffffff16908060000160109054906101000a90046fffffffffffffffffffffffffffffffff16905082565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610327576040517f9f8129d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060016040518060c00160405290816000820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160109054906101000a900460ff1660ff1660ff1681526020016000820160119054906101000a900460ff1660ff1660ff1681526020016000820160129054906101000a900460ff161515151581526020016000820160139054906101000a900460ff1615151515815250509050806080015115610448576040517fd7d248ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806020015167ffffffffffffffff16421015610490576040517fa7283fb900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060a001518015610567575061052383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061051533306040516020016104fa929190611c3f565b60405160208183030381529060405280519060200120610f7f565b610faf90919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff16738734a7ea99895869a16d2c2fc5dbad78a40f1c7073ffffffffffffffffffffffffffffffffffffffff1614155b1561059e576040517f6d4c361600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060008582602001516fffffffffffffffffffffffffffffffff166106a49190611c9a565b9050826060015160ff168111156106e7576040517fd65b7e0700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550734bd3b5e3936254ce753d154907997597021ce64a73ffffffffffffffffffffffffffffffffffffffff1663d52c57e087336040518363ffffffff1660e01b81526004016107af929190611cdd565b600060405180830381600087803b1580156107c957600080fd5b505af11580156107dd573d6000803e3d6000fd5b50505050505050505050565b6107f1610f01565b6107fb6000610fd6565b565b60018060000160009054906101000a900467ffffffffffffffff16908060000160089054906101000a900467ffffffffffffffff16908060000160109054906101000a900460ff16908060000160119054906101000a900460ff16908060000160129054906101000a900460ff16908060000160139054906101000a900460ff16905086565b734bd3b5e3936254ce753d154907997597021ce64a81565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6108cc610f01565b734bd3b5e3936254ce753d154907997597021ce64a73ffffffffffffffffffffffffffffffffffffffff1663f2fde38b336040518263ffffffff1660e01b8152600401610919919061163a565b600060405180830381600087803b15801561093357600080fd5b505af1158015610947573d6000803e3d6000fd5b50505050565b610955610f01565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bb90611d89565b60405180910390fd5b6109cd81610fd6565b50565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a35576040517f9f8129d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610abc82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610aae3330604051602001610a93929190611c3f565b60405160208183030381529060405280519060200120610f7f565b610faf90919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff16738734a7ea99895869a16d2c2fc5dbad78a40f1c7073ffffffffffffffffffffffffffffffffffffffff1614610b34576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060016040518060c00160405290816000820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160109054906101000a900460ff1660ff1660ff1681526020016000820160119054906101000a900460ff1660ff1660ff1681526020016000820160129054906101000a900460ff161515151581526020016000820160139054906101000a900460ff1615151515815250509050806080015115610c55576040517fd7d248ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000015167ffffffffffffffff16421080610c7f5750806020015167ffffffffffffffff164210155b15610cb6576040517f310a594a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060008582600001516fffffffffffffffffffffffffffffffff16610dbc9190611c9a565b9050826040015160ff16811115610dff576040517fd65b7e0700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550734bd3b5e3936254ce753d154907997597021ce64a73ffffffffffffffffffffffffffffffffffffffff1663d52c57e087336040518363ffffffff1660e01b8152600401610ec7929190611cdd565b600060405180830381600087803b158015610ee157600080fd5b505af1158015610ef5573d6000803e3d6000fd5b50505050505050505050565b610f0961109a565b73ffffffffffffffffffffffffffffffffffffffff16610f2761089b565b73ffffffffffffffffffffffffffffffffffffffff1614610f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7490611df5565b60405180910390fd5b565b600081604051602001610f929190611e97565b604051602081830303815290604052805190602001209050919050565b6000806000610fbe85856110a2565b91509150610fcb816110f3565b819250505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b60008060418351036110e35760008060006020860151925060408601519150606086015160001a90506110d787828585611259565b945094505050506110ec565b60006002915091505b9250929050565b6000600481111561110757611106611ebd565b5b81600481111561111a57611119611ebd565b5b0315611256576001600481111561113457611133611ebd565b5b81600481111561114757611146611ebd565b5b03611187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117e90611f38565b60405180910390fd5b6002600481111561119b5761119a611ebd565b5b8160048111156111ae576111ad611ebd565b5b036111ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e590611fa4565b60405180910390fd5b6003600481111561120257611201611ebd565b5b81600481111561121557611214611ebd565b5b03611255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124c90612036565b60405180910390fd5b5b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115611294576000600391509150611332565b6000600187878787604051600081526020016040526040516112b99493929190612065565b6020604051602081039080840390855afa1580156112db573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361132957600060019250925050611332565b80600092509250505b94509492505050565b600080fd5b600080fd5b600080fd5b600060c082840312156113605761135f611345565b5b81905092915050565b600060c0828403121561137f5761137e61133b565b5b600061138d8482850161134a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006113c182611396565b9050919050565b6113d1816113b6565b81146113dc57600080fd5b50565b6000813590506113ee816113c8565b92915050565b60006020828403121561140a5761140961133b565b5b6000611418848285016113df565b91505092915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b61144681611421565b82525050565b6000604082019050611461600083018561143d565b61146e602083018461143d565b9392505050565b6000819050919050565b61148881611475565b811461149357600080fd5b50565b6000813590506114a58161147f565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126114d0576114cf6114ab565b5b8235905067ffffffffffffffff8111156114ed576114ec6114b0565b5b602083019150836001820283011115611509576115086114b5565b5b9250929050565b6000806000604084860312156115295761152861133b565b5b600061153786828701611496565b935050602084013567ffffffffffffffff81111561155857611557611340565b5b611564868287016114ba565b92509250509250925092565b600067ffffffffffffffff82169050919050565b61158d81611570565b82525050565b600060ff82169050919050565b6115a981611593565b82525050565b60008115159050919050565b6115c4816115af565b82525050565b600060c0820190506115df6000830189611584565b6115ec6020830188611584565b6115f960408301876115a0565b61160660608301866115a0565b61161360808301856115bb565b61162060a08301846115bb565b979650505050505050565b611634816113b6565b82525050565b600060208201905061164f600083018461162b565b92915050565b61165e81611570565b811461166957600080fd5b50565b6000813561167981611655565b80915050919050565b60008160001b9050919050565b600067ffffffffffffffff6116a384611682565b9350801983169250808416831791505092915050565b6000819050919050565b60006116de6116d96116d484611570565b6116b9565b611570565b9050919050565b6000819050919050565b6116f8826116c3565b61170b611704826116e5565b835461168f565b8255505050565b60008160401b9050919050565b60006fffffffffffffffff000000000000000061173b84611712565b9350801983169250808416831791505092915050565b61175a826116c3565b61176d611766826116e5565b835461171f565b8255505050565b61177d81611593565b811461178857600080fd5b50565b6000813561179881611774565b80915050919050565b60008160801b9050919050565b600070ff000000000000000000000000000000006117cb846117a1565b9350801983169250808416831791505092915050565b60006117fc6117f76117f284611593565b6116b9565b611593565b9050919050565b6000819050919050565b611816826117e1565b61182961182282611803565b83546117ae565b8255505050565b60008160881b9050919050565b600071ff000000000000000000000000000000000061185b84611830565b9350801983169250808416831791505092915050565b61187a826117e1565b61188d61188682611803565b835461183d565b8255505050565b61189d816115af565b81146118a857600080fd5b50565b600081356118b881611894565b80915050919050565b60008160901b9050919050565b600072ff0000000000000000000000000000000000006118ed846118c1565b9350801983169250808416831791505092915050565b600061190e826115af565b9050919050565b6000819050919050565b61192882611903565b61193b61193482611915565b83546118ce565b8255505050565b60008160981b9050919050565b600073ff0000000000000000000000000000000000000061196f84611942565b9350801983169250808416831791505092915050565b61198e82611903565b6119a161199a82611915565b835461194f565b8255505050565b6000810160008301806119ba8161166c565b90506119c681846116ef565b5050506000810160208301806119db8161166c565b90506119e78184611751565b5050506000810160408301806119fc8161178b565b9050611a08818461180d565b505050600081016060830180611a1d8161178b565b9050611a298184611871565b505050600081016080830180611a3e816118ab565b9050611a4a818461191f565b5050506000810160a0830180611a5f816118ab565b9050611a6b8184611985565b5050505050565b611a7c82826119a8565b5050565b600081359050611a8f81611655565b92915050565b6000611aa46020840184611a80565b905092915050565b611ab581611570565b82525050565b600081359050611aca81611774565b92915050565b6000611adf6020840184611abb565b905092915050565b611af081611593565b82525050565b600081359050611b0581611894565b92915050565b6000611b1a6020840184611af6565b905092915050565b611b2b816115af565b82525050565b60c08201611b426000830183611a95565b611b4f6000850182611aac565b50611b5d6020830183611a95565b611b6a6020850182611aac565b50611b786040830183611ad0565b611b856040850182611ae7565b50611b936060830183611ad0565b611ba06060850182611ae7565b50611bae6080830183611b0b565b611bbb6080850182611b22565b50611bc960a0830183611b0b565b611bd660a0850182611b22565b50505050565b600060c082019050611bf16000830184611b31565b92915050565b60008160601b9050919050565b6000611c0f82611bf7565b9050919050565b6000611c2182611c04565b9050919050565b611c39611c34826113b6565b611c16565b82525050565b6000611c4b8285611c28565b601482019150611c5b8284611c28565b6014820191508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611ca582611475565b9150611cb083611475565b9250828201905080821115611cc857611cc7611c6b565b5b92915050565b611cd781611475565b82525050565b6000604082019050611cf26000830185611cce565b611cff602083018461162b565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611d73602683611d06565b9150611d7e82611d17565b604082019050919050565b60006020820190508181036000830152611da281611d66565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611ddf602083611d06565b9150611dea82611da9565b602082019050919050565b60006020820190508181036000830152611e0e81611dd2565b9050919050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000611e56601c83611e15565b9150611e6182611e20565b601c82019050919050565b6000819050919050565b6000819050919050565b611e91611e8c82611e6c565b611e76565b82525050565b6000611ea282611e49565b9150611eae8284611e80565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000611f22601883611d06565b9150611f2d82611eec565b602082019050919050565b60006020820190508181036000830152611f5181611f15565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000611f8e601f83611d06565b9150611f9982611f58565b602082019050919050565b60006020820190508181036000830152611fbd81611f81565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000612020602283611d06565b915061202b82611fc4565b604082019050919050565b6000602082019050818103600083015261204f81612013565b9050919050565b61205f81611e6c565b82525050565b600060808201905061207a6000830187612056565b61208760208301866115a0565b6120946040830185612056565b6120a16060830184612056565b9594505050505056fea264697066735822122021d6056fe319cb5df14c2b84cc857bcb3de7a9b325008eaee79ca539535fbff464736f6c63430008120033
Deployed Bytecode Sourcemap
27617:3324:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28828:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28416:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;29953:985;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26683:103;;;;;;;;;;;;;:::i;:::-;;28383:24;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;28284:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26035:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28702:118;;;;;;;;;;;;;:::i;:::-;;26941:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28978:967;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28828:142;25921:13;:11;:13::i;:::-;28915:7:::1;28906:6;:16;;;;;;:::i;:::-;;;;28940:22;28954:7;28940:22;;;;;;:::i;:::-;;;;;;;;28828:142:::0;:::o;28416:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29953:985::-;30076:9;30062:23;;:10;:23;;;30058:45;;30094:9;;;;;;;;;;;;;;30058:45;30176:22;30201:6;30176:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30224:4;:15;;;30220:40;;;30248:12;;;;;;;;;;;;;;30220:40;30293:4;:15;;;30275:33;;:15;:33;30271:55;;;30317:9;;;;;;;;;;;;;;30271:55;30357:4;:17;;;:180;;;;;30413:124;30533:3;;30413:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:111;30458:10;30478:4;30441:43;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30413:86;;;;;;:109;:111::i;:::-;:119;;:124;;;;:::i;:::-;30391:146;;28235:42;30391:146;;;;30357:180;30339:241;;;30556:24;;;;;;;;;;;;;;30339:241;30593:21;30617:5;:17;30623:10;30617:17;;;;;;;;;;;;;;;30593:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30647:20;30694:6;30670:9;:21;;;:30;;;;;;:::i;:::-;30647:53;;30732:4;:19;;;30717:34;;:12;:34;30713:82;;;30773:22;;;;;;;;;;;;;;30713:82;30848:12;30808:5;:17;30814:10;30808:17;;;;;;;;;;;;;;;:29;;;:53;;;;;;;;;;;;;;;;;;28332:42;30874:36;;;30911:6;30919:10;30874:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30047:891;;;29953:985;;;:::o;26683:103::-;25921:13;:11;:13::i;:::-;26748:30:::1;26775:1;26748:18;:30::i;:::-;26683:103::o:0;28383:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28284:90::-;28332:42;28284:90;:::o;26035:87::-;26081:7;26108:6;;;;;;;;;;;26101:13;;26035:87;:::o;28702:118::-;25921:13;:11;:13::i;:::-;28332:42:::1;28761:39;;;28801:10;28761:51;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28702:118::o:0;26941:201::-;25921:13;:11;:13::i;:::-;27050:1:::1;27030:22;;:8;:22;;::::0;27022:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27106:28;27125:8;27106:18;:28::i;:::-;26941:201:::0;:::o;28978:967::-;29104:9;29090:23;;:10;:23;;;29086:45;;29122:9;;;;;;;;;;;;;;29086:45;29182:124;29302:3;;29182:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:111;29227:10;29247:4;29210:43;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29182:86;;;;;;:109;:111::i;:::-;:119;;:124;;;;:::i;:::-;29160:146;;28235:42;29160:146;;;29142:199;;29325:16;;;;;;;;;;;;;;29142:199;29354:22;29379:6;29354:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29402:4;:15;;;29398:40;;;29426:12;;;;;;;;;;;;;;29398:40;29485:4;:17;;;29467:35;;:15;:35;:86;;;;29538:4;:15;;;29519:34;;:15;:34;;29467:86;29449:135;;;29572:12;;;;;;;;;;;;;;29449:135;29597:21;29621:5;:17;29627:10;29621:17;;;;;;;;;;;;;;;29597:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29651:20;29699:6;29674:9;:22;;;:31;;;;;;:::i;:::-;29651:54;;29737:4;:20;;;29722:35;;:12;:35;29718:83;;;29779:22;;;;;;;;;;;;;;29718:83;29855:12;29814:5;:17;29820:10;29814:17;;;;;;;;;;;;;;;:30;;;:54;;;;;;;;;;;;;;;;;;28332:42;29881:36;;;29918:6;29926:10;29881:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29075:870;;;28978:967;;;:::o;26200:132::-;26275:12;:10;:12::i;:::-;26264:23;;:7;:5;:7::i;:::-;:23;;;26256:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26200:132::o;22636:269::-;22705:7;22891:4;22838:58;;;;;;;;:::i;:::-;;;;;;;;;;;;;22828:69;;;;;;22821:76;;22636:269;;;:::o;18946:231::-;19024:7;19045:17;19064:18;19086:27;19097:4;19103:9;19086:10;:27::i;:::-;19044:69;;;;19124:18;19136:5;19124:11;:18::i;:::-;19160:9;19153:16;;;;18946:231;;;;:::o;27302:191::-;27376:16;27395:6;;;;;;;;;;;27376:25;;27421:8;27412:6;;:17;;;;;;;;;;;;;;;;;;27476:8;27445:40;;27466:8;27445:40;;;;;;;;;;;;27365:128;27302:191;:::o;24609:98::-;24662:7;24689:10;24682:17;;24609:98;:::o;17397:747::-;17478:7;17487:12;17536:2;17516:9;:16;:22;17512:625;;17555:9;17579;17603:7;17860:4;17849:9;17845:20;17839:27;17834:32;;17910:4;17899:9;17895:20;17889:27;17884:32;;17968:4;17957:9;17953:20;17947:27;17944:1;17939:36;17934:41;;18011:25;18022:4;18028:1;18031;18034;18011:10;:25::i;:::-;18004:32;;;;;;;;;17512:625;18085:1;18089:35;18069:56;;;;17397:747;;;;;;:::o;15790:521::-;15868:20;15859:29;;;;;;;;:::i;:::-;;:5;:29;;;;;;;;:::i;:::-;;;15855:449;15905:7;15855:449;15966:29;15957:38;;;;;;;;:::i;:::-;;:5;:38;;;;;;;;:::i;:::-;;;15953:351;;16012:34;;;;;;;;;;:::i;:::-;;;;;;;;15953:351;16077:35;16068:44;;;;;;;;:::i;:::-;;:5;:44;;;;;;;;:::i;:::-;;;16064:240;;16129:41;;;;;;;;;;:::i;:::-;;;;;;;;16064:240;16201:30;16192:39;;;;;;;;:::i;:::-;;:5;:39;;;;;;;;:::i;:::-;;;16188:116;;16248:44;;;;;;;;;;:::i;:::-;;;;;;;;16188:116;15790:521;;:::o;20398:1520::-;20529:7;20538:12;21463:66;21458:1;21450:10;;:79;21446:163;;;21562:1;21566:30;21546:51;;;;;;21446:163;21706:14;21723:24;21733:4;21739:1;21742;21745;21723:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21706:41;;21780:1;21762:20;;:6;:20;;;21758:103;;21815:1;21819:29;21799:50;;;;;;;21758:103;21881:6;21889:20;21873:37;;;;;20398:1520;;;;;;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;491:235;567:5;608:3;599:6;594:3;590:16;586:26;583:113;;;615:79;;:::i;:::-;583:113;714:6;705:15;;491:235;;;;:::o;732:390::-;821:6;870:3;858:9;849:7;845:23;841:33;838:120;;;877:79;;:::i;:::-;838:120;997:1;1022:83;1097:7;1088:6;1077:9;1073:22;1022:83;:::i;:::-;1012:93;;968:147;732:390;;;;:::o;1128:126::-;1165:7;1205:42;1198:5;1194:54;1183:65;;1128:126;;;:::o;1260:96::-;1297:7;1326:24;1344:5;1326:24;:::i;:::-;1315:35;;1260:96;;;:::o;1362:122::-;1435:24;1453:5;1435:24;:::i;:::-;1428:5;1425:35;1415:63;;1474:1;1471;1464:12;1415:63;1362:122;:::o;1490:139::-;1536:5;1574:6;1561:20;1552:29;;1590:33;1617:5;1590:33;:::i;:::-;1490:139;;;;:::o;1635:329::-;1694:6;1743:2;1731:9;1722:7;1718:23;1714:32;1711:119;;;1749:79;;:::i;:::-;1711:119;1869:1;1894:53;1939:7;1930:6;1919:9;1915:22;1894:53;:::i;:::-;1884:63;;1840:117;1635:329;;;;:::o;1970:118::-;2007:7;2047:34;2040:5;2036:46;2025:57;;1970:118;;;:::o;2094:::-;2181:24;2199:5;2181:24;:::i;:::-;2176:3;2169:37;2094:118;;:::o;2218:332::-;2339:4;2377:2;2366:9;2362:18;2354:26;;2390:71;2458:1;2447:9;2443:17;2434:6;2390:71;:::i;:::-;2471:72;2539:2;2528:9;2524:18;2515:6;2471:72;:::i;:::-;2218:332;;;;;:::o;2556:77::-;2593:7;2622:5;2611:16;;2556:77;;;:::o;2639:122::-;2712:24;2730:5;2712:24;:::i;:::-;2705:5;2702:35;2692:63;;2751:1;2748;2741:12;2692:63;2639:122;:::o;2767:139::-;2813:5;2851:6;2838:20;2829:29;;2867:33;2894:5;2867:33;:::i;:::-;2767:139;;;;:::o;2912:117::-;3021:1;3018;3011:12;3035:117;3144:1;3141;3134:12;3158:117;3267:1;3264;3257:12;3294:552;3351:8;3361:6;3411:3;3404:4;3396:6;3392:17;3388:27;3378:122;;3419:79;;:::i;:::-;3378:122;3532:6;3519:20;3509:30;;3562:18;3554:6;3551:30;3548:117;;;3584:79;;:::i;:::-;3548:117;3698:4;3690:6;3686:17;3674:29;;3752:3;3744:4;3736:6;3732:17;3722:8;3718:32;3715:41;3712:128;;;3759:79;;:::i;:::-;3712:128;3294:552;;;;;:::o;3852:672::-;3931:6;3939;3947;3996:2;3984:9;3975:7;3971:23;3967:32;3964:119;;;4002:79;;:::i;:::-;3964:119;4122:1;4147:53;4192:7;4183:6;4172:9;4168:22;4147:53;:::i;:::-;4137:63;;4093:117;4277:2;4266:9;4262:18;4249:32;4308:18;4300:6;4297:30;4294:117;;;4330:79;;:::i;:::-;4294:117;4443:64;4499:7;4490:6;4479:9;4475:22;4443:64;:::i;:::-;4425:82;;;;4220:297;3852:672;;;;;:::o;4530:101::-;4566:7;4606:18;4599:5;4595:30;4584:41;;4530:101;;;:::o;4637:115::-;4722:23;4739:5;4722:23;:::i;:::-;4717:3;4710:36;4637:115;;:::o;4758:86::-;4793:7;4833:4;4826:5;4822:16;4811:27;;4758:86;;;:::o;4850:112::-;4933:22;4949:5;4933:22;:::i;:::-;4928:3;4921:35;4850:112;;:::o;4968:90::-;5002:7;5045:5;5038:13;5031:21;5020:32;;4968:90;;;:::o;5064:109::-;5145:21;5160:5;5145:21;:::i;:::-;5140:3;5133:34;5064:109;;:::o;5179:727::-;5388:4;5426:3;5415:9;5411:19;5403:27;;5440:69;5506:1;5495:9;5491:17;5482:6;5440:69;:::i;:::-;5519:70;5585:2;5574:9;5570:18;5561:6;5519:70;:::i;:::-;5599:68;5663:2;5652:9;5648:18;5639:6;5599:68;:::i;:::-;5677;5741:2;5730:9;5726:18;5717:6;5677:68;:::i;:::-;5755:67;5817:3;5806:9;5802:19;5793:6;5755:67;:::i;:::-;5832;5894:3;5883:9;5879:19;5870:6;5832:67;:::i;:::-;5179:727;;;;;;;;;:::o;5912:118::-;5999:24;6017:5;5999:24;:::i;:::-;5994:3;5987:37;5912:118;;:::o;6036:222::-;6129:4;6167:2;6156:9;6152:18;6144:26;;6180:71;6248:1;6237:9;6233:17;6224:6;6180:71;:::i;:::-;6036:222;;;;:::o;6450:120::-;6522:23;6539:5;6522:23;:::i;:::-;6515:5;6512:34;6502:62;;6560:1;6557;6550:12;6502:62;6450:120;:::o;6576:184::-;6620:11;6669:3;6656:17;6682:32;6708:5;6682:32;:::i;:::-;6748:5;6724:29;;6632:128;6576:184;;;:::o;6766:92::-;6798:8;6845:5;6842:1;6838:13;6817:34;;6766:92;;;:::o;6864:241::-;6921:6;6950:18;6989:22;7002:8;6989:22;:::i;:::-;6977:34;;7044:4;7040:9;7033:5;7029:21;7020:30;;7093:4;7083:8;7079:19;7072:5;7069:30;7059:40;;6928:177;6864:241;;;;:::o;7111:60::-;7139:3;7160:5;7153:12;;7111:60;;;:::o;7177:138::-;7225:9;7258:51;7275:33;7284:23;7301:5;7284:23;:::i;:::-;7275:33;:::i;:::-;7258:51;:::i;:::-;7245:64;;7177:138;;;:::o;7321:74::-;7363:3;7384:5;7377:12;;7321:74;;;:::o;7401:256::-;7509:37;7538:7;7509:37;:::i;:::-;7568:82;7609:40;7632:16;7609:40;:::i;:::-;7602:4;7596:11;7568:82;:::i;:::-;7562:4;7555:96;7475:182;7401:256;;:::o;7663:94::-;7696:8;7744:5;7740:2;7736:14;7715:35;;7663:94;;;:::o;7763:258::-;7820:6;7849:34;7904:23;7918:8;7904:23;:::i;:::-;7892:35;;7960:4;7956:9;7949:5;7945:21;7936:30;;8009:4;7999:8;7995:19;7988:5;7985:30;7975:40;;7827:194;7763:258;;;;:::o;8027:256::-;8135:37;8164:7;8135:37;:::i;:::-;8194:82;8235:40;8258:16;8235:40;:::i;:::-;8228:4;8222:11;8194:82;:::i;:::-;8188:4;8181:96;8101:182;8027:256;;:::o;8289:118::-;8360:22;8376:5;8360:22;:::i;:::-;8353:5;8350:33;8340:61;;8397:1;8394;8387:12;8340:61;8289:118;:::o;8413:182::-;8456:11;8505:3;8492:17;8518:31;8543:5;8518:31;:::i;:::-;8583:5;8559:29;;8468:127;8413:182;;;:::o;8601:96::-;8635:8;8684:5;8679:3;8675:15;8654:36;;8601:96;;;:::o;8703:262::-;8761:6;8790:36;8847:24;8862:8;8847:24;:::i;:::-;8835:36;;8904:4;8900:9;8893:5;8889:21;8880:30;;8953:4;8943:8;8939:19;8932:5;8929:30;8919:40;;8768:197;8703:262;;;;:::o;8971:134::-;9017:9;9050:49;9066:32;9075:22;9091:5;9075:22;:::i;:::-;9066:32;:::i;:::-;9050:49;:::i;:::-;9037:62;;8971:134;;;:::o;9111:73::-;9152:3;9173:5;9166:12;;9111:73;;;:::o;9190:253::-;9297:35;9324:7;9297:35;:::i;:::-;9354:82;9396:39;9418:16;9396:39;:::i;:::-;9389:4;9383:11;9354:82;:::i;:::-;9348:4;9341:96;9263:180;9190:253;;:::o;9449:96::-;9483:8;9532:5;9527:3;9523:15;9502:36;;9449:96;;;:::o;9551:264::-;9609:6;9638:38;9697:24;9712:8;9697:24;:::i;:::-;9685:36;;9754:4;9750:9;9743:5;9739:21;9730:30;;9803:4;9793:8;9789:19;9782:5;9779:30;9769:40;;9616:199;9551:264;;;;:::o;9821:253::-;9928:35;9955:7;9928:35;:::i;:::-;9985:82;10027:39;10049:16;10027:39;:::i;:::-;10020:4;10014:11;9985:82;:::i;:::-;9979:4;9972:96;9894:180;9821:253;;:::o;10080:116::-;10150:21;10165:5;10150:21;:::i;:::-;10143:5;10140:32;10130:60;;10186:1;10183;10176:12;10130:60;10080:116;:::o;10202:180::-;10244:11;10293:3;10280:17;10306:30;10330:5;10306:30;:::i;:::-;10370:5;10346:29;;10256:126;10202:180;;;:::o;10388:96::-;10422:8;10471:5;10466:3;10462:15;10441:36;;10388:96;;;:::o;10490:266::-;10548:6;10577:40;10638:24;10653:8;10638:24;:::i;:::-;10626:36;;10695:4;10691:9;10684:5;10680:21;10671:30;;10744:4;10734:8;10730:19;10723:5;10720:30;10710:40;;10555:201;10490:266;;;;:::o;10762:104::-;10806:9;10839:21;10854:5;10839:21;:::i;:::-;10826:34;;10762:104;;;:::o;10872:72::-;10912:3;10933:5;10926:12;;10872:72;;;:::o;10950:248::-;11055:33;11080:7;11055:33;:::i;:::-;11110:81;11152:38;11173:16;11152:38;:::i;:::-;11145:4;11139:11;11110:81;:::i;:::-;11104:4;11097:95;11021:177;10950:248;;:::o;11204:96::-;11238:8;11287:5;11282:3;11278:15;11257:36;;11204:96;;;:::o;11306:268::-;11364:6;11393:42;11456:24;11471:8;11456:24;:::i;:::-;11444:36;;11513:4;11509:9;11502:5;11498:21;11489:30;;11562:4;11552:8;11548:19;11541:5;11538:30;11528:40;;11371:203;11306:268;;;;:::o;11580:248::-;11685:33;11710:7;11685:33;:::i;:::-;11740:81;11782:38;11803:16;11782:38;:::i;:::-;11775:4;11769:11;11740:81;:::i;:::-;11734:4;11727:95;11651:177;11580:248;;:::o;11834:2133::-;12016:1;12010:4;12006:12;12062:1;12055:5;12051:13;12112:12;12155:41;12182:13;12155:41;:::i;:::-;12138:58;;12210:76;12272:13;12260:10;12210:76;:::i;:::-;11973:324;;;12350:1;12344:4;12340:12;12396:2;12389:5;12385:14;12447:12;12490:41;12517:13;12490:41;:::i;:::-;12473:58;;12545:76;12607:13;12595:10;12545:76;:::i;:::-;12307:325;;;12685:1;12679:4;12675:12;12731:2;12724:5;12720:14;12782:12;12825:40;12851:13;12825:40;:::i;:::-;12808:57;;12879:75;12940:13;12928:10;12879:75;:::i;:::-;12642:323;;;13018:1;13012:4;13008:12;13064:2;13057:5;13053:14;13115:12;13158:40;13184:13;13158:40;:::i;:::-;13141:57;;13212:75;13273:13;13261:10;13212:75;:::i;:::-;12975:323;;;13351:1;13345:4;13341:12;13397:3;13390:5;13386:15;13449:12;13492:39;13517:13;13492:39;:::i;:::-;13475:56;;13545:73;13604:13;13592:10;13545:73;:::i;:::-;13308:321;;;13682:1;13676:4;13672:12;13728:3;13721:5;13717:15;13780:12;13823:39;13848:13;13823:39;:::i;:::-;13806:56;;13876:73;13935:13;13923:10;13876:73;:::i;:::-;13639:321;;;11834:2133;;:::o;13973:268::-;14115:120;14227:7;14221:4;14115:120;:::i;:::-;13973:268;;:::o;14247:137::-;14292:5;14330:6;14317:20;14308:29;;14346:32;14372:5;14346:32;:::i;:::-;14247:137;;;;:::o;14390:120::-;14441:5;14466:38;14500:2;14495:3;14491:12;14486:3;14466:38;:::i;:::-;14457:47;;14390:120;;;;:::o;14516:105::-;14591:23;14608:5;14591:23;:::i;:::-;14586:3;14579:36;14516:105;;:::o;14627:135::-;14671:5;14709:6;14696:20;14687:29;;14725:31;14750:5;14725:31;:::i;:::-;14627:135;;;;:::o;14768:118::-;14818:5;14843:37;14876:2;14871:3;14867:12;14862:3;14843:37;:::i;:::-;14834:46;;14768:118;;;;:::o;14892:102::-;14965:22;14981:5;14965:22;:::i;:::-;14960:3;14953:35;14892:102;;:::o;15000:133::-;15043:5;15081:6;15068:20;15059:29;;15097:30;15121:5;15097:30;:::i;:::-;15000:133;;;;:::o;15139:116::-;15188:5;15213:36;15245:2;15240:3;15236:12;15231:3;15213:36;:::i;:::-;15204:45;;15139:116;;;;:::o;15261:99::-;15332:21;15347:5;15332:21;:::i;:::-;15327:3;15320:34;15261:99;;:::o;15430:1386::-;15585:4;15580:3;15576:14;15663:49;15706:4;15699:5;15695:16;15688:5;15663:49;:::i;:::-;15725:61;15780:4;15775:3;15771:14;15757:12;15725:61;:::i;:::-;15600:196;15867:49;15910:4;15903:5;15899:16;15892:5;15867:49;:::i;:::-;15929:61;15984:4;15979:3;15975:14;15961:12;15929:61;:::i;:::-;15806:194;16076:48;16118:4;16111:5;16107:16;16100:5;16076:48;:::i;:::-;16137:59;16190:4;16185:3;16181:14;16167:12;16137:59;:::i;:::-;16010:196;16281:48;16323:4;16316:5;16312:16;16305:5;16281:48;:::i;:::-;16342:59;16395:4;16390:3;16386:14;16372:12;16342:59;:::i;:::-;16216:195;16482:47;16523:4;16516:5;16512:16;16505:5;16482:47;:::i;:::-;16542:57;16593:4;16588:3;16584:14;16570:12;16542:57;:::i;:::-;16421:188;16682:47;16723:4;16716:5;16712:16;16705:5;16682:47;:::i;:::-;16742:57;16793:4;16788:3;16784:14;16770:12;16742:57;:::i;:::-;16619:190;15554:1262;15430:1386;;:::o;16822:339::-;16973:4;17011:3;17000:9;16996:19;16988:27;;17025:129;17151:1;17140:9;17136:17;17127:6;17025:129;:::i;:::-;16822:339;;;;:::o;17167:94::-;17200:8;17248:5;17244:2;17240:14;17219:35;;17167:94;;;:::o;17267:::-;17306:7;17335:20;17349:5;17335:20;:::i;:::-;17324:31;;17267:94;;;:::o;17367:100::-;17406:7;17435:26;17455:5;17435:26;:::i;:::-;17424:37;;17367:100;;;:::o;17473:157::-;17578:45;17598:24;17616:5;17598:24;:::i;:::-;17578:45;:::i;:::-;17573:3;17566:58;17473:157;;:::o;17636:397::-;17776:3;17791:75;17862:3;17853:6;17791:75;:::i;:::-;17891:2;17886:3;17882:12;17875:19;;17904:75;17975:3;17966:6;17904:75;:::i;:::-;18004:2;17999:3;17995:12;17988:19;;18024:3;18017:10;;17636:397;;;;;:::o;18039:180::-;18087:77;18084:1;18077:88;18184:4;18181:1;18174:15;18208:4;18205:1;18198:15;18225:191;18265:3;18284:20;18302:1;18284:20;:::i;:::-;18279:25;;18318:20;18336:1;18318:20;:::i;:::-;18313:25;;18361:1;18358;18354:9;18347:16;;18382:3;18379:1;18376:10;18373:36;;;18389:18;;:::i;:::-;18373:36;18225:191;;;;:::o;18422:118::-;18509:24;18527:5;18509:24;:::i;:::-;18504:3;18497:37;18422:118;;:::o;18546:332::-;18667:4;18705:2;18694:9;18690:18;18682:26;;18718:71;18786:1;18775:9;18771:17;18762:6;18718:71;:::i;:::-;18799:72;18867:2;18856:9;18852:18;18843:6;18799:72;:::i;:::-;18546:332;;;;;:::o;18884:169::-;18968:11;19002:6;18997:3;18990:19;19042:4;19037:3;19033:14;19018:29;;18884:169;;;;:::o;19059:225::-;19199:34;19195:1;19187:6;19183:14;19176:58;19268:8;19263:2;19255:6;19251:15;19244:33;19059:225;:::o;19290:366::-;19432:3;19453:67;19517:2;19512:3;19453:67;:::i;:::-;19446:74;;19529:93;19618:3;19529:93;:::i;:::-;19647:2;19642:3;19638:12;19631:19;;19290:366;;;:::o;19662:419::-;19828:4;19866:2;19855:9;19851:18;19843:26;;19915:9;19909:4;19905:20;19901:1;19890:9;19886:17;19879:47;19943:131;20069:4;19943:131;:::i;:::-;19935:139;;19662:419;;;:::o;20087:182::-;20227:34;20223:1;20215:6;20211:14;20204:58;20087:182;:::o;20275:366::-;20417:3;20438:67;20502:2;20497:3;20438:67;:::i;:::-;20431:74;;20514:93;20603:3;20514:93;:::i;:::-;20632:2;20627:3;20623:12;20616:19;;20275:366;;;:::o;20647:419::-;20813:4;20851:2;20840:9;20836:18;20828:26;;20900:9;20894:4;20890:20;20886:1;20875:9;20871:17;20864:47;20928:131;21054:4;20928:131;:::i;:::-;20920:139;;20647:419;;;:::o;21072:148::-;21174:11;21211:3;21196:18;;21072:148;;;;:::o;21226:214::-;21366:66;21362:1;21354:6;21350:14;21343:90;21226:214;:::o;21446:402::-;21606:3;21627:85;21709:2;21704:3;21627:85;:::i;:::-;21620:92;;21721:93;21810:3;21721:93;:::i;:::-;21839:2;21834:3;21830:12;21823:19;;21446:402;;;:::o;21854:77::-;21891:7;21920:5;21909:16;;21854:77;;;:::o;21937:79::-;21976:7;22005:5;21994:16;;21937:79;;;:::o;22022:157::-;22127:45;22147:24;22165:5;22147:24;:::i;:::-;22127:45;:::i;:::-;22122:3;22115:58;22022:157;;:::o;22185:522::-;22398:3;22420:148;22564:3;22420:148;:::i;:::-;22413:155;;22578:75;22649:3;22640:6;22578:75;:::i;:::-;22678:2;22673:3;22669:12;22662:19;;22698:3;22691:10;;22185:522;;;;:::o;22713:180::-;22761:77;22758:1;22751:88;22858:4;22855:1;22848:15;22882:4;22879:1;22872:15;22899:174;23039:26;23035:1;23027:6;23023:14;23016:50;22899:174;:::o;23079:366::-;23221:3;23242:67;23306:2;23301:3;23242:67;:::i;:::-;23235:74;;23318:93;23407:3;23318:93;:::i;:::-;23436:2;23431:3;23427:12;23420:19;;23079:366;;;:::o;23451:419::-;23617:4;23655:2;23644:9;23640:18;23632:26;;23704:9;23698:4;23694:20;23690:1;23679:9;23675:17;23668:47;23732:131;23858:4;23732:131;:::i;:::-;23724:139;;23451:419;;;:::o;23876:181::-;24016:33;24012:1;24004:6;24000:14;23993:57;23876:181;:::o;24063:366::-;24205:3;24226:67;24290:2;24285:3;24226:67;:::i;:::-;24219:74;;24302:93;24391:3;24302:93;:::i;:::-;24420:2;24415:3;24411:12;24404:19;;24063:366;;;:::o;24435:419::-;24601:4;24639:2;24628:9;24624:18;24616:26;;24688:9;24682:4;24678:20;24674:1;24663:9;24659:17;24652:47;24716:131;24842:4;24716:131;:::i;:::-;24708:139;;24435:419;;;:::o;24860:221::-;25000:34;24996:1;24988:6;24984:14;24977:58;25069:4;25064:2;25056:6;25052:15;25045:29;24860:221;:::o;25087:366::-;25229:3;25250:67;25314:2;25309:3;25250:67;:::i;:::-;25243:74;;25326:93;25415:3;25326:93;:::i;:::-;25444:2;25439:3;25435:12;25428:19;;25087:366;;;:::o;25459:419::-;25625:4;25663:2;25652:9;25648:18;25640:26;;25712:9;25706:4;25702:20;25698:1;25687:9;25683:17;25676:47;25740:131;25866:4;25740:131;:::i;:::-;25732:139;;25459:419;;;:::o;25884:118::-;25971:24;25989:5;25971:24;:::i;:::-;25966:3;25959:37;25884:118;;:::o;26008:545::-;26181:4;26219:3;26208:9;26204:19;26196:27;;26233:71;26301:1;26290:9;26286:17;26277:6;26233:71;:::i;:::-;26314:68;26378:2;26367:9;26363:18;26354:6;26314:68;:::i;:::-;26392:72;26460:2;26449:9;26445:18;26436:6;26392:72;:::i;:::-;26474;26542:2;26531:9;26527:18;26518:6;26474:72;:::i;:::-;26008:545;;;;;;;:::o
Swarm Source
ipfs://21d6056fe319cb5df14c2b84cc857bcb3de7a9b325008eaee79ca539535fbff4
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.