Token PoA Bears
Overview
TokenID:
850
Transfers:
-
Contract:
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
PoABears
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-03-18 */ // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts (last updated v4.8.0) (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() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // 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/math/Math.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol) pragma solidity ^0.8.0; /** * @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/Strings.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @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/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.8.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 functionCallWithValue(target, data, 0, "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"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or 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 { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // 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/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.8.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: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * 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: Contracts/721R.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension. This does random batch minting. */ contract ERC721r is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; mapping(uint => uint) private _availableTokens; uint256 private _numAvailableTokens; uint256 immutable _maxSupply; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_, uint maxSupply_) { _name = name_; _symbol = symbol_; _maxSupply = maxSupply_; _numAvailableTokens = maxSupply_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } function totalSupply() public view virtual returns (uint256) { return _maxSupply - _numAvailableTokens; } function maxSupply() public view virtual returns (uint256) { return _maxSupply; } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721r.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721r.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } function _mintIdWithoutBalanceUpdate(address to, uint256 tokenId) private { _beforeTokenTransfer(address(0), to, tokenId); _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } function _mintRandom(address to, uint _numToMint) internal virtual { require(_msgSender() == tx.origin, "Contracts cannot mint"); require(to != address(0), "ERC721: mint to the zero address"); require(_numToMint > 0, "ERC721r: need to mint at least one token"); // TODO: Probably don't need this as it will underflow and revert automatically in this case require(_numAvailableTokens >= _numToMint, "ERC721r: minting more tokens than available"); uint updatedNumAvailableTokens = _numAvailableTokens; for (uint256 i; i < _numToMint; ++i) { // Do this ++ unchecked? uint256 tokenId = getRandomAvailableTokenId(to, updatedNumAvailableTokens); _mintIdWithoutBalanceUpdate(to, tokenId); --updatedNumAvailableTokens; } _numAvailableTokens = updatedNumAvailableTokens; _balances[to] += _numToMint; } function getRandomAvailableTokenId(address to, uint updatedNumAvailableTokens) internal returns (uint256) { uint256 randomNum = uint256( keccak256( abi.encode( to, // tx.gasprice, // block.number, // block.timestamp, // block.difficulty, // blockhash(block.number - 1), address(this), updatedNumAvailableTokens ) ) ); uint256 randomIndex = randomNum % updatedNumAvailableTokens; return getAvailableTokenAtIndex(randomIndex, updatedNumAvailableTokens); } // Implements https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle. Code taken from CryptoPhunksV2 function getAvailableTokenAtIndex(uint256 indexToUse, uint updatedNumAvailableTokens) internal returns (uint256) { uint256 valAtIndex = _availableTokens[indexToUse]; uint256 result; if (valAtIndex == 0) { // This means the index itself is still an available token result = indexToUse; } else { // This means the index itself is not an available token, but the val at that index is. result = valAtIndex; } uint256 lastIndex = updatedNumAvailableTokens - 1; uint256 lastValInArray = _availableTokens[lastIndex]; if (indexToUse != lastIndex) { // Replace the value at indexToUse, now that it's been used. // Replace it with the data from the last index in the array, since we are going to decrease the array size afterwards. if (lastValInArray == 0) { // This means the index itself is still an available token _availableTokens[indexToUse] = lastIndex; } else { // This means the index itself is not an available token, but the val at that index is. _availableTokens[indexToUse] = lastValInArray; } } if (lastValInArray != 0) { // Gas refund courtsey of @dievardump delete _availableTokens[lastIndex]; } return result; } // Not as good as minting a specific tokenId, but will behave the same at the start // allowing you to explicitly mint some tokens at launch. function _mintAtIndex(address to, uint index) internal virtual { require(_msgSender() == tx.origin, "Contracts cannot mint"); require(to != address(0), "ERC721: mint to the zero address"); require(_numAvailableTokens >= 1, "ERC721r: minting more tokens than available"); uint tokenId = getAvailableTokenAtIndex(index, _numAvailableTokens); --_numAvailableTokens; _mintIdWithoutBalanceUpdate(to, tokenId); _balances[to] += 1; } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721r.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721r.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: PoABears.sol pragma solidity ^0.8.17; contract PoABears is ERC721r, Ownable, ReentrancyGuard { string public URI = "ipfs://bafybeih6jkxo2vwl4cdfojymizaotu2hsgfhqsayzubqm4sb5xisgkqevu/"; uint public mintPrice = 0.004 ether; uint public freeAmount = 867; uint public freeCount = 0; bool public PublicmintEnabled = false; bool public PunkmintEnabled = false; address payable public deployer; mapping(address => bool) public PunkMinter; mapping(address => uint) public MintAmount; modifier onlyDeployer() { require(tx.origin == deployer, "Only deployer."); _; } constructor() ERC721r("PoA Bears", "ABEAR", 5000) { deployer = payable(msg.sender); } function mint(uint256 count) external payable { uint256 cost = mintPrice; require(PublicmintEnabled, "Mint not live yet"); require(totalSupply() + count + freeAmount <= maxSupply(), "Sold Out!"); require(msg.value >= count * cost, "Please send enough ETH amount"); require(msg.sender == tx.origin, "The minter is another contract"); _mintRandom(msg.sender, count); } function punk_minter() external { require(PunkMinter[msg.sender] == true, "Not a Punk Minter"); require(freeCount < freeAmount, "Free sold out - Mint a paid!"); require(PunkmintEnabled, "Mint is not live yet"); require(totalSupply() + MintAmount[msg.sender] <= maxSupply(), "Sold Out!"); require(msg.sender == tx.origin, "The minter is another contract"); /// Remove Punk Minter freeCount = freeCount + MintAmount[msg.sender]; PunkMinter[msg.sender] = false; // Mint Tokens _mintRandom(msg.sender, MintAmount[msg.sender]); } function load_holder(address holder, uint mintcount) public onlyDeployer { PunkMinter[holder] = true; MintAmount[holder] = mintcount; } function set_URI(string memory baseURI_) public onlyOwner { URI = baseURI_; } function _baseURI() internal view override returns (string memory) { return URI; } function set_Price(uint _price) public onlyOwner { mintPrice = _price; } function set_freeAmount(uint _freeAmount) public onlyOwner { freeAmount = _freeAmount; } function set_freeCount(uint _freeCount) public onlyOwner { freeCount = _freeCount; } function release_Reserve() public onlyOwner { freeAmount = 0; } function toggle_PublicMinting() external onlyOwner { PublicmintEnabled = !PublicmintEnabled; } function toggle_PunkMinting() external onlyOwner { PunkmintEnabled = !PunkmintEnabled; } function withdraw() external onlyOwner nonReentrant { (bool success, ) = msg.sender.call{value: address(this).balance}(""); require(success, "Transfer failed."); } /// If you made it this far in my code - drop me a DM on Discord for a free bear! - Apex function team_mint(uint amount) external onlyOwner nonReentrant { _mintRandom(msg.sender, amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"MintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PublicmintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"PunkMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PunkmintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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":"deployer","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"uint256","name":"mintcount","type":"uint256"}],"name":"load_holder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"punk_minter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"release_Reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"set_Price","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"set_URI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_freeAmount","type":"uint256"}],"name":"set_freeAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_freeCount","type":"uint256"}],"name":"set_freeCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"team_mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggle_PublicMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggle_PunkMinting","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":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a060405260405180608001604052806043815260200162004ba360439139600a90816200002e9190620004e5565b50660e35fa931a0000600b55610363600c556000600d556000600e60006101000a81548160ff0219169083151502179055506000600e60016101000a81548160ff0219169083151502179055503480156200008857600080fd5b506040518060400160405280600981526020017f506f4120426561727300000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f41424541520000000000000000000000000000000000000000000000000000008152506113888260009081620001099190620004e5565b5081600190816200011b9190620004e5565b508060808181525050806003819055505050506200014e620001426200019d60201b60201c565b620001a560201b60201c565b600160098190555033600e60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005cc565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002ed57607f821691505b602082108103620003035762000302620002a5565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200036d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200032e565b6200037986836200032e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003c6620003c0620003ba8462000391565b6200039b565b62000391565b9050919050565b6000819050919050565b620003e283620003a5565b620003fa620003f182620003cd565b8484546200033b565b825550505050565b600090565b6200041162000402565b6200041e818484620003d7565b505050565b5b8181101562000446576200043a60008262000407565b60018101905062000424565b5050565b601f82111562000495576200045f8162000309565b6200046a846200031e565b810160208510156200047a578190505b6200049262000489856200031e565b83018262000423565b50505b505050565b600082821c905092915050565b6000620004ba600019846008026200049a565b1980831691505092915050565b6000620004d58383620004a7565b9150826002028217905092915050565b620004f0826200026b565b67ffffffffffffffff8111156200050c576200050b62000276565b5b620005188254620002d4565b620005258282856200044a565b600060209050601f8311600181146200055d576000841562000548578287015190505b620005548582620004c7565b865550620005c4565b601f1984166200056d8662000309565b60005b82811015620005975784890151825560018201915060208501945060208101905062000570565b86831015620005b75784890151620005b3601f891682620004a7565b8355505b6001600288020188555050505b505050505050565b6080516145b4620005ef60003960008181610ca3015261182901526145b46000f3fe6080604052600436106102305760003560e01c806389c0bbe61161012e578063c87b56dd116100ab578063db4823121161006f578063db482312146107e4578063e33e83ce1461080d578063e985e9c514610824578063e9c5d6a514610861578063f2fde38b1461088a57610230565b8063c87b56dd146106ff578063caba9e121461073c578063d23bf56914610765578063d5abeb011461078e578063d5f39488146107b957610230565b8063a0712d68116100f2578063a0712d681461063d578063a22cb46514610659578063a6f48c9014610682578063a713391a146106ad578063b88d4fde146106d657610230565b806389c0bbe61461057c5780638da5cb5b1461059357806392373dc9146105be57806395d89b41146105fb5780639e0a31ab1461062657610230565b806318160ddd116101bc57806342842e0e1161018057806342842e0e146104975780636352211e146104c05780636817c76c146104fd57806370a0823114610528578063715018a61461056557610230565b806318160ddd146103ea5780632143cf991461041557806323b872dd146104405780633ab87c86146104695780633ccfd60b1461048057610230565b80630892c089116102035780630892c08914610305578063093ab5871461032e578063095ea7b3146103595780630d3d1fbc146103825780631141d7de146103bf57610230565b806301ffc9a7146102355780630451a9f11461027257806306fdde031461029d578063081812fc146102c8575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190612ade565b6108b3565b6040516102699190612b26565b60405180910390f35b34801561027e57600080fd5b50610287610995565b6040516102949190612b5a565b60405180910390f35b3480156102a957600080fd5b506102b261099b565b6040516102bf9190612c05565b60405180910390f35b3480156102d457600080fd5b506102ef60048036038101906102ea9190612c53565b610a2d565b6040516102fc9190612cc1565b60405180910390f35b34801561031157600080fd5b5061032c60048036038101906103279190612c53565b610ab2565b005b34801561033a57600080fd5b50610343610ac4565b6040516103509190612b26565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b9190612d08565b610ad7565b005b34801561038e57600080fd5b506103a960048036038101906103a49190612d48565b610bee565b6040516103b69190612b26565b60405180910390f35b3480156103cb57600080fd5b506103d4610c0e565b6040516103e19190612c05565b60405180910390f35b3480156103f657600080fd5b506103ff610c9c565b60405161040c9190612b5a565b60405180910390f35b34801561042157600080fd5b5061042a610cd1565b6040516104379190612b26565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190612d75565b610ce4565b005b34801561047557600080fd5b5061047e610d44565b005b34801561048c57600080fd5b5061049561106b565b005b3480156104a357600080fd5b506104be60048036038101906104b99190612d75565b611132565b005b3480156104cc57600080fd5b506104e760048036038101906104e29190612c53565b611152565b6040516104f49190612cc1565b60405180910390f35b34801561050957600080fd5b50610512611203565b60405161051f9190612b5a565b60405180910390f35b34801561053457600080fd5b5061054f600480360381019061054a9190612d48565b611209565b60405161055c9190612b5a565b60405180910390f35b34801561057157600080fd5b5061057a6112c0565b005b34801561058857600080fd5b506105916112d4565b005b34801561059f57600080fd5b506105a8611308565b6040516105b59190612cc1565b60405180910390f35b3480156105ca57600080fd5b506105e560048036038101906105e09190612d48565b611332565b6040516105f29190612b5a565b60405180910390f35b34801561060757600080fd5b5061061061134a565b60405161061d9190612c05565b60405180910390f35b34801561063257600080fd5b5061063b6113dc565b005b61065760048036038101906106529190612c53565b611410565b005b34801561066557600080fd5b50610680600480360381019061067b9190612df4565b611599565b005b34801561068e57600080fd5b506106976115af565b6040516106a49190612b5a565b60405180910390f35b3480156106b957600080fd5b506106d460048036038101906106cf9190612c53565b6115b5565b005b3480156106e257600080fd5b506106fd60048036038101906106f89190612f69565b6115da565b005b34801561070b57600080fd5b5061072660048036038101906107219190612c53565b61163c565b6040516107339190612c05565b60405180910390f35b34801561074857600080fd5b50610763600480360381019061075e9190612d08565b6116e3565b005b34801561077157600080fd5b5061078c60048036038101906107879190612c53565b611813565b005b34801561079a57600080fd5b506107a3611825565b6040516107b09190612b5a565b60405180910390f35b3480156107c557600080fd5b506107ce61184d565b6040516107db919061300d565b60405180910390f35b3480156107f057600080fd5b5061080b60048036038101906108069190612c53565b611873565b005b34801561081957600080fd5b50610822611885565b005b34801561083057600080fd5b5061084b60048036038101906108469190613028565b611897565b6040516108589190612b26565b60405180910390f35b34801561086d57600080fd5b5061088860048036038101906108839190613109565b61192b565b005b34801561089657600080fd5b506108b160048036038101906108ac9190612d48565b611946565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061097e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061098e575061098d826119c9565b5b9050919050565b600c5481565b6060600080546109aa90613181565b80601f01602080910402602001604051908101604052809291908181526020018280546109d690613181565b8015610a235780601f106109f857610100808354040283529160200191610a23565b820191906000526020600020905b815481529060010190602001808311610a0657829003601f168201915b5050505050905090565b6000610a3882611a33565b610a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6e90613224565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610aba611a9f565b80600d8190555050565b600e60019054906101000a900460ff1681565b6000610ae282611152565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b49906132b6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b71611b1d565b73ffffffffffffffffffffffffffffffffffffffff161480610ba05750610b9f81610b9a611b1d565b611897565b5b610bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd690613348565b60405180910390fd5b610be98383611b25565b505050565b600f6020528060005260406000206000915054906101000a900460ff1681565b600a8054610c1b90613181565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4790613181565b8015610c945780601f10610c6957610100808354040283529160200191610c94565b820191906000526020600020905b815481529060010190602001808311610c7757829003601f168201915b505050505081565b60006003547f0000000000000000000000000000000000000000000000000000000000000000610ccc9190613397565b905090565b600e60009054906101000a900460ff1681565b610cf5610cef611b1d565b82611bde565b610d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2b9061343d565b60405180910390fd5b610d3f838383611cbc565b505050565b60011515600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dce906134a9565b60405180910390fd5b600c54600d5410610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1490613515565b60405180910390fd5b600e60019054906101000a900460ff16610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6390613581565b60405180910390fd5b610e74611825565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ebc610c9c565b610ec691906135a1565b1115610f07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efe90613621565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c9061368d565b60405180910390fd5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600d54610fc291906135a1565b600d819055506000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061106933601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f22565b565b611073611a9f565b61107b612139565b60003373ffffffffffffffffffffffffffffffffffffffff16476040516110a1906136de565b60006040518083038185875af1925050503d80600081146110de576040519150601f19603f3d011682016040523d82523d6000602084013e6110e3565b606091505b5050905080611127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111e9061373f565b60405180910390fd5b50611130612188565b565b61114d838383604051806020016040528060008152506115da565b505050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f1906137d1565b60405180910390fd5b80915050919050565b600b5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127090613863565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112c8611a9f565b6112d26000612192565b565b6112dc611a9f565b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60106020528060005260406000206000915090505481565b60606001805461135990613181565b80601f016020809104026020016040519081016040528092919081815260200182805461138590613181565b80156113d25780601f106113a7576101008083540402835291602001916113d2565b820191906000526020600020905b8154815290600101906020018083116113b557829003601f168201915b5050505050905090565b6113e4611a9f565b600e60019054906101000a900460ff1615600e60016101000a81548160ff021916908315150217905550565b6000600b549050600e60009054906101000a900460ff16611466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145d906138cf565b60405180910390fd5b61146e611825565b600c548361147a610c9c565b61148491906135a1565b61148e91906135a1565b11156114cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c690613621565b60405180910390fd5b80826114db91906138ef565b34101561151d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115149061397d565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461158b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115829061368d565b60405180910390fd5b6115953383611f22565b5050565b6115ab6115a4611b1d565b8383612258565b5050565b600d5481565b6115bd611a9f565b6115c5612139565b6115cf3382611f22565b6115d7612188565b50565b6115eb6115e5611b1d565b83611bde565b61162a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116219061343d565b60405180910390fd5b611636848484846123c4565b50505050565b606061164782611a33565b611686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167d90613a0f565b60405180910390fd5b6000611690612420565b905060008151116116b057604051806020016040528060008152506116db565b806116ba846124b2565b6040516020016116cb929190613a6b565b6040516020818303038152906040525b915050919050565b600e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176a90613adb565b60405180910390fd5b6001600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b61181b611a9f565b80600c8190555050565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b600e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61187b611a9f565b80600b8190555050565b61188d611a9f565b6000600c81905550565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611933611a9f565b80600a90816119429190613ca7565b5050565b61194e611a9f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b490613deb565b60405180910390fd5b6119c681612192565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b611aa7611b1d565b73ffffffffffffffffffffffffffffffffffffffff16611ac5611308565b73ffffffffffffffffffffffffffffffffffffffff1614611b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1290613e57565b60405180910390fd5b565b600033905090565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b9883611152565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611be982611a33565b611c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1f90613ee9565b60405180910390fd5b6000611c3383611152565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ca257508373ffffffffffffffffffffffffffffffffffffffff16611c8a84610a2d565b73ffffffffffffffffffffffffffffffffffffffff16145b80611cb35750611cb28185611897565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611cdc82611152565b73ffffffffffffffffffffffffffffffffffffffff1614611d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2990613f7b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611da1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d989061400d565b60405180910390fd5b611dac838383612580565b611db7600082611b25565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e079190613397565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e5e91906135a1565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611f1d838383612585565b505050565b3273ffffffffffffffffffffffffffffffffffffffff16611f41611b1d565b73ffffffffffffffffffffffffffffffffffffffff1614611f97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8e90614079565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffd906140e5565b60405180910390fd5b60008111612049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204090614177565b60405180910390fd5b80600354101561208e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208590614209565b60405180910390fd5b6000600354905060005b828110156120d65760006120ac858461258a565b90506120b885826125e1565b826120c290614229565b925050806120cf90614252565b9050612098565b508060038190555081600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461212d91906135a1565b92505081905550505050565b60026009540361217e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612175906142e6565b60405180910390fd5b6002600981905550565b6001600981905550565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bd90614352565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123b79190612b26565b60405180910390a3505050565b6123cf848484611cbc565b6123db848484846126ab565b61241a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612411906143e4565b60405180910390fd5b50505050565b6060600a805461242f90613181565b80601f016020809104026020016040519081016040528092919081815260200182805461245b90613181565b80156124a85780601f1061247d576101008083540402835291602001916124a8565b820191906000526020600020905b81548152906001019060200180831161248b57829003601f168201915b5050505050905090565b6060600060016124c184612832565b01905060008167ffffffffffffffff8111156124e0576124df612e3e565b5b6040519080825280601f01601f1916602001820160405280156125125781602001600182028036833780820191505090505b509050600082602001820190505b600115612575578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161256957612568614404565b5b04945060008503612520575b819350505050919050565b505050565b505050565b6000808330846040516020016125a293929190614433565b6040516020818303038152906040528051906020012060001c9050600083826125cb919061446a565b90506125d78185612985565b9250505092915050565b6125ed60008383612580565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46126a760008383612585565b5050565b60006126cc8473ffffffffffffffffffffffffffffffffffffffff16612a4f565b15612825578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026126f5611b1d565b8786866040518563ffffffff1660e01b815260040161271794939291906144f0565b6020604051808303816000875af192505050801561275357506040513d601f19601f820116820180604052508101906127509190614551565b60015b6127d5573d8060008114612783576040519150601f19603f3d011682016040523d82523d6000602084013e612788565b606091505b5060008151036127cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c4906143e4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061282a565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612890577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161288657612885614404565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106128cd576d04ee2d6d415b85acef810000000083816128c3576128c2614404565b5b0492506020810190505b662386f26fc1000083106128fc57662386f26fc1000083816128f2576128f1614404565b5b0492506010810190505b6305f5e1008310612925576305f5e100838161291b5761291a614404565b5b0492506008810190505b612710831061294a5761271083816129405761293f614404565b5b0492506004810190505b6064831061296d576064838161296357612962614404565b5b0492506002810190505b600a831061297c576001810190505b80915050919050565b6000806002600085815260200190815260200160002054905060008082036129af578490506129b3565b8190505b60006001856129c29190613397565b9050600060026000838152602001908152602001600020549050818714612a225760008103612a0857816002600089815260200190815260200160002081905550612a21565b8060026000898152602001908152602001600020819055505b5b60008114612a425760026000838152602001908152602001600020600090555b8294505050505092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612abb81612a86565b8114612ac657600080fd5b50565b600081359050612ad881612ab2565b92915050565b600060208284031215612af457612af3612a7c565b5b6000612b0284828501612ac9565b91505092915050565b60008115159050919050565b612b2081612b0b565b82525050565b6000602082019050612b3b6000830184612b17565b92915050565b6000819050919050565b612b5481612b41565b82525050565b6000602082019050612b6f6000830184612b4b565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612baf578082015181840152602081019050612b94565b60008484015250505050565b6000601f19601f8301169050919050565b6000612bd782612b75565b612be18185612b80565b9350612bf1818560208601612b91565b612bfa81612bbb565b840191505092915050565b60006020820190508181036000830152612c1f8184612bcc565b905092915050565b612c3081612b41565b8114612c3b57600080fd5b50565b600081359050612c4d81612c27565b92915050565b600060208284031215612c6957612c68612a7c565b5b6000612c7784828501612c3e565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612cab82612c80565b9050919050565b612cbb81612ca0565b82525050565b6000602082019050612cd66000830184612cb2565b92915050565b612ce581612ca0565b8114612cf057600080fd5b50565b600081359050612d0281612cdc565b92915050565b60008060408385031215612d1f57612d1e612a7c565b5b6000612d2d85828601612cf3565b9250506020612d3e85828601612c3e565b9150509250929050565b600060208284031215612d5e57612d5d612a7c565b5b6000612d6c84828501612cf3565b91505092915050565b600080600060608486031215612d8e57612d8d612a7c565b5b6000612d9c86828701612cf3565b9350506020612dad86828701612cf3565b9250506040612dbe86828701612c3e565b9150509250925092565b612dd181612b0b565b8114612ddc57600080fd5b50565b600081359050612dee81612dc8565b92915050565b60008060408385031215612e0b57612e0a612a7c565b5b6000612e1985828601612cf3565b9250506020612e2a85828601612ddf565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612e7682612bbb565b810181811067ffffffffffffffff82111715612e9557612e94612e3e565b5b80604052505050565b6000612ea8612a72565b9050612eb48282612e6d565b919050565b600067ffffffffffffffff821115612ed457612ed3612e3e565b5b612edd82612bbb565b9050602081019050919050565b82818337600083830152505050565b6000612f0c612f0784612eb9565b612e9e565b905082815260208101848484011115612f2857612f27612e39565b5b612f33848285612eea565b509392505050565b600082601f830112612f5057612f4f612e34565b5b8135612f60848260208601612ef9565b91505092915050565b60008060008060808587031215612f8357612f82612a7c565b5b6000612f9187828801612cf3565b9450506020612fa287828801612cf3565b9350506040612fb387828801612c3e565b925050606085013567ffffffffffffffff811115612fd457612fd3612a81565b5b612fe087828801612f3b565b91505092959194509250565b6000612ff782612c80565b9050919050565b61300781612fec565b82525050565b60006020820190506130226000830184612ffe565b92915050565b6000806040838503121561303f5761303e612a7c565b5b600061304d85828601612cf3565b925050602061305e85828601612cf3565b9150509250929050565b600067ffffffffffffffff82111561308357613082612e3e565b5b61308c82612bbb565b9050602081019050919050565b60006130ac6130a784613068565b612e9e565b9050828152602081018484840111156130c8576130c7612e39565b5b6130d3848285612eea565b509392505050565b600082601f8301126130f0576130ef612e34565b5b8135613100848260208601613099565b91505092915050565b60006020828403121561311f5761311e612a7c565b5b600082013567ffffffffffffffff81111561313d5761313c612a81565b5b613149848285016130db565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061319957607f821691505b6020821081036131ac576131ab613152565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061320e602c83612b80565b9150613219826131b2565b604082019050919050565b6000602082019050818103600083015261323d81613201565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006132a0602183612b80565b91506132ab82613244565b604082019050919050565b600060208201905081810360008301526132cf81613293565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613332603883612b80565b915061333d826132d6565b604082019050919050565b6000602082019050818103600083015261336181613325565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006133a282612b41565b91506133ad83612b41565b92508282039050818111156133c5576133c4613368565b5b92915050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613427603183612b80565b9150613432826133cb565b604082019050919050565b600060208201905081810360008301526134568161341a565b9050919050565b7f4e6f7420612050756e6b204d696e746572000000000000000000000000000000600082015250565b6000613493601183612b80565b915061349e8261345d565b602082019050919050565b600060208201905081810360008301526134c281613486565b9050919050565b7f4672656520736f6c64206f7574202d204d696e74206120706169642100000000600082015250565b60006134ff601c83612b80565b915061350a826134c9565b602082019050919050565b6000602082019050818103600083015261352e816134f2565b9050919050565b7f4d696e74206973206e6f74206c69766520796574000000000000000000000000600082015250565b600061356b601483612b80565b915061357682613535565b602082019050919050565b6000602082019050818103600083015261359a8161355e565b9050919050565b60006135ac82612b41565b91506135b783612b41565b92508282019050808211156135cf576135ce613368565b5b92915050565b7f536f6c64204f7574210000000000000000000000000000000000000000000000600082015250565b600061360b600983612b80565b9150613616826135d5565b602082019050919050565b6000602082019050818103600083015261363a816135fe565b9050919050565b7f546865206d696e74657220697320616e6f7468657220636f6e74726163740000600082015250565b6000613677601e83612b80565b915061368282613641565b602082019050919050565b600060208201905081810360008301526136a68161366a565b9050919050565b600081905092915050565b50565b60006136c86000836136ad565b91506136d3826136b8565b600082019050919050565b60006136e9826136bb565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000613729601083612b80565b9150613734826136f3565b602082019050919050565b600060208201905081810360008301526137588161371c565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006137bb602983612b80565b91506137c68261375f565b604082019050919050565b600060208201905081810360008301526137ea816137ae565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061384d602a83612b80565b9150613858826137f1565b604082019050919050565b6000602082019050818103600083015261387c81613840565b9050919050565b7f4d696e74206e6f74206c69766520796574000000000000000000000000000000600082015250565b60006138b9601183612b80565b91506138c482613883565b602082019050919050565b600060208201905081810360008301526138e8816138ac565b9050919050565b60006138fa82612b41565b915061390583612b41565b925082820261391381612b41565b9150828204841483151761392a57613929613368565b5b5092915050565b7f506c656173652073656e6420656e6f7567682045544820616d6f756e74000000600082015250565b6000613967601d83612b80565b915061397282613931565b602082019050919050565b600060208201905081810360008301526139968161395a565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006139f9602f83612b80565b9150613a048261399d565b604082019050919050565b60006020820190508181036000830152613a28816139ec565b9050919050565b600081905092915050565b6000613a4582612b75565b613a4f8185613a2f565b9350613a5f818560208601612b91565b80840191505092915050565b6000613a778285613a3a565b9150613a838284613a3a565b91508190509392505050565b7f4f6e6c79206465706c6f7965722e000000000000000000000000000000000000600082015250565b6000613ac5600e83612b80565b9150613ad082613a8f565b602082019050919050565b60006020820190508181036000830152613af481613ab8565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613b5d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613b20565b613b678683613b20565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613ba4613b9f613b9a84612b41565b613b7f565b612b41565b9050919050565b6000819050919050565b613bbe83613b89565b613bd2613bca82613bab565b848454613b2d565b825550505050565b600090565b613be7613bda565b613bf2818484613bb5565b505050565b5b81811015613c1657613c0b600082613bdf565b600181019050613bf8565b5050565b601f821115613c5b57613c2c81613afb565b613c3584613b10565b81016020851015613c44578190505b613c58613c5085613b10565b830182613bf7565b50505b505050565b600082821c905092915050565b6000613c7e60001984600802613c60565b1980831691505092915050565b6000613c978383613c6d565b9150826002028217905092915050565b613cb082612b75565b67ffffffffffffffff811115613cc957613cc8612e3e565b5b613cd38254613181565b613cde828285613c1a565b600060209050601f831160018114613d115760008415613cff578287015190505b613d098582613c8b565b865550613d71565b601f198416613d1f86613afb565b60005b82811015613d4757848901518255600182019150602085019450602081019050613d22565b86831015613d645784890151613d60601f891682613c6d565b8355505b6001600288020188555050505b505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613dd5602683612b80565b9150613de082613d79565b604082019050919050565b60006020820190508181036000830152613e0481613dc8565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e41602083612b80565b9150613e4c82613e0b565b602082019050919050565b60006020820190508181036000830152613e7081613e34565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613ed3602c83612b80565b9150613ede82613e77565b604082019050919050565b60006020820190508181036000830152613f0281613ec6565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000613f65602583612b80565b9150613f7082613f09565b604082019050919050565b60006020820190508181036000830152613f9481613f58565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613ff7602483612b80565b915061400282613f9b565b604082019050919050565b6000602082019050818103600083015261402681613fea565b9050919050565b7f436f6e7472616374732063616e6e6f74206d696e740000000000000000000000600082015250565b6000614063601583612b80565b915061406e8261402d565b602082019050919050565b6000602082019050818103600083015261409281614056565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006140cf602083612b80565b91506140da82614099565b602082019050919050565b600060208201905081810360008301526140fe816140c2565b9050919050565b7f455243373231723a206e65656420746f206d696e74206174206c65617374206f60008201527f6e6520746f6b656e000000000000000000000000000000000000000000000000602082015250565b6000614161602883612b80565b915061416c82614105565b604082019050919050565b6000602082019050818103600083015261419081614154565b9050919050565b7f455243373231723a206d696e74696e67206d6f726520746f6b656e732074686160008201527f6e20617661696c61626c65000000000000000000000000000000000000000000602082015250565b60006141f3602b83612b80565b91506141fe82614197565b604082019050919050565b60006020820190508181036000830152614222816141e6565b9050919050565b600061423482612b41565b91506000820361424757614246613368565b5b600182039050919050565b600061425d82612b41565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361428f5761428e613368565b5b600182019050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006142d0601f83612b80565b91506142db8261429a565b602082019050919050565b600060208201905081810360008301526142ff816142c3565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061433c601983612b80565b915061434782614306565b602082019050919050565b6000602082019050818103600083015261436b8161432f565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006143ce603283612b80565b91506143d982614372565b604082019050919050565b600060208201905081810360008301526143fd816143c1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006060820190506144486000830186612cb2565b6144556020830185612cb2565b6144626040830184612b4b565b949350505050565b600061447582612b41565b915061448083612b41565b9250826144905761448f614404565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006144c28261449b565b6144cc81856144a6565b93506144dc818560208601612b91565b6144e581612bbb565b840191505092915050565b60006080820190506145056000830187612cb2565b6145126020830186612cb2565b61451f6040830185612b4b565b818103606083015261453181846144b7565b905095945050505050565b60008151905061454b81612ab2565b92915050565b60006020828403121561456757614566612a7c565b5b60006145758482850161453c565b9150509291505056fea2646970667358221220a2c8f8b435ce08d167da32e4935799af2cfede602344929d4f5b11601497279464736f6c63430008120033697066733a2f2f6261667962656968366a6b786f3276776c346364666f6a796d697a616f7475326873676668717361797a7562716d34736235786973676b716576752f
Deployed ByteCode Sourcemap
56937:3335:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41594:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57151:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42777:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44338:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59418:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57282:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43860:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57373:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57004:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41911:119;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57233:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45088:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58159:638;;;;;;;;;;;;;:::i;:::-;;59863:186;;;;;;;;;;;;;:::i;:::-;;45498:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42471:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57102:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42201:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20921:103;;;;;;;;;;;;;:::i;:::-;;59637:108;;;;;;;;;;;;;:::i;:::-;;20273:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57422:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42946:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59753:102;;;;;;;;;;;;;:::i;:::-;;57709:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44631:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57192:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60149:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45754:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43121:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58805:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59296:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42042:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57333:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59190:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59538:89;;;;;;;;;;;;;:::i;:::-;;44857:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58973:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21179:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41594:305;41696:4;41748:25;41733:40;;;:11;:40;;;;:105;;;;41805:33;41790:48;;;:11;:48;;;;41733:105;:158;;;;41855:36;41879:11;41855:23;:36::i;:::-;41733:158;41713:178;;41594:305;;;:::o;57151:34::-;;;;:::o;42777:100::-;42831:13;42864:5;42857:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42777:100;:::o;44338:221::-;44414:7;44442:16;44450:7;44442;:16::i;:::-;44434:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;44527:15;:24;44543:7;44527:24;;;;;;;;;;;;;;;;;;;;;44520:31;;44338:221;;;:::o;59418:110::-;20159:13;:11;:13::i;:::-;59498:10:::1;59486:9;:22;;;;59418:110:::0;:::o;57282:42::-;;;;;;;;;;;;;:::o;43860:412::-;43941:13;43957:24;43973:7;43957:15;:24::i;:::-;43941:40;;44006:5;44000:11;;:2;:11;;;43992:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;44100:5;44084:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;44109:37;44126:5;44133:12;:10;:12::i;:::-;44109:16;:37::i;:::-;44084:62;44062:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;44243:21;44252:2;44256:7;44243:8;:21::i;:::-;43930:342;43860:412;;:::o;57373:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;57004:91::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41911:119::-;41963:7;42003:19;;41990:10;:32;;;;:::i;:::-;41983:39;;41911:119;:::o;57233:42::-;;;;;;;;;;;;;:::o;45088:339::-;45283:41;45302:12;:10;:12::i;:::-;45316:7;45283:18;:41::i;:::-;45275:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;45391:28;45401:4;45407:2;45411:7;45391:9;:28::i;:::-;45088:339;;;:::o;58159:638::-;58249:4;58223:30;;:10;:22;58234:10;58223:22;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;58215:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;58306:10;;58294:9;;:22;58286:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;58368:15;;;;;;;;;;;58360:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;58469:11;:9;:11::i;:::-;58443:10;:22;58454:10;58443:22;;;;;;;;;;;;;;;;58427:13;:11;:13::i;:::-;:38;;;;:::i;:::-;:53;;58419:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;58527:9;58513:23;;:10;:23;;;58505:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;58640:10;:22;58651:10;58640:22;;;;;;;;;;;;;;;;58628:9;;:34;;;;:::i;:::-;58616:9;:46;;;;58698:5;58673:10;:22;58684:10;58673:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;58740:47;58752:10;58764;:22;58775:10;58764:22;;;;;;;;;;;;;;;;58740:11;:47::i;:::-;58159:638::o;59863:186::-;20159:13;:11;:13::i;:::-;2345:21:::1;:19;:21::i;:::-;59927:12:::2;59945:10;:15;;59968:21;59945:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59926:68;;;60013:7;60005:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;59915:134;2389:20:::1;:18;:20::i;:::-;59863:186::o:0;45498:185::-;45636:39;45653:4;45659:2;45663:7;45636:39;;;;;;;;;;;;:16;:39::i;:::-;45498:185;;;:::o;42471:239::-;42543:7;42563:13;42579:7;:16;42587:7;42579:16;;;;;;;;;;;;;;;;;;;;;42563:32;;42631:1;42614:19;;:5;:19;;;42606:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42697:5;42690:12;;;42471:239;;;:::o;57102:42::-;;;;:::o;42201:208::-;42273:7;42318:1;42301:19;;:5;:19;;;42293:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;42385:9;:16;42395:5;42385:16;;;;;;;;;;;;;;;;42378:23;;42201:208;;;:::o;20921:103::-;20159:13;:11;:13::i;:::-;20986:30:::1;21013:1;20986:18;:30::i;:::-;20921:103::o:0;59637:108::-;20159:13;:11;:13::i;:::-;59720:17:::1;;;;;;;;;;;59719:18;59699:17;;:38;;;;;;;;;;;;;;;;;;59637:108::o:0;20273:87::-;20319:7;20346:6;;;;;;;;;;;20339:13;;20273:87;:::o;57422:42::-;;;;;;;;;;;;;;;;;:::o;42946:104::-;43002:13;43035:7;43028:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42946:104;:::o;59753:102::-;20159:13;:11;:13::i;:::-;59832:15:::1;;;;;;;;;;;59831:16;59813:15;;:34;;;;;;;;;;;;;;;;;;59753:102::o:0;57709:442::-;57777:12;57792:9;;57777:24;;57822:17;;;;;;;;;;;57814:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;57918:11;:9;:11::i;:::-;57904:10;;57896:5;57880:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:34;;;;:::i;:::-;:49;;57872:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;57983:4;57975:5;:12;;;;:::i;:::-;57962:9;:25;;57954:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;58054:9;58040:23;;:10;:23;;;58032:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;58111:30;58123:10;58135:5;58111:11;:30::i;:::-;57756:395;57709:442;:::o;44631:155::-;44726:52;44745:12;:10;:12::i;:::-;44759:8;44769;44726:18;:52::i;:::-;44631:155;;:::o;57192:32::-;;;;:::o;60149:116::-;20159:13;:11;:13::i;:::-;2345:21:::1;:19;:21::i;:::-;60224:31:::2;60236:10;60248:6;60224:11;:31::i;:::-;2389:20:::1;:18;:20::i;:::-;60149:116:::0;:::o;45754:328::-;45929:41;45948:12;:10;:12::i;:::-;45962:7;45929:18;:41::i;:::-;45921:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;46035:39;46049:4;46055:2;46059:7;46068:5;46035:13;:39::i;:::-;45754:328;;;;:::o;43121:334::-;43194:13;43228:16;43236:7;43228;:16::i;:::-;43220:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;43309:21;43333:10;:8;:10::i;:::-;43309:34;;43385:1;43367:7;43361:21;:25;:86;;;;;;;;;;;;;;;;;43413:7;43422:18;:7;:16;:18::i;:::-;43396:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43361:86;43354:93;;;43121:334;;;:::o;58805:160::-;57529:8;;;;;;;;;;;57516:21;;:9;:21;;;57508:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;58910:4:::1;58889:10;:18;58900:6;58889:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;58946:9;58925:10;:18;58936:6;58925:18;;;;;;;;;;;;;;;:30;;;;58805:160:::0;;:::o;59296:114::-;20159:13;:11;:13::i;:::-;59379:11:::1;59366:10;:24;;;;59296:114:::0;:::o;42042:95::-;42092:7;42119:10;42112:17;;42042:95;:::o;57333:31::-;;;;;;;;;;;;;:::o;59190:98::-;20159:13;:11;:13::i;:::-;59262:6:::1;59250:9;:18;;;;59190:98:::0;:::o;59538:89::-;20159:13;:11;:13::i;:::-;59606:1:::1;59593:10;:14;;;;59538:89::o:0;44857:164::-;44954:4;44978:18;:25;44997:5;44978:25;;;;;;;;;;;;;;;:35;45004:8;44978:35;;;;;;;;;;;;;;;;;;;;;;;;;44971:42;;44857:164;;;;:::o;58973:103::-;20159:13;:11;:13::i;:::-;59048:8:::1;59042:3;:14;;;;;;:::i;:::-;;58973:103:::0;:::o;21179:201::-;20159:13;:11;:13::i;:::-;21288:1:::1;21268:22;;:8;:22;;::::0;21260:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21344:28;21363:8;21344:18;:28::i;:::-;21179:201:::0;:::o;34002:157::-;34087:4;34126:25;34111:40;;;:11;:40;;;;34104:47;;34002:157;;;:::o;47592:127::-;47657:4;47709:1;47681:30;;:7;:16;47689:7;47681:16;;;;;;;;;;;;;;;;;;;;;:30;;;;47674:37;;47592:127;;;:::o;20438:132::-;20513:12;:10;:12::i;:::-;20502:23;;:7;:5;:7::i;:::-;:23;;;20494:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20438:132::o;18824:98::-;18877:7;18904:10;18897:17;;18824:98;:::o;53663:175::-;53765:2;53738:15;:24;53754:7;53738:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;53822:7;53818:2;53783:47;;53792:24;53808:7;53792:15;:24::i;:::-;53783:47;;;;;;;;;;;;53663:175;;:::o;47886:349::-;47979:4;48004:16;48012:7;48004;:16::i;:::-;47996:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;48080:13;48096:24;48112:7;48096:15;:24::i;:::-;48080:40;;48150:5;48139:16;;:7;:16;;;:51;;;;48183:7;48159:31;;:20;48171:7;48159:11;:20::i;:::-;:31;;;48139:51;:87;;;;48194:32;48211:5;48218:7;48194:16;:32::i;:::-;48139:87;48131:96;;;47886:349;;;;:::o;52919:626::-;53079:4;53051:32;;:24;53067:7;53051:15;:24::i;:::-;:32;;;53043:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;53158:1;53144:16;;:2;:16;;;53136:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;53214:39;53235:4;53241:2;53245:7;53214:20;:39::i;:::-;53318:29;53335:1;53339:7;53318:8;:29::i;:::-;53379:1;53360:9;:15;53370:4;53360:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;53408:1;53391:9;:13;53401:2;53391:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;53439:2;53420:7;:16;53428:7;53420:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;53478:7;53474:2;53459:27;;53468:4;53459:27;;;;;;;;;;;;53499:38;53519:4;53525:2;53529:7;53499:19;:38::i;:::-;52919:626;;;:::o;48555:984::-;48657:9;48641:25;;:12;:10;:12::i;:::-;:25;;;48633:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;48725:1;48711:16;;:2;:16;;;48703:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;48796:1;48783:10;:14;48775:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;48996:10;48973:19;;:33;;48965:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;49075:30;49108:19;;49075:52;;49143:9;49138:288;49158:10;49154:1;:14;49138:288;;;49215:15;49233:56;49259:2;49263:25;49233;:56::i;:::-;49215:74;;49318:40;49346:2;49350:7;49318:27;:40::i;:::-;49387:27;;;;:::i;:::-;;;49175:251;49170:3;;;;:::i;:::-;;;49138:288;;;;49468:25;49446:19;:47;;;;49521:10;49504:9;:13;49514:2;49504:13;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;48622:917;48555:984;;:::o;2425:293::-;1827:1;2559:7;;:19;2551:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1827:1;2692:7;:18;;;;2425:293::o;2726:213::-;1783:1;2909:7;:22;;;;2726:213::o;21540:191::-;21614:16;21633:6;;;;;;;;;;;21614:25;;21659:8;21650:6;;:17;;;;;;;;;;;;;;;;;;21714:8;21683:40;;21704:8;21683:40;;;;;;;;;;;;21603:128;21540:191;:::o;53980:315::-;54135:8;54126:17;;:5;:17;;;54118:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;54222:8;54184:18;:25;54203:5;54184:25;;;;;;;;;;;;;;;:35;54210:8;54184:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;54268:8;54246:41;;54261:5;54246:41;;;54278:8;54246:41;;;;;;:::i;:::-;;;;;;;;53980:315;;;:::o;46964:::-;47121:28;47131:4;47137:2;47141:7;47121:9;:28::i;:::-;47168:48;47191:4;47197:2;47201:7;47210:5;47168:22;:48::i;:::-;47160:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;46964:315;;;;:::o;59084:96::-;59136:13;59169:3;59162:10;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59084:96;:::o;16251:716::-;16307:13;16358:14;16395:1;16375:17;16386:5;16375:10;:17::i;:::-;:21;16358:38;;16411:20;16445:6;16434:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16411:41;;16467:11;16596:6;16592:2;16588:15;16580:6;16576:28;16569:35;;16633:288;16640:4;16633:288;;;16665:5;;;;;;;;16807:8;16802:2;16795:5;16791:14;16786:30;16781:3;16773:44;16863:2;16854:11;;;;;;:::i;:::-;;;;;16897:1;16888:5;:10;16633:288;16884:21;16633:288;16942:6;16935:13;;;;;16251:716;;;:::o;56231:126::-;;;;:::o;56742:125::-;;;;:::o;49555:745::-;49670:7;49695:17;49798:2;50042:4;50070:25;49765:349;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49737:392;;;;;;49715:425;;49695:445;;50151:19;50185:25;50173:9;:37;;;;:::i;:::-;50151:59;;50228:64;50253:11;50266:25;50228:24;:64::i;:::-;50221:71;;;;49555:745;;;;:::o;48243:304::-;48328:45;48357:1;48361:2;48365:7;48328:20;:45::i;:::-;48413:2;48394:7;:16;48402:7;48394:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;48466:7;48462:2;48441:33;;48458:1;48441:33;;;;;;;;;;;;48495:44;48523:1;48527:2;48531:7;48495:19;:44::i;:::-;48243:304;;:::o;54860:799::-;55015:4;55036:15;:2;:13;;;:15::i;:::-;55032:620;;;55088:2;55072:36;;;55109:12;:10;:12::i;:::-;55123:4;55129:7;55138:5;55072:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;55068:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55331:1;55314:6;:13;:18;55310:272;;55357:60;;;;;;;;;;:::i;:::-;;;;;;;;55310:272;55532:6;55526:13;55517:6;55513:2;55509:15;55502:38;55068:529;55205:41;;;55195:51;;;:6;:51;;;;55188:58;;;;;55032:620;55636:4;55629:11;;54860:799;;;;;;;:::o;13117:922::-;13170:7;13190:14;13207:1;13190:18;;13257:6;13248:5;:15;13244:102;;13293:6;13284:15;;;;;;:::i;:::-;;;;;13328:2;13318:12;;;;13244:102;13373:6;13364:5;:15;13360:102;;13409:6;13400:15;;;;;;:::i;:::-;;;;;13444:2;13434:12;;;;13360:102;13489:6;13480:5;:15;13476:102;;13525:6;13516:15;;;;;;:::i;:::-;;;;;13560:2;13550:12;;;;13476:102;13605:5;13596;:14;13592:99;;13640:5;13631:14;;;;;;:::i;:::-;;;;;13674:1;13664:11;;;;13592:99;13718:5;13709;:14;13705:99;;13753:5;13744:14;;;;;;:::i;:::-;;;;;13787:1;13777:11;;;;13705:99;13831:5;13822;:14;13818:99;;13866:5;13857:14;;;;;;:::i;:::-;;;;;13900:1;13890:11;;;;13818:99;13944:5;13935;:14;13931:66;;13980:1;13970:11;;;;13931:66;14025:6;14018:13;;;13117:922;;;:::o;50418:1476::-;50540:7;50565:18;50586:16;:28;50603:10;50586:28;;;;;;;;;;;;50565:49;;50625:14;50668:1;50654:10;:15;50650:292;;50767:10;50758:19;;50650:292;;;50920:10;50911:19;;50650:292;50954:17;51002:1;50974:25;:29;;;;:::i;:::-;50954:49;;51014:22;51039:16;:27;51056:9;51039:27;;;;;;;;;;;;51014:52;;51095:9;51081:10;:23;51077:629;;51350:1;51332:14;:19;51328:367;;51479:9;51448:16;:28;51465:10;51448:28;;;;;;;;;;;:40;;;;51328:367;;;51665:14;51634:16;:28;51651:10;51634:28;;;;;;;;;;;:45;;;;51328:367;51077:629;51738:1;51720:14;:19;51716:137;;51814:16;:27;51831:9;51814:27;;;;;;;;;;;51807:34;;;51716:137;51880:6;51873:13;;;;;;50418:1476;;;;:::o;22971:326::-;23031:4;23288:1;23266:7;:19;;;:23;23259:30;;22971:326;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:77::-;1555:7;1584:5;1573:16;;1518:77;;;:::o;1601:118::-;1688:24;1706:5;1688:24;:::i;:::-;1683:3;1676:37;1601:118;;:::o;1725:222::-;1818:4;1856:2;1845:9;1841:18;1833:26;;1869:71;1937:1;1926:9;1922:17;1913:6;1869:71;:::i;:::-;1725:222;;;;:::o;1953:99::-;2005:6;2039:5;2033:12;2023:22;;1953:99;;;:::o;2058:169::-;2142:11;2176:6;2171:3;2164:19;2216:4;2211:3;2207:14;2192:29;;2058:169;;;;:::o;2233:246::-;2314:1;2324:113;2338:6;2335:1;2332:13;2324:113;;;2423:1;2418:3;2414:11;2408:18;2404:1;2399:3;2395:11;2388:39;2360:2;2357:1;2353:10;2348:15;;2324:113;;;2471:1;2462:6;2457:3;2453:16;2446:27;2295:184;2233:246;;;:::o;2485:102::-;2526:6;2577:2;2573:7;2568:2;2561:5;2557:14;2553:28;2543:38;;2485:102;;;:::o;2593:377::-;2681:3;2709:39;2742:5;2709:39;:::i;:::-;2764:71;2828:6;2823:3;2764:71;:::i;:::-;2757:78;;2844:65;2902:6;2897:3;2890:4;2883:5;2879:16;2844:65;:::i;:::-;2934:29;2956:6;2934:29;:::i;:::-;2929:3;2925:39;2918:46;;2685:285;2593:377;;;;:::o;2976:313::-;3089:4;3127:2;3116:9;3112:18;3104:26;;3176:9;3170:4;3166:20;3162:1;3151:9;3147:17;3140:47;3204:78;3277:4;3268:6;3204:78;:::i;:::-;3196:86;;2976:313;;;;:::o;3295:122::-;3368:24;3386:5;3368:24;:::i;:::-;3361:5;3358:35;3348:63;;3407:1;3404;3397:12;3348:63;3295:122;:::o;3423:139::-;3469:5;3507:6;3494:20;3485:29;;3523:33;3550:5;3523:33;:::i;:::-;3423:139;;;;:::o;3568:329::-;3627:6;3676:2;3664:9;3655:7;3651:23;3647:32;3644:119;;;3682:79;;:::i;:::-;3644:119;3802:1;3827:53;3872:7;3863:6;3852:9;3848:22;3827:53;:::i;:::-;3817:63;;3773:117;3568:329;;;;:::o;3903:126::-;3940:7;3980:42;3973:5;3969:54;3958:65;;3903:126;;;:::o;4035:96::-;4072:7;4101:24;4119:5;4101:24;:::i;:::-;4090:35;;4035:96;;;:::o;4137:118::-;4224:24;4242:5;4224:24;:::i;:::-;4219:3;4212:37;4137:118;;:::o;4261:222::-;4354:4;4392:2;4381:9;4377:18;4369:26;;4405:71;4473:1;4462:9;4458:17;4449:6;4405:71;:::i;:::-;4261:222;;;;:::o;4489:122::-;4562:24;4580:5;4562:24;:::i;:::-;4555:5;4552:35;4542:63;;4601:1;4598;4591:12;4542:63;4489:122;:::o;4617:139::-;4663:5;4701:6;4688:20;4679:29;;4717:33;4744:5;4717:33;:::i;:::-;4617:139;;;;:::o;4762:474::-;4830:6;4838;4887:2;4875:9;4866:7;4862:23;4858:32;4855:119;;;4893:79;;:::i;:::-;4855:119;5013:1;5038:53;5083:7;5074:6;5063:9;5059:22;5038:53;:::i;:::-;5028:63;;4984:117;5140:2;5166:53;5211:7;5202:6;5191:9;5187:22;5166:53;:::i;:::-;5156:63;;5111:118;4762:474;;;;;:::o;5242:329::-;5301:6;5350:2;5338:9;5329:7;5325:23;5321:32;5318:119;;;5356:79;;:::i;:::-;5318:119;5476:1;5501:53;5546:7;5537:6;5526:9;5522:22;5501:53;:::i;:::-;5491:63;;5447:117;5242:329;;;;:::o;5577:619::-;5654:6;5662;5670;5719:2;5707:9;5698:7;5694:23;5690:32;5687:119;;;5725:79;;:::i;:::-;5687:119;5845:1;5870:53;5915:7;5906:6;5895:9;5891:22;5870:53;:::i;:::-;5860:63;;5816:117;5972:2;5998:53;6043:7;6034:6;6023:9;6019:22;5998:53;:::i;:::-;5988:63;;5943:118;6100:2;6126:53;6171:7;6162:6;6151:9;6147:22;6126:53;:::i;:::-;6116:63;;6071:118;5577:619;;;;;:::o;6202:116::-;6272:21;6287:5;6272:21;:::i;:::-;6265:5;6262:32;6252:60;;6308:1;6305;6298:12;6252:60;6202:116;:::o;6324:133::-;6367:5;6405:6;6392:20;6383:29;;6421:30;6445:5;6421:30;:::i;:::-;6324:133;;;;:::o;6463:468::-;6528:6;6536;6585:2;6573:9;6564:7;6560:23;6556:32;6553:119;;;6591:79;;:::i;:::-;6553:119;6711:1;6736:53;6781:7;6772:6;6761:9;6757:22;6736:53;:::i;:::-;6726:63;;6682:117;6838:2;6864:50;6906:7;6897:6;6886:9;6882:22;6864:50;:::i;:::-;6854:60;;6809:115;6463:468;;;;;:::o;6937:117::-;7046:1;7043;7036:12;7060:117;7169:1;7166;7159:12;7183:180;7231:77;7228:1;7221:88;7328:4;7325:1;7318:15;7352:4;7349:1;7342:15;7369:281;7452:27;7474:4;7452:27;:::i;:::-;7444:6;7440:40;7582:6;7570:10;7567:22;7546:18;7534:10;7531:34;7528:62;7525:88;;;7593:18;;:::i;:::-;7525:88;7633:10;7629:2;7622:22;7412:238;7369:281;;:::o;7656:129::-;7690:6;7717:20;;:::i;:::-;7707:30;;7746:33;7774:4;7766:6;7746:33;:::i;:::-;7656:129;;;:::o;7791:307::-;7852:4;7942:18;7934:6;7931:30;7928:56;;;7964:18;;:::i;:::-;7928:56;8002:29;8024:6;8002:29;:::i;:::-;7994:37;;8086:4;8080;8076:15;8068:23;;7791:307;;;:::o;8104:146::-;8201:6;8196:3;8191;8178:30;8242:1;8233:6;8228:3;8224:16;8217:27;8104:146;;;:::o;8256:423::-;8333:5;8358:65;8374:48;8415:6;8374:48;:::i;:::-;8358:65;:::i;:::-;8349:74;;8446:6;8439:5;8432:21;8484:4;8477:5;8473:16;8522:3;8513:6;8508:3;8504:16;8501:25;8498:112;;;8529:79;;:::i;:::-;8498:112;8619:54;8666:6;8661:3;8656;8619:54;:::i;:::-;8339:340;8256:423;;;;;:::o;8698:338::-;8753:5;8802:3;8795:4;8787:6;8783:17;8779:27;8769:122;;8810:79;;:::i;:::-;8769:122;8927:6;8914:20;8952:78;9026:3;9018:6;9011:4;9003:6;8999:17;8952:78;:::i;:::-;8943:87;;8759:277;8698:338;;;;:::o;9042:943::-;9137:6;9145;9153;9161;9210:3;9198:9;9189:7;9185:23;9181:33;9178:120;;;9217:79;;:::i;:::-;9178:120;9337:1;9362:53;9407:7;9398:6;9387:9;9383:22;9362:53;:::i;:::-;9352:63;;9308:117;9464:2;9490:53;9535:7;9526:6;9515:9;9511:22;9490:53;:::i;:::-;9480:63;;9435:118;9592:2;9618:53;9663:7;9654:6;9643:9;9639:22;9618:53;:::i;:::-;9608:63;;9563:118;9748:2;9737:9;9733:18;9720:32;9779:18;9771:6;9768:30;9765:117;;;9801:79;;:::i;:::-;9765:117;9906:62;9960:7;9951:6;9940:9;9936:22;9906:62;:::i;:::-;9896:72;;9691:287;9042:943;;;;;;;:::o;9991:104::-;10036:7;10065:24;10083:5;10065:24;:::i;:::-;10054:35;;9991:104;;;:::o;10101:142::-;10204:32;10230:5;10204:32;:::i;:::-;10199:3;10192:45;10101:142;;:::o;10249:254::-;10358:4;10396:2;10385:9;10381:18;10373:26;;10409:87;10493:1;10482:9;10478:17;10469:6;10409:87;:::i;:::-;10249:254;;;;:::o;10509:474::-;10577:6;10585;10634:2;10622:9;10613:7;10609:23;10605:32;10602:119;;;10640:79;;:::i;:::-;10602:119;10760:1;10785:53;10830:7;10821:6;10810:9;10806:22;10785:53;:::i;:::-;10775:63;;10731:117;10887:2;10913:53;10958:7;10949:6;10938:9;10934:22;10913:53;:::i;:::-;10903:63;;10858:118;10509:474;;;;;:::o;10989:308::-;11051:4;11141:18;11133:6;11130:30;11127:56;;;11163:18;;:::i;:::-;11127:56;11201:29;11223:6;11201:29;:::i;:::-;11193:37;;11285:4;11279;11275:15;11267:23;;10989:308;;;:::o;11303:425::-;11381:5;11406:66;11422:49;11464:6;11422:49;:::i;:::-;11406:66;:::i;:::-;11397:75;;11495:6;11488:5;11481:21;11533:4;11526:5;11522:16;11571:3;11562:6;11557:3;11553:16;11550:25;11547:112;;;11578:79;;:::i;:::-;11547:112;11668:54;11715:6;11710:3;11705;11668:54;:::i;:::-;11387:341;11303:425;;;;;:::o;11748:340::-;11804:5;11853:3;11846:4;11838:6;11834:17;11830:27;11820:122;;11861:79;;:::i;:::-;11820:122;11978:6;11965:20;12003:79;12078:3;12070:6;12063:4;12055:6;12051:17;12003:79;:::i;:::-;11994:88;;11810:278;11748:340;;;;:::o;12094:509::-;12163:6;12212:2;12200:9;12191:7;12187:23;12183:32;12180:119;;;12218:79;;:::i;:::-;12180:119;12366:1;12355:9;12351:17;12338:31;12396:18;12388:6;12385:30;12382:117;;;12418:79;;:::i;:::-;12382:117;12523:63;12578:7;12569:6;12558:9;12554:22;12523:63;:::i;:::-;12513:73;;12309:287;12094:509;;;;:::o;12609:180::-;12657:77;12654:1;12647:88;12754:4;12751:1;12744:15;12778:4;12775:1;12768:15;12795:320;12839:6;12876:1;12870:4;12866:12;12856:22;;12923:1;12917:4;12913:12;12944:18;12934:81;;13000:4;12992:6;12988:17;12978:27;;12934:81;13062:2;13054:6;13051:14;13031:18;13028:38;13025:84;;13081:18;;:::i;:::-;13025:84;12846:269;12795:320;;;:::o;13121:231::-;13261:34;13257:1;13249:6;13245:14;13238:58;13330:14;13325:2;13317:6;13313:15;13306:39;13121:231;:::o;13358:366::-;13500:3;13521:67;13585:2;13580:3;13521:67;:::i;:::-;13514:74;;13597:93;13686:3;13597:93;:::i;:::-;13715:2;13710:3;13706:12;13699:19;;13358:366;;;:::o;13730:419::-;13896:4;13934:2;13923:9;13919:18;13911:26;;13983:9;13977:4;13973:20;13969:1;13958:9;13954:17;13947:47;14011:131;14137:4;14011:131;:::i;:::-;14003:139;;13730:419;;;:::o;14155:220::-;14295:34;14291:1;14283:6;14279:14;14272:58;14364:3;14359:2;14351:6;14347:15;14340:28;14155:220;:::o;14381:366::-;14523:3;14544:67;14608:2;14603:3;14544:67;:::i;:::-;14537:74;;14620:93;14709:3;14620:93;:::i;:::-;14738:2;14733:3;14729:12;14722:19;;14381:366;;;:::o;14753:419::-;14919:4;14957:2;14946:9;14942:18;14934:26;;15006:9;15000:4;14996:20;14992:1;14981:9;14977:17;14970:47;15034:131;15160:4;15034:131;:::i;:::-;15026:139;;14753:419;;;:::o;15178:243::-;15318:34;15314:1;15306:6;15302:14;15295:58;15387:26;15382:2;15374:6;15370:15;15363:51;15178:243;:::o;15427:366::-;15569:3;15590:67;15654:2;15649:3;15590:67;:::i;:::-;15583:74;;15666:93;15755:3;15666:93;:::i;:::-;15784:2;15779:3;15775:12;15768:19;;15427:366;;;:::o;15799:419::-;15965:4;16003:2;15992:9;15988:18;15980:26;;16052:9;16046:4;16042:20;16038:1;16027:9;16023:17;16016:47;16080:131;16206:4;16080:131;:::i;:::-;16072:139;;15799:419;;;:::o;16224:180::-;16272:77;16269:1;16262:88;16369:4;16366:1;16359:15;16393:4;16390:1;16383:15;16410:194;16450:4;16470:20;16488:1;16470:20;:::i;:::-;16465:25;;16504:20;16522:1;16504:20;:::i;:::-;16499:25;;16548:1;16545;16541:9;16533:17;;16572:1;16566:4;16563:11;16560:37;;;16577:18;;:::i;:::-;16560:37;16410:194;;;;:::o;16610:236::-;16750:34;16746:1;16738:6;16734:14;16727:58;16819:19;16814:2;16806:6;16802:15;16795:44;16610:236;:::o;16852:366::-;16994:3;17015:67;17079:2;17074:3;17015:67;:::i;:::-;17008:74;;17091:93;17180:3;17091:93;:::i;:::-;17209:2;17204:3;17200:12;17193:19;;16852:366;;;:::o;17224:419::-;17390:4;17428:2;17417:9;17413:18;17405:26;;17477:9;17471:4;17467:20;17463:1;17452:9;17448:17;17441:47;17505:131;17631:4;17505:131;:::i;:::-;17497:139;;17224:419;;;:::o;17649:167::-;17789:19;17785:1;17777:6;17773:14;17766:43;17649:167;:::o;17822:366::-;17964:3;17985:67;18049:2;18044:3;17985:67;:::i;:::-;17978:74;;18061:93;18150:3;18061:93;:::i;:::-;18179:2;18174:3;18170:12;18163:19;;17822:366;;;:::o;18194:419::-;18360:4;18398:2;18387:9;18383:18;18375:26;;18447:9;18441:4;18437:20;18433:1;18422:9;18418:17;18411:47;18475:131;18601:4;18475:131;:::i;:::-;18467:139;;18194:419;;;:::o;18619:178::-;18759:30;18755:1;18747:6;18743:14;18736:54;18619:178;:::o;18803:366::-;18945:3;18966:67;19030:2;19025:3;18966:67;:::i;:::-;18959:74;;19042:93;19131:3;19042:93;:::i;:::-;19160:2;19155:3;19151:12;19144:19;;18803:366;;;:::o;19175:419::-;19341:4;19379:2;19368:9;19364:18;19356:26;;19428:9;19422:4;19418:20;19414:1;19403:9;19399:17;19392:47;19456:131;19582:4;19456:131;:::i;:::-;19448:139;;19175:419;;;:::o;19600:170::-;19740:22;19736:1;19728:6;19724:14;19717:46;19600:170;:::o;19776:366::-;19918:3;19939:67;20003:2;19998:3;19939:67;:::i;:::-;19932:74;;20015:93;20104:3;20015:93;:::i;:::-;20133:2;20128:3;20124:12;20117:19;;19776:366;;;:::o;20148:419::-;20314:4;20352:2;20341:9;20337:18;20329:26;;20401:9;20395:4;20391:20;20387:1;20376:9;20372:17;20365:47;20429:131;20555:4;20429:131;:::i;:::-;20421:139;;20148:419;;;:::o;20573:191::-;20613:3;20632:20;20650:1;20632:20;:::i;:::-;20627:25;;20666:20;20684:1;20666:20;:::i;:::-;20661:25;;20709:1;20706;20702:9;20695:16;;20730:3;20727:1;20724:10;20721:36;;;20737:18;;:::i;:::-;20721:36;20573:191;;;;:::o;20770:159::-;20910:11;20906:1;20898:6;20894:14;20887:35;20770:159;:::o;20935:365::-;21077:3;21098:66;21162:1;21157:3;21098:66;:::i;:::-;21091:73;;21173:93;21262:3;21173:93;:::i;:::-;21291:2;21286:3;21282:12;21275:19;;20935:365;;;:::o;21306:419::-;21472:4;21510:2;21499:9;21495:18;21487:26;;21559:9;21553:4;21549:20;21545:1;21534:9;21530:17;21523:47;21587:131;21713:4;21587:131;:::i;:::-;21579:139;;21306:419;;;:::o;21731:180::-;21871:32;21867:1;21859:6;21855:14;21848:56;21731:180;:::o;21917:366::-;22059:3;22080:67;22144:2;22139:3;22080:67;:::i;:::-;22073:74;;22156:93;22245:3;22156:93;:::i;:::-;22274:2;22269:3;22265:12;22258:19;;21917:366;;;:::o;22289:419::-;22455:4;22493:2;22482:9;22478:18;22470:26;;22542:9;22536:4;22532:20;22528:1;22517:9;22513:17;22506:47;22570:131;22696:4;22570:131;:::i;:::-;22562:139;;22289:419;;;:::o;22714:147::-;22815:11;22852:3;22837:18;;22714:147;;;;:::o;22867:114::-;;:::o;22987:398::-;23146:3;23167:83;23248:1;23243:3;23167:83;:::i;:::-;23160:90;;23259:93;23348:3;23259:93;:::i;:::-;23377:1;23372:3;23368:11;23361:18;;22987:398;;;:::o;23391:379::-;23575:3;23597:147;23740:3;23597:147;:::i;:::-;23590:154;;23761:3;23754:10;;23391:379;;;:::o;23776:166::-;23916:18;23912:1;23904:6;23900:14;23893:42;23776:166;:::o;23948:366::-;24090:3;24111:67;24175:2;24170:3;24111:67;:::i;:::-;24104:74;;24187:93;24276:3;24187:93;:::i;:::-;24305:2;24300:3;24296:12;24289:19;;23948:366;;;:::o;24320:419::-;24486:4;24524:2;24513:9;24509:18;24501:26;;24573:9;24567:4;24563:20;24559:1;24548:9;24544:17;24537:47;24601:131;24727:4;24601:131;:::i;:::-;24593:139;;24320:419;;;:::o;24745:228::-;24885:34;24881:1;24873:6;24869:14;24862:58;24954:11;24949:2;24941:6;24937:15;24930:36;24745:228;:::o;24979:366::-;25121:3;25142:67;25206:2;25201:3;25142:67;:::i;:::-;25135:74;;25218:93;25307:3;25218:93;:::i;:::-;25336:2;25331:3;25327:12;25320:19;;24979:366;;;:::o;25351:419::-;25517:4;25555:2;25544:9;25540:18;25532:26;;25604:9;25598:4;25594:20;25590:1;25579:9;25575:17;25568:47;25632:131;25758:4;25632:131;:::i;:::-;25624:139;;25351:419;;;:::o;25776:229::-;25916:34;25912:1;25904:6;25900:14;25893:58;25985:12;25980:2;25972:6;25968:15;25961:37;25776:229;:::o;26011:366::-;26153:3;26174:67;26238:2;26233:3;26174:67;:::i;:::-;26167:74;;26250:93;26339:3;26250:93;:::i;:::-;26368:2;26363:3;26359:12;26352:19;;26011:366;;;:::o;26383:419::-;26549:4;26587:2;26576:9;26572:18;26564:26;;26636:9;26630:4;26626:20;26622:1;26611:9;26607:17;26600:47;26664:131;26790:4;26664:131;:::i;:::-;26656:139;;26383:419;;;:::o;26808:167::-;26948:19;26944:1;26936:6;26932:14;26925:43;26808:167;:::o;26981:366::-;27123:3;27144:67;27208:2;27203:3;27144:67;:::i;:::-;27137:74;;27220:93;27309:3;27220:93;:::i;:::-;27338:2;27333:3;27329:12;27322:19;;26981:366;;;:::o;27353:419::-;27519:4;27557:2;27546:9;27542:18;27534:26;;27606:9;27600:4;27596:20;27592:1;27581:9;27577:17;27570:47;27634:131;27760:4;27634:131;:::i;:::-;27626:139;;27353:419;;;:::o;27778:410::-;27818:7;27841:20;27859:1;27841:20;:::i;:::-;27836:25;;27875:20;27893:1;27875:20;:::i;:::-;27870:25;;27930:1;27927;27923:9;27952:30;27970:11;27952:30;:::i;:::-;27941:41;;28131:1;28122:7;28118:15;28115:1;28112:22;28092:1;28085:9;28065:83;28042:139;;28161:18;;:::i;:::-;28042:139;27826:362;27778:410;;;;:::o;28194:179::-;28334:31;28330:1;28322:6;28318:14;28311:55;28194:179;:::o;28379:366::-;28521:3;28542:67;28606:2;28601:3;28542:67;:::i;:::-;28535:74;;28618:93;28707:3;28618:93;:::i;:::-;28736:2;28731:3;28727:12;28720:19;;28379:366;;;:::o;28751:419::-;28917:4;28955:2;28944:9;28940:18;28932:26;;29004:9;28998:4;28994:20;28990:1;28979:9;28975:17;28968:47;29032:131;29158:4;29032:131;:::i;:::-;29024:139;;28751:419;;;:::o;29176:234::-;29316:34;29312:1;29304:6;29300:14;29293:58;29385:17;29380:2;29372:6;29368:15;29361:42;29176:234;:::o;29416:366::-;29558:3;29579:67;29643:2;29638:3;29579:67;:::i;:::-;29572:74;;29655:93;29744:3;29655:93;:::i;:::-;29773:2;29768:3;29764:12;29757:19;;29416:366;;;:::o;29788:419::-;29954:4;29992:2;29981:9;29977:18;29969:26;;30041:9;30035:4;30031:20;30027:1;30016:9;30012:17;30005:47;30069:131;30195:4;30069:131;:::i;:::-;30061:139;;29788:419;;;:::o;30213:148::-;30315:11;30352:3;30337:18;;30213:148;;;;:::o;30367:390::-;30473:3;30501:39;30534:5;30501:39;:::i;:::-;30556:89;30638:6;30633:3;30556:89;:::i;:::-;30549:96;;30654:65;30712:6;30707:3;30700:4;30693:5;30689:16;30654:65;:::i;:::-;30744:6;30739:3;30735:16;30728:23;;30477:280;30367:390;;;;:::o;30763:435::-;30943:3;30965:95;31056:3;31047:6;30965:95;:::i;:::-;30958:102;;31077:95;31168:3;31159:6;31077:95;:::i;:::-;31070:102;;31189:3;31182:10;;30763:435;;;;;:::o;31204:164::-;31344:16;31340:1;31332:6;31328:14;31321:40;31204:164;:::o;31374:366::-;31516:3;31537:67;31601:2;31596:3;31537:67;:::i;:::-;31530:74;;31613:93;31702:3;31613:93;:::i;:::-;31731:2;31726:3;31722:12;31715:19;;31374:366;;;:::o;31746:419::-;31912:4;31950:2;31939:9;31935:18;31927:26;;31999:9;31993:4;31989:20;31985:1;31974:9;31970:17;31963:47;32027:131;32153:4;32027:131;:::i;:::-;32019:139;;31746:419;;;:::o;32171:141::-;32220:4;32243:3;32235:11;;32266:3;32263:1;32256:14;32300:4;32297:1;32287:18;32279:26;;32171:141;;;:::o;32318:93::-;32355:6;32402:2;32397;32390:5;32386:14;32382:23;32372:33;;32318:93;;;:::o;32417:107::-;32461:8;32511:5;32505:4;32501:16;32480:37;;32417:107;;;;:::o;32530:393::-;32599:6;32649:1;32637:10;32633:18;32672:97;32702:66;32691:9;32672:97;:::i;:::-;32790:39;32820:8;32809:9;32790:39;:::i;:::-;32778:51;;32862:4;32858:9;32851:5;32847:21;32838:30;;32911:4;32901:8;32897:19;32890:5;32887:30;32877:40;;32606:317;;32530:393;;;;;:::o;32929:60::-;32957:3;32978:5;32971:12;;32929:60;;;:::o;32995:142::-;33045:9;33078:53;33096:34;33105:24;33123:5;33105:24;:::i;:::-;33096:34;:::i;:::-;33078:53;:::i;:::-;33065:66;;32995:142;;;:::o;33143:75::-;33186:3;33207:5;33200:12;;33143:75;;;:::o;33224:269::-;33334:39;33365:7;33334:39;:::i;:::-;33395:91;33444:41;33468:16;33444:41;:::i;:::-;33436:6;33429:4;33423:11;33395:91;:::i;:::-;33389:4;33382:105;33300:193;33224:269;;;:::o;33499:73::-;33544:3;33499:73;:::o;33578:189::-;33655:32;;:::i;:::-;33696:65;33754:6;33746;33740:4;33696:65;:::i;:::-;33631:136;33578:189;;:::o;33773:186::-;33833:120;33850:3;33843:5;33840:14;33833:120;;;33904:39;33941:1;33934:5;33904:39;:::i;:::-;33877:1;33870:5;33866:13;33857:22;;33833:120;;;33773:186;;:::o;33965:543::-;34066:2;34061:3;34058:11;34055:446;;;34100:38;34132:5;34100:38;:::i;:::-;34184:29;34202:10;34184:29;:::i;:::-;34174:8;34170:44;34367:2;34355:10;34352:18;34349:49;;;34388:8;34373:23;;34349:49;34411:80;34467:22;34485:3;34467:22;:::i;:::-;34457:8;34453:37;34440:11;34411:80;:::i;:::-;34070:431;;34055:446;33965:543;;;:::o;34514:117::-;34568:8;34618:5;34612:4;34608:16;34587:37;;34514:117;;;;:::o;34637:169::-;34681:6;34714:51;34762:1;34758:6;34750:5;34747:1;34743:13;34714:51;:::i;:::-;34710:56;34795:4;34789;34785:15;34775:25;;34688:118;34637:169;;;;:::o;34811:295::-;34887:4;35033:29;35058:3;35052:4;35033:29;:::i;:::-;35025:37;;35095:3;35092:1;35088:11;35082:4;35079:21;35071:29;;34811:295;;;;:::o;35111:1395::-;35228:37;35261:3;35228:37;:::i;:::-;35330:18;35322:6;35319:30;35316:56;;;35352:18;;:::i;:::-;35316:56;35396:38;35428:4;35422:11;35396:38;:::i;:::-;35481:67;35541:6;35533;35527:4;35481:67;:::i;:::-;35575:1;35599:4;35586:17;;35631:2;35623:6;35620:14;35648:1;35643:618;;;;36305:1;36322:6;36319:77;;;36371:9;36366:3;36362:19;36356:26;36347:35;;36319:77;36422:67;36482:6;36475:5;36422:67;:::i;:::-;36416:4;36409:81;36278:222;35613:887;;35643:618;35695:4;35691:9;35683:6;35679:22;35729:37;35761:4;35729:37;:::i;:::-;35788:1;35802:208;35816:7;35813:1;35810:14;35802:208;;;35895:9;35890:3;35886:19;35880:26;35872:6;35865:42;35946:1;35938:6;35934:14;35924:24;;35993:2;35982:9;35978:18;35965:31;;35839:4;35836:1;35832:12;35827:17;;35802:208;;;36038:6;36029:7;36026:19;36023:179;;;36096:9;36091:3;36087:19;36081:26;36139:48;36181:4;36173:6;36169:17;36158:9;36139:48;:::i;:::-;36131:6;36124:64;36046:156;36023:179;36248:1;36244;36236:6;36232:14;36228:22;36222:4;36215:36;35650:611;;;35613:887;;35203:1303;;;35111:1395;;:::o;36512:225::-;36652:34;36648:1;36640:6;36636:14;36629:58;36721:8;36716:2;36708:6;36704:15;36697:33;36512:225;:::o;36743:366::-;36885:3;36906:67;36970:2;36965:3;36906:67;:::i;:::-;36899:74;;36982:93;37071:3;36982:93;:::i;:::-;37100:2;37095:3;37091:12;37084:19;;36743:366;;;:::o;37115:419::-;37281:4;37319:2;37308:9;37304:18;37296:26;;37368:9;37362:4;37358:20;37354:1;37343:9;37339:17;37332:47;37396:131;37522:4;37396:131;:::i;:::-;37388:139;;37115:419;;;:::o;37540:182::-;37680:34;37676:1;37668:6;37664:14;37657:58;37540:182;:::o;37728:366::-;37870:3;37891:67;37955:2;37950:3;37891:67;:::i;:::-;37884:74;;37967:93;38056:3;37967:93;:::i;:::-;38085:2;38080:3;38076:12;38069:19;;37728:366;;;:::o;38100:419::-;38266:4;38304:2;38293:9;38289:18;38281:26;;38353:9;38347:4;38343:20;38339:1;38328:9;38324:17;38317:47;38381:131;38507:4;38381:131;:::i;:::-;38373:139;;38100:419;;;:::o;38525:231::-;38665:34;38661:1;38653:6;38649:14;38642:58;38734:14;38729:2;38721:6;38717:15;38710:39;38525:231;:::o;38762:366::-;38904:3;38925:67;38989:2;38984:3;38925:67;:::i;:::-;38918:74;;39001:93;39090:3;39001:93;:::i;:::-;39119:2;39114:3;39110:12;39103:19;;38762:366;;;:::o;39134:419::-;39300:4;39338:2;39327:9;39323:18;39315:26;;39387:9;39381:4;39377:20;39373:1;39362:9;39358:17;39351:47;39415:131;39541:4;39415:131;:::i;:::-;39407:139;;39134:419;;;:::o;39559:224::-;39699:34;39695:1;39687:6;39683:14;39676:58;39768:7;39763:2;39755:6;39751:15;39744:32;39559:224;:::o;39789:366::-;39931:3;39952:67;40016:2;40011:3;39952:67;:::i;:::-;39945:74;;40028:93;40117:3;40028:93;:::i;:::-;40146:2;40141:3;40137:12;40130:19;;39789:366;;;:::o;40161:419::-;40327:4;40365:2;40354:9;40350:18;40342:26;;40414:9;40408:4;40404:20;40400:1;40389:9;40385:17;40378:47;40442:131;40568:4;40442:131;:::i;:::-;40434:139;;40161:419;;;:::o;40586:223::-;40726:34;40722:1;40714:6;40710:14;40703:58;40795:6;40790:2;40782:6;40778:15;40771:31;40586:223;:::o;40815:366::-;40957:3;40978:67;41042:2;41037:3;40978:67;:::i;:::-;40971:74;;41054:93;41143:3;41054:93;:::i;:::-;41172:2;41167:3;41163:12;41156:19;;40815:366;;;:::o;41187:419::-;41353:4;41391:2;41380:9;41376:18;41368:26;;41440:9;41434:4;41430:20;41426:1;41415:9;41411:17;41404:47;41468:131;41594:4;41468:131;:::i;:::-;41460:139;;41187:419;;;:::o;41612:171::-;41752:23;41748:1;41740:6;41736:14;41729:47;41612:171;:::o;41789:366::-;41931:3;41952:67;42016:2;42011:3;41952:67;:::i;:::-;41945:74;;42028:93;42117:3;42028:93;:::i;:::-;42146:2;42141:3;42137:12;42130:19;;41789:366;;;:::o;42161:419::-;42327:4;42365:2;42354:9;42350:18;42342:26;;42414:9;42408:4;42404:20;42400:1;42389:9;42385:17;42378:47;42442:131;42568:4;42442:131;:::i;:::-;42434:139;;42161:419;;;:::o;42586:182::-;42726:34;42722:1;42714:6;42710:14;42703:58;42586:182;:::o;42774:366::-;42916:3;42937:67;43001:2;42996:3;42937:67;:::i;:::-;42930:74;;43013:93;43102:3;43013:93;:::i;:::-;43131:2;43126:3;43122:12;43115:19;;42774:366;;;:::o;43146:419::-;43312:4;43350:2;43339:9;43335:18;43327:26;;43399:9;43393:4;43389:20;43385:1;43374:9;43370:17;43363:47;43427:131;43553:4;43427:131;:::i;:::-;43419:139;;43146:419;;;:::o;43571:227::-;43711:34;43707:1;43699:6;43695:14;43688:58;43780:10;43775:2;43767:6;43763:15;43756:35;43571:227;:::o;43804:366::-;43946:3;43967:67;44031:2;44026:3;43967:67;:::i;:::-;43960:74;;44043:93;44132:3;44043:93;:::i;:::-;44161:2;44156:3;44152:12;44145:19;;43804:366;;;:::o;44176:419::-;44342:4;44380:2;44369:9;44365:18;44357:26;;44429:9;44423:4;44419:20;44415:1;44404:9;44400:17;44393:47;44457:131;44583:4;44457:131;:::i;:::-;44449:139;;44176:419;;;:::o;44601:230::-;44741:34;44737:1;44729:6;44725:14;44718:58;44810:13;44805:2;44797:6;44793:15;44786:38;44601:230;:::o;44837:366::-;44979:3;45000:67;45064:2;45059:3;45000:67;:::i;:::-;44993:74;;45076:93;45165:3;45076:93;:::i;:::-;45194:2;45189:3;45185:12;45178:19;;44837:366;;;:::o;45209:419::-;45375:4;45413:2;45402:9;45398:18;45390:26;;45462:9;45456:4;45452:20;45448:1;45437:9;45433:17;45426:47;45490:131;45616:4;45490:131;:::i;:::-;45482:139;;45209:419;;;:::o;45634:171::-;45673:3;45696:24;45714:5;45696:24;:::i;:::-;45687:33;;45742:4;45735:5;45732:15;45729:41;;45750:18;;:::i;:::-;45729:41;45797:1;45790:5;45786:13;45779:20;;45634:171;;;:::o;45811:233::-;45850:3;45873:24;45891:5;45873:24;:::i;:::-;45864:33;;45919:66;45912:5;45909:77;45906:103;;45989:18;;:::i;:::-;45906:103;46036:1;46029:5;46025:13;46018:20;;45811:233;;;:::o;46050:181::-;46190:33;46186:1;46178:6;46174:14;46167:57;46050:181;:::o;46237:366::-;46379:3;46400:67;46464:2;46459:3;46400:67;:::i;:::-;46393:74;;46476:93;46565:3;46476:93;:::i;:::-;46594:2;46589:3;46585:12;46578:19;;46237:366;;;:::o;46609:419::-;46775:4;46813:2;46802:9;46798:18;46790:26;;46862:9;46856:4;46852:20;46848:1;46837:9;46833:17;46826:47;46890:131;47016:4;46890:131;:::i;:::-;46882:139;;46609:419;;;:::o;47034:175::-;47174:27;47170:1;47162:6;47158:14;47151:51;47034:175;:::o;47215:366::-;47357:3;47378:67;47442:2;47437:3;47378:67;:::i;:::-;47371:74;;47454:93;47543:3;47454:93;:::i;:::-;47572:2;47567:3;47563:12;47556:19;;47215:366;;;:::o;47587:419::-;47753:4;47791:2;47780:9;47776:18;47768:26;;47840:9;47834:4;47830:20;47826:1;47815:9;47811:17;47804:47;47868:131;47994:4;47868:131;:::i;:::-;47860:139;;47587:419;;;:::o;48012:237::-;48152:34;48148:1;48140:6;48136:14;48129:58;48221:20;48216:2;48208:6;48204:15;48197:45;48012:237;:::o;48255:366::-;48397:3;48418:67;48482:2;48477:3;48418:67;:::i;:::-;48411:74;;48494:93;48583:3;48494:93;:::i;:::-;48612:2;48607:3;48603:12;48596:19;;48255:366;;;:::o;48627:419::-;48793:4;48831:2;48820:9;48816:18;48808:26;;48880:9;48874:4;48870:20;48866:1;48855:9;48851:17;48844:47;48908:131;49034:4;48908:131;:::i;:::-;48900:139;;48627:419;;;:::o;49052:180::-;49100:77;49097:1;49090:88;49197:4;49194:1;49187:15;49221:4;49218:1;49211:15;49238:442;49387:4;49425:2;49414:9;49410:18;49402:26;;49438:71;49506:1;49495:9;49491:17;49482:6;49438:71;:::i;:::-;49519:72;49587:2;49576:9;49572:18;49563:6;49519:72;:::i;:::-;49601;49669:2;49658:9;49654:18;49645:6;49601:72;:::i;:::-;49238:442;;;;;;:::o;49686:176::-;49718:1;49735:20;49753:1;49735:20;:::i;:::-;49730:25;;49769:20;49787:1;49769:20;:::i;:::-;49764:25;;49808:1;49798:35;;49813:18;;:::i;:::-;49798:35;49854:1;49851;49847:9;49842:14;;49686:176;;;;:::o;49868:98::-;49919:6;49953:5;49947:12;49937:22;;49868:98;;;:::o;49972:168::-;50055:11;50089:6;50084:3;50077:19;50129:4;50124:3;50120:14;50105:29;;49972:168;;;;:::o;50146:373::-;50232:3;50260:38;50292:5;50260:38;:::i;:::-;50314:70;50377:6;50372:3;50314:70;:::i;:::-;50307:77;;50393:65;50451:6;50446:3;50439:4;50432:5;50428:16;50393:65;:::i;:::-;50483:29;50505:6;50483:29;:::i;:::-;50478:3;50474:39;50467:46;;50236:283;50146:373;;;;:::o;50525:640::-;50720:4;50758:3;50747:9;50743:19;50735:27;;50772:71;50840:1;50829:9;50825:17;50816:6;50772:71;:::i;:::-;50853:72;50921:2;50910:9;50906:18;50897:6;50853:72;:::i;:::-;50935;51003:2;50992:9;50988:18;50979:6;50935:72;:::i;:::-;51054:9;51048:4;51044:20;51039:2;51028:9;51024:18;51017:48;51082:76;51153:4;51144:6;51082:76;:::i;:::-;51074:84;;50525:640;;;;;;;:::o;51171:141::-;51227:5;51258:6;51252:13;51243:22;;51274:32;51300:5;51274:32;:::i;:::-;51171:141;;;;:::o;51318:349::-;51387:6;51436:2;51424:9;51415:7;51411:23;51407:32;51404:119;;;51442:79;;:::i;:::-;51404:119;51562:1;51587:63;51642:7;51633:6;51622:9;51618:22;51587:63;:::i;:::-;51577:73;;51533:127;51318:349;;;;:::o
Metadata Hash
ipfs://a2c8f8b435ce08d167da32e4935799af2cfede602344929d4f5b116014972794