Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 510 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw | 19370160 | 647 days ago | IN | 0 ETH | 0.00524661 | ||||
| Set Approval For... | 17257445 | 944 days ago | IN | 0 ETH | 0.00189376 | ||||
| Set Approval For... | 16388635 | 1066 days ago | IN | 0 ETH | 0.00075204 | ||||
| Levelup CSHOX | 16075053 | 1110 days ago | IN | 0 ETH | 0.0006533 | ||||
| Levelup CSHOX | 16046233 | 1114 days ago | IN | 0 ETH | 0.00066642 | ||||
| Levelup CSHOX | 15772766 | 1152 days ago | IN | 0 ETH | 0.00101432 | ||||
| Levelup CSHOX | 15630907 | 1172 days ago | IN | 0 ETH | 0.00073733 | ||||
| Levelup CSHOX | 15623995 | 1173 days ago | IN | 0 ETH | 0.00048826 | ||||
| Levelup CSHOX | 15616064 | 1174 days ago | IN | 0 ETH | 0.0003275 | ||||
| Levelup CSHOX | 15614931 | 1174 days ago | IN | 0 ETH | 0.00031765 | ||||
| Levelup CSHOX | 15594879 | 1177 days ago | IN | 0 ETH | 0.00032183 | ||||
| Levelup CSHOX | 15587000 | 1178 days ago | IN | 0 ETH | 0.00031221 | ||||
| Safe Transfer Fr... | 15586613 | 1178 days ago | IN | 0 ETH | 0.00041219 | ||||
| Levelup CSHOX | 15586562 | 1178 days ago | IN | 0 ETH | 0.00036809 | ||||
| Safe Transfer Fr... | 15567515 | 1181 days ago | IN | 0 ETH | 0.00060198 | ||||
| Levelup CSHOX | 15567495 | 1181 days ago | IN | 0 ETH | 0.00030312 | ||||
| Safe Transfer Fr... | 15567205 | 1181 days ago | IN | 0 ETH | 0.00045651 | ||||
| Levelup CSHOX | 15567188 | 1181 days ago | IN | 0 ETH | 0.00026562 | ||||
| Safe Transfer Fr... | 15566761 | 1181 days ago | IN | 0 ETH | 0.00048303 | ||||
| Levelup CSHOX | 15566746 | 1181 days ago | IN | 0 ETH | 0.00023242 | ||||
| Levelup CSHOX | 15566491 | 1181 days ago | IN | 0 ETH | 0.00026492 | ||||
| Levelup CSHOX | 15560144 | 1182 days ago | IN | 0 ETH | 0.00039185 | ||||
| Levelup CSHOX | 15560143 | 1182 days ago | IN | 0 ETH | 0.00035445 | ||||
| Levelup CSHOX | 15560141 | 1182 days ago | IN | 0 ETH | 0.00030573 | ||||
| Levelup CSHOX | 15560131 | 1182 days ago | IN | 0 ETH | 0.00028123 |
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
CSHOX
Compiler Version
v0.8.6+commit.11564f7e
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-06-20
*/
// File: contracts/Tw.sol
pragma solidity ^0.8.6;
abstract contract Tw {
function burnTWForAddress(uint256 typeId, address burnTokenAddress)
external
virtual;
function balanceOf(address account, uint256 id)
public
view
virtual
returns (uint256);
}
// 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/Address.sol
// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)
pragma solidity ^0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// 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/IERC721Enumerable.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol)
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Enumerable is IERC721 {
/**
* @dev Returns the total amount of tokens stored by the contract.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns a token ID owned by `owner` at a given `index` of its token list.
* Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);
/**
* @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
* Use along with {totalSupply} to enumerate all tokens.
*/
function tokenByIndex(uint256 index) external view returns (uint256);
}
// 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: @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/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: contracts/ERC721A.sol
pragma solidity ^0.8.0;
/**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
* the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints.
*
* Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..).
*
* Assumes the number of issuable tokens (collection size) is capped and fits in a uint128.
*
* Does not support burning tokens to address(0).
*/
contract ERC721A is
Context,
ERC165,
IERC721,
IERC721Metadata,
IERC721Enumerable
{
using Address for address;
using Strings for uint256;
struct TokenOwnership {
address addr;
uint64 startTimestamp;
}
struct AddressData {
uint128 balance;
uint128 numberMinted;
}
uint256 private currentIndex = 0;
uint256 internal immutable collectionSize;
uint256 internal immutable maxBatchSize;
// 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) private _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;
/**
* @dev
* `maxBatchSize` refers to how much a minter can mint at a time.
* `collectionSize_` refers to how many tokens are in the collection.
*/
constructor(
string memory name_,
string memory symbol_,
uint256 maxBatchSize_,
uint256 collectionSize_
) {
require(
collectionSize_ > 0,
"ERC721A: collection must have a nonzero supply"
);
require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
_name = name_;
_symbol = symbol_;
maxBatchSize = maxBatchSize_;
collectionSize = collectionSize_;
}
/**
* @dev See {IERC721Enumerable-totalSupply}.
*/
function totalSupply() public view override returns (uint256) {
return currentIndex;
}
/**
* @dev See {IERC721Enumerable-tokenByIndex}.
*/
function tokenByIndex(uint256 index) public view override returns (uint256) {
require(index < totalSupply(), "ERC721A: global index out of bounds");
return index;
}
/**
* @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
* This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first.
* It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
*/
function tokenOfOwnerByIndex(address owner, uint256 index)
public
view
override
returns (uint256)
{
require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
uint256 numMintedSoFar = totalSupply();
uint256 tokenIdsIdx = 0;
address currOwnershipAddr = address(0);
for (uint256 i = 0; i < numMintedSoFar; i++) {
TokenOwnership memory ownership = _ownerships[i];
if (ownership.addr != address(0)) {
currOwnershipAddr = ownership.addr;
}
if (currOwnershipAddr == owner) {
if (tokenIdsIdx == index) {
return i;
}
tokenIdsIdx++;
}
}
revert("ERC721A: unable to get token of owner by index");
}
/**
* @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 ||
interfaceId == type(IERC721Enumerable).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721-balanceOf}.
*/
function balanceOf(address owner) public view override returns (uint256) {
require(owner != address(0), "ERC721A: balance query for the zero address");
return uint256(_addressData[owner].balance);
}
function _numberMinted(address owner) internal view returns (uint256) {
require(
owner != address(0),
"ERC721A: number minted query for the zero address"
);
return uint256(_addressData[owner].numberMinted);
}
function ownershipOf(uint256 tokenId)
internal
view
returns (TokenOwnership memory)
{
require(_exists(tokenId), "ERC721A: owner query for nonexistent token");
uint256 lowestTokenToCheck;
if (tokenId >= maxBatchSize) {
lowestTokenToCheck = tokenId - maxBatchSize + 1;
}
for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) {
TokenOwnership memory ownership = _ownerships[curr];
if (ownership.addr != address(0)) {
return ownership;
}
}
revert("ERC721A: unable to determine the owner of token");
}
/**
* @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)
{
require(
_exists(tokenId),
"ERC721Metadata: URI query for nonexistent token"
);
string memory baseURI = _baseURI();
return
bytes(baseURI).length > 0
? string(abi.encodePacked(baseURI, tokenId.toString()))
: "";
}
/**
* @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
* token will be the concatenation of the `baseURI` and the `tokenId`. Empty
* by default, can be overriden in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return "";
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public override {
address owner = ERC721A.ownerOf(tokenId);
require(to != owner, "ERC721A: approval to current owner");
require(
_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721A: approve caller is not owner nor approved for all"
);
_approve(to, tokenId, owner);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view override returns (address) {
require(_exists(tokenId), "ERC721A: approved query for nonexistent token");
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public override {
require(operator != _msgSender(), "ERC721A: approve to caller");
_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 override {
_transfer(from, to, tokenId);
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public override {
safeTransferFrom(from, to, tokenId, "");
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory _data
) public override {
_transfer(from, to, tokenId);
require(
_checkOnERC721Received(from, to, tokenId, _data),
"ERC721A: transfer to non ERC721Receiver implementer"
);
}
/**
* @dev Returns whether `tokenId` exists.
*
* Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
*
* Tokens start existing when they are minted (`_mint`),
*/
function _exists(uint256 tokenId) internal view returns (bool) {
return tokenId < currentIndex;
}
function _safeMint(address to, uint256 quantity) internal {
_safeMint(to, quantity, "");
}
/**
* @dev Mints `quantity` tokens and transfers them to `to`.
*
* Requirements:
*
* - there must be `quantity` tokens remaining unminted in the total collection.
* - `to` cannot be the zero address.
* - `quantity` cannot be larger than the max batch size.
*
* Emits a {Transfer} event.
*/
function _safeMint(
address to,
uint256 quantity,
bytes memory _data
) internal {
uint256 startTokenId = currentIndex;
require(to != address(0), "ERC721A: mint to the zero address");
// We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering.
require(!_exists(startTokenId), "ERC721A: token already minted");
require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high");
_beforeTokenTransfers(address(0), to, startTokenId, quantity);
AddressData memory addressData = _addressData[to];
_addressData[to] = AddressData(
addressData.balance + uint128(quantity),
addressData.numberMinted + uint128(quantity)
);
_ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp));
uint256 updatedIndex = startTokenId;
for (uint256 i = 0; i < quantity; i++) {
emit Transfer(address(0), to, updatedIndex);
require(
_checkOnERC721Received(address(0), to, updatedIndex, _data),
"ERC721A: transfer to non ERC721Receiver implementer"
);
updatedIndex++;
}
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);
bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
getApproved(tokenId) == _msgSender() ||
isApprovedForAll(prevOwnership.addr, _msgSender()));
require(
isApprovedOrOwner,
"ERC721A: transfer caller is not owner nor approved"
);
require(
prevOwnership.addr == from,
"ERC721A: transfer from incorrect owner"
);
require(to != address(0), "ERC721A: transfer to the zero address");
_beforeTokenTransfers(from, to, tokenId, 1);
// Clear approvals from the previous owner
_approve(address(0), tokenId, prevOwnership.addr);
_addressData[from].balance -= 1;
_addressData[to].balance += 1;
_ownerships[tokenId] = TokenOwnership(to, 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;
if (_ownerships[nextTokenId].addr == address(0)) {
if (_exists(nextTokenId)) {
_ownerships[nextTokenId] = TokenOwnership(
prevOwnership.addr,
prevOwnership.startTimestamp
);
}
}
emit Transfer(from, to, tokenId);
_afterTokenTransfers(from, to, tokenId, 1);
}
/**
* @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);
}
uint256 public nextOwnerToExplicitlySet = 0;
/**
* @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf().
*/
function _setOwnersExplicit(uint256 quantity) internal {
uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet;
require(quantity > 0, "quantity must be nonzero");
uint256 endIndex = oldNextOwnerToSet + quantity - 1;
if (endIndex > collectionSize - 1) {
endIndex = collectionSize - 1;
}
// We know if the last one in the group exists, all in the group exist, due to serial ordering.
require(_exists(endIndex), "not enough minted yet for this cleanup");
for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) {
if (_ownerships[i].addr == address(0)) {
TokenOwnership memory ownership = ownershipOf(i);
_ownerships[i] = TokenOwnership(
ownership.addr,
ownership.startTimestamp
);
}
}
nextOwnerToExplicitlySet = endIndex + 1;
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
* The call is not executed if the target address is not a contract.
*
* @param from address representing the previous owner of the given token ID
* @param to target address that will receive the tokens
* @param tokenId uint256 ID of the token to be transferred
* @param _data bytes optional data to send along with the call
* @return bool whether the call correctly returned the expected magic value
*/
function _checkOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory _data
) private returns (bool) {
if (to.isContract()) {
try
IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data)
returns (bytes4 retval) {
return retval == IERC721Receiver(to).onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert("ERC721A: transfer to non ERC721Receiver implementer");
} else {
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
/**
* @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
*
* 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`.
*/
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.
*
* 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` and `to` are never both zero.
*/
function _afterTokenTransfers(
address from,
address to,
uint256 startTokenId,
uint256 quantity
) internal virtual {}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev 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);
}
}
// File: contracts/CSHOX.sol
// CSHOX by Echelon Cipher
// Website: https://www.cshox.com/
// Twitter: https://twitter.com/cshox_co
// Discord: https://discord.gg/cshox
pragma solidity ^0.8.0;
contract CSHOX is Ownable, ERC721A, ReentrancyGuard {
string public baseURI = "https://asset.echeloncipher.xyz/place/";
string public PROVENANCE;
bool public isSaleActive;
bool public isTWActive;
uint256 public itemPrice = 0.1 ether;
uint256 public immutable maxSupply = 3690;
uint256 public immutable maxPerAddressDuringMint;
Tw private immutable timewarp;
constructor(
uint256 maxBatchSize_,
uint256 maxSupply_,
address TimeWarpAddress
) ERC721A("CSHOX", "CSHOX", maxBatchSize_, maxSupply_) {
maxPerAddressDuringMint = maxBatchSize_;
timewarp = Tw(TimeWarpAddress);
}
// CHOX level
mapping(uint => uint) public CSHOXLevel;
event levelup(
address from,
uint tokenId,
uint level
);
function levelupCSHOX(uint tokenId, uint8 TimeWarpTypes)
external
{
require(isTWActive, "Time Warp is not active");
require(
ownerOf(tokenId) == msg.sender,
"Must own the CSHOX you are attempting to level up"
);
if (CSHOXLevel[tokenId] >= 1){
require(
timewarp.balanceOf(msg.sender, TimeWarpTypes) > 0,
"Must own at least one of the Time Warps to level up"
);
timewarp.burnTWForAddress(TimeWarpTypes, msg.sender);
}
CSHOXLevel[tokenId] += 1;
emit levelup(
msg.sender,
tokenId,
CSHOXLevel[tokenId]
);
}
modifier callerIsUser() {
require(tx.origin == msg.sender, "The caller is another contract");
_;
}
// FREEMINT
bool public isFREElistActive;
mapping(address => bool) public onFREElist;
mapping(address => uint256) public FREElistClaimedBy;
function addToFREElist(address[] calldata addresses, bool _add)
external
onlyOwner
{
for (uint256 i = 0; i < addresses.length; i++)
onFREElist[addresses[i]] = _add;
}
// Purchase multiple NFTs at once
function purchaseFREEsaleTokens()
external
payable
callerIsUser
tokensAvailable(1)
{
require(isFREElistActive, "FREElist is not active");
require(onFREElist[msg.sender], "You are not in FREElist");
require(
FREElistClaimedBy[msg.sender] + 1 <= 1,
"Already given a free mint"
);
FREElistClaimedBy[msg.sender] += 1;
_safeMint(msg.sender, 1);
CSHOXLevel[totalSupply()] = 0;
}
function setIsFREElistActive(bool _isFREElistActive) external onlyOwner {
isFREElistActive = _isFREElistActive;
}
// OG SALE
uint256 public itemPriceOGsale = 0.10 ether;
bool public isOGlistActive;
uint256 public OGlistMaxMint = 50;
mapping(address => bool) public onOGlist;
mapping(address => uint256) public OGlistClaimedBy;
function addToOGlist(address[] calldata addresses, bool _add)
external
onlyOwner
{
for (uint256 i = 0; i < addresses.length; i++)
onOGlist[addresses[i]] = _add;
}
// Purchase multiple NFTs at once
function purchaseOGsaleTokens(uint256 _howMany)
external
payable
callerIsUser
tokensAvailable(_howMany)
{
require(isOGlistActive, "OGlist is not active");
require(onOGlist[msg.sender], "You are not in OGlist");
require(
OGlistClaimedBy[msg.sender] + _howMany <= OGlistMaxMint,
"Purchase exceeds max allowed"
);
require(_howMany > 0 && _howMany <= OGlistMaxMint, "Mint at least 1 token and not more than allowed.");
require(
msg.value >= _howMany * itemPriceOGsale,
"Try to send more ETH"
);
OGlistClaimedBy[msg.sender] += _howMany;
_safeMint(msg.sender, _howMany);
CSHOXLevel[totalSupply()] = 0;
refundIfOver(itemPriceOGsale * _howMany);
}
// set limit of OGlist
function setOGlistMaxMint(uint256 _OGlistMaxMint) external onlyOwner {
OGlistMaxMint = _OGlistMaxMint;
}
// Change presale price in case of ETH price changes too much
function setPriceOGsale(uint256 _itemPriceOGsale) external onlyOwner {
itemPriceOGsale = _itemPriceOGsale;
}
function setIsOGlistActive(bool _isOGlistActive) external onlyOwner {
isOGlistActive = _isOGlistActive;
}
// PRESALE
uint256 public itemPricePresale = 0.08 ether;
bool public isAllowlistActive;
uint256 public allowlistMaxMint = 3;
mapping(address => bool) public onAllowlist;
mapping(address => uint256) public allowlistClaimedBy;
function addToAllowlist(address[] calldata addresses, bool _add)
external
onlyOwner
{
for (uint256 i = 0; i < addresses.length; i++)
onAllowlist[addresses[i]] = _add;
}
// Purchase multiple NFTs at once
function purchasePresaleTokens(uint256 _howMany)
external
payable
callerIsUser
tokensAvailable(_howMany)
{
require(isAllowlistActive, "Allowlist is not active");
require(onAllowlist[msg.sender], "You are not in allowlist");
require(
allowlistClaimedBy[msg.sender] + _howMany <= allowlistMaxMint,
"Purchase exceeds max allowed"
);
require(_howMany > 0 && _howMany <= allowlistMaxMint, "Mint at least 1 token and not more than allowed.");
require(
msg.value >= _howMany * itemPricePresale,
"Try to send more ETH"
);
allowlistClaimedBy[msg.sender] += _howMany;
_safeMint(msg.sender, _howMany);
CSHOXLevel[totalSupply()] = 0;
refundIfOver(itemPricePresale * _howMany);
}
// set limit of allowlist
function setAllowlistMaxMint(uint256 _allowlistMaxMint) external onlyOwner {
allowlistMaxMint = _allowlistMaxMint;
}
// Change presale price in case of ETH price changes too much
function setPricePresale(uint256 _itemPricePresale) external onlyOwner {
itemPricePresale = _itemPricePresale;
}
function setIsAllowlistActive(bool _isAllowlistActive) external onlyOwner {
isAllowlistActive = _isAllowlistActive;
}
// PUBLIC SALE
// Purchase multiple NFTs at once
function purchaseTokens(uint256 _howMany)
external
payable
callerIsUser
tokensAvailable(_howMany)
{
require(isSaleActive, "Sale is not active");
require(_howMany > 0 && _howMany <= 10, "Mint min 1, max 10");
require(msg.value >= _howMany * itemPrice, "Try to send more ETH");
_safeMint(msg.sender, _howMany);
CSHOXLevel[totalSupply()] = 0;
refundIfOver(itemPrice * _howMany);
}
// Change price in case of ETH price changes too much
function setPrice(uint256 _newPrice) external onlyOwner {
itemPrice = _newPrice;
}
function setSaleActive(bool _isSaleActive) external onlyOwner {
isSaleActive = _isSaleActive;
}
function setTWActive(bool _isTWActive) external onlyOwner {
isTWActive = _isTWActive;
}
function setBaseURI(string memory __baseURI) external onlyOwner {
baseURI = __baseURI;
}
// Owner can withdraw from here
function withdraw() external onlyOwner nonReentrant {
(bool success, ) = msg.sender.call{value: address(this).balance}("");
require(success, "Transfer failed.");
}
// AIRDROP
// Send NFTs to a list of addresses
function giftNftToList(address[] calldata _sendNftsTo, uint256 _howMany)
external
onlyOwner
tokensAvailable(_sendNftsTo.length)
{
for (uint256 i = 0; i < _sendNftsTo.length; i++){
_safeMint(_sendNftsTo[i], _howMany);
CSHOXLevel[totalSupply()] = 0;
}
}
// Send NFTs to a single address
function giftNftToAddress(address _sendNftsTo, uint256 _howMany)
external
onlyOwner
tokensAvailable(_howMany)
{
_safeMint(_sendNftsTo, _howMany);
CSHOXLevel[totalSupply()] = 0;
}
function tokensRemaining() public view returns (uint256) {
return maxSupply - totalSupply();
}
function _baseURI() internal view override returns (string memory) {
return baseURI;
}
function walletOfOwner(address _owner)
public
view
returns (uint256[] memory)
{
uint256 ownerTokenCount = balanceOf(_owner);
uint256[] memory tokenIds = new uint256[](ownerTokenCount);
for (uint256 i; i < ownerTokenCount; i++)
tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
return tokenIds;
}
modifier tokensAvailable(uint256 _howMany) {
require(_howMany <= tokensRemaining(), "Try minting less tokens");
_;
}
function refundIfOver(uint256 price) private {
require(msg.value >= price, "Need to send more ETH.");
if (msg.value > price) {
payable(msg.sender).transfer(msg.value - price);
}
}
function numberMinted(address owner) public view returns (uint256) {
return _numberMinted(owner);
}
// WHITELISTING FOR STAKING
// tokenId => staked (yes or no)
mapping(address => bool) public whitelisted;
// add / remove from whitelist who can stake / unstake
function addToWhitelist(address _address, bool _add) external onlyOwner {
whitelisted[_address] = _add;
}
modifier onlyWhitelisted() {
require(whitelisted[msg.sender], "Caller is not whitelisted");
_;
}
// STAKING METHOD
mapping(uint256 => bool) public staked;
function _beforeTokenTransfers(
address,
address,
uint256 startTokenId,
uint256 quantity
) internal view override {
for (uint256 i = startTokenId; i < startTokenId + quantity; i++)
require(!staked[i], "Unstake tokenId it to transfer");
}
// stake / unstake nfts
function stakeNfts(uint256[] calldata _tokenIds, bool _stake)
external
onlyWhitelisted
{
for (uint256 i = 0; i < _tokenIds.length; i++)
staked[_tokenIds[i]] = _stake;
}
function setProvenance(string memory provenance) public onlyOwner {
PROVENANCE = provenance;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"uint256","name":"maxBatchSize_","type":"uint256"},{"internalType":"uint256","name":"maxSupply_","type":"uint256"},{"internalType":"address","name":"TimeWarpAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"level","type":"uint256"}],"name":"levelup","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"CSHOXLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"FREElistClaimedBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"OGlistClaimedBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OGlistMaxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROVENANCE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"_add","type":"bool"}],"name":"addToAllowlist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"_add","type":"bool"}],"name":"addToFREElist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"_add","type":"bool"}],"name":"addToOGlist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_add","type":"bool"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowlistClaimedBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowlistMaxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sendNftsTo","type":"address"},{"internalType":"uint256","name":"_howMany","type":"uint256"}],"name":"giftNftToAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_sendNftsTo","type":"address[]"},{"internalType":"uint256","name":"_howMany","type":"uint256"}],"name":"giftNftToList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isAllowlistActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFREElistActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOGlistActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTWActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"itemPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"itemPriceOGsale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"itemPricePresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint8","name":"TimeWarpTypes","type":"uint8"}],"name":"levelupCSHOX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxPerAddressDuringMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"onAllowlist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"onFREElist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"onOGlist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"purchaseFREEsaleTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_howMany","type":"uint256"}],"name":"purchaseOGsaleTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_howMany","type":"uint256"}],"name":"purchasePresaleTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_howMany","type":"uint256"}],"name":"purchaseTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allowlistMaxMint","type":"uint256"}],"name":"setAllowlistMaxMint","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":"string","name":"__baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isAllowlistActive","type":"bool"}],"name":"setIsAllowlistActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isFREElistActive","type":"bool"}],"name":"setIsFREElistActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isOGlistActive","type":"bool"}],"name":"setIsOGlistActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_OGlistMaxMint","type":"uint256"}],"name":"setOGlistMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_itemPriceOGsale","type":"uint256"}],"name":"setPriceOGsale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_itemPricePresale","type":"uint256"}],"name":"setPricePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"provenance","type":"string"}],"name":"setProvenance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isSaleActive","type":"bool"}],"name":"setSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isTWActive","type":"bool"}],"name":"setTWActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"bool","name":"_stake","type":"bool"}],"name":"stakeNfts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"staked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"tokensRemaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60006001819055600855610180604052602661012081815290620042256101403980516200003691600a9160209091019062000269565b5067016345785d8a0000600d819055610e6a60c052601255603260145567011c37937e08000060175560036019553480156200007157600080fd5b506040516200424b3803806200424b83398101604081905262000094916200030f565b60405180604001604052806005815260200164086a6909eb60db1b81525060405180604001604052806005815260200164086a6909eb60db1b8152508484620000ec620000e66200021560201b60201c565b62000219565b60008111620001595760405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060448201526d6e6f6e7a65726f20737570706c7960901b60648201526084015b60405180910390fd5b60008211620001bb5760405162461bcd60e51b815260206004820152602760248201527f455243373231413a206d61782062617463682073697a65206d757374206265206044820152666e6f6e7a65726f60c81b606482015260840162000150565b8351620001d090600290602087019062000269565b508251620001e690600390602086019062000269565b5060a0919091526080525050600160095560e0929092525060601b6001600160601b0319166101005262000394565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054620002779062000357565b90600052602060002090601f0160209004810192826200029b5760008555620002e6565b82601f10620002b657805160ff1916838001178555620002e6565b82800160010185558215620002e6579182015b82811115620002e6578251825591602001919060010190620002c9565b50620002f4929150620002f8565b5090565b5b80821115620002f45760008155600101620002f9565b6000806000606084860312156200032557600080fd5b83516020850151604086015191945092506001600160a01b03811681146200034c57600080fd5b809150509250925092565b600181811c908216806200036c57607f821691505b602082108114156200038e57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e0516101005160601c613e30620003f5600039600081816121a401526122ac0152600061096f015260008181610b4801526124ed015260008181612dbe01528181612de801526132aa015260005050613e306000f3fe6080604052600436106104105760003560e01c8063715018a61161021e578063c8b0812511610123578063dfe0a61d116100ab578063ea4a2ebc1161007a578063ea4a2ebc14610cb5578063efc8e9d614610cbd578063f0649ce814610cdd578063f2fde38b14610cf3578063ffe630b514610d1357600080fd5b8063dfe0a61d14610c06578063e8966e3814610c1c578063e985e9c514610c4c578063e9ec3f1a14610c9557600080fd5b8063d7224ba0116100f2578063d7224ba014610b6a578063d936547e14610b80578063dac6db1c14610bb0578063dbf7de3814610bc6578063dc33e68114610be657600080fd5b8063c8b0812514610ada578063c8c2141414610aef578063d2d515cc14610b1c578063d5abeb0114610b3657600080fd5b806395d89b41116101a6578063b02af89b11610175578063b02af89b14610a44578063b4cdf92714610a64578063b88d4fde14610a7a578063bc93233f14610a9a578063c87b56dd14610aba57600080fd5b806395d89b41146109cf578063a22cb465146109e4578063a2e5c7a014610a04578063ae46e25214610a2457600080fd5b8063812326c8116101ed578063812326c814610910578063841718a61461093d5780638bc35c2f1461095d5780638da5cb5b1461099157806391b7f5ed146109af57600080fd5b8063715018a61461089857806374097a9d146108ad5780637aae9c19146108dd5780637b97008d146108fd57600080fd5b80632fdcc203116103245780635a94133c116102ac5780636352211e1161027b5780636352211e146108015780636373a6b1146108215780636c0360eb146108365780636c2f347c1461084b57806370a082311461087857600080fd5b80635a94133c146107725780635e1bef32146107925780635f563b0e146107c257806363100b45146107e157600080fd5b80634f6ccce7116102f35780634f6ccce7146106cb5780635215bccd146106eb57806355f804b31461070b578063564566a81461072b57806357858ce81461074557600080fd5b80632fdcc203146106565780633ccfd60b1461066957806342842e0e1461067e578063438b63001461069e57600080fd5b80630b6daef8116103a7578063199d262711610376578063199d2627146105ac5780631c301577146105c657806323b872dd146105f65780632f0af8e1146106165780632f745c591461063657600080fd5b80630b6daef8146105335780630b919f541461055757806318160ddd14610577578063193bbe461461058c57600080fd5b806307f7bf26116103e357806307f7bf26146104ae578063081812fc146104c8578063095ea7b3146105005780630a2ed1091461052057600080fd5b806301ffc9a714610415578063051bf4201461044a57806306fdde031461046c57806307d6f2cd1461048e575b600080fd5b34801561042157600080fd5b506104356104303660046138e6565b610d33565b60405190151581526020015b60405180910390f35b34801561045657600080fd5b5061046a610465366004613880565b610da0565b005b34801561047857600080fd5b50610481610e6f565b6040516104419190613aac565b34801561049a57600080fd5b5061046a6104a936600461382d565b610f01565b3480156104ba57600080fd5b50600f546104359060ff1681565b3480156104d457600080fd5b506104e86104e3366004613968565b610fa2565b6040516001600160a01b039091168152602001610441565b34801561050c57600080fd5b5061046a61051b366004613803565b61102d565b61046a61052e366004613968565b611145565b34801561053f57600080fd5b5061054960125481565b604051908152602001610441565b34801561056357600080fd5b5061046a61057236600461382d565b61136d565b34801561058357600080fd5b50600154610549565b34801561059857600080fd5b5061046a6105a7366004613968565b611408565b3480156105b857600080fd5b506013546104359060ff1681565b3480156105d257600080fd5b506104356105e13660046136d4565b60106020526000908152604090205460ff1681565b34801561060257600080fd5b5061046a610611366004613722565b611437565b34801561062257600080fd5b5061046a6106313660046138cb565b611442565b34801561064257600080fd5b50610549610651366004613803565b61147f565b61046a610664366004613968565b6115f7565b34801561067557600080fd5b5061046a611805565b34801561068a57600080fd5b5061046a610699366004613722565b61191a565b3480156106aa57600080fd5b506106be6106b93660046136d4565b611935565b6040516104419190613a68565b3480156106d757600080fd5b506105496106e6366004613968565b6119d6565b3480156106f757600080fd5b5061046a610706366004613968565b611a3f565b34801561071757600080fd5b5061046a610726366004613920565b611a6e565b34801561073757600080fd5b50600c546104359060ff1681565b34801561075157600080fd5b506105496107603660046136d4565b60116020526000908152604090205481565b34801561077e57600080fd5b5061046a61078d366004613968565b611aab565b34801561079e57600080fd5b506104356107ad366004613968565b601d6020526000908152604090205460ff1681565b3480156107ce57600080fd5b50600c5461043590610100900460ff1681565b3480156107ed57600080fd5b5061046a6107fc36600461382d565b611ada565b34801561080d57600080fd5b506104e861081c366004613968565b611b75565b34801561082d57600080fd5b50610481611b87565b34801561084257600080fd5b50610481611c15565b34801561085757600080fd5b506105496108663660046136d4565b60166020526000908152604090205481565b34801561088457600080fd5b506105496108933660046136d4565b611c22565b3480156108a457600080fd5b5061046a611cb3565b3480156108b957600080fd5b506104356108c83660046136d4565b601a6020526000908152604090205460ff1681565b3480156108e957600080fd5b5061046a6108f8366004613968565b611ce9565b61046a61090b366004613968565b611d18565b34801561091c57600080fd5b5061054961092b3660046136d4565b601b6020526000908152604090205481565b34801561094957600080fd5b5061046a6109583660046138cb565b611e60565b34801561096957600080fd5b506105497f000000000000000000000000000000000000000000000000000000000000000081565b34801561099d57600080fd5b506000546001600160a01b03166104e8565b3480156109bb57600080fd5b5061046a6109ca366004613968565b611e9d565b3480156109db57600080fd5b50610481611ecc565b3480156109f057600080fd5b5061046a6109ff3660046137d9565b611edb565b348015610a1057600080fd5b5061046a610a1f36600461382d565b611fa0565b348015610a3057600080fd5b5061046a610a3f3660046138cb565b612060565b348015610a5057600080fd5b5061046a610a5f36600461399a565b61209d565b348015610a7057600080fd5b5061054960175481565b348015610a8657600080fd5b5061046a610a9536600461375e565b612387565b348015610aa657600080fd5b5061046a610ab53660046137d9565b6123ba565b348015610ac657600080fd5b50610481610ad5366004613968565b61240f565b348015610ae657600080fd5b506105496124dc565b348015610afb57600080fd5b50610549610b0a366004613968565b600e6020526000908152604090205481565b348015610b2857600080fd5b506018546104359060ff1681565b348015610b4257600080fd5b506105497f000000000000000000000000000000000000000000000000000000000000000081565b348015610b7657600080fd5b5061054960085481565b348015610b8c57600080fd5b50610435610b9b3660046136d4565b601c6020526000908152604090205460ff1681565b348015610bbc57600080fd5b50610549600d5481565b348015610bd257600080fd5b5061046a610be13660046138cb565b612516565b348015610bf257600080fd5b50610549610c013660046136d4565b612553565b348015610c1257600080fd5b5061054960145481565b348015610c2857600080fd5b50610435610c373660046136d4565b60156020526000908152604090205460ff1681565b348015610c5857600080fd5b50610435610c673660046136ef565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b348015610ca157600080fd5b5061046a610cb03660046138cb565b61255e565b61046a6125a2565b348015610cc957600080fd5b5061046a610cd8366004613803565b612753565b348015610ce957600080fd5b5061054960195481565b348015610cff57600080fd5b5061046a610d0e3660046136d4565b6127d4565b348015610d1f57600080fd5b5061046a610d2e366004613920565b61286f565b60006001600160e01b031982166380ac58cd60e01b1480610d6457506001600160e01b03198216635b5e139f60e01b145b80610d7f57506001600160e01b0319821663780e9d6360e01b145b80610d9a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000546001600160a01b03163314610dd35760405162461bcd60e51b8152600401610dca90613bab565b60405180910390fd5b81610ddc6124dc565b811115610dfb5760405162461bcd60e51b8152600401610dca90613abf565b60005b83811015610e6857610e36858583818110610e1b57610e1b613db8565b9050602002016020810190610e3091906136d4565b846128ac565b6000600e6000610e4560015490565b815260208101919091526040016000205580610e6081613d5d565b915050610dfe565b5050505050565b606060028054610e7e90613d22565b80601f0160208091040260200160405190810160405280929190818152602001828054610eaa90613d22565b8015610ef75780601f10610ecc57610100808354040283529160200191610ef7565b820191906000526020600020905b815481529060010190602001808311610eda57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610f2b5760405162461bcd60e51b8152600401610dca90613bab565b60005b82811015610f9c578160106000868685818110610f4d57610f4d613db8565b9050602002016020810190610f6291906136d4565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610f9481613d5d565b915050610f2e565b50505050565b6000610faf826001541190565b6110115760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b6064820152608401610dca565b506000908152600660205260409020546001600160a01b031690565b600061103882611b75565b9050806001600160a01b0316836001600160a01b031614156110a75760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b6064820152608401610dca565b336001600160a01b03821614806110c357506110c38133610c67565b6111355760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006064820152608401610dca565b6111408383836128c6565b505050565b3233146111645760405162461bcd60e51b8152600401610dca90613b74565b8061116d6124dc565b81111561118c5760405162461bcd60e51b8152600401610dca90613abf565b60185460ff166111de5760405162461bcd60e51b815260206004820152601760248201527f416c6c6f776c697374206973206e6f74206163746976650000000000000000006044820152606401610dca565b336000908152601a602052604090205460ff1661123d5760405162461bcd60e51b815260206004820152601860248201527f596f7520617265206e6f7420696e20616c6c6f776c69737400000000000000006044820152606401610dca565b601954336000908152601b602052604090205461125b908490613c55565b11156112a95760405162461bcd60e51b815260206004820152601c60248201527f50757263686173652065786365656473206d617820616c6c6f776564000000006044820152606401610dca565b6000821180156112bb57506019548211155b6112d75760405162461bcd60e51b8152600401610dca90613b24565b6017546112e49083613c81565b3410156113035760405162461bcd60e51b8152600401610dca90613af6565b336000908152601b602052604081208054849290611322908490613c55565b90915550611332905033836128ac565b6000600e600061134160015490565b815260200190815260200160002081905550611369826017546113649190613c81565b612922565b5050565b6000546001600160a01b031633146113975760405162461bcd60e51b8152600401610dca90613bab565b60005b82811015610f9c5781601560008686858181106113b9576113b9613db8565b90506020020160208101906113ce91906136d4565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061140081613d5d565b91505061139a565b6000546001600160a01b031633146114325760405162461bcd60e51b8152600401610dca90613bab565b601255565b6111408383836129a9565b6000546001600160a01b0316331461146c5760405162461bcd60e51b8152600401610dca90613bab565b600f805460ff1916911515919091179055565b600061148a83611c22565b82106114e35760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610dca565b60006114ee60015490565b905060008060005b83811015611597576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b0316918301919091521561154857805192505b876001600160a01b0316836001600160a01b03161415611584578684141561157657509350610d9a92505050565b8361158081613d5d565b9450505b508061158f81613d5d565b9150506114f6565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b6064820152608401610dca565b3233146116165760405162461bcd60e51b8152600401610dca90613b74565b8061161f6124dc565b81111561163e5760405162461bcd60e51b8152600401610dca90613abf565b60135460ff166116875760405162461bcd60e51b81526020600482015260146024820152734f476c697374206973206e6f742061637469766560601b6044820152606401610dca565b3360009081526015602052604090205460ff166116de5760405162461bcd60e51b8152602060048201526015602482015274165bdd48185c99481b9bdd081a5b8813d1db1a5cdd605a1b6044820152606401610dca565b601454336000908152601660205260409020546116fc908490613c55565b111561174a5760405162461bcd60e51b815260206004820152601c60248201527f50757263686173652065786365656473206d617820616c6c6f776564000000006044820152606401610dca565b60008211801561175c57506014548211155b6117785760405162461bcd60e51b8152600401610dca90613b24565b6012546117859083613c81565b3410156117a45760405162461bcd60e51b8152600401610dca90613af6565b33600090815260166020526040812080548492906117c3908490613c55565b909155506117d3905033836128ac565b6000600e60006117e260015490565b815260200190815260200160002081905550611369826012546113649190613c81565b6000546001600160a01b0316331461182f5760405162461bcd60e51b8152600401610dca90613bab565b600260095414156118825760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610dca565b6002600955604051600090339047908381818185875af1925050503d80600081146118c9576040519150601f19603f3d011682016040523d82523d6000602084013e6118ce565b606091505b50509050806119125760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610dca565b506001600955565b61114083838360405180602001604052806000815250612387565b6060600061194283611c22565b90506000816001600160401b0381111561195e5761195e613dce565b604051908082528060200260200182016040528015611987578160200160208202803683370190505b50905060005b828110156119ce5761199f858261147f565b8282815181106119b1576119b1613db8565b6020908102919091010152806119c681613d5d565b91505061198d565b509392505050565b60006119e160015490565b8210611a3b5760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b6064820152608401610dca565b5090565b6000546001600160a01b03163314611a695760405162461bcd60e51b8152600401610dca90613bab565b601955565b6000546001600160a01b03163314611a985760405162461bcd60e51b8152600401610dca90613bab565b805161136990600a906020840190613558565b6000546001600160a01b03163314611ad55760405162461bcd60e51b8152600401610dca90613bab565b601755565b6000546001600160a01b03163314611b045760405162461bcd60e51b8152600401610dca90613bab565b60005b82811015610f9c5781601a6000868685818110611b2657611b26613db8565b9050602002016020810190611b3b91906136d4565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611b6d81613d5d565b915050611b07565b6000611b8082612d3c565b5192915050565b600b8054611b9490613d22565b80601f0160208091040260200160405190810160405280929190818152602001828054611bc090613d22565b8015611c0d5780601f10611be257610100808354040283529160200191611c0d565b820191906000526020600020905b815481529060010190602001808311611bf057829003601f168201915b505050505081565b600a8054611b9490613d22565b60006001600160a01b038216611c8e5760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b6064820152608401610dca565b506001600160a01b03166000908152600560205260409020546001600160801b031690565b6000546001600160a01b03163314611cdd5760405162461bcd60e51b8152600401610dca90613bab565b611ce76000612ee5565b565b6000546001600160a01b03163314611d135760405162461bcd60e51b8152600401610dca90613bab565b601455565b323314611d375760405162461bcd60e51b8152600401610dca90613b74565b80611d406124dc565b811115611d5f5760405162461bcd60e51b8152600401610dca90613abf565b600c5460ff16611da65760405162461bcd60e51b815260206004820152601260248201527153616c65206973206e6f742061637469766560701b6044820152606401610dca565b600082118015611db75750600a8211155b611df85760405162461bcd60e51b815260206004820152601260248201527104d696e74206d696e20312c206d61782031360741b6044820152606401610dca565b600d54611e059083613c81565b341015611e245760405162461bcd60e51b8152600401610dca90613af6565b611e2e33836128ac565b6000600e6000611e3d60015490565b81526020019081526020016000208190555061136982600d546113649190613c81565b6000546001600160a01b03163314611e8a5760405162461bcd60e51b8152600401610dca90613bab565b600c805460ff1916911515919091179055565b6000546001600160a01b03163314611ec75760405162461bcd60e51b8152600401610dca90613bab565b600d55565b606060038054610e7e90613d22565b6001600160a01b038216331415611f345760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c65720000000000006044820152606401610dca565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b336000908152601c602052604090205460ff16611fff5760405162461bcd60e51b815260206004820152601960248201527f43616c6c6572206973206e6f742077686974656c6973746564000000000000006044820152606401610dca565b60005b82811015610f9c5781601d600086868581811061202157612021613db8565b90506020020135815260200190815260200160002060006101000a81548160ff021916908315150217905550808061205890613d5d565b915050612002565b6000546001600160a01b0316331461208a5760405162461bcd60e51b8152600401610dca90613bab565b6018805460ff1916911515919091179055565b600c54610100900460ff166120f45760405162461bcd60e51b815260206004820152601760248201527f54696d652057617270206973206e6f74206163746976650000000000000000006044820152606401610dca565b336120fe83611b75565b6001600160a01b03161461216e5760405162461bcd60e51b815260206004820152603160248201527f4d757374206f776e20746865204353484f5820796f752061726520617474656d60448201527007074696e6720746f206c6576656c20757607c1b6064820152608401610dca565b6000828152600e602052604090205460011161231157604051627eeac760e11b815233600482015260ff821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169062fdd58e9060440160206040518083038186803b1580156121ed57600080fd5b505afa158015612201573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122259190613981565b1161228e5760405162461bcd60e51b815260206004820152603360248201527f4d757374206f776e206174206c65617374206f6e65206f66207468652054696d60448201527206520576172707320746f206c6576656c20757606c1b6064820152608401610dca565b6040516395afc75360e01b815260ff821660048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906395afc75390604401600060405180830381600087803b1580156122f857600080fd5b505af115801561230c573d6000803e3d6000fd5b505050505b6000828152600e60205260408120805460019290612330908490613c55565b90915550506000828152600e60209081526040918290205482513381529182018590528183015290517fb9f4ec7002f89fc2fe4165578226f8b5dc6a4ccbf6bf5b54dca3160d6600cb5d9181900360600190a15050565b6123928484846129a9565b61239e84848484612f35565b610f9c5760405162461bcd60e51b8152600401610dca90613be0565b6000546001600160a01b031633146123e45760405162461bcd60e51b8152600401610dca90613bab565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b606061241c826001541190565b6124805760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610dca565b600061248a613043565b905060008151116124aa57604051806020016040528060008152506124d5565b806124b484613052565b6040516020016124c59291906139fc565b6040516020818303038152906040525b9392505050565b60006124e760015490565b612511907f0000000000000000000000000000000000000000000000000000000000000000613cc8565b905090565b6000546001600160a01b031633146125405760405162461bcd60e51b8152600401610dca90613bab565b6013805460ff1916911515919091179055565b6000610d9a8261314f565b6000546001600160a01b031633146125885760405162461bcd60e51b8152600401610dca90613bab565b600c80549115156101000261ff0019909216919091179055565b3233146125c15760405162461bcd60e51b8152600401610dca90613b74565b60016125cb6124dc565b8111156125ea5760405162461bcd60e51b8152600401610dca90613abf565b600f5460ff166126355760405162461bcd60e51b8152602060048201526016602482015275465245456c697374206973206e6f742061637469766560501b6044820152606401610dca565b3360009081526010602052604090205460ff166126945760405162461bcd60e51b815260206004820152601760248201527f596f7520617265206e6f7420696e20465245456c6973740000000000000000006044820152606401610dca565b336000908152601160205260409020546001906126b19082613c55565b11156126ff5760405162461bcd60e51b815260206004820152601960248201527f416c726561647920676976656e20612066726565206d696e74000000000000006044820152606401610dca565b33600090815260116020526040812080546001929061271f908490613c55565b9091555061273090503360016128ac565b6000600e600061273f60015490565b815260208101919091526040016000205550565b6000546001600160a01b0316331461277d5760405162461bcd60e51b8152600401610dca90613bab565b806127866124dc565b8111156127a55760405162461bcd60e51b8152600401610dca90613abf565b6127af83836128ac565b6000600e60006127be60015490565b8152602081019190915260400160002055505050565b6000546001600160a01b031633146127fe5760405162461bcd60e51b8152600401610dca90613bab565b6001600160a01b0381166128635760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610dca565b61286c81612ee5565b50565b6000546001600160a01b031633146128995760405162461bcd60e51b8152600401610dca90613bab565b805161136990600b906020840190613558565b6113698282604051806020016040528060008152506131ed565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b8034101561296b5760405162461bcd60e51b81526020600482015260166024820152752732b2b2103a379039b2b7321036b7b9329022aa241760511b6044820152606401610dca565b8034111561286c57336108fc6129818334613cc8565b6040518115909202916000818181858888f19350505050158015611369573d6000803e3d6000fd5b60006129b482612d3c565b80519091506000906001600160a01b0316336001600160a01b031614806129eb5750336129e084610fa2565b6001600160a01b0316145b806129fd575081516129fd9033610c67565b905080612a675760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610dca565b846001600160a01b031682600001516001600160a01b031614612adb5760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b6064820152608401610dca565b6001600160a01b038416612b3f5760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610dca565b612b4c85858560016134d4565b612b5c60008484600001516128c6565b6001600160a01b0385166000908152600560205260408120805460019290612b8e9084906001600160801b0316613ca0565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b03861660009081526005602052604081208054600194509092612bda91859116613c33565b82546001600160801b039182166101009390930a9283029190920219909116179055506040805180820182526001600160a01b0380871682526001600160401b03428116602080850191825260008981526004909152948520935184549151909216600160a01b026001600160e01b03199091169190921617179055612c61846001613c55565b6000818152600460205260409020549091506001600160a01b0316612cf257612c8b816001541190565b15612cf25760408051808201825284516001600160a01b0390811682526020808701516001600160401b039081168285019081526000878152600490935294909120925183549451909116600160a01b026001600160e01b03199094169116179190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b6040805180820190915260008082526020820152612d5b826001541190565b612dba5760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b6064820152608401610dca565b60007f00000000000000000000000000000000000000000000000000000000000000008310612e1b57612e0d7f000000000000000000000000000000000000000000000000000000000000000084613cc8565b612e18906001613c55565b90505b825b818110612e84576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b03169183019190915215612e7157949350505050565b5080612e7c81613d0b565b915050612e1d565b5060405162461bcd60e51b815260206004820152602f60248201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560448201526e1037bbb732b91037b3103a37b5b2b760891b6064820152608401610dca565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0384163b1561303757604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612f79903390899088908890600401613a2b565b602060405180830381600087803b158015612f9357600080fd5b505af1925050508015612fc3575060408051601f3d908101601f19168201909252612fc091810190613903565b60015b61301d573d808015612ff1576040519150601f19603f3d011682016040523d82523d6000602084013e612ff6565b606091505b5080516130155760405162461bcd60e51b8152600401610dca90613be0565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061303b565b5060015b949350505050565b6060600a8054610e7e90613d22565b6060816130765750506040805180820190915260018152600360fc1b602082015290565b8160005b81156130a0578061308a81613d5d565b91506130999050600a83613c6d565b915061307a565b6000816001600160401b038111156130ba576130ba613dce565b6040519080825280601f01601f1916602001820160405280156130e4576020820181803683370190505b5090505b841561303b576130f9600183613cc8565b9150613106600a86613d78565b613111906030613c55565b60f81b81838151811061312657613126613db8565b60200101906001600160f81b031916908160001a905350613148600a86613c6d565b94506130e8565b60006001600160a01b0382166131c15760405162461bcd60e51b815260206004820152603160248201527f455243373231413a206e756d626572206d696e74656420717565727920666f7260448201527020746865207a65726f206164647265737360781b6064820152608401610dca565b506001600160a01b0316600090815260056020526040902054600160801b90046001600160801b031690565b6001546001600160a01b0384166132505760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610dca565b61325b816001541190565b156132a85760405162461bcd60e51b815260206004820152601d60248201527f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006044820152606401610dca565b7f00000000000000000000000000000000000000000000000000000000000000008311156133235760405162461bcd60e51b815260206004820152602260248201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696044820152610ced60f31b6064820152608401610dca565b61333060008583866134d4565b6001600160a01b0384166000908152600560209081526040918290208251808401845290546001600160801b038082168352600160801b909104169181019190915281518083019092528051909190819061338c908790613c33565b6001600160801b031681526020018583602001516133aa9190613c33565b6001600160801b039081169091526001600160a01b0380881660008181526005602090815260408083208751978301518716600160801b029790961696909617909455845180860186529182526001600160401b034281168386019081528883526004909552948120915182549451909516600160a01b026001600160e01b031990941694909216939093179190911790915582905b858110156134c95760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461348d6000888488612f35565b6134a95760405162461bcd60e51b8152600401610dca90613be0565b816134b381613d5d565b92505080806134c190613d5d565b915050613440565b506001819055612d34565b815b6134e08284613c55565b811015610e68576000818152601d602052604090205460ff16156135465760405162461bcd60e51b815260206004820152601e60248201527f556e7374616b6520746f6b656e496420697420746f207472616e7366657200006044820152606401610dca565b8061355081613d5d565b9150506134d6565b82805461356490613d22565b90600052602060002090601f01602090048101928261358657600085556135cc565b82601f1061359f57805160ff19168380011785556135cc565b828001600101855582156135cc579182015b828111156135cc5782518255916020019190600101906135b1565b50611a3b9291505b80821115611a3b57600081556001016135d4565b60006001600160401b038084111561360257613602613dce565b604051601f8501601f19908116603f0116810190828211818310171561362a5761362a613dce565b8160405280935085815286868601111561364357600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461367457600080fd5b919050565b60008083601f84011261368b57600080fd5b5081356001600160401b038111156136a257600080fd5b6020830191508360208260051b85010111156136bd57600080fd5b9250929050565b8035801515811461367457600080fd5b6000602082840312156136e657600080fd5b6124d58261365d565b6000806040838503121561370257600080fd5b61370b8361365d565b91506137196020840161365d565b90509250929050565b60008060006060848603121561373757600080fd5b6137408461365d565b925061374e6020850161365d565b9150604084013590509250925092565b6000806000806080858703121561377457600080fd5b61377d8561365d565b935061378b6020860161365d565b92506040850135915060608501356001600160401b038111156137ad57600080fd5b8501601f810187136137be57600080fd5b6137cd878235602084016135e8565b91505092959194509250565b600080604083850312156137ec57600080fd5b6137f58361365d565b9150613719602084016136c4565b6000806040838503121561381657600080fd5b61381f8361365d565b946020939093013593505050565b60008060006040848603121561384257600080fd5b83356001600160401b0381111561385857600080fd5b61386486828701613679565b90945092506138779050602085016136c4565b90509250925092565b60008060006040848603121561389557600080fd5b83356001600160401b038111156138ab57600080fd5b6138b786828701613679565b909790965060209590950135949350505050565b6000602082840312156138dd57600080fd5b6124d5826136c4565b6000602082840312156138f857600080fd5b81356124d581613de4565b60006020828403121561391557600080fd5b81516124d581613de4565b60006020828403121561393257600080fd5b81356001600160401b0381111561394857600080fd5b8201601f8101841361395957600080fd5b61303b848235602084016135e8565b60006020828403121561397a57600080fd5b5035919050565b60006020828403121561399357600080fd5b5051919050565b600080604083850312156139ad57600080fd5b82359150602083013560ff811681146139c557600080fd5b809150509250929050565b600081518084526139e8816020860160208601613cdf565b601f01601f19169290920160200192915050565b60008351613a0e818460208801613cdf565b835190830190613a22818360208801613cdf565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613a5e908301846139d0565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613aa057835183529284019291840191600101613a84565b50909695505050505050565b6020815260006124d560208301846139d0565b60208082526017908201527f547279206d696e74696e67206c65737320746f6b656e73000000000000000000604082015260600190565b6020808252601490820152730a8e4f240e8de40e6cadcc840dadee4ca408aa8960631b604082015260600190565b60208082526030908201527f4d696e74206174206c65617374203120746f6b656e20616e64206e6f74206d6f60408201526f3932903a3430b71030b63637bbb2b21760811b606082015260800190565b6020808252601e908201527f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b60006001600160801b03808316818516808303821115613a2257613a22613d8c565b60008219821115613c6857613c68613d8c565b500190565b600082613c7c57613c7c613da2565b500490565b6000816000190483118215151615613c9b57613c9b613d8c565b500290565b60006001600160801b0383811690831681811015613cc057613cc0613d8c565b039392505050565b600082821015613cda57613cda613d8c565b500390565b60005b83811015613cfa578181015183820152602001613ce2565b83811115610f9c5750506000910152565b600081613d1a57613d1a613d8c565b506000190190565b600181811c90821680613d3657607f821691505b60208210811415613d5757634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613d7157613d71613d8c565b5060010190565b600082613d8757613d87613da2565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461286c57600080fdfea26469706673582212201b1cb6be662db4193ee5a763d3d2e532935bfe4f8cc7a947236885fa546acb5464736f6c6343000806003368747470733a2f2f61737365742e656368656c6f6e6369706865722e78797a2f706c6163652f00000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000e6a000000000000000000000000ea472d8ae694c366a9927745a09436294df002dc
Deployed Bytecode
0x6080604052600436106104105760003560e01c8063715018a61161021e578063c8b0812511610123578063dfe0a61d116100ab578063ea4a2ebc1161007a578063ea4a2ebc14610cb5578063efc8e9d614610cbd578063f0649ce814610cdd578063f2fde38b14610cf3578063ffe630b514610d1357600080fd5b8063dfe0a61d14610c06578063e8966e3814610c1c578063e985e9c514610c4c578063e9ec3f1a14610c9557600080fd5b8063d7224ba0116100f2578063d7224ba014610b6a578063d936547e14610b80578063dac6db1c14610bb0578063dbf7de3814610bc6578063dc33e68114610be657600080fd5b8063c8b0812514610ada578063c8c2141414610aef578063d2d515cc14610b1c578063d5abeb0114610b3657600080fd5b806395d89b41116101a6578063b02af89b11610175578063b02af89b14610a44578063b4cdf92714610a64578063b88d4fde14610a7a578063bc93233f14610a9a578063c87b56dd14610aba57600080fd5b806395d89b41146109cf578063a22cb465146109e4578063a2e5c7a014610a04578063ae46e25214610a2457600080fd5b8063812326c8116101ed578063812326c814610910578063841718a61461093d5780638bc35c2f1461095d5780638da5cb5b1461099157806391b7f5ed146109af57600080fd5b8063715018a61461089857806374097a9d146108ad5780637aae9c19146108dd5780637b97008d146108fd57600080fd5b80632fdcc203116103245780635a94133c116102ac5780636352211e1161027b5780636352211e146108015780636373a6b1146108215780636c0360eb146108365780636c2f347c1461084b57806370a082311461087857600080fd5b80635a94133c146107725780635e1bef32146107925780635f563b0e146107c257806363100b45146107e157600080fd5b80634f6ccce7116102f35780634f6ccce7146106cb5780635215bccd146106eb57806355f804b31461070b578063564566a81461072b57806357858ce81461074557600080fd5b80632fdcc203146106565780633ccfd60b1461066957806342842e0e1461067e578063438b63001461069e57600080fd5b80630b6daef8116103a7578063199d262711610376578063199d2627146105ac5780631c301577146105c657806323b872dd146105f65780632f0af8e1146106165780632f745c591461063657600080fd5b80630b6daef8146105335780630b919f541461055757806318160ddd14610577578063193bbe461461058c57600080fd5b806307f7bf26116103e357806307f7bf26146104ae578063081812fc146104c8578063095ea7b3146105005780630a2ed1091461052057600080fd5b806301ffc9a714610415578063051bf4201461044a57806306fdde031461046c57806307d6f2cd1461048e575b600080fd5b34801561042157600080fd5b506104356104303660046138e6565b610d33565b60405190151581526020015b60405180910390f35b34801561045657600080fd5b5061046a610465366004613880565b610da0565b005b34801561047857600080fd5b50610481610e6f565b6040516104419190613aac565b34801561049a57600080fd5b5061046a6104a936600461382d565b610f01565b3480156104ba57600080fd5b50600f546104359060ff1681565b3480156104d457600080fd5b506104e86104e3366004613968565b610fa2565b6040516001600160a01b039091168152602001610441565b34801561050c57600080fd5b5061046a61051b366004613803565b61102d565b61046a61052e366004613968565b611145565b34801561053f57600080fd5b5061054960125481565b604051908152602001610441565b34801561056357600080fd5b5061046a61057236600461382d565b61136d565b34801561058357600080fd5b50600154610549565b34801561059857600080fd5b5061046a6105a7366004613968565b611408565b3480156105b857600080fd5b506013546104359060ff1681565b3480156105d257600080fd5b506104356105e13660046136d4565b60106020526000908152604090205460ff1681565b34801561060257600080fd5b5061046a610611366004613722565b611437565b34801561062257600080fd5b5061046a6106313660046138cb565b611442565b34801561064257600080fd5b50610549610651366004613803565b61147f565b61046a610664366004613968565b6115f7565b34801561067557600080fd5b5061046a611805565b34801561068a57600080fd5b5061046a610699366004613722565b61191a565b3480156106aa57600080fd5b506106be6106b93660046136d4565b611935565b6040516104419190613a68565b3480156106d757600080fd5b506105496106e6366004613968565b6119d6565b3480156106f757600080fd5b5061046a610706366004613968565b611a3f565b34801561071757600080fd5b5061046a610726366004613920565b611a6e565b34801561073757600080fd5b50600c546104359060ff1681565b34801561075157600080fd5b506105496107603660046136d4565b60116020526000908152604090205481565b34801561077e57600080fd5b5061046a61078d366004613968565b611aab565b34801561079e57600080fd5b506104356107ad366004613968565b601d6020526000908152604090205460ff1681565b3480156107ce57600080fd5b50600c5461043590610100900460ff1681565b3480156107ed57600080fd5b5061046a6107fc36600461382d565b611ada565b34801561080d57600080fd5b506104e861081c366004613968565b611b75565b34801561082d57600080fd5b50610481611b87565b34801561084257600080fd5b50610481611c15565b34801561085757600080fd5b506105496108663660046136d4565b60166020526000908152604090205481565b34801561088457600080fd5b506105496108933660046136d4565b611c22565b3480156108a457600080fd5b5061046a611cb3565b3480156108b957600080fd5b506104356108c83660046136d4565b601a6020526000908152604090205460ff1681565b3480156108e957600080fd5b5061046a6108f8366004613968565b611ce9565b61046a61090b366004613968565b611d18565b34801561091c57600080fd5b5061054961092b3660046136d4565b601b6020526000908152604090205481565b34801561094957600080fd5b5061046a6109583660046138cb565b611e60565b34801561096957600080fd5b506105497f000000000000000000000000000000000000000000000000000000000000003281565b34801561099d57600080fd5b506000546001600160a01b03166104e8565b3480156109bb57600080fd5b5061046a6109ca366004613968565b611e9d565b3480156109db57600080fd5b50610481611ecc565b3480156109f057600080fd5b5061046a6109ff3660046137d9565b611edb565b348015610a1057600080fd5b5061046a610a1f36600461382d565b611fa0565b348015610a3057600080fd5b5061046a610a3f3660046138cb565b612060565b348015610a5057600080fd5b5061046a610a5f36600461399a565b61209d565b348015610a7057600080fd5b5061054960175481565b348015610a8657600080fd5b5061046a610a9536600461375e565b612387565b348015610aa657600080fd5b5061046a610ab53660046137d9565b6123ba565b348015610ac657600080fd5b50610481610ad5366004613968565b61240f565b348015610ae657600080fd5b506105496124dc565b348015610afb57600080fd5b50610549610b0a366004613968565b600e6020526000908152604090205481565b348015610b2857600080fd5b506018546104359060ff1681565b348015610b4257600080fd5b506105497f0000000000000000000000000000000000000000000000000000000000000e6a81565b348015610b7657600080fd5b5061054960085481565b348015610b8c57600080fd5b50610435610b9b3660046136d4565b601c6020526000908152604090205460ff1681565b348015610bbc57600080fd5b50610549600d5481565b348015610bd257600080fd5b5061046a610be13660046138cb565b612516565b348015610bf257600080fd5b50610549610c013660046136d4565b612553565b348015610c1257600080fd5b5061054960145481565b348015610c2857600080fd5b50610435610c373660046136d4565b60156020526000908152604090205460ff1681565b348015610c5857600080fd5b50610435610c673660046136ef565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b348015610ca157600080fd5b5061046a610cb03660046138cb565b61255e565b61046a6125a2565b348015610cc957600080fd5b5061046a610cd8366004613803565b612753565b348015610ce957600080fd5b5061054960195481565b348015610cff57600080fd5b5061046a610d0e3660046136d4565b6127d4565b348015610d1f57600080fd5b5061046a610d2e366004613920565b61286f565b60006001600160e01b031982166380ac58cd60e01b1480610d6457506001600160e01b03198216635b5e139f60e01b145b80610d7f57506001600160e01b0319821663780e9d6360e01b145b80610d9a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000546001600160a01b03163314610dd35760405162461bcd60e51b8152600401610dca90613bab565b60405180910390fd5b81610ddc6124dc565b811115610dfb5760405162461bcd60e51b8152600401610dca90613abf565b60005b83811015610e6857610e36858583818110610e1b57610e1b613db8565b9050602002016020810190610e3091906136d4565b846128ac565b6000600e6000610e4560015490565b815260208101919091526040016000205580610e6081613d5d565b915050610dfe565b5050505050565b606060028054610e7e90613d22565b80601f0160208091040260200160405190810160405280929190818152602001828054610eaa90613d22565b8015610ef75780601f10610ecc57610100808354040283529160200191610ef7565b820191906000526020600020905b815481529060010190602001808311610eda57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610f2b5760405162461bcd60e51b8152600401610dca90613bab565b60005b82811015610f9c578160106000868685818110610f4d57610f4d613db8565b9050602002016020810190610f6291906136d4565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610f9481613d5d565b915050610f2e565b50505050565b6000610faf826001541190565b6110115760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b6064820152608401610dca565b506000908152600660205260409020546001600160a01b031690565b600061103882611b75565b9050806001600160a01b0316836001600160a01b031614156110a75760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b6064820152608401610dca565b336001600160a01b03821614806110c357506110c38133610c67565b6111355760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006064820152608401610dca565b6111408383836128c6565b505050565b3233146111645760405162461bcd60e51b8152600401610dca90613b74565b8061116d6124dc565b81111561118c5760405162461bcd60e51b8152600401610dca90613abf565b60185460ff166111de5760405162461bcd60e51b815260206004820152601760248201527f416c6c6f776c697374206973206e6f74206163746976650000000000000000006044820152606401610dca565b336000908152601a602052604090205460ff1661123d5760405162461bcd60e51b815260206004820152601860248201527f596f7520617265206e6f7420696e20616c6c6f776c69737400000000000000006044820152606401610dca565b601954336000908152601b602052604090205461125b908490613c55565b11156112a95760405162461bcd60e51b815260206004820152601c60248201527f50757263686173652065786365656473206d617820616c6c6f776564000000006044820152606401610dca565b6000821180156112bb57506019548211155b6112d75760405162461bcd60e51b8152600401610dca90613b24565b6017546112e49083613c81565b3410156113035760405162461bcd60e51b8152600401610dca90613af6565b336000908152601b602052604081208054849290611322908490613c55565b90915550611332905033836128ac565b6000600e600061134160015490565b815260200190815260200160002081905550611369826017546113649190613c81565b612922565b5050565b6000546001600160a01b031633146113975760405162461bcd60e51b8152600401610dca90613bab565b60005b82811015610f9c5781601560008686858181106113b9576113b9613db8565b90506020020160208101906113ce91906136d4565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061140081613d5d565b91505061139a565b6000546001600160a01b031633146114325760405162461bcd60e51b8152600401610dca90613bab565b601255565b6111408383836129a9565b6000546001600160a01b0316331461146c5760405162461bcd60e51b8152600401610dca90613bab565b600f805460ff1916911515919091179055565b600061148a83611c22565b82106114e35760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610dca565b60006114ee60015490565b905060008060005b83811015611597576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b0316918301919091521561154857805192505b876001600160a01b0316836001600160a01b03161415611584578684141561157657509350610d9a92505050565b8361158081613d5d565b9450505b508061158f81613d5d565b9150506114f6565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b6064820152608401610dca565b3233146116165760405162461bcd60e51b8152600401610dca90613b74565b8061161f6124dc565b81111561163e5760405162461bcd60e51b8152600401610dca90613abf565b60135460ff166116875760405162461bcd60e51b81526020600482015260146024820152734f476c697374206973206e6f742061637469766560601b6044820152606401610dca565b3360009081526015602052604090205460ff166116de5760405162461bcd60e51b8152602060048201526015602482015274165bdd48185c99481b9bdd081a5b8813d1db1a5cdd605a1b6044820152606401610dca565b601454336000908152601660205260409020546116fc908490613c55565b111561174a5760405162461bcd60e51b815260206004820152601c60248201527f50757263686173652065786365656473206d617820616c6c6f776564000000006044820152606401610dca565b60008211801561175c57506014548211155b6117785760405162461bcd60e51b8152600401610dca90613b24565b6012546117859083613c81565b3410156117a45760405162461bcd60e51b8152600401610dca90613af6565b33600090815260166020526040812080548492906117c3908490613c55565b909155506117d3905033836128ac565b6000600e60006117e260015490565b815260200190815260200160002081905550611369826012546113649190613c81565b6000546001600160a01b0316331461182f5760405162461bcd60e51b8152600401610dca90613bab565b600260095414156118825760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610dca565b6002600955604051600090339047908381818185875af1925050503d80600081146118c9576040519150601f19603f3d011682016040523d82523d6000602084013e6118ce565b606091505b50509050806119125760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610dca565b506001600955565b61114083838360405180602001604052806000815250612387565b6060600061194283611c22565b90506000816001600160401b0381111561195e5761195e613dce565b604051908082528060200260200182016040528015611987578160200160208202803683370190505b50905060005b828110156119ce5761199f858261147f565b8282815181106119b1576119b1613db8565b6020908102919091010152806119c681613d5d565b91505061198d565b509392505050565b60006119e160015490565b8210611a3b5760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b6064820152608401610dca565b5090565b6000546001600160a01b03163314611a695760405162461bcd60e51b8152600401610dca90613bab565b601955565b6000546001600160a01b03163314611a985760405162461bcd60e51b8152600401610dca90613bab565b805161136990600a906020840190613558565b6000546001600160a01b03163314611ad55760405162461bcd60e51b8152600401610dca90613bab565b601755565b6000546001600160a01b03163314611b045760405162461bcd60e51b8152600401610dca90613bab565b60005b82811015610f9c5781601a6000868685818110611b2657611b26613db8565b9050602002016020810190611b3b91906136d4565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611b6d81613d5d565b915050611b07565b6000611b8082612d3c565b5192915050565b600b8054611b9490613d22565b80601f0160208091040260200160405190810160405280929190818152602001828054611bc090613d22565b8015611c0d5780601f10611be257610100808354040283529160200191611c0d565b820191906000526020600020905b815481529060010190602001808311611bf057829003601f168201915b505050505081565b600a8054611b9490613d22565b60006001600160a01b038216611c8e5760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b6064820152608401610dca565b506001600160a01b03166000908152600560205260409020546001600160801b031690565b6000546001600160a01b03163314611cdd5760405162461bcd60e51b8152600401610dca90613bab565b611ce76000612ee5565b565b6000546001600160a01b03163314611d135760405162461bcd60e51b8152600401610dca90613bab565b601455565b323314611d375760405162461bcd60e51b8152600401610dca90613b74565b80611d406124dc565b811115611d5f5760405162461bcd60e51b8152600401610dca90613abf565b600c5460ff16611da65760405162461bcd60e51b815260206004820152601260248201527153616c65206973206e6f742061637469766560701b6044820152606401610dca565b600082118015611db75750600a8211155b611df85760405162461bcd60e51b815260206004820152601260248201527104d696e74206d696e20312c206d61782031360741b6044820152606401610dca565b600d54611e059083613c81565b341015611e245760405162461bcd60e51b8152600401610dca90613af6565b611e2e33836128ac565b6000600e6000611e3d60015490565b81526020019081526020016000208190555061136982600d546113649190613c81565b6000546001600160a01b03163314611e8a5760405162461bcd60e51b8152600401610dca90613bab565b600c805460ff1916911515919091179055565b6000546001600160a01b03163314611ec75760405162461bcd60e51b8152600401610dca90613bab565b600d55565b606060038054610e7e90613d22565b6001600160a01b038216331415611f345760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c65720000000000006044820152606401610dca565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b336000908152601c602052604090205460ff16611fff5760405162461bcd60e51b815260206004820152601960248201527f43616c6c6572206973206e6f742077686974656c6973746564000000000000006044820152606401610dca565b60005b82811015610f9c5781601d600086868581811061202157612021613db8565b90506020020135815260200190815260200160002060006101000a81548160ff021916908315150217905550808061205890613d5d565b915050612002565b6000546001600160a01b0316331461208a5760405162461bcd60e51b8152600401610dca90613bab565b6018805460ff1916911515919091179055565b600c54610100900460ff166120f45760405162461bcd60e51b815260206004820152601760248201527f54696d652057617270206973206e6f74206163746976650000000000000000006044820152606401610dca565b336120fe83611b75565b6001600160a01b03161461216e5760405162461bcd60e51b815260206004820152603160248201527f4d757374206f776e20746865204353484f5820796f752061726520617474656d60448201527007074696e6720746f206c6576656c20757607c1b6064820152608401610dca565b6000828152600e602052604090205460011161231157604051627eeac760e11b815233600482015260ff821660248201526000907f000000000000000000000000ea472d8ae694c366a9927745a09436294df002dc6001600160a01b03169062fdd58e9060440160206040518083038186803b1580156121ed57600080fd5b505afa158015612201573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122259190613981565b1161228e5760405162461bcd60e51b815260206004820152603360248201527f4d757374206f776e206174206c65617374206f6e65206f66207468652054696d60448201527206520576172707320746f206c6576656c20757606c1b6064820152608401610dca565b6040516395afc75360e01b815260ff821660048201523360248201527f000000000000000000000000ea472d8ae694c366a9927745a09436294df002dc6001600160a01b0316906395afc75390604401600060405180830381600087803b1580156122f857600080fd5b505af115801561230c573d6000803e3d6000fd5b505050505b6000828152600e60205260408120805460019290612330908490613c55565b90915550506000828152600e60209081526040918290205482513381529182018590528183015290517fb9f4ec7002f89fc2fe4165578226f8b5dc6a4ccbf6bf5b54dca3160d6600cb5d9181900360600190a15050565b6123928484846129a9565b61239e84848484612f35565b610f9c5760405162461bcd60e51b8152600401610dca90613be0565b6000546001600160a01b031633146123e45760405162461bcd60e51b8152600401610dca90613bab565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b606061241c826001541190565b6124805760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610dca565b600061248a613043565b905060008151116124aa57604051806020016040528060008152506124d5565b806124b484613052565b6040516020016124c59291906139fc565b6040516020818303038152906040525b9392505050565b60006124e760015490565b612511907f0000000000000000000000000000000000000000000000000000000000000e6a613cc8565b905090565b6000546001600160a01b031633146125405760405162461bcd60e51b8152600401610dca90613bab565b6013805460ff1916911515919091179055565b6000610d9a8261314f565b6000546001600160a01b031633146125885760405162461bcd60e51b8152600401610dca90613bab565b600c80549115156101000261ff0019909216919091179055565b3233146125c15760405162461bcd60e51b8152600401610dca90613b74565b60016125cb6124dc565b8111156125ea5760405162461bcd60e51b8152600401610dca90613abf565b600f5460ff166126355760405162461bcd60e51b8152602060048201526016602482015275465245456c697374206973206e6f742061637469766560501b6044820152606401610dca565b3360009081526010602052604090205460ff166126945760405162461bcd60e51b815260206004820152601760248201527f596f7520617265206e6f7420696e20465245456c6973740000000000000000006044820152606401610dca565b336000908152601160205260409020546001906126b19082613c55565b11156126ff5760405162461bcd60e51b815260206004820152601960248201527f416c726561647920676976656e20612066726565206d696e74000000000000006044820152606401610dca565b33600090815260116020526040812080546001929061271f908490613c55565b9091555061273090503360016128ac565b6000600e600061273f60015490565b815260208101919091526040016000205550565b6000546001600160a01b0316331461277d5760405162461bcd60e51b8152600401610dca90613bab565b806127866124dc565b8111156127a55760405162461bcd60e51b8152600401610dca90613abf565b6127af83836128ac565b6000600e60006127be60015490565b8152602081019190915260400160002055505050565b6000546001600160a01b031633146127fe5760405162461bcd60e51b8152600401610dca90613bab565b6001600160a01b0381166128635760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610dca565b61286c81612ee5565b50565b6000546001600160a01b031633146128995760405162461bcd60e51b8152600401610dca90613bab565b805161136990600b906020840190613558565b6113698282604051806020016040528060008152506131ed565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b8034101561296b5760405162461bcd60e51b81526020600482015260166024820152752732b2b2103a379039b2b7321036b7b9329022aa241760511b6044820152606401610dca565b8034111561286c57336108fc6129818334613cc8565b6040518115909202916000818181858888f19350505050158015611369573d6000803e3d6000fd5b60006129b482612d3c565b80519091506000906001600160a01b0316336001600160a01b031614806129eb5750336129e084610fa2565b6001600160a01b0316145b806129fd575081516129fd9033610c67565b905080612a675760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610dca565b846001600160a01b031682600001516001600160a01b031614612adb5760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b6064820152608401610dca565b6001600160a01b038416612b3f5760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610dca565b612b4c85858560016134d4565b612b5c60008484600001516128c6565b6001600160a01b0385166000908152600560205260408120805460019290612b8e9084906001600160801b0316613ca0565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b03861660009081526005602052604081208054600194509092612bda91859116613c33565b82546001600160801b039182166101009390930a9283029190920219909116179055506040805180820182526001600160a01b0380871682526001600160401b03428116602080850191825260008981526004909152948520935184549151909216600160a01b026001600160e01b03199091169190921617179055612c61846001613c55565b6000818152600460205260409020549091506001600160a01b0316612cf257612c8b816001541190565b15612cf25760408051808201825284516001600160a01b0390811682526020808701516001600160401b039081168285019081526000878152600490935294909120925183549451909116600160a01b026001600160e01b03199094169116179190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b6040805180820190915260008082526020820152612d5b826001541190565b612dba5760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b6064820152608401610dca565b60007f00000000000000000000000000000000000000000000000000000000000000328310612e1b57612e0d7f000000000000000000000000000000000000000000000000000000000000003284613cc8565b612e18906001613c55565b90505b825b818110612e84576000818152600460209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b03169183019190915215612e7157949350505050565b5080612e7c81613d0b565b915050612e1d565b5060405162461bcd60e51b815260206004820152602f60248201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560448201526e1037bbb732b91037b3103a37b5b2b760891b6064820152608401610dca565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0384163b1561303757604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612f79903390899088908890600401613a2b565b602060405180830381600087803b158015612f9357600080fd5b505af1925050508015612fc3575060408051601f3d908101601f19168201909252612fc091810190613903565b60015b61301d573d808015612ff1576040519150601f19603f3d011682016040523d82523d6000602084013e612ff6565b606091505b5080516130155760405162461bcd60e51b8152600401610dca90613be0565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061303b565b5060015b949350505050565b6060600a8054610e7e90613d22565b6060816130765750506040805180820190915260018152600360fc1b602082015290565b8160005b81156130a0578061308a81613d5d565b91506130999050600a83613c6d565b915061307a565b6000816001600160401b038111156130ba576130ba613dce565b6040519080825280601f01601f1916602001820160405280156130e4576020820181803683370190505b5090505b841561303b576130f9600183613cc8565b9150613106600a86613d78565b613111906030613c55565b60f81b81838151811061312657613126613db8565b60200101906001600160f81b031916908160001a905350613148600a86613c6d565b94506130e8565b60006001600160a01b0382166131c15760405162461bcd60e51b815260206004820152603160248201527f455243373231413a206e756d626572206d696e74656420717565727920666f7260448201527020746865207a65726f206164647265737360781b6064820152608401610dca565b506001600160a01b0316600090815260056020526040902054600160801b90046001600160801b031690565b6001546001600160a01b0384166132505760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610dca565b61325b816001541190565b156132a85760405162461bcd60e51b815260206004820152601d60248201527f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006044820152606401610dca565b7f00000000000000000000000000000000000000000000000000000000000000328311156133235760405162461bcd60e51b815260206004820152602260248201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696044820152610ced60f31b6064820152608401610dca565b61333060008583866134d4565b6001600160a01b0384166000908152600560209081526040918290208251808401845290546001600160801b038082168352600160801b909104169181019190915281518083019092528051909190819061338c908790613c33565b6001600160801b031681526020018583602001516133aa9190613c33565b6001600160801b039081169091526001600160a01b0380881660008181526005602090815260408083208751978301518716600160801b029790961696909617909455845180860186529182526001600160401b034281168386019081528883526004909552948120915182549451909516600160a01b026001600160e01b031990941694909216939093179190911790915582905b858110156134c95760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461348d6000888488612f35565b6134a95760405162461bcd60e51b8152600401610dca90613be0565b816134b381613d5d565b92505080806134c190613d5d565b915050613440565b506001819055612d34565b815b6134e08284613c55565b811015610e68576000818152601d602052604090205460ff16156135465760405162461bcd60e51b815260206004820152601e60248201527f556e7374616b6520746f6b656e496420697420746f207472616e7366657200006044820152606401610dca565b8061355081613d5d565b9150506134d6565b82805461356490613d22565b90600052602060002090601f01602090048101928261358657600085556135cc565b82601f1061359f57805160ff19168380011785556135cc565b828001600101855582156135cc579182015b828111156135cc5782518255916020019190600101906135b1565b50611a3b9291505b80821115611a3b57600081556001016135d4565b60006001600160401b038084111561360257613602613dce565b604051601f8501601f19908116603f0116810190828211818310171561362a5761362a613dce565b8160405280935085815286868601111561364357600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461367457600080fd5b919050565b60008083601f84011261368b57600080fd5b5081356001600160401b038111156136a257600080fd5b6020830191508360208260051b85010111156136bd57600080fd5b9250929050565b8035801515811461367457600080fd5b6000602082840312156136e657600080fd5b6124d58261365d565b6000806040838503121561370257600080fd5b61370b8361365d565b91506137196020840161365d565b90509250929050565b60008060006060848603121561373757600080fd5b6137408461365d565b925061374e6020850161365d565b9150604084013590509250925092565b6000806000806080858703121561377457600080fd5b61377d8561365d565b935061378b6020860161365d565b92506040850135915060608501356001600160401b038111156137ad57600080fd5b8501601f810187136137be57600080fd5b6137cd878235602084016135e8565b91505092959194509250565b600080604083850312156137ec57600080fd5b6137f58361365d565b9150613719602084016136c4565b6000806040838503121561381657600080fd5b61381f8361365d565b946020939093013593505050565b60008060006040848603121561384257600080fd5b83356001600160401b0381111561385857600080fd5b61386486828701613679565b90945092506138779050602085016136c4565b90509250925092565b60008060006040848603121561389557600080fd5b83356001600160401b038111156138ab57600080fd5b6138b786828701613679565b909790965060209590950135949350505050565b6000602082840312156138dd57600080fd5b6124d5826136c4565b6000602082840312156138f857600080fd5b81356124d581613de4565b60006020828403121561391557600080fd5b81516124d581613de4565b60006020828403121561393257600080fd5b81356001600160401b0381111561394857600080fd5b8201601f8101841361395957600080fd5b61303b848235602084016135e8565b60006020828403121561397a57600080fd5b5035919050565b60006020828403121561399357600080fd5b5051919050565b600080604083850312156139ad57600080fd5b82359150602083013560ff811681146139c557600080fd5b809150509250929050565b600081518084526139e8816020860160208601613cdf565b601f01601f19169290920160200192915050565b60008351613a0e818460208801613cdf565b835190830190613a22818360208801613cdf565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613a5e908301846139d0565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613aa057835183529284019291840191600101613a84565b50909695505050505050565b6020815260006124d560208301846139d0565b60208082526017908201527f547279206d696e74696e67206c65737320746f6b656e73000000000000000000604082015260600190565b6020808252601490820152730a8e4f240e8de40e6cadcc840dadee4ca408aa8960631b604082015260600190565b60208082526030908201527f4d696e74206174206c65617374203120746f6b656e20616e64206e6f74206d6f60408201526f3932903a3430b71030b63637bbb2b21760811b606082015260800190565b6020808252601e908201527f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b60006001600160801b03808316818516808303821115613a2257613a22613d8c565b60008219821115613c6857613c68613d8c565b500190565b600082613c7c57613c7c613da2565b500490565b6000816000190483118215151615613c9b57613c9b613d8c565b500290565b60006001600160801b0383811690831681811015613cc057613cc0613d8c565b039392505050565b600082821015613cda57613cda613d8c565b500390565b60005b83811015613cfa578181015183820152602001613ce2565b83811115610f9c5750506000910152565b600081613d1a57613d1a613d8c565b506000190190565b600181811c90821680613d3657607f821691505b60208210811415613d5757634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613d7157613d71613d8c565b5060010190565b600082613d8757613d87613da2565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461286c57600080fdfea26469706673582212201b1cb6be662db4193ee5a763d3d2e532935bfe4f8cc7a947236885fa546acb5464736f6c63430008060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000e6a000000000000000000000000ea472d8ae694c366a9927745a09436294df002dc
-----Decoded View---------------
Arg [0] : maxBatchSize_ (uint256): 50
Arg [1] : maxSupply_ (uint256): 3690
Arg [2] : TimeWarpAddress (address): 0xea472d8aE694C366A9927745A09436294DF002dC
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000e6a
Arg [2] : 000000000000000000000000ea472d8ae694c366a9927745a09436294df002dc
Deployed Bytecode Sourcemap
42780:10866:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27731:370;;;;;;;;;;-1:-1:-1;27731:370:0;;;;;:::i;:::-;;:::i;:::-;;;9821:14:1;;9814:22;9796:41;;9784:2;9769:18;27731:370:0;;;;;;;;50724:332;;;;;;;;;;-1:-1:-1;50724:332:0;;;;;:::i;:::-;;:::i;:::-;;29457:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;44706:216::-;;;;;;;;;;-1:-1:-1;44706:216:0;;;;;:::i;:::-;;:::i;44561:28::-;;;;;;;;;;-1:-1:-1;44561:28:0;;;;;;;;30982:204;;;;;;;;;;-1:-1:-1;30982:204:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7844:32:1;;;7826:51;;7814:2;7799:18;30982:204:0;7781:102:1;30545:379:0;;;;;;;;;;-1:-1:-1;30545:379:0;;;;;:::i;:::-;;:::i;47981:867::-;;;;;;:::i;:::-;;:::i;45642:43::-;;;;;;;;;;;;;;;;;;;26642:25:1;;;26630:2;26615:18;45642:43:0;26597:76:1;45871:212:0;;;;;;;;;;-1:-1:-1;45871:212:0;;;;;:::i;:::-;;:::i;26292:94::-;;;;;;;;;;-1:-1:-1;26368:12:0;;26292:94;;47199:122;;;;;;;;;;-1:-1:-1;47199:122:0;;;;;:::i;:::-;;:::i;45692:26::-;;;;;;;;;;-1:-1:-1;45692:26:0;;;;;;;;44596:42;;;;;;;;;;-1:-1:-1;44596:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;31832:142;;;;;;;;;;-1:-1:-1;31832:142:0;;;;;:::i;:::-;;:::i;45488:127::-;;;;;;;;;;-1:-1:-1;45488:127:0;;;;;:::i;:::-;;:::i;26923:744::-;;;;;;;;;;-1:-1:-1;26923:744:0;;;;;:::i;:::-;;:::i;46130:840::-;;;;;;:::i;:::-;;:::i;50465:186::-;;;;;;;;;;;;;:::i;32037:157::-;;;;;;;;;;-1:-1:-1;32037:157:0;;;;;:::i;:::-;;:::i;51568:379::-;;;;;;;;;;-1:-1:-1;51568:379:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;26455:177::-;;;;;;;;;;-1:-1:-1;26455:177:0;;;;;:::i;:::-;;:::i;48887:130::-;;;;;;;;;;-1:-1:-1;48887:130:0;;;;;:::i;:::-;;:::i;50318:102::-;;;;;;;;;;-1:-1:-1;50318:102:0;;;;;:::i;:::-;;:::i;42941:24::-;;;;;;;;;;-1:-1:-1;42941:24:0;;;;;;;;44645:52;;;;;;;;;;-1:-1:-1;44645:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;49092:126;;;;;;;;;;-1:-1:-1;49092:126:0;;;;;:::i;:::-;;:::i;52918:38::-;;;;;;;;;;-1:-1:-1;52918:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;42972:22;;;;;;;;;;-1:-1:-1;42972:22:0;;;;;;;;;;;47716:218;;;;;;;;;;-1:-1:-1;47716:218:0;;;;;:::i;:::-;;:::i;29280:118::-;;;;;;;;;;-1:-1:-1;29280:118:0;;;;;:::i;:::-;;:::i;42910:24::-;;;;;;;;;;;;;:::i;42839:64::-;;;;;;;;;;;;;:::i;45812:50::-;;;;;;;;;;-1:-1:-1;45812:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;28157:211;;;;;;;;;;-1:-1:-1;28157:211:0;;;;;:::i;:::-;;:::i;41746:103::-;;;;;;;;;;;;;:::i;47604:43::-;;;;;;;;;;-1:-1:-1;47604:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;47006:118;;;;;;;;;;-1:-1:-1;47006:118:0;;;;;:::i;:::-;;:::i;49430:487::-;;;;;;:::i;:::-;;:::i;47654:53::-;;;;;;;;;;-1:-1:-1;47654:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;50092:109;;;;;;;;;;-1:-1:-1;50092:109:0;;;;;:::i;:::-;;:::i;43096:48::-;;;;;;;;;;;;;;;41095:87;;;;;;;;;;-1:-1:-1;41141:7:0;41168:6;-1:-1:-1;;;;;41168:6:0;41095:87;;49988:96;;;;;;;;;;-1:-1:-1;49988:96:0;;;;;:::i;:::-;;:::i;29612:98::-;;;;;;;;;;;;;:::i;31250:274::-;;;;;;;;;;-1:-1:-1;31250:274:0;;;;;:::i;:::-;;:::i;53307:218::-;;;;;;;;;;-1:-1:-1;53307:218:0;;;;;:::i;:::-;;:::i;49226:131::-;;;;;;;;;;-1:-1:-1;49226:131:0;;;;;:::i;:::-;;:::i;43624:768::-;;;;;;;;;;-1:-1:-1;43624:768:0;;;;;:::i;:::-;;:::i;47475:44::-;;;;;;;;;;;;;;;;32257:311;;;;;;;;;;-1:-1:-1;32257:311:0;;;;;:::i;:::-;;:::i;52637:119::-;;;;;;;;;;-1:-1:-1;52637:119:0;;;;;:::i;:::-;;:::i;29773:394::-;;;;;;;;;;-1:-1:-1;29773:394:0;;;;;:::i;:::-;;:::i;51343:109::-;;;;;;;;;;;;;:::i;43482:39::-;;;;;;;;;;-1:-1:-1;43482:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;47526:29;;;;;;;;;;-1:-1:-1;47526:29:0;;;;;;;;43048:41;;;;;;;;;;;;;;;36672:43;;;;;;;;;;;;;;;;52525;;;;;;;;;;-1:-1:-1;52525:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;43001:36;;;;;;;;;;;;;;;;47329:119;;;;;;;;;;-1:-1:-1;47329:119:0;;;;;:::i;:::-;;:::i;52330:113::-;;;;;;;;;;-1:-1:-1;52330:113:0;;;;;:::i;:::-;;:::i;45725:33::-;;;;;;;;;;;;;;;;45765:40;;;;;;;;;;-1:-1:-1;45765:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;31587:186;;;;;;;;;;-1:-1:-1;31587:186:0;;;;;:::i;:::-;-1:-1:-1;;;;;31732:25:0;;;31709:4;31732:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;31587:186;50209:101;;;;;;;;;;-1:-1:-1;50209:101:0;;;;;:::i;:::-;;:::i;44969:511::-;;;:::i;51102:233::-;;;;;;;;;;-1:-1:-1;51102:233:0;;;;;:::i;:::-;;:::i;47562:35::-;;;;;;;;;;;;;;;;42004:201;;;;;;;;;;-1:-1:-1;42004:201:0;;;;;:::i;:::-;;:::i;53533:108::-;;;;;;;;;;-1:-1:-1;53533:108:0;;;;;:::i;:::-;;:::i;27731:370::-;27858:4;-1:-1:-1;;;;;;27888:40:0;;-1:-1:-1;;;27888:40:0;;:99;;-1:-1:-1;;;;;;;27939:48:0;;-1:-1:-1;;;27939:48:0;27888:99;:160;;;-1:-1:-1;;;;;;;27998:50:0;;-1:-1:-1;;;27998:50:0;27888:160;:207;;;-1:-1:-1;;;;;;;;;;13521:40:0;;;28059:36;27874:221;27731:370;-1:-1:-1;;27731:370:0:o;50724:332::-;41141:7;41168:6;-1:-1:-1;;;;;41168:6:0;23842:10;41315:23;41307:68;;;;-1:-1:-1;;;41307:68:0;;;;;;;:::i;:::-;;;;;;;;;50859:11;52029:17:::1;:15;:17::i;:::-;52017:8;:29;;52009:65;;;;-1:-1:-1::0;;;52009:65:0::1;;;;;;;:::i;:::-;50900:9:::2;50895:154;50915:22:::0;;::::2;50895:154;;;50958:35;50968:11;;50980:1;50968:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;50984:8;50958:9;:35::i;:::-;51036:1;51008:10;:25;51019:13;26368:12:::0;;;26292:94;51019:13:::2;51008:25:::0;;::::2;::::0;::::2;::::0;;;;;;-1:-1:-1;51008:25:0;:29;50939:3;::::2;::::0;::::2;:::i;:::-;;;;50895:154;;;;41386:1:::1;50724:332:::0;;;:::o;29457:94::-;29511:13;29540:5;29533:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29457:94;:::o;44706:216::-;41141:7;41168:6;-1:-1:-1;;;;;41168:6:0;23842:10;41315:23;41307:68;;;;-1:-1:-1;;;41307:68:0;;;;;;;:::i;:::-;44828:9:::1;44823:91;44843:20:::0;;::::1;44823:91;;;44910:4;44883:10;:24;44894:9;;44904:1;44894:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44883:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;44883:24:0;:31;;-1:-1:-1;;44883:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;44865:3;::::1;::::0;::::1;:::i;:::-;;;;44823:91;;;;44706:216:::0;;;:::o;30982:204::-;31050:7;31074:16;31082:7;32894:12;;-1:-1:-1;32884:22:0;32807:105;31074:16;31066:74;;;;-1:-1:-1;;;31066:74:0;;25881:2:1;31066:74:0;;;25863:21:1;25920:2;25900:18;;;25893:30;25959:34;25939:18;;;25932:62;-1:-1:-1;;;26010:18:1;;;26003:43;26063:19;;31066:74:0;25853:235:1;31066:74:0;-1:-1:-1;31156:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;31156:24:0;;30982:204::o;30545:379::-;30614:13;30630:24;30646:7;30630:15;:24::i;:::-;30614:40;;30675:5;-1:-1:-1;;;;;30669:11:0;:2;-1:-1:-1;;;;;30669:11:0;;;30661:58;;;;-1:-1:-1;;;30661:58:0;;21353:2:1;30661:58:0;;;21335:21:1;21392:2;21372:18;;;21365:30;21431:34;21411:18;;;21404:62;-1:-1:-1;;;21482:18:1;;;21475:32;21524:19;;30661:58:0;21325:224:1;30661:58:0;23842:10;-1:-1:-1;;;;;30744:21:0;;;;:62;;-1:-1:-1;30769:37:0;30786:5;23842:10;31587:186;:::i;30769:37::-;30728:153;;;;-1:-1:-1;;;30728:153:0;;17435:2:1;30728:153:0;;;17417:21:1;17474:2;17454:18;;;17447:30;17513:34;17493:18;;;17486:62;17584:27;17564:18;;;17557:55;17629:19;;30728:153:0;17407:247:1;30728:153:0;30890:28;30899:2;30903:7;30912:5;30890:8;:28::i;:::-;30607:317;30545:379;;:::o;47981:867::-;44451:9;44464:10;44451:23;44443:66;;;;-1:-1:-1;;;44443:66:0;;;;;;;:::i;:::-;48112:8:::1;52029:17;:15;:17::i;:::-;52017:8;:29;;52009:65;;;;-1:-1:-1::0;;;52009:65:0::1;;;;;;;:::i;:::-;48146:17:::2;::::0;::::2;;48138:53;;;::::0;-1:-1:-1;;;48138:53:0;;17083:2:1;48138:53:0::2;::::0;::::2;17065:21:1::0;17122:2;17102:18;;;17095:30;17161:25;17141:18;;;17134:53;17204:18;;48138:53:0::2;17055:173:1::0;48138:53:0::2;48222:10;48210:23;::::0;;;:11:::2;:23;::::0;;;;;::::2;;48202:60;;;::::0;-1:-1:-1;;;48202:60:0;;11024:2:1;48202:60:0::2;::::0;::::2;11006:21:1::0;11063:2;11043:18;;;11036:30;11102:26;11082:18;;;11075:54;11146:18;;48202:60:0::2;10996:174:1::0;48202:60:0::2;48340:16;::::0;48314:10:::2;48295:30;::::0;;;:18:::2;:30;::::0;;;;;:41:::2;::::0;48328:8;;48295:41:::2;:::i;:::-;:61;;48273:139;;;::::0;-1:-1:-1;;;48273:139:0;;24397:2:1;48273:139:0::2;::::0;::::2;24379:21:1::0;24436:2;24416:18;;;24409:30;24475;24455:18;;;24448:58;24523:18;;48273:139:0::2;24369:178:1::0;48273:139:0::2;48442:1;48431:8;:12;:44;;;;;48459:16;;48447:8;:28;;48431:44;48423:105;;;;-1:-1:-1::0;;;48423:105:0::2;;;;;;;:::i;:::-;48585:16;::::0;48574:27:::2;::::0;:8;:27:::2;:::i;:::-;48561:9;:40;;48539:110;;;;-1:-1:-1::0;;;48539:110:0::2;;;;;;;:::i;:::-;48681:10;48662:30;::::0;;;:18:::2;:30;::::0;;;;:42;;48696:8;;48662:30;:42:::2;::::0;48696:8;;48662:42:::2;:::i;:::-;::::0;;;-1:-1:-1;48717:31:0::2;::::0;-1:-1:-1;48727:10:0::2;48739:8:::0;48717:9:::2;:31::i;:::-;48787:1;48759:10;:25;48770:13;26368:12:::0;;;26292:94;48770:13:::2;48759:25;;;;;;;;;;;:29;;;;48799:41;48831:8;48812:16;;:27;;;;:::i;:::-;48799:12;:41::i;:::-;44520:1:::1;47981:867:::0;:::o;45871:212::-;41141:7;41168:6;-1:-1:-1;;;;;41168:6:0;23842:10;41315:23;41307:68;;;;-1:-1:-1;;;41307:68:0;;;;;;;:::i;:::-;45991:9:::1;45986:89;46006:20:::0;;::::1;45986:89;;;46071:4;46046:8;:22;46055:9;;46065:1;46055:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;46046:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;46046:22:0;:29;;-1:-1:-1;;46046:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;46028:3;::::1;::::0;::::1;:::i;:::-;;;;45986:89;;47199:122:::0;41141:7;41168:6;-1:-1:-1;;;;;41168:6:0;23842:10;41315:23;41307:68;;;;-1:-1:-1;;;41307:68:0;;;;;;;:::i;:::-;47279:15:::1;:34:::0;47199:122::o;31832:142::-;31940:28;31950:4;31956:2;31960:7;31940:9;:28::i;45488:127::-;41141:7;41168:6;-1:-1:-1;;;;;41168:6:0;23842:10;41315:23;41307:68;;;;-1:-1:-1;;;41307:68:0;;;;;;;:::i;:::-;45571:16:::1;:36:::0;;-1:-1:-1;;45571:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;45488:127::o;26923:744::-;27032:7;27067:16;27077:5;27067:9;:16::i;:::-;27059:5;:24;27051:71;;;;-1:-1:-1;;;27051:71:0;;10274:2:1;27051:71:0;;;10256:21:1;10313:2;10293:18;;;10286:30;10352:34;10332:18;;;10325:62;-1:-1:-1;;;10403:18:1;;;10396:32;10445:19;;27051:71:0;10246:224:1;27051:71:0;27129:22;27154:13;26368:12;;;26292:94;27154:13;27129:38;;27174:19;27204:25;27254:9;27249:350;27273:14;27269:1;:18;27249:350;;;27303:31;27337:14;;;:11;:14;;;;;;;;;27303:48;;;;;;;;;-1:-1:-1;;;;;27303:48:0;;;;;-1:-1:-1;;;27303:48:0;;;-1:-1:-1;;;;;27303:48:0;;;;;;;;27364:28;27360:89;;27425:14;;;-1:-1:-1;27360:89:0;27482:5;-1:-1:-1;;;;;27461:26:0;:17;-1:-1:-1;;;;;27461:26:0;;27457:135;;;27519:5;27504:11;:20;27500:59;;;-1:-1:-1;27546:1:0;-1:-1:-1;27539:8:0;;-1:-1:-1;;;27539:8:0;27500:59;27569:13;;;;:::i;:::-;;;;27457:135;-1:-1:-1;27289:3:0;;;;:::i;:::-;;;;27249:350;;;-1:-1:-1;27605:56:0;;-1:-1:-1;;;27605:56:0;;23982:2:1;27605:56:0;;;23964:21:1;24021:2;24001:18;;;23994:30;24060:34;24040:18;;;24033:62;-1:-1:-1;;;24111:18:1;;;24104:44;24165:19;;27605:56:0;23954:236:1;46130:840:0;44451:9;44464:10;44451:23;44443:66;;;;-1:-1:-1;;;44443:66:0;;;;;;;:::i;:::-;46260:8:::1;52029:17;:15;:17::i;:::-;52017:8;:29;;52009:65;;;;-1:-1:-1::0;;;52009:65:0::1;;;;;;;:::i;:::-;46294:14:::2;::::0;::::2;;46286:47;;;::::0;-1:-1:-1;;;46286:47:0;;13609:2:1;46286:47:0::2;::::0;::::2;13591:21:1::0;13648:2;13628:18;;;13621:30;-1:-1:-1;;;13667:18:1;;;13660:50;13727:18;;46286:47:0::2;13581:170:1::0;46286:47:0::2;46361:10;46352:20;::::0;;;:8:::2;:20;::::0;;;;;::::2;;46344:54;;;::::0;-1:-1:-1;;;46344:54:0;;21756:2:1;46344:54:0::2;::::0;::::2;21738:21:1::0;21795:2;21775:18;;;21768:30;-1:-1:-1;;;21814:18:1;;;21807:51;21875:18;;46344:54:0::2;21728:171:1::0;46344:54:0::2;46473:13;::::0;46447:10:::2;46431:27;::::0;;;:15:::2;:27;::::0;;;;;:38:::2;::::0;46461:8;;46431:38:::2;:::i;:::-;:55;;46409:133;;;::::0;-1:-1:-1;;;46409:133:0;;24397:2:1;46409:133:0::2;::::0;::::2;24379:21:1::0;24436:2;24416:18;;;24409:30;24475;24455:18;;;24448:58;24523:18;;46409:133:0::2;24369:178:1::0;46409:133:0::2;46572:1;46561:8;:12;:41;;;;;46589:13;;46577:8;:25;;46561:41;46553:102;;;;-1:-1:-1::0;;;46553:102:0::2;;;;;;;:::i;:::-;46712:15;::::0;46701:26:::2;::::0;:8;:26:::2;:::i;:::-;46688:9;:39;;46666:109;;;;-1:-1:-1::0;;;46666:109:0::2;;;;;;;:::i;:::-;46804:10;46788:27;::::0;;;:15:::2;:27;::::0;;;;:39;;46819:8;;46788:27;:39:::2;::::0;46819:8;;46788:39:::2;:::i;:::-;::::0;;;-1:-1:-1;46840:31:0::2;::::0;-1:-1:-1;46850:10:0::2;46862:8:::0;46840:9:::2;:31::i;:::-;46910:1;46882:10;:25;46893:13;26368:12:::0;;;26292:94;46893:13:::2;46882:25;;;;;;;;;;;:29;;;;46922:40;46953:8;46935:15;;:26;;;;:::i;50465:186::-:0;41141:7;41168:6;-1:-1:-1;;;;;41168:6:0;23842:10;41315:23;41307:68;;;;-1:-1:-1;;;41307:68:0;;;;;;;:::i;:::-;22136:1:::1;22734:7;;:19;;22726:63;;;::::0;-1:-1:-1;;;22726:63:0;;25105:2:1;22726:63:0::1;::::0;::::1;25087:21:1::0;25144:2;25124:18;;;25117:30;25183:33;25163:18;;;25156:61;25234:18;;22726:63:0::1;25077:181:1::0;22726:63:0::1;22136:1;22867:7;:18:::0;50547:49:::2;::::0;50529:12:::2;::::0;50547:10:::2;::::0;50570:21:::2;::::0;50529:12;50547:49;50529:12;50547:49;50570:21;50547:10;:49:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50528:68;;;50615:7;50607:36;;;::::0;-1:-1:-1;;;50607:36:0;;22106:2:1;50607:36:0::2;::::0;::::2;22088:21:1::0;22145:2;22125:18;;;22118:30;-1:-1:-1;;;22164:18:1;;;22157:46;22220:18;;50607:36:0::2;22078:166:1::0;50607:36:0::2;-1:-1:-1::0;22092:1:0::1;23046:7;:22:::0;50465:186::o;32037:157::-;32149:39;32166:4;32172:2;32176:7;32149:39;;;;;;;;;;;;:16;:39::i;51568:379::-;51655:16;51689:23;51715:17;51725:6;51715:9;:17::i;:::-;51689:43;;51743:25;51785:15;-1:-1:-1;;;;;51771:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51771:30:0;;51743:58;;51817:9;51812:99;51832:15;51828:1;:19;51812:99;;;51881:30;51901:6;51909:1;51881:19;:30::i;:::-;51867:8;51876:1;51867:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;51849:3;;;;:::i;:::-;;;;51812:99;;;-1:-1:-1;51931:8:0;51568:379;-1:-1:-1;;;51568:379:0:o;26455:177::-;26522:7;26554:13;26368:12;;;26292:94;26554:13;26546:5;:21;26538:69;;;;-1:-1:-1;;;26538:69:0;;13958:2:1;26538:69:0;;;13940:21:1;13997:2;13977:18;;;13970:30;14036:34;14016:18;;;14009:62;-1:-1:-1;;;14087:18:1;;;14080:33;14130:19;;26538:69:0;13930:225:1;26538:69:0;-1:-1:-1;26621:5:0;26455:177::o;48887:130::-;41141:7;41168:6;-1:-1:-1;;;;;41168:6:0;23842:10;41315:23;41307:68;;;;-1:-1:-1;;;41307:68:0;;;;;;;:::i;:::-;48973:16:::1;:36:::0;48887:130::o;50318:102::-;41141:7;41168:6;-1:-1:-1;;;;;41168:6:0;23842:10;41315:23;41307:68;;;;-1:-1:-1;;;41307:68:0;;;;;;;:::i;:::-;50393:19;;::::1;::::0;:7:::1;::::0;:19:::1;::::0;::::1;::::0;::::1;:::i;49092:126::-:0;41141:7;41168:6;-1:-1:-1;;;;;41168:6:0;23842:10;41315:23;41307:68;;;;-1:-1:-1;;;41307:68:0;;;;;;;:::i;:::-;49174:16:::1;:36:::0;49092:126::o;47716:218::-;41141:7;41168:6;-1:-1:-1;;;;;41168:6:0;23842:10;41315:23;41307:68;;;;-1:-1:-1;;;41307:68:0;;;;;;;:::i;:::-;47839:9:::1;47834:92;47854:20:::0;;::::1;47834:92;;;47922:4;47894:11;:25;47906:9;;47916:1;47906:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;47894:25:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;47894:25:0;:32;;-1:-1:-1;;47894:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;47876:3;::::1;::::0;::::1;:::i;:::-;;;;47834:92;;29280:118:::0;29344:7;29367:20;29379:7;29367:11;:20::i;:::-;:25;;29280:118;-1:-1:-1;;29280:118:0:o;42910:24::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42839:64::-;;;;;;;:::i;28157:211::-;28221:7;-1:-1:-1;;;;;28245:19:0;;28237:75;;;;-1:-1:-1;;;28237:75:0;;17861:2:1;28237:75:0;;;17843:21:1;17900:2;17880:18;;;17873:30;17939:34;17919:18;;;17912:62;-1:-1:-1;;;17990:18:1;;;17983:41;18041:19;;28237:75:0;17833:233:1;28237:75:0;-1:-1:-1;;;;;;28334:19:0;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;28334:27:0;;28157:211::o;41746:103::-;41141:7;41168:6;-1:-1:-1;;;;;41168:6:0;23842:10;41315:23;41307:68;;;;-1:-1:-1;;;41307:68:0;;;;;;;:::i;:::-;41811:30:::1;41838:1;41811:18;:30::i;:::-;41746:103::o:0;47006:118::-;41141:7;41168:6;-1:-1:-1;;;;;41168:6:0;23842:10;41315:23;41307:68;;;;-1:-1:-1;;;41307:68:0;;;;;;;:::i;:::-;47086:13:::1;:30:::0;47006:118::o;49430:487::-;44451:9;44464:10;44451:23;44443:66;;;;-1:-1:-1;;;44443:66:0;;;;;;;:::i;:::-;49554:8:::1;52029:17;:15;:17::i;:::-;52017:8;:29;;52009:65;;;;-1:-1:-1::0;;;52009:65:0::1;;;;;;;:::i;:::-;49588:12:::2;::::0;::::2;;49580:43;;;::::0;-1:-1:-1;;;49580:43:0;;15186:2:1;49580:43:0::2;::::0;::::2;15168:21:1::0;15225:2;15205:18;;;15198:30;-1:-1:-1;;;15244:18:1;;;15237:48;15302:18;;49580:43:0::2;15158:168:1::0;49580:43:0::2;49653:1;49642:8;:12;:30;;;;;49670:2;49658:8;:14;;49642:30;49634:61;;;::::0;-1:-1:-1;;;49634:61:0;;10677:2:1;49634:61:0::2;::::0;::::2;10659:21:1::0;10716:2;10696:18;;;10689:30;-1:-1:-1;;;10735:18:1;;;10728:48;10793:18;;49634:61:0::2;10649:168:1::0;49634:61:0::2;49738:9;::::0;49727:20:::2;::::0;:8;:20:::2;:::i;:::-;49714:9;:33;;49706:66;;;;-1:-1:-1::0;;;49706:66:0::2;;;;;;;:::i;:::-;49793:31;49803:10;49815:8;49793:9;:31::i;:::-;49863:1;49835:10;:25;49846:13;26368:12:::0;;;26292:94;49846:13:::2;49835:25;;;;;;;;;;;:29;;;;49875:34;49900:8;49888:9;;:20;;;;:::i;50092:109::-:0;41141:7;41168:6;-1:-1:-1;;;;;41168:6:0;23842:10;41315:23;41307:68;;;;-1:-1:-1;;;41307:68:0;;;;;;;:::i;:::-;50165:12:::1;:28:::0;;-1:-1:-1;;50165:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;50092:109::o;49988:96::-;41141:7;41168:6;-1:-1:-1;;;;;41168:6:0;23842:10;41315:23;41307:68;;;;-1:-1:-1;;;41307:68:0;;;;;;;:::i;:::-;50055:9:::1;:21:::0;49988:96::o;29612:98::-;29668:13;29697:7;29690:14;;;;;:::i;31250:274::-;-1:-1:-1;;;;;31341:24:0;;23842:10;31341:24;;31333:63;;;;-1:-1:-1;;;31333:63:0;;20227:2:1;31333:63:0;;;20209:21:1;20266:2;20246:18;;;20239:30;20305:28;20285:18;;;20278:56;20351:18;;31333:63:0;20199:176:1;31333:63:0;23842:10;31405:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;31405:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;31405:53:0;;;;;;;;;;31470:48;;9796:41:1;;;31405:42:0;;23842:10;31470:48;;9769:18:1;31470:48:0;;;;;;;31250:274;;:::o;53307:218::-;52822:10;52810:23;;;;:11;:23;;;;;;;;52802:61;;;;-1:-1:-1;;;52802:61:0;;16370:2:1;52802:61:0;;;16352:21:1;16409:2;16389:18;;;16382:30;16448:27;16428:18;;;16421:55;16493:18;;52802:61:0;16342:175:1;52802:61:0;53433:9:::1;53428:89;53448:20:::0;;::::1;53428:89;;;53511:6;53488;:20;53495:9;;53505:1;53495:12;;;;;;;:::i;:::-;;;;;;;53488:20;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;53470:3;;;;;:::i;:::-;;;;53428:89;;49226:131:::0;41141:7;41168:6;-1:-1:-1;;;;;41168:6:0;23842:10;41315:23;41307:68;;;;-1:-1:-1;;;41307:68:0;;;;;;;:::i;:::-;49311:17:::1;:38:::0;;-1:-1:-1;;49311:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;49226:131::o;43624:768::-;43732:10;;;;;;;43724:46;;;;-1:-1:-1;;;43724:46:0;;21001:2:1;43724:46:0;;;20983:21:1;21040:2;21020:18;;;21013:30;21079:25;21059:18;;;21052:53;21122:18;;43724:46:0;20973:173:1;43724:46:0;43823:10;43803:16;43811:7;43803;:16::i;:::-;-1:-1:-1;;;;;43803:30:0;;43781:129;;;;-1:-1:-1;;;43781:129:0;;18680:2:1;43781:129:0;;;18662:21:1;18719:2;18699:18;;;18692:30;18758:34;18738:18;;;18731:62;-1:-1:-1;;;18809:18:1;;;18802:47;18866:19;;43781:129:0;18652:239:1;43781:129:0;43927:19;;;;:10;:19;;;;;;43950:1;-1:-1:-1;43923:302:0;;44007:45;;-1:-1:-1;;;44007:45:0;;44026:10;44007:45;;;8903:51:1;9002:4;8990:17;;8970:18;;;8963:45;44055:1:0;;44007:8;-1:-1:-1;;;;;44007:18:0;;;;8876::1;;44007:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:49;43981:162;;;;-1:-1:-1;;;43981:162:0;;15533:2:1;43981:162:0;;;15515:21:1;15572:2;15552:18;;;15545:30;15611:34;15591:18;;;15584:62;-1:-1:-1;;;15662:18:1;;;15655:49;15721:19;;43981:162:0;15505:241:1;43981:162:0;44161:52;;-1:-1:-1;;;44161:52:0;;26880:4:1;26868:17;;44161:52:0;;;26850:36:1;44202:10:0;26902:18:1;;;26895:60;44161:8:0;-1:-1:-1;;;;;44161:25:0;;;;26823:18:1;;44161:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43923:302;44245:19;;;;:10;:19;;;;;:24;;44268:1;;44245:19;:24;;44268:1;;44245:24;:::i;:::-;;;;-1:-1:-1;;44354:19:0;;;;:10;:19;;;;;;;;;;44285:99;;44307:10;8583:51:1;;8650:18;;;8643:34;;;8693:18;;;8686:34;44285:99:0;;;;;;;8571:2:1;44285:99:0;;;43624:768;;:::o;32257:311::-;32394:28;32404:4;32410:2;32414:7;32394:9;:28::i;:::-;32445:48;32468:4;32474:2;32478:7;32487:5;32445:22;:48::i;:::-;32429:133;;;;-1:-1:-1;;;32429:133:0;;;;;;;:::i;52637:119::-;41141:7;41168:6;-1:-1:-1;;;;;41168:6:0;23842:10;41315:23;41307:68;;;;-1:-1:-1;;;41307:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;52720:21:0;;;::::1;;::::0;;;:11:::1;:21;::::0;;;;:28;;-1:-1:-1;;52720:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;52637:119::o;29773:394::-;29871:13;29912:16;29920:7;32894:12;;-1:-1:-1;32884:22:0;32807:105;29912:16;29896:97;;;;-1:-1:-1;;;29896:97:0;;19811:2:1;29896:97:0;;;19793:21:1;19850:2;19830:18;;;19823:30;19889:34;19869:18;;;19862:62;-1:-1:-1;;;19940:18:1;;;19933:45;19995:19;;29896:97:0;19783:237:1;29896:97:0;30002:21;30026:10;:8;:10::i;:::-;30002:34;;30081:1;30063:7;30057:21;:25;:104;;;;;;;;;;;;;;;;;30118:7;30127:18;:7;:16;:18::i;:::-;30101:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30057:104;30043:118;29773:394;-1:-1:-1;;;29773:394:0:o;51343:109::-;51391:7;51430:13;26368:12;;;26292:94;51430:13;51418:25;;:9;:25;:::i;:::-;51411:32;;51343:109;:::o;47329:119::-;41141:7;41168:6;-1:-1:-1;;;;;41168:6:0;23842:10;41315:23;41307:68;;;;-1:-1:-1;;;41307:68:0;;;;;;;:::i;:::-;47408:14:::1;:32:::0;;-1:-1:-1;;47408:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;47329:119::o;52330:113::-;52388:7;52415:20;52429:5;52415:13;:20::i;50209:101::-;41141:7;41168:6;-1:-1:-1;;;;;41168:6:0;23842:10;41315:23;41307:68;;;;-1:-1:-1;;;41307:68:0;;;;;;;:::i;:::-;50278:10:::1;:24:::0;;;::::1;;;;-1:-1:-1::0;;50278:24:0;;::::1;::::0;;;::::1;::::0;;50209:101::o;44969:511::-;44451:9;44464:10;44451:23;44443:66;;;;-1:-1:-1;;;44443:66:0;;;;;;;:::i;:::-;45085:1:::1;52029:17;:15;:17::i;:::-;52017:8;:29;;52009:65;;;;-1:-1:-1::0;;;52009:65:0::1;;;;;;;:::i;:::-;45112:16:::2;::::0;::::2;;45104:51;;;::::0;-1:-1:-1;;;45104:51:0;;24754:2:1;45104:51:0::2;::::0;::::2;24736:21:1::0;24793:2;24773:18;;;24766:30;-1:-1:-1;;;24812:18:1;;;24805:52;24874:18;;45104:51:0::2;24726:172:1::0;45104:51:0::2;45185:10;45174:22;::::0;;;:10:::2;:22;::::0;;;;;::::2;;45166:58;;;::::0;-1:-1:-1;;;45166:58:0;;19098:2:1;45166:58:0::2;::::0;::::2;19080:21:1::0;19137:2;19117:18;;;19110:30;19176:25;19156:18;;;19149:53;19219:18;;45166:58:0::2;19070:173:1::0;45166:58:0::2;45275:10;45257:29;::::0;;;:17:::2;:29;::::0;;;;;45294:1:::2;::::0;45257:33:::2;::::0;45294:1;45257:33:::2;:::i;:::-;:38;;45235:113;;;::::0;-1:-1:-1;;;45235:113:0;;12088:2:1;45235:113:0::2;::::0;::::2;12070:21:1::0;12127:2;12107:18;;;12100:30;12166:27;12146:18;;;12139:55;12211:18;;45235:113:0::2;12060:175:1::0;45235:113:0::2;45379:10;45361:29;::::0;;;:17:::2;:29;::::0;;;;:34;;45394:1:::2;::::0;45361:29;:34:::2;::::0;45394:1;;45361:34:::2;:::i;:::-;::::0;;;-1:-1:-1;45408:24:0::2;::::0;-1:-1:-1;45418:10:0::2;45430:1;45408:9;:24::i;:::-;45471:1;45443:10;:25;45454:13;26368:12:::0;;;26292:94;45454:13:::2;45443:25:::0;;::::2;::::0;::::2;::::0;;;;;;-1:-1:-1;45443:25:0;:29;-1:-1:-1;44969:511:0:o;51102:233::-;41141:7;41168:6;-1:-1:-1;;;;;41168:6:0;23842:10;41315:23;41307:68;;;;-1:-1:-1;;;41307:68:0;;;;;;;:::i;:::-;51229:8:::1;52029:17;:15;:17::i;:::-;52017:8;:29;;52009:65;;;;-1:-1:-1::0;;;52009:65:0::1;;;;;;;:::i;:::-;51255:32:::2;51265:11;51278:8;51255:9;:32::i;:::-;51326:1;51298:10;:25;51309:13;26368:12:::0;;;26292:94;51309:13:::2;51298:25:::0;;::::2;::::0;::::2;::::0;;;;;;-1:-1:-1;51298:25:0;:29;-1:-1:-1;;;51102:233:0:o;42004:201::-;41141:7;41168:6;-1:-1:-1;;;;;41168:6:0;23842:10;41315:23;41307:68;;;;-1:-1:-1;;;41307:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42093:22:0;::::1;42085:73;;;::::0;-1:-1:-1;;;42085:73:0;;12442:2:1;42085:73:0::1;::::0;::::1;12424:21:1::0;12481:2;12461:18;;;12454:30;12520:34;12500:18;;;12493:62;-1:-1:-1;;;12571:18:1;;;12564:36;12617:19;;42085:73:0::1;12414:228:1::0;42085:73:0::1;42169:28;42188:8;42169:18;:28::i;:::-;42004:201:::0;:::o;53533:108::-;41141:7;41168:6;-1:-1:-1;;;;;41168:6:0;23842:10;41315:23;41307:68;;;;-1:-1:-1;;;41307:68:0;;;;;;;:::i;:::-;53610:23;;::::1;::::0;:10:::1;::::0;:23:::1;::::0;::::1;::::0;::::1;:::i;32918:98::-:0;32983:27;32993:2;32997:8;32983:27;;;;;;;;;;;;:9;:27::i;36494:172::-;36591:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;36591:29:0;-1:-1:-1;;;;;36591:29:0;;;;;;;;;36632:28;;36591:24;;36632:28;;;;;;;36494:172;;;:::o;52102:220::-;52179:5;52166:9;:18;;52158:53;;;;-1:-1:-1;;;52158:53:0;;22871:2:1;52158:53:0;;;22853:21:1;22910:2;22890:18;;;22883:30;-1:-1:-1;;;22929:18:1;;;22922:52;22991:18;;52158:53:0;22843:172:1;52158:53:0;52238:5;52226:9;:17;52222:93;;;52264:10;52256:47;52285:17;52297:5;52285:9;:17;:::i;:::-;52256:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34859:1529;34956:35;34994:20;35006:7;34994:11;:20::i;:::-;35065:18;;34956:58;;-1:-1:-1;35023:22:0;;-1:-1:-1;;;;;35049:34:0;23842:10;-1:-1:-1;;;;;35049:34:0;;:81;;;-1:-1:-1;23842:10:0;35094:20;35106:7;35094:11;:20::i;:::-;-1:-1:-1;;;;;35094:36:0;;35049:81;:142;;;-1:-1:-1;35158:18:0;;35141:50;;23842:10;31587:186;:::i;35141:50::-;35023:169;;35217:17;35201:101;;;;-1:-1:-1;;;35201:101:0;;20582:2:1;35201:101:0;;;20564:21:1;20621:2;20601:18;;;20594:30;20660:34;20640:18;;;20633:62;-1:-1:-1;;;20711:18:1;;;20704:48;20769:19;;35201:101:0;20554:240:1;35201:101:0;35349:4;-1:-1:-1;;;;;35327:26:0;:13;:18;;;-1:-1:-1;;;;;35327:26:0;;35311:98;;;;-1:-1:-1;;;35311:98:0;;18273:2:1;35311:98:0;;;18255:21:1;18312:2;18292:18;;;18285:30;18351:34;18331:18;;;18324:62;-1:-1:-1;;;18402:18:1;;;18395:36;18448:19;;35311:98:0;18245:228:1;35311:98:0;-1:-1:-1;;;;;35424:16:0;;35416:66;;;;-1:-1:-1;;;35416:66:0;;14362:2:1;35416:66:0;;;14344:21:1;14401:2;14381:18;;;14374:30;14440:34;14420:18;;;14413:62;-1:-1:-1;;;14491:18:1;;;14484:35;14536:19;;35416:66:0;14334:227:1;35416:66:0;35491:43;35513:4;35519:2;35523:7;35532:1;35491:21;:43::i;:::-;35591:49;35608:1;35612:7;35621:13;:18;;;35591:8;:49::i;:::-;-1:-1:-1;;;;;35649:18:0;;;;;;:12;:18;;;;;:31;;35679:1;;35649:18;:31;;35679:1;;-1:-1:-1;;;;;35649:31:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;35649:31:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;35687:16:0;;-1:-1:-1;35687:16:0;;;:12;:16;;;;;:29;;-1:-1:-1;;;35687:16:0;;:29;;-1:-1:-1;;35687:29:0;;:::i;:::-;;;-1:-1:-1;;;;;35687:29:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35746:43:0;;;;;;;;-1:-1:-1;;;;;35746:43:0;;;;;-1:-1:-1;;;;;35772:15:0;35746:43;;;;;;;;;-1:-1:-1;35723:20:0;;;:11;:20;;;;;;:66;;;;;;;;;-1:-1:-1;;;35723:66:0;-1:-1:-1;;;;;;35723:66:0;;;;;;;;;;;36039:11;35735:7;-1:-1:-1;36039:11:0;:::i;:::-;36102:1;36061:24;;;:11;:24;;;;;:29;36017:33;;-1:-1:-1;;;;;;36061:29:0;36057:236;;36119:20;36127:11;32894:12;;-1:-1:-1;32884:22:0;32807:105;36119:20;36115:171;;;36179:97;;;;;;;;36206:18;;-1:-1:-1;;;;;36179:97:0;;;;;;36237:28;;;;-1:-1:-1;;;;;36179:97:0;;;;;;;;;-1:-1:-1;36152:24:0;;;:11;:24;;;;;;;:124;;;;;;;;;-1:-1:-1;;;36152:124:0;-1:-1:-1;;;;;;36152:124:0;;;;;;;;;;;;36115:171;36325:7;36321:2;-1:-1:-1;;;;;36306:27:0;36315:4;-1:-1:-1;;;;;36306:27:0;;;;;;;;;;;36340:42;34949:1439;;;34859:1529;;;:::o;28620:606::-;-1:-1:-1;;;;;;;;;;;;;;;;;28737:16:0;28745:7;32894:12;;-1:-1:-1;32884:22:0;32807:105;28737:16;28729:71;;;;-1:-1:-1;;;28729:71:0;;12849:2:1;28729:71:0;;;12831:21:1;12888:2;12868:18;;;12861:30;12927:34;12907:18;;;12900:62;-1:-1:-1;;;12978:18:1;;;12971:40;13028:19;;28729:71:0;12821:232:1;28729:71:0;28809:26;28857:12;28846:7;:23;28842:93;;28901:22;28911:12;28901:7;:22;:::i;:::-;:26;;28926:1;28901:26;:::i;:::-;28880:47;;28842:93;28963:7;28943:212;28980:18;28972:4;:26;28943:212;;29017:31;29051:17;;;:11;:17;;;;;;;;;29017:51;;;;;;;;;-1:-1:-1;;;;;29017:51:0;;;;;-1:-1:-1;;;29017:51:0;;;-1:-1:-1;;;;;29017:51:0;;;;;;;;29081:28;29077:71;;29129:9;28620:606;-1:-1:-1;;;;28620:606:0:o;29077:71::-;-1:-1:-1;29000:6:0;;;;:::i;:::-;;;;28943:212;;;-1:-1:-1;29163:57:0;;-1:-1:-1;;;29163:57:0;;25465:2:1;29163:57:0;;;25447:21:1;25504:2;25484:18;;;25477:30;25543:34;25523:18;;;25516:62;-1:-1:-1;;;25594:18:1;;;25587:45;25649:19;;29163:57:0;25437:237:1;42365:191:0;42439:16;42458:6;;-1:-1:-1;;;;;42475:17:0;;;-1:-1:-1;;;;;;42475:17:0;;;;;;42508:40;;42458:6;;;;;;;42508:40;;42439:16;42508:40;42428:128;42365:191;:::o;38209:690::-;38346:4;-1:-1:-1;;;;;38363:13:0;;3591:20;3639:8;38359:535;;38402:72;;-1:-1:-1;;;38402:72:0;;-1:-1:-1;;;;;38402:36:0;;;;;:72;;23842:10;;38453:4;;38459:7;;38468:5;;38402:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38402:72:0;;;;;;;;-1:-1:-1;;38402:72:0;;;;;;;;;;;;:::i;:::-;;;38389:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38633:13:0;;38629:215;;38666:61;;-1:-1:-1;;;38666:61:0;;;;;;;:::i;38629:215::-;38812:6;38806:13;38797:6;38793:2;38789:15;38782:38;38389:464;-1:-1:-1;;;;;;38524:55:0;-1:-1:-1;;;38524:55:0;;-1:-1:-1;38517:62:0;;38359:535;-1:-1:-1;38882:4:0;38359:535;38209:690;;;;;;:::o;51460:100::-;51512:13;51545:7;51538:14;;;;;:::i;689:723::-;745:13;966:10;962:53;;-1:-1:-1;;993:10:0;;;;;;;;;;;;-1:-1:-1;;;993:10:0;;;;;689:723::o;962:53::-;1040:5;1025:12;1081:78;1088:9;;1081:78;;1114:8;;;;:::i;:::-;;-1:-1:-1;1137:10:0;;-1:-1:-1;1145:2:0;1137:10;;:::i;:::-;;;1081:78;;;1169:19;1201:6;-1:-1:-1;;;;;1191:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1191:17:0;;1169:39;;1219:154;1226:10;;1219:154;;1253:11;1263:1;1253:11;;:::i;:::-;;-1:-1:-1;1322:10:0;1330:2;1322:5;:10;:::i;:::-;1309:24;;:2;:24;:::i;:::-;1296:39;;1279:6;1286;1279:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;1279:56:0;;;;;;;;-1:-1:-1;1350:11:0;1359:2;1350:11;;:::i;:::-;;;1219:154;;28374:240;28435:7;-1:-1:-1;;;;;28467:19:0;;28451:102;;;;-1:-1:-1;;;28451:102:0;;14768:2:1;28451:102:0;;;14750:21:1;14807:2;14787:18;;;14780:30;14846:34;14826:18;;;14819:62;-1:-1:-1;;;14897:18:1;;;14890:47;14954:19;;28451:102:0;14740:239:1;28451:102:0;-1:-1:-1;;;;;;28575:19:0;;;;;:12;:19;;;;;:32;-1:-1:-1;;;28575:32:0;;-1:-1:-1;;;;;28575:32:0;;28374:240::o;33355:1272::-;33483:12;;-1:-1:-1;;;;;33510:16:0;;33502:62;;;;-1:-1:-1;;;33502:62:0;;23580:2:1;33502:62:0;;;23562:21:1;23619:2;23599:18;;;23592:30;23658:34;23638:18;;;23631:62;-1:-1:-1;;;23709:18:1;;;23702:31;23750:19;;33502:62:0;23552:223:1;33502:62:0;33701:21;33709:12;32894;;-1:-1:-1;32884:22:0;32807:105;33701:21;33700:22;33692:64;;;;-1:-1:-1;;;33692:64:0;;23222:2:1;33692:64:0;;;23204:21:1;23261:2;23241:18;;;23234:30;23300:31;23280:18;;;23273:59;23349:18;;33692:64:0;23194:179:1;33692:64:0;33783:12;33771:8;:24;;33763:71;;;;-1:-1:-1;;;33763:71:0;;26295:2:1;33763:71:0;;;26277:21:1;26334:2;26314:18;;;26307:30;26373:34;26353:18;;;26346:62;-1:-1:-1;;;26424:18:1;;;26417:32;26466:19;;33763:71:0;26267:224:1;33763:71:0;33843:61;33873:1;33877:2;33881:12;33895:8;33843:21;:61::i;:::-;-1:-1:-1;;;;;33946:16:0;;33913:30;33946:16;;;:12;:16;;;;;;;;;33913:49;;;;;;;;;-1:-1:-1;;;;;33913:49:0;;;;;-1:-1:-1;;;33913:49:0;;;;;;;;;;;33988:119;;;;;;;;34008:19;;33913:49;;33988:119;;;34008:39;;34038:8;;34008:39;:::i;:::-;-1:-1:-1;;;;;33988:119:0;;;;;34091:8;34056:11;:24;;;:44;;;;:::i;:::-;-1:-1:-1;;;;;33988:119:0;;;;;;-1:-1:-1;;;;;33969:16:0;;;;;;;:12;:16;;;;;;;;:138;;;;;;;;-1:-1:-1;;;33969:138:0;;;;;;;;;;;;34142:43;;;;;;;;;;-1:-1:-1;;;;;34168:15:0;34142:43;;;;;;;;34114:25;;;:11;:25;;;;;;:71;;;;;;;;;-1:-1:-1;;;34114:71:0;-1:-1:-1;;;;;;34114:71:0;;;;;;;;;;;;;;;;;;34126:12;;34238:281;34262:8;34258:1;:12;34238:281;;;34291:38;;34316:12;;-1:-1:-1;;;;;34291:38:0;;;34308:1;;34291:38;;34308:1;;34291:38;34356:59;34387:1;34391:2;34395:12;34409:5;34356:22;:59::i;:::-;34338:150;;;;-1:-1:-1;;;34338:150:0;;;;;;;:::i;:::-;34497:14;;;;:::i;:::-;;;;34272:3;;;;;:::i;:::-;;;;34238:281;;;-1:-1:-1;34527:12:0;:27;;;34561:60;44706:216;52965:305;53148:12;53131:131;53166:23;53181:8;53166:12;:23;:::i;:::-;53162:1;:27;53131:131;;;53218:9;;;;:6;:9;;;;;;;;53217:10;53209:53;;;;-1:-1:-1;;;53209:53:0;;11377:2:1;53209:53:0;;;11359:21:1;11416:2;11396:18;;;11389:30;11455:32;11435:18;;;11428:60;11505:18;;53209:53:0;11349:180:1;53209:53:0;53191:3;;;;:::i;:::-;;;;53131:131;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:631:1;78:5;-1:-1:-1;;;;;149:2:1;141:6;138:14;135:2;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:2;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:2;;;532:1;529;522:12;491:2;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;88:557;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:2;;813:1;810;803:12;747:2;699:124;;;:::o;828:367::-;891:8;901:6;955:3;948:4;940:6;936:17;932:27;922:2;;973:1;970;963:12;922:2;-1:-1:-1;996:20:1;;-1:-1:-1;;;;;1028:30:1;;1025:2;;;1071:1;1068;1061:12;1025:2;1108:4;1100:6;1096:17;1084:29;;1168:3;1161:4;1151:6;1148:1;1144:14;1136:6;1132:27;1128:38;1125:47;1122:2;;;1185:1;1182;1175:12;1122:2;912:283;;;;;:::o;1200:160::-;1265:20;;1321:13;;1314:21;1304:32;;1294:2;;1350:1;1347;1340:12;1365:186;1424:6;1477:2;1465:9;1456:7;1452:23;1448:32;1445:2;;;1493:1;1490;1483:12;1445:2;1516:29;1535:9;1516:29;:::i;1556:260::-;1624:6;1632;1685:2;1673:9;1664:7;1660:23;1656:32;1653:2;;;1701:1;1698;1691:12;1653:2;1724:29;1743:9;1724:29;:::i;:::-;1714:39;;1772:38;1806:2;1795:9;1791:18;1772:38;:::i;:::-;1762:48;;1643:173;;;;;:::o;1821:328::-;1898:6;1906;1914;1967:2;1955:9;1946:7;1942:23;1938:32;1935:2;;;1983:1;1980;1973:12;1935:2;2006:29;2025:9;2006:29;:::i;:::-;1996:39;;2054:38;2088:2;2077:9;2073:18;2054:38;:::i;:::-;2044:48;;2139:2;2128:9;2124:18;2111:32;2101:42;;1925:224;;;;;:::o;2154:666::-;2249:6;2257;2265;2273;2326:3;2314:9;2305:7;2301:23;2297:33;2294:2;;;2343:1;2340;2333:12;2294:2;2366:29;2385:9;2366:29;:::i;:::-;2356:39;;2414:38;2448:2;2437:9;2433:18;2414:38;:::i;:::-;2404:48;;2499:2;2488:9;2484:18;2471:32;2461:42;;2554:2;2543:9;2539:18;2526:32;-1:-1:-1;;;;;2573:6:1;2570:30;2567:2;;;2613:1;2610;2603:12;2567:2;2636:22;;2689:4;2681:13;;2677:27;-1:-1:-1;2667:2:1;;2718:1;2715;2708:12;2667:2;2741:73;2806:7;2801:2;2788:16;2783:2;2779;2775:11;2741:73;:::i;:::-;2731:83;;;2284:536;;;;;;;:::o;2825:254::-;2890:6;2898;2951:2;2939:9;2930:7;2926:23;2922:32;2919:2;;;2967:1;2964;2957:12;2919:2;2990:29;3009:9;2990:29;:::i;:::-;2980:39;;3038:35;3069:2;3058:9;3054:18;3038:35;:::i;3084:254::-;3152:6;3160;3213:2;3201:9;3192:7;3188:23;3184:32;3181:2;;;3229:1;3226;3219:12;3181:2;3252:29;3271:9;3252:29;:::i;:::-;3242:39;3328:2;3313:18;;;;3300:32;;-1:-1:-1;;;3171:167:1:o;3343:505::-;3435:6;3443;3451;3504:2;3492:9;3483:7;3479:23;3475:32;3472:2;;;3520:1;3517;3510:12;3472:2;3560:9;3547:23;-1:-1:-1;;;;;3585:6:1;3582:30;3579:2;;;3625:1;3622;3615:12;3579:2;3664:70;3726:7;3717:6;3706:9;3702:22;3664:70;:::i;:::-;3753:8;;-1:-1:-1;3638:96:1;-1:-1:-1;3807:35:1;;-1:-1:-1;3838:2:1;3823:18;;3807:35;:::i;:::-;3797:45;;3462:386;;;;;:::o;3853:505::-;3948:6;3956;3964;4017:2;4005:9;3996:7;3992:23;3988:32;3985:2;;;4033:1;4030;4023:12;3985:2;4073:9;4060:23;-1:-1:-1;;;;;4098:6:1;4095:30;4092:2;;;4138:1;4135;4128:12;4092:2;4177:70;4239:7;4230:6;4219:9;4215:22;4177:70;:::i;:::-;4266:8;;4151:96;;-1:-1:-1;4348:2:1;4333:18;;;;4320:32;;3975:383;-1:-1:-1;;;;3975:383:1:o;4873:180::-;4929:6;4982:2;4970:9;4961:7;4957:23;4953:32;4950:2;;;4998:1;4995;4988:12;4950:2;5021:26;5037:9;5021:26;:::i;5058:245::-;5116:6;5169:2;5157:9;5148:7;5144:23;5140:32;5137:2;;;5185:1;5182;5175:12;5137:2;5224:9;5211:23;5243:30;5267:5;5243:30;:::i;5308:249::-;5377:6;5430:2;5418:9;5409:7;5405:23;5401:32;5398:2;;;5446:1;5443;5436:12;5398:2;5478:9;5472:16;5497:30;5521:5;5497:30;:::i;5562:450::-;5631:6;5684:2;5672:9;5663:7;5659:23;5655:32;5652:2;;;5700:1;5697;5690:12;5652:2;5740:9;5727:23;-1:-1:-1;;;;;5765:6:1;5762:30;5759:2;;;5805:1;5802;5795:12;5759:2;5828:22;;5881:4;5873:13;;5869:27;-1:-1:-1;5859:2:1;;5910:1;5907;5900:12;5859:2;5933:73;5998:7;5993:2;5980:16;5975:2;5971;5967:11;5933:73;:::i;6017:180::-;6076:6;6129:2;6117:9;6108:7;6104:23;6100:32;6097:2;;;6145:1;6142;6135:12;6097:2;-1:-1:-1;6168:23:1;;6087:110;-1:-1:-1;6087:110:1:o;6202:184::-;6272:6;6325:2;6313:9;6304:7;6300:23;6296:32;6293:2;;;6341:1;6338;6331:12;6293:2;-1:-1:-1;6364:16:1;;6283:103;-1:-1:-1;6283:103:1:o;6391:337::-;6457:6;6465;6518:2;6506:9;6497:7;6493:23;6489:32;6486:2;;;6534:1;6531;6524:12;6486:2;6570:9;6557:23;6547:33;;6630:2;6619:9;6615:18;6602:32;6674:4;6667:5;6663:16;6656:5;6653:27;6643:2;;6694:1;6691;6684:12;6643:2;6717:5;6707:15;;;6476:252;;;;;:::o;6733:257::-;6774:3;6812:5;6806:12;6839:6;6834:3;6827:19;6855:63;6911:6;6904:4;6899:3;6895:14;6888:4;6881:5;6877:16;6855:63;:::i;:::-;6972:2;6951:15;-1:-1:-1;;6947:29:1;6938:39;;;;6979:4;6934:50;;6782:208;-1:-1:-1;;6782:208:1:o;6995:470::-;7174:3;7212:6;7206:13;7228:53;7274:6;7269:3;7262:4;7254:6;7250:17;7228:53;:::i;:::-;7344:13;;7303:16;;;;7366:57;7344:13;7303:16;7400:4;7388:17;;7366:57;:::i;:::-;7439:20;;7182:283;-1:-1:-1;;;;7182:283:1:o;7888:488::-;-1:-1:-1;;;;;8157:15:1;;;8139:34;;8209:15;;8204:2;8189:18;;8182:43;8256:2;8241:18;;8234:34;;;8304:3;8299:2;8284:18;;8277:31;;;8082:4;;8325:45;;8350:19;;8342:6;8325:45;:::i;:::-;8317:53;8091:285;-1:-1:-1;;;;;;8091:285:1:o;9019:632::-;9190:2;9242:21;;;9312:13;;9215:18;;;9334:22;;;9161:4;;9190:2;9413:15;;;;9387:2;9372:18;;;9161:4;9456:169;9470:6;9467:1;9464:13;9456:169;;;9531:13;;9519:26;;9600:15;;;;9565:12;;;;9492:1;9485:9;9456:169;;;-1:-1:-1;9642:3:1;;9170:481;-1:-1:-1;;;;;;9170:481:1:o;9848:219::-;9997:2;9986:9;9979:21;9960:4;10017:44;10057:2;10046:9;10042:18;10034:6;10017:44;:::i;11534:347::-;11736:2;11718:21;;;11775:2;11755:18;;;11748:30;11814:25;11809:2;11794:18;;11787:53;11872:2;11857:18;;11708:173::o;13058:344::-;13260:2;13242:21;;;13299:2;13279:18;;;13272:30;-1:-1:-1;;;13333:2:1;13318:18;;13311:50;13393:2;13378:18;;13232:170::o;15751:412::-;15953:2;15935:21;;;15992:2;15972:18;;;15965:30;16031:34;16026:2;16011:18;;16004:62;-1:-1:-1;;;16097:2:1;16082:18;;16075:46;16153:3;16138:19;;15925:238::o;16522:354::-;16724:2;16706:21;;;16763:2;16743:18;;;16736:30;16802:32;16797:2;16782:18;;16775:60;16867:2;16852:18;;16696:180::o;19248:356::-;19450:2;19432:21;;;19469:18;;;19462:30;19528:34;19523:2;19508:18;;19501:62;19595:2;19580:18;;19422:182::o;22249:415::-;22451:2;22433:21;;;22490:2;22470:18;;;22463:30;22529:34;22524:2;22509:18;;22502:62;-1:-1:-1;;;22595:2:1;22580:18;;22573:49;22654:3;22639:19;;22423:241::o;26966:253::-;27006:3;-1:-1:-1;;;;;27095:2:1;27092:1;27088:10;27125:2;27122:1;27118:10;27156:3;27152:2;27148:12;27143:3;27140:21;27137:2;;;27164:18;;:::i;27224:128::-;27264:3;27295:1;27291:6;27288:1;27285:13;27282:2;;;27301:18;;:::i;:::-;-1:-1:-1;27337:9:1;;27272:80::o;27357:120::-;27397:1;27423;27413:2;;27428:18;;:::i;:::-;-1:-1:-1;27462:9:1;;27403:74::o;27482:168::-;27522:7;27588:1;27584;27580:6;27576:14;27573:1;27570:21;27565:1;27558:9;27551:17;27547:45;27544:2;;;27595:18;;:::i;:::-;-1:-1:-1;27635:9:1;;27534:116::o;27655:246::-;27695:4;-1:-1:-1;;;;;27808:10:1;;;;27778;;27830:12;;;27827:2;;;27845:18;;:::i;:::-;27882:13;;27704:197;-1:-1:-1;;;27704:197:1:o;27906:125::-;27946:4;27974:1;27971;27968:8;27965:2;;;27979:18;;:::i;:::-;-1:-1:-1;28016:9:1;;27955:76::o;28036:258::-;28108:1;28118:113;28132:6;28129:1;28126:13;28118:113;;;28208:11;;;28202:18;28189:11;;;28182:39;28154:2;28147:10;28118:113;;;28249:6;28246:1;28243:13;28240:2;;;-1:-1:-1;;28284:1:1;28266:16;;28259:27;28089:205::o;28299:136::-;28338:3;28366:5;28356:2;;28375:18;;:::i;:::-;-1:-1:-1;;;28411:18:1;;28346:89::o;28440:380::-;28519:1;28515:12;;;;28562;;;28583:2;;28637:4;28629:6;28625:17;28615:27;;28583:2;28690;28682:6;28679:14;28659:18;28656:38;28653:2;;;28736:10;28731:3;28727:20;28724:1;28717:31;28771:4;28768:1;28761:15;28799:4;28796:1;28789:15;28653:2;;28495:325;;;:::o;28825:135::-;28864:3;-1:-1:-1;;28885:17:1;;28882:2;;;28905:18;;:::i;:::-;-1:-1:-1;28952:1:1;28941:13;;28872:88::o;28965:112::-;28997:1;29023;29013:2;;29028:18;;:::i;:::-;-1:-1:-1;29062:9:1;;29003:74::o;29082:127::-;29143:10;29138:3;29134:20;29131:1;29124:31;29174:4;29171:1;29164:15;29198:4;29195:1;29188:15;29214:127;29275:10;29270:3;29266:20;29263:1;29256:31;29306:4;29303:1;29296:15;29330:4;29327:1;29320:15;29346:127;29407:10;29402:3;29398:20;29395:1;29388:31;29438:4;29435:1;29428:15;29462:4;29459:1;29452:15;29478:127;29539:10;29534:3;29530:20;29527:1;29520:31;29570:4;29567:1;29560:15;29594:4;29591:1;29584:15;29610:131;-1:-1:-1;;;;;;29684:32:1;;29674:43;;29664:2;;29731:1;29728;29721:12
Swarm Source
ipfs://1b1cb6be662db4193ee5a763d3d2e532935bfe4f8cc7a947236885fa546acb54
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.