Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 11 from a total of 11 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw | 17142367 | 1061 days ago | IN | 0 ETH | 0.00127886 | ||||
| Withdraw | 17142355 | 1061 days ago | IN | 0 ETH | 0.00110118 | ||||
| Team Mint | 17004456 | 1081 days ago | IN | 0 ETH | 0.00331651 | ||||
| Public Mint | 17004431 | 1081 days ago | IN | 0.0116 ETH | 0.00350289 | ||||
| Public Mint | 17004374 | 1081 days ago | IN | 0.0116 ETH | 0.00338923 | ||||
| Set Price | 17004262 | 1081 days ago | IN | 0 ETH | 0.00068033 | ||||
| Public Mint | 17002771 | 1081 days ago | IN | 0 ETH | 0.00233997 | ||||
| Public Mint | 17002765 | 1081 days ago | IN | 0 ETH | 0.00221323 | ||||
| Team Mint | 16976869 | 1085 days ago | IN | 0 ETH | 0.03021913 | ||||
| Public Mint | 16976693 | 1085 days ago | IN | 0 ETH | 0.00337109 | ||||
| Public Mint | 16976675 | 1085 days ago | IN | 0 ETH | 0.00424878 |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
CMIJ
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2023-04-04
*/
// File: contracts/IOperatorFilterRegistry.sol
pragma solidity ^0.8.13;
interface IOperatorFilterRegistry {
function isOperatorAllowed(address registrant, address operator) external view returns (bool);
function register(address registrant) external;
function registerAndSubscribe(address registrant, address subscription) external;
function registerAndCopyEntries(address registrant, address registrantToCopy) external;
function updateOperator(address registrant, address operator, bool filtered) external;
function updateOperators(address registrant, address[] calldata operators, bool filtered) external;
function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external;
function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external;
function subscribe(address registrant, address registrantToSubscribe) external;
function unsubscribe(address registrant, bool copyExistingEntries) external;
function subscriptionOf(address addr) external returns (address registrant);
function subscribers(address registrant) external returns (address[] memory);
function subscriberAt(address registrant, uint256 index) external returns (address);
function copyEntriesOf(address registrant, address registrantToCopy) external;
function isOperatorFiltered(address registrant, address operator) external returns (bool);
function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool);
function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool);
function filteredOperators(address addr) external returns (address[] memory);
function filteredCodeHashes(address addr) external returns (bytes32[] memory);
function filteredOperatorAt(address registrant, uint256 index) external returns (address);
function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32);
function isRegistered(address addr) external returns (bool);
function codeHashOf(address addr) external returns (bytes32);
}
// File: contracts/OperatorFilterer.sol
pragma solidity ^0.8.13;
abstract contract OperatorFilterer {
error OperatorNotAllowed(address operator);
IOperatorFilterRegistry constant operatorFilterRegistry =
IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E);
constructor(address subscriptionOrRegistrantToCopy, bool subscribe) {
// If an inheriting token contract is deployed to a network without the registry deployed, the modifier
// will not revert, but the contract will need to be registered with the registry once it is deployed in
// order for the modifier to filter addresses.
if (address(operatorFilterRegistry).code.length > 0) {
if (subscribe) {
operatorFilterRegistry.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy);
} else {
if (subscriptionOrRegistrantToCopy != address(0)) {
operatorFilterRegistry.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy);
} else {
operatorFilterRegistry.register(address(this));
}
}
}
}
modifier onlyAllowedOperator(address from) virtual {
// Check registry code length to facilitate testing in environments without a deployed registry.
if (address(operatorFilterRegistry).code.length > 0) {
// Allow spending tokens from addresses with balance
// Note that this still allows listings and marketplaces with escrow to transfer tokens if transferred
// from an EOA.
if (from == msg.sender) {
_;
return;
}
if (
!(
operatorFilterRegistry.isOperatorAllowed(address(this), msg.sender)
&& operatorFilterRegistry.isOperatorAllowed(address(this), from)
)
) {
revert OperatorNotAllowed(msg.sender);
}
}
_;
}
}
// File: contracts/DefaultOperatorFilterer.sol
pragma solidity ^0.8.13;
abstract contract DefaultOperatorFilterer is OperatorFilterer {
address constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6);
constructor() OperatorFilterer(DEFAULT_SUBSCRIPTION, true) {}
}
// File: contracts/IERC721A.sol
// ERC721A Contracts v4.0.0
// Creator: Chiru Labs
pragma solidity ^0.8.4;
/**
* @dev Interface of an ERC721A compliant contract.
*/
interface IERC721A {
/**
* The caller must own the token or be an approved operator.
*/
error ApprovalCallerNotOwnerNorApproved();
/**
* The token does not exist.
*/
error ApprovalQueryForNonexistentToken();
/**
* The caller cannot approve to their own address.
*/
error ApproveToCaller();
/**
* The caller cannot approve to the current owner.
*/
error ApprovalToCurrentOwner();
/**
* Cannot query the balance for the zero address.
*/
error BalanceQueryForZeroAddress();
/**
* Cannot mint to the zero address.
*/
error MintToZeroAddress();
/**
* The quantity of tokens minted must be more than zero.
*/
error MintZeroQuantity();
/**
* The token does not exist.
*/
error OwnerQueryForNonexistentToken();
/**
* The caller must own the token or be an approved operator.
*/
error TransferCallerNotOwnerNorApproved();
/**
* The token must be owned by `from`.
*/
error TransferFromIncorrectOwner();
/**
* Cannot safely transfer to a contract that does not implement the ERC721Receiver interface.
*/
error TransferToNonERC721ReceiverImplementer();
/**
* Cannot transfer to the zero address.
*/
error TransferToZeroAddress();
/**
* The token does not exist.
*/
error URIQueryForNonexistentToken();
struct TokenOwnership {
// The address of the owner.
address addr;
// Keeps track of the start time of ownership with minimal overhead for tokenomics.
uint64 startTimestamp;
// Whether the token has been burned.
bool burned;
}
/**
* @dev Returns the total amount of tokens stored by the contract.
*
* Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens.
*/
function totalSupply() external view returns (uint256);
// ==============================
// 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);
// ==============================
// IERC721
// ==============================
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must 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 Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
// ==============================
// IERC721Metadata
// ==============================
/**
* @dev Returns the token collection name.
*/
function name() external view returns (string memory);
/**
* @dev Returns the token collection symbol.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
*/
function tokenURI(uint256 tokenId) external view returns (string memory);
}
// File: contracts/ERC721A.sol
// ERC721A Contracts v4.0.0
// Creator: Chiru Labs
pragma solidity ^0.8.4;
/**
* @dev ERC721 token receiver interface.
*/
interface ERC721A__IERC721Receiver {
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
/**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
* the Metadata extension. Built to optimize for lower gas during batch mints.
*
* Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..).
*
* Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.
*
* Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256).
*/
contract ERC721A is IERC721A {
// Mask of an entry in packed address data.
uint256 private constant BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1;
// The bit position of `numberMinted` in packed address data.
uint256 private constant BITPOS_NUMBER_MINTED = 64;
// The bit position of `numberBurned` in packed address data.
uint256 private constant BITPOS_NUMBER_BURNED = 128;
// The bit position of `aux` in packed address data.
uint256 private constant BITPOS_AUX = 192;
// Mask of all 256 bits in packed address data except the 64 bits for `aux`.
uint256 private constant BITMASK_AUX_COMPLEMENT = (1 << 192) - 1;
// The bit position of `startTimestamp` in packed ownership.
uint256 private constant BITPOS_START_TIMESTAMP = 160;
// The bit mask of the `burned` bit in packed ownership.
uint256 private constant BITMASK_BURNED = 1 << 224;
// The bit position of the `nextInitialized` bit in packed ownership.
uint256 private constant BITPOS_NEXT_INITIALIZED = 225;
// The bit mask of the `nextInitialized` bit in packed ownership.
uint256 private constant BITMASK_NEXT_INITIALIZED = 1 << 225;
// The tokenId of the next token to be minted.
uint256 private _currentIndex;
// The number of tokens burned.
uint256 private _burnCounter;
// Token name
string private _name;
// Token symbol
string private _symbol;
// Mapping from token ID to ownership details
// An empty struct value does not necessarily mean the token is unowned.
// See `_packedOwnershipOf` implementation for details.
//
// Bits Layout:
// - [0..159] `addr`
// - [160..223] `startTimestamp`
// - [224] `burned`
// - [225] `nextInitialized`
mapping(uint256 => uint256) private _packedOwnerships;
// Mapping owner address to address data.
//
// Bits Layout:
// - [0..63] `balance`
// - [64..127] `numberMinted`
// - [128..191] `numberBurned`
// - [192..255] `aux`
mapping(address => uint256) private _packedAddressData;
// Mapping from token ID to approved address.
mapping(uint256 => address) private _tokenApprovals;
// Mapping from owner to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
_currentIndex = _startTokenId();
}
/**
* @dev Returns the starting token ID.
* To change the starting token ID, please override this function.
*/
function _startTokenId() internal view virtual returns (uint256) {
return 0;
}
/**
* @dev Returns the next token ID to be minted.
*/
function _nextTokenId() internal view returns (uint256) {
return _currentIndex;
}
/**
* @dev Returns the total number of tokens in existence.
* Burned tokens will reduce the count.
* To get the total number of tokens minted, please see `_totalMinted`.
*/
function totalSupply() public view override returns (uint256) {
// Counter underflow is impossible as _burnCounter cannot be incremented
// more than `_currentIndex - _startTokenId()` times.
unchecked {
return _currentIndex - _burnCounter - _startTokenId();
}
}
/**
* @dev Returns the total amount of tokens minted in the contract.
*/
function _totalMinted() internal view returns (uint256) {
// Counter underflow is impossible as _currentIndex does not decrement,
// and it is initialized to `_startTokenId()`
unchecked {
return _currentIndex - _startTokenId();
}
}
/**
* @dev Returns the total number of tokens burned.
*/
function _totalBurned() internal view returns (uint256) {
return _burnCounter;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
// The interface IDs are constants representing the first 4 bytes of the XOR of
// all function selectors in the interface. See: https://eips.ethereum.org/EIPS/eip-165
// e.g. `bytes4(i.functionA.selector ^ i.functionB.selector ^ ...)`
return
interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165.
interfaceId == 0x80ac58cd || // ERC165 interface ID for ERC721.
interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata.
}
/**
* @dev See {IERC721-balanceOf}.
*/
function balanceOf(address owner) public view override returns (uint256) {
if (_addressToUint256(owner) == 0) revert BalanceQueryForZeroAddress();
return _packedAddressData[owner] & BITMASK_ADDRESS_DATA_ENTRY;
}
/**
* Returns the number of tokens minted by `owner`.
*/
function _numberMinted(address owner) internal view returns (uint256) {
return (_packedAddressData[owner] >> BITPOS_NUMBER_MINTED) & BITMASK_ADDRESS_DATA_ENTRY;
}
/**
* Returns the number of tokens burned by or on behalf of `owner`.
*/
function _numberBurned(address owner) internal view returns (uint256) {
return (_packedAddressData[owner] >> BITPOS_NUMBER_BURNED) & BITMASK_ADDRESS_DATA_ENTRY;
}
/**
* Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
*/
function _getAux(address owner) internal view returns (uint64) {
return uint64(_packedAddressData[owner] >> BITPOS_AUX);
}
/**
* Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
* If there are multiple variables, please pack them into a uint64.
*/
function _setAux(address owner, uint64 aux) internal {
uint256 packed = _packedAddressData[owner];
uint256 auxCasted;
assembly { // Cast aux without masking.
auxCasted := aux
}
packed = (packed & BITMASK_AUX_COMPLEMENT) | (auxCasted << BITPOS_AUX);
_packedAddressData[owner] = packed;
}
/**
* Returns the packed ownership data of `tokenId`.
*/
function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) {
uint256 curr = tokenId;
unchecked {
if (_startTokenId() <= curr)
if (curr < _currentIndex) {
uint256 packed = _packedOwnerships[curr];
// If not burned.
if (packed & BITMASK_BURNED == 0) {
// Invariant:
// There will always be an ownership that has an address and is not burned
// before an ownership that does not have an address and is not burned.
// Hence, curr will not underflow.
//
// We can directly compare the packed value.
// If the address is zero, packed is zero.
while (packed == 0) {
packed = _packedOwnerships[--curr];
}
return packed;
}
}
}
revert OwnerQueryForNonexistentToken();
}
/**
* Returns the unpacked `TokenOwnership` struct from `packed`.
*/
function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) {
ownership.addr = address(uint160(packed));
ownership.startTimestamp = uint64(packed >> BITPOS_START_TIMESTAMP);
ownership.burned = packed & BITMASK_BURNED != 0;
}
/**
* Returns the unpacked `TokenOwnership` struct at `index`.
*/
function _ownershipAt(uint256 index) internal view returns (TokenOwnership memory) {
return _unpackedOwnership(_packedOwnerships[index]);
}
/**
* @dev Initializes the ownership slot minted at `index` for efficiency purposes.
*/
function _initializeOwnershipAt(uint256 index) internal {
if (_packedOwnerships[index] == 0) {
_packedOwnerships[index] = _packedOwnershipOf(index);
}
}
/**
* Gas spent here starts off proportional to the maximum mint batch size.
* It gradually moves to O(1) as tokens get transferred around in the collection over time.
*/
function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
return _unpackedOwnership(_packedOwnershipOf(tokenId));
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view override returns (address) {
return address(uint160(_packedOwnershipOf(tokenId)));
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
if (!_exists(tokenId)) revert URIQueryForNonexistentToken();
string memory baseURI = _baseURI();
return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId))) : '';
}
/**
* @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 Casts the address to uint256 without masking.
*/
function _addressToUint256(address value) private pure returns (uint256 result) {
assembly {
result := value
}
}
/**
* @dev Casts the boolean to uint256 without branching.
*/
function _boolToUint256(bool value) private pure returns (uint256 result) {
assembly {
result := value
}
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public override {
address owner = address(uint160(_packedOwnershipOf(tokenId)));
if (to == owner) revert ApprovalToCurrentOwner();
if (_msgSenderERC721A() != owner)
if (!isApprovedForAll(owner, _msgSenderERC721A())) {
revert ApprovalCallerNotOwnerNorApproved();
}
_tokenApprovals[tokenId] = to;
emit Approval(owner, to, tokenId);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view override returns (address) {
if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
if (operator == _msgSenderERC721A()) revert ApproveToCaller();
_operatorApprovals[_msgSenderERC721A()][operator] = approved;
emit ApprovalForAll(_msgSenderERC721A(), operator, approved);
}
/**
* @dev See {IERC721-isApprovedForAll}.
*/
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
return _operatorApprovals[owner][operator];
}
/**
* @dev See {IERC721-transferFrom}.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
_transfer(from, to, tokenId);
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
safeTransferFrom(from, to, tokenId, '');
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory _data
) public virtual override {
_transfer(from, to, tokenId);
if (to.code.length != 0)
if (!_checkContractOnERC721Received(from, to, tokenId, _data)) {
revert TransferToNonERC721ReceiverImplementer();
}
}
/**
* @dev Returns whether `tokenId` exists.
*
* Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
*
* Tokens start existing when they are minted (`_mint`),
*/
function _exists(uint256 tokenId) internal view returns (bool) {
return
_startTokenId() <= tokenId &&
tokenId < _currentIndex && // If within bounds,
_packedOwnerships[tokenId] & BITMASK_BURNED == 0; // and not burned.
}
/**
* @dev Equivalent to `_safeMint(to, quantity, '')`.
*/
function _safeMint(address to, uint256 quantity) internal {
_safeMint(to, quantity, '');
}
/**
* @dev Safely mints `quantity` tokens and transfers them to `to`.
*
* Requirements:
*
* - If `to` refers to a smart contract, it must implement
* {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
* - `quantity` must be greater than 0.
*
* Emits a {Transfer} event.
*/
function _safeMint(
address to,
uint256 quantity,
bytes memory _data
) internal {
uint256 startTokenId = _currentIndex;
if (_addressToUint256(to) == 0) revert MintToZeroAddress();
if (quantity == 0) revert MintZeroQuantity();
_beforeTokenTransfers(address(0), to, startTokenId, quantity);
// Overflows are incredibly unrealistic.
// balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
// updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
unchecked {
// Updates:
// - `balance += quantity`.
// - `numberMinted += quantity`.
//
// We can directly add to the balance and number minted.
_packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1);
// Updates:
// - `address` to the owner.
// - `startTimestamp` to the timestamp of minting.
// - `burned` to `false`.
// - `nextInitialized` to `quantity == 1`.
_packedOwnerships[startTokenId] =
_addressToUint256(to) |
(block.timestamp << BITPOS_START_TIMESTAMP) |
(_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED);
uint256 updatedIndex = startTokenId;
uint256 end = updatedIndex + quantity;
if (to.code.length != 0) {
do {
emit Transfer(address(0), to, updatedIndex);
if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
revert TransferToNonERC721ReceiverImplementer();
}
} while (updatedIndex < end);
// Reentrancy protection
if (_currentIndex != startTokenId) revert();
} else {
do {
emit Transfer(address(0), to, updatedIndex++);
} while (updatedIndex < end);
}
_currentIndex = updatedIndex;
}
_afterTokenTransfers(address(0), to, startTokenId, quantity);
}
/**
* @dev Mints `quantity` tokens and transfers them to `to`.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `quantity` must be greater than 0.
*
* Emits a {Transfer} event.
*/
function _mint(address to, uint256 quantity) internal {
uint256 startTokenId = _currentIndex;
if (_addressToUint256(to) == 0) revert MintToZeroAddress();
if (quantity == 0) revert MintZeroQuantity();
_beforeTokenTransfers(address(0), to, startTokenId, quantity);
// Overflows are incredibly unrealistic.
// balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
// updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
unchecked {
// Updates:
// - `balance += quantity`.
// - `numberMinted += quantity`.
//
// We can directly add to the balance and number minted.
_packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1);
// Updates:
// - `address` to the owner.
// - `startTimestamp` to the timestamp of minting.
// - `burned` to `false`.
// - `nextInitialized` to `quantity == 1`.
_packedOwnerships[startTokenId] =
_addressToUint256(to) |
(block.timestamp << BITPOS_START_TIMESTAMP) |
(_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED);
uint256 updatedIndex = startTokenId;
uint256 end = updatedIndex + quantity;
do {
emit Transfer(address(0), to, updatedIndex++);
} while (updatedIndex < end);
_currentIndex = updatedIndex;
}
_afterTokenTransfers(address(0), to, startTokenId, quantity);
}
/**
* @dev Transfers `tokenId` from `from` to `to`.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
*
* Emits a {Transfer} event.
*/
function _transfer(
address from,
address to,
uint256 tokenId
) private {
uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);
if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner();
address approvedAddress = _tokenApprovals[tokenId];
bool isApprovedOrOwner = (_msgSenderERC721A() == from ||
isApprovedForAll(from, _msgSenderERC721A()) ||
approvedAddress == _msgSenderERC721A());
if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
if (_addressToUint256(to) == 0) revert TransferToZeroAddress();
_beforeTokenTransfers(from, to, tokenId, 1);
// Clear approvals from the previous owner.
if (_addressToUint256(approvedAddress) != 0) {
delete _tokenApprovals[tokenId];
}
// Underflow of the sender's balance is impossible because we check for
// ownership above and the recipient's balance can't realistically overflow.
// Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
unchecked {
// We can directly increment and decrement the balances.
--_packedAddressData[from]; // Updates: `balance -= 1`.
++_packedAddressData[to]; // Updates: `balance += 1`.
// Updates:
// - `address` to the next owner.
// - `startTimestamp` to the timestamp of transfering.
// - `burned` to `false`.
// - `nextInitialized` to `true`.
_packedOwnerships[tokenId] =
_addressToUint256(to) |
(block.timestamp << BITPOS_START_TIMESTAMP) |
BITMASK_NEXT_INITIALIZED;
// If the next slot may not have been initialized (i.e. `nextInitialized == false`) .
if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) {
uint256 nextTokenId = tokenId + 1;
// If the next slot's address is zero and not burned (i.e. packed value is zero).
if (_packedOwnerships[nextTokenId] == 0) {
// If the next slot is within bounds.
if (nextTokenId != _currentIndex) {
// Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`.
_packedOwnerships[nextTokenId] = prevOwnershipPacked;
}
}
}
}
emit Transfer(from, to, tokenId);
_afterTokenTransfers(from, to, tokenId, 1);
}
/**
* @dev Equivalent to `_burn(tokenId, false)`.
*/
function _burn(uint256 tokenId) internal virtual {
_burn(tokenId, false);
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);
address from = address(uint160(prevOwnershipPacked));
address approvedAddress = _tokenApprovals[tokenId];
if (approvalCheck) {
bool isApprovedOrOwner = (_msgSenderERC721A() == from ||
isApprovedForAll(from, _msgSenderERC721A()) ||
approvedAddress == _msgSenderERC721A());
if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
}
_beforeTokenTransfers(from, address(0), tokenId, 1);
// Clear approvals from the previous owner.
if (_addressToUint256(approvedAddress) != 0) {
delete _tokenApprovals[tokenId];
}
// Underflow of the sender's balance is impossible because we check for
// ownership above and the recipient's balance can't realistically overflow.
// Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
unchecked {
// Updates:
// - `balance -= 1`.
// - `numberBurned += 1`.
//
// We can directly decrement the balance, and increment the number burned.
// This is equivalent to `packed -= 1; packed += 1 << BITPOS_NUMBER_BURNED;`.
_packedAddressData[from] += (1 << BITPOS_NUMBER_BURNED) - 1;
// Updates:
// - `address` to the last owner.
// - `startTimestamp` to the timestamp of burning.
// - `burned` to `true`.
// - `nextInitialized` to `true`.
_packedOwnerships[tokenId] =
_addressToUint256(from) |
(block.timestamp << BITPOS_START_TIMESTAMP) |
BITMASK_BURNED |
BITMASK_NEXT_INITIALIZED;
// If the next slot may not have been initialized (i.e. `nextInitialized == false`) .
if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) {
uint256 nextTokenId = tokenId + 1;
// If the next slot's address is zero and not burned (i.e. packed value is zero).
if (_packedOwnerships[nextTokenId] == 0) {
// If the next slot is within bounds.
if (nextTokenId != _currentIndex) {
// Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`.
_packedOwnerships[nextTokenId] = prevOwnershipPacked;
}
}
}
}
emit Transfer(from, address(0), tokenId);
_afterTokenTransfers(from, address(0), tokenId, 1);
// Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
unchecked {
_burnCounter++;
}
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract.
*
* @param from address representing the previous owner of the given token ID
* @param to target address that will receive the tokens
* @param tokenId uint256 ID of the token to be transferred
* @param _data bytes optional data to send along with the call
* @return bool whether the call correctly returned the expected magic value
*/
function _checkContractOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory _data
) private returns (bool) {
try ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(), from, tokenId, _data) returns (
bytes4 retval
) {
return retval == ERC721A__IERC721Receiver(to).onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert TransferToNonERC721ReceiverImplementer();
} else {
assembly {
revert(add(32, reason), mload(reason))
}
}
}
}
/**
* @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
* And also called before burning one token.
*
* startTokenId - the first token id to be transferred
* quantity - the amount to be transferred
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, `from`'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, `tokenId` will be burned by `from`.
* - `from` and `to` are never both zero.
*/
function _beforeTokenTransfers(
address from,
address to,
uint256 startTokenId,
uint256 quantity
) internal virtual {}
/**
* @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
* minting.
* And also called after one token has been burned.
*
* startTokenId - the first token id to be transferred
* quantity - the amount to be transferred
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, `from`'s `tokenId` has been
* transferred to `to`.
* - When `from` is zero, `tokenId` has been minted for `to`.
* - When `to` is zero, `tokenId` has been burned by `from`.
* - `from` and `to` are never both zero.
*/
function _afterTokenTransfers(
address from,
address to,
uint256 startTokenId,
uint256 quantity
) internal virtual {}
/**
* @dev Returns the message sender (defaults to `msg.sender`).
*
* If you are writing GSN compatible contracts, you need to override this function.
*/
function _msgSenderERC721A() internal view virtual returns (address) {
return msg.sender;
}
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function _toString(uint256 value) internal pure returns (string memory ptr) {
assembly {
// The maximum value of a uint256 contains 78 digits (1 byte per digit),
// but we allocate 128 bytes to keep the free memory pointer 32-byte word aliged.
// We will need 1 32-byte word to store the length,
// and 3 32-byte words to store a maximum of 78 digits. Total: 32 + 3 * 32 = 128.
ptr := add(mload(0x40), 128)
// Update the free memory pointer to allocate.
mstore(0x40, ptr)
// Cache the end of the memory to calculate the length later.
let end := ptr
// We write the string from the rightmost digit to the leftmost digit.
// The following is essentially a do-while loop that also handles the zero case.
// Costs a bit more than early returning for the zero case,
// but cheaper in terms of deployment and overall runtime costs.
for {
// Initialize and perform the first pass without check.
let temp := value
// Move the pointer 1 byte leftwards to point to an empty character slot.
ptr := sub(ptr, 1)
// Write the character to the pointer. 48 is the ASCII index of '0'.
mstore8(ptr, add(48, mod(temp, 10)))
temp := div(temp, 10)
} temp {
// Keep dividing `temp` until zero.
temp := div(temp, 10)
} { // Body of the for loop.
ptr := sub(ptr, 1)
mstore8(ptr, add(48, mod(temp, 10)))
}
let length := sub(end, ptr)
// Move the pointer 32 bytes leftwards to make room for the length.
ptr := sub(ptr, 32)
// Store the length.
mstore(ptr, length)
}
}
}
// File: @openzeppelin/contracts/utils/Strings.sol
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
// Inspired by OraclizeAPI's implementation - MIT licence
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
}
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: @openzeppelin/contracts/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/CMIJ.sol
pragma solidity ^0.8.13;
contract CMIJ is ERC721A, Ownable, DefaultOperatorFilterer {
using Strings for uint;
enum Step {
StandBy,
Live,
SoldOut,
Reveal
}
uint public saleStartTime;
string public baseURI;
string public notRevealedURI;
uint private constant MAX_SUPPLY = 4444;
bool private isRevealed = true;
uint public price = 0.004 ether;
mapping(address => uint) public FreeMintCount;
constructor(string memory _baseURI, uint _saleStartTime) ERC721A("Crypto Millionaires In Jail", "CMIJ")
{
baseURI = _baseURI;
saleStartTime = _saleStartTime;
}
modifier isNotContract() {
require(tx.origin == msg.sender, "Reentrancy Guard is watching");
_;
}
function getStep() public view returns(Step actualStep) {
if(block.timestamp < saleStartTime) {
return Step.StandBy;
}
if(block.timestamp >= saleStartTime) {
return Step.Live;
}
}
function teamMint(address _to, uint _quantity) external payable onlyOwner {
require(totalSupply() + _quantity <= MAX_SUPPLY, "NFT can't be minted anymore");
_safeMint(_to, _quantity);
}
function publicMint(address _account, uint _quantity) external payable isNotContract {
uint payCount = _quantity;
require(getStep() == Step.Live, "Mint is not yet LIVE");
require(totalSupply() + _quantity <= MAX_SUPPLY, "CMIJ is SOLD OUT. You can get your bambie through Opensea.");
if(FreeMintCount[msg.sender] < 1){
if (_quantity >1) { payCount = _quantity - 1; }
else{ payCount = 0; }
FreeMintCount[msg.sender] = 1;
}
require(msg.value >= payCount * price, "Incorrect amount of ETH");
_safeMint(_account, _quantity);
}
function setBaseUri(string memory _newBaseURI) external onlyOwner {
baseURI = _newBaseURI;
}
function setSaleStartTime(uint _newSaleStartTime) external onlyOwner {
saleStartTime = _newSaleStartTime;
}
function setPrice(uint _newPrice) external onlyOwner {
price = _newPrice;
}
function tokenURI(uint _tokenId) public view virtual override returns (string memory) {
require(_exists(_tokenId), "URI query for nonexistent token");
if(isRevealed == true) {
return string(abi.encodePacked(baseURI, _tokenId.toString(), ".json"));
}
else {
return string(abi.encodePacked(baseURI, notRevealedURI));
}
}
function transferFrom(address from, address to, uint256 tokenId) public override onlyAllowedOperator(from) {
super.transferFrom(from, to, tokenId);
}
function safeTransferFrom(address from, address to, uint256 tokenId) public override onlyAllowedOperator(from) {
super.safeTransferFrom(from, to, tokenId);
}
function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data)
public
override
onlyAllowedOperator(from)
{
super.safeTransferFrom(from, to, tokenId, data);
}
function withdraw(uint amount) public onlyOwner {
payable(msg.sender).transfer(amount);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"},{"internalType":"uint256","name":"_saleStartTime","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"FreeMintCount","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":[],"name":"getStep","outputs":[{"internalType":"enum CMIJ.Step","name":"actualStep","type":"uint8"}],"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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"publicMint","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":[],"name":"saleStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"_newBaseURI","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSaleStartTime","type":"uint256"}],"name":"setSaleStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"teamMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040526001600c60006101000a81548160ff021916908315150217905550660e35fa931a0000600d553480156200003757600080fd5b50604051620045173803806200451783398181016040528101906200005d9190620005f5565b733cc6cdda760b79bafa08df41ecfa224f810dceb660016040518060400160405280601b81526020017f43727970746f204d696c6c696f6e616972657320496e204a61696c00000000008152506040518060400160405280600481526020017f434d494a000000000000000000000000000000000000000000000000000000008152508160029081620000f191906200089c565b5080600390816200010391906200089c565b50620001146200035460201b60201c565b60008190555050506200013c620001306200035960201b60201c565b6200036160201b60201c565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b111562000331578015620001f7576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b8152600401620001bd929190620009c8565b600060405180830381600087803b158015620001d857600080fd5b505af1158015620001ed573d6000803e3d6000fd5b5050505062000330565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620002b1576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b815260040162000277929190620009c8565b600060405180830381600087803b1580156200029257600080fd5b505af1158015620002a7573d6000803e3d6000fd5b505050506200032f565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b8152600401620002fa9190620009f5565b600060405180830381600087803b1580156200031557600080fd5b505af11580156200032a573d6000803e3d6000fd5b505050505b5b5b505081600a90816200034491906200089c565b5080600981905550505062000a12565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004908262000445565b810181811067ffffffffffffffff82111715620004b257620004b162000456565b5b80604052505050565b6000620004c762000427565b9050620004d5828262000485565b919050565b600067ffffffffffffffff821115620004f857620004f762000456565b5b620005038262000445565b9050602081019050919050565b60005b838110156200053057808201518184015260208101905062000513565b60008484015250505050565b6000620005536200054d84620004da565b620004bb565b90508281526020810184848401111562000572576200057162000440565b5b6200057f84828562000510565b509392505050565b600082601f8301126200059f576200059e6200043b565b5b8151620005b18482602086016200053c565b91505092915050565b6000819050919050565b620005cf81620005ba565b8114620005db57600080fd5b50565b600081519050620005ef81620005c4565b92915050565b600080604083850312156200060f576200060e62000431565b5b600083015167ffffffffffffffff81111562000630576200062f62000436565b5b6200063e8582860162000587565b92505060206200065185828601620005de565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620006ae57607f821691505b602082108103620006c457620006c362000666565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200072e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620006ef565b6200073a8683620006ef565b95508019841693508086168417925050509392505050565b6000819050919050565b60006200077d620007776200077184620005ba565b62000752565b620005ba565b9050919050565b6000819050919050565b62000799836200075c565b620007b1620007a88262000784565b848454620006fc565b825550505050565b600090565b620007c8620007b9565b620007d58184846200078e565b505050565b5b81811015620007fd57620007f1600082620007be565b600181019050620007db565b5050565b601f8211156200084c576200081681620006ca565b6200082184620006df565b8101602085101562000831578190505b620008496200084085620006df565b830182620007da565b50505b505050565b600082821c905092915050565b6000620008716000198460080262000851565b1980831691505092915050565b60006200088c83836200085e565b9150826002028217905092915050565b620008a7826200065b565b67ffffffffffffffff811115620008c357620008c262000456565b5b620008cf825462000695565b620008dc82828562000801565b600060209050601f831160018114620009145760008415620008ff578287015190505b6200090b85826200087e565b8655506200097b565b601f1984166200092486620006ca565b60005b828110156200094e5784890151825560018201915060208501945060208101905062000927565b868310156200096e57848901516200096a601f8916826200085e565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620009b08262000983565b9050919050565b620009c281620009a3565b82525050565b6000604082019050620009df6000830185620009b7565b620009ee6020830184620009b7565b9392505050565b600060208201905062000a0c6000830184620009b7565b92915050565b613af58062000a226000396000f3fe6080604052600436106101c25760003560e01c8063715018a6116100f7578063a0bcfc7f11610095578063c87b56dd11610064578063c87b56dd1461061f578063ce6df2b91461065c578063e985e9c514610678578063f2fde38b146106b5576101c2565b8063a0bcfc7f14610588578063a22cb465146105b1578063add5a4fa146105da578063b88d4fde146105f6576101c2565b806391b7f5ed116100d157806391b7f5ed146104de57806395d89b41146105075780639e5288a014610532578063a035b1fe1461055d576101c2565b8063715018a61461047157806372250380146104885780638da5cb5b146104b3576101c2565b80632df2d9e811610164578063525f8a5c1161013e578063525f8a5c146103a35780636352211e146103cc5780636c0360eb1461040957806370a0823114610434576101c2565b80632df2d9e8146103145780632e1a7d4d1461035157806342842e0e1461037a576101c2565b8063095ea7b3116101a0578063095ea7b31461026c57806318160ddd146102955780631cbaee2d146102c057806323b872dd146102eb576101c2565b806301ffc9a7146101c757806306fdde0314610204578063081812fc1461022f575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e991906128de565b6106de565b6040516101fb9190612926565b60405180910390f35b34801561021057600080fd5b50610219610770565b60405161022691906129d1565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190612a29565b610802565b6040516102639190612a97565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190612ade565b61087e565b005b3480156102a157600080fd5b506102aa610a24565b6040516102b79190612b2d565b60405180910390f35b3480156102cc57600080fd5b506102d5610a3b565b6040516102e29190612b2d565b60405180910390f35b3480156102f757600080fd5b50610312600480360381019061030d9190612b48565b610a41565b005b34801561032057600080fd5b5061033b60048036038101906103369190612b9b565b610c23565b6040516103489190612b2d565b60405180910390f35b34801561035d57600080fd5b5061037860048036038101906103739190612a29565b610c3b565b005b34801561038657600080fd5b506103a1600480360381019061039c9190612b48565b610d01565b005b3480156103af57600080fd5b506103ca60048036038101906103c59190612a29565b610ee3565b005b3480156103d857600080fd5b506103f360048036038101906103ee9190612a29565b610f69565b6040516104009190612a97565b60405180910390f35b34801561041557600080fd5b5061041e610f7b565b60405161042b91906129d1565b60405180910390f35b34801561044057600080fd5b5061045b60048036038101906104569190612b9b565b611009565b6040516104689190612b2d565b60405180910390f35b34801561047d57600080fd5b5061048661109d565b005b34801561049457600080fd5b5061049d611125565b6040516104aa91906129d1565b60405180910390f35b3480156104bf57600080fd5b506104c86111b3565b6040516104d59190612a97565b60405180910390f35b3480156104ea57600080fd5b5061050560048036038101906105009190612a29565b6111dd565b005b34801561051357600080fd5b5061051c611263565b60405161052991906129d1565b60405180910390f35b34801561053e57600080fd5b506105476112f5565b6040516105549190612c3f565b60405180910390f35b34801561056957600080fd5b50610572611320565b60405161057f9190612b2d565b60405180910390f35b34801561059457600080fd5b506105af60048036038101906105aa9190612d8f565b611326565b005b3480156105bd57600080fd5b506105d860048036038101906105d39190612e04565b6113b5565b005b6105f460048036038101906105ef9190612ade565b61152c565b005b34801561060257600080fd5b5061061d60048036038101906106189190612ee5565b61160d565b005b34801561062b57600080fd5b5061064660048036038101906106419190612a29565b6117f2565b60405161065391906129d1565b60405180910390f35b61067660048036038101906106719190612ade565b6118b5565b005b34801561068457600080fd5b5061069f600480360381019061069a9190612f68565b611afc565b6040516106ac9190612926565b60405180910390f35b3480156106c157600080fd5b506106dc60048036038101906106d79190612b9b565b611b90565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061073957506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107695750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606002805461077f90612fd7565b80601f01602080910402602001604051908101604052809291908181526020018280546107ab90612fd7565b80156107f85780601f106107cd576101008083540402835291602001916107f8565b820191906000526020600020905b8154815290600101906020018083116107db57829003601f168201915b5050505050905090565b600061080d82611c87565b610843576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061088982611ce6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108f0576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661090f611db2565b73ffffffffffffffffffffffffffffffffffffffff16146109725761093b81610936611db2565b611afc565b610971576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000610a2e611dba565b6001546000540303905090565b60095481565b8260006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610c11573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ab357610aae848484611dbf565b610c1d565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610afc929190613008565b602060405180830381865afa158015610b19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3d9190613046565b8015610bcf57506daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401610b8d929190613008565b602060405180830381865afa158015610baa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bce9190613046565b5b610c1057336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610c079190612a97565b60405180910390fd5b5b610c1c848484611dbf565b5b50505050565b600e6020528060005260406000206000915090505481565b610c43611dcf565b73ffffffffffffffffffffffffffffffffffffffff16610c616111b3565b73ffffffffffffffffffffffffffffffffffffffff1614610cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cae906130bf565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610cfd573d6000803e3d6000fd5b5050565b8260006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610ed1573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d7357610d6e848484611dd7565b610edd565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610dbc929190613008565b602060405180830381865afa158015610dd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfd9190613046565b8015610e8f57506daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401610e4d929190613008565b602060405180830381865afa158015610e6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8e9190613046565b5b610ed057336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610ec79190612a97565b60405180910390fd5b5b610edc848484611dd7565b5b50505050565b610eeb611dcf565b73ffffffffffffffffffffffffffffffffffffffff16610f096111b3565b73ffffffffffffffffffffffffffffffffffffffff1614610f5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f56906130bf565b60405180910390fd5b8060098190555050565b6000610f7482611ce6565b9050919050565b600a8054610f8890612fd7565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb490612fd7565b80156110015780601f10610fd657610100808354040283529160200191611001565b820191906000526020600020905b815481529060010190602001808311610fe457829003601f168201915b505050505081565b60008061101583611df7565b0361104c576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6110a5611dcf565b73ffffffffffffffffffffffffffffffffffffffff166110c36111b3565b73ffffffffffffffffffffffffffffffffffffffff1614611119576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611110906130bf565b60405180910390fd5b6111236000611e01565b565b600b805461113290612fd7565b80601f016020809104026020016040519081016040528092919081815260200182805461115e90612fd7565b80156111ab5780601f10611180576101008083540402835291602001916111ab565b820191906000526020600020905b81548152906001019060200180831161118e57829003601f168201915b505050505081565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6111e5611dcf565b73ffffffffffffffffffffffffffffffffffffffff166112036111b3565b73ffffffffffffffffffffffffffffffffffffffff1614611259576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611250906130bf565b60405180910390fd5b80600d8190555050565b60606003805461127290612fd7565b80601f016020809104026020016040519081016040528092919081815260200182805461129e90612fd7565b80156112eb5780601f106112c0576101008083540402835291602001916112eb565b820191906000526020600020905b8154815290600101906020018083116112ce57829003601f168201915b5050505050905090565b600060095442101561130a576000905061131d565b600954421061131c576001905061131d565b5b90565b600d5481565b61132e611dcf565b73ffffffffffffffffffffffffffffffffffffffff1661134c6111b3565b73ffffffffffffffffffffffffffffffffffffffff16146113a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611399906130bf565b60405180910390fd5b80600a90816113b1919061328b565b5050565b6113bd611db2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611421576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061142e611db2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114db611db2565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115209190612926565b60405180910390a35050565b611534611dcf565b73ffffffffffffffffffffffffffffffffffffffff166115526111b3565b73ffffffffffffffffffffffffffffffffffffffff16146115a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159f906130bf565b60405180910390fd5b61115c816115b4610a24565b6115be919061338c565b11156115ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f69061340c565b60405180910390fd5b6116098282611ec7565b5050565b8360006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156117de573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116805761167b85858585611ee5565b6117eb565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b81526004016116c9929190613008565b602060405180830381865afa1580156116e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170a9190613046565b801561179c57506daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b815260040161175a929190613008565b602060405180830381865afa158015611777573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179b9190613046565b5b6117dd57336040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016117d49190612a97565b60405180910390fd5b5b6117ea85858585611ee5565b5b5050505050565b60606117fd82611c87565b61183c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183390613478565b60405180910390fd5b60011515600c60009054906101000a900460ff1615150361188957600a61186283611f58565b6040516020016118739291906135a3565b60405160208183030381529060405290506118b0565b600a600b60405160200161189e9291906135d2565b60405160208183030381529060405290505b919050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a90613642565b60405180910390fd5b60008190506001600381111561193c5761193b612bc8565b5b6119446112f5565b600381111561195657611955612bc8565b5b14611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d906136ae565b60405180910390fd5b61115c826119a2610a24565b6119ac919061338c565b11156119ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e490613740565b60405180910390fd5b6001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611a9d576001821115611a5257600182611a4b9190613760565b9050611a57565b600090505b6001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600d5481611aab9190613794565b341015611aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae490613822565b60405180910390fd5b611af78383611ec7565b505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b98611dcf565b73ffffffffffffffffffffffffffffffffffffffff16611bb66111b3565b73ffffffffffffffffffffffffffffffffffffffff1614611c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c03906130bf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c72906138b4565b60405180910390fd5b611c8481611e01565b50565b600081611c92611dba565b11158015611ca1575060005482105b8015611cdf575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b60008082905080611cf5611dba565b11611d7b57600054811015611d7a5760006004600083815260200190815260200160002054905060007c0100000000000000000000000000000000000000000000000000000000821603611d78575b60008103611d6e576004600083600190039350838152602001908152602001600020549050611d44565b8092505050611dad565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600033905090565b600090565b611dca8383836120b8565b505050565b600033905090565b611df28383836040518060200160405280600081525061160d565b505050565b6000819050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611ee182826040518060200160405280600081525061247d565b5050565b611ef08484846120b8565b60008373ffffffffffffffffffffffffffffffffffffffff163b14611f5257611f1b8484848461270c565b611f51576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b606060008203611f9f576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506120b3565b600082905060005b60008214611fd1578080611fba906138d4565b915050600a82611fca919061394b565b9150611fa7565b60008167ffffffffffffffff811115611fed57611fec612c64565b5b6040519080825280601f01601f19166020018201604052801561201f5781602001600182028036833780820191505090505b5090505b600085146120ac576001826120389190613760565b9150600a85612047919061397c565b6030612053919061338c565b60f81b818381518110612069576120686139ad565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856120a5919061394b565b9450612023565b8093505050505b919050565b60006120c382611ce6565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461212a576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008573ffffffffffffffffffffffffffffffffffffffff16612183611db2565b73ffffffffffffffffffffffffffffffffffffffff1614806121b257506121b1866121ac611db2565b611afc565b5b806121ef57506121c0611db2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b905080612228576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061223386611df7565b0361226a576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612277868686600161285c565b600061228283611df7565b146122be576006600085815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b61238587611df7565b1717600460008681526020019081526020016000208190555060007c020000000000000000000000000000000000000000000000000000000084160361240d576000600185019050600060046000838152602001908152602001600020540361240b57600054811461240a578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124758686866001612862565b505050505050565b600080549050600061248e85611df7565b036124c5576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083036124ff576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61250c600085838661285c565b600160406001901b178302600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e161257160018514612868565b901b60a042901b61258186611df7565b1717600460008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b14612685575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612635600087848060010195508761270c565b61266b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106125c657826000541461268057600080fd5b6126f0565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210612686575b8160008190555050506127066000858386612862565b50505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612732611db2565b8786866040518563ffffffff1660e01b81526004016127549493929190613a31565b6020604051808303816000875af192505050801561279057506040513d601f19601f8201168201806040525081019061278d9190613a92565b60015b612809573d80600081146127c0576040519150601f19603f3d011682016040523d82523d6000602084013e6127c5565b606091505b506000815103612801576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b50505050565b50505050565b6000819050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6128bb81612886565b81146128c657600080fd5b50565b6000813590506128d8816128b2565b92915050565b6000602082840312156128f4576128f361287c565b5b6000612902848285016128c9565b91505092915050565b60008115159050919050565b6129208161290b565b82525050565b600060208201905061293b6000830184612917565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561297b578082015181840152602081019050612960565b60008484015250505050565b6000601f19601f8301169050919050565b60006129a382612941565b6129ad818561294c565b93506129bd81856020860161295d565b6129c681612987565b840191505092915050565b600060208201905081810360008301526129eb8184612998565b905092915050565b6000819050919050565b612a06816129f3565b8114612a1157600080fd5b50565b600081359050612a23816129fd565b92915050565b600060208284031215612a3f57612a3e61287c565b5b6000612a4d84828501612a14565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a8182612a56565b9050919050565b612a9181612a76565b82525050565b6000602082019050612aac6000830184612a88565b92915050565b612abb81612a76565b8114612ac657600080fd5b50565b600081359050612ad881612ab2565b92915050565b60008060408385031215612af557612af461287c565b5b6000612b0385828601612ac9565b9250506020612b1485828601612a14565b9150509250929050565b612b27816129f3565b82525050565b6000602082019050612b426000830184612b1e565b92915050565b600080600060608486031215612b6157612b6061287c565b5b6000612b6f86828701612ac9565b9350506020612b8086828701612ac9565b9250506040612b9186828701612a14565b9150509250925092565b600060208284031215612bb157612bb061287c565b5b6000612bbf84828501612ac9565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110612c0857612c07612bc8565b5b50565b6000819050612c1982612bf7565b919050565b6000612c2982612c0b565b9050919050565b612c3981612c1e565b82525050565b6000602082019050612c546000830184612c30565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612c9c82612987565b810181811067ffffffffffffffff82111715612cbb57612cba612c64565b5b80604052505050565b6000612cce612872565b9050612cda8282612c93565b919050565b600067ffffffffffffffff821115612cfa57612cf9612c64565b5b612d0382612987565b9050602081019050919050565b82818337600083830152505050565b6000612d32612d2d84612cdf565b612cc4565b905082815260208101848484011115612d4e57612d4d612c5f565b5b612d59848285612d10565b509392505050565b600082601f830112612d7657612d75612c5a565b5b8135612d86848260208601612d1f565b91505092915050565b600060208284031215612da557612da461287c565b5b600082013567ffffffffffffffff811115612dc357612dc2612881565b5b612dcf84828501612d61565b91505092915050565b612de18161290b565b8114612dec57600080fd5b50565b600081359050612dfe81612dd8565b92915050565b60008060408385031215612e1b57612e1a61287c565b5b6000612e2985828601612ac9565b9250506020612e3a85828601612def565b9150509250929050565b600067ffffffffffffffff821115612e5f57612e5e612c64565b5b612e6882612987565b9050602081019050919050565b6000612e88612e8384612e44565b612cc4565b905082815260208101848484011115612ea457612ea3612c5f565b5b612eaf848285612d10565b509392505050565b600082601f830112612ecc57612ecb612c5a565b5b8135612edc848260208601612e75565b91505092915050565b60008060008060808587031215612eff57612efe61287c565b5b6000612f0d87828801612ac9565b9450506020612f1e87828801612ac9565b9350506040612f2f87828801612a14565b925050606085013567ffffffffffffffff811115612f5057612f4f612881565b5b612f5c87828801612eb7565b91505092959194509250565b60008060408385031215612f7f57612f7e61287c565b5b6000612f8d85828601612ac9565b9250506020612f9e85828601612ac9565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612fef57607f821691505b60208210810361300257613001612fa8565b5b50919050565b600060408201905061301d6000830185612a88565b61302a6020830184612a88565b9392505050565b60008151905061304081612dd8565b92915050565b60006020828403121561305c5761305b61287c565b5b600061306a84828501613031565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006130a960208361294c565b91506130b482613073565b602082019050919050565b600060208201905081810360008301526130d88161309c565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026131417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613104565b61314b8683613104565b95508019841693508086168417925050509392505050565b6000819050919050565b600061318861318361317e846129f3565b613163565b6129f3565b9050919050565b6000819050919050565b6131a28361316d565b6131b66131ae8261318f565b848454613111565b825550505050565b600090565b6131cb6131be565b6131d6818484613199565b505050565b5b818110156131fa576131ef6000826131c3565b6001810190506131dc565b5050565b601f82111561323f57613210816130df565b613219846130f4565b81016020851015613228578190505b61323c613234856130f4565b8301826131db565b50505b505050565b600082821c905092915050565b600061326260001984600802613244565b1980831691505092915050565b600061327b8383613251565b9150826002028217905092915050565b61329482612941565b67ffffffffffffffff8111156132ad576132ac612c64565b5b6132b78254612fd7565b6132c28282856131fe565b600060209050601f8311600181146132f557600084156132e3578287015190505b6132ed858261326f565b865550613355565b601f198416613303866130df565b60005b8281101561332b57848901518255600182019150602085019450602081019050613306565b868310156133485784890151613344601f891682613251565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613397826129f3565b91506133a2836129f3565b92508282019050808211156133ba576133b961335d565b5b92915050565b7f4e46542063616e2774206265206d696e74656420616e796d6f72650000000000600082015250565b60006133f6601b8361294c565b9150613401826133c0565b602082019050919050565b60006020820190508181036000830152613425816133e9565b9050919050565b7f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e00600082015250565b6000613462601f8361294c565b915061346d8261342c565b602082019050919050565b6000602082019050818103600083015261349181613455565b9050919050565b600081905092915050565b600081546134b081612fd7565b6134ba8186613498565b945060018216600081146134d557600181146134ea5761351d565b60ff198316865281151582028601935061351d565b6134f3856130df565b60005b83811015613515578154818901526001820191506020810190506134f6565b838801955050505b50505092915050565b600061353182612941565b61353b8185613498565b935061354b81856020860161295d565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b600061358d600583613498565b915061359882613557565b600582019050919050565b60006135af82856134a3565b91506135bb8284613526565b91506135c682613580565b91508190509392505050565b60006135de82856134a3565b91506135ea82846134a3565b91508190509392505050565b7f5265656e7472616e6379204775617264206973207761746368696e6700000000600082015250565b600061362c601c8361294c565b9150613637826135f6565b602082019050919050565b6000602082019050818103600083015261365b8161361f565b9050919050565b7f4d696e74206973206e6f7420796574204c495645000000000000000000000000600082015250565b600061369860148361294c565b91506136a382613662565b602082019050919050565b600060208201905081810360008301526136c78161368b565b9050919050565b7f434d494a20697320534f4c44204f55542e20596f752063616e2067657420796f60008201527f75722062616d626965207468726f756768204f70656e7365612e000000000000602082015250565b600061372a603a8361294c565b9150613735826136ce565b604082019050919050565b600060208201905081810360008301526137598161371d565b9050919050565b600061376b826129f3565b9150613776836129f3565b925082820390508181111561378e5761378d61335d565b5b92915050565b600061379f826129f3565b91506137aa836129f3565b92508282026137b8816129f3565b915082820484148315176137cf576137ce61335d565b5b5092915050565b7f496e636f727265637420616d6f756e74206f6620455448000000000000000000600082015250565b600061380c60178361294c565b9150613817826137d6565b602082019050919050565b6000602082019050818103600083015261383b816137ff565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061389e60268361294c565b91506138a982613842565b604082019050919050565b600060208201905081810360008301526138cd81613891565b9050919050565b60006138df826129f3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036139115761391061335d565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613956826129f3565b9150613961836129f3565b9250826139715761397061391c565b5b828204905092915050565b6000613987826129f3565b9150613992836129f3565b9250826139a2576139a161391c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000613a03826139dc565b613a0d81856139e7565b9350613a1d81856020860161295d565b613a2681612987565b840191505092915050565b6000608082019050613a466000830187612a88565b613a536020830186612a88565b613a606040830185612b1e565b8181036060830152613a7281846139f8565b905095945050505050565b600081519050613a8c816128b2565b92915050565b600060208284031215613aa857613aa761287c565b5b6000613ab684828501613a7d565b9150509291505056fea2646970667358221220d0a396dc0841312ba2e8743fa952dcbfbb561e8b7cbbfea065ad9300be599f4a64736f6c63430008120033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000642c49800000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d616a4a436e4d706158575637565931724b73584761735a685659477273513938637371656844557633567a442f00000000000000000000
Deployed Bytecode
0x6080604052600436106101c25760003560e01c8063715018a6116100f7578063a0bcfc7f11610095578063c87b56dd11610064578063c87b56dd1461061f578063ce6df2b91461065c578063e985e9c514610678578063f2fde38b146106b5576101c2565b8063a0bcfc7f14610588578063a22cb465146105b1578063add5a4fa146105da578063b88d4fde146105f6576101c2565b806391b7f5ed116100d157806391b7f5ed146104de57806395d89b41146105075780639e5288a014610532578063a035b1fe1461055d576101c2565b8063715018a61461047157806372250380146104885780638da5cb5b146104b3576101c2565b80632df2d9e811610164578063525f8a5c1161013e578063525f8a5c146103a35780636352211e146103cc5780636c0360eb1461040957806370a0823114610434576101c2565b80632df2d9e8146103145780632e1a7d4d1461035157806342842e0e1461037a576101c2565b8063095ea7b3116101a0578063095ea7b31461026c57806318160ddd146102955780631cbaee2d146102c057806323b872dd146102eb576101c2565b806301ffc9a7146101c757806306fdde0314610204578063081812fc1461022f575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e991906128de565b6106de565b6040516101fb9190612926565b60405180910390f35b34801561021057600080fd5b50610219610770565b60405161022691906129d1565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190612a29565b610802565b6040516102639190612a97565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190612ade565b61087e565b005b3480156102a157600080fd5b506102aa610a24565b6040516102b79190612b2d565b60405180910390f35b3480156102cc57600080fd5b506102d5610a3b565b6040516102e29190612b2d565b60405180910390f35b3480156102f757600080fd5b50610312600480360381019061030d9190612b48565b610a41565b005b34801561032057600080fd5b5061033b60048036038101906103369190612b9b565b610c23565b6040516103489190612b2d565b60405180910390f35b34801561035d57600080fd5b5061037860048036038101906103739190612a29565b610c3b565b005b34801561038657600080fd5b506103a1600480360381019061039c9190612b48565b610d01565b005b3480156103af57600080fd5b506103ca60048036038101906103c59190612a29565b610ee3565b005b3480156103d857600080fd5b506103f360048036038101906103ee9190612a29565b610f69565b6040516104009190612a97565b60405180910390f35b34801561041557600080fd5b5061041e610f7b565b60405161042b91906129d1565b60405180910390f35b34801561044057600080fd5b5061045b60048036038101906104569190612b9b565b611009565b6040516104689190612b2d565b60405180910390f35b34801561047d57600080fd5b5061048661109d565b005b34801561049457600080fd5b5061049d611125565b6040516104aa91906129d1565b60405180910390f35b3480156104bf57600080fd5b506104c86111b3565b6040516104d59190612a97565b60405180910390f35b3480156104ea57600080fd5b5061050560048036038101906105009190612a29565b6111dd565b005b34801561051357600080fd5b5061051c611263565b60405161052991906129d1565b60405180910390f35b34801561053e57600080fd5b506105476112f5565b6040516105549190612c3f565b60405180910390f35b34801561056957600080fd5b50610572611320565b60405161057f9190612b2d565b60405180910390f35b34801561059457600080fd5b506105af60048036038101906105aa9190612d8f565b611326565b005b3480156105bd57600080fd5b506105d860048036038101906105d39190612e04565b6113b5565b005b6105f460048036038101906105ef9190612ade565b61152c565b005b34801561060257600080fd5b5061061d60048036038101906106189190612ee5565b61160d565b005b34801561062b57600080fd5b5061064660048036038101906106419190612a29565b6117f2565b60405161065391906129d1565b60405180910390f35b61067660048036038101906106719190612ade565b6118b5565b005b34801561068457600080fd5b5061069f600480360381019061069a9190612f68565b611afc565b6040516106ac9190612926565b60405180910390f35b3480156106c157600080fd5b506106dc60048036038101906106d79190612b9b565b611b90565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061073957506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107695750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606002805461077f90612fd7565b80601f01602080910402602001604051908101604052809291908181526020018280546107ab90612fd7565b80156107f85780601f106107cd576101008083540402835291602001916107f8565b820191906000526020600020905b8154815290600101906020018083116107db57829003601f168201915b5050505050905090565b600061080d82611c87565b610843576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061088982611ce6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108f0576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661090f611db2565b73ffffffffffffffffffffffffffffffffffffffff16146109725761093b81610936611db2565b611afc565b610971576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000610a2e611dba565b6001546000540303905090565b60095481565b8260006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610c11573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ab357610aae848484611dbf565b610c1d565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610afc929190613008565b602060405180830381865afa158015610b19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3d9190613046565b8015610bcf57506daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401610b8d929190613008565b602060405180830381865afa158015610baa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bce9190613046565b5b610c1057336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610c079190612a97565b60405180910390fd5b5b610c1c848484611dbf565b5b50505050565b600e6020528060005260406000206000915090505481565b610c43611dcf565b73ffffffffffffffffffffffffffffffffffffffff16610c616111b3565b73ffffffffffffffffffffffffffffffffffffffff1614610cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cae906130bf565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610cfd573d6000803e3d6000fd5b5050565b8260006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610ed1573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d7357610d6e848484611dd7565b610edd565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610dbc929190613008565b602060405180830381865afa158015610dd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfd9190613046565b8015610e8f57506daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401610e4d929190613008565b602060405180830381865afa158015610e6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8e9190613046565b5b610ed057336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610ec79190612a97565b60405180910390fd5b5b610edc848484611dd7565b5b50505050565b610eeb611dcf565b73ffffffffffffffffffffffffffffffffffffffff16610f096111b3565b73ffffffffffffffffffffffffffffffffffffffff1614610f5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f56906130bf565b60405180910390fd5b8060098190555050565b6000610f7482611ce6565b9050919050565b600a8054610f8890612fd7565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb490612fd7565b80156110015780601f10610fd657610100808354040283529160200191611001565b820191906000526020600020905b815481529060010190602001808311610fe457829003601f168201915b505050505081565b60008061101583611df7565b0361104c576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6110a5611dcf565b73ffffffffffffffffffffffffffffffffffffffff166110c36111b3565b73ffffffffffffffffffffffffffffffffffffffff1614611119576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611110906130bf565b60405180910390fd5b6111236000611e01565b565b600b805461113290612fd7565b80601f016020809104026020016040519081016040528092919081815260200182805461115e90612fd7565b80156111ab5780601f10611180576101008083540402835291602001916111ab565b820191906000526020600020905b81548152906001019060200180831161118e57829003601f168201915b505050505081565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6111e5611dcf565b73ffffffffffffffffffffffffffffffffffffffff166112036111b3565b73ffffffffffffffffffffffffffffffffffffffff1614611259576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611250906130bf565b60405180910390fd5b80600d8190555050565b60606003805461127290612fd7565b80601f016020809104026020016040519081016040528092919081815260200182805461129e90612fd7565b80156112eb5780601f106112c0576101008083540402835291602001916112eb565b820191906000526020600020905b8154815290600101906020018083116112ce57829003601f168201915b5050505050905090565b600060095442101561130a576000905061131d565b600954421061131c576001905061131d565b5b90565b600d5481565b61132e611dcf565b73ffffffffffffffffffffffffffffffffffffffff1661134c6111b3565b73ffffffffffffffffffffffffffffffffffffffff16146113a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611399906130bf565b60405180910390fd5b80600a90816113b1919061328b565b5050565b6113bd611db2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611421576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061142e611db2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114db611db2565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115209190612926565b60405180910390a35050565b611534611dcf565b73ffffffffffffffffffffffffffffffffffffffff166115526111b3565b73ffffffffffffffffffffffffffffffffffffffff16146115a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159f906130bf565b60405180910390fd5b61115c816115b4610a24565b6115be919061338c565b11156115ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f69061340c565b60405180910390fd5b6116098282611ec7565b5050565b8360006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156117de573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116805761167b85858585611ee5565b6117eb565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b81526004016116c9929190613008565b602060405180830381865afa1580156116e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170a9190613046565b801561179c57506daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b815260040161175a929190613008565b602060405180830381865afa158015611777573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179b9190613046565b5b6117dd57336040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016117d49190612a97565b60405180910390fd5b5b6117ea85858585611ee5565b5b5050505050565b60606117fd82611c87565b61183c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183390613478565b60405180910390fd5b60011515600c60009054906101000a900460ff1615150361188957600a61186283611f58565b6040516020016118739291906135a3565b60405160208183030381529060405290506118b0565b600a600b60405160200161189e9291906135d2565b60405160208183030381529060405290505b919050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a90613642565b60405180910390fd5b60008190506001600381111561193c5761193b612bc8565b5b6119446112f5565b600381111561195657611955612bc8565b5b14611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d906136ae565b60405180910390fd5b61115c826119a2610a24565b6119ac919061338c565b11156119ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e490613740565b60405180910390fd5b6001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611a9d576001821115611a5257600182611a4b9190613760565b9050611a57565b600090505b6001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600d5481611aab9190613794565b341015611aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae490613822565b60405180910390fd5b611af78383611ec7565b505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b98611dcf565b73ffffffffffffffffffffffffffffffffffffffff16611bb66111b3565b73ffffffffffffffffffffffffffffffffffffffff1614611c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c03906130bf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c72906138b4565b60405180910390fd5b611c8481611e01565b50565b600081611c92611dba565b11158015611ca1575060005482105b8015611cdf575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b60008082905080611cf5611dba565b11611d7b57600054811015611d7a5760006004600083815260200190815260200160002054905060007c0100000000000000000000000000000000000000000000000000000000821603611d78575b60008103611d6e576004600083600190039350838152602001908152602001600020549050611d44565b8092505050611dad565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600033905090565b600090565b611dca8383836120b8565b505050565b600033905090565b611df28383836040518060200160405280600081525061160d565b505050565b6000819050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611ee182826040518060200160405280600081525061247d565b5050565b611ef08484846120b8565b60008373ffffffffffffffffffffffffffffffffffffffff163b14611f5257611f1b8484848461270c565b611f51576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b606060008203611f9f576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506120b3565b600082905060005b60008214611fd1578080611fba906138d4565b915050600a82611fca919061394b565b9150611fa7565b60008167ffffffffffffffff811115611fed57611fec612c64565b5b6040519080825280601f01601f19166020018201604052801561201f5781602001600182028036833780820191505090505b5090505b600085146120ac576001826120389190613760565b9150600a85612047919061397c565b6030612053919061338c565b60f81b818381518110612069576120686139ad565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856120a5919061394b565b9450612023565b8093505050505b919050565b60006120c382611ce6565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461212a576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008573ffffffffffffffffffffffffffffffffffffffff16612183611db2565b73ffffffffffffffffffffffffffffffffffffffff1614806121b257506121b1866121ac611db2565b611afc565b5b806121ef57506121c0611db2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b905080612228576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061223386611df7565b0361226a576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612277868686600161285c565b600061228283611df7565b146122be576006600085815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b61238587611df7565b1717600460008681526020019081526020016000208190555060007c020000000000000000000000000000000000000000000000000000000084160361240d576000600185019050600060046000838152602001908152602001600020540361240b57600054811461240a578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124758686866001612862565b505050505050565b600080549050600061248e85611df7565b036124c5576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083036124ff576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61250c600085838661285c565b600160406001901b178302600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e161257160018514612868565b901b60a042901b61258186611df7565b1717600460008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b14612685575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612635600087848060010195508761270c565b61266b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106125c657826000541461268057600080fd5b6126f0565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210612686575b8160008190555050506127066000858386612862565b50505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612732611db2565b8786866040518563ffffffff1660e01b81526004016127549493929190613a31565b6020604051808303816000875af192505050801561279057506040513d601f19601f8201168201806040525081019061278d9190613a92565b60015b612809573d80600081146127c0576040519150601f19603f3d011682016040523d82523d6000602084013e6127c5565b606091505b506000815103612801576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b50505050565b50505050565b6000819050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6128bb81612886565b81146128c657600080fd5b50565b6000813590506128d8816128b2565b92915050565b6000602082840312156128f4576128f361287c565b5b6000612902848285016128c9565b91505092915050565b60008115159050919050565b6129208161290b565b82525050565b600060208201905061293b6000830184612917565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561297b578082015181840152602081019050612960565b60008484015250505050565b6000601f19601f8301169050919050565b60006129a382612941565b6129ad818561294c565b93506129bd81856020860161295d565b6129c681612987565b840191505092915050565b600060208201905081810360008301526129eb8184612998565b905092915050565b6000819050919050565b612a06816129f3565b8114612a1157600080fd5b50565b600081359050612a23816129fd565b92915050565b600060208284031215612a3f57612a3e61287c565b5b6000612a4d84828501612a14565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a8182612a56565b9050919050565b612a9181612a76565b82525050565b6000602082019050612aac6000830184612a88565b92915050565b612abb81612a76565b8114612ac657600080fd5b50565b600081359050612ad881612ab2565b92915050565b60008060408385031215612af557612af461287c565b5b6000612b0385828601612ac9565b9250506020612b1485828601612a14565b9150509250929050565b612b27816129f3565b82525050565b6000602082019050612b426000830184612b1e565b92915050565b600080600060608486031215612b6157612b6061287c565b5b6000612b6f86828701612ac9565b9350506020612b8086828701612ac9565b9250506040612b9186828701612a14565b9150509250925092565b600060208284031215612bb157612bb061287c565b5b6000612bbf84828501612ac9565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110612c0857612c07612bc8565b5b50565b6000819050612c1982612bf7565b919050565b6000612c2982612c0b565b9050919050565b612c3981612c1e565b82525050565b6000602082019050612c546000830184612c30565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612c9c82612987565b810181811067ffffffffffffffff82111715612cbb57612cba612c64565b5b80604052505050565b6000612cce612872565b9050612cda8282612c93565b919050565b600067ffffffffffffffff821115612cfa57612cf9612c64565b5b612d0382612987565b9050602081019050919050565b82818337600083830152505050565b6000612d32612d2d84612cdf565b612cc4565b905082815260208101848484011115612d4e57612d4d612c5f565b5b612d59848285612d10565b509392505050565b600082601f830112612d7657612d75612c5a565b5b8135612d86848260208601612d1f565b91505092915050565b600060208284031215612da557612da461287c565b5b600082013567ffffffffffffffff811115612dc357612dc2612881565b5b612dcf84828501612d61565b91505092915050565b612de18161290b565b8114612dec57600080fd5b50565b600081359050612dfe81612dd8565b92915050565b60008060408385031215612e1b57612e1a61287c565b5b6000612e2985828601612ac9565b9250506020612e3a85828601612def565b9150509250929050565b600067ffffffffffffffff821115612e5f57612e5e612c64565b5b612e6882612987565b9050602081019050919050565b6000612e88612e8384612e44565b612cc4565b905082815260208101848484011115612ea457612ea3612c5f565b5b612eaf848285612d10565b509392505050565b600082601f830112612ecc57612ecb612c5a565b5b8135612edc848260208601612e75565b91505092915050565b60008060008060808587031215612eff57612efe61287c565b5b6000612f0d87828801612ac9565b9450506020612f1e87828801612ac9565b9350506040612f2f87828801612a14565b925050606085013567ffffffffffffffff811115612f5057612f4f612881565b5b612f5c87828801612eb7565b91505092959194509250565b60008060408385031215612f7f57612f7e61287c565b5b6000612f8d85828601612ac9565b9250506020612f9e85828601612ac9565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612fef57607f821691505b60208210810361300257613001612fa8565b5b50919050565b600060408201905061301d6000830185612a88565b61302a6020830184612a88565b9392505050565b60008151905061304081612dd8565b92915050565b60006020828403121561305c5761305b61287c565b5b600061306a84828501613031565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006130a960208361294c565b91506130b482613073565b602082019050919050565b600060208201905081810360008301526130d88161309c565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026131417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613104565b61314b8683613104565b95508019841693508086168417925050509392505050565b6000819050919050565b600061318861318361317e846129f3565b613163565b6129f3565b9050919050565b6000819050919050565b6131a28361316d565b6131b66131ae8261318f565b848454613111565b825550505050565b600090565b6131cb6131be565b6131d6818484613199565b505050565b5b818110156131fa576131ef6000826131c3565b6001810190506131dc565b5050565b601f82111561323f57613210816130df565b613219846130f4565b81016020851015613228578190505b61323c613234856130f4565b8301826131db565b50505b505050565b600082821c905092915050565b600061326260001984600802613244565b1980831691505092915050565b600061327b8383613251565b9150826002028217905092915050565b61329482612941565b67ffffffffffffffff8111156132ad576132ac612c64565b5b6132b78254612fd7565b6132c28282856131fe565b600060209050601f8311600181146132f557600084156132e3578287015190505b6132ed858261326f565b865550613355565b601f198416613303866130df565b60005b8281101561332b57848901518255600182019150602085019450602081019050613306565b868310156133485784890151613344601f891682613251565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613397826129f3565b91506133a2836129f3565b92508282019050808211156133ba576133b961335d565b5b92915050565b7f4e46542063616e2774206265206d696e74656420616e796d6f72650000000000600082015250565b60006133f6601b8361294c565b9150613401826133c0565b602082019050919050565b60006020820190508181036000830152613425816133e9565b9050919050565b7f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e00600082015250565b6000613462601f8361294c565b915061346d8261342c565b602082019050919050565b6000602082019050818103600083015261349181613455565b9050919050565b600081905092915050565b600081546134b081612fd7565b6134ba8186613498565b945060018216600081146134d557600181146134ea5761351d565b60ff198316865281151582028601935061351d565b6134f3856130df565b60005b83811015613515578154818901526001820191506020810190506134f6565b838801955050505b50505092915050565b600061353182612941565b61353b8185613498565b935061354b81856020860161295d565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b600061358d600583613498565b915061359882613557565b600582019050919050565b60006135af82856134a3565b91506135bb8284613526565b91506135c682613580565b91508190509392505050565b60006135de82856134a3565b91506135ea82846134a3565b91508190509392505050565b7f5265656e7472616e6379204775617264206973207761746368696e6700000000600082015250565b600061362c601c8361294c565b9150613637826135f6565b602082019050919050565b6000602082019050818103600083015261365b8161361f565b9050919050565b7f4d696e74206973206e6f7420796574204c495645000000000000000000000000600082015250565b600061369860148361294c565b91506136a382613662565b602082019050919050565b600060208201905081810360008301526136c78161368b565b9050919050565b7f434d494a20697320534f4c44204f55542e20596f752063616e2067657420796f60008201527f75722062616d626965207468726f756768204f70656e7365612e000000000000602082015250565b600061372a603a8361294c565b9150613735826136ce565b604082019050919050565b600060208201905081810360008301526137598161371d565b9050919050565b600061376b826129f3565b9150613776836129f3565b925082820390508181111561378e5761378d61335d565b5b92915050565b600061379f826129f3565b91506137aa836129f3565b92508282026137b8816129f3565b915082820484148315176137cf576137ce61335d565b5b5092915050565b7f496e636f727265637420616d6f756e74206f6620455448000000000000000000600082015250565b600061380c60178361294c565b9150613817826137d6565b602082019050919050565b6000602082019050818103600083015261383b816137ff565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061389e60268361294c565b91506138a982613842565b604082019050919050565b600060208201905081810360008301526138cd81613891565b9050919050565b60006138df826129f3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036139115761391061335d565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613956826129f3565b9150613961836129f3565b9250826139715761397061391c565b5b828204905092915050565b6000613987826129f3565b9150613992836129f3565b9250826139a2576139a161391c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000613a03826139dc565b613a0d81856139e7565b9350613a1d81856020860161295d565b613a2681612987565b840191505092915050565b6000608082019050613a466000830187612a88565b613a536020830186612a88565b613a606040830185612b1e565b8181036060830152613a7281846139f8565b905095945050505050565b600081519050613a8c816128b2565b92915050565b600060208284031215613aa857613aa761287c565b5b6000613ab684828501613a7d565b9150509291505056fea2646970667358221220d0a396dc0841312ba2e8743fa952dcbfbb561e8b7cbbfea065ad9300be599f4a64736f6c63430008120033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000642c49800000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d616a4a436e4d706158575637565931724b73584761735a685659477273513938637371656844557633567a442f00000000000000000000
-----Decoded View---------------
Arg [0] : _baseURI (string): ipfs://QmajJCnMpaXWV7VY1rKsXGasZhVYGrsQ98csqehDUv3VzD/
Arg [1] : _saleStartTime (uint256): 1680624000
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000000000000000000000000000000000000642c4980
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [3] : 697066733a2f2f516d616a4a436e4d706158575637565931724b73584761735a
Arg [4] : 685659477273513938637371656844557633567a442f00000000000000000000
Deployed Bytecode Sourcemap
48802:3308:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17635:615;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22658:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24726:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24186:474;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16689:315;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48994:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51418:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49220:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52004:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51589:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50790:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22447:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49028:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18314:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47916:103;;;;;;;;;;;;;:::i;:::-;;49056:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47265:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50919:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22827:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49597:246;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49180:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50676:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25002:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49851:209;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51768:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51016:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50068:600;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25381:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48174:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17635:615;17720:4;18035:10;18020:25;;:11;:25;;;;:102;;;;18112:10;18097:25;;:11;:25;;;;18020:102;:179;;;;18189:10;18174:25;;:11;:25;;;;18020:179;18000:199;;17635:615;;;:::o;22658:100::-;22712:13;22745:5;22738:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22658:100;:::o;24726:204::-;24794:7;24819:16;24827:7;24819;:16::i;:::-;24814:64;;24844:34;;;;;;;;;;;;;;24814:64;24898:15;:24;24914:7;24898:24;;;;;;;;;;;;;;;;;;;;;24891:31;;24726:204;;;:::o;24186:474::-;24259:13;24291:27;24310:7;24291:18;:27::i;:::-;24259:61;;24341:5;24335:11;;:2;:11;;;24331:48;;24355:24;;;;;;;;;;;;;;24331:48;24419:5;24396:28;;:19;:17;:19::i;:::-;:28;;;24392:175;;24444:44;24461:5;24468:19;:17;:19::i;:::-;24444:16;:44::i;:::-;24439:128;;24516:35;;;;;;;;;;;;;;24439:128;24392:175;24606:2;24579:15;:24;24595:7;24579:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;24644:7;24640:2;24624:28;;24633:5;24624:28;;;;;;;;;;;;24248:412;24186:474;;:::o;16689:315::-;16742:7;16970:15;:13;:15::i;:::-;16955:12;;16939:13;;:28;:46;16932:53;;16689:315;:::o;48994:25::-;;;;:::o;51418:163::-;51519:4;3592:1;2406:42;3546:43;;;:47;3542:699;;;3833:10;3825:18;;:4;:18;;;3821:85;;51536:37:::1;51555:4;51561:2;51565:7;51536:18;:37::i;:::-;3884:7:::0;;3821:85;2406:42;3966:40;;;4015:4;4022:10;3966:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:157;;;;;2406:42;4062:40;;;4111:4;4118;4062:61;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3966:157;3920:310;;4203:10;4184:30;;;;;;;;;;;:::i;:::-;;;;;;;;3920:310;3542:699;51536:37:::1;51555:4;51561:2;51565:7;51536:18;:37::i;:::-;51418:163:::0;;;;;:::o;49220:45::-;;;;;;;;;;;;;;;;;:::o;52004:103::-;47496:12;:10;:12::i;:::-;47485:23;;:7;:5;:7::i;:::-;:23;;;47477:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52071:10:::1;52063:28;;:36;52092:6;52063:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;52004:103:::0;:::o;51589:171::-;51694:4;3592:1;2406:42;3546:43;;;:47;3542:699;;;3833:10;3825:18;;:4;:18;;;3821:85;;51711:41:::1;51734:4;51740:2;51744:7;51711:22;:41::i;:::-;3884:7:::0;;3821:85;2406:42;3966:40;;;4015:4;4022:10;3966:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:157;;;;;2406:42;4062:40;;;4111:4;4118;4062:61;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3966:157;3920:310;;4203:10;4184:30;;;;;;;;;;;:::i;:::-;;;;;;;;3920:310;3542:699;51711:41:::1;51734:4;51740:2;51744:7;51711:22;:41::i;:::-;51589:171:::0;;;;;:::o;50790:121::-;47496:12;:10;:12::i;:::-;47485:23;;:7;:5;:7::i;:::-;:23;;;47477:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50886:17:::1;50870:13;:33;;;;50790:121:::0;:::o;22447:144::-;22511:7;22554:27;22573:7;22554:18;:27::i;:::-;22531:52;;22447:144;;;:::o;49028:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18314:234::-;18378:7;18430:1;18402:24;18420:5;18402:17;:24::i;:::-;:29;18398:70;;18440:28;;;;;;;;;;;;;;18398:70;13659:13;18486:18;:25;18505:5;18486:25;;;;;;;;;;;;;;;;:54;18479:61;;18314:234;;;:::o;47916:103::-;47496:12;:10;:12::i;:::-;47485:23;;:7;:5;:7::i;:::-;:23;;;47477:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47981:30:::1;48008:1;47981:18;:30::i;:::-;47916:103::o:0;49056:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47265:87::-;47311:7;47338:6;;;;;;;;;;;47331:13;;47265:87;:::o;50919:89::-;47496:12;:10;:12::i;:::-;47485:23;;:7;:5;:7::i;:::-;:23;;;47477:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50991:9:::1;50983:5;:17;;;;50919:89:::0;:::o;22827:104::-;22883:13;22916:7;22909:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22827:104;:::o;49597:246::-;49636:15;49685:13;;49667:15;:31;49664:82;;;49722:12;49715:19;;;;49664:82;49778:13;;49759:15;:32;49756:80;;49815:9;49808:16;;;;49756:80;49597:246;;:::o;49180:31::-;;;;:::o;50676:106::-;47496:12;:10;:12::i;:::-;47485:23;;:7;:5;:7::i;:::-;:23;;;47477:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50763:11:::1;50753:7;:21;;;;;;:::i;:::-;;50676:106:::0;:::o;25002:308::-;25113:19;:17;:19::i;:::-;25101:31;;:8;:31;;;25097:61;;25141:17;;;;;;;;;;;;;;25097:61;25223:8;25171:18;:39;25190:19;:17;:19::i;:::-;25171:39;;;;;;;;;;;;;;;:49;25211:8;25171:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;25283:8;25247:55;;25262:19;:17;:19::i;:::-;25247:55;;;25293:8;25247:55;;;;;;:::i;:::-;;;;;;;;25002:308;;:::o;49851:209::-;47496:12;:10;:12::i;:::-;47485:23;;:7;:5;:7::i;:::-;:23;;;47477:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49128:4:::1;49960:9;49944:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:39;;49936:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;50026:26;50036:3;50042:9;50026;:26::i;:::-;49851:209:::0;;:::o;51768:228::-;51919:4;3592:1;2406:42;3546:43;;;:47;3542:699;;;3833:10;3825:18;;:4;:18;;;3821:85;;51941:47:::1;51964:4;51970:2;51974:7;51983:4;51941:22;:47::i;:::-;3884:7:::0;;3821:85;2406:42;3966:40;;;4015:4;4022:10;3966:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:157;;;;;2406:42;4062:40;;;4111:4;4118;4062:61;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3966:157;3920:310;;4203:10;4184:30;;;;;;;;;;;:::i;:::-;;;;;;;;3920:310;3542:699;51941:47:::1;51964:4;51970:2;51974:7;51983:4;51941:22;:47::i;:::-;51768:228:::0;;;;;;:::o;51016:394::-;51087:13;51121:17;51129:8;51121:7;:17::i;:::-;51113:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;51202:4;51188:18;;:10;;;;;;;;;;;:18;;;51185:218;;51254:7;51263:19;:8;:17;:19::i;:::-;51237:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51223:70;;;;51185:218;51366:7;51375:14;51349:41;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51335:56;;51016:394;;;;:::o;50068:600::-;49526:10;49513:23;;:9;:23;;;49505:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;50164:13:::1;50180:9;50164:25;;50221:9;50208:22;;;;;;;;:::i;:::-;;:9;:7;:9::i;:::-;:22;;;;;;;;:::i;:::-;;;50200:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;49128:4;50290:9;50274:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:39;;50266:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;50418:1;50390:13;:25;50404:10;50390:25;;;;;;;;;;;;;;;;:29;50387:163;;;50444:1;50433:9;:12;50429:82;;;50472:1;50460:9;:13;;;;:::i;:::-;50449:24;;50429:82;;;50507:1;50496:12;;50429:82;50543:1;50515:13;:25;50529:10;50515:25;;;;;;;;;;;;;;;:29;;;;50387:163;50586:5;;50575:8;:16;;;;:::i;:::-;50562:9;:29;;50554:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;50630:30;50640:8;50650:9;50630;:30::i;:::-;50153:515;50068:600:::0;;:::o;25381:164::-;25478:4;25502:18;:25;25521:5;25502:25;;;;;;;;;;;;;;;:35;25528:8;25502:35;;;;;;;;;;;;;;;;;;;;;;;;;25495:42;;25381:164;;;;:::o;48174:201::-;47496:12;:10;:12::i;:::-;47485:23;;:7;:5;:7::i;:::-;:23;;;47477:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48283:1:::1;48263:22;;:8;:22;;::::0;48255:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;48339:28;48358:8;48339:18;:28::i;:::-;48174:201:::0;:::o;26760:273::-;26817:4;26873:7;26854:15;:13;:15::i;:::-;:26;;:66;;;;;26907:13;;26897:7;:23;26854:66;:152;;;;;27005:1;14429:8;26958:17;:26;26976:7;26958:26;;;;;;;;;;;;:43;:48;26854:152;26834:172;;26760:273;;;:::o;19962:1129::-;20029:7;20049:12;20064:7;20049:22;;20132:4;20113:15;:13;:15::i;:::-;:23;20109:915;;20166:13;;20159:4;:20;20155:869;;;20204:14;20221:17;:23;20239:4;20221:23;;;;;;;;;;;;20204:40;;20337:1;14429:8;20310:6;:23;:28;20306:699;;20829:113;20846:1;20836:6;:11;20829:113;;20889:17;:25;20907:6;;;;;;;20889:25;;;;;;;;;;;;20880:34;;20829:113;;;20975:6;20968:13;;;;;;20306:699;20181:843;20155:869;20109:915;21052:31;;;;;;;;;;;;;;19962:1129;;;;:::o;41027:105::-;41087:7;41114:10;41107:17;;41027:105;:::o;16213:92::-;16269:7;16213:92;:::o;25612:170::-;25746:28;25756:4;25762:2;25766:7;25746:9;:28::i;:::-;25612:170;;;:::o;45989:98::-;46042:7;46069:10;46062:17;;45989:98;:::o;25853:185::-;25991:39;26008:4;26014:2;26018:7;25991:39;;;;;;;;;;;;:16;:39::i;:::-;25853:185;;;:::o;23747:148::-;23811:14;23872:5;23862:15;;23747:148;;;:::o;48535:191::-;48609:16;48628:6;;;;;;;;;;;48609:25;;48654:8;48645:6;;:17;;;;;;;;;;;;;;;;;;48709:8;48678:40;;48699:8;48678:40;;;;;;;;;;;;48598:128;48535:191;:::o;27117:104::-;27186:27;27196:2;27200:8;27186:27;;;;;;;;;;;;:9;:27::i;:::-;27117:104;;:::o;26109:396::-;26276:28;26286:4;26292:2;26296:7;26276:9;:28::i;:::-;26337:1;26319:2;:14;;;:19;26315:183;;26358:56;26389:4;26395:2;26399:7;26408:5;26358:30;:56::i;:::-;26353:145;;26442:40;;;;;;;;;;;;;;26353:145;26315:183;26109:396;;;;:::o;43551:723::-;43607:13;43837:1;43828:5;:10;43824:53;;43855:10;;;;;;;;;;;;;;;;;;;;;43824:53;43887:12;43902:5;43887:20;;43918:14;43943:78;43958:1;43950:4;:9;43943:78;;43976:8;;;;;:::i;:::-;;;;44007:2;43999:10;;;;;:::i;:::-;;;43943:78;;;44031:19;44063:6;44053:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44031:39;;44081:154;44097:1;44088:5;:10;44081:154;;44125:1;44115:11;;;;;:::i;:::-;;;44192:2;44184:5;:10;;;;:::i;:::-;44171:2;:24;;;;:::i;:::-;44158:39;;44141:6;44148;44141:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;44221:2;44212:11;;;;;:::i;:::-;;;44081:154;;;44259:6;44245:21;;;;;43551:723;;;;:::o;32019:2654::-;32134:27;32164;32183:7;32164:18;:27::i;:::-;32134:57;;32249:4;32208:45;;32224:19;32208:45;;;32204:86;;32262:28;;;;;;;;;;;;;;32204:86;32303:23;32329:15;:24;32345:7;32329:24;;;;;;;;;;;;;;;;;;;;;32303:50;;32366:22;32415:4;32392:27;;:19;:17;:19::i;:::-;:27;;;:87;;;;32436:43;32453:4;32459:19;:17;:19::i;:::-;32436:16;:43::i;:::-;32392:87;:142;;;;32515:19;:17;:19::i;:::-;32496:38;;:15;:38;;;32392:142;32366:169;;32553:17;32548:66;;32579:35;;;;;;;;;;;;;;32548:66;32654:1;32629:21;32647:2;32629:17;:21::i;:::-;:26;32625:62;;32664:23;;;;;;;;;;;;;;32625:62;32700:43;32722:4;32728:2;32732:7;32741:1;32700:21;:43::i;:::-;32851:1;32813:34;32831:15;32813:17;:34::i;:::-;:39;32809:103;;32876:15;:24;32892:7;32876:24;;;;;;;;;;;;32869:31;;;;;;;;;;;32809:103;33279:18;:24;33298:4;33279:24;;;;;;;;;;;;;;;;33277:26;;;;;;;;;;;;33348:18;:22;33367:2;33348:22;;;;;;;;;;;;;;;;33346:24;;;;;;;;;;;14707:8;14313:3;33729:15;:41;;33687:21;33705:2;33687:17;:21::i;:::-;:84;:128;33641:17;:26;33659:7;33641:26;;;;;;;;;;;:174;;;;33985:1;14707:8;33935:19;:46;:51;33931:626;;34007:19;34039:1;34029:7;:11;34007:33;;34196:1;34162:17;:30;34180:11;34162:30;;;;;;;;;;;;:35;34158:384;;34300:13;;34285:11;:28;34281:242;;34480:19;34447:17;:30;34465:11;34447:30;;;;;;;;;;;:52;;;;34281:242;34158:384;33988:569;33931:626;34604:7;34600:2;34585:27;;34594:4;34585:27;;;;;;;;;;;;34623:42;34644:4;34650:2;34654:7;34663:1;34623:20;:42::i;:::-;32123:2550;;;32019:2654;;;:::o;27594:2246::-;27717:20;27740:13;;27717:36;;27793:1;27768:21;27786:2;27768:17;:21::i;:::-;:26;27764:58;;27803:19;;;;;;;;;;;;;;27764:58;27849:1;27837:8;:13;27833:44;;27859:18;;;;;;;;;;;;;;27833:44;27890:61;27920:1;27924:2;27928:12;27942:8;27890:21;:61::i;:::-;28494:1;13796:2;28465:1;:25;;28464:31;28452:8;:44;28426:18;:22;28445:2;28426:22;;;;;;;;;;;;;;;;:70;;;;;;;;;;;14572:3;28895:29;28922:1;28910:8;:13;28895:14;:29::i;:::-;:56;;14313:3;28832:15;:41;;28790:21;28808:2;28790:17;:21::i;:::-;:84;:162;28739:17;:31;28757:12;28739:31;;;;;;;;;;;:213;;;;28969:20;28992:12;28969:35;;29019:11;29048:8;29033:12;:23;29019:37;;29095:1;29077:2;:14;;;:19;29073:635;;29117:313;29173:12;29169:2;29148:38;;29165:1;29148:38;;;;;;;;;;;;29214:69;29253:1;29257:2;29261:14;;;;;;29277:5;29214:30;:69::i;:::-;29209:174;;29319:40;;;;;;;;;;;;;;29209:174;29425:3;29410:12;:18;29117:313;;29511:12;29494:13;;:29;29490:43;;29525:8;;;29490:43;29073:635;;;29574:119;29630:14;;;;;;29626:2;29605:40;;29622:1;29605:40;;;;;;;;;;;;29688:3;29673:12;:18;29574:119;;29073:635;29738:12;29722:13;:28;;;;28203:1559;;29772:60;29801:1;29805:2;29809:12;29823:8;29772:20;:60::i;:::-;27706:2134;27594:2246;;;:::o;38496:716::-;38659:4;38705:2;38680:45;;;38726:19;:17;:19::i;:::-;38747:4;38753:7;38762:5;38680:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38676:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38980:1;38963:6;:13;:18;38959:235;;39009:40;;;;;;;;;;;;;;38959:235;39152:6;39146:13;39137:6;39133:2;39129:15;39122:38;38676:529;38849:54;;;38839:64;;;:6;:64;;;;38832:71;;;38496:716;;;;;;:::o;39860:159::-;;;;;:::o;40678:158::-;;;;;:::o;23982:142::-;24040:14;24101:5;24091:15;;23982:142;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:118::-;4977:24;4995:5;4977:24;:::i;:::-;4972:3;4965:37;4890:118;;:::o;5014:222::-;5107:4;5145:2;5134:9;5130:18;5122:26;;5158:71;5226:1;5215:9;5211:17;5202:6;5158:71;:::i;:::-;5014:222;;;;:::o;5242:619::-;5319:6;5327;5335;5384:2;5372:9;5363:7;5359:23;5355:32;5352:119;;;5390:79;;:::i;:::-;5352:119;5510:1;5535:53;5580:7;5571:6;5560:9;5556:22;5535:53;:::i;:::-;5525:63;;5481:117;5637:2;5663:53;5708:7;5699:6;5688:9;5684:22;5663:53;:::i;:::-;5653:63;;5608:118;5765:2;5791:53;5836:7;5827:6;5816:9;5812:22;5791:53;:::i;:::-;5781:63;;5736:118;5242:619;;;;;:::o;5867:329::-;5926:6;5975:2;5963:9;5954:7;5950:23;5946:32;5943:119;;;5981:79;;:::i;:::-;5943:119;6101:1;6126:53;6171:7;6162:6;6151:9;6147:22;6126:53;:::i;:::-;6116:63;;6072:117;5867:329;;;;:::o;6202:180::-;6250:77;6247:1;6240:88;6347:4;6344:1;6337:15;6371:4;6368:1;6361:15;6388:114;6470:1;6463:5;6460:12;6450:46;;6476:18;;:::i;:::-;6450:46;6388:114;:::o;6508:129::-;6554:7;6583:5;6572:16;;6589:42;6625:5;6589:42;:::i;:::-;6508:129;;;:::o;6643:::-;6700:9;6733:33;6760:5;6733:33;:::i;:::-;6720:46;;6643:129;;;:::o;6778:145::-;6872:44;6910:5;6872:44;:::i;:::-;6867:3;6860:57;6778:145;;:::o;6929:236::-;7029:4;7067:2;7056:9;7052:18;7044:26;;7080:78;7155:1;7144:9;7140:17;7131:6;7080:78;:::i;:::-;6929:236;;;;:::o;7171:117::-;7280:1;7277;7270:12;7294:117;7403:1;7400;7393:12;7417:180;7465:77;7462:1;7455:88;7562:4;7559:1;7552:15;7586:4;7583:1;7576:15;7603:281;7686:27;7708:4;7686:27;:::i;:::-;7678:6;7674:40;7816:6;7804:10;7801:22;7780:18;7768:10;7765:34;7762:62;7759:88;;;7827:18;;:::i;:::-;7759:88;7867:10;7863:2;7856:22;7646:238;7603:281;;:::o;7890:129::-;7924:6;7951:20;;:::i;:::-;7941:30;;7980:33;8008:4;8000:6;7980:33;:::i;:::-;7890:129;;;:::o;8025:308::-;8087:4;8177:18;8169:6;8166:30;8163:56;;;8199:18;;:::i;:::-;8163:56;8237:29;8259:6;8237:29;:::i;:::-;8229:37;;8321:4;8315;8311:15;8303:23;;8025:308;;;:::o;8339:146::-;8436:6;8431:3;8426;8413:30;8477:1;8468:6;8463:3;8459:16;8452:27;8339:146;;;:::o;8491:425::-;8569:5;8594:66;8610:49;8652:6;8610:49;:::i;:::-;8594:66;:::i;:::-;8585:75;;8683:6;8676:5;8669:21;8721:4;8714:5;8710:16;8759:3;8750:6;8745:3;8741:16;8738:25;8735:112;;;8766:79;;:::i;:::-;8735:112;8856:54;8903:6;8898:3;8893;8856:54;:::i;:::-;8575:341;8491:425;;;;;:::o;8936:340::-;8992:5;9041:3;9034:4;9026:6;9022:17;9018:27;9008:122;;9049:79;;:::i;:::-;9008:122;9166:6;9153:20;9191:79;9266:3;9258:6;9251:4;9243:6;9239:17;9191:79;:::i;:::-;9182:88;;8998:278;8936:340;;;;:::o;9282:509::-;9351:6;9400:2;9388:9;9379:7;9375:23;9371:32;9368:119;;;9406:79;;:::i;:::-;9368:119;9554:1;9543:9;9539:17;9526:31;9584:18;9576:6;9573:30;9570:117;;;9606:79;;:::i;:::-;9570:117;9711:63;9766:7;9757:6;9746:9;9742:22;9711:63;:::i;:::-;9701:73;;9497:287;9282:509;;;;:::o;9797:116::-;9867:21;9882:5;9867:21;:::i;:::-;9860:5;9857:32;9847:60;;9903:1;9900;9893:12;9847:60;9797:116;:::o;9919:133::-;9962:5;10000:6;9987:20;9978:29;;10016:30;10040:5;10016:30;:::i;:::-;9919:133;;;;:::o;10058:468::-;10123:6;10131;10180:2;10168:9;10159:7;10155:23;10151:32;10148:119;;;10186:79;;:::i;:::-;10148:119;10306:1;10331:53;10376:7;10367:6;10356:9;10352:22;10331:53;:::i;:::-;10321:63;;10277:117;10433:2;10459:50;10501:7;10492:6;10481:9;10477:22;10459:50;:::i;:::-;10449:60;;10404:115;10058:468;;;;;:::o;10532:307::-;10593:4;10683:18;10675:6;10672:30;10669:56;;;10705:18;;:::i;:::-;10669:56;10743:29;10765:6;10743:29;:::i;:::-;10735:37;;10827:4;10821;10817:15;10809:23;;10532:307;;;:::o;10845:423::-;10922:5;10947:65;10963:48;11004:6;10963:48;:::i;:::-;10947:65;:::i;:::-;10938:74;;11035:6;11028:5;11021:21;11073:4;11066:5;11062:16;11111:3;11102:6;11097:3;11093:16;11090:25;11087:112;;;11118:79;;:::i;:::-;11087:112;11208:54;11255:6;11250:3;11245;11208:54;:::i;:::-;10928:340;10845:423;;;;;:::o;11287:338::-;11342:5;11391:3;11384:4;11376:6;11372:17;11368:27;11358:122;;11399:79;;:::i;:::-;11358:122;11516:6;11503:20;11541:78;11615:3;11607:6;11600:4;11592:6;11588:17;11541:78;:::i;:::-;11532:87;;11348:277;11287:338;;;;:::o;11631:943::-;11726:6;11734;11742;11750;11799:3;11787:9;11778:7;11774:23;11770:33;11767:120;;;11806:79;;:::i;:::-;11767:120;11926:1;11951:53;11996:7;11987:6;11976:9;11972:22;11951:53;:::i;:::-;11941:63;;11897:117;12053:2;12079:53;12124:7;12115:6;12104:9;12100:22;12079:53;:::i;:::-;12069:63;;12024:118;12181:2;12207:53;12252:7;12243:6;12232:9;12228:22;12207:53;:::i;:::-;12197:63;;12152:118;12337:2;12326:9;12322:18;12309:32;12368:18;12360:6;12357:30;12354:117;;;12390:79;;:::i;:::-;12354:117;12495:62;12549:7;12540:6;12529:9;12525:22;12495:62;:::i;:::-;12485:72;;12280:287;11631:943;;;;;;;:::o;12580:474::-;12648:6;12656;12705:2;12693:9;12684:7;12680:23;12676:32;12673:119;;;12711:79;;:::i;:::-;12673:119;12831:1;12856:53;12901:7;12892:6;12881:9;12877:22;12856:53;:::i;:::-;12846:63;;12802:117;12958:2;12984:53;13029:7;13020:6;13009:9;13005:22;12984:53;:::i;:::-;12974:63;;12929:118;12580:474;;;;;:::o;13060:180::-;13108:77;13105:1;13098:88;13205:4;13202:1;13195:15;13229:4;13226:1;13219:15;13246:320;13290:6;13327:1;13321:4;13317:12;13307:22;;13374:1;13368:4;13364:12;13395:18;13385:81;;13451:4;13443:6;13439:17;13429:27;;13385:81;13513:2;13505:6;13502:14;13482:18;13479:38;13476:84;;13532:18;;:::i;:::-;13476:84;13297:269;13246:320;;;:::o;13572:332::-;13693:4;13731:2;13720:9;13716:18;13708:26;;13744:71;13812:1;13801:9;13797:17;13788:6;13744:71;:::i;:::-;13825:72;13893:2;13882:9;13878:18;13869:6;13825:72;:::i;:::-;13572:332;;;;;:::o;13910:137::-;13964:5;13995:6;13989:13;13980:22;;14011:30;14035:5;14011:30;:::i;:::-;13910:137;;;;:::o;14053:345::-;14120:6;14169:2;14157:9;14148:7;14144:23;14140:32;14137:119;;;14175:79;;:::i;:::-;14137:119;14295:1;14320:61;14373:7;14364:6;14353:9;14349:22;14320:61;:::i;:::-;14310:71;;14266:125;14053:345;;;;:::o;14404:182::-;14544:34;14540:1;14532:6;14528:14;14521:58;14404:182;:::o;14592:366::-;14734:3;14755:67;14819:2;14814:3;14755:67;:::i;:::-;14748:74;;14831:93;14920:3;14831:93;:::i;:::-;14949:2;14944:3;14940:12;14933:19;;14592:366;;;:::o;14964:419::-;15130:4;15168:2;15157:9;15153:18;15145:26;;15217:9;15211:4;15207:20;15203:1;15192:9;15188:17;15181:47;15245:131;15371:4;15245:131;:::i;:::-;15237:139;;14964:419;;;:::o;15389:141::-;15438:4;15461:3;15453:11;;15484:3;15481:1;15474:14;15518:4;15515:1;15505:18;15497:26;;15389:141;;;:::o;15536:93::-;15573:6;15620:2;15615;15608:5;15604:14;15600:23;15590:33;;15536:93;;;:::o;15635:107::-;15679:8;15729:5;15723:4;15719:16;15698:37;;15635:107;;;;:::o;15748:393::-;15817:6;15867:1;15855:10;15851:18;15890:97;15920:66;15909:9;15890:97;:::i;:::-;16008:39;16038:8;16027:9;16008:39;:::i;:::-;15996:51;;16080:4;16076:9;16069:5;16065:21;16056:30;;16129:4;16119:8;16115:19;16108:5;16105:30;16095:40;;15824:317;;15748:393;;;;;:::o;16147:60::-;16175:3;16196:5;16189:12;;16147:60;;;:::o;16213:142::-;16263:9;16296:53;16314:34;16323:24;16341:5;16323:24;:::i;:::-;16314:34;:::i;:::-;16296:53;:::i;:::-;16283:66;;16213:142;;;:::o;16361:75::-;16404:3;16425:5;16418:12;;16361:75;;;:::o;16442:269::-;16552:39;16583:7;16552:39;:::i;:::-;16613:91;16662:41;16686:16;16662:41;:::i;:::-;16654:6;16647:4;16641:11;16613:91;:::i;:::-;16607:4;16600:105;16518:193;16442:269;;;:::o;16717:73::-;16762:3;16717:73;:::o;16796:189::-;16873:32;;:::i;:::-;16914:65;16972:6;16964;16958:4;16914:65;:::i;:::-;16849:136;16796:189;;:::o;16991:186::-;17051:120;17068:3;17061:5;17058:14;17051:120;;;17122:39;17159:1;17152:5;17122:39;:::i;:::-;17095:1;17088:5;17084:13;17075:22;;17051:120;;;16991:186;;:::o;17183:543::-;17284:2;17279:3;17276:11;17273:446;;;17318:38;17350:5;17318:38;:::i;:::-;17402:29;17420:10;17402:29;:::i;:::-;17392:8;17388:44;17585:2;17573:10;17570:18;17567:49;;;17606:8;17591:23;;17567:49;17629:80;17685:22;17703:3;17685:22;:::i;:::-;17675:8;17671:37;17658:11;17629:80;:::i;:::-;17288:431;;17273:446;17183:543;;;:::o;17732:117::-;17786:8;17836:5;17830:4;17826:16;17805:37;;17732:117;;;;:::o;17855:169::-;17899:6;17932:51;17980:1;17976:6;17968:5;17965:1;17961:13;17932:51;:::i;:::-;17928:56;18013:4;18007;18003:15;17993:25;;17906:118;17855:169;;;;:::o;18029:295::-;18105:4;18251:29;18276:3;18270:4;18251:29;:::i;:::-;18243:37;;18313:3;18310:1;18306:11;18300:4;18297:21;18289:29;;18029:295;;;;:::o;18329:1395::-;18446:37;18479:3;18446:37;:::i;:::-;18548:18;18540:6;18537:30;18534:56;;;18570:18;;:::i;:::-;18534:56;18614:38;18646:4;18640:11;18614:38;:::i;:::-;18699:67;18759:6;18751;18745:4;18699:67;:::i;:::-;18793:1;18817:4;18804:17;;18849:2;18841:6;18838:14;18866:1;18861:618;;;;19523:1;19540:6;19537:77;;;19589:9;19584:3;19580:19;19574:26;19565:35;;19537:77;19640:67;19700:6;19693:5;19640:67;:::i;:::-;19634:4;19627:81;19496:222;18831:887;;18861:618;18913:4;18909:9;18901:6;18897:22;18947:37;18979:4;18947:37;:::i;:::-;19006:1;19020:208;19034:7;19031:1;19028:14;19020:208;;;19113:9;19108:3;19104:19;19098:26;19090:6;19083:42;19164:1;19156:6;19152:14;19142:24;;19211:2;19200:9;19196:18;19183:31;;19057:4;19054:1;19050:12;19045:17;;19020:208;;;19256:6;19247:7;19244:19;19241:179;;;19314:9;19309:3;19305:19;19299:26;19357:48;19399:4;19391:6;19387:17;19376:9;19357:48;:::i;:::-;19349:6;19342:64;19264:156;19241:179;19466:1;19462;19454:6;19450:14;19446:22;19440:4;19433:36;18868:611;;;18831:887;;18421:1303;;;18329:1395;;:::o;19730:180::-;19778:77;19775:1;19768:88;19875:4;19872:1;19865:15;19899:4;19896:1;19889:15;19916:191;19956:3;19975:20;19993:1;19975:20;:::i;:::-;19970:25;;20009:20;20027:1;20009:20;:::i;:::-;20004:25;;20052:1;20049;20045:9;20038:16;;20073:3;20070:1;20067:10;20064:36;;;20080:18;;:::i;:::-;20064:36;19916:191;;;;:::o;20113:177::-;20253:29;20249:1;20241:6;20237:14;20230:53;20113:177;:::o;20296:366::-;20438:3;20459:67;20523:2;20518:3;20459:67;:::i;:::-;20452:74;;20535:93;20624:3;20535:93;:::i;:::-;20653:2;20648:3;20644:12;20637:19;;20296:366;;;:::o;20668:419::-;20834:4;20872:2;20861:9;20857:18;20849:26;;20921:9;20915:4;20911:20;20907:1;20896:9;20892:17;20885:47;20949:131;21075:4;20949:131;:::i;:::-;20941:139;;20668:419;;;:::o;21093:181::-;21233:33;21229:1;21221:6;21217:14;21210:57;21093:181;:::o;21280:366::-;21422:3;21443:67;21507:2;21502:3;21443:67;:::i;:::-;21436:74;;21519:93;21608:3;21519:93;:::i;:::-;21637:2;21632:3;21628:12;21621:19;;21280:366;;;:::o;21652:419::-;21818:4;21856:2;21845:9;21841:18;21833:26;;21905:9;21899:4;21895:20;21891:1;21880:9;21876:17;21869:47;21933:131;22059:4;21933:131;:::i;:::-;21925:139;;21652:419;;;:::o;22077:148::-;22179:11;22216:3;22201:18;;22077:148;;;;:::o;22255:874::-;22358:3;22395:5;22389:12;22424:36;22450:9;22424:36;:::i;:::-;22476:89;22558:6;22553:3;22476:89;:::i;:::-;22469:96;;22596:1;22585:9;22581:17;22612:1;22607:166;;;;22787:1;22782:341;;;;22574:549;;22607:166;22691:4;22687:9;22676;22672:25;22667:3;22660:38;22753:6;22746:14;22739:22;22731:6;22727:35;22722:3;22718:45;22711:52;;22607:166;;22782:341;22849:38;22881:5;22849:38;:::i;:::-;22909:1;22923:154;22937:6;22934:1;22931:13;22923:154;;;23011:7;23005:14;23001:1;22996:3;22992:11;22985:35;23061:1;23052:7;23048:15;23037:26;;22959:4;22956:1;22952:12;22947:17;;22923:154;;;23106:6;23101:3;23097:16;23090:23;;22789:334;;22574:549;;22362:767;;22255:874;;;;:::o;23135:390::-;23241:3;23269:39;23302:5;23269:39;:::i;:::-;23324:89;23406:6;23401:3;23324:89;:::i;:::-;23317:96;;23422:65;23480:6;23475:3;23468:4;23461:5;23457:16;23422:65;:::i;:::-;23512:6;23507:3;23503:16;23496:23;;23245:280;23135:390;;;;:::o;23531:155::-;23671:7;23667:1;23659:6;23655:14;23648:31;23531:155;:::o;23692:400::-;23852:3;23873:84;23955:1;23950:3;23873:84;:::i;:::-;23866:91;;23966:93;24055:3;23966:93;:::i;:::-;24084:1;24079:3;24075:11;24068:18;;23692:400;;;:::o;24098:695::-;24376:3;24398:92;24486:3;24477:6;24398:92;:::i;:::-;24391:99;;24507:95;24598:3;24589:6;24507:95;:::i;:::-;24500:102;;24619:148;24763:3;24619:148;:::i;:::-;24612:155;;24784:3;24777:10;;24098:695;;;;;:::o;24799:423::-;24973:3;24995:92;25083:3;25074:6;24995:92;:::i;:::-;24988:99;;25104:92;25192:3;25183:6;25104:92;:::i;:::-;25097:99;;25213:3;25206:10;;24799:423;;;;;:::o;25228:178::-;25368:30;25364:1;25356:6;25352:14;25345:54;25228:178;:::o;25412:366::-;25554:3;25575:67;25639:2;25634:3;25575:67;:::i;:::-;25568:74;;25651:93;25740:3;25651:93;:::i;:::-;25769:2;25764:3;25760:12;25753:19;;25412:366;;;:::o;25784:419::-;25950:4;25988:2;25977:9;25973:18;25965:26;;26037:9;26031:4;26027:20;26023:1;26012:9;26008:17;26001:47;26065:131;26191:4;26065:131;:::i;:::-;26057:139;;25784:419;;;:::o;26209:170::-;26349:22;26345:1;26337:6;26333:14;26326:46;26209:170;:::o;26385:366::-;26527:3;26548:67;26612:2;26607:3;26548:67;:::i;:::-;26541:74;;26624:93;26713:3;26624:93;:::i;:::-;26742:2;26737:3;26733:12;26726:19;;26385:366;;;:::o;26757:419::-;26923:4;26961:2;26950:9;26946:18;26938:26;;27010:9;27004:4;27000:20;26996:1;26985:9;26981:17;26974:47;27038:131;27164:4;27038:131;:::i;:::-;27030:139;;26757:419;;;:::o;27182:245::-;27322:34;27318:1;27310:6;27306:14;27299:58;27391:28;27386:2;27378:6;27374:15;27367:53;27182:245;:::o;27433:366::-;27575:3;27596:67;27660:2;27655:3;27596:67;:::i;:::-;27589:74;;27672:93;27761:3;27672:93;:::i;:::-;27790:2;27785:3;27781:12;27774:19;;27433:366;;;:::o;27805:419::-;27971:4;28009:2;27998:9;27994:18;27986:26;;28058:9;28052:4;28048:20;28044:1;28033:9;28029:17;28022:47;28086:131;28212:4;28086:131;:::i;:::-;28078:139;;27805:419;;;:::o;28230:194::-;28270:4;28290:20;28308:1;28290:20;:::i;:::-;28285:25;;28324:20;28342:1;28324:20;:::i;:::-;28319:25;;28368:1;28365;28361:9;28353:17;;28392:1;28386:4;28383:11;28380:37;;;28397:18;;:::i;:::-;28380:37;28230:194;;;;:::o;28430:410::-;28470:7;28493:20;28511:1;28493:20;:::i;:::-;28488:25;;28527:20;28545:1;28527:20;:::i;:::-;28522:25;;28582:1;28579;28575:9;28604:30;28622:11;28604:30;:::i;:::-;28593:41;;28783:1;28774:7;28770:15;28767:1;28764:22;28744:1;28737:9;28717:83;28694:139;;28813:18;;:::i;:::-;28694:139;28478:362;28430:410;;;;:::o;28846:173::-;28986:25;28982:1;28974:6;28970:14;28963:49;28846:173;:::o;29025:366::-;29167:3;29188:67;29252:2;29247:3;29188:67;:::i;:::-;29181:74;;29264:93;29353:3;29264:93;:::i;:::-;29382:2;29377:3;29373:12;29366:19;;29025:366;;;:::o;29397:419::-;29563:4;29601:2;29590:9;29586:18;29578:26;;29650:9;29644:4;29640:20;29636:1;29625:9;29621:17;29614:47;29678:131;29804:4;29678:131;:::i;:::-;29670:139;;29397:419;;;:::o;29822:225::-;29962:34;29958:1;29950:6;29946:14;29939:58;30031:8;30026:2;30018:6;30014:15;30007:33;29822:225;:::o;30053:366::-;30195:3;30216:67;30280:2;30275:3;30216:67;:::i;:::-;30209:74;;30292:93;30381:3;30292:93;:::i;:::-;30410:2;30405:3;30401:12;30394:19;;30053:366;;;:::o;30425:419::-;30591:4;30629:2;30618:9;30614:18;30606:26;;30678:9;30672:4;30668:20;30664:1;30653:9;30649:17;30642:47;30706:131;30832:4;30706:131;:::i;:::-;30698:139;;30425:419;;;:::o;30850:233::-;30889:3;30912:24;30930:5;30912:24;:::i;:::-;30903:33;;30958:66;30951:5;30948:77;30945:103;;31028:18;;:::i;:::-;30945:103;31075:1;31068:5;31064:13;31057:20;;30850:233;;;:::o;31089:180::-;31137:77;31134:1;31127:88;31234:4;31231:1;31224:15;31258:4;31255:1;31248:15;31275:185;31315:1;31332:20;31350:1;31332:20;:::i;:::-;31327:25;;31366:20;31384:1;31366:20;:::i;:::-;31361:25;;31405:1;31395:35;;31410:18;;:::i;:::-;31395:35;31452:1;31449;31445:9;31440:14;;31275:185;;;;:::o;31466:176::-;31498:1;31515:20;31533:1;31515:20;:::i;:::-;31510:25;;31549:20;31567:1;31549:20;:::i;:::-;31544:25;;31588:1;31578:35;;31593:18;;:::i;:::-;31578:35;31634:1;31631;31627:9;31622:14;;31466:176;;;;:::o;31648:180::-;31696:77;31693:1;31686:88;31793:4;31790:1;31783:15;31817:4;31814:1;31807:15;31834:98;31885:6;31919:5;31913:12;31903:22;;31834:98;;;:::o;31938:168::-;32021:11;32055:6;32050:3;32043:19;32095:4;32090:3;32086:14;32071:29;;31938:168;;;;:::o;32112:373::-;32198:3;32226:38;32258:5;32226:38;:::i;:::-;32280:70;32343:6;32338:3;32280:70;:::i;:::-;32273:77;;32359:65;32417:6;32412:3;32405:4;32398:5;32394:16;32359:65;:::i;:::-;32449:29;32471:6;32449:29;:::i;:::-;32444:3;32440:39;32433:46;;32202:283;32112:373;;;;:::o;32491:640::-;32686:4;32724:3;32713:9;32709:19;32701:27;;32738:71;32806:1;32795:9;32791:17;32782:6;32738:71;:::i;:::-;32819:72;32887:2;32876:9;32872:18;32863:6;32819:72;:::i;:::-;32901;32969:2;32958:9;32954:18;32945:6;32901:72;:::i;:::-;33020:9;33014:4;33010:20;33005:2;32994:9;32990:18;32983:48;33048:76;33119:4;33110:6;33048:76;:::i;:::-;33040:84;;32491:640;;;;;;;:::o;33137:141::-;33193:5;33224:6;33218:13;33209:22;;33240:32;33266:5;33240:32;:::i;:::-;33137:141;;;;:::o;33284:349::-;33353:6;33402:2;33390:9;33381:7;33377:23;33373:32;33370:119;;;33408:79;;:::i;:::-;33370:119;33528:1;33553:63;33608:7;33599:6;33588:9;33584:22;33553:63;:::i;:::-;33543:73;;33499:127;33284:349;;;;:::o
Swarm Source
ipfs://d0a396dc0841312ba2e8743fa952dcbfbb561e8b7cbbfea065ad9300be599f4a
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 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.