ERC-721
Overview
Max Total Supply
30 UFOcrew
Holders
2
Total Transfers
-
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
UFOcrew
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-11-26 */ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░▓██▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒██▓░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░▒██▓▒▒▓██▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░███▒▒▓██▓░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░▒▓▓▓██▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓▓▓▓▓██▓▓▓▒░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░▒██▓▓▓███▒▒▒░░░░░░░░░░░░░░░░░░░░░░▒▒▒███▓▓▓██▓░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░▓██▓▒▒███░░░░░░░░░░░░░░░░░░░░░░███▓▒▒███░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░▒▒▒███▓▓▓██▓░░▓██████████▓░░▒██▓▓▓███▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓▓▓▓▓██▓▒▒▓███████████▒▒▓██▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░███▒▒▓█████▓▒▒▒▒▓█████▓▒▒███▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒███▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓██▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░███▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒███▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░███▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒███▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░███▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒███▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒▒███▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓██▓▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░███▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒███░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░███▒▒▓██▓░░▒▒▒███░░░▒▒▓██▒░░▒▒▒███░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░███▒▒▓▓▓▓░░▒▒▒▓▓▓░░░▒▒▓▓▓▒░░▒▒▒███░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░███▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒███░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░███▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒███░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒▒███▒▒▒▒▒▒░░▒▒▒▒▒▒░░░▒▒▒▒▒▓██▓▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░███▒▒▒▒▒▒▒▒▓▓▓▓▓▓▒▒▒▒▒▒▒▒███▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░███▒▒▒▒▒████████████▒▒▒▒▒███▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░███▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒███▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒██████████████████████▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓██▓▒▒▒▒▓███░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓██▓▒▒▒▒▓███░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓██▓▒▒▒▒▓███░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓██▓▒▒▒▒▓███░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░████████▓▓▓▒▒▒▒▒▒▓▓▓████████▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░▒▓▓▓▓▓████████▓▒▒▒▒▒▒▒▒▒▒▓████████▓▓▓▓▓▒░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░░░░▓█████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████░░░░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░▓██▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓██▓░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░▓██▓▒▒▒▒▒▒▒▒▒▒▓██▓▒▒▒▒▒▒▒▒▒▒▓██▓▒▒▒▒▒▒▒▒▒▒▓██▓░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░▓██▓▒▒▒▒▒▓▓▓▒▒▓██▓▒▒▒▒▒▒▒▒▒▒▓██▓▒▒▓▓▓▒▒▒▒▒▓██▓░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░▓██▓▒▒▒▒▒███▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒███▓▒▒▒▒▓██▓░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░▓██▓▒▒▒▒▒███▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒███▓▒▒▒▒▓██▓░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░▓██▓▒▒▒▒▒███▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒███▓▒▒▒▒▓██▓░░░░░░░░░░░░░░░░░░░░░░ //░░░░░░░░░░░░░░░░░░░░░░▓██▓▒▒▒▒▒███▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒███▓▒▒▒▒▓██▓░░░░░░░░░░░░░░░░░░░░░░ // website: /https://ufocrew.io/ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // 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/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (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 `IERC721.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 v4.4.1 (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`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // 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/new.sol pragma solidity ^0.8.4; error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerQueryForNonexistentToken(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens. */ function totalSupply() public view returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex - _startTokenId() times unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to _startTokenId() unchecked { return _currentIndex - _startTokenId(); } } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return _addressData[owner].aux; } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { _addressData[owner].aux = aux; } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr && curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return _ownershipOf(tokenId).addr; } /** * @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) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _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 { _transfer(from, to, tokenId); if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (safe && to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex != end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex != end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = to; currSlot.startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev This is equivalent to _burn(tokenId, false) */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); address from = prevOwnership.addr; if (approvalCheck) { bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { AddressData storage addressData = _addressData[from]; addressData.balance -= 1; addressData.numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = from; currSlot.startTimestamp = uint64(block.timestamp); currSlot.burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * 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, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender() , "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /////////////////////////////////////////////////////////////////////// // // // ## ## ###### ##### #### ###### ###### ## ## // // ## ## ## ## ## ## ## ## ## ## ## ## // // ## ## ## ## ## ## ## ## ## ## # ## // // ## ## ##### ## ## ## ## ### ##### ####### // // ## ## ## ## ## ## ##### ## ####### // // ## ## ## ## ## ## ## ## ### ## ## ## // // ##### ## ##### #### ## ### ###### # # // // // /////////////////////////////////////////////////////////////////////// pragma solidity >=0.8.15 <0.9.0; contract UFOcrew is ERC721A, Ownable, ReentrancyGuard { using Strings for uint256; string private uriPrefix; string private uriSuffix = ".json"; string public hiddenURL; uint256 public cost = 0.001 ether; uint256 public whiteListCost = 0.0001 ether ; uint16 public maxSupply = 13000; uint8 public maxMintAmountPerTx = 3; uint8 public maxMintAmountPerWallet = 5; uint8 public maxFreeMintAmountPerWallet = 1; uint256 public freeNFTAlreadyMinted = 0; uint256 public NUM_FREE_MINTS = 1000; bool public WLpaused = true; bool public paused = true; bool public reveal =false; mapping (address => bool) public isWhitelisted; constructor( string memory _tokenName, string memory _tokenSymbol, string memory _hiddenMetadataUri, string memory _uriPrefix ) ERC721A(_tokenName, _tokenSymbol) { } modifier callerIsUser() { require(tx.origin == msg.sender, "The caller is another contract"); _; } function mint(uint256 _mintAmount) external payable callerIsUser { require(!paused, "The contract is paused!"); require(totalSupply() + _mintAmount < maxSupply + 1, "No more"); require (balanceOf(msg.sender) + _mintAmount <= maxMintAmountPerWallet, "max NFT per address exceeded"); if(freeNFTAlreadyMinted + _mintAmount > NUM_FREE_MINTS){ require( (cost * _mintAmount) <= msg.value, "Incorrect ETH value sent" ); } else { if (balanceOf(msg.sender) + _mintAmount > maxFreeMintAmountPerWallet) { require( (cost * _mintAmount) <= msg.value, "Incorrect ETH value sent" ); require( _mintAmount <= maxMintAmountPerTx, "Max mints per transaction exceeded" ); } else { require( _mintAmount <= maxFreeMintAmountPerWallet, "Max mints per transaction exceeded" ); freeNFTAlreadyMinted += _mintAmount; } } _safeMint(msg.sender, _mintAmount); } function Reserve(uint16 _mintAmount, address _receiver) external onlyOwner { uint16 totalSupply = uint16(totalSupply()); require(totalSupply + _mintAmount <= maxSupply, "Excedes max supply."); _safeMint(_receiver , _mintAmount); delete _mintAmount; delete _receiver; delete totalSupply; } function Airdrop(uint8 _amountPerAddress, address[] calldata addresses) external onlyOwner { uint16 totalSupply = uint16(totalSupply()); uint totalAmount = _amountPerAddress * addresses.length; require(totalSupply + totalAmount <= maxSupply, "Excedes max supply."); for (uint256 i = 0; i < addresses.length; i++) { _safeMint(addresses[i], _amountPerAddress); } delete _amountPerAddress; delete totalSupply; } function setMaxSupply(uint16 _maxSupply) external onlyOwner { maxSupply = _maxSupply; } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require( _exists(_tokenId), "ERC721Metadata: URI query for nonexistent token" ); if ( reveal == false) { return hiddenURL; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString() ,uriSuffix)) : ""; } function setWLPaused() external onlyOwner { WLpaused = !WLpaused; } function setWLCost(uint256 _cost) external onlyOwner { whiteListCost = _cost; delete _cost; } function setFreeMaxLimitPerAddress(uint8 _limit) external onlyOwner{ maxFreeMintAmountPerWallet = _limit; delete _limit; } function addToPresaleWhitelist(address[] calldata entries) external onlyOwner { for(uint8 i = 0; i < entries.length; i++) { isWhitelisted[entries[i]] = true; } } function removeFromPresaleWhitelist(address[] calldata entries) external onlyOwner { for(uint8 i = 0; i < entries.length; i++) { isWhitelisted[entries[i]] = false; } } function whitelistMint(uint256 _mintAmount) external payable { require(!WLpaused, "Whitelist minting is over!"); require(isWhitelisted[msg.sender], "You are not whitelisted"); require(totalSupply() + _mintAmount < maxSupply + 1, "No more"); require (balanceOf(msg.sender) + _mintAmount <= maxMintAmountPerWallet, "max NFT per address exceeded"); if(freeNFTAlreadyMinted + _mintAmount > NUM_FREE_MINTS){ require( (whiteListCost * _mintAmount) <= msg.value, "Incorrect ETH value sent" ); } else { if (balanceOf(msg.sender) + _mintAmount > maxFreeMintAmountPerWallet) { require( (whiteListCost * _mintAmount) <= msg.value, "Incorrect ETH value sent" ); require( _mintAmount <= maxMintAmountPerTx, "Max mints per transaction exceeded" ); } else { require( _mintAmount <= maxFreeMintAmountPerWallet, "Max mints per transaction exceeded" ); freeNFTAlreadyMinted += _mintAmount; } } _safeMint(msg.sender, _mintAmount); } function setUriPrefix(string memory _uriPrefix) external onlyOwner { uriPrefix = _uriPrefix; } function setHiddenUri(string memory _uriPrefix) external onlyOwner { hiddenURL = _uriPrefix; } function setNumFreeMints(uint256 _numfreemints) external onlyOwner { NUM_FREE_MINTS = _numfreemints; } function setPaused() external onlyOwner { paused = !paused; WLpaused = true; } function setCost(uint _cost) external onlyOwner{ cost = _cost; } function setRevealed() external onlyOwner{ reveal = !reveal; } function setMaxMintAmountPerTx(uint8 _maxtx) external onlyOwner{ maxMintAmountPerTx = _maxtx; } function setMaxMintAmountPerWallet(uint8 _maxWallet) external onlyOwner{ maxMintAmountPerWallet = _maxWallet; } function withdraw() public onlyOwner nonReentrant { // This will transfer the remaining contract balance to the owner. // Do not remove this otherwise you will not be able to withdraw the funds. // ============================================================================= (bool os, ) = payable(owner()).call{value: address(this).balance}(''); require(os); // ============================================================================= } function _baseURI() internal view override returns (string memory) { return uriPrefix; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"string","name":"_tokenSymbol","type":"string"},{"internalType":"string","name":"_hiddenMetadataUri","type":"string"},{"internalType":"string","name":"_uriPrefix","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint8","name":"_amountPerAddress","type":"uint8"},{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"Airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"NUM_FREE_MINTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_mintAmount","type":"uint16"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"Reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"WLpaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"entries","type":"address[]"}],"name":"addToPresaleWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeNFTAlreadyMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenURL","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFreeMintAmountPerWallet","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerWallet","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"entries","type":"address[]"}],"name":"removeFromPresaleWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_limit","type":"uint8"}],"name":"setFreeMaxLimitPerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setHiddenUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_maxtx","type":"uint8"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_maxWallet","type":"uint8"}],"name":"setMaxMintAmountPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_maxSupply","type":"uint16"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numfreemints","type":"uint256"}],"name":"setNumFreeMints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setWLCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setWLPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whiteListCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600b90816200004a91906200051f565b5066038d7ea4c68000600d55655af3107a4000600e556132c8600f60006101000a81548161ffff021916908361ffff1602179055506003600f60026101000a81548160ff021916908360ff1602179055506005600f60036101000a81548160ff021916908360ff1602179055506001600f60046101000a81548160ff021916908360ff16021790555060006010556103e86011556001601260006101000a81548160ff0219169083151502179055506001601260016101000a81548160ff0219169083151502179055506000601260026101000a81548160ff0219169083151502179055503480156200013c57600080fd5b5060405162005a8738038062005a8783398181016040528101906200016291906200076a565b838381600290816200017591906200051f565b5080600390816200018791906200051f565b5062000198620001d260201b60201c565b6000819055505050620001c0620001b4620001d760201b60201c565b620001df60201b60201c565b60016009819055505050505062000858565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200032757607f821691505b6020821081036200033d576200033c620002df565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003a77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000368565b620003b3868362000368565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000400620003fa620003f484620003cb565b620003d5565b620003cb565b9050919050565b6000819050919050565b6200041c83620003df565b620004346200042b8262000407565b84845462000375565b825550505050565b600090565b6200044b6200043c565b6200045881848462000411565b505050565b5b8181101562000480576200047460008262000441565b6001810190506200045e565b5050565b601f821115620004cf57620004998162000343565b620004a48462000358565b81016020851015620004b4578190505b620004cc620004c38562000358565b8301826200045d565b50505b505050565b600082821c905092915050565b6000620004f460001984600802620004d4565b1980831691505092915050565b60006200050f8383620004e1565b9150826002028217905092915050565b6200052a82620002a5565b67ffffffffffffffff811115620005465762000545620002b0565b5b6200055282546200030e565b6200055f82828562000484565b600060209050601f83116001811462000597576000841562000582578287015190505b6200058e858262000501565b865550620005fe565b601f198416620005a78662000343565b60005b82811015620005d157848901518255600182019150602085019450602081019050620005aa565b86831015620005f15784890151620005ed601f891682620004e1565b8355505b6001600288020188555050505b505050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620006408262000624565b810181811067ffffffffffffffff82111715620006625762000661620002b0565b5b80604052505050565b60006200067762000606565b905062000685828262000635565b919050565b600067ffffffffffffffff821115620006a857620006a7620002b0565b5b620006b38262000624565b9050602081019050919050565b60005b83811015620006e0578082015181840152602081019050620006c3565b60008484015250505050565b600062000703620006fd846200068a565b6200066b565b9050828152602081018484840111156200072257620007216200061f565b5b6200072f848285620006c0565b509392505050565b600082601f8301126200074f576200074e6200061a565b5b815162000761848260208601620006ec565b91505092915050565b6000806000806080858703121562000787576200078662000610565b5b600085015167ffffffffffffffff811115620007a857620007a762000615565b5b620007b68782880162000737565b945050602085015167ffffffffffffffff811115620007da57620007d962000615565b5b620007e88782880162000737565b935050604085015167ffffffffffffffff8111156200080c576200080b62000615565b5b6200081a8782880162000737565b925050606085015167ffffffffffffffff8111156200083e576200083d62000615565b5b6200084c8782880162000737565b91505092959194509250565b61521f80620008686000396000f3fe6080604052600436106102ae5760003560e01c8063715018a611610175578063a22cb465116100dc578063cffb6e2011610095578063e985e9c51161006f578063e985e9c514610a08578063eef440af14610a45578063f2fde38b14610a70578063f8bf517214610a99576102ae565b8063cffb6e201461098b578063d1d19213146109b4578063d5abeb01146109dd576102ae565b8063a22cb4651461087d578063a475b5dd146108a6578063aa062290146108d1578063b88d4fde146108fa578063bc951b9114610923578063c87b56dd1461094e576102ae565b80638f65fe0a1161012e5780638f65fe0a1461078c5780639257e044146107b557806394354fd0146107e057806395d89b411461080b578063982d669e14610836578063a0712d6814610861576102ae565b8063715018a6146106b15780637ec4a659146106c85780637f6e9093146106f1578063868ff4a21461071c5780638da5cb5b146107385780638e07484c14610763576102ae565b806328b60d151161021957806342842e0e116101d257806342842e0e1461059157806344a0d68a146105ba5780634d9c1848146105e35780635c975abb1461060c5780636352211e1461063757806370a0823114610674576102ae565b806328b60d15146104bd5780632f6f98e1146104e657806337a66d851461050f5780633af32abf146105265780633bd64968146105635780633ccfd60b1461057a576102ae565b80630a00ae831161026b5780630a00ae83146103c15780631067fcc7146103ea57806313faede61461041357806318160ddd1461043e578063193ad7b41461046957806323b872dd14610494576102ae565b806301ffc9a7146102b357806306421c2f146102f057806306fdde0314610319578063081812fc14610344578063093cfa6314610381578063095ea7b314610398575b600080fd5b3480156102bf57600080fd5b506102da60048036038101906102d59190613c06565b610ac4565b6040516102e79190613c4e565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190613ca3565b610ba6565b005b34801561032557600080fd5b5061032e610c42565b60405161033b9190613d60565b60405180910390f35b34801561035057600080fd5b5061036b60048036038101906103669190613db8565b610cd4565b6040516103789190613e26565b60405180910390f35b34801561038d57600080fd5b50610396610d50565b005b3480156103a457600080fd5b506103bf60048036038101906103ba9190613e6d565b610df8565b005b3480156103cd57600080fd5b506103e860048036038101906103e39190613db8565b610f02565b005b3480156103f657600080fd5b50610411600480360381019061040c9190613fe2565b610f88565b005b34801561041f57600080fd5b50610428611017565b604051610435919061403a565b60405180910390f35b34801561044a57600080fd5b5061045361101d565b604051610460919061403a565b60405180910390f35b34801561047557600080fd5b5061047e611034565b60405161048b919061403a565b60405180910390f35b3480156104a057600080fd5b506104bb60048036038101906104b69190614055565b61103a565b005b3480156104c957600080fd5b506104e460048036038101906104df91906140e1565b61104a565b005b3480156104f257600080fd5b5061050d6004803603810190610508919061410e565b6110e4565b005b34801561051b57600080fd5b506105246111f1565b005b34801561053257600080fd5b5061054d6004803603810190610548919061414e565b6112b4565b60405161055a9190613c4e565b60405180910390f35b34801561056f57600080fd5b506105786112d4565b005b34801561058657600080fd5b5061058f61137c565b005b34801561059d57600080fd5b506105b860048036038101906105b39190614055565b6114cd565b005b3480156105c657600080fd5b506105e160048036038101906105dc9190613db8565b6114ed565b005b3480156105ef57600080fd5b5061060a600480360381019061060591906140e1565b611573565b005b34801561061857600080fd5b50610621611611565b60405161062e9190613c4e565b60405180910390f35b34801561064357600080fd5b5061065e60048036038101906106599190613db8565b611624565b60405161066b9190613e26565b60405180910390f35b34801561068057600080fd5b5061069b6004803603810190610696919061414e565b61163a565b6040516106a8919061403a565b60405180910390f35b3480156106bd57600080fd5b506106c6611709565b005b3480156106d457600080fd5b506106ef60048036038101906106ea9190613fe2565b611791565b005b3480156106fd57600080fd5b50610706611820565b6040516107139190613c4e565b60405180910390f35b61073660048036038101906107319190613db8565b611833565b005b34801561074457600080fd5b5061074d611bab565b60405161075a9190613e26565b60405180910390f35b34801561076f57600080fd5b5061078a600480360381019061078591906141db565b611bd5565b005b34801561079857600080fd5b506107b360048036038101906107ae91906141db565b611cfc565b005b3480156107c157600080fd5b506107ca611e23565b6040516107d7919061403a565b60405180910390f35b3480156107ec57600080fd5b506107f5611e29565b6040516108029190614237565b60405180910390f35b34801561081757600080fd5b50610820611e3c565b60405161082d9190613d60565b60405180910390f35b34801561084257600080fd5b5061084b611ece565b604051610858919061403a565b60405180910390f35b61087b60048036038101906108769190613db8565b611ed4565b005b34801561088957600080fd5b506108a4600480360381019061089f919061427e565b61222e565b005b3480156108b257600080fd5b506108bb6123a5565b6040516108c89190613c4e565b60405180910390f35b3480156108dd57600080fd5b506108f860048036038101906108f391906140e1565b6123b8565b005b34801561090657600080fd5b50610921600480360381019061091c919061435f565b612452565b005b34801561092f57600080fd5b506109386124ce565b6040516109459190614237565b60405180910390f35b34801561095a57600080fd5b5061097560048036038101906109709190613db8565b6124e1565b6040516109829190613d60565b60405180910390f35b34801561099757600080fd5b506109b260048036038101906109ad91906143e2565b612639565b005b3480156109c057600080fd5b506109db60048036038101906109d69190613db8565b6127a2565b005b3480156109e957600080fd5b506109f261282c565b6040516109ff9190614451565b60405180910390f35b348015610a1457600080fd5b50610a2f6004803603810190610a2a919061446c565b612840565b604051610a3c9190613c4e565b60405180910390f35b348015610a5157600080fd5b50610a5a6128d4565b604051610a679190613d60565b60405180910390f35b348015610a7c57600080fd5b50610a976004803603810190610a92919061414e565b612962565b005b348015610aa557600080fd5b50610aae612a59565b604051610abb9190614237565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b8f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b9f5750610b9e82612a6c565b5b9050919050565b610bae612ad6565b73ffffffffffffffffffffffffffffffffffffffff16610bcc611bab565b73ffffffffffffffffffffffffffffffffffffffff1614610c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c19906144f8565b60405180910390fd5b80600f60006101000a81548161ffff021916908361ffff16021790555050565b606060028054610c5190614547565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7d90614547565b8015610cca5780601f10610c9f57610100808354040283529160200191610cca565b820191906000526020600020905b815481529060010190602001808311610cad57829003601f168201915b5050505050905090565b6000610cdf82612ade565b610d15576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610d58612ad6565b73ffffffffffffffffffffffffffffffffffffffff16610d76611bab565b73ffffffffffffffffffffffffffffffffffffffff1614610dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc3906144f8565b60405180910390fd5b601260009054906101000a900460ff1615601260006101000a81548160ff021916908315150217905550565b6000610e0382611624565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e6a576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e89612ad6565b73ffffffffffffffffffffffffffffffffffffffff1614158015610ebb5750610eb981610eb4612ad6565b612840565b155b15610ef2576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610efd838383612b2c565b505050565b610f0a612ad6565b73ffffffffffffffffffffffffffffffffffffffff16610f28611bab565b73ffffffffffffffffffffffffffffffffffffffff1614610f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f75906144f8565b60405180910390fd5b8060118190555050565b610f90612ad6565b73ffffffffffffffffffffffffffffffffffffffff16610fae611bab565b73ffffffffffffffffffffffffffffffffffffffff1614611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffb906144f8565b60405180910390fd5b80600c90816110139190614724565b5050565b600d5481565b6000611027612bde565b6001546000540303905090565b60105481565b611045838383612be3565b505050565b611052612ad6565b73ffffffffffffffffffffffffffffffffffffffff16611070611bab565b73ffffffffffffffffffffffffffffffffffffffff16146110c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bd906144f8565b60405180910390fd5b80600f60036101000a81548160ff021916908360ff16021790555050565b6110ec612ad6565b73ffffffffffffffffffffffffffffffffffffffff1661110a611bab565b73ffffffffffffffffffffffffffffffffffffffff1614611160576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611157906144f8565b60405180910390fd5b600061116a61101d565b9050600f60009054906101000a900461ffff1661ffff16838261118d9190614825565b61ffff1611156111d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c9906148a7565b60405180910390fd5b6111e0828461ffff16613097565b600092506000915060009050505050565b6111f9612ad6565b73ffffffffffffffffffffffffffffffffffffffff16611217611bab565b73ffffffffffffffffffffffffffffffffffffffff161461126d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611264906144f8565b60405180910390fd5b601260019054906101000a900460ff1615601260016101000a81548160ff0219169083151502179055506001601260006101000a81548160ff021916908315150217905550565b60136020528060005260406000206000915054906101000a900460ff1681565b6112dc612ad6565b73ffffffffffffffffffffffffffffffffffffffff166112fa611bab565b73ffffffffffffffffffffffffffffffffffffffff1614611350576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611347906144f8565b60405180910390fd5b601260029054906101000a900460ff1615601260026101000a81548160ff021916908315150217905550565b611384612ad6565b73ffffffffffffffffffffffffffffffffffffffff166113a2611bab565b73ffffffffffffffffffffffffffffffffffffffff16146113f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ef906144f8565b60405180910390fd5b60026009540361143d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143490614913565b60405180910390fd5b6002600981905550600061144f611bab565b73ffffffffffffffffffffffffffffffffffffffff164760405161147290614964565b60006040518083038185875af1925050503d80600081146114af576040519150601f19603f3d011682016040523d82523d6000602084013e6114b4565b606091505b50509050806114c257600080fd5b506001600981905550565b6114e883838360405180602001604052806000815250612452565b505050565b6114f5612ad6565b73ffffffffffffffffffffffffffffffffffffffff16611513611bab565b73ffffffffffffffffffffffffffffffffffffffff1614611569576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611560906144f8565b60405180910390fd5b80600d8190555050565b61157b612ad6565b73ffffffffffffffffffffffffffffffffffffffff16611599611bab565b73ffffffffffffffffffffffffffffffffffffffff16146115ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e6906144f8565b60405180910390fd5b80600f60046101000a81548160ff021916908360ff1602179055506000905050565b601260019054906101000a900460ff1681565b600061162f826130b5565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116a1576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611711612ad6565b73ffffffffffffffffffffffffffffffffffffffff1661172f611bab565b73ffffffffffffffffffffffffffffffffffffffff1614611785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177c906144f8565b60405180910390fd5b61178f6000613344565b565b611799612ad6565b73ffffffffffffffffffffffffffffffffffffffff166117b7611bab565b73ffffffffffffffffffffffffffffffffffffffff161461180d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611804906144f8565b60405180910390fd5b80600a908161181c9190614724565b5050565b601260009054906101000a900460ff1681565b601260009054906101000a900460ff1615611883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187a906149c5565b60405180910390fd5b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661190f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190690614a31565b60405180910390fd5b6001600f60009054906101000a900461ffff1661192c9190614825565b61ffff168161193961101d565b6119439190614a51565b10611983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197a90614ad1565b60405180910390fd5b600f60039054906101000a900460ff1660ff16816119a03361163a565b6119aa9190614a51565b11156119eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e290614b3d565b60405180910390fd5b601154816010546119fc9190614a51565b1115611a57573481600e54611a119190614b5d565b1115611a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4990614c03565b60405180910390fd5b611b9e565b600f60049054906101000a900460ff1660ff1681611a743361163a565b611a7e9190614a51565b1115611b2e573481600e54611a939190614b5d565b1115611ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acb90614c03565b60405180910390fd5b600f60029054906101000a900460ff1660ff16811115611b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2090614c95565b60405180910390fd5b611b9d565b600f60049054906101000a900460ff1660ff16811115611b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7a90614c95565b60405180910390fd5b8060106000828254611b959190614a51565b925050819055505b5b611ba83382613097565b50565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611bdd612ad6565b73ffffffffffffffffffffffffffffffffffffffff16611bfb611bab565b73ffffffffffffffffffffffffffffffffffffffff1614611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c48906144f8565b60405180910390fd5b60005b828290508160ff161015611cf75760016013600085858560ff16818110611c7e57611c7d614cb5565b5b9050602002016020810190611c93919061414e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611cef90614ce4565b915050611c54565b505050565b611d04612ad6565b73ffffffffffffffffffffffffffffffffffffffff16611d22611bab565b73ffffffffffffffffffffffffffffffffffffffff1614611d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6f906144f8565b60405180910390fd5b60005b828290508160ff161015611e1e5760006013600085858560ff16818110611da557611da4614cb5565b5b9050602002016020810190611dba919061414e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611e1690614ce4565b915050611d7b565b505050565b600e5481565b600f60029054906101000a900460ff1681565b606060038054611e4b90614547565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7790614547565b8015611ec45780601f10611e9957610100808354040283529160200191611ec4565b820191906000526020600020905b815481529060010190602001808311611ea757829003601f168201915b5050505050905090565b60115481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3990614d59565b60405180910390fd5b601260019054906101000a900460ff1615611f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8990614dc5565b60405180910390fd5b6001600f60009054906101000a900461ffff16611faf9190614825565b61ffff1681611fbc61101d565b611fc69190614a51565b10612006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffd90614ad1565b60405180910390fd5b600f60039054906101000a900460ff1660ff16816120233361163a565b61202d9190614a51565b111561206e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206590614b3d565b60405180910390fd5b6011548160105461207f9190614a51565b11156120da573481600d546120949190614b5d565b11156120d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cc90614c03565b60405180910390fd5b612221565b600f60049054906101000a900460ff1660ff16816120f73361163a565b6121019190614a51565b11156121b1573481600d546121169190614b5d565b1115612157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214e90614c03565b60405180910390fd5b600f60029054906101000a900460ff1660ff168111156121ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a390614c95565b60405180910390fd5b612220565b600f60049054906101000a900460ff1660ff16811115612206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fd90614c95565b60405180910390fd5b80601060008282546122189190614a51565b925050819055505b5b61222b3382613097565b50565b612236612ad6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361229a576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006122a7612ad6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612354612ad6565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123999190613c4e565b60405180910390a35050565b601260029054906101000a900460ff1681565b6123c0612ad6565b73ffffffffffffffffffffffffffffffffffffffff166123de611bab565b73ffffffffffffffffffffffffffffffffffffffff1614612434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242b906144f8565b60405180910390fd5b80600f60026101000a81548160ff021916908360ff16021790555050565b61245d848484612be3565b61247c8373ffffffffffffffffffffffffffffffffffffffff1661340a565b8015612491575061248f8484848461342d565b155b156124c8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600f60039054906101000a900460ff1681565b60606124ec82612ade565b61252b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252290614e57565b60405180910390fd5b60001515601260029054906101000a900460ff161515036125d857600c805461255390614547565b80601f016020809104026020016040519081016040528092919081815260200182805461257f90614547565b80156125cc5780601f106125a1576101008083540402835291602001916125cc565b820191906000526020600020905b8154815290600101906020018083116125af57829003601f168201915b50505050509050612634565b60006125e261357d565b905060008151116126025760405180602001604052806000815250612630565b8061260c8461360f565b600b60405160200161262093929190614f36565b6040516020818303038152906040525b9150505b919050565b612641612ad6565b73ffffffffffffffffffffffffffffffffffffffff1661265f611bab565b73ffffffffffffffffffffffffffffffffffffffff16146126b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ac906144f8565b60405180910390fd5b60006126bf61101d565b90506000838390508560ff166126d59190614b5d565b9050600f60009054906101000a900461ffff1661ffff16818361ffff166126fc9190614a51565b111561273d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612734906148a7565b60405180910390fd5b60005b848490508110156127925761277f85858381811061276157612760614cb5565b5b9050602002016020810190612776919061414e565b8760ff16613097565b808061278a90614f67565b915050612740565b5060009450600091505050505050565b6127aa612ad6565b73ffffffffffffffffffffffffffffffffffffffff166127c8611bab565b73ffffffffffffffffffffffffffffffffffffffff161461281e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612815906144f8565b60405180910390fd5b80600e819055506000905050565b600f60009054906101000a900461ffff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600c80546128e190614547565b80601f016020809104026020016040519081016040528092919081815260200182805461290d90614547565b801561295a5780601f1061292f5761010080835404028352916020019161295a565b820191906000526020600020905b81548152906001019060200180831161293d57829003601f168201915b505050505081565b61296a612ad6565b73ffffffffffffffffffffffffffffffffffffffff16612988611bab565b73ffffffffffffffffffffffffffffffffffffffff16146129de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d5906144f8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4490615021565b60405180910390fd5b612a5681613344565b50565b600f60049054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600081612ae9612bde565b11158015612af8575060005482105b8015612b25575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b6000612bee826130b5565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612c59576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16612c7a612ad6565b73ffffffffffffffffffffffffffffffffffffffff161480612ca95750612ca885612ca3612ad6565b612840565b5b80612cee5750612cb7612ad6565b73ffffffffffffffffffffffffffffffffffffffff16612cd684610cd4565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612d27576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612d8d576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612d9a858585600161376f565b612da660008487612b2c565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361302557600054821461302457878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46130908585856001613775565b5050505050565b6130b182826040518060200160405280600081525061377b565b5050565b6130bd613b57565b6000829050806130cb612bde565b111580156130da575060005481105b1561330d576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161330b57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146131ef57809250505061333f565b5b60011561330a57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461330557809250505061333f565b6131f0565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613453612ad6565b8786866040518563ffffffff1660e01b81526004016134759493929190615096565b6020604051808303816000875af19250505080156134b157506040513d601f19601f820116820180604052508101906134ae91906150f7565b60015b61352a573d80600081146134e1576040519150601f19603f3d011682016040523d82523d6000602084013e6134e6565b606091505b506000815103613522576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a805461358c90614547565b80601f01602080910402602001604051908101604052809291908181526020018280546135b890614547565b80156136055780601f106135da57610100808354040283529160200191613605565b820191906000526020600020905b8154815290600101906020018083116135e857829003601f168201915b5050505050905090565b606060008203613656576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061376a565b600082905060005b6000821461368857808061367190614f67565b915050600a826136819190615153565b915061365e565b60008167ffffffffffffffff8111156136a4576136a3613eb7565b5b6040519080825280601f01601f1916602001820160405280156136d65781602001600182028036833780820191505090505b5090505b60008514613763576001826136ef9190615184565b9150600a856136fe91906151b8565b603061370a9190614a51565b60f81b8183815181106137205761371f614cb5565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561375c9190615153565b94506136da565b8093505050505b919050565b50505050565b50505050565b613788838383600161378d565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036137f9576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008403613833576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613840600086838761376f565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015613a0a5750613a098773ffffffffffffffffffffffffffffffffffffffff1661340a565b5b15613acf575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613a7f600088848060010195508861342d565b613ab5576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808203613a10578260005414613aca57600080fd5b613b3a565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808203613ad0575b816000819055505050613b506000868387613775565b5050505050565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613be381613bae565b8114613bee57600080fd5b50565b600081359050613c0081613bda565b92915050565b600060208284031215613c1c57613c1b613ba4565b5b6000613c2a84828501613bf1565b91505092915050565b60008115159050919050565b613c4881613c33565b82525050565b6000602082019050613c636000830184613c3f565b92915050565b600061ffff82169050919050565b613c8081613c69565b8114613c8b57600080fd5b50565b600081359050613c9d81613c77565b92915050565b600060208284031215613cb957613cb8613ba4565b5b6000613cc784828501613c8e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d0a578082015181840152602081019050613cef565b60008484015250505050565b6000601f19601f8301169050919050565b6000613d3282613cd0565b613d3c8185613cdb565b9350613d4c818560208601613cec565b613d5581613d16565b840191505092915050565b60006020820190508181036000830152613d7a8184613d27565b905092915050565b6000819050919050565b613d9581613d82565b8114613da057600080fd5b50565b600081359050613db281613d8c565b92915050565b600060208284031215613dce57613dcd613ba4565b5b6000613ddc84828501613da3565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e1082613de5565b9050919050565b613e2081613e05565b82525050565b6000602082019050613e3b6000830184613e17565b92915050565b613e4a81613e05565b8114613e5557600080fd5b50565b600081359050613e6781613e41565b92915050565b60008060408385031215613e8457613e83613ba4565b5b6000613e9285828601613e58565b9250506020613ea385828601613da3565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613eef82613d16565b810181811067ffffffffffffffff82111715613f0e57613f0d613eb7565b5b80604052505050565b6000613f21613b9a565b9050613f2d8282613ee6565b919050565b600067ffffffffffffffff821115613f4d57613f4c613eb7565b5b613f5682613d16565b9050602081019050919050565b82818337600083830152505050565b6000613f85613f8084613f32565b613f17565b905082815260208101848484011115613fa157613fa0613eb2565b5b613fac848285613f63565b509392505050565b600082601f830112613fc957613fc8613ead565b5b8135613fd9848260208601613f72565b91505092915050565b600060208284031215613ff857613ff7613ba4565b5b600082013567ffffffffffffffff81111561401657614015613ba9565b5b61402284828501613fb4565b91505092915050565b61403481613d82565b82525050565b600060208201905061404f600083018461402b565b92915050565b60008060006060848603121561406e5761406d613ba4565b5b600061407c86828701613e58565b935050602061408d86828701613e58565b925050604061409e86828701613da3565b9150509250925092565b600060ff82169050919050565b6140be816140a8565b81146140c957600080fd5b50565b6000813590506140db816140b5565b92915050565b6000602082840312156140f7576140f6613ba4565b5b6000614105848285016140cc565b91505092915050565b6000806040838503121561412557614124613ba4565b5b600061413385828601613c8e565b925050602061414485828601613e58565b9150509250929050565b60006020828403121561416457614163613ba4565b5b600061417284828501613e58565b91505092915050565b600080fd5b600080fd5b60008083601f84011261419b5761419a613ead565b5b8235905067ffffffffffffffff8111156141b8576141b761417b565b5b6020830191508360208202830111156141d4576141d3614180565b5b9250929050565b600080602083850312156141f2576141f1613ba4565b5b600083013567ffffffffffffffff8111156142105761420f613ba9565b5b61421c85828601614185565b92509250509250929050565b614231816140a8565b82525050565b600060208201905061424c6000830184614228565b92915050565b61425b81613c33565b811461426657600080fd5b50565b60008135905061427881614252565b92915050565b6000806040838503121561429557614294613ba4565b5b60006142a385828601613e58565b92505060206142b485828601614269565b9150509250929050565b600067ffffffffffffffff8211156142d9576142d8613eb7565b5b6142e282613d16565b9050602081019050919050565b60006143026142fd846142be565b613f17565b90508281526020810184848401111561431e5761431d613eb2565b5b614329848285613f63565b509392505050565b600082601f83011261434657614345613ead565b5b81356143568482602086016142ef565b91505092915050565b6000806000806080858703121561437957614378613ba4565b5b600061438787828801613e58565b945050602061439887828801613e58565b93505060406143a987828801613da3565b925050606085013567ffffffffffffffff8111156143ca576143c9613ba9565b5b6143d687828801614331565b91505092959194509250565b6000806000604084860312156143fb576143fa613ba4565b5b6000614409868287016140cc565b935050602084013567ffffffffffffffff81111561442a57614429613ba9565b5b61443686828701614185565b92509250509250925092565b61444b81613c69565b82525050565b60006020820190506144666000830184614442565b92915050565b6000806040838503121561448357614482613ba4565b5b600061449185828601613e58565b92505060206144a285828601613e58565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006144e2602083613cdb565b91506144ed826144ac565b602082019050919050565b60006020820190508181036000830152614511816144d5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061455f57607f821691505b60208210810361457257614571614518565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026145da7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261459d565b6145e4868361459d565b95508019841693508086168417925050509392505050565b6000819050919050565b600061462161461c61461784613d82565b6145fc565b613d82565b9050919050565b6000819050919050565b61463b83614606565b61464f61464782614628565b8484546145aa565b825550505050565b600090565b614664614657565b61466f818484614632565b505050565b5b818110156146935761468860008261465c565b600181019050614675565b5050565b601f8211156146d8576146a981614578565b6146b28461458d565b810160208510156146c1578190505b6146d56146cd8561458d565b830182614674565b50505b505050565b600082821c905092915050565b60006146fb600019846008026146dd565b1980831691505092915050565b600061471483836146ea565b9150826002028217905092915050565b61472d82613cd0565b67ffffffffffffffff81111561474657614745613eb7565b5b6147508254614547565b61475b828285614697565b600060209050601f83116001811461478e576000841561477c578287015190505b6147868582614708565b8655506147ee565b601f19841661479c86614578565b60005b828110156147c45784890151825560018201915060208501945060208101905061479f565b868310156147e157848901516147dd601f8916826146ea565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061483082613c69565b915061483b83613c69565b9250828201905061ffff811115614855576148546147f6565b5b92915050565b7f45786365646573206d617820737570706c792e00000000000000000000000000600082015250565b6000614891601383613cdb565b915061489c8261485b565b602082019050919050565b600060208201905081810360008301526148c081614884565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006148fd601f83613cdb565b9150614908826148c7565b602082019050919050565b6000602082019050818103600083015261492c816148f0565b9050919050565b600081905092915050565b50565b600061494e600083614933565b91506149598261493e565b600082019050919050565b600061496f82614941565b9150819050919050565b7f57686974656c697374206d696e74696e67206973206f76657221000000000000600082015250565b60006149af601a83613cdb565b91506149ba82614979565b602082019050919050565b600060208201905081810360008301526149de816149a2565b9050919050565b7f596f7520617265206e6f742077686974656c6973746564000000000000000000600082015250565b6000614a1b601783613cdb565b9150614a26826149e5565b602082019050919050565b60006020820190508181036000830152614a4a81614a0e565b9050919050565b6000614a5c82613d82565b9150614a6783613d82565b9250828201905080821115614a7f57614a7e6147f6565b5b92915050565b7f4e6f206d6f726500000000000000000000000000000000000000000000000000600082015250565b6000614abb600783613cdb565b9150614ac682614a85565b602082019050919050565b60006020820190508181036000830152614aea81614aae565b9050919050565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b6000614b27601c83613cdb565b9150614b3282614af1565b602082019050919050565b60006020820190508181036000830152614b5681614b1a565b9050919050565b6000614b6882613d82565b9150614b7383613d82565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614bac57614bab6147f6565b5b828202905092915050565b7f496e636f7272656374204554482076616c75652073656e740000000000000000600082015250565b6000614bed601883613cdb565b9150614bf882614bb7565b602082019050919050565b60006020820190508181036000830152614c1c81614be0565b9050919050565b7f4d6178206d696e747320706572207472616e73616374696f6e2065786365656460008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c7f602283613cdb565b9150614c8a82614c23565b604082019050919050565b60006020820190508181036000830152614cae81614c72565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614cef826140a8565b915060ff8203614d0257614d016147f6565b5b600182019050919050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b6000614d43601e83613cdb565b9150614d4e82614d0d565b602082019050919050565b60006020820190508181036000830152614d7281614d36565b9050919050565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b6000614daf601783613cdb565b9150614dba82614d79565b602082019050919050565b60006020820190508181036000830152614dde81614da2565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614e41602f83613cdb565b9150614e4c82614de5565b604082019050919050565b60006020820190508181036000830152614e7081614e34565b9050919050565b600081905092915050565b6000614e8d82613cd0565b614e978185614e77565b9350614ea7818560208601613cec565b80840191505092915050565b60008154614ec081614547565b614eca8186614e77565b94506001821660008114614ee55760018114614efa57614f2d565b60ff1983168652811515820286019350614f2d565b614f0385614578565b60005b83811015614f2557815481890152600182019150602081019050614f06565b838801955050505b50505092915050565b6000614f428286614e82565b9150614f4e8285614e82565b9150614f5a8284614eb3565b9150819050949350505050565b6000614f7282613d82565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614fa457614fa36147f6565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061500b602683613cdb565b915061501682614faf565b604082019050919050565b6000602082019050818103600083015261503a81614ffe565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061506882615041565b615072818561504c565b9350615082818560208601613cec565b61508b81613d16565b840191505092915050565b60006080820190506150ab6000830187613e17565b6150b86020830186613e17565b6150c5604083018561402b565b81810360608301526150d7818461505d565b905095945050505050565b6000815190506150f181613bda565b92915050565b60006020828403121561510d5761510c613ba4565b5b600061511b848285016150e2565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061515e82613d82565b915061516983613d82565b92508261517957615178615124565b5b828204905092915050565b600061518f82613d82565b915061519a83613d82565b92508282039050818111156151b2576151b16147f6565b5b92915050565b60006151c382613d82565b91506151ce83613d82565b9250826151de576151dd615124565b5b82820690509291505056fea26469706673582212207496a1daea9c6e6428d87a7385b954e56270c0fa7a0331d1f906eab27ef05aae64736f6c63430008100033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000755464f4352455700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000755464f63726577000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d61346436394b385a4247684a385074636a594b325a63466b59746351626562554b734a4b33586e637737537a2f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004968747470733a2f2f697066732e737765622e72752f697066732f516d54703679396b61384e5835666f566e315a63626d434b6b58376d77326b64356d574535784864613241506e472f0000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102ae5760003560e01c8063715018a611610175578063a22cb465116100dc578063cffb6e2011610095578063e985e9c51161006f578063e985e9c514610a08578063eef440af14610a45578063f2fde38b14610a70578063f8bf517214610a99576102ae565b8063cffb6e201461098b578063d1d19213146109b4578063d5abeb01146109dd576102ae565b8063a22cb4651461087d578063a475b5dd146108a6578063aa062290146108d1578063b88d4fde146108fa578063bc951b9114610923578063c87b56dd1461094e576102ae565b80638f65fe0a1161012e5780638f65fe0a1461078c5780639257e044146107b557806394354fd0146107e057806395d89b411461080b578063982d669e14610836578063a0712d6814610861576102ae565b8063715018a6146106b15780637ec4a659146106c85780637f6e9093146106f1578063868ff4a21461071c5780638da5cb5b146107385780638e07484c14610763576102ae565b806328b60d151161021957806342842e0e116101d257806342842e0e1461059157806344a0d68a146105ba5780634d9c1848146105e35780635c975abb1461060c5780636352211e1461063757806370a0823114610674576102ae565b806328b60d15146104bd5780632f6f98e1146104e657806337a66d851461050f5780633af32abf146105265780633bd64968146105635780633ccfd60b1461057a576102ae565b80630a00ae831161026b5780630a00ae83146103c15780631067fcc7146103ea57806313faede61461041357806318160ddd1461043e578063193ad7b41461046957806323b872dd14610494576102ae565b806301ffc9a7146102b357806306421c2f146102f057806306fdde0314610319578063081812fc14610344578063093cfa6314610381578063095ea7b314610398575b600080fd5b3480156102bf57600080fd5b506102da60048036038101906102d59190613c06565b610ac4565b6040516102e79190613c4e565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190613ca3565b610ba6565b005b34801561032557600080fd5b5061032e610c42565b60405161033b9190613d60565b60405180910390f35b34801561035057600080fd5b5061036b60048036038101906103669190613db8565b610cd4565b6040516103789190613e26565b60405180910390f35b34801561038d57600080fd5b50610396610d50565b005b3480156103a457600080fd5b506103bf60048036038101906103ba9190613e6d565b610df8565b005b3480156103cd57600080fd5b506103e860048036038101906103e39190613db8565b610f02565b005b3480156103f657600080fd5b50610411600480360381019061040c9190613fe2565b610f88565b005b34801561041f57600080fd5b50610428611017565b604051610435919061403a565b60405180910390f35b34801561044a57600080fd5b5061045361101d565b604051610460919061403a565b60405180910390f35b34801561047557600080fd5b5061047e611034565b60405161048b919061403a565b60405180910390f35b3480156104a057600080fd5b506104bb60048036038101906104b69190614055565b61103a565b005b3480156104c957600080fd5b506104e460048036038101906104df91906140e1565b61104a565b005b3480156104f257600080fd5b5061050d6004803603810190610508919061410e565b6110e4565b005b34801561051b57600080fd5b506105246111f1565b005b34801561053257600080fd5b5061054d6004803603810190610548919061414e565b6112b4565b60405161055a9190613c4e565b60405180910390f35b34801561056f57600080fd5b506105786112d4565b005b34801561058657600080fd5b5061058f61137c565b005b34801561059d57600080fd5b506105b860048036038101906105b39190614055565b6114cd565b005b3480156105c657600080fd5b506105e160048036038101906105dc9190613db8565b6114ed565b005b3480156105ef57600080fd5b5061060a600480360381019061060591906140e1565b611573565b005b34801561061857600080fd5b50610621611611565b60405161062e9190613c4e565b60405180910390f35b34801561064357600080fd5b5061065e60048036038101906106599190613db8565b611624565b60405161066b9190613e26565b60405180910390f35b34801561068057600080fd5b5061069b6004803603810190610696919061414e565b61163a565b6040516106a8919061403a565b60405180910390f35b3480156106bd57600080fd5b506106c6611709565b005b3480156106d457600080fd5b506106ef60048036038101906106ea9190613fe2565b611791565b005b3480156106fd57600080fd5b50610706611820565b6040516107139190613c4e565b60405180910390f35b61073660048036038101906107319190613db8565b611833565b005b34801561074457600080fd5b5061074d611bab565b60405161075a9190613e26565b60405180910390f35b34801561076f57600080fd5b5061078a600480360381019061078591906141db565b611bd5565b005b34801561079857600080fd5b506107b360048036038101906107ae91906141db565b611cfc565b005b3480156107c157600080fd5b506107ca611e23565b6040516107d7919061403a565b60405180910390f35b3480156107ec57600080fd5b506107f5611e29565b6040516108029190614237565b60405180910390f35b34801561081757600080fd5b50610820611e3c565b60405161082d9190613d60565b60405180910390f35b34801561084257600080fd5b5061084b611ece565b604051610858919061403a565b60405180910390f35b61087b60048036038101906108769190613db8565b611ed4565b005b34801561088957600080fd5b506108a4600480360381019061089f919061427e565b61222e565b005b3480156108b257600080fd5b506108bb6123a5565b6040516108c89190613c4e565b60405180910390f35b3480156108dd57600080fd5b506108f860048036038101906108f391906140e1565b6123b8565b005b34801561090657600080fd5b50610921600480360381019061091c919061435f565b612452565b005b34801561092f57600080fd5b506109386124ce565b6040516109459190614237565b60405180910390f35b34801561095a57600080fd5b5061097560048036038101906109709190613db8565b6124e1565b6040516109829190613d60565b60405180910390f35b34801561099757600080fd5b506109b260048036038101906109ad91906143e2565b612639565b005b3480156109c057600080fd5b506109db60048036038101906109d69190613db8565b6127a2565b005b3480156109e957600080fd5b506109f261282c565b6040516109ff9190614451565b60405180910390f35b348015610a1457600080fd5b50610a2f6004803603810190610a2a919061446c565b612840565b604051610a3c9190613c4e565b60405180910390f35b348015610a5157600080fd5b50610a5a6128d4565b604051610a679190613d60565b60405180910390f35b348015610a7c57600080fd5b50610a976004803603810190610a92919061414e565b612962565b005b348015610aa557600080fd5b50610aae612a59565b604051610abb9190614237565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b8f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b9f5750610b9e82612a6c565b5b9050919050565b610bae612ad6565b73ffffffffffffffffffffffffffffffffffffffff16610bcc611bab565b73ffffffffffffffffffffffffffffffffffffffff1614610c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c19906144f8565b60405180910390fd5b80600f60006101000a81548161ffff021916908361ffff16021790555050565b606060028054610c5190614547565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7d90614547565b8015610cca5780601f10610c9f57610100808354040283529160200191610cca565b820191906000526020600020905b815481529060010190602001808311610cad57829003601f168201915b5050505050905090565b6000610cdf82612ade565b610d15576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610d58612ad6565b73ffffffffffffffffffffffffffffffffffffffff16610d76611bab565b73ffffffffffffffffffffffffffffffffffffffff1614610dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc3906144f8565b60405180910390fd5b601260009054906101000a900460ff1615601260006101000a81548160ff021916908315150217905550565b6000610e0382611624565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e6a576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e89612ad6565b73ffffffffffffffffffffffffffffffffffffffff1614158015610ebb5750610eb981610eb4612ad6565b612840565b155b15610ef2576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610efd838383612b2c565b505050565b610f0a612ad6565b73ffffffffffffffffffffffffffffffffffffffff16610f28611bab565b73ffffffffffffffffffffffffffffffffffffffff1614610f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f75906144f8565b60405180910390fd5b8060118190555050565b610f90612ad6565b73ffffffffffffffffffffffffffffffffffffffff16610fae611bab565b73ffffffffffffffffffffffffffffffffffffffff1614611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffb906144f8565b60405180910390fd5b80600c90816110139190614724565b5050565b600d5481565b6000611027612bde565b6001546000540303905090565b60105481565b611045838383612be3565b505050565b611052612ad6565b73ffffffffffffffffffffffffffffffffffffffff16611070611bab565b73ffffffffffffffffffffffffffffffffffffffff16146110c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bd906144f8565b60405180910390fd5b80600f60036101000a81548160ff021916908360ff16021790555050565b6110ec612ad6565b73ffffffffffffffffffffffffffffffffffffffff1661110a611bab565b73ffffffffffffffffffffffffffffffffffffffff1614611160576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611157906144f8565b60405180910390fd5b600061116a61101d565b9050600f60009054906101000a900461ffff1661ffff16838261118d9190614825565b61ffff1611156111d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c9906148a7565b60405180910390fd5b6111e0828461ffff16613097565b600092506000915060009050505050565b6111f9612ad6565b73ffffffffffffffffffffffffffffffffffffffff16611217611bab565b73ffffffffffffffffffffffffffffffffffffffff161461126d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611264906144f8565b60405180910390fd5b601260019054906101000a900460ff1615601260016101000a81548160ff0219169083151502179055506001601260006101000a81548160ff021916908315150217905550565b60136020528060005260406000206000915054906101000a900460ff1681565b6112dc612ad6565b73ffffffffffffffffffffffffffffffffffffffff166112fa611bab565b73ffffffffffffffffffffffffffffffffffffffff1614611350576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611347906144f8565b60405180910390fd5b601260029054906101000a900460ff1615601260026101000a81548160ff021916908315150217905550565b611384612ad6565b73ffffffffffffffffffffffffffffffffffffffff166113a2611bab565b73ffffffffffffffffffffffffffffffffffffffff16146113f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ef906144f8565b60405180910390fd5b60026009540361143d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143490614913565b60405180910390fd5b6002600981905550600061144f611bab565b73ffffffffffffffffffffffffffffffffffffffff164760405161147290614964565b60006040518083038185875af1925050503d80600081146114af576040519150601f19603f3d011682016040523d82523d6000602084013e6114b4565b606091505b50509050806114c257600080fd5b506001600981905550565b6114e883838360405180602001604052806000815250612452565b505050565b6114f5612ad6565b73ffffffffffffffffffffffffffffffffffffffff16611513611bab565b73ffffffffffffffffffffffffffffffffffffffff1614611569576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611560906144f8565b60405180910390fd5b80600d8190555050565b61157b612ad6565b73ffffffffffffffffffffffffffffffffffffffff16611599611bab565b73ffffffffffffffffffffffffffffffffffffffff16146115ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e6906144f8565b60405180910390fd5b80600f60046101000a81548160ff021916908360ff1602179055506000905050565b601260019054906101000a900460ff1681565b600061162f826130b5565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116a1576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611711612ad6565b73ffffffffffffffffffffffffffffffffffffffff1661172f611bab565b73ffffffffffffffffffffffffffffffffffffffff1614611785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177c906144f8565b60405180910390fd5b61178f6000613344565b565b611799612ad6565b73ffffffffffffffffffffffffffffffffffffffff166117b7611bab565b73ffffffffffffffffffffffffffffffffffffffff161461180d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611804906144f8565b60405180910390fd5b80600a908161181c9190614724565b5050565b601260009054906101000a900460ff1681565b601260009054906101000a900460ff1615611883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187a906149c5565b60405180910390fd5b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661190f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190690614a31565b60405180910390fd5b6001600f60009054906101000a900461ffff1661192c9190614825565b61ffff168161193961101d565b6119439190614a51565b10611983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197a90614ad1565b60405180910390fd5b600f60039054906101000a900460ff1660ff16816119a03361163a565b6119aa9190614a51565b11156119eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e290614b3d565b60405180910390fd5b601154816010546119fc9190614a51565b1115611a57573481600e54611a119190614b5d565b1115611a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4990614c03565b60405180910390fd5b611b9e565b600f60049054906101000a900460ff1660ff1681611a743361163a565b611a7e9190614a51565b1115611b2e573481600e54611a939190614b5d565b1115611ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acb90614c03565b60405180910390fd5b600f60029054906101000a900460ff1660ff16811115611b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2090614c95565b60405180910390fd5b611b9d565b600f60049054906101000a900460ff1660ff16811115611b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7a90614c95565b60405180910390fd5b8060106000828254611b959190614a51565b925050819055505b5b611ba83382613097565b50565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611bdd612ad6565b73ffffffffffffffffffffffffffffffffffffffff16611bfb611bab565b73ffffffffffffffffffffffffffffffffffffffff1614611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c48906144f8565b60405180910390fd5b60005b828290508160ff161015611cf75760016013600085858560ff16818110611c7e57611c7d614cb5565b5b9050602002016020810190611c93919061414e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611cef90614ce4565b915050611c54565b505050565b611d04612ad6565b73ffffffffffffffffffffffffffffffffffffffff16611d22611bab565b73ffffffffffffffffffffffffffffffffffffffff1614611d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6f906144f8565b60405180910390fd5b60005b828290508160ff161015611e1e5760006013600085858560ff16818110611da557611da4614cb5565b5b9050602002016020810190611dba919061414e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611e1690614ce4565b915050611d7b565b505050565b600e5481565b600f60029054906101000a900460ff1681565b606060038054611e4b90614547565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7790614547565b8015611ec45780601f10611e9957610100808354040283529160200191611ec4565b820191906000526020600020905b815481529060010190602001808311611ea757829003601f168201915b5050505050905090565b60115481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3990614d59565b60405180910390fd5b601260019054906101000a900460ff1615611f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8990614dc5565b60405180910390fd5b6001600f60009054906101000a900461ffff16611faf9190614825565b61ffff1681611fbc61101d565b611fc69190614a51565b10612006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffd90614ad1565b60405180910390fd5b600f60039054906101000a900460ff1660ff16816120233361163a565b61202d9190614a51565b111561206e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206590614b3d565b60405180910390fd5b6011548160105461207f9190614a51565b11156120da573481600d546120949190614b5d565b11156120d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cc90614c03565b60405180910390fd5b612221565b600f60049054906101000a900460ff1660ff16816120f73361163a565b6121019190614a51565b11156121b1573481600d546121169190614b5d565b1115612157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214e90614c03565b60405180910390fd5b600f60029054906101000a900460ff1660ff168111156121ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a390614c95565b60405180910390fd5b612220565b600f60049054906101000a900460ff1660ff16811115612206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fd90614c95565b60405180910390fd5b80601060008282546122189190614a51565b925050819055505b5b61222b3382613097565b50565b612236612ad6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361229a576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006122a7612ad6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612354612ad6565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123999190613c4e565b60405180910390a35050565b601260029054906101000a900460ff1681565b6123c0612ad6565b73ffffffffffffffffffffffffffffffffffffffff166123de611bab565b73ffffffffffffffffffffffffffffffffffffffff1614612434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242b906144f8565b60405180910390fd5b80600f60026101000a81548160ff021916908360ff16021790555050565b61245d848484612be3565b61247c8373ffffffffffffffffffffffffffffffffffffffff1661340a565b8015612491575061248f8484848461342d565b155b156124c8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600f60039054906101000a900460ff1681565b60606124ec82612ade565b61252b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252290614e57565b60405180910390fd5b60001515601260029054906101000a900460ff161515036125d857600c805461255390614547565b80601f016020809104026020016040519081016040528092919081815260200182805461257f90614547565b80156125cc5780601f106125a1576101008083540402835291602001916125cc565b820191906000526020600020905b8154815290600101906020018083116125af57829003601f168201915b50505050509050612634565b60006125e261357d565b905060008151116126025760405180602001604052806000815250612630565b8061260c8461360f565b600b60405160200161262093929190614f36565b6040516020818303038152906040525b9150505b919050565b612641612ad6565b73ffffffffffffffffffffffffffffffffffffffff1661265f611bab565b73ffffffffffffffffffffffffffffffffffffffff16146126b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ac906144f8565b60405180910390fd5b60006126bf61101d565b90506000838390508560ff166126d59190614b5d565b9050600f60009054906101000a900461ffff1661ffff16818361ffff166126fc9190614a51565b111561273d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612734906148a7565b60405180910390fd5b60005b848490508110156127925761277f85858381811061276157612760614cb5565b5b9050602002016020810190612776919061414e565b8760ff16613097565b808061278a90614f67565b915050612740565b5060009450600091505050505050565b6127aa612ad6565b73ffffffffffffffffffffffffffffffffffffffff166127c8611bab565b73ffffffffffffffffffffffffffffffffffffffff161461281e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612815906144f8565b60405180910390fd5b80600e819055506000905050565b600f60009054906101000a900461ffff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600c80546128e190614547565b80601f016020809104026020016040519081016040528092919081815260200182805461290d90614547565b801561295a5780601f1061292f5761010080835404028352916020019161295a565b820191906000526020600020905b81548152906001019060200180831161293d57829003601f168201915b505050505081565b61296a612ad6565b73ffffffffffffffffffffffffffffffffffffffff16612988611bab565b73ffffffffffffffffffffffffffffffffffffffff16146129de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d5906144f8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4490615021565b60405180910390fd5b612a5681613344565b50565b600f60049054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600081612ae9612bde565b11158015612af8575060005482105b8015612b25575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b6000612bee826130b5565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612c59576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16612c7a612ad6565b73ffffffffffffffffffffffffffffffffffffffff161480612ca95750612ca885612ca3612ad6565b612840565b5b80612cee5750612cb7612ad6565b73ffffffffffffffffffffffffffffffffffffffff16612cd684610cd4565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612d27576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612d8d576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612d9a858585600161376f565b612da660008487612b2c565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361302557600054821461302457878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46130908585856001613775565b5050505050565b6130b182826040518060200160405280600081525061377b565b5050565b6130bd613b57565b6000829050806130cb612bde565b111580156130da575060005481105b1561330d576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161330b57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146131ef57809250505061333f565b5b60011561330a57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461330557809250505061333f565b6131f0565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613453612ad6565b8786866040518563ffffffff1660e01b81526004016134759493929190615096565b6020604051808303816000875af19250505080156134b157506040513d601f19601f820116820180604052508101906134ae91906150f7565b60015b61352a573d80600081146134e1576040519150601f19603f3d011682016040523d82523d6000602084013e6134e6565b606091505b506000815103613522576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a805461358c90614547565b80601f01602080910402602001604051908101604052809291908181526020018280546135b890614547565b80156136055780601f106135da57610100808354040283529160200191613605565b820191906000526020600020905b8154815290600101906020018083116135e857829003601f168201915b5050505050905090565b606060008203613656576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061376a565b600082905060005b6000821461368857808061367190614f67565b915050600a826136819190615153565b915061365e565b60008167ffffffffffffffff8111156136a4576136a3613eb7565b5b6040519080825280601f01601f1916602001820160405280156136d65781602001600182028036833780820191505090505b5090505b60008514613763576001826136ef9190615184565b9150600a856136fe91906151b8565b603061370a9190614a51565b60f81b8183815181106137205761371f614cb5565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561375c9190615153565b94506136da565b8093505050505b919050565b50505050565b50505050565b613788838383600161378d565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036137f9576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008403613833576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613840600086838761376f565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015613a0a5750613a098773ffffffffffffffffffffffffffffffffffffffff1661340a565b5b15613acf575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613a7f600088848060010195508861342d565b613ab5576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808203613a10578260005414613aca57600080fd5b613b3a565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808203613ad0575b816000819055505050613b506000868387613775565b5050505050565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613be381613bae565b8114613bee57600080fd5b50565b600081359050613c0081613bda565b92915050565b600060208284031215613c1c57613c1b613ba4565b5b6000613c2a84828501613bf1565b91505092915050565b60008115159050919050565b613c4881613c33565b82525050565b6000602082019050613c636000830184613c3f565b92915050565b600061ffff82169050919050565b613c8081613c69565b8114613c8b57600080fd5b50565b600081359050613c9d81613c77565b92915050565b600060208284031215613cb957613cb8613ba4565b5b6000613cc784828501613c8e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d0a578082015181840152602081019050613cef565b60008484015250505050565b6000601f19601f8301169050919050565b6000613d3282613cd0565b613d3c8185613cdb565b9350613d4c818560208601613cec565b613d5581613d16565b840191505092915050565b60006020820190508181036000830152613d7a8184613d27565b905092915050565b6000819050919050565b613d9581613d82565b8114613da057600080fd5b50565b600081359050613db281613d8c565b92915050565b600060208284031215613dce57613dcd613ba4565b5b6000613ddc84828501613da3565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e1082613de5565b9050919050565b613e2081613e05565b82525050565b6000602082019050613e3b6000830184613e17565b92915050565b613e4a81613e05565b8114613e5557600080fd5b50565b600081359050613e6781613e41565b92915050565b60008060408385031215613e8457613e83613ba4565b5b6000613e9285828601613e58565b9250506020613ea385828601613da3565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613eef82613d16565b810181811067ffffffffffffffff82111715613f0e57613f0d613eb7565b5b80604052505050565b6000613f21613b9a565b9050613f2d8282613ee6565b919050565b600067ffffffffffffffff821115613f4d57613f4c613eb7565b5b613f5682613d16565b9050602081019050919050565b82818337600083830152505050565b6000613f85613f8084613f32565b613f17565b905082815260208101848484011115613fa157613fa0613eb2565b5b613fac848285613f63565b509392505050565b600082601f830112613fc957613fc8613ead565b5b8135613fd9848260208601613f72565b91505092915050565b600060208284031215613ff857613ff7613ba4565b5b600082013567ffffffffffffffff81111561401657614015613ba9565b5b61402284828501613fb4565b91505092915050565b61403481613d82565b82525050565b600060208201905061404f600083018461402b565b92915050565b60008060006060848603121561406e5761406d613ba4565b5b600061407c86828701613e58565b935050602061408d86828701613e58565b925050604061409e86828701613da3565b9150509250925092565b600060ff82169050919050565b6140be816140a8565b81146140c957600080fd5b50565b6000813590506140db816140b5565b92915050565b6000602082840312156140f7576140f6613ba4565b5b6000614105848285016140cc565b91505092915050565b6000806040838503121561412557614124613ba4565b5b600061413385828601613c8e565b925050602061414485828601613e58565b9150509250929050565b60006020828403121561416457614163613ba4565b5b600061417284828501613e58565b91505092915050565b600080fd5b600080fd5b60008083601f84011261419b5761419a613ead565b5b8235905067ffffffffffffffff8111156141b8576141b761417b565b5b6020830191508360208202830111156141d4576141d3614180565b5b9250929050565b600080602083850312156141f2576141f1613ba4565b5b600083013567ffffffffffffffff8111156142105761420f613ba9565b5b61421c85828601614185565b92509250509250929050565b614231816140a8565b82525050565b600060208201905061424c6000830184614228565b92915050565b61425b81613c33565b811461426657600080fd5b50565b60008135905061427881614252565b92915050565b6000806040838503121561429557614294613ba4565b5b60006142a385828601613e58565b92505060206142b485828601614269565b9150509250929050565b600067ffffffffffffffff8211156142d9576142d8613eb7565b5b6142e282613d16565b9050602081019050919050565b60006143026142fd846142be565b613f17565b90508281526020810184848401111561431e5761431d613eb2565b5b614329848285613f63565b509392505050565b600082601f83011261434657614345613ead565b5b81356143568482602086016142ef565b91505092915050565b6000806000806080858703121561437957614378613ba4565b5b600061438787828801613e58565b945050602061439887828801613e58565b93505060406143a987828801613da3565b925050606085013567ffffffffffffffff8111156143ca576143c9613ba9565b5b6143d687828801614331565b91505092959194509250565b6000806000604084860312156143fb576143fa613ba4565b5b6000614409868287016140cc565b935050602084013567ffffffffffffffff81111561442a57614429613ba9565b5b61443686828701614185565b92509250509250925092565b61444b81613c69565b82525050565b60006020820190506144666000830184614442565b92915050565b6000806040838503121561448357614482613ba4565b5b600061449185828601613e58565b92505060206144a285828601613e58565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006144e2602083613cdb565b91506144ed826144ac565b602082019050919050565b60006020820190508181036000830152614511816144d5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061455f57607f821691505b60208210810361457257614571614518565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026145da7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261459d565b6145e4868361459d565b95508019841693508086168417925050509392505050565b6000819050919050565b600061462161461c61461784613d82565b6145fc565b613d82565b9050919050565b6000819050919050565b61463b83614606565b61464f61464782614628565b8484546145aa565b825550505050565b600090565b614664614657565b61466f818484614632565b505050565b5b818110156146935761468860008261465c565b600181019050614675565b5050565b601f8211156146d8576146a981614578565b6146b28461458d565b810160208510156146c1578190505b6146d56146cd8561458d565b830182614674565b50505b505050565b600082821c905092915050565b60006146fb600019846008026146dd565b1980831691505092915050565b600061471483836146ea565b9150826002028217905092915050565b61472d82613cd0565b67ffffffffffffffff81111561474657614745613eb7565b5b6147508254614547565b61475b828285614697565b600060209050601f83116001811461478e576000841561477c578287015190505b6147868582614708565b8655506147ee565b601f19841661479c86614578565b60005b828110156147c45784890151825560018201915060208501945060208101905061479f565b868310156147e157848901516147dd601f8916826146ea565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061483082613c69565b915061483b83613c69565b9250828201905061ffff811115614855576148546147f6565b5b92915050565b7f45786365646573206d617820737570706c792e00000000000000000000000000600082015250565b6000614891601383613cdb565b915061489c8261485b565b602082019050919050565b600060208201905081810360008301526148c081614884565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006148fd601f83613cdb565b9150614908826148c7565b602082019050919050565b6000602082019050818103600083015261492c816148f0565b9050919050565b600081905092915050565b50565b600061494e600083614933565b91506149598261493e565b600082019050919050565b600061496f82614941565b9150819050919050565b7f57686974656c697374206d696e74696e67206973206f76657221000000000000600082015250565b60006149af601a83613cdb565b91506149ba82614979565b602082019050919050565b600060208201905081810360008301526149de816149a2565b9050919050565b7f596f7520617265206e6f742077686974656c6973746564000000000000000000600082015250565b6000614a1b601783613cdb565b9150614a26826149e5565b602082019050919050565b60006020820190508181036000830152614a4a81614a0e565b9050919050565b6000614a5c82613d82565b9150614a6783613d82565b9250828201905080821115614a7f57614a7e6147f6565b5b92915050565b7f4e6f206d6f726500000000000000000000000000000000000000000000000000600082015250565b6000614abb600783613cdb565b9150614ac682614a85565b602082019050919050565b60006020820190508181036000830152614aea81614aae565b9050919050565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b6000614b27601c83613cdb565b9150614b3282614af1565b602082019050919050565b60006020820190508181036000830152614b5681614b1a565b9050919050565b6000614b6882613d82565b9150614b7383613d82565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614bac57614bab6147f6565b5b828202905092915050565b7f496e636f7272656374204554482076616c75652073656e740000000000000000600082015250565b6000614bed601883613cdb565b9150614bf882614bb7565b602082019050919050565b60006020820190508181036000830152614c1c81614be0565b9050919050565b7f4d6178206d696e747320706572207472616e73616374696f6e2065786365656460008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c7f602283613cdb565b9150614c8a82614c23565b604082019050919050565b60006020820190508181036000830152614cae81614c72565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614cef826140a8565b915060ff8203614d0257614d016147f6565b5b600182019050919050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b6000614d43601e83613cdb565b9150614d4e82614d0d565b602082019050919050565b60006020820190508181036000830152614d7281614d36565b9050919050565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b6000614daf601783613cdb565b9150614dba82614d79565b602082019050919050565b60006020820190508181036000830152614dde81614da2565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614e41602f83613cdb565b9150614e4c82614de5565b604082019050919050565b60006020820190508181036000830152614e7081614e34565b9050919050565b600081905092915050565b6000614e8d82613cd0565b614e978185614e77565b9350614ea7818560208601613cec565b80840191505092915050565b60008154614ec081614547565b614eca8186614e77565b94506001821660008114614ee55760018114614efa57614f2d565b60ff1983168652811515820286019350614f2d565b614f0385614578565b60005b83811015614f2557815481890152600182019150602081019050614f06565b838801955050505b50505092915050565b6000614f428286614e82565b9150614f4e8285614e82565b9150614f5a8284614eb3565b9150819050949350505050565b6000614f7282613d82565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614fa457614fa36147f6565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061500b602683613cdb565b915061501682614faf565b604082019050919050565b6000602082019050818103600083015261503a81614ffe565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061506882615041565b615072818561504c565b9350615082818560208601613cec565b61508b81613d16565b840191505092915050565b60006080820190506150ab6000830187613e17565b6150b86020830186613e17565b6150c5604083018561402b565b81810360608301526150d7818461505d565b905095945050505050565b6000815190506150f181613bda565b92915050565b60006020828403121561510d5761510c613ba4565b5b600061511b848285016150e2565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061515e82613d82565b915061516983613d82565b92508261517957615178615124565b5b828204905092915050565b600061518f82613d82565b915061519a83613d82565b92508282039050818111156151b2576151b16147f6565b5b92915050565b60006151c382613d82565b91506151ce83613d82565b9250826151de576151dd615124565b5b82820690509291505056fea26469706673582212207496a1daea9c6e6428d87a7385b954e56270c0fa7a0331d1f906eab27ef05aae64736f6c63430008100033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000755464f4352455700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000755464f63726577000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d61346436394b385a4247684a385074636a594b325a63466b59746351626562554b734a4b33586e637737537a2f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004968747470733a2f2f697066732e737765622e72752f697066732f516d54703679396b61384e5835666f566e315a63626d434b6b58376d77326b64356d574535784864613241506e472f0000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _tokenName (string): UFOCREW
Arg [1] : _tokenSymbol (string): UFOcrew
Arg [2] : _hiddenMetadataUri (string): ipfs://Qma4d69K8ZBGhJ8PtcjYK2ZcFkYtcQbebUKsJK3Xncw7Sz/hidden.json
Arg [3] : _uriPrefix (string): https://ipfs.sweb.ru/ipfs/QmTp6y9ka8NX5foVn1ZcbmCKkX7mw2kd5mWE5xHda2APnG/
-----Encoded View---------------
16 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [5] : 55464f4352455700000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [7] : 55464f6372657700000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000041
Arg [9] : 697066733a2f2f516d61346436394b385a4247684a385074636a594b325a6346
Arg [10] : 6b59746351626562554b734a4b33586e637737537a2f68696464656e2e6a736f
Arg [11] : 6e00000000000000000000000000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000049
Arg [13] : 68747470733a2f2f697066732e737765622e72752f697066732f516d54703679
Arg [14] : 396b61384e5835666f566e315a63626d434b6b58376d77326b64356d57453578
Arg [15] : 4864613241506e472f0000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
60113:7085:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39560:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;63167:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42673:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44176:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;63776:75;;;;;;;;;;;;;:::i;:::-;;43739:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;65976:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;65870:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60314:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38809:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60575:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45041:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;66483:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;62352:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;66115:91;;;;;;;;;;;;;:::i;:::-;;60819:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;66294:70;;;;;;;;;;;;;:::i;:::-;;66615:475;;;;;;;;;;;;;:::i;:::-;;45282:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;66212:76;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;63971:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60756:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42481:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39929:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58382:103;;;;;;;;;;;;;:::i;:::-;;65764:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60724:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;64537:1221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57730:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;64117:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;64323:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60352:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60443:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42842:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60619:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61206:1140;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44452:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60786:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;66370:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45538:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60483:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;63279:490;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62684:472;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;63855:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60407:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44810:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60274:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58640:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60527:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39560:305;39662:4;39714:25;39699:40;;;:11;:40;;;;:105;;;;39771:33;39756:48;;;:11;:48;;;;39699:105;:158;;;;39821:36;39845:11;39821:23;:36::i;:::-;39699:158;39679:178;;39560:305;;;:::o;63167:97::-;57961:12;:10;:12::i;:::-;57950:23;;:7;:5;:7::i;:::-;:23;;;57942:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;63248:10:::1;63236:9;;:22;;;;;;;;;;;;;;;;;;63167:97:::0;:::o;42673:100::-;42727:13;42760:5;42753:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42673:100;:::o;44176:204::-;44244:7;44269:16;44277:7;44269;:16::i;:::-;44264:64;;44294:34;;;;;;;;;;;;;;44264:64;44348:15;:24;44364:7;44348:24;;;;;;;;;;;;;;;;;;;;;44341:31;;44176:204;;;:::o;63776:75::-;57961:12;:10;:12::i;:::-;57950:23;;:7;:5;:7::i;:::-;:23;;;57942:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;63837:8:::1;;;;;;;;;;;63836:9;63825:8;;:20;;;;;;;;;;;;;;;;;;63776:75::o:0;43739:371::-;43812:13;43828:24;43844:7;43828:15;:24::i;:::-;43812:40;;43873:5;43867:11;;:2;:11;;;43863:48;;43887:24;;;;;;;;;;;;;;43863:48;43944:5;43928:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;43954:37;43971:5;43978:12;:10;:12::i;:::-;43954:16;:37::i;:::-;43953:38;43928:63;43924:138;;;44015:35;;;;;;;;;;;;;;43924:138;44074:28;44083:2;44087:7;44096:5;44074:8;:28::i;:::-;43801:309;43739:371;;:::o;65976:129::-;57961:12;:10;:12::i;:::-;57950:23;;:7;:5;:7::i;:::-;:23;;;57942:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;66086:13:::1;66069:14;:30;;;;65976:129:::0;:::o;65870:102::-;57961:12;:10;:12::i;:::-;57950:23;;:7;:5;:7::i;:::-;:23;;;57942:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;65956:10:::1;65944:9;:22;;;;;;:::i;:::-;;65870:102:::0;:::o;60314:33::-;;;;:::o;38809:303::-;38853:7;39078:15;:13;:15::i;:::-;39063:12;;39047:13;;:28;:46;39040:53;;38809:303;:::o;60575:39::-;;;;:::o;45041:170::-;45175:28;45185:4;45191:2;45195:7;45175:9;:28::i;:::-;45041:170;;;:::o;66483:123::-;57961:12;:10;:12::i;:::-;57950:23;;:7;:5;:7::i;:::-;:23;;;57942:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;66588:10:::1;66563:22;;:35;;;;;;;;;;;;;;;;;;66483:123:::0;:::o;62352:326::-;57961:12;:10;:12::i;:::-;57950:23;;:7;:5;:7::i;:::-;:23;;;57942:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;62435:18:::1;62463:13;:11;:13::i;:::-;62435:42;;62521:9;;;;;;;;;;;62492:38;;62506:11;62492;:25;;;;:::i;:::-;:38;;;;62484:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;62562:34;62572:9;62584:11;62562:34;;:9;:34::i;:::-;62604:18;;;62630:16;;;62654:18;;;62427:251;62352:326:::0;;:::o;66115:91::-;57961:12;:10;:12::i;:::-;57950:23;;:7;:5;:7::i;:::-;:23;;;57942:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;66172:6:::1;;;;;;;;;;;66171:7;66162:6;;:16;;;;;;;;;;;;;;;;;;66196:4;66185:8;;:15;;;;;;;;;;;;;;;;;;66115:91::o:0;60819:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;66294:70::-;57961:12;:10;:12::i;:::-;57950:23;;:7;:5;:7::i;:::-;:23;;;57942:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;66353:6:::1;;;;;;;;;;;66352:7;66343:6;;:16;;;;;;;;;;;;;;;;;;66294:70::o:0;66615:475::-;57961:12;:10;:12::i;:::-;57950:23;;:7;:5;:7::i;:::-;:23;;;57942:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;14221:1:::1;14819:7;;:19:::0;14811:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;14221:1;14952:7;:18;;;;66912:7:::2;66933;:5;:7::i;:::-;66925:21;;66954;66925:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;66911:69;;;66995:2;66987:11;;;::::0;::::2;;66665:425;14177:1:::1;15131:7;:22;;;;66615:475::o:0;45282:185::-;45420:39;45437:4;45443:2;45447:7;45420:39;;;;;;;;;;;;:16;:39::i;:::-;45282:185;;;:::o;66212:76::-;57961:12;:10;:12::i;:::-;57950:23;;:7;:5;:7::i;:::-;:23;;;57942:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;66275:5:::1;66268:4;:12;;;;66212:76:::0;:::o;63971:134::-;57961:12;:10;:12::i;:::-;57950:23;;:7;:5;:7::i;:::-;:23;;;57942:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;64074:6:::1;64045:26;;:35;;;;;;;;;;;;;;;;;;64086:13;;;63971:134:::0;:::o;60756:25::-;;;;;;;;;;;;;:::o;42481:125::-;42545:7;42572:21;42585:7;42572:12;:21::i;:::-;:26;;;42565:33;;42481:125;;;:::o;39929:206::-;39993:7;40034:1;40017:19;;:5;:19;;;40013:60;;40045:28;;;;;;;;;;;;;;40013:60;40099:12;:19;40112:5;40099:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;40091:36;;40084:43;;39929:206;;;:::o;58382:103::-;57961:12;:10;:12::i;:::-;57950:23;;:7;:5;:7::i;:::-;:23;;;57942:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;58447:30:::1;58474:1;58447:18;:30::i;:::-;58382:103::o:0;65764:102::-;57961:12;:10;:12::i;:::-;57950:23;;:7;:5;:7::i;:::-;:23;;;57942:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;65850:10:::1;65838:9;:22;;;;;;:::i;:::-;;65764:102:::0;:::o;60724:27::-;;;;;;;;;;;;;:::o;64537:1221::-;64631:8;;;;;;;;;;;64630:9;64622:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;64686:13;:25;64700:10;64686:25;;;;;;;;;;;;;;;;;;;;;;;;;64678:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;64799:1;64787:9;;;;;;;;;;;:13;;;;:::i;:::-;64757:43;;64773:11;64757:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:43;64749:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;64867:22;;;;;;;;;;;64828:61;;64852:11;64828:21;64838:10;64828:9;:21::i;:::-;:35;;;;:::i;:::-;:61;;64819:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;64975:14;;64961:11;64938:20;;:34;;;;:::i;:::-;:51;64935:777;;;65056:9;65040:11;65024:13;;:27;;;;:::i;:::-;65023:42;;65001:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;64935:777;;;65190:26;;;;;;;;;;;65152:64;;65176:11;65152:21;65162:10;65152:9;:21::i;:::-;:35;;;;:::i;:::-;:64;65148:557;;;65284:9;65268:11;65252:13;;:27;;;;:::i;:::-;65251:42;;65229:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;65393:18;;;;;;;;;;;65378:33;;:11;:33;;65356:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;65148:557;;;65547:26;;;;;;;;;;;65532:41;;:11;:41;;65506:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;65682:11;65658:20;;:35;;;;;;;:::i;:::-;;;;;;;;65148:557;64935:777;65718:34;65728:10;65740:11;65718:9;:34::i;:::-;64537:1221;:::o;57730:87::-;57776:7;57803:6;;;;;;;;;;;57796:13;;57730:87;:::o;64117:200::-;57961:12;:10;:12::i;:::-;57950:23;;:7;:5;:7::i;:::-;:23;;;57942:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;64210:7:::1;64206:101;64227:7;;:14;;64223:1;:18;;;64206:101;;;64291:4;64263:13;:25;64277:7;;64285:1;64277:10;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;64263:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;64243:3;;;;;:::i;:::-;;;;64206:101;;;;64117:200:::0;;:::o;64323:204::-;57961:12;:10;:12::i;:::-;57950:23;;:7;:5;:7::i;:::-;:23;;;57942:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;64421:7:::1;64417:103;64438:7;;:14;;64434:1;:18;;;64417:103;;;64503:5;64475:13;:25;64489:7;;64497:1;64489:10;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;64475:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;64454:3;;;;;:::i;:::-;;;;64417:103;;;;64323:204:::0;;:::o;60352:43::-;;;;:::o;60443:35::-;;;;;;;;;;;;;:::o;42842:104::-;42898:13;42931:7;42924:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42842:104;:::o;60619:37::-;;;;:::o;61206:1140::-;61137:10;61124:23;;:9;:23;;;61116:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;61311:6:::1;;;;;;;;;;;61310:7;61302:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;61402:1;61390:9;;;;;;;;;;;:13;;;;:::i;:::-;61360:43;;61376:11;61360:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:43;61352:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;61471:22;;;;;;;;;;;61432:61;;61456:11;61432:21;61442:10;61432:9;:21::i;:::-;:35;;;;:::i;:::-;:61;;61423:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;61581:14;;61567:11;61544:20;;:34;;;;:::i;:::-;:51;61541:759;;;61653:9;61637:11;61630:4;;:18;;;;:::i;:::-;61629:33;;61607:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;61541:759;;;61787:26;;;;;;;;;;;61749:64;;61773:11;61749:21;61759:10;61749:9;:21::i;:::-;:35;;;;:::i;:::-;:64;61745:548;;;61872:9;61856:11;61849:4;;:18;;;;:::i;:::-;61848:33;;61826:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;61981:18;;;;;;;;;;;61966:33;;:11;:33;;61944:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;61745:548;;;62135:26;;;;;;;;;;;62120:41;;:11;:41;;62094:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;62270:11;62246:20;;:35;;;;;;;:::i;:::-;;;;;;;;61745:548;61541:759;62306:34;62316:10;62328:11;62306:9;:34::i;:::-;61206:1140:::0;:::o;44452:287::-;44563:12;:10;:12::i;:::-;44551:24;;:8;:24;;;44547:54;;44584:17;;;;;;;;;;;;;;44547:54;44659:8;44614:18;:32;44633:12;:10;:12::i;:::-;44614:32;;;;;;;;;;;;;;;:42;44647:8;44614:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;44712:8;44683:48;;44698:12;:10;:12::i;:::-;44683:48;;;44722:8;44683:48;;;;;;:::i;:::-;;;;;;;;44452:287;;:::o;60786:25::-;;;;;;;;;;;;;:::o;66370:107::-;57961:12;:10;:12::i;:::-;57950:23;;:7;:5;:7::i;:::-;:23;;;57942:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;66463:6:::1;66442:18;;:27;;;;;;;;;;;;;;;;;;66370:107:::0;:::o;45538:369::-;45705:28;45715:4;45721:2;45725:7;45705:9;:28::i;:::-;45748:15;:2;:13;;;:15::i;:::-;:76;;;;;45768:56;45799:4;45805:2;45809:7;45818:5;45768:30;:56::i;:::-;45767:57;45748:76;45744:156;;;45848:40;;;;;;;;;;;;;;45744:156;45538:369;;;;:::o;60483:39::-;;;;;;;;;;;;;:::o;63279:490::-;63378:13;63419:17;63427:8;63419:7;:17::i;:::-;63403:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;63529:5;63519:15;;:6;;;;;;;;;;;:15;;;63514:50;;63551:9;63544:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;63514:50;63578:28;63609:10;:8;:10::i;:::-;63578:41;;63664:1;63639:14;63633:28;:32;:130;;;;;;;;;;;;;;;;;63701:14;63717:19;:8;:17;:19::i;:::-;63738:9;63684:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;63633:130;63626:137;;;63279:490;;;;:::o;62684:472::-;57961:12;:10;:12::i;:::-;57950:23;;:7;:5;:7::i;:::-;:23;;;57942:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;62783:18:::1;62811:13;:11;:13::i;:::-;62783:42;;62833:16;62874:9;;:16;;62854:17;:36;;;;;;:::i;:::-;62833:57;;62934:9;;;;;;;;;;;62905:38;;62919:11;62905;:25;;;;;;:::i;:::-;:38;;62897:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;62980:9;62975:116;62999:9;;:16;;62995:1;:20;62975:116;;;63037:42;63047:9;;63057:1;63047:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;63061:17;63037:42;;:9;:42::i;:::-;63017:3;;;;;:::i;:::-;;;;62975:116;;;;63100:24;;;63132:18;;;62775:381;;62684:472:::0;;;:::o;63855:106::-;57961:12;:10;:12::i;:::-;57950:23;;:7;:5;:7::i;:::-;:23;;;57942:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;63931:5:::1;63915:13;:21;;;;63943:12;;;63855:106:::0;:::o;60407:31::-;;;;;;;;;;;;;:::o;44810:164::-;44907:4;44931:18;:25;44950:5;44931:25;;;;;;;;;;;;;;;:35;44957:8;44931:35;;;;;;;;;;;;;;;;;;;;;;;;;44924:42;;44810:164;;;;:::o;60274:23::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;58640:201::-;57961:12;:10;:12::i;:::-;57950:23;;:7;:5;:7::i;:::-;:23;;;57942:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;58749:1:::1;58729:22;;:8;:22;;::::0;58721:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;58805:28;58824:8;58805:18;:28::i;:::-;58640:201:::0;:::o;60527:43::-;;;;;;;;;;;;;:::o;29499:157::-;29584:4;29623:25;29608:40;;;:11;:40;;;;29601:47;;29499:157;;;:::o;17969:98::-;18022:7;18049:10;18042:17;;17969:98;:::o;46162:187::-;46219:4;46262:7;46243:15;:13;:15::i;:::-;:26;;:53;;;;;46283:13;;46273:7;:23;46243:53;:98;;;;;46314:11;:20;46326:7;46314:20;;;;;;;;;;;:27;;;;;;;;;;;;46313:28;46243:98;46236:105;;46162:187;;;:::o;54332:196::-;54474:2;54447:15;:24;54463:7;54447:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;54512:7;54508:2;54492:28;;54501:5;54492:28;;;;;;;;;;;;54332:196;;;:::o;38583:92::-;38639:7;38583:92;:::o;49275:2130::-;49390:35;49428:21;49441:7;49428:12;:21::i;:::-;49390:59;;49488:4;49466:26;;:13;:18;;;:26;;;49462:67;;49501:28;;;;;;;;;;;;;;49462:67;49542:22;49584:4;49568:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;49605:36;49622:4;49628:12;:10;:12::i;:::-;49605:16;:36::i;:::-;49568:73;:126;;;;49682:12;:10;:12::i;:::-;49658:36;;:20;49670:7;49658:11;:20::i;:::-;:36;;;49568:126;49542:153;;49713:17;49708:66;;49739:35;;;;;;;;;;;;;;49708:66;49803:1;49789:16;;:2;:16;;;49785:52;;49814:23;;;;;;;;;;;;;;49785:52;49850:43;49872:4;49878:2;49882:7;49891:1;49850:21;:43::i;:::-;49958:35;49975:1;49979:7;49988:4;49958:8;:35::i;:::-;50319:1;50289:12;:18;50302:4;50289:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50363:1;50335:12;:16;50348:2;50335:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50381:31;50415:11;:20;50427:7;50415:20;;;;;;;;;;;50381:54;;50466:2;50450:8;:13;;;:18;;;;;;;;;;;;;;;;;;50516:15;50483:8;:23;;;:49;;;;;;;;;;;;;;;;;;50784:19;50816:1;50806:7;:11;50784:33;;50832:31;50866:11;:24;50878:11;50866:24;;;;;;;;;;;50832:58;;50934:1;50909:27;;:8;:13;;;;;;;;;;;;:27;;;50905:384;;51119:13;;51104:11;:28;51100:174;;51173:4;51157:8;:13;;;:20;;;;;;;;;;;;;;;;;;51226:13;:28;;;51200:8;:23;;;:54;;;;;;;;;;;;;;;;;;51100:174;50905:384;50264:1036;;;51336:7;51332:2;51317:27;;51326:4;51317:27;;;;;;;;;;;;51355:42;51376:4;51382:2;51386:7;51395:1;51355:20;:42::i;:::-;49379:2026;;49275:2130;;;:::o;46357:104::-;46426:27;46436:2;46440:8;46426:27;;;;;;;;;;;;:9;:27::i;:::-;46357:104;;:::o;41310:1109::-;41372:21;;:::i;:::-;41406:12;41421:7;41406:22;;41489:4;41470:15;:13;:15::i;:::-;:23;;:47;;;;;41504:13;;41497:4;:20;41470:47;41466:886;;;41538:31;41572:11;:17;41584:4;41572:17;;;;;;;;;;;41538:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41613:9;:16;;;41608:729;;41684:1;41658:28;;:9;:14;;;:28;;;41654:101;;41722:9;41715:16;;;;;;41654:101;42057:261;42064:4;42057:261;;;42097:6;;;;;;;;42142:11;:17;42154:4;42142:17;;;;;;;;;;;42130:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42216:1;42190:28;;:9;:14;;;:28;;;42186:109;;42258:9;42251:16;;;;;;42186:109;42057:261;;;41608:729;41519:833;41466:886;42380:31;;;;;;;;;;;;;;41310:1109;;;;:::o;59001:191::-;59075:16;59094:6;;;;;;;;;;;59075:25;;59120:8;59111:6;;:17;;;;;;;;;;;;;;;;;;59175:8;59144:40;;59165:8;59144:40;;;;;;;;;;;;59064:128;59001:191;:::o;19416:326::-;19476:4;19733:1;19711:7;:19;;;:23;19704:30;;19416:326;;;:::o;55020:667::-;55183:4;55220:2;55204:36;;;55241:12;:10;:12::i;:::-;55255:4;55261:7;55270:5;55204:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;55200:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55455:1;55438:6;:13;:18;55434:235;;55484:40;;;;;;;;;;;;;;55434:235;55627:6;55621:13;55612:6;55608:2;55604:15;55597:38;55200:480;55333:45;;;55323:55;;;:6;:55;;;;55316:62;;;55020:667;;;;;;:::o;67098:97::-;67151:13;67180:9;67173:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;67098:97;:::o;15531:723::-;15587:13;15817:1;15808:5;:10;15804:53;;15835:10;;;;;;;;;;;;;;;;;;;;;15804:53;15867:12;15882:5;15867:20;;15898:14;15923:78;15938:1;15930:4;:9;15923:78;;15956:8;;;;;:::i;:::-;;;;15987:2;15979:10;;;;;:::i;:::-;;;15923:78;;;16011:19;16043:6;16033:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16011:39;;16061:154;16077:1;16068:5;:10;16061:154;;16105:1;16095:11;;;;;:::i;:::-;;;16172:2;16164:5;:10;;;;:::i;:::-;16151:2;:24;;;;:::i;:::-;16138:39;;16121:6;16128;16121:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;16201:2;16192:11;;;;;:::i;:::-;;;16061:154;;;16239:6;16225:21;;;;;15531:723;;;;:::o;56335:159::-;;;;;:::o;57153:158::-;;;;;:::o;46824:163::-;46947:32;46953:2;46957:8;46967:5;46974:4;46947:5;:32::i;:::-;46824:163;;;:::o;47246:1775::-;47385:20;47408:13;;47385:36;;47450:1;47436:16;;:2;:16;;;47432:48;;47461:19;;;;;;;;;;;;;;47432:48;47507:1;47495:8;:13;47491:44;;47517:18;;;;;;;;;;;;;;47491:44;47548:61;47578:1;47582:2;47586:12;47600:8;47548:21;:61::i;:::-;47921:8;47886:12;:16;47899:2;47886:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47985:8;47945:12;:16;47958:2;47945:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48044:2;48011:11;:25;48023:12;48011:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;48111:15;48061:11;:25;48073:12;48061:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;48144:20;48167:12;48144:35;;48194:11;48223:8;48208:12;:23;48194:37;;48252:4;:23;;;;;48260:15;:2;:13;;;:15::i;:::-;48252:23;48248:641;;;48296:314;48352:12;48348:2;48327:38;;48344:1;48327:38;;;;;;;;;;;;48393:69;48432:1;48436:2;48440:14;;;;;;48456:5;48393:30;:69::i;:::-;48388:174;;48498:40;;;;;;;;;;;;;;48388:174;48605:3;48589:12;:19;48296:314;;48691:12;48674:13;;:29;48670:43;;48705:8;;;48670:43;48248:641;;;48754:120;48810:14;;;;;;48806:2;48785:40;;48802:1;48785:40;;;;;;;;;;;;48869:3;48853:12;:19;48754:120;;48248:641;48919:12;48903:13;:28;;;;47861:1082;;48953:60;48982:1;48986:2;48990:12;49004:8;48953:20;:60::i;:::-;47374:1647;47246:1775;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::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:89::-;1554:7;1594:6;1587:5;1583:18;1572:29;;1518:89;;;:::o;1613:120::-;1685:23;1702:5;1685:23;:::i;:::-;1678:5;1675:34;1665:62;;1723:1;1720;1713:12;1665:62;1613:120;:::o;1739:137::-;1784:5;1822:6;1809:20;1800:29;;1838:32;1864:5;1838:32;:::i;:::-;1739:137;;;;:::o;1882:327::-;1940:6;1989:2;1977:9;1968:7;1964:23;1960:32;1957:119;;;1995:79;;:::i;:::-;1957:119;2115:1;2140:52;2184:7;2175:6;2164:9;2160:22;2140:52;:::i;:::-;2130:62;;2086:116;1882:327;;;;:::o;2215:99::-;2267:6;2301:5;2295:12;2285:22;;2215:99;;;:::o;2320:169::-;2404:11;2438:6;2433:3;2426:19;2478:4;2473:3;2469:14;2454:29;;2320:169;;;;:::o;2495:246::-;2576:1;2586:113;2600:6;2597:1;2594:13;2586:113;;;2685:1;2680:3;2676:11;2670:18;2666:1;2661:3;2657:11;2650:39;2622:2;2619:1;2615:10;2610:15;;2586:113;;;2733:1;2724:6;2719:3;2715:16;2708:27;2557:184;2495:246;;;:::o;2747:102::-;2788:6;2839:2;2835:7;2830:2;2823:5;2819:14;2815:28;2805:38;;2747:102;;;:::o;2855:377::-;2943:3;2971:39;3004:5;2971:39;:::i;:::-;3026:71;3090:6;3085:3;3026:71;:::i;:::-;3019:78;;3106:65;3164:6;3159:3;3152:4;3145:5;3141:16;3106:65;:::i;:::-;3196:29;3218:6;3196:29;:::i;:::-;3191:3;3187:39;3180:46;;2947:285;2855:377;;;;:::o;3238:313::-;3351:4;3389:2;3378:9;3374:18;3366:26;;3438:9;3432:4;3428:20;3424:1;3413:9;3409:17;3402:47;3466:78;3539:4;3530:6;3466:78;:::i;:::-;3458:86;;3238:313;;;;:::o;3557:77::-;3594:7;3623:5;3612:16;;3557:77;;;:::o;3640:122::-;3713:24;3731:5;3713:24;:::i;:::-;3706:5;3703:35;3693:63;;3752:1;3749;3742:12;3693:63;3640:122;:::o;3768:139::-;3814:5;3852:6;3839:20;3830:29;;3868:33;3895:5;3868:33;:::i;:::-;3768:139;;;;:::o;3913:329::-;3972:6;4021:2;4009:9;4000:7;3996:23;3992:32;3989:119;;;4027:79;;:::i;:::-;3989:119;4147:1;4172:53;4217:7;4208:6;4197:9;4193:22;4172:53;:::i;:::-;4162:63;;4118:117;3913:329;;;;:::o;4248:126::-;4285:7;4325:42;4318:5;4314:54;4303:65;;4248:126;;;:::o;4380:96::-;4417:7;4446:24;4464:5;4446:24;:::i;:::-;4435:35;;4380:96;;;:::o;4482:118::-;4569:24;4587:5;4569:24;:::i;:::-;4564:3;4557:37;4482:118;;:::o;4606:222::-;4699:4;4737:2;4726:9;4722:18;4714:26;;4750:71;4818:1;4807:9;4803:17;4794:6;4750:71;:::i;:::-;4606:222;;;;:::o;4834:122::-;4907:24;4925:5;4907:24;:::i;:::-;4900:5;4897:35;4887:63;;4946:1;4943;4936:12;4887:63;4834:122;:::o;4962:139::-;5008:5;5046:6;5033:20;5024:29;;5062:33;5089:5;5062:33;:::i;:::-;4962:139;;;;:::o;5107:474::-;5175:6;5183;5232:2;5220:9;5211:7;5207:23;5203:32;5200:119;;;5238:79;;:::i;:::-;5200:119;5358:1;5383:53;5428:7;5419:6;5408:9;5404:22;5383:53;:::i;:::-;5373:63;;5329:117;5485:2;5511:53;5556:7;5547:6;5536:9;5532:22;5511:53;:::i;:::-;5501:63;;5456:118;5107:474;;;;;:::o;5587:117::-;5696:1;5693;5686:12;5710:117;5819:1;5816;5809:12;5833:180;5881:77;5878:1;5871:88;5978:4;5975:1;5968:15;6002:4;5999:1;5992:15;6019:281;6102:27;6124:4;6102:27;:::i;:::-;6094:6;6090:40;6232:6;6220:10;6217:22;6196:18;6184:10;6181:34;6178:62;6175:88;;;6243:18;;:::i;:::-;6175:88;6283:10;6279:2;6272:22;6062:238;6019:281;;:::o;6306:129::-;6340:6;6367:20;;:::i;:::-;6357:30;;6396:33;6424:4;6416:6;6396:33;:::i;:::-;6306:129;;;:::o;6441:308::-;6503:4;6593:18;6585:6;6582:30;6579:56;;;6615:18;;:::i;:::-;6579:56;6653:29;6675:6;6653:29;:::i;:::-;6645:37;;6737:4;6731;6727:15;6719:23;;6441:308;;;:::o;6755:146::-;6852:6;6847:3;6842;6829:30;6893:1;6884:6;6879:3;6875:16;6868:27;6755:146;;;:::o;6907:425::-;6985:5;7010:66;7026:49;7068:6;7026:49;:::i;:::-;7010:66;:::i;:::-;7001:75;;7099:6;7092:5;7085:21;7137:4;7130:5;7126:16;7175:3;7166:6;7161:3;7157:16;7154:25;7151:112;;;7182:79;;:::i;:::-;7151:112;7272:54;7319:6;7314:3;7309;7272:54;:::i;:::-;6991:341;6907:425;;;;;:::o;7352:340::-;7408:5;7457:3;7450:4;7442:6;7438:17;7434:27;7424:122;;7465:79;;:::i;:::-;7424:122;7582:6;7569:20;7607:79;7682:3;7674:6;7667:4;7659:6;7655:17;7607:79;:::i;:::-;7598:88;;7414:278;7352:340;;;;:::o;7698:509::-;7767:6;7816:2;7804:9;7795:7;7791:23;7787:32;7784:119;;;7822:79;;:::i;:::-;7784:119;7970:1;7959:9;7955:17;7942:31;8000:18;7992:6;7989:30;7986:117;;;8022:79;;:::i;:::-;7986:117;8127:63;8182:7;8173:6;8162:9;8158:22;8127:63;:::i;:::-;8117:73;;7913:287;7698:509;;;;:::o;8213:118::-;8300:24;8318:5;8300:24;:::i;:::-;8295:3;8288:37;8213:118;;:::o;8337:222::-;8430:4;8468:2;8457:9;8453:18;8445:26;;8481:71;8549:1;8538:9;8534:17;8525:6;8481:71;:::i;:::-;8337:222;;;;:::o;8565:619::-;8642:6;8650;8658;8707:2;8695:9;8686:7;8682:23;8678:32;8675:119;;;8713:79;;:::i;:::-;8675:119;8833:1;8858:53;8903:7;8894:6;8883:9;8879:22;8858:53;:::i;:::-;8848:63;;8804:117;8960:2;8986:53;9031:7;9022:6;9011:9;9007:22;8986:53;:::i;:::-;8976:63;;8931:118;9088:2;9114:53;9159:7;9150:6;9139:9;9135:22;9114:53;:::i;:::-;9104:63;;9059:118;8565:619;;;;;:::o;9190:86::-;9225:7;9265:4;9258:5;9254:16;9243:27;;9190:86;;;:::o;9282:118::-;9353:22;9369:5;9353:22;:::i;:::-;9346:5;9343:33;9333:61;;9390:1;9387;9380:12;9333:61;9282:118;:::o;9406:135::-;9450:5;9488:6;9475:20;9466:29;;9504:31;9529:5;9504:31;:::i;:::-;9406:135;;;;:::o;9547:325::-;9604:6;9653:2;9641:9;9632:7;9628:23;9624:32;9621:119;;;9659:79;;:::i;:::-;9621:119;9779:1;9804:51;9847:7;9838:6;9827:9;9823:22;9804:51;:::i;:::-;9794:61;;9750:115;9547:325;;;;:::o;9878:472::-;9945:6;9953;10002:2;9990:9;9981:7;9977:23;9973:32;9970:119;;;10008:79;;:::i;:::-;9970:119;10128:1;10153:52;10197:7;10188:6;10177:9;10173:22;10153:52;:::i;:::-;10143:62;;10099:116;10254:2;10280:53;10325:7;10316:6;10305:9;10301:22;10280:53;:::i;:::-;10270:63;;10225:118;9878:472;;;;;:::o;10356:329::-;10415:6;10464:2;10452:9;10443:7;10439:23;10435:32;10432:119;;;10470:79;;:::i;:::-;10432:119;10590:1;10615:53;10660:7;10651:6;10640:9;10636:22;10615:53;:::i;:::-;10605:63;;10561:117;10356:329;;;;:::o;10691:117::-;10800:1;10797;10790:12;10814:117;10923:1;10920;10913:12;10954:568;11027:8;11037:6;11087:3;11080:4;11072:6;11068:17;11064:27;11054:122;;11095:79;;:::i;:::-;11054:122;11208:6;11195:20;11185:30;;11238:18;11230:6;11227:30;11224:117;;;11260:79;;:::i;:::-;11224:117;11374:4;11366:6;11362:17;11350:29;;11428:3;11420:4;11412:6;11408:17;11398:8;11394:32;11391:41;11388:128;;;11435:79;;:::i;:::-;11388:128;10954:568;;;;;:::o;11528:559::-;11614:6;11622;11671:2;11659:9;11650:7;11646:23;11642:32;11639:119;;;11677:79;;:::i;:::-;11639:119;11825:1;11814:9;11810:17;11797:31;11855:18;11847:6;11844:30;11841:117;;;11877:79;;:::i;:::-;11841:117;11990:80;12062:7;12053:6;12042:9;12038:22;11990:80;:::i;:::-;11972:98;;;;11768:312;11528:559;;;;;:::o;12093:112::-;12176:22;12192:5;12176:22;:::i;:::-;12171:3;12164:35;12093:112;;:::o;12211:214::-;12300:4;12338:2;12327:9;12323:18;12315:26;;12351:67;12415:1;12404:9;12400:17;12391:6;12351:67;:::i;:::-;12211:214;;;;:::o;12431:116::-;12501:21;12516:5;12501:21;:::i;:::-;12494:5;12491:32;12481:60;;12537:1;12534;12527:12;12481:60;12431:116;:::o;12553:133::-;12596:5;12634:6;12621:20;12612:29;;12650:30;12674:5;12650:30;:::i;:::-;12553:133;;;;:::o;12692:468::-;12757:6;12765;12814:2;12802:9;12793:7;12789:23;12785:32;12782:119;;;12820:79;;:::i;:::-;12782:119;12940:1;12965:53;13010:7;13001:6;12990:9;12986:22;12965:53;:::i;:::-;12955:63;;12911:117;13067:2;13093:50;13135:7;13126:6;13115:9;13111:22;13093:50;:::i;:::-;13083:60;;13038:115;12692:468;;;;;:::o;13166:307::-;13227:4;13317:18;13309:6;13306:30;13303:56;;;13339:18;;:::i;:::-;13303:56;13377:29;13399:6;13377:29;:::i;:::-;13369:37;;13461:4;13455;13451:15;13443:23;;13166:307;;;:::o;13479:423::-;13556:5;13581:65;13597:48;13638:6;13597:48;:::i;:::-;13581:65;:::i;:::-;13572:74;;13669:6;13662:5;13655:21;13707:4;13700:5;13696:16;13745:3;13736:6;13731:3;13727:16;13724:25;13721:112;;;13752:79;;:::i;:::-;13721:112;13842:54;13889:6;13884:3;13879;13842:54;:::i;:::-;13562:340;13479:423;;;;;:::o;13921:338::-;13976:5;14025:3;14018:4;14010:6;14006:17;14002:27;13992:122;;14033:79;;:::i;:::-;13992:122;14150:6;14137:20;14175:78;14249:3;14241:6;14234:4;14226:6;14222:17;14175:78;:::i;:::-;14166:87;;13982:277;13921:338;;;;:::o;14265:943::-;14360:6;14368;14376;14384;14433:3;14421:9;14412:7;14408:23;14404:33;14401:120;;;14440:79;;:::i;:::-;14401:120;14560:1;14585:53;14630:7;14621:6;14610:9;14606:22;14585:53;:::i;:::-;14575:63;;14531:117;14687:2;14713:53;14758:7;14749:6;14738:9;14734:22;14713:53;:::i;:::-;14703:63;;14658:118;14815:2;14841:53;14886:7;14877:6;14866:9;14862:22;14841:53;:::i;:::-;14831:63;;14786:118;14971:2;14960:9;14956:18;14943:32;15002:18;14994:6;14991:30;14988:117;;;15024:79;;:::i;:::-;14988:117;15129:62;15183:7;15174:6;15163:9;15159:22;15129:62;:::i;:::-;15119:72;;14914:287;14265:943;;;;;;;:::o;15214:700::-;15307:6;15315;15323;15372:2;15360:9;15351:7;15347:23;15343:32;15340:119;;;15378:79;;:::i;:::-;15340:119;15498:1;15523:51;15566:7;15557:6;15546:9;15542:22;15523:51;:::i;:::-;15513:61;;15469:115;15651:2;15640:9;15636:18;15623:32;15682:18;15674:6;15671:30;15668:117;;;15704:79;;:::i;:::-;15668:117;15817:80;15889:7;15880:6;15869:9;15865:22;15817:80;:::i;:::-;15799:98;;;;15594:313;15214:700;;;;;:::o;15920:115::-;16005:23;16022:5;16005:23;:::i;:::-;16000:3;15993:36;15920:115;;:::o;16041:218::-;16132:4;16170:2;16159:9;16155:18;16147:26;;16183:69;16249:1;16238:9;16234:17;16225:6;16183:69;:::i;:::-;16041:218;;;;:::o;16265:474::-;16333:6;16341;16390:2;16378:9;16369:7;16365:23;16361:32;16358:119;;;16396:79;;:::i;:::-;16358:119;16516:1;16541:53;16586:7;16577:6;16566:9;16562:22;16541:53;:::i;:::-;16531:63;;16487:117;16643:2;16669:53;16714:7;16705:6;16694:9;16690:22;16669:53;:::i;:::-;16659:63;;16614:118;16265:474;;;;;:::o;16745:182::-;16885:34;16881:1;16873:6;16869:14;16862:58;16745:182;:::o;16933:366::-;17075:3;17096:67;17160:2;17155:3;17096:67;:::i;:::-;17089:74;;17172:93;17261:3;17172:93;:::i;:::-;17290:2;17285:3;17281:12;17274:19;;16933:366;;;:::o;17305:419::-;17471:4;17509:2;17498:9;17494:18;17486:26;;17558:9;17552:4;17548:20;17544:1;17533:9;17529:17;17522:47;17586:131;17712:4;17586:131;:::i;:::-;17578:139;;17305:419;;;:::o;17730:180::-;17778:77;17775:1;17768:88;17875:4;17872:1;17865:15;17899:4;17896:1;17889:15;17916:320;17960:6;17997:1;17991:4;17987:12;17977:22;;18044:1;18038:4;18034:12;18065:18;18055:81;;18121:4;18113:6;18109:17;18099:27;;18055:81;18183:2;18175:6;18172:14;18152:18;18149:38;18146:84;;18202:18;;:::i;:::-;18146:84;17967:269;17916:320;;;:::o;18242:141::-;18291:4;18314:3;18306:11;;18337:3;18334:1;18327:14;18371:4;18368:1;18358:18;18350:26;;18242:141;;;:::o;18389:93::-;18426:6;18473:2;18468;18461:5;18457:14;18453:23;18443:33;;18389:93;;;:::o;18488:107::-;18532:8;18582:5;18576:4;18572:16;18551:37;;18488:107;;;;:::o;18601:393::-;18670:6;18720:1;18708:10;18704:18;18743:97;18773:66;18762:9;18743:97;:::i;:::-;18861:39;18891:8;18880:9;18861:39;:::i;:::-;18849:51;;18933:4;18929:9;18922:5;18918:21;18909:30;;18982:4;18972:8;18968:19;18961:5;18958:30;18948:40;;18677:317;;18601:393;;;;;:::o;19000:60::-;19028:3;19049:5;19042:12;;19000:60;;;:::o;19066:142::-;19116:9;19149:53;19167:34;19176:24;19194:5;19176:24;:::i;:::-;19167:34;:::i;:::-;19149:53;:::i;:::-;19136:66;;19066:142;;;:::o;19214:75::-;19257:3;19278:5;19271:12;;19214:75;;;:::o;19295:269::-;19405:39;19436:7;19405:39;:::i;:::-;19466:91;19515:41;19539:16;19515:41;:::i;:::-;19507:6;19500:4;19494:11;19466:91;:::i;:::-;19460:4;19453:105;19371:193;19295:269;;;:::o;19570:73::-;19615:3;19570:73;:::o;19649:189::-;19726:32;;:::i;:::-;19767:65;19825:6;19817;19811:4;19767:65;:::i;:::-;19702:136;19649:189;;:::o;19844:186::-;19904:120;19921:3;19914:5;19911:14;19904:120;;;19975:39;20012:1;20005:5;19975:39;:::i;:::-;19948:1;19941:5;19937:13;19928:22;;19904:120;;;19844:186;;:::o;20036:543::-;20137:2;20132:3;20129:11;20126:446;;;20171:38;20203:5;20171:38;:::i;:::-;20255:29;20273:10;20255:29;:::i;:::-;20245:8;20241:44;20438:2;20426:10;20423:18;20420:49;;;20459:8;20444:23;;20420:49;20482:80;20538:22;20556:3;20538:22;:::i;:::-;20528:8;20524:37;20511:11;20482:80;:::i;:::-;20141:431;;20126:446;20036:543;;;:::o;20585:117::-;20639:8;20689:5;20683:4;20679:16;20658:37;;20585:117;;;;:::o;20708:169::-;20752:6;20785:51;20833:1;20829:6;20821:5;20818:1;20814:13;20785:51;:::i;:::-;20781:56;20866:4;20860;20856:15;20846:25;;20759:118;20708:169;;;;:::o;20882:295::-;20958:4;21104:29;21129:3;21123:4;21104:29;:::i;:::-;21096:37;;21166:3;21163:1;21159:11;21153:4;21150:21;21142:29;;20882:295;;;;:::o;21182:1395::-;21299:37;21332:3;21299:37;:::i;:::-;21401:18;21393:6;21390:30;21387:56;;;21423:18;;:::i;:::-;21387:56;21467:38;21499:4;21493:11;21467:38;:::i;:::-;21552:67;21612:6;21604;21598:4;21552:67;:::i;:::-;21646:1;21670:4;21657:17;;21702:2;21694:6;21691:14;21719:1;21714:618;;;;22376:1;22393:6;22390:77;;;22442:9;22437:3;22433:19;22427:26;22418:35;;22390:77;22493:67;22553:6;22546:5;22493:67;:::i;:::-;22487:4;22480:81;22349:222;21684:887;;21714:618;21766:4;21762:9;21754:6;21750:22;21800:37;21832:4;21800:37;:::i;:::-;21859:1;21873:208;21887:7;21884:1;21881:14;21873:208;;;21966:9;21961:3;21957:19;21951:26;21943:6;21936:42;22017:1;22009:6;22005:14;21995:24;;22064:2;22053:9;22049:18;22036:31;;21910:4;21907:1;21903:12;21898:17;;21873:208;;;22109:6;22100:7;22097:19;22094:179;;;22167:9;22162:3;22158:19;22152:26;22210:48;22252:4;22244:6;22240:17;22229:9;22210:48;:::i;:::-;22202:6;22195:64;22117:156;22094:179;22319:1;22315;22307:6;22303:14;22299:22;22293:4;22286:36;21721:611;;;21684:887;;21274:1303;;;21182:1395;;:::o;22583:180::-;22631:77;22628:1;22621:88;22728:4;22725:1;22718:15;22752:4;22749:1;22742:15;22769:193;22808:3;22827:19;22844:1;22827:19;:::i;:::-;22822:24;;22860:19;22877:1;22860:19;:::i;:::-;22855:24;;22902:1;22899;22895:9;22888:16;;22925:6;22920:3;22917:15;22914:41;;;22935:18;;:::i;:::-;22914:41;22769:193;;;;:::o;22968:169::-;23108:21;23104:1;23096:6;23092:14;23085:45;22968:169;:::o;23143:366::-;23285:3;23306:67;23370:2;23365:3;23306:67;:::i;:::-;23299:74;;23382:93;23471:3;23382:93;:::i;:::-;23500:2;23495:3;23491:12;23484:19;;23143:366;;;:::o;23515:419::-;23681:4;23719:2;23708:9;23704:18;23696:26;;23768:9;23762:4;23758:20;23754:1;23743:9;23739:17;23732:47;23796:131;23922:4;23796:131;:::i;:::-;23788:139;;23515:419;;;:::o;23940:181::-;24080:33;24076:1;24068:6;24064:14;24057:57;23940:181;:::o;24127:366::-;24269:3;24290:67;24354:2;24349:3;24290:67;:::i;:::-;24283:74;;24366:93;24455:3;24366:93;:::i;:::-;24484:2;24479:3;24475:12;24468:19;;24127:366;;;:::o;24499:419::-;24665:4;24703:2;24692:9;24688:18;24680:26;;24752:9;24746:4;24742:20;24738:1;24727:9;24723:17;24716:47;24780:131;24906:4;24780:131;:::i;:::-;24772:139;;24499:419;;;:::o;24924:147::-;25025:11;25062:3;25047:18;;24924:147;;;;:::o;25077:114::-;;:::o;25197:398::-;25356:3;25377:83;25458:1;25453:3;25377:83;:::i;:::-;25370:90;;25469:93;25558:3;25469:93;:::i;:::-;25587:1;25582:3;25578:11;25571:18;;25197:398;;;:::o;25601:379::-;25785:3;25807:147;25950:3;25807:147;:::i;:::-;25800:154;;25971:3;25964:10;;25601:379;;;:::o;25986:176::-;26126:28;26122:1;26114:6;26110:14;26103:52;25986:176;:::o;26168:366::-;26310:3;26331:67;26395:2;26390:3;26331:67;:::i;:::-;26324:74;;26407:93;26496:3;26407:93;:::i;:::-;26525:2;26520:3;26516:12;26509:19;;26168:366;;;:::o;26540:419::-;26706:4;26744:2;26733:9;26729:18;26721:26;;26793:9;26787:4;26783:20;26779:1;26768:9;26764:17;26757:47;26821:131;26947:4;26821:131;:::i;:::-;26813:139;;26540:419;;;:::o;26965:173::-;27105:25;27101:1;27093:6;27089:14;27082:49;26965:173;:::o;27144:366::-;27286:3;27307:67;27371:2;27366:3;27307:67;:::i;:::-;27300:74;;27383:93;27472:3;27383:93;:::i;:::-;27501:2;27496:3;27492:12;27485:19;;27144:366;;;:::o;27516:419::-;27682:4;27720:2;27709:9;27705:18;27697:26;;27769:9;27763:4;27759:20;27755:1;27744:9;27740:17;27733:47;27797:131;27923:4;27797:131;:::i;:::-;27789:139;;27516:419;;;:::o;27941:191::-;27981:3;28000:20;28018:1;28000:20;:::i;:::-;27995:25;;28034:20;28052:1;28034:20;:::i;:::-;28029:25;;28077:1;28074;28070:9;28063:16;;28098:3;28095:1;28092:10;28089:36;;;28105:18;;:::i;:::-;28089:36;27941:191;;;;:::o;28138:157::-;28278:9;28274:1;28266:6;28262:14;28255:33;28138:157;:::o;28301:365::-;28443:3;28464:66;28528:1;28523:3;28464:66;:::i;:::-;28457:73;;28539:93;28628:3;28539:93;:::i;:::-;28657:2;28652:3;28648:12;28641:19;;28301:365;;;:::o;28672:419::-;28838:4;28876:2;28865:9;28861:18;28853:26;;28925:9;28919:4;28915:20;28911:1;28900:9;28896:17;28889:47;28953:131;29079:4;28953:131;:::i;:::-;28945:139;;28672:419;;;:::o;29097:178::-;29237:30;29233:1;29225:6;29221:14;29214:54;29097:178;:::o;29281:366::-;29423:3;29444:67;29508:2;29503:3;29444:67;:::i;:::-;29437:74;;29520:93;29609:3;29520:93;:::i;:::-;29638:2;29633:3;29629:12;29622:19;;29281:366;;;:::o;29653:419::-;29819:4;29857:2;29846:9;29842:18;29834:26;;29906:9;29900:4;29896:20;29892:1;29881:9;29877:17;29870:47;29934:131;30060:4;29934:131;:::i;:::-;29926:139;;29653:419;;;:::o;30078:348::-;30118:7;30141:20;30159:1;30141:20;:::i;:::-;30136:25;;30175:20;30193:1;30175:20;:::i;:::-;30170:25;;30363:1;30295:66;30291:74;30288:1;30285:81;30280:1;30273:9;30266:17;30262:105;30259:131;;;30370:18;;:::i;:::-;30259:131;30418:1;30415;30411:9;30400:20;;30078:348;;;;:::o;30432:174::-;30572:26;30568:1;30560:6;30556:14;30549:50;30432:174;:::o;30612:366::-;30754:3;30775:67;30839:2;30834:3;30775:67;:::i;:::-;30768:74;;30851:93;30940:3;30851:93;:::i;:::-;30969:2;30964:3;30960:12;30953:19;;30612:366;;;:::o;30984:419::-;31150:4;31188:2;31177:9;31173:18;31165:26;;31237:9;31231:4;31227:20;31223:1;31212:9;31208:17;31201:47;31265:131;31391:4;31265:131;:::i;:::-;31257:139;;30984:419;;;:::o;31409:221::-;31549:34;31545:1;31537:6;31533:14;31526:58;31618:4;31613:2;31605:6;31601:15;31594:29;31409:221;:::o;31636:366::-;31778:3;31799:67;31863:2;31858:3;31799:67;:::i;:::-;31792:74;;31875:93;31964:3;31875:93;:::i;:::-;31993:2;31988:3;31984:12;31977:19;;31636:366;;;:::o;32008:419::-;32174:4;32212:2;32201:9;32197:18;32189:26;;32261:9;32255:4;32251:20;32247:1;32236:9;32232:17;32225:47;32289:131;32415:4;32289:131;:::i;:::-;32281:139;;32008:419;;;:::o;32433:180::-;32481:77;32478:1;32471:88;32578:4;32575:1;32568:15;32602:4;32599:1;32592:15;32619:167;32656:3;32679:22;32695:5;32679:22;:::i;:::-;32670:31;;32723:4;32716:5;32713:15;32710:41;;32731:18;;:::i;:::-;32710:41;32778:1;32771:5;32767:13;32760:20;;32619:167;;;:::o;32792:180::-;32932:32;32928:1;32920:6;32916:14;32909:56;32792:180;:::o;32978:366::-;33120:3;33141:67;33205:2;33200:3;33141:67;:::i;:::-;33134:74;;33217:93;33306:3;33217:93;:::i;:::-;33335:2;33330:3;33326:12;33319:19;;32978:366;;;:::o;33350:419::-;33516:4;33554:2;33543:9;33539:18;33531:26;;33603:9;33597:4;33593:20;33589:1;33578:9;33574:17;33567:47;33631:131;33757:4;33631:131;:::i;:::-;33623:139;;33350:419;;;:::o;33775:173::-;33915:25;33911:1;33903:6;33899:14;33892:49;33775:173;:::o;33954:366::-;34096:3;34117:67;34181:2;34176:3;34117:67;:::i;:::-;34110:74;;34193:93;34282:3;34193:93;:::i;:::-;34311:2;34306:3;34302:12;34295:19;;33954:366;;;:::o;34326:419::-;34492:4;34530:2;34519:9;34515:18;34507:26;;34579:9;34573:4;34569:20;34565:1;34554:9;34550:17;34543:47;34607:131;34733:4;34607:131;:::i;:::-;34599:139;;34326:419;;;:::o;34751:234::-;34891:34;34887:1;34879:6;34875:14;34868:58;34960:17;34955:2;34947:6;34943:15;34936:42;34751:234;:::o;34991:366::-;35133:3;35154:67;35218:2;35213:3;35154:67;:::i;:::-;35147:74;;35230:93;35319:3;35230:93;:::i;:::-;35348:2;35343:3;35339:12;35332:19;;34991:366;;;:::o;35363:419::-;35529:4;35567:2;35556:9;35552:18;35544:26;;35616:9;35610:4;35606:20;35602:1;35591:9;35587:17;35580:47;35644:131;35770:4;35644:131;:::i;:::-;35636:139;;35363:419;;;:::o;35788:148::-;35890:11;35927:3;35912:18;;35788:148;;;;:::o;35942:390::-;36048:3;36076:39;36109:5;36076:39;:::i;:::-;36131:89;36213:6;36208:3;36131:89;:::i;:::-;36124:96;;36229:65;36287:6;36282:3;36275:4;36268:5;36264:16;36229:65;:::i;:::-;36319:6;36314:3;36310:16;36303:23;;36052:280;35942:390;;;;:::o;36362:874::-;36465:3;36502:5;36496:12;36531:36;36557:9;36531:36;:::i;:::-;36583:89;36665:6;36660:3;36583:89;:::i;:::-;36576:96;;36703:1;36692:9;36688:17;36719:1;36714:166;;;;36894:1;36889:341;;;;36681:549;;36714:166;36798:4;36794:9;36783;36779:25;36774:3;36767:38;36860:6;36853:14;36846:22;36838:6;36834:35;36829:3;36825:45;36818:52;;36714:166;;36889:341;36956:38;36988:5;36956:38;:::i;:::-;37016:1;37030:154;37044:6;37041:1;37038:13;37030:154;;;37118:7;37112:14;37108:1;37103:3;37099:11;37092:35;37168:1;37159:7;37155:15;37144:26;;37066:4;37063:1;37059:12;37054:17;;37030:154;;;37213:6;37208:3;37204:16;37197:23;;36896:334;;36681:549;;36469:767;;36362:874;;;;:::o;37242:589::-;37467:3;37489:95;37580:3;37571:6;37489:95;:::i;:::-;37482:102;;37601:95;37692:3;37683:6;37601:95;:::i;:::-;37594:102;;37713:92;37801:3;37792:6;37713:92;:::i;:::-;37706:99;;37822:3;37815:10;;37242:589;;;;;;:::o;37837:233::-;37876:3;37899:24;37917:5;37899:24;:::i;:::-;37890:33;;37945:66;37938:5;37935:77;37932:103;;38015:18;;:::i;:::-;37932:103;38062:1;38055:5;38051:13;38044:20;;37837:233;;;:::o;38076:225::-;38216:34;38212:1;38204:6;38200:14;38193:58;38285:8;38280:2;38272:6;38268:15;38261:33;38076:225;:::o;38307:366::-;38449:3;38470:67;38534:2;38529:3;38470:67;:::i;:::-;38463:74;;38546:93;38635:3;38546:93;:::i;:::-;38664:2;38659:3;38655:12;38648:19;;38307:366;;;:::o;38679:419::-;38845:4;38883:2;38872:9;38868:18;38860:26;;38932:9;38926:4;38922:20;38918:1;38907:9;38903:17;38896:47;38960:131;39086:4;38960:131;:::i;:::-;38952:139;;38679:419;;;:::o;39104:98::-;39155:6;39189:5;39183:12;39173:22;;39104:98;;;:::o;39208:168::-;39291:11;39325:6;39320:3;39313:19;39365:4;39360:3;39356:14;39341:29;;39208:168;;;;:::o;39382:373::-;39468:3;39496:38;39528:5;39496:38;:::i;:::-;39550:70;39613:6;39608:3;39550:70;:::i;:::-;39543:77;;39629:65;39687:6;39682:3;39675:4;39668:5;39664:16;39629:65;:::i;:::-;39719:29;39741:6;39719:29;:::i;:::-;39714:3;39710:39;39703:46;;39472:283;39382:373;;;;:::o;39761:640::-;39956:4;39994:3;39983:9;39979:19;39971:27;;40008:71;40076:1;40065:9;40061:17;40052:6;40008:71;:::i;:::-;40089:72;40157:2;40146:9;40142:18;40133:6;40089:72;:::i;:::-;40171;40239:2;40228:9;40224:18;40215:6;40171:72;:::i;:::-;40290:9;40284:4;40280:20;40275:2;40264:9;40260:18;40253:48;40318:76;40389:4;40380:6;40318:76;:::i;:::-;40310:84;;39761:640;;;;;;;:::o;40407:141::-;40463:5;40494:6;40488:13;40479:22;;40510:32;40536:5;40510:32;:::i;:::-;40407:141;;;;:::o;40554:349::-;40623:6;40672:2;40660:9;40651:7;40647:23;40643:32;40640:119;;;40678:79;;:::i;:::-;40640:119;40798:1;40823:63;40878:7;40869:6;40858:9;40854:22;40823:63;:::i;:::-;40813:73;;40769:127;40554:349;;;;:::o;40909:180::-;40957:77;40954:1;40947:88;41054:4;41051:1;41044:15;41078:4;41075:1;41068:15;41095:185;41135:1;41152:20;41170:1;41152:20;:::i;:::-;41147:25;;41186:20;41204:1;41186:20;:::i;:::-;41181:25;;41225:1;41215:35;;41230:18;;:::i;:::-;41215:35;41272:1;41269;41265:9;41260:14;;41095:185;;;;:::o;41286:194::-;41326:4;41346:20;41364:1;41346:20;:::i;:::-;41341:25;;41380:20;41398:1;41380:20;:::i;:::-;41375:25;;41424:1;41421;41417:9;41409:17;;41448:1;41442:4;41439:11;41436:37;;;41453:18;;:::i;:::-;41436:37;41286:194;;;;:::o;41486:176::-;41518:1;41535:20;41553:1;41535:20;:::i;:::-;41530:25;;41569:20;41587:1;41569:20;:::i;:::-;41564:25;;41608:1;41598:35;;41613:18;;:::i;:::-;41598:35;41654:1;41651;41647:9;41642:14;;41486:176;;;;:::o
Swarm Source
ipfs://7496a1daea9c6e6428d87a7385b954e56270c0fa7a0331d1f906eab27ef05aae
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.